From 8e04019d8ad24dbc74c363f33d2bb8c4501f29ee Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 29 Mar 2024 09:47:46 -0600 Subject: [PATCH 001/145] Feature/query engine improvements (#713) Co-authored-by: dylanholmes <4370153+dylanholmes@users.noreply.github.com> --- CHANGELOG.md | 3 ++ griptape/engines/query/vector_query_engine.py | 39 ++++++++++++------- griptape/templates/engines/query/system.j2 | 23 +++++++++++ griptape/templates/engines/query/user.j2 | 3 ++ .../templates/engines/query/vector_query.j2 | 20 ---------- .../engines/query/test_vector_query_engine.py | 15 ++++--- 6 files changed, 62 insertions(+), 41 deletions(-) create mode 100644 griptape/templates/engines/query/system.j2 create mode 100644 griptape/templates/engines/query/user.j2 delete mode 100644 griptape/templates/engines/query/vector_query.j2 diff --git a/CHANGELOG.md b/CHANGELOG.md index f9df7243a..0966dcc0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed +- Improved RAG performance in `VectorQueryEngine`. + ## [0.24.0] - 2024-03-27 ### Added diff --git a/griptape/engines/query/vector_query_engine.py b/griptape/engines/query/vector_query_engine.py index 85d00c930..ac38a05a3 100644 --- a/griptape/engines/query/vector_query_engine.py +++ b/griptape/engines/query/vector_query_engine.py @@ -5,7 +5,7 @@ from griptape.utils import PromptStack from griptape.engines import BaseQueryEngine from griptape.utils.j2 import J2 -from griptape.rules import Ruleset +from griptape.rules import Ruleset, Rule if TYPE_CHECKING: from griptape.drivers import BaseVectorStoreDriver, BasePromptDriver @@ -16,7 +16,8 @@ class VectorQueryEngine(BaseQueryEngine): answer_token_offset: int = field(default=400, kw_only=True) vector_store_driver: BaseVectorStoreDriver = field(kw_only=True) prompt_driver: BasePromptDriver = field(kw_only=True) - template_generator: J2 = field(default=Factory(lambda: J2("engines/query/vector_query.j2")), kw_only=True) + user_template_generator: J2 = field(default=Factory(lambda: J2("engines/query/user.j2")), kw_only=True) + system_template_generator: J2 = field(default=Factory(lambda: J2("engines/query/system.j2")), kw_only=True) def query( self, @@ -36,34 +37,42 @@ def query( if isinstance(artifact, TextArtifact) ] text_segments = [] - message = "" + user_message = "" + system_message = "" for artifact in artifacts: text_segments.append(artifact.value) - - message = self.template_generator.render( + system_message = self.system_template_generator.render( + rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets), metadata=metadata, - query=query, text_segments=text_segments, - rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets), ) + user_message = self.user_template_generator.render(query=query) + message_token_count = self.prompt_driver.token_count( - PromptStack(inputs=[PromptStack.Input(message, role=PromptStack.USER_ROLE)]) + PromptStack( + inputs=[ + PromptStack.Input(system_message, role=PromptStack.SYSTEM_ROLE), + PromptStack.Input(user_message, role=PromptStack.USER_ROLE), + ] + ) ) if message_token_count + self.answer_token_offset >= tokenizer.max_input_tokens: text_segments.pop() - message = self.template_generator.render( - metadata=metadata, - query=query, - text_segments=text_segments, - rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets), - ) + user_message = self.user_template_generator.render(query=query, text_segments=text_segments) break - return self.prompt_driver.run(PromptStack(inputs=[PromptStack.Input(message, role=PromptStack.USER_ROLE)])) + return self.prompt_driver.run( + PromptStack( + inputs=[ + PromptStack.Input(system_message, role=PromptStack.SYSTEM_ROLE), + PromptStack.Input(user_message, role=PromptStack.USER_ROLE), + ] + ) + ) def upsert_text_artifact(self, artifact: TextArtifact, namespace: Optional[str] = None) -> str: result = self.vector_store_driver.upsert_text_artifact(artifact, namespace=namespace) diff --git a/griptape/templates/engines/query/system.j2 b/griptape/templates/engines/query/system.j2 new file mode 100644 index 000000000..1fefb4fec --- /dev/null +++ b/griptape/templates/engines/query/system.j2 @@ -0,0 +1,23 @@ +You are an expert Q&A system that is trusted around the world. +Always answer the query using the provided context information, and not prior knowledge. +Never directly reference the given context in your answer. +Avoid statements like 'Based on the context, ...' or 'The context information ...' or anything along those lines. +{% if rulesets %} + +{{ rulesets }} +{% endif %} +{% if metadata %} + +Metadata: """ +{{ metadata }} +""" +{% endif %} + +Context information is below. +--------------------- +{% for segment in text_segments %} + +Context segment #{{loop.index}}: +"""{{ segment }}""" +{% endfor %} +--------------------- diff --git a/griptape/templates/engines/query/user.j2 b/griptape/templates/engines/query/user.j2 new file mode 100644 index 000000000..fbac5ceeb --- /dev/null +++ b/griptape/templates/engines/query/user.j2 @@ -0,0 +1,3 @@ +Given the context information and not prior knowledge, answer the query. +Query: {{ query }} +Answer: diff --git a/griptape/templates/engines/query/vector_query.j2 b/griptape/templates/engines/query/vector_query.j2 deleted file mode 100644 index 10860be9d..000000000 --- a/griptape/templates/engines/query/vector_query.j2 +++ /dev/null @@ -1,20 +0,0 @@ -You can answer questions by searching through text segments. Always be truthful. Don't make up facts. Use the below list of text segments to respond to the subsequent query. If the answer cannot be found in the segments, say "I could not find an answer." - -{% if metadata %} -Metadata: """ -{{ metadata }} -""" -{% endif %} -{% for segment in text_segments %} -Text segment: """ -{{ segment }} -""" -{% endfor %} - -Query: {{ query }} -{% if rulesets %} - -{{ rulesets }} -{% endif %} - -Answer: diff --git a/tests/unit/engines/query/test_vector_query_engine.py b/tests/unit/engines/query/test_vector_query_engine.py index 84572c719..17bde6888 100644 --- a/tests/unit/engines/query/test_vector_query_engine.py +++ b/tests/unit/engines/query/test_vector_query_engine.py @@ -33,14 +33,17 @@ def test_upsert_text_artifact(self, engine): assert BaseArtifact.from_json(engine.vector_store_driver.load_entries()[0].meta["artifact"]).value == "foobar" def test_prompt_creation(self, engine): - message = engine.template_generator.render( - metadata="*META*", query="*QUESTION*", text_segments=["*TEXT SEGMENT 1*", "*TEXT SEGMENT 2*"] + system_message = engine.system_template_generator.render( + rulesets=["*RULESET*"], metadata="*META*", text_segments=["*TEXT SEGMENT 1*", "*TEXT SEGMENT 2*"] ) + user_message = engine.user_template_generator.render(query="*QUESTION*") - assert "*META*" in message - assert "*QUESTION*" in message - assert "*TEXT SEGMENT 1*" in message - assert "*TEXT SEGMENT 2*" in message + assert "*RULESET*" in system_message + + assert "*META*" in system_message + assert "*QUESTION*" in user_message + assert "*TEXT SEGMENT 1*" in system_message + assert "*TEXT SEGMENT 2*" in system_message def test_upsert_text_artifacts(self, engine): engine.upsert_text_artifacts(artifacts=[TextArtifact("foobar1"), TextArtifact("foobar2")], namespace="test") From d05fb3cd6a6041c1e4c9b23c239ba2d1f78afc76 Mon Sep 17 00:00:00 2001 From: CJ Kindel Date: Mon, 1 Apr 2024 11:41:38 -0700 Subject: [PATCH 002/145] Cjkindel/api keys (#721) --- CHANGELOG.md | 1 + .../drivers/embedding/azure_openai_embedding_driver.py | 2 +- griptape/drivers/embedding/google_embedding_driver.py | 2 +- griptape/drivers/embedding/openai_embedding_driver.py | 2 +- griptape/drivers/embedding/voyageai_embedding_driver.py | 2 +- .../image_generation/openai_image_generation_driver.py | 2 +- .../drivers/image_query/anthropic_image_query_driver.py | 2 +- griptape/drivers/prompt/anthropic_prompt_driver.py | 2 +- griptape/drivers/prompt/google_prompt_driver.py | 2 +- griptape/drivers/prompt/openai_chat_prompt_driver.py | 2 +- .../drivers/prompt/openai_completion_prompt_driver.py | 2 +- griptape/drivers/vector/redis_vector_store_driver.py | 2 +- griptape/tokenizers/voyageai_tokenizer.py | 2 +- tests/mocks/mock_serializable.py | 1 + tests/unit/config/test_anthropic_structure_config.py | 9 --------- tests/unit/config/test_google_structure_config.py | 8 -------- tests/unit/config/test_openai_structure_config.py | 9 --------- 17 files changed, 14 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0966dcc0b..1e4259317 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved RAG performance in `VectorQueryEngine`. +- **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. ## [0.24.0] - 2024-03-27 diff --git a/griptape/drivers/embedding/azure_openai_embedding_driver.py b/griptape/drivers/embedding/azure_openai_embedding_driver.py index f9c216451..1f91f5a06 100644 --- a/griptape/drivers/embedding/azure_openai_embedding_driver.py +++ b/griptape/drivers/embedding/azure_openai_embedding_driver.py @@ -22,7 +22,7 @@ class AzureOpenAiEmbeddingDriver(OpenAiEmbeddingDriver): azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) - azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) azure_ad_token_provider: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) api_version: str = field(default="2023-05-15", kw_only=True, metadata={"serializable": True}) tokenizer: OpenAiTokenizer = field( diff --git a/griptape/drivers/embedding/google_embedding_driver.py b/griptape/drivers/embedding/google_embedding_driver.py index 3a2ae63d2..3467d3360 100644 --- a/griptape/drivers/embedding/google_embedding_driver.py +++ b/griptape/drivers/embedding/google_embedding_driver.py @@ -18,7 +18,7 @@ class GoogleEmbeddingDriver(BaseEmbeddingDriver): DEFAULT_MODEL = "models/embedding-001" model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True}) - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) task_type: str = field(default="retrieval_document", kw_only=True, metadata={"serializable": True}) title: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) diff --git a/griptape/drivers/embedding/openai_embedding_driver.py b/griptape/drivers/embedding/openai_embedding_driver.py index 891c60c38..676a6209b 100644 --- a/griptape/drivers/embedding/openai_embedding_driver.py +++ b/griptape/drivers/embedding/openai_embedding_driver.py @@ -27,7 +27,7 @@ class OpenAiEmbeddingDriver(BaseEmbeddingDriver): model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True}) base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) organization: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) client: openai.OpenAI = field( default=Factory( diff --git a/griptape/drivers/embedding/voyageai_embedding_driver.py b/griptape/drivers/embedding/voyageai_embedding_driver.py index 51f870a2d..1f1779b50 100644 --- a/griptape/drivers/embedding/voyageai_embedding_driver.py +++ b/griptape/drivers/embedding/voyageai_embedding_driver.py @@ -20,7 +20,7 @@ class VoyageAiEmbeddingDriver(BaseEmbeddingDriver): DEFAULT_MODEL = "voyage-large-2" model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True}) - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) client: Any = field( default=Factory( lambda self: import_optional_dependency("voyageai").Client(api_key=self.api_key), takes_self=True diff --git a/griptape/drivers/image_generation/openai_image_generation_driver.py b/griptape/drivers/image_generation/openai_image_generation_driver.py index e2952b5dc..200cf54bc 100644 --- a/griptape/drivers/image_generation/openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/openai_image_generation_driver.py @@ -34,7 +34,7 @@ class OpenAiImageGenerationDriver(BaseImageGenerationDriver): api_type: str = field(default=openai.api_type, kw_only=True) api_version: Optional[str] = field(default=openai.api_version, kw_only=True, metadata={"serializable": True}) base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) organization: Optional[str] = field(default=openai.organization, kw_only=True, metadata={"serializable": True}) client: openai.OpenAI = field( default=Factory( diff --git a/griptape/drivers/image_query/anthropic_image_query_driver.py b/griptape/drivers/image_query/anthropic_image_query_driver.py index 1ffc24d95..cfb1a1d48 100644 --- a/griptape/drivers/image_query/anthropic_image_query_driver.py +++ b/griptape/drivers/image_query/anthropic_image_query_driver.py @@ -15,7 +15,7 @@ class AnthropicImageQueryDriver(BaseImageQueryDriver): client: Custom `Anthropic` client. """ - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) model: str = field(kw_only=True, metadata={"serializable": True}) client: Any = field( default=Factory( diff --git a/griptape/drivers/prompt/anthropic_prompt_driver.py b/griptape/drivers/prompt/anthropic_prompt_driver.py index cb021b22f..35b411ac5 100644 --- a/griptape/drivers/prompt/anthropic_prompt_driver.py +++ b/griptape/drivers/prompt/anthropic_prompt_driver.py @@ -18,7 +18,7 @@ class AnthropicPromptDriver(BasePromptDriver): tokenizer: Custom `AnthropicTokenizer`. """ - api_key: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + api_key: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) model: str = field(kw_only=True, metadata={"serializable": True}) client: Any = field( default=Factory( diff --git a/griptape/drivers/prompt/google_prompt_driver.py b/griptape/drivers/prompt/google_prompt_driver.py index dcc3e4ecc..b576a440b 100644 --- a/griptape/drivers/prompt/google_prompt_driver.py +++ b/griptape/drivers/prompt/google_prompt_driver.py @@ -24,7 +24,7 @@ class GooglePromptDriver(BasePromptDriver): top_k: Optional value for top_k. """ - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) model: str = field(kw_only=True, metadata={"serializable": True}) model_client: Any = field(default=Factory(lambda self: self._default_model_client(), takes_self=True), kw_only=True) tokenizer: BaseTokenizer = field( diff --git a/griptape/drivers/prompt/openai_chat_prompt_driver.py b/griptape/drivers/prompt/openai_chat_prompt_driver.py index eaff453e7..944ed1456 100644 --- a/griptape/drivers/prompt/openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/openai_chat_prompt_driver.py @@ -35,7 +35,7 @@ class OpenAiChatPromptDriver(BasePromptDriver): """ base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) organization: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) client: openai.OpenAI = field( default=Factory( diff --git a/griptape/drivers/prompt/openai_completion_prompt_driver.py b/griptape/drivers/prompt/openai_completion_prompt_driver.py index 63a2b32ff..cc334ae3d 100644 --- a/griptape/drivers/prompt/openai_completion_prompt_driver.py +++ b/griptape/drivers/prompt/openai_completion_prompt_driver.py @@ -24,7 +24,7 @@ class OpenAiCompletionPromptDriver(BasePromptDriver): """ base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) organization: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) client: openai.OpenAI = field( default=Factory( diff --git a/griptape/drivers/vector/redis_vector_store_driver.py b/griptape/drivers/vector/redis_vector_store_driver.py index ee0d69475..db99725a3 100644 --- a/griptape/drivers/vector/redis_vector_store_driver.py +++ b/griptape/drivers/vector/redis_vector_store_driver.py @@ -31,7 +31,7 @@ class RedisVectorStoreDriver(BaseVectorStoreDriver): host: str = field(kw_only=True, metadata={"serializable": True}) port: int = field(kw_only=True, metadata={"serializable": True}) db: int = field(kw_only=True, default=0, metadata={"serializable": True}) - password: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + password: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) index: str = field(kw_only=True, metadata={"serializable": True}) client: Redis = field( diff --git a/griptape/tokenizers/voyageai_tokenizer.py b/griptape/tokenizers/voyageai_tokenizer.py index 0ac4d31d7..799c64276 100644 --- a/griptape/tokenizers/voyageai_tokenizer.py +++ b/griptape/tokenizers/voyageai_tokenizer.py @@ -18,7 +18,7 @@ class VoyageAiTokenizer(BaseTokenizer): } MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {"voyage": 0} - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) client: Client = field( default=Factory( lambda self: import_optional_dependency("voyageai").Client(api_key=self.api_key), takes_self=True diff --git a/tests/mocks/mock_serializable.py b/tests/mocks/mock_serializable.py index 666cd2b92..4de173b07 100644 --- a/tests/mocks/mock_serializable.py +++ b/tests/mocks/mock_serializable.py @@ -8,3 +8,4 @@ class MockSerializable(SerializableMixin): foo: str = field(default="bar", kw_only=True, metadata={"serializable": True}) bar: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) baz: Optional[list[int]] = field(default=None, kw_only=True, metadata={"serializable": True}) + secret: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) diff --git a/tests/unit/config/test_anthropic_structure_config.py b/tests/unit/config/test_anthropic_structure_config.py index e05ff0d50..5653ddb46 100644 --- a/tests/unit/config/test_anthropic_structure_config.py +++ b/tests/unit/config/test_anthropic_structure_config.py @@ -22,7 +22,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "claude-3-opus-20240229", "top_p": 0.999, "top_k": 250, @@ -31,13 +30,11 @@ def test_to_dict(self, config): "image_query_driver": { "type": "AnthropicImageQueryDriver", "model": "claude-3-opus-20240229", - "api_key": None, "max_tokens": 256, }, "embedding_driver": { "type": "VoyageAiEmbeddingDriver", "model": "voyage-large-2", - "api_key": None, "input_type": "document", }, "vector_store_driver": { @@ -45,7 +42,6 @@ def test_to_dict(self, config): "embedding_driver": { "type": "VoyageAiEmbeddingDriver", "model": "voyage-large-2", - "api_key": None, "input_type": "document", }, }, @@ -60,7 +56,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "claude-3-opus-20240229", "top_p": 0.999, "top_k": 250, @@ -70,7 +65,6 @@ def test_to_dict(self, config): "embedding_driver": { "type": "VoyageAiEmbeddingDriver", "model": "voyage-large-2", - "api_key": None, "input_type": "document", }, }, @@ -84,7 +78,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "claude-3-opus-20240229", "top_p": 0.999, "top_k": 250, @@ -97,7 +90,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "claude-3-opus-20240229", "top_p": 0.999, "top_k": 250, @@ -111,7 +103,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "claude-3-opus-20240229", "top_p": 0.999, "top_k": 250, diff --git a/tests/unit/config/test_google_structure_config.py b/tests/unit/config/test_google_structure_config.py index 113d4a97f..ad9283d02 100644 --- a/tests/unit/config/test_google_structure_config.py +++ b/tests/unit/config/test_google_structure_config.py @@ -21,7 +21,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "gemini-pro", "top_p": None, "top_k": None, @@ -31,7 +30,6 @@ def test_to_dict(self, config): "embedding_driver": { "type": "GoogleEmbeddingDriver", "model": "models/embedding-001", - "api_key": None, "task_type": "retrieval_document", "title": None, }, @@ -40,7 +38,6 @@ def test_to_dict(self, config): "embedding_driver": { "type": "GoogleEmbeddingDriver", "model": "models/embedding-001", - "api_key": None, "task_type": "retrieval_document", "title": None, }, @@ -56,7 +53,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "gemini-pro", "top_p": None, "top_k": None, @@ -66,7 +62,6 @@ def test_to_dict(self, config): "embedding_driver": { "type": "GoogleEmbeddingDriver", "model": "models/embedding-001", - "api_key": None, "task_type": "retrieval_document", "title": None, }, @@ -81,7 +76,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "gemini-pro", "top_p": None, "top_k": None, @@ -94,7 +88,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "gemini-pro", "top_p": None, "top_k": None, @@ -108,7 +101,6 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "api_key": None, "model": "gemini-pro", "top_p": None, "top_k": None, diff --git a/tests/unit/config/test_openai_structure_config.py b/tests/unit/config/test_openai_structure_config.py index 8eaabb27c..60eeed091 100644 --- a/tests/unit/config/test_openai_structure_config.py +++ b/tests/unit/config/test_openai_structure_config.py @@ -18,7 +18,6 @@ def test_to_dict(self, config): "type": "StructureGlobalDriversConfig", "prompt_driver": { "type": "OpenAiChatPromptDriver", - "api_key": None, "base_url": None, "model": "gpt-4", "organization": None, @@ -31,14 +30,12 @@ def test_to_dict(self, config): }, "conversation_memory_driver": None, "embedding_driver": { - "api_key": None, "base_url": None, "model": "text-embedding-3-small", "organization": None, "type": "OpenAiEmbeddingDriver", }, "image_generation_driver": { - "api_key": None, "api_version": None, "base_url": None, "image_size": "512x512", @@ -60,7 +57,6 @@ def test_to_dict(self, config): }, "vector_store_driver": { "embedding_driver": { - "api_key": None, "base_url": None, "model": "text-embedding-3-small", "organization": None, @@ -74,7 +70,6 @@ def test_to_dict(self, config): "query_engine": { "type": "StructureTaskMemoryQueryEngineConfig", "prompt_driver": { - "api_key": None, "base_url": None, "type": "OpenAiChatPromptDriver", "model": "gpt-4", @@ -90,7 +85,6 @@ def test_to_dict(self, config): "type": "LocalVectorStoreDriver", "embedding_driver": { "type": "OpenAiEmbeddingDriver", - "api_key": None, "base_url": None, "organization": None, "model": "text-embedding-3-small", @@ -103,7 +97,6 @@ def test_to_dict(self, config): "type": "StructureTaskMemoryExtractionEngineCsvConfig", "prompt_driver": { "type": "OpenAiChatPromptDriver", - "api_key": None, "base_url": None, "model": "gpt-4", "organization": None, @@ -119,7 +112,6 @@ def test_to_dict(self, config): "type": "StructureTaskMemoryExtractionEngineJsonConfig", "prompt_driver": { "type": "OpenAiChatPromptDriver", - "api_key": None, "base_url": None, "model": "gpt-4", "organization": None, @@ -136,7 +128,6 @@ def test_to_dict(self, config): "type": "StructureTaskMemorySummaryEngineConfig", "prompt_driver": { "type": "OpenAiChatPromptDriver", - "api_key": None, "base_url": None, "model": "gpt-4", "organization": None, From 44dd2b8bb9cd200a7b7ddbe669520d452e561bcf Mon Sep 17 00:00:00 2001 From: Andrew French Date: Mon, 1 Apr 2024 12:22:19 -0700 Subject: [PATCH 003/145] Merge patch v0.24.1 back to dev (#720) Co-authored-by: Collin Dutter Co-authored-by: Vasily Vasinov --- CHANGELOG.md | 8 + .../mixins/actions_subtask_origin_mixin.py | 8 +- griptape/mixins/activity_mixin.py | 4 +- griptape/tasks/actions_subtask.py | 12 +- griptape/tasks/tool_task.py | 4 +- griptape/tasks/toolkit_task.py | 6 +- griptape/tools/aws_iam_client/tool.py | 5 +- griptape/tools/aws_s3_client/tool.py | 6 +- poetry.lock | 166 +----------------- pyproject.toml | 5 +- tests/unit/mixins/test_activity_mixin.py | 2 +- tests/unit/tasks/test_tool_task.py | 2 +- tests/unit/tasks/test_toolkit_task.py | 2 +- 13 files changed, 42 insertions(+), 188 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e4259317..d6f6bf9f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved RAG performance in `VectorQueryEngine`. - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. +## [0.24.1] - 2024-03-28 + +### Fixed +- Fixed boto3 type-checking stub dependency. + +### Changed +- Use `schema` instead of `jsonschema` for JSON validation. + ## [0.24.0] - 2024-03-27 ### Added diff --git a/griptape/mixins/actions_subtask_origin_mixin.py b/griptape/mixins/actions_subtask_origin_mixin.py index a9b441a4b..6caa63b5d 100644 --- a/griptape/mixins/actions_subtask_origin_mixin.py +++ b/griptape/mixins/actions_subtask_origin_mixin.py @@ -29,10 +29,10 @@ def add_subtask(self, subtask: ActionsSubtask) -> ActionsSubtask: ... @abstractmethod - def actions_schema(self) -> dict: + def actions_schema(self) -> Schema: ... - def _actions_schema_for_tools(self, tools: list[BaseTool]) -> dict: + def _actions_schema_for_tools(self, tools: list[BaseTool]) -> Schema: action_schemas = [] for tool in tools: @@ -44,6 +44,4 @@ def _actions_schema_for_tools(self, tools: list[BaseTool]) -> dict: action_schemas.append(action_schema) - actions_schema = Schema(description="JSON schema for an array of actions.", schema=action_schemas) - - return actions_schema.json_schema("Actions Schema") + return Schema(description="JSON schema for an array of actions.", schema=action_schemas) diff --git a/griptape/mixins/activity_mixin.py b/griptape/mixins/activity_mixin.py index 35b9f5dc5..a28a8b412 100644 --- a/griptape/mixins/activity_mixin.py +++ b/griptape/mixins/activity_mixin.py @@ -73,7 +73,7 @@ def activity_description(self, activity: Callable) -> str: else: return Template(getattr(activity, "config")["description"]).render({"_self": self}) - def activity_schema(self, activity: Callable) -> Optional[dict]: + def activity_schema(self, activity: Callable) -> Optional[Schema]: if activity is None or not getattr(activity, "is_activity", False): raise Exception("This method is not an activity.") elif getattr(activity, "config")["schema"]: @@ -81,7 +81,7 @@ def activity_schema(self, activity: Callable) -> Optional[dict]: "values": getattr(activity, "config")["schema"].schema if getattr(activity, "config")["schema"] else {} } - return Schema(full_schema).json_schema("InputSchema") + return Schema(full_schema) else: return None diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index 53cdb02af..e442eebb5 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -2,9 +2,9 @@ import json import re from typing import Optional, TYPE_CHECKING, Callable + +import schema from attr import define, field -from jsonschema.exceptions import ValidationError -from jsonschema.validators import validate from griptape import utils from griptape.utils import remove_null_values_in_dict_recursively from griptape.mixins import ActionsSubtaskOriginMixin @@ -206,7 +206,7 @@ def __init_from_prompt(self, value: str) -> None: actions_list: list = json.loads(data, strict=False) if isinstance(self.origin_task, ActionsSubtaskOriginMixin): - validate(instance=actions_list, schema=self.origin_task.actions_schema()) + self.origin_task.actions_schema().validate(actions_list) for action_object in actions_list: # Load action name; throw exception if the key is not present @@ -250,7 +250,7 @@ def __init_from_prompt(self, value: str) -> None: self.structure.logger.error(f"Subtask {self.origin_task.id}\nSyntax error: {e}") self.actions.append(self.__error_to_action(f"syntax error: {e}")) - except ValidationError as e: + except schema.SchemaError as e: self.structure.logger.error(f"Subtask {self.origin_task.id}\nInvalid action JSON: {e}") self.actions.append(self.__error_to_action(f"Action JSON validation error: {e}")) @@ -277,8 +277,8 @@ def __validate_action(self, action: Action) -> None: raise Exception("Activity not found.") if activity_schema: - validate(instance=action.input, schema=activity_schema) - except ValidationError as e: + activity_schema.validate(action.input) + except schema.SchemaError as e: self.structure.logger.error(f"Subtask {self.origin_task.id}\nInvalid activity input JSON: {e}") self.actions.append(self.__error_to_action(f"Activity input JSON validation error: {e}")) diff --git a/griptape/tasks/tool_task.py b/griptape/tasks/tool_task.py index 8cfc9e477..9321bb6c1 100644 --- a/griptape/tasks/tool_task.py +++ b/griptape/tasks/tool_task.py @@ -3,6 +3,8 @@ import json from typing import Optional, TYPE_CHECKING from attr import define, field +from schema import Schema + from griptape import utils from griptape.artifacts import InfoArtifact, BaseArtifact, ErrorArtifact from griptape.tasks import PromptTask, ActionsSubtask @@ -42,7 +44,7 @@ def default_system_template_generator(self, _: PromptTask) -> str: meta_memory=J2("memory/meta/meta_memory.j2").render(meta_memories=self.meta_memories), ) - def actions_schema(self) -> dict: + def actions_schema(self) -> Schema: return self._actions_schema_for_tools([self.tool]) def run(self) -> BaseArtifact: diff --git a/griptape/tasks/toolkit_task.py b/griptape/tasks/toolkit_task.py index e0a4b0d4b..7b84ce85d 100644 --- a/griptape/tasks/toolkit_task.py +++ b/griptape/tasks/toolkit_task.py @@ -2,6 +2,8 @@ import json from typing import TYPE_CHECKING, Callable, Optional from attr import define, field, Factory +from schema import Schema + from griptape import utils from griptape.artifacts import BaseArtifact, ErrorArtifact from griptape.mixins import ActionsSubtaskOriginMixin @@ -88,7 +90,7 @@ def default_system_template_generator(self, _: PromptTask) -> str: return J2("tasks/toolkit_task/system.j2").render( rulesets=J2("rulesets/rulesets.j2").render(rulesets=self.all_rulesets), action_names=str.join(", ", [tool.name for tool in self.tools]), - actions_schema=utils.minify_json(json.dumps(self.actions_schema())), + actions_schema=utils.minify_json(json.dumps(self.actions_schema().json_schema("Actions Schema"))), meta_memory=J2("memory/meta/meta_memory.j2").render(meta_memories=self.meta_memories), stop_sequence=utils.constants.RESPONSE_STOP_SEQUENCE, ) @@ -103,7 +105,7 @@ def default_user_subtask_template_generator(self, subtask: ActionsSubtask) -> st stop_sequence=utils.constants.RESPONSE_STOP_SEQUENCE, subtask=subtask ) - def actions_schema(self) -> dict: + def actions_schema(self) -> Schema: return self._actions_schema_for_tools(self.tools) def set_default_tools_memory(self, memory: TaskMemory) -> None: diff --git a/griptape/tools/aws_iam_client/tool.py b/griptape/tools/aws_iam_client/tool.py index 52421fefe..78193ec22 100644 --- a/griptape/tools/aws_iam_client/tool.py +++ b/griptape/tools/aws_iam_client/tool.py @@ -1,10 +1,13 @@ from __future__ import annotations +from typing import TYPE_CHECKING from schema import Schema, Literal from attr import define, field, Factory from griptape.artifacts import TextArtifact, ErrorArtifact, ListArtifact from griptape.utils.decorators import activity from griptape.tools import BaseAwsClient -from mypy_boto3_iam import Client + +if TYPE_CHECKING: + from mypy_boto3_iam import Client @define diff --git a/griptape/tools/aws_s3_client/tool.py b/griptape/tools/aws_s3_client/tool.py index d42c7918e..9db5e2728 100644 --- a/griptape/tools/aws_s3_client/tool.py +++ b/griptape/tools/aws_s3_client/tool.py @@ -1,12 +1,14 @@ from __future__ import annotations import io -from typing import Any +from typing import Any, TYPE_CHECKING from schema import Schema, Literal from attr import define, field, Factory from griptape.artifacts import TextArtifact, ErrorArtifact, InfoArtifact, ListArtifact, BlobArtifact from griptape.utils.decorators import activity from griptape.tools import BaseAwsClient -from mypy_boto3_s3 import Client + +if TYPE_CHECKING: + from mypy_boto3_s3 import Client @define diff --git a/poetry.lock b/poetry.lock index 440bb5903..21abd3413 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1943,41 +1943,6 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] -[[package]] -name = "jsonschema" -version = "4.21.1" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -jsonschema-specifications = ">=2023.03.6" -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.12.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, -] - -[package.dependencies] -referencing = ">=0.31.0" - [[package]] name = "justext" version = "3.0.0" @@ -2084,6 +2049,7 @@ files = [ {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, + {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, @@ -3068,7 +3034,6 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -3077,8 +3042,6 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, - {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -3691,21 +3654,6 @@ async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2 hiredis = ["hiredis (>=1.0.0)"] ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] -[[package]] -name = "referencing" -version = "0.32.1" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.32.1-py3-none-any.whl", hash = "sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554"}, - {file = "referencing-0.32.1.tar.gz", hash = "sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - [[package]] name = "regex" version = "2023.12.25" @@ -3894,114 +3842,6 @@ pygments = ">=2.13.0,<3.0.0" [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] -[[package]] -name = "rpds-py" -version = "0.17.1" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, - {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, - {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, - {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, - {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, - {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, - {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, - {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, - {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, - {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, - {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, - {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, - {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, - {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, - {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, - {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, - {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, - {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, - {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, - {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, - {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, - {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, - {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, - {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, - {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, - {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, - {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, - {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, - {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, - {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, - {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, - {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, - {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, - {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, -] - [[package]] name = "rsa" version = "4.9" @@ -5230,4 +5070,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "ef07eee1be3561b15286e81aa1be80606f0b23e1684aa6421939de24e20eaac7" +content-hash = "4eac3f039981703a8c3d3a2d8ead8a9286c6e346e2ba39b0ff77c0e0b0de6aef" diff --git a/pyproject.toml b/pyproject.toml index 7a8b46985..6daa83f45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "griptape" -version = "0.24.0" +version = "0.24.1" description = "Modular Python framework for LLM workflows, tools, memory, and data." authors = ["Griptape "] license = "Apache 2.0" @@ -16,7 +16,6 @@ python = "^3.9" openai = "^1.1.1" attrs = ">=22" jinja2 = ">=3.1.3" -jsonschema = ">=4" marshmallow = ">=3" marshmallow-enum = ">=1.5" tiktoken = ">=0.3" @@ -30,7 +29,6 @@ docker = "^6.1.3" sqlalchemy = "~=1.0" dateparser = "^1.1.8" requests = "^2" -boto3-stubs = {extras = ["bedrock", "iam", "opensearch", "s3", "sagemaker"], version = "^1.34.18"} # drivers cohere = { version = ">=4", optional = true } @@ -152,6 +150,7 @@ ruff = "^0.0.286" black = "^23.7.0" pyright = "^1.1.355" pre-commit = "^3.5.0" +boto3-stubs = {extras = ["bedrock", "iam", "opensearch", "s3", "sagemaker"], version = "^1.34.18"} [tool.black] line-length=120 diff --git a/tests/unit/mixins/test_activity_mixin.py b/tests/unit/mixins/test_activity_mixin.py index 061d616e8..88b1f667d 100644 --- a/tests/unit/mixins/test_activity_mixin.py +++ b/tests/unit/mixins/test_activity_mixin.py @@ -17,7 +17,7 @@ def test_activity_description(self, tool): assert description == f"test description: {tool.foo()}" def test_activity_schema(self, tool): - schema = tool.activity_schema(tool.test) + schema = tool.activity_schema(tool.test).json_schema("InputSchema") assert schema == Schema({"values": tool.test.config["schema"].schema}).json_schema("InputSchema") assert schema["properties"].get("artifact") is None diff --git a/tests/unit/tasks/test_tool_task.py b/tests/unit/tasks/test_tool_task.py index 0f113ed92..b2b2b5fbf 100644 --- a/tests/unit/tasks/test_tool_task.py +++ b/tests/unit/tasks/test_tool_task.py @@ -56,4 +56,4 @@ def test_actions_schema(self): Agent().add_task(task) - assert isinstance(task.actions_schema(), dict) + assert isinstance(task.actions_schema().json_schema("Actions Schema"), dict) diff --git a/tests/unit/tasks/test_toolkit_task.py b/tests/unit/tasks/test_toolkit_task.py index dde256e1a..17ea35e48 100644 --- a/tests/unit/tasks/test_toolkit_task.py +++ b/tests/unit/tasks/test_toolkit_task.py @@ -205,4 +205,4 @@ def test_actions_schema(self): Agent().add_task(task) - assert isinstance(task.actions_schema(), dict) + assert isinstance(task.actions_schema().json_schema("Actions Schema"), dict) From 7582cf828d360647d6d355e33f21ce06d98db5af Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 1 Apr 2024 16:20:49 -0600 Subject: [PATCH 004/145] Improve Tool Task system prompt (#723) --- griptape/templates/tasks/tool_task/system.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/griptape/templates/tasks/tool_task/system.j2 b/griptape/templates/tasks/tool_task/system.j2 index 133fdacfc..eaf858037 100644 --- a/griptape/templates/tasks/tool_task/system.j2 +++ b/griptape/templates/tasks/tool_task/system.j2 @@ -1,4 +1,4 @@ -When appropriate, respond to requests by using the following Action Schema. Your response should be a plain JSON object. If you can't use the Action Schema, say "I don't know how to respond." +When appropriate, respond to requests by using the following Action Schema. Your response should be a plain JSON object that successfully validates against the schema. The schema is provided below. If you can't use the Action Schema, say "I don't know how to respond." Action Schema: {{ action_schema }} From 76e7177adfdf5b1a34417fa43776b7dec73e0411 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 2 Apr 2024 12:56:27 -0700 Subject: [PATCH 005/145] Output single artifact, move value to name (#724) --- griptape/tasks/actions_subtask.py | 4 +--- griptape/tasks/tool_task.py | 6 +++--- tests/unit/tasks/test_tool_task.py | 5 +++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index e442eebb5..e361c86bc 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -93,8 +93,6 @@ def before_run(self) -> None: self.structure.logger.info(f"Subtask {self.id}\n{self.input.to_text()}") def run(self) -> BaseArtifact: - format_output: Callable[[tuple[str, BaseArtifact]], str] = lambda o: f"{o[0]} output: {o[1].to_text()}" - try: if any(a.name == "error" for a in self.actions): errors = [a.input["error"] for a in self.actions if a.name == "error"] @@ -103,7 +101,7 @@ def run(self) -> BaseArtifact: else: results = self.execute_actions(self.actions) - self.output = ListArtifact([TextArtifact(format_output(r)) for r in results]) + self.output = ListArtifact([TextArtifact(name=f"{r[0]} output", value=r[1].to_text()) for r in results]) except Exception as e: self.structure.logger.error(f"Subtask {self.id}\n{e}", exc_info=True) diff --git a/griptape/tasks/tool_task.py b/griptape/tasks/tool_task.py index 9321bb6c1..dbadc3f10 100644 --- a/griptape/tasks/tool_task.py +++ b/griptape/tasks/tool_task.py @@ -6,7 +6,7 @@ from schema import Schema from griptape import utils -from griptape.artifacts import InfoArtifact, BaseArtifact, ErrorArtifact +from griptape.artifacts import InfoArtifact, BaseArtifact, ErrorArtifact, ListArtifact from griptape.tasks import PromptTask, ActionsSubtask from griptape.tools import BaseTool from griptape.utils import J2 @@ -63,8 +63,8 @@ def run(self) -> BaseArtifact: subtask.run() subtask.after_run() - if subtask.output: - self.output = subtask.output + if isinstance(subtask.output, ListArtifact): + self.output = subtask.output[0] else: self.output = InfoArtifact("No tool output") except Exception as e: diff --git a/tests/unit/tasks/test_tool_task.py b/tests/unit/tasks/test_tool_task.py index b2b2b5fbf..ea36709a1 100644 --- a/tests/unit/tasks/test_tool_task.py +++ b/tests/unit/tasks/test_tool_task.py @@ -24,14 +24,15 @@ def test_run_without_memory(self, agent): agent.add_task(task) - assert task.run().to_text() == "MockTool output: ack foobar" + assert task.run().name == "MockTool output" + assert task.run().value == "ack foobar" def test_run_with_memory(self, agent): task = ToolTask(tool=MockTool()) agent.add_task(task) - assert task.run().to_text().startswith('MockTool output: Output of "MockTool.test" was stored in memory') + assert task.run().to_text().startswith('Output of "MockTool.test" was stored in memory') def test_meta_memory(self): memory = defaults.text_task_memory("TestMemory") From af484665c06df2e4a9161f7ce84f1bee42d18041 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 2 Apr 2024 13:12:43 -0700 Subject: [PATCH 006/145] Add minItems to ToolkitTask actions schema (#725) --- griptape/tasks/actions_subtask.py | 3 + griptape/tasks/toolkit_task.py | 5 +- tests/unit/tasks/test_actions_subtask.py | 13 +++ tests/unit/tasks/test_tool_task.py | 129 ++++++++++++++++++++++- tests/unit/tasks/test_toolkit_task.py | 129 ++++++++++++++++++++++- 5 files changed, 276 insertions(+), 3 deletions(-) diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index e361c86bc..bca7f6987 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -206,6 +206,9 @@ def __init_from_prompt(self, value: str) -> None: if isinstance(self.origin_task, ActionsSubtaskOriginMixin): self.origin_task.actions_schema().validate(actions_list) + if not actions_list: + raise schema.SchemaError("Array item count 0 is less than minimum count of 1.") + for action_object in actions_list: # Load action name; throw exception if the key is not present action_tag = action_object["tag"] diff --git a/griptape/tasks/toolkit_task.py b/griptape/tasks/toolkit_task.py index 7b84ce85d..ead020c47 100644 --- a/griptape/tasks/toolkit_task.py +++ b/griptape/tasks/toolkit_task.py @@ -87,10 +87,13 @@ def preprocess(self, structure: Structure) -> ToolkitTask: return self def default_system_template_generator(self, _: PromptTask) -> str: + schema = self.actions_schema().json_schema("Actions Schema") + schema["minItems"] = 1 # The `schema` library doesn't support `minItems` so we must add it manually. + return J2("tasks/toolkit_task/system.j2").render( rulesets=J2("rulesets/rulesets.j2").render(rulesets=self.all_rulesets), action_names=str.join(", ", [tool.name for tool in self.tools]), - actions_schema=utils.minify_json(json.dumps(self.actions_schema().json_schema("Actions Schema"))), + actions_schema=utils.minify_json(json.dumps(schema)), meta_memory=J2("memory/meta/meta_memory.j2").render(meta_memories=self.meta_memories), stop_sequence=utils.constants.RESPONSE_STOP_SEQUENCE, ) diff --git a/tests/unit/tasks/test_actions_subtask.py b/tests/unit/tasks/test_actions_subtask.py index 16894e6c9..a1e697346 100644 --- a/tests/unit/tasks/test_actions_subtask.py +++ b/tests/unit/tasks/test_actions_subtask.py @@ -58,3 +58,16 @@ def test_with_no_action_input(self): assert json_dict[0]["name"] == "MockTool" assert json_dict[0]["path"] == "test_no_schema" assert json_dict[0].get("input") is None + + def test_no_actions(self): + valid_input = "Thought: need to test\n" "Actions: []\n" "<|Response|>: test observation\n" "Answer: test output" + + task = ToolkitTask(tools=[MockTool()]) + Agent().add_task(task) + subtask = task.add_subtask(ActionsSubtask(valid_input)) + json_dict = json.loads(subtask.actions_to_json()) + + assert json_dict[0]["name"] == "error" + assert json_dict[0]["input"] == { + "error": "Action JSON validation error: Array item count 0 is less than minimum count of 1." + } diff --git a/tests/unit/tasks/test_tool_task.py b/tests/unit/tasks/test_tool_task.py index ea36709a1..482fead7a 100644 --- a/tests/unit/tasks/test_tool_task.py +++ b/tests/unit/tasks/test_tool_task.py @@ -10,6 +10,133 @@ class TestToolTask: + TARGET_TOOLS_SCHEMA = { + "description": "JSON schema for an array of actions.", + "type": "array", + "items": { + "anyOf": [ + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description: foo", "const": "test"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description: foo", "const": "test_error"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description", "const": "test_list_output"}, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description", "const": "test_no_schema"}, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description: foo", "const": "test_str_output"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description", "const": "test_without_default_memory"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + ] + }, + "$id": "Actions Schema", + "$schema": "http://json-schema.org/draft-07/schema#", + } + @pytest.fixture def agent(self): output_dict = {"tag": "foo", "name": "MockTool", "path": "test", "input": {"values": {"test": "foobar"}}} @@ -57,4 +184,4 @@ def test_actions_schema(self): Agent().add_task(task) - assert isinstance(task.actions_schema().json_schema("Actions Schema"), dict) + assert task.actions_schema().json_schema("Actions Schema") == self.TARGET_TOOLS_SCHEMA diff --git a/tests/unit/tasks/test_toolkit_task.py b/tests/unit/tasks/test_toolkit_task.py index 17ea35e48..33c0deda8 100644 --- a/tests/unit/tasks/test_toolkit_task.py +++ b/tests/unit/tasks/test_toolkit_task.py @@ -12,6 +12,133 @@ class TestToolkitSubtask: + TARGET_TOOLS_SCHEMA = { + "description": "JSON schema for an array of actions.", + "type": "array", + "items": { + "anyOf": [ + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description: foo", "const": "test"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description: foo", "const": "test_error"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description", "const": "test_list_output"}, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description", "const": "test_no_schema"}, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description: foo", "const": "test_str_output"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + { + "type": "object", + "properties": { + "name": {"const": "MockTool"}, + "path": {"description": "test description", "const": "test_without_default_memory"}, + "input": { + "type": "object", + "properties": { + "values": { + "description": "Test input", + "type": "object", + "properties": {"test": {"type": "string"}}, + "required": ["test"], + "additionalProperties": False, + } + }, + "required": ["values"], + "additionalProperties": False, + }, + "tag": {"description": "Unique tag name for action execution.", "type": "string"}, + }, + "required": ["name", "path", "input", "tag"], + "additionalProperties": False, + }, + ] + }, + "$id": "Actions Schema", + "$schema": "http://json-schema.org/draft-07/schema#", + } + @pytest.fixture def query_engine(self): return VectorQueryEngine( @@ -205,4 +332,4 @@ def test_actions_schema(self): Agent().add_task(task) - assert isinstance(task.actions_schema().json_schema("Actions Schema"), dict) + assert task.actions_schema().json_schema("Actions Schema") == self.TARGET_TOOLS_SCHEMA From b1aaab51c6495f0c2c1d8d4e5d3194479edc30ab Mon Sep 17 00:00:00 2001 From: Vasily Vasinov Date: Tue, 2 Apr 2024 13:49:40 -0700 Subject: [PATCH 007/145] Add FileManager.list_files_from_disk (#726) --- CHANGELOG.md | 3 +++ griptape/tools/file_manager/tool.py | 29 ++++++++++++++++++++++----- tests/unit/tools/test_file_manager.py | 9 +++++++++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6f6bf9f8..204b82099 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added +- `list_files_from_disk` activity to `FileManager` Tool. + ### Changed - Improved RAG performance in `VectorQueryEngine`. - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. diff --git a/griptape/tools/file_manager/tool.py b/griptape/tools/file_manager/tool.py index 678c30eec..ca8760422 100644 --- a/griptape/tools/file_manager/tool.py +++ b/griptape/tools/file_manager/tool.py @@ -1,10 +1,9 @@ from __future__ import annotations - import logging import os from pathlib import Path from attr import define, field, Factory -from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact, BaseArtifact +from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact, BaseArtifact, TextArtifact from griptape.tools import BaseTool from griptape.utils.decorators import activity from griptape.loaders import FileLoader, BaseLoader, PdfLoader, CsvLoader, TextLoader, ImageLoader @@ -54,6 +53,25 @@ def validate_workdir(self, _, workdir: str) -> None: if not Path(workdir).is_absolute(): raise ValueError("workdir has to be absolute absolute") + @activity( + config={ + "description": "Can be used to list files on disk", + "schema": Schema( + {Literal("path", description="Relative path in the POSIX format. For example, 'foo/bar'"): str} + ), + } + ) + def list_files_from_disk(self, params: dict) -> TextArtifact | ErrorArtifact: + path = params["values"]["path"].lstrip("/") + full_path = Path(os.path.join(self.workdir, path)) + + if os.path.exists(full_path): + entries = os.listdir(full_path) + + return TextArtifact("\n".join([e for e in entries])) + else: + return ErrorArtifact("Path not found") + @activity( config={ "description": "Can be used to load files from disk", @@ -61,7 +79,7 @@ def validate_workdir(self, _, workdir: str) -> None: { Literal( "paths", - description="Paths to files to be loaded in the POSIX format. For example, ['foo/bar/file.txt']", + description="Relative paths to files to be loaded in the POSIX format. For example, ['foo/bar/file.txt']", ): [] } ), @@ -71,6 +89,7 @@ def load_files_from_disk(self, params: dict) -> ListArtifact | ErrorArtifact: artifacts = [] for path in params["values"]["paths"]: + path = path.lstrip("/") full_path = Path(os.path.join(self.workdir, path)) extension = path.split(".")[-1] loader = self.loaders.get(extension) or self.default_loader @@ -92,7 +111,7 @@ def load_files_from_disk(self, params: dict) -> ListArtifact | ErrorArtifact: { Literal( "dir_name", - description="Destination directory name on disk in the POSIX format. For example, 'foo/bar'", + description="Relative destination path name on disk in the POSIX format. For example, 'foo/bar'", ): str, Literal("file_name", description="Destination file name. For example, 'baz.txt'"): str, "memory_name": str, @@ -146,7 +165,7 @@ def save_memory_artifacts_to_disk(self, params: dict) -> ErrorArtifact | InfoArt ) def save_content_to_file(self, params: dict) -> ErrorArtifact | InfoArtifact: content = params["values"]["content"] - new_path = params["values"]["path"] + new_path = params["values"]["path"].lstrip("/") full_path = os.path.join(self.workdir, new_path) try: diff --git a/tests/unit/tools/test_file_manager.py b/tests/unit/tools/test_file_manager.py index beab7e1e8..3ecff7e62 100644 --- a/tests/unit/tools/test_file_manager.py +++ b/tests/unit/tools/test_file_manager.py @@ -15,6 +15,15 @@ def test_validate_workdir(self): with pytest.raises(ValueError): FileManager(workdir="foo") + def test_list_files_from_disk(self): + result = FileManager( + input_memory=[defaults.text_task_memory("Memory1")], workdir=os.path.abspath(os.path.dirname(__file__)) + ).list_files_from_disk({"values": {"path": "../../resources"}}) + + assert isinstance(result, TextArtifact) + assert "bitcoin.pdf" in result.value + assert "small.png" in result.value + def test_load_files_from_disk(self): result = FileManager( input_memory=[defaults.text_task_memory("Memory1")], workdir=os.path.abspath(os.path.dirname(__file__)) From f8a7b69923f1ab546b0057837b2dad8b8e1f8c9e Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Wed, 3 Apr 2024 16:37:37 -0500 Subject: [PATCH 008/145] Update default API version for `AzureOpenAiImageGenerationDriver` (#731) --- .../image_generation/azure_openai_image_generation_driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py index 51480407c..885fd451c 100644 --- a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py @@ -24,7 +24,7 @@ class AzureOpenAiImageGenerationDriver(OpenAiImageGenerationDriver): azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) azure_ad_token_provider: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - api_version: str = field(default="2023-12-01-preview", kw_only=True, metadata={"serializable": True}) + api_version: str = field(default="2024-02-01", kw_only=True, metadata={"serializable": True}) client: openai.AzureOpenAI = field( default=Factory( lambda self: openai.AzureOpenAI( From ef764c9db3f0ce617174afadb9b3745903e911f7 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 5 Apr 2024 14:49:45 -0700 Subject: [PATCH 009/145] Improve readme (#727) --- README.md | 147 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 92 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index 4ed4cf8ab..014247ecd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# griptape +![Griptape](https://assets-global.website-files.com/65d658559223871198e78bca/65fb8d85c1ab3c9b858ab18a_Griptape%20logo%20dark.svg) [![PyPI Version](https://img.shields.io/pypi/v/griptape.svg)](https://pypi.python.org/pypi/griptape) [![Tests](https://github.com/griptape-ai/griptape/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/griptape-ai/griptape/actions/workflows/unit-tests.yml) @@ -7,15 +7,60 @@ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Griptape Discord](https://dcbadge.vercel.app/api/server/gnWRz88eym?compact=true&style=flat)](https://discord.gg/gnWRz88eym) -**Griptape** is a modular Python framework for building AI-powered applications that connect securely to your enterprise data and APIs. It offers developers the ability to maintain control and flexibility at every step. +Griptape is a modular Python framework for building AI-powered applications that securely connect to your enterprise data and APIs. It offers developers the ability to maintain control and flexibility at every step. -**Build AI Apps**: Easily compose apps in Python with modular structures and ready-made tools. Use built-in drivers to connect to whichever LLMs and data stores you choose. -**Control Data Access**: Connect securely to data sources with granular access controls, ensuring LLMs stay focused on the information that matters. +## 🛠️ Core Components -**Scale With Your Workload**: Easily deploy and run apps in the cloud, where your data lives. Process data ahead of time or vectorize it on the fly. +### 🏗️ Structures -Using Griptape, you can securely integrate with your internal data stores and APIs. You get to control what data goes into the prompt, and what the LLM is allowed to do with it. +- 🤖 **Agents** consist of a single Task. +- 🔄 **Pipelines** organize a sequence of Tasks so that the output from one Task may flow into the next. +- 🌐 **Workflows** configure Tasks to operate in parallel. + +### 📝 Tasks + +Tasks are the core building blocks within Structures, enabling interaction with Engines, Tools, and other Griptape components. + +### 🔧 Tools + +Tools provide capabilities for LLMs to interact with data and services. Griptape includes a variety of built-in Tools, and makes it easy to create custom Tools. + +### 🧠 Memory + +- 💬 **Conversation Memory** enables LLMs to retain and retrieve information across interactions. +- 🗃️ **Task Memory** keeps large or sensitive Task outputs off the prompt that is sent to the LLM. +- 📊 **Meta Memory** enables passing in additional metadata to the LLM, enhancing the context and relevance of the interaction. + +### 🚗 Drivers + +Drivers facilitate interactions with external resources and services: + +- 🔢 **Prompt and Embedding Drivers** generate vector embeddings from textual inputs. +- 💾 **Vector Store Drivers** manage the storage and retrieval of embeddings. +- 🎨 **Image Generation Drivers** create images from text descriptions. +- 🔎 **Image Query Drivers** query images from text queries. +- 💼 **SQL Drivers** interact with SQL databases. +- 🌐 **Web Scraper Drivers** extract information from web pages. +- 🧠 **Conversation Memory Drivers** manage the storage and retrieval of conversational data. + +### 🚂 Engines + +Engines wrap Drivers and provide use-case-specific functionality: + +- 📊 **Query Engines** execute Retrieval Augmented Generation (RAG) queries. +- 🛠️ **Extraction Engines** extract JSON or CSV data from unstructured text. +- 📝 **Summary Engines** generate summaries from textual content. +- 🖼️ **Image Generation Engines** generate images from textual descriptions. +- 🔎 **Image Query Engines** query images based on textual prompts. + +### 📦 Additional Components + +- 📐 **Rulesets** steer LLM behavior with minimal prompt engineering. +- 🔄 **Loaders** load data from various sources. +- 🏺 **Artifacts** allow for passing data of different types between Griptape components. +- ✂️ **Chunkers** segment texts into manageable pieces for diverse text types. +- 🔢 **Tokenizers** count the number of tokens in a text to not exceed LLM token limits. ## Documentation @@ -38,7 +83,7 @@ pip install "griptape[all]" -U Second, configure an OpenAI client by [getting an API key](https://platform.openai.com/account/api-keys) and adding it to your environment as `OPENAI_API_KEY`. By default, Griptape uses [OpenAI Chat Completions API](https://platform.openai.com/docs/guides/gpt/chat-completions-api) to execute LLM prompts. -With Griptape, you can create *structures*, such as `Agents`, `Pipelines`, and `Workflows`, that are composed of different types of tasks. Let's build a simple creative agent that dynamically uses three tools and moves the data around in short-term memory. +With Griptape, you can create Structures, such as Agents, Pipelines, and Workflows, composed of different types of Tasks. Let's build a simple creative Agent that dynamically uses three tools and moves the data around in Task Memory. ```python from griptape.structures import Agent @@ -57,57 +102,49 @@ agent.run("https://griptape.ai", "griptape.txt") And here is the output: ``` -[11/02/23 15:28:24] INFO ToolkitTask 72b89a905be84245a0563b206795ac73 - Input: Load https://griptape.ai, summarize it, and - store it in a file called griptape.txt. -[11/02/23 15:28:37] INFO Subtask f2cd3cfecaeb4001a0d3eccad32c2d07 - Thought: First, I need to use the WebScraper action to - load the content of the webpage. - - Actions: {"actions": [{"name": "WebScraper", "path": - "get_content", "input": {"values": {"url": - "https://griptape.ai"}}}]} - INFO Subtask f2cd3cfecaeb4001a0d3eccad32c2d07 - Response: Output of "WebScraper.get_content" was - stored in memory with memory_name "TaskMemory" and - artifact_namespace - "c497d83c1d134db694b9994596016320" -[11/02/23 15:28:50] INFO Subtask 0096dac0f0524636be197e06a37f8aa0 - Thought: Now that the webpage content is stored in - memory, I need to use the TaskMemoryClient action - to summarize the content. - Actions: {"actions": [{"name": "TaskMemoryClient", "path": - "summarize", "input": {"values": {"memory_name": - "TaskMemory", "artifact_namespace": - "c497d83c1d134db694b9994596016320"}}}]} -[11/02/23 15:29:06] INFO Subtask 0096dac0f0524636be197e06a37f8aa0 - Response: Output of "TaskMemoryClient.summarize" - was stored in memory with memory_name "TaskMemory" - and artifact_namespace - "77584322d33d40e992da9767d02a9018" -[11/02/23 15:29:25] INFO Subtask 7cc3d96500ce4efdac085c07c7370822 - Thought: Now that the summary is stored in memory, - I need to use the FileManager action to save the - summary to a file named griptape.txt. - Actions: {"actions": [{"name": "FileManager", "path": - "save_memory_artifacts_to_disk", "input": - {"values": {"dir_name": ".", "file_name": - "griptape.txt", "memory_name": "TaskMemory", - "artifact_namespace": - "77584322d33d40e992da9767d02a9018"}}}]} - INFO Subtask 7cc3d96500ce4efdac085c07c7370822 - Response: saved successfully -[11/02/23 15:29:30] INFO ToolkitTask 72b89a905be84245a0563b206795ac73 - Output: The summary of the webpage - https://griptape.ai has been successfully stored in - a file named griptape.txt. +[04/02/24 13:51:09] INFO ToolkitTask 85700ec1b0594e1a9502c0efe7da6ef4 + Input: Load https://griptape.ai, summarize it, and store it in a file called griptape.txt. +[04/02/24 13:51:15] INFO Subtask db6a3e7cb2f549128c358149d340f91c + Thought: First, I need to load the content of the website using the WebScraper action. Then, I will use the TaskMemoryClient action to + summarize the content. Finally, I will save the summarized content to a file using the FileManager action. + Actions: [ + { + "name": "WebScraper", + "path": "get_content", + "input": { + "values": { + "url": "https://griptape.ai" + } + }, + "tag": "load_website_content" + } + ] +[04/02/24 13:51:16] INFO Subtask db6a3e7cb2f549128c358149d340f91c + Response: Output of "WebScraper.get_content" was stored in memory with memory_name "TaskMemory" and artifact_namespace + "752b38bb86da4baabdbd9f444eb4a0d1" +[04/02/24 13:51:19] INFO Subtask c3edba87ebf845d4b85e3a791f8fde8d + Thought: Now that the website content is loaded into memory, I need to summarize it using the TaskMemoryClient action. + Actions: [{"tag": "summarize_content", "name": "TaskMemoryClient", "path": "summarize", "input": {"values": {"memory_name": "TaskMemory", + "artifact_namespace": "752b38bb86da4baabdbd9f444eb4a0d1"}}}] +[04/02/24 13:51:25] INFO Subtask c3edba87ebf845d4b85e3a791f8fde8d + Response: Output of "TaskMemoryClient.summarize" was stored in memory with memory_name "TaskMemory" and artifact_namespace + "c4f131c201f147dcab07be3925b46294" +[04/02/24 13:51:33] INFO Subtask 06fe01ca64a744b38a8c08eb152aaacb + Thought: Now that the content has been summarized and stored in memory, I need to save this summarized content to a file named 'griptape.txt' + using the FileManager action. + Actions: [{"tag": "save_summarized_content", "name": "FileManager", "path": "save_memory_artifacts_to_disk", "input": {"values": {"dir_name": + ".", "file_name": "griptape.txt", "memory_name": "TaskMemory", "artifact_namespace": "c4f131c201f147dcab07be3925b46294"}}}] + INFO Subtask 06fe01ca64a744b38a8c08eb152aaacb + Response: saved successfully +[04/02/24 13:51:35] INFO ToolkitTask 85700ec1b0594e1a9502c0efe7da6ef4 + Output: The summarized content of the website https://griptape.ai has been successfully saved to a file named 'griptape.txt'. ``` -During the run, the Griptape Agent loaded a webpage with a **Tool**, stored its full content in **Tool Memory**, queried it to answer the original question, and finally saved the answer to a file. +During the run, the Griptape Agent loaded a webpage with a **Tool**, stored its full content in **Task Memory**, queried it to answer the original question, and finally saved the answer to a file. The important thing to note here is that no matter how big the webpage is it can never blow up the prompt token limit because the full content of the page never goes back to the LLM. Additionally, no data from the subsequent subtasks were returned back to the prompt either. So, how does it work? -All tools have the `off_prompt` property enabled be default. Disabling it (`off_prompt=False`) will force the framework to return all tool outputs directly to the LLM prompt. `TaskMemoryClient` requires the user to set this property explicitly for usability reasons. In the above example, we set `off_prompt` to `True`, which means that the LLM can never see the data it manipulates, but can send it to other tools. +All Tools have the `off_prompt` property enabled be default. Disabling it (`off_prompt=False`) will force the framework to return all tool outputs directly to the LLM prompt. `TaskMemoryClient` requires the user to set this property explicitly for usability reasons. In the above example, we set `off_prompt` to `True`, which means that the LLM can never see the data it manipulates, but can send it to other Tools. [Check out our docs](https://docs.griptape.ai/latest/griptape-framework/structures/prompt-drivers/) to learn more about how to use Griptape with other LLM providers like Anthropic, Claude, Hugging Face, and Azure. @@ -125,9 +162,9 @@ If you have identified a bug, want to propose a new feature, or have a question, ### New Griptape Tools -Griptape's extensibility allows anyone to develop and distribute tools independently. With rare exceptions for tools providing broadly applicable functionality, new Griptape tools should be managed as their own projects and not submitted to the core framework. Pull requests for new tools (unless addressing an [existing issue](https://github.com/griptape-ai/griptape/issues)) will be closed. +Griptape's extensibility allows anyone to develop and distribute tools independently. With rare exceptions for Tools providing broadly applicable functionality, new Griptape Tools should be managed as their own projects and not submitted to the core framework. Pull requests for new tools (unless addressing an [existing issue](https://github.com/griptape-ai/griptape/issues)) will be closed. -The [Griptape Tool Template](https://github.com/griptape-ai/tool-template) provides the recommended structure, step-by-step instructions, basic automation, and usage examples for new tools. In the Template, select **Use this template** then **Create a new repository** to begin a new tool project. +The [Griptape Tool Template](https://github.com/griptape-ai/tool-template) provides the recommended structure, step-by-step instructions, basic automation, and usage examples for new Tools. In the Template, select **Use this template** then **Create a new repository** to begin a new Tool project. ### Submitting Pull Requests From 44b0653bc7841cceab3e6b5ba8696ef4514be2d9 Mon Sep 17 00:00:00 2001 From: Andrew French Date: Mon, 8 Apr 2024 11:53:18 -0700 Subject: [PATCH 010/145] Backmerge `main` to `dev` for v0.24.2 (#733) Co-authored-by: Collin Dutter Co-authored-by: Vasily Vasinov --- CHANGELOG.md | 6 ++++++ griptape/tools/file_manager/tool.py | 2 +- pyproject.toml | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 204b82099..4cf6da091 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,12 +13,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved RAG performance in `VectorQueryEngine`. - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. +## [0.24.2] - 2024-04-04 + +- Fixed FileManager.load_files_from_disk schema. + ## [0.24.1] - 2024-03-28 ### Fixed + - Fixed boto3 type-checking stub dependency. ### Changed + - Use `schema` instead of `jsonschema` for JSON validation. ## [0.24.0] - 2024-03-27 diff --git a/griptape/tools/file_manager/tool.py b/griptape/tools/file_manager/tool.py index ca8760422..7c1d4bd8a 100644 --- a/griptape/tools/file_manager/tool.py +++ b/griptape/tools/file_manager/tool.py @@ -80,7 +80,7 @@ def list_files_from_disk(self, params: dict) -> TextArtifact | ErrorArtifact: Literal( "paths", description="Relative paths to files to be loaded in the POSIX format. For example, ['foo/bar/file.txt']", - ): [] + ): list } ), } diff --git a/pyproject.toml b/pyproject.toml index 6daa83f45..6755f02c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "griptape" -version = "0.24.1" +version = "0.24.2" description = "Modular Python framework for LLM workflows, tools, memory, and data." authors = ["Griptape "] license = "Apache 2.0" From c9edaffda2305377601fbc67387b12e925938298 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Tue, 9 Apr 2024 23:39:44 +0200 Subject: [PATCH 011/145] Remove file reading responsibility from loaders (#737) --- CHANGELOG.md | 5 + griptape/loaders/__init__.py | 2 - griptape/loaders/base_loader.py | 21 +++- griptape/loaders/base_text_loader.py | 21 ++-- griptape/loaders/csv_loader.py | 46 ++++--- griptape/loaders/dataframe_loader.py | 24 ++-- griptape/loaders/email_loader.py | 20 +-- griptape/loaders/file_loader.py | 43 ------- griptape/loaders/image_loader.py | 15 +-- griptape/loaders/pdf_loader.py | 38 +++--- griptape/loaders/sql_loader.py | 16 +-- griptape/loaders/text_loader.py | 26 ++-- griptape/loaders/web_loader.py | 22 +--- griptape/tools/file_manager/tool.py | 13 +- griptape/tools/web_scraper/tool.py | 6 +- griptape/utils/hash.py | 8 ++ tests/unit/loaders/conftest.py | 30 +++++ tests/unit/loaders/test_csv_loader.py | 92 +++++++------- tests/unit/loaders/test_dataframe_loader.py | 4 +- tests/unit/loaders/test_file_loader.py | 50 -------- tests/unit/loaders/test_image_loader.py | 129 +++++++------------- tests/unit/loaders/test_pdf_loader.py | 40 +++--- tests/unit/loaders/test_sql_loader.py | 5 +- tests/unit/loaders/test_text_loader.py | 60 ++++----- tests/unit/loaders/test_web_loader.py | 5 +- tests/unit/tools/test_file_manager.py | 7 +- 26 files changed, 317 insertions(+), 431 deletions(-) delete mode 100644 griptape/loaders/file_loader.py create mode 100644 tests/unit/loaders/conftest.py delete mode 100644 tests/unit/loaders/test_file_loader.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cf6da091..98aa397b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved RAG performance in `VectorQueryEngine`. - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. +- **BREAKING**: Remove `FileLoader`. +- **BREAKING**: `CsvLoader` no longer accepts `str` file paths as a source. It will now accept the content of the CSV file as a `str` or `bytes` object. +- **BREAKING**: `PdfLoader` no longer accepts `str` file content, `Path` file paths or `IO` objects as sources. Instead, it will only accept the content of the PDF file as a `bytes` object. +- **BREAKING**: `TextLoader` no longer accepts `Path` file paths as a source. It will now accept the content of the text file as a `str` or `bytes` object. +- **BREAKING**: `FileManager.default_loader` is now `None` by default. ## [0.24.2] - 2024-04-04 diff --git a/griptape/loaders/__init__.py b/griptape/loaders/__init__.py index 0c9bb70a0..622ed0c1c 100644 --- a/griptape/loaders/__init__.py +++ b/griptape/loaders/__init__.py @@ -6,7 +6,6 @@ from .sql_loader import SqlLoader from .csv_loader import CsvLoader from .dataframe_loader import DataFrameLoader -from .file_loader import FileLoader from .email_loader import EmailLoader from .image_loader import ImageLoader @@ -20,7 +19,6 @@ "SqlLoader", "CsvLoader", "DataFrameLoader", - "FileLoader", "EmailLoader", "ImageLoader", ] diff --git a/griptape/loaders/base_loader.py b/griptape/loaders/base_loader.py index 547027c84..531ec23b5 100644 --- a/griptape/loaders/base_loader.py +++ b/griptape/loaders/base_loader.py @@ -8,6 +8,8 @@ from attr import define, field, Factory from griptape.artifacts import BaseArtifact +from griptape.utils.futures import execute_futures_dict +from griptape.utils.hash import bytes_to_hash, str_to_hash @define @@ -18,8 +20,23 @@ class BaseLoader(ABC): def load(self, source: Any, *args, **kwargs) -> BaseArtifact | Sequence[BaseArtifact]: ... - @abstractmethod def load_collection( self, sources: list[Any], *args, **kwargs ) -> Mapping[str, BaseArtifact | Sequence[BaseArtifact | Sequence[BaseArtifact]]]: - ... + # Create a dictionary before actually submitting the jobs to the executor + # to avoid duplicate work. + sources_by_key = {self.to_key(source): source for source in sources} + return execute_futures_dict( + { + key: self.futures_executor.submit(self.load, source, *args, **kwargs) + for key, source in sources_by_key.items() + } + ) + + def to_key(self, source: Any, *args, **kwargs) -> str: + if isinstance(source, bytes): + return bytes_to_hash(source) + elif isinstance(source, str): + return str_to_hash(source) + else: + return str_to_hash(str(source)) diff --git a/griptape/loaders/base_text_loader.py b/griptape/loaders/base_text_loader.py index 14d608f03..f09b57902 100644 --- a/griptape/loaders/base_text_loader.py +++ b/griptape/loaders/base_text_loader.py @@ -1,12 +1,12 @@ from __future__ import annotations from abc import ABC -from typing import Optional +from typing import Any, Optional, Union, cast from attrs import define, field, Factory -from pathlib import Path from griptape.artifacts import TextArtifact +from griptape.artifacts.error_artifact import ErrorArtifact from griptape.chunkers import TextChunker, BaseChunker from griptape.drivers import BaseEmbeddingDriver from griptape.loaders import BaseLoader @@ -33,19 +33,18 @@ class BaseTextLoader(BaseLoader, ABC): embedding_driver: Optional[BaseEmbeddingDriver] = field(default=None, kw_only=True) encoding: str = field(default="utf-8", kw_only=True) - def _text_to_artifacts(self, text: str | Path) -> list[TextArtifact]: - artifacts = [] + def load_collection(self, sources: list[Any], *args, **kwargs) -> dict[str, ErrorArtifact | list[TextArtifact]]: + return cast( + dict[str, Union[ErrorArtifact, list[TextArtifact]]], super().load_collection(sources, *args, **kwargs) + ) - if isinstance(text, Path): - with open(text, encoding=self.encoding) as file: - body = file.read() - else: - body = text + def _text_to_artifacts(self, text: str) -> list[TextArtifact]: + artifacts = [] if self.chunker: - chunks = self.chunker.chunk(body) + chunks = self.chunker.chunk(text) else: - chunks = [TextArtifact(body)] + chunks = [TextArtifact(text)] if self.embedding_driver: for chunk in chunks: diff --git a/griptape/loaders/csv_loader.py b/griptape/loaders/csv_loader.py index 0784c10ed..72fdcc73a 100644 --- a/griptape/loaders/csv_loader.py +++ b/griptape/loaders/csv_loader.py @@ -1,10 +1,11 @@ +from __future__ import annotations import csv -from typing import Optional +from io import StringIO +from typing import Optional, Union, cast from attr import define, field -from griptape import utils -from griptape.artifacts import CsvRowArtifact +from griptape.artifacts import CsvRowArtifact, ErrorArtifact from griptape.drivers import BaseEmbeddingDriver from griptape.loaders import BaseLoader @@ -13,27 +14,34 @@ class CsvLoader(BaseLoader): embedding_driver: Optional[BaseEmbeddingDriver] = field(default=None, kw_only=True) delimiter: str = field(default=",", kw_only=True) + encoding: str = field(default="utf-8", kw_only=True) - def load(self, source: str, *args, **kwargs) -> list[CsvRowArtifact]: - return self._load_file(source) - - def load_collection(self, sources: list[str], *args, **kwargs) -> dict[str, list[CsvRowArtifact]]: - return utils.execute_futures_dict( - {utils.str_to_hash(source): self.futures_executor.submit(self._load_file, source) for source in sources} - ) - - def _load_file(self, filename: str) -> list[CsvRowArtifact]: + def load(self, source: bytes | str, *args, **kwargs) -> ErrorArtifact | list[CsvRowArtifact]: artifacts = [] - with open(filename, encoding="utf-8") as csv_file: - reader = csv.DictReader(csv_file, delimiter=self.delimiter) - chunks = [CsvRowArtifact(row) for row in reader] + if isinstance(source, bytes): + try: + source = source.decode(encoding=self.encoding) + except UnicodeDecodeError: + return ErrorArtifact(f"Failed to decode bytes to string using encoding: {self.encoding}") + elif isinstance(source, (bytearray, memoryview)): + return ErrorArtifact(f"Unsupported source type: {type(source)}") - if self.embedding_driver: - for chunk in chunks: - chunk.generate_embedding(self.embedding_driver) + reader = csv.DictReader(StringIO(source), delimiter=self.delimiter) + chunks = [CsvRowArtifact(row) for row in reader] + if self.embedding_driver: for chunk in chunks: - artifacts.append(chunk) + chunk.generate_embedding(self.embedding_driver) + + for chunk in chunks: + artifacts.append(chunk) return artifacts + + def load_collection( + self, sources: list[bytes | str], *args, **kwargs + ) -> dict[str, ErrorArtifact | list[CsvRowArtifact]]: + return cast( + dict[str, Union[ErrorArtifact, list[CsvRowArtifact]]], super().load_collection(sources, *args, **kwargs) + ) diff --git a/griptape/loaders/dataframe_loader.py b/griptape/loaders/dataframe_loader.py index 7a7f75454..1c652d8d2 100644 --- a/griptape/loaders/dataframe_loader.py +++ b/griptape/loaders/dataframe_loader.py @@ -1,14 +1,14 @@ from __future__ import annotations -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, cast from attr import define, field -from griptape import utils from griptape.artifacts import CsvRowArtifact from griptape.drivers import BaseEmbeddingDriver from griptape.loaders import BaseLoader from griptape.utils import import_optional_dependency +from griptape.utils.hash import str_to_hash if TYPE_CHECKING: from pandas import DataFrame @@ -19,20 +19,9 @@ class DataFrameLoader(BaseLoader): embedding_driver: Optional[BaseEmbeddingDriver] = field(default=None, kw_only=True) def load(self, source: DataFrame, *args, **kwargs) -> list[CsvRowArtifact]: - return self._load_file(source) - - def load_collection(self, sources: list[DataFrame], *args, **kwargs) -> dict[str, list[CsvRowArtifact]]: - return utils.execute_futures_dict( - { - self._dataframe_to_hash(source): self.futures_executor.submit(self._load_file, source) - for source in sources - } - ) - - def _load_file(self, dataframe: DataFrame) -> list[CsvRowArtifact]: artifacts = [] - chunks = [CsvRowArtifact(row) for row in dataframe.to_dict(orient="records")] + chunks = [CsvRowArtifact(row) for row in source.to_dict(orient="records")] if self.embedding_driver: for chunk in chunks: @@ -43,7 +32,10 @@ def _load_file(self, dataframe: DataFrame) -> list[CsvRowArtifact]: return artifacts - def _dataframe_to_hash(self, dataframe: DataFrame) -> str: + def load_collection(self, sources: list[DataFrame], *args, **kwargs) -> dict[str, list[CsvRowArtifact]]: + return cast(dict[str, list[CsvRowArtifact]], super().load_collection(sources, *args, **kwargs)) + + def to_key(self, source: DataFrame, *args, **kwargs) -> str: hash_pandas_object = import_optional_dependency("pandas.core.util.hashing").hash_pandas_object - return utils.str_to_hash(str(hash_pandas_object(dataframe, index=True).values)) + return str_to_hash(str(hash_pandas_object(source, index=True).values)) diff --git a/griptape/loaders/email_loader.py b/griptape/loaders/email_loader.py index 339402dff..dbb6f3afe 100644 --- a/griptape/loaders/email_loader.py +++ b/griptape/loaders/email_loader.py @@ -1,12 +1,12 @@ from __future__ import annotations -from typing import Optional +from typing import Optional, Union, cast import logging import imaplib from attr import astuple, define, field -from griptape.utils import execute_futures_dict, import_optional_dependency, str_to_hash +from griptape.utils import import_optional_dependency from griptape.artifacts import ErrorArtifact, ListArtifact, TextArtifact from griptape.loaders import BaseLoader @@ -34,19 +34,8 @@ class EmailQuery: password: str = field(kw_only=True) def load(self, source: EmailQuery, *args, **kwargs) -> ListArtifact | ErrorArtifact: - return self._retrieve_email(source) - - def load_collection(self, sources: list[EmailQuery], *args, **kwargs) -> dict[str, ListArtifact | ErrorArtifact]: - return execute_futures_dict( - { - str_to_hash(str(source)): self.futures_executor.submit(self._retrieve_email, source) - for source in set(sources) - } - ) - - def _retrieve_email(self, query: EmailQuery) -> ListArtifact | ErrorArtifact: mailparser = import_optional_dependency("mailparser") - label, key, search_criteria, max_count = astuple(query) + label, key, search_criteria, max_count = astuple(source) artifacts = [] try: @@ -88,3 +77,6 @@ def _retrieve_email(self, query: EmailQuery) -> ListArtifact | ErrorArtifact: def _count_messages(self, message_numbers: bytes): return len(list(filter(None, message_numbers.decode().split(" ")))) + + def load_collection(self, sources: list[EmailQuery], *args, **kwargs) -> dict[str, ListArtifact | ErrorArtifact]: + return cast(dict[str, Union[ListArtifact, ErrorArtifact]], super().load_collection(sources, *args, **kwargs)) diff --git a/griptape/loaders/file_loader.py b/griptape/loaders/file_loader.py deleted file mode 100644 index 5705b0a9c..000000000 --- a/griptape/loaders/file_loader.py +++ /dev/null @@ -1,43 +0,0 @@ -from __future__ import annotations - -import os -from typing import Optional - -from pathlib import Path -from attr import define, field - -from griptape import utils -from griptape.artifacts import BlobArtifact, TextArtifact, ErrorArtifact -from griptape.loaders import BaseLoader - - -@define -class FileLoader(BaseLoader): - encoding: Optional[str] = field(default=None, kw_only=True) - - def load(self, source: str | Path, *args, **kwargs) -> TextArtifact | BlobArtifact | ErrorArtifact: - return self.file_to_artifact(source) - - def load_collection( - self, sources: list[str | Path], *args, **kwargs - ) -> dict[str, TextArtifact | BlobArtifact | ErrorArtifact]: - return utils.execute_futures_dict( - { - utils.str_to_hash(str(source)): self.futures_executor.submit(self.file_to_artifact, source) - for source in sources - } - ) - - def file_to_artifact(self, path: str | Path) -> TextArtifact | BlobArtifact | ErrorArtifact: - file_name = os.path.basename(path) - - try: - with open(path, "rb") as file: - if self.encoding: - return TextArtifact(file.read().decode(self.encoding), name=file_name) - else: - return BlobArtifact(file.read(), name=file_name, dir_name=os.path.dirname(path)) - except FileNotFoundError: - return ErrorArtifact(f"file {file_name} not found") - except Exception as e: - return ErrorArtifact(f"error loading file: {e}") diff --git a/griptape/loaders/image_loader.py b/griptape/loaders/image_loader.py index 8adbcae00..28e272d1e 100644 --- a/griptape/loaders/image_loader.py +++ b/griptape/loaders/image_loader.py @@ -1,11 +1,11 @@ from __future__ import annotations from io import BytesIO -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, cast from attr import define, field -from griptape.utils import execute_futures_dict, str_to_hash, import_optional_dependency +from griptape.utils import import_optional_dependency from griptape.artifacts import ImageArtifact from griptape.loaders import BaseLoader @@ -35,14 +35,6 @@ class ImageLoader(BaseLoader): } def load(self, source: bytes, *args, **kwargs) -> ImageArtifact: - return self._load(source) - - def load_collection(self, sources: list[bytes], *args, **kwargs) -> dict[str, ImageArtifact]: - return execute_futures_dict( - {str_to_hash(str(source)): self.futures_executor.submit(self._load, source) for source in sources} - ) - - def _load(self, source: bytes) -> ImageArtifact: Image = import_optional_dependency("PIL.Image") image = Image.open(BytesIO(source)) @@ -67,3 +59,6 @@ def _get_mime_type(self, image_format: str | None) -> str: raise ValueError(f"Unsupported image format {image_format}") return self.FORMAT_TO_MIME_TYPE[image_format.lower()] + + def load_collection(self, sources: list[bytes], *args, **kwargs) -> dict[str, ImageArtifact]: + return cast(dict[str, ImageArtifact], super().load_collection(sources, *args, **kwargs)) diff --git a/griptape/loaders/pdf_loader.py b/griptape/loaders/pdf_loader.py index a9d91b218..66b1e1a01 100644 --- a/griptape/loaders/pdf_loader.py +++ b/griptape/loaders/pdf_loader.py @@ -1,13 +1,12 @@ from __future__ import annotations +from io import BytesIO from attr import define, field, Factory -from typing import IO, Optional -from collections.abc import Sequence - -from pathlib import Path +from typing import Optional, Union, cast +from griptape.artifacts.error_artifact import ErrorArtifact from griptape.loaders import BaseTextLoader -from griptape.utils import str_to_hash, execute_futures_dict, import_optional_dependency +from griptape.utils import import_optional_dependency from griptape.artifacts import TextArtifact from griptape.chunkers import PdfChunker @@ -18,25 +17,16 @@ class PdfLoader(BaseTextLoader): default=Factory(lambda self: PdfChunker(tokenizer=self.tokenizer, max_tokens=self.max_tokens), takes_self=True), kw_only=True, ) + encoding: None = field(default=None, kw_only=True) - def load(self, source: str | IO | Path, password: Optional[str] = None, *args, **kwargs) -> list[TextArtifact]: - return self._load_pdf(source, password) - - def load_collection( - self, sources: Sequence[str | IO | Path], password: Optional[str] = None, *args, **kwargs - ) -> dict[str, list[TextArtifact]]: - return execute_futures_dict( - { - str_to_hash(s.decode()) - if isinstance(s, bytes) - else str_to_hash(str(s)): self.futures_executor.submit(self._load_pdf, s, password) - for s in sources - } - ) - - def _load_pdf(self, stream: str | IO | Path, password: Optional[str]) -> list[TextArtifact]: + def load( + self, source: bytes, password: Optional[str] = None, *args, **kwargs + ) -> ErrorArtifact | list[TextArtifact]: PdfReader = import_optional_dependency("pypdf").PdfReader - - reader = PdfReader(stream, strict=True, password=password) - + reader = PdfReader(BytesIO(source), strict=True, password=password) return self._text_to_artifacts("\n".join([p.extract_text() for p in reader.pages])) + + def load_collection(self, sources: list[bytes], *args, **kwargs) -> dict[str, ErrorArtifact | list[TextArtifact]]: + return cast( + dict[str, Union[ErrorArtifact, list[TextArtifact]]], super().load_collection(sources, *args, **kwargs) + ) diff --git a/griptape/loaders/sql_loader.py b/griptape/loaders/sql_loader.py index 7d635f803..527b74de4 100644 --- a/griptape/loaders/sql_loader.py +++ b/griptape/loaders/sql_loader.py @@ -1,8 +1,7 @@ -from typing import Optional +from typing import Optional, cast from attr import define, field -from griptape import utils from griptape.artifacts import CsvRowArtifact from griptape.drivers import BaseSqlDriver, BaseEmbeddingDriver from griptape.loaders import BaseLoader @@ -14,15 +13,7 @@ class SqlLoader(BaseLoader): embedding_driver: Optional[BaseEmbeddingDriver] = field(default=None, kw_only=True) def load(self, source: str, *args, **kwargs) -> list[CsvRowArtifact]: - return self._load_query(source) - - def load_collection(self, sources: list[str], *args, **kwargs) -> dict[str, list[CsvRowArtifact]]: - return utils.execute_futures_dict( - {utils.str_to_hash(source): self.futures_executor.submit(self._load_query, source) for source in sources} - ) - - def _load_query(self, query: str) -> list[CsvRowArtifact]: - rows = self.sql_driver.execute_query(query) + rows = self.sql_driver.execute_query(source) artifacts = [] if rows: @@ -38,3 +29,6 @@ def _load_query(self, query: str) -> list[CsvRowArtifact]: artifacts.append(chunk) return artifacts + + def load_collection(self, sources: list[str], *args, **kwargs) -> dict[str, list[CsvRowArtifact]]: + return cast(dict[str, list[CsvRowArtifact]], super().load_collection(sources, *args, **kwargs)) diff --git a/griptape/loaders/text_loader.py b/griptape/loaders/text_loader.py index 6175147fc..3bba6023d 100644 --- a/griptape/loaders/text_loader.py +++ b/griptape/loaders/text_loader.py @@ -1,12 +1,11 @@ from __future__ import annotations -from typing import Optional +from typing import Optional, Union, cast from attr import field, define, Factory -from pathlib import Path -from griptape import utils from griptape.artifacts import TextArtifact +from griptape.artifacts.error_artifact import ErrorArtifact from griptape.chunkers import TextChunker from griptape.drivers import BaseEmbeddingDriver from griptape.loaders import BaseTextLoader @@ -33,13 +32,20 @@ class TextLoader(BaseTextLoader): embedding_driver: Optional[BaseEmbeddingDriver] = field(default=None, kw_only=True) encoding: str = field(default="utf-8", kw_only=True) - def load(self, source: str | Path, *args, **kwargs) -> list[TextArtifact]: + def load(self, source: bytes | str, *args, **kwargs) -> ErrorArtifact | list[TextArtifact]: + if isinstance(source, bytes): + try: + source = source.decode(encoding=self.encoding) + except UnicodeDecodeError: + return ErrorArtifact(f"Failed to decode bytes to string using encoding: {self.encoding}") + elif isinstance(source, (bytearray, memoryview)): + return ErrorArtifact(f"Unsupported source type: {type(source)}") + return self._text_to_artifacts(source) - def load_collection(self, sources: list[str | Path], *args, **kwargs) -> dict[str, list[TextArtifact]]: - return utils.execute_futures_dict( - { - utils.str_to_hash(str(source)): self.futures_executor.submit(self._text_to_artifacts, source) - for source in sources - } + def load_collection( + self, sources: list[bytes | str], *args, **kwargs + ) -> dict[str, ErrorArtifact | list[TextArtifact]]: + return cast( + dict[str, Union[ErrorArtifact, list[TextArtifact]]], super().load_collection(sources, *args, **kwargs) ) diff --git a/griptape/loaders/web_loader.py b/griptape/loaders/web_loader.py index 92c9ed972..d6e38f7e0 100644 --- a/griptape/loaders/web_loader.py +++ b/griptape/loaders/web_loader.py @@ -1,7 +1,7 @@ -from typing import Optional +from __future__ import annotations from attr import define, field, Factory +from griptape.artifacts.error_artifact import ErrorArtifact from griptape.drivers import BaseWebScraperDriver, TrafilaturaWebScraperDriver -from griptape.utils import str_to_hash, execute_futures_dict from griptape.artifacts import TextArtifact from griptape.loaders import BaseTextLoader @@ -12,20 +12,6 @@ class WebLoader(BaseTextLoader): default=Factory(lambda: TrafilaturaWebScraperDriver()), kw_only=True ) - def load(self, source: str, *args, **kwargs) -> list[TextArtifact]: - return self._load_page_to_artifacts(source) - - def load_collection(self, sources: list[str], *args, **kwargs) -> dict[str, list[TextArtifact]]: - return execute_futures_dict( - { - str_to_hash(source): self.futures_executor.submit(self._load_page_to_artifacts, source) - for source in sources - } - ) - - def _load_page_to_artifacts(self, url: str) -> list[TextArtifact]: - single_chunk_text_artifact = self.extract_page(url) + def load(self, source: str, *args, **kwargs) -> ErrorArtifact | list[TextArtifact]: + single_chunk_text_artifact = self.web_scraper_driver.scrape_url(source) return self._text_to_artifacts(single_chunk_text_artifact.value) - - def extract_page(self, url: str) -> TextArtifact: - return self.web_scraper_driver.scrape_url(url) diff --git a/griptape/tools/file_manager/tool.py b/griptape/tools/file_manager/tool.py index 7c1d4bd8a..7587360cf 100644 --- a/griptape/tools/file_manager/tool.py +++ b/griptape/tools/file_manager/tool.py @@ -4,9 +4,10 @@ from pathlib import Path from attr import define, field, Factory from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact, BaseArtifact, TextArtifact +from griptape.artifacts.blob_artifact import BlobArtifact from griptape.tools import BaseTool from griptape.utils.decorators import activity -from griptape.loaders import FileLoader, BaseLoader, PdfLoader, CsvLoader, TextLoader, ImageLoader +from griptape.loaders import BaseLoader, PdfLoader, CsvLoader, TextLoader, ImageLoader from schema import Schema, Literal from typing import Optional, Any @@ -24,7 +25,7 @@ class FileManager(BaseTool): """ workdir: str = field(default=Factory(lambda: os.getcwd()), kw_only=True) - default_loader: BaseLoader = field(default=Factory(lambda: FileLoader())) + default_loader: Optional[BaseLoader] = field(default=None, kw_only=True) loaders: dict[str, BaseLoader] = field( default=Factory( lambda: { @@ -93,7 +94,13 @@ def load_files_from_disk(self, params: dict) -> ListArtifact | ErrorArtifact: full_path = Path(os.path.join(self.workdir, path)) extension = path.split(".")[-1] loader = self.loaders.get(extension) or self.default_loader - result = loader.load(full_path) + with open(full_path, "rb") as file: + content = file.read() + + if loader is None: + result = BlobArtifact(content) + else: + result = loader.load(content) if isinstance(result, list): artifacts.extend(result) diff --git a/griptape/tools/web_scraper/tool.py b/griptape/tools/web_scraper/tool.py index 451b44aec..bff46473f 100644 --- a/griptape/tools/web_scraper/tool.py +++ b/griptape/tools/web_scraper/tool.py @@ -21,6 +21,10 @@ def get_content(self, params: dict) -> ListArtifact | ErrorArtifact: url = params["values"]["url"] try: - return ListArtifact(self.web_loader.load(url)) + result = self.web_loader.load(url) + if isinstance(result, ErrorArtifact): + return result + else: + return ListArtifact(result) except Exception as e: return ErrorArtifact("Error getting page content: " + str(e)) diff --git a/griptape/utils/hash.py b/griptape/utils/hash.py index 6a55aef1e..b428c2f3a 100644 --- a/griptape/utils/hash.py +++ b/griptape/utils/hash.py @@ -1,6 +1,14 @@ import hashlib +def bytes_to_hash(data: bytes, hash_algorithm: str = "sha256") -> str: + m = hashlib.new(hash_algorithm) + + m.update(data) + + return m.hexdigest() + + def str_to_hash(text: str, hash_algorithm: str = "sha256") -> str: m = hashlib.new(hash_algorithm) diff --git a/tests/unit/loaders/conftest.py b/tests/unit/loaders/conftest.py new file mode 100644 index 000000000..e1823a154 --- /dev/null +++ b/tests/unit/loaders/conftest.py @@ -0,0 +1,30 @@ +import os +from pathlib import Path + +import pytest + + +@pytest.fixture +def path_from_resource_path(): + def create_source(resource_path: str) -> Path: + return Path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources", resource_path)) + + return create_source + + +@pytest.fixture +def bytes_from_resource_path(path_from_resource_path): + def create_source(resource_path: str) -> bytes: + with open(path_from_resource_path(resource_path), "rb") as f: + return f.read() + + return create_source + + +@pytest.fixture +def str_from_resource_path(path_from_resource_path): + def test_csv_str(resource_path: str) -> str: + with open(path_from_resource_path(resource_path)) as f: + return f.read() + + return test_csv_str diff --git a/tests/unit/loaders/test_csv_loader.py b/tests/unit/loaders/test_csv_loader.py index c6aa81ad4..579146ba2 100644 --- a/tests/unit/loaders/test_csv_loader.py +++ b/tests/unit/loaders/test_csv_loader.py @@ -1,64 +1,60 @@ -import os import pytest -from griptape import utils from griptape.loaders.csv_loader import CsvLoader from tests.mocks.mock_embedding_driver import MockEmbeddingDriver class TestCsvLoader: - @pytest.fixture - def loaders(self): - return ( - CsvLoader(embedding_driver=MockEmbeddingDriver()), - CsvLoader(embedding_driver=MockEmbeddingDriver(), delimiter="|"), - ) + @pytest.fixture(params=["ascii", "utf-8", None]) + def loader(self, request): + encoding = request.param + if encoding is None: + return CsvLoader(embedding_driver=MockEmbeddingDriver()) + else: + return CsvLoader(embedding_driver=MockEmbeddingDriver(), encoding=encoding) - def test_load_with_path(self, loaders): - (loader, loader_pipe) = loaders - # test loading a file delimited by comma - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test-1.csv") + @pytest.fixture + def loader_with_pipe_delimiter(self): + return CsvLoader(embedding_driver=MockEmbeddingDriver(), delimiter="|") - artifacts = loader.load(path) + @pytest.fixture(params=["bytes_from_resource_path", "str_from_resource_path"]) + def create_source(self, request): + return request.getfixturevalue(request.param) - assert len(artifacts) == 10 - first_artifact = artifacts[0].value - assert first_artifact["Foo"] == "foo1" - assert first_artifact["Bar"] == "bar1" + def test_load(self, loader, create_source): + source = create_source("test-1.csv") - # test loading a file delimited by pipe - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test-pipe.csv") - - artifacts = loader_pipe.load(path) + artifacts = loader.load(source) assert len(artifacts) == 10 - first_artifact = artifacts[0].value - assert first_artifact["Bar"] == "foo1" - assert first_artifact["Foo"] == "bar1" - - assert artifacts[0].embedding == [0, 1] + first_artifact = artifacts[0] + assert first_artifact.value["Foo"] == "foo1" + assert first_artifact.value["Bar"] == "bar1" + assert first_artifact.embedding == [0, 1] - def test_load_collection_with_path(self, loaders): - loader = loaders[0] + def test_load_delimiter(self, loader_with_pipe_delimiter, create_source): + source = create_source("test-pipe.csv") - path1 = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test-1.csv") - path2 = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test-2.csv") - collection = loader.load_collection([path1, path2]) + artifacts = loader_with_pipe_delimiter.load(source) - key1 = utils.str_to_hash(str(path1)) - key2 = utils.str_to_hash(str(path2)) - - assert list(collection.keys()) == [key1, key2] - - artifacts = collection[key1] assert len(artifacts) == 10 - first_artifact = artifacts[0].value - assert first_artifact["Foo"] == "foo1" - assert first_artifact["Bar"] == "bar1" - - artifacts = collection[key2] - assert len(artifacts) == 10 - first_artifact = artifacts[0].value - assert first_artifact["Bar"] == "bar1" - assert first_artifact["Foo"] == "foo1" - - assert artifacts[0].embedding == [0, 1] + first_artifact = artifacts[0] + assert first_artifact.value["Foo"] == "bar1" + assert first_artifact.value["Bar"] == "foo1" + assert first_artifact.embedding == [0, 1] + + def test_load_collection(self, loader, create_source): + resource_paths = ["test-1.csv", "test-2.csv"] + sources = [create_source(resource_path) for resource_path in resource_paths] + + collection = loader.load_collection(sources) + + keys = {loader.to_key(source) for source in sources} + assert collection.keys() == keys + + for key in keys: + artifacts = collection[key] + assert len(artifacts) == 10 + first_artifact = artifacts[0] + assert first_artifact.value["Foo"] == "foo1" + assert first_artifact.value["Bar"] == "bar1" + assert first_artifact.embedding == [0, 1] diff --git a/tests/unit/loaders/test_dataframe_loader.py b/tests/unit/loaders/test_dataframe_loader.py index 9c7eb1054..536555558 100644 --- a/tests/unit/loaders/test_dataframe_loader.py +++ b/tests/unit/loaders/test_dataframe_loader.py @@ -31,8 +31,8 @@ def test_load_collection_with_path(self, loader): df2 = pd.read_csv(path2) collection = loader.load_collection([df1, df2]) - key1 = loader._dataframe_to_hash(df1) - key2 = loader._dataframe_to_hash(df2) + key1 = loader.to_key(df1) + key2 = loader.to_key(df2) assert list(collection.keys()) == [key1, key2] diff --git a/tests/unit/loaders/test_file_loader.py b/tests/unit/loaders/test_file_loader.py deleted file mode 100644 index cd9b9f845..000000000 --- a/tests/unit/loaders/test_file_loader.py +++ /dev/null @@ -1,50 +0,0 @@ -import os -from pathlib import Path -import pytest -from griptape import utils -from griptape.artifacts import TextArtifact, BlobArtifact -from griptape.loaders.file_loader import FileLoader - - -class TestFileLoader: - @pytest.fixture - def loader(self): - return FileLoader() - - def test_load_with_path(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test.txt") - - artifact = loader.load(path) - - assert isinstance(artifact, BlobArtifact) - assert artifact.name == "test.txt" - assert artifact.dir_name.endswith("../../resources") - assert artifact.value.decode().startswith("foobar foobar foobar") - assert artifact.full_path in str(path) - - def test_load_with_encoding(self): - loader = FileLoader(encoding="utf-8") - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test.txt") - - artifact = loader.load(path) - - assert isinstance(artifact, TextArtifact) - assert artifact.name == "test.txt" - assert artifact.value.startswith("foobar foobar foobar") - - def test_load_collection_with_path(self, loader): - text_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test.txt") - pdf_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/bitcoin.pdf") - artifacts = loader.load_collection([text_path, pdf_path]) - - text_key = utils.str_to_hash(str(text_path)) - assert list(artifacts.keys())[0] == text_key - assert artifacts[text_key].name == "test.txt" - assert artifacts[text_key].dir_name.endswith("../../resources") - assert artifacts[text_key].full_path in str(text_path) - - pdf_key = utils.str_to_hash(str(pdf_path)) - assert list(artifacts.keys())[1] == pdf_key - assert artifacts[pdf_key].name == "bitcoin.pdf" - assert artifacts[pdf_key].dir_name.endswith("../../resources") - assert artifacts[pdf_key].full_path in str(pdf_path) diff --git a/tests/unit/loaders/test_image_loader.py b/tests/unit/loaders/test_image_loader.py index d9b75e151..2a90d6b5d 100644 --- a/tests/unit/loaders/test_image_loader.py +++ b/tests/unit/loaders/test_image_loader.py @@ -1,8 +1,4 @@ -import os -from io import BytesIO - import pytest -from PIL import Image from griptape.artifacts import ImageArtifact from griptape.loaders import ImageLoader @@ -13,100 +9,67 @@ class TestImageLoader: def loader(self): return ImageLoader() - def test_init(self, loader): - assert loader - - def test_load_png(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/small.png") - - with open(path, "rb") as file: - artifact = loader.load(file.read()) - - assert isinstance(artifact, ImageArtifact) - assert artifact.name.endswith(".png") - assert artifact.height == 32 - assert artifact.width == 32 - assert artifact.mime_type == "image/png" - assert len(artifact.value) > 0 - - def test_load_jpg(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/small.jpg") - - with open(path, "rb") as file: - artifact = loader.load(file.read()) - - assert isinstance(artifact, ImageArtifact) - assert artifact.name.endswith(".jpeg") - assert artifact.height == 32 - assert artifact.width == 32 - assert artifact.mime_type == "image/jpeg" - assert len(artifact.value) > 0 - - def test_load_webp(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/small.webp") - - with open(path, "rb") as file: - artifact = loader.load(file.read()) - - assert isinstance(artifact, ImageArtifact) - assert artifact.name.endswith(".webp") - assert artifact.height == 32 - assert artifact.width == 32 - assert artifact.mime_type == "image/webp" - assert len(artifact.value) > 0 - - def test_load_bmp(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/small.bmp") + @pytest.fixture + def png_loader(self): + return ImageLoader(format="png") - with open(path, "rb") as file: - artifact = loader.load(file.read()) + @pytest.fixture + def create_source(self, bytes_from_resource_path): + return bytes_from_resource_path + + @pytest.mark.parametrize( + "resource_path,suffix,mime_type", + [ + ("small.png", ".png", "image/png"), + ("small.jpg", ".jpeg", "image/jpeg"), + ("small.webp", ".webp", "image/webp"), + ("small.bmp", ".bmp", "image/bmp"), + ("small.gif", ".gif", "image/gif"), + ("small.tiff", ".tiff", "image/tiff"), + ], + ) + def test_load(self, resource_path, suffix, mime_type, loader, create_source): + source = create_source(resource_path) + + artifact = loader.load(source) assert isinstance(artifact, ImageArtifact) - assert artifact.name.endswith(".bmp") + assert artifact.name.endswith(suffix) assert artifact.height == 32 assert artifact.width == 32 - assert artifact.mime_type == "image/bmp" + assert artifact.mime_type == mime_type assert len(artifact.value) > 0 - def test_load_gif(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/small.gif") + @pytest.mark.parametrize( + "resource_path", ["small.png", "small.jpg", "small.webp", "small.bmp", "small.gif", "small.tiff"] + ) + def test_load_normalize(self, resource_path, png_loader, create_source): + source = create_source(resource_path) - with open(path, "rb") as file: - artifact = loader.load(file.read()) + artifact = png_loader.load(source) assert isinstance(artifact, ImageArtifact) - assert artifact.name.endswith(".gif") + assert artifact.name.endswith(".png") assert artifact.height == 32 assert artifact.width == 32 - assert artifact.mime_type == "image/gif" + assert artifact.mime_type == "image/png" assert len(artifact.value) > 0 - def test_load_tiff(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/small.tiff") - - with open(path, "rb") as file: - artifact = loader.load(file.read()) - - assert isinstance(artifact, ImageArtifact) - assert artifact.name.endswith(".tiff") - assert artifact.height == 32 - assert artifact.width == 32 - assert artifact.mime_type == "image/tiff" - assert len(artifact.value) > 0 + def test_load_collection(self, create_source, png_loader): + resource_paths = ["small.png", "small.jpg"] + sources = [create_source(resource_path) for resource_path in resource_paths] - def test_normalize_format(self): - loader = ImageLoader(format="png") - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/small.jpg") + collection = png_loader.load_collection(sources) - with open(path, "rb") as file: - artifact = loader.load(file.read()) + keys = {png_loader.to_key(source) for source in sources} - image = Image.open(BytesIO(artifact.value)) + assert collection.keys() == keys - assert isinstance(artifact, ImageArtifact) - assert artifact.name.endswith(".png") - assert artifact.height == 32 - assert artifact.width == 32 - assert artifact.mime_type == "image/png" - assert len(artifact.value) > 0 - assert image.format == "PNG" + for key in keys: + artifact = collection[key] + assert isinstance(artifact, ImageArtifact) + assert artifact.name.endswith(".png") + assert artifact.height == 32 + assert artifact.width == 32 + assert artifact.mime_type == "image/png" + assert len(artifact.value) > 0 diff --git a/tests/unit/loaders/test_pdf_loader.py b/tests/unit/loaders/test_pdf_loader.py index 3cb6650bd..0ab78b8b6 100644 --- a/tests/unit/loaders/test_pdf_loader.py +++ b/tests/unit/loaders/test_pdf_loader.py @@ -1,4 +1,6 @@ import os +from pathlib import Path +from typing import IO import pytest from griptape import utils from griptape.loaders import PdfLoader @@ -12,31 +14,33 @@ class TestPdfLoader: def loader(self): return PdfLoader(max_tokens=MAX_TOKENS, embedding_driver=MockEmbeddingDriver()) - def test_load(self, loader): - path = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/bitcoin.pdf") + @pytest.fixture + def create_source(self, bytes_from_resource_path): + return bytes_from_resource_path + + def test_load(self, loader, create_source): + source = create_source("bitcoin.pdf") - artifacts = loader.load(path) + artifacts = loader.load(source) assert len(artifacts) == 151 assert artifacts[0].value.startswith("Bitcoin: A Peer-to-Peer") assert artifacts[-1].value.endswith('its applications," 1957.\n9') - assert artifacts[0].embedding == [0, 1] - def test_load_collection(self, loader): - path1 = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/bitcoin.pdf") - path2 = os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/bitcoin-2.pdf") - key1 = utils.str_to_hash(path1) - key2 = utils.str_to_hash(path2) + def test_load_collection(self, loader, create_source): + resource_paths = ["bitcoin.pdf", "bitcoin-2.pdf"] + sources = [create_source(resource_path) for resource_path in resource_paths] + + collection = loader.load_collection(sources) - artifacts = loader.load_collection([path1, path2]) + keys = {loader.to_key(source) for source in sources} - assert list(artifacts.keys()) == [key1, key2] - assert len(artifacts[key1]) == 151 - assert artifacts[key1][0].value.startswith("Bitcoin: A Peer-to-Peer") - assert artifacts[key1][-1].value.endswith('its applications," 1957.\n9') - assert len(artifacts[key2]) == 151 - assert artifacts[key2][0].value.startswith("Bitcoin: A Peer-to-Peer") - assert artifacts[key2][-1].value.endswith('its applications," 1957.\n9') + assert collection.keys() == keys - assert artifacts[key1][0].embedding == [0, 1] + for key in keys: + artifact = collection[key] + assert len(artifact) == 151 + assert artifact[0].value.startswith("Bitcoin: A Peer-to-Peer") + assert artifact[-1].value.endswith('its applications," 1957.\n9') + assert artifact[0].embedding == [0, 1] diff --git a/tests/unit/loaders/test_sql_loader.py b/tests/unit/loaders/test_sql_loader.py index d2a9f3f43..8541e4fb8 100644 --- a/tests/unit/loaders/test_sql_loader.py +++ b/tests/unit/loaders/test_sql_loader.py @@ -1,6 +1,5 @@ import pytest from sqlalchemy.pool import StaticPool -from griptape import utils from griptape.drivers import SqlDriver from griptape.loaders import SqlLoader from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -48,8 +47,8 @@ def test_load_collection(self, loader): artifacts = loader.load_collection(["SELECT * FROM test_table LIMIT 1;", "SELECT * FROM test_table LIMIT 2;"]) assert list(artifacts.keys()) == [ - utils.str_to_hash("SELECT * FROM test_table LIMIT 1;"), - utils.str_to_hash("SELECT * FROM test_table LIMIT 2;"), + loader.to_key("SELECT * FROM test_table LIMIT 1;"), + loader.to_key("SELECT * FROM test_table LIMIT 2;"), ] assert [a.value for artifact_list in artifacts.values() for a in artifact_list] == [ diff --git a/tests/unit/loaders/test_text_loader.py b/tests/unit/loaders/test_text_loader.py index 9b028f0c2..0c59df12f 100644 --- a/tests/unit/loaders/test_text_loader.py +++ b/tests/unit/loaders/test_text_loader.py @@ -1,10 +1,6 @@ -import os -from pathlib import Path import pytest -from griptape import utils from griptape.loaders.text_loader import TextLoader from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.unit.chunkers.utils import gen_paragraph MAX_TOKENS = 50 @@ -12,49 +8,39 @@ class TestTextLoader: @pytest.fixture(params=["ascii", "utf-8", None]) def loader(self, request): - return TextLoader(max_tokens=MAX_TOKENS, embedding_driver=MockEmbeddingDriver(), encoding=request.param) + encoding = request.param + if encoding is None: + return TextLoader(max_tokens=MAX_TOKENS, embedding_driver=MockEmbeddingDriver()) + else: + return TextLoader(max_tokens=MAX_TOKENS, embedding_driver=MockEmbeddingDriver(), encoding=encoding) - def test_load_with_str(self, loader): - text = gen_paragraph(MAX_TOKENS * 2, loader.tokenizer, " ") - artifacts = loader.load(text) + @pytest.fixture(params=["bytes_from_resource_path", "str_from_resource_path"]) + def create_source(self, request): + return request.getfixturevalue(request.param) - assert len(artifacts) == 3 - assert artifacts[0].value.startswith("foo-0 foo-1") - assert artifacts[0].encoding == loader.encoding - - assert artifacts[0].embedding == [0, 1] - - def test_load_with_path(self, loader): - path = Path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test.txt")) + def test_load(self, loader, create_source): + source = create_source("test.txt") - artifacts = loader.load(path) + artifacts = loader.load(source) assert len(artifacts) == 39 assert artifacts[0].value.startswith("foobar foobar foobar") assert artifacts[0].encoding == loader.encoding - assert artifacts[0].embedding == [0, 1] - def test_load_collection_with_strings(self, loader): - artifacts = loader.load_collection(["bar", "bat"]) - - assert list(artifacts.keys()) == [utils.str_to_hash("bar"), utils.str_to_hash("bat")] - assert [a.value for artifact_list in artifacts.values() for a in artifact_list] == ["bar", "bat"] - assert [a.encoding for artifact_list in artifacts.values() for a in artifact_list] == [ - loader.encoding, - loader.encoding, - ] + def test_load_collection(self, loader, create_source): + resource_paths = ["test.txt"] + sources = [create_source(resource_path) for resource_path in resource_paths] - assert list(artifacts.values())[0][0].embedding == [0, 1] + collection = loader.load_collection(sources) - def test_load_collection_with_path(self, loader): - path = Path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "../../resources/test.txt")) - artifacts = loader.load_collection([path]) + keys = {loader.to_key(source) for source in sources} + assert collection.keys() == keys - key = utils.str_to_hash(str(path)) - - assert list(artifacts.keys())[0] == key - assert len(artifacts[key]) == 39 + key = next(iter(keys)) + artifacts = collection[key] + assert len(artifacts) == 39 - assert list(artifacts.values())[0][0].embedding == [0, 1] - assert list(artifacts.values())[0][0].encoding == loader.encoding + artifact = artifacts[0] + assert artifact.embedding == [0, 1] + assert artifact.encoding == loader.encoding diff --git a/tests/unit/loaders/test_web_loader.py b/tests/unit/loaders/test_web_loader.py index cf8226a65..fb63e87eb 100644 --- a/tests/unit/loaders/test_web_loader.py +++ b/tests/unit/loaders/test_web_loader.py @@ -1,5 +1,4 @@ import pytest -from griptape import utils from griptape.loaders import WebLoader from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -29,8 +28,8 @@ def test_load_collection(self, loader): ) assert list(artifacts.keys()) == [ - utils.str_to_hash("https://github.com/griptape-ai/griptape"), - utils.str_to_hash("https://github.com/griptape-ai/griptape-docs"), + loader.to_key("https://github.com/griptape-ai/griptape"), + loader.to_key("https://github.com/griptape-ai/griptape-docs"), ] assert "foobar" in [a.value for artifact_list in artifacts.values() for a in artifact_list][0].lower() diff --git a/tests/unit/tools/test_file_manager.py b/tests/unit/tools/test_file_manager.py index 3ecff7e62..3ca19a5cc 100644 --- a/tests/unit/tools/test_file_manager.py +++ b/tests/unit/tools/test_file_manager.py @@ -5,7 +5,8 @@ import pytest from griptape.artifacts import ErrorArtifact from griptape.artifacts import TextArtifact, ListArtifact -from griptape.loaders import FileLoader +from griptape.loaders.pdf_loader import PdfLoader +from griptape.loaders.text_loader import TextLoader from griptape.tools import FileManager from tests.utils import defaults @@ -43,7 +44,7 @@ def test_load_files_from_disk_with_encoding(self): def test_load_files_from_disk_with_encoding_failure(self): result = FileManager( - workdir=os.path.abspath(os.path.dirname(__file__)), default_loader=FileLoader(encoding="utf-8"), loaders={} + workdir=os.path.abspath(os.path.dirname(__file__)), default_loader=TextLoader(encoding="utf-8"), loaders={} ).load_files_from_disk({"values": {"paths": ["../../resources/bitcoin.pdf"]}}) assert isinstance(result.value[0], ErrorArtifact) @@ -122,7 +123,7 @@ def test_save_and_load_content_to_file_with_encoding(self): assert result.value == "saved successfully" result = FileManager( - workdir=temp_dir, default_loader=FileLoader(encoding="ascii"), loaders={} + workdir=temp_dir, default_loader=TextLoader(encoding="ascii"), loaders={} ).load_files_from_disk({"values": {"paths": [os.path.join("test", "foobar.txt")]}}) assert isinstance(result, ListArtifact) From c403954897e6fd06be7c2b902868180e97118fa4 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 9 Apr 2024 17:29:51 -0700 Subject: [PATCH 012/145] Feature/event listener drivers (#735) --- CHANGELOG.md | 10 ++- griptape/drivers/__init__.py | 13 ++++ griptape/drivers/event_listener/__init__.py | 0 .../amazon_sqs_event_listener_driver.py | 23 +++++++ .../aws_iot_core_event_listener_driver.py | 24 +++++++ .../base_event_listener_driver.py | 20 ++++++ .../griptape_cloud_event_listener_driver.py | 32 ++++++++++ .../local_event_listener_driver.py | 18 ++++++ .../webhook_event_listener_driver.py | 17 +++++ griptape/events/event_listener.py | 17 ++++- griptape/structures/structure.py | 6 +- griptape/utils/stream.py | 5 +- poetry.lock | 22 ++++++- pyproject.toml | 5 +- tests/unit/drivers/event_listener/__init__.py | 0 .../test_amazon_sqs_event_listener_driver.py | 31 +++++++++ .../test_aws_iot_event_listener_driver.py | 25 ++++++++ ...st_griptape_cloud_event_listener_driver.py | 37 +++++++++++ .../test_local_event_listener_driver.py | 14 ++++ .../test_webhook_event_listener_driver.py | 25 ++++++++ tests/unit/events/test_event_listener.py | 64 ++++++++++++++----- 21 files changed, 377 insertions(+), 31 deletions(-) create mode 100644 griptape/drivers/event_listener/__init__.py create mode 100644 griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py create mode 100644 griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py create mode 100644 griptape/drivers/event_listener/base_event_listener_driver.py create mode 100644 griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py create mode 100644 griptape/drivers/event_listener/local_event_listener_driver.py create mode 100644 griptape/drivers/event_listener/webhook_event_listener_driver.py create mode 100644 tests/unit/drivers/event_listener/__init__.py create mode 100644 tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py create mode 100644 tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py create mode 100644 tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py create mode 100644 tests/unit/drivers/event_listener/test_local_event_listener_driver.py create mode 100644 tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 98aa397b0..4ddbe989d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,15 +8,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `list_files_from_disk` activity to `FileManager` Tool. +- Support for Drivers in `EventListener`. +- `AmazonSqsEventListenerDriver` for sending events to an Amazon SQS queue. +- `AwsIotCoreEventListenerDriver` for sending events to a topic on AWS IoT Core. +- `GriptapeCloudEventListenerDriver` for sending events to Griptape Cloud. +- `WebhookEventListenerDriver` for sending events to a webhook. +- `LocalEventListenerDriver` for sending events to a callback function. + ### Changed -- Improved RAG performance in `VectorQueryEngine`. - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. - **BREAKING**: Remove `FileLoader`. - **BREAKING**: `CsvLoader` no longer accepts `str` file paths as a source. It will now accept the content of the CSV file as a `str` or `bytes` object. - **BREAKING**: `PdfLoader` no longer accepts `str` file content, `Path` file paths or `IO` objects as sources. Instead, it will only accept the content of the PDF file as a `bytes` object. - **BREAKING**: `TextLoader` no longer accepts `Path` file paths as a source. It will now accept the content of the text file as a `str` or `bytes` object. - **BREAKING**: `FileManager.default_loader` is now `None` by default. +- **BREAKING**: Replaced `EventListener.handler` with `EventListener.driver` and `LocalEventListenerDriver`. +- Improved RAG performance in `VectorQueryEngine`. ## [0.24.2] - 2024-04-04 diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index cb453a699..2adc56d7f 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -86,6 +86,13 @@ from .web_scraper.trafilatura_web_scraper_driver import TrafilaturaWebScraperDriver from .web_scraper.markdownify_web_scraper_driver import MarkdownifyWebScraperDriver +from .event_listener.base_event_listener_driver import BaseEventListenerDriver +from .event_listener.amazon_sqs_event_listener_driver import AmazonSqsEventListenerDriver +from .event_listener.webhook_event_listener_driver import WebhookEventListenerDriver +from .event_listener.aws_iot_core_event_listener_driver import AwsIotCoreEventListenerDriver +from .event_listener.griptape_cloud_event_listener_driver import GriptapeCloudEventListenerDriver +from .event_listener.local_event_listener_driver import LocalEventListenerDriver + __all__ = [ "BasePromptDriver", "OpenAiChatPromptDriver", @@ -161,4 +168,10 @@ "BaseWebScraperDriver", "TrafilaturaWebScraperDriver", "MarkdownifyWebScraperDriver", + "BaseEventListenerDriver", + "AmazonSqsEventListenerDriver", + "WebhookEventListenerDriver", + "AwsIotCoreEventListenerDriver", + "GriptapeCloudEventListenerDriver", + "LocalEventListenerDriver", ] diff --git a/griptape/drivers/event_listener/__init__.py b/griptape/drivers/event_listener/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py new file mode 100644 index 000000000..0db63726b --- /dev/null +++ b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any +import json + +from attr import Factory, define, field + +from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver +from griptape.events.base_event import BaseEvent +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + import boto3 + + +@define +class AmazonSqsEventListenerDriver(BaseEventListenerDriver): + queue_url: str = field(kw_only=True) + session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) + sqs_client: Any = field(default=Factory(lambda self: self.session.client("sqs"), takes_self=True)) + + def try_publish_event(self, event: BaseEvent) -> None: + self.sqs_client.send_message(QueueUrl=self.queue_url, MessageBody=json.dumps({"event": event.to_dict()})) diff --git a/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py new file mode 100644 index 000000000..876b790e8 --- /dev/null +++ b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any + +import json +from attr import Factory, define, field + +from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver +from griptape.events.base_event import BaseEvent +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + import boto3 + + +@define +class AwsIotCoreEventListenerDriver(BaseEventListenerDriver): + iot_endpoint: str = field(kw_only=True) + topic: str = field(kw_only=True) + session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) + iotdata_client: Any = field(default=Factory(lambda self: self.session.client("iot-data"), takes_self=True)) + + def try_publish_event(self, event: BaseEvent) -> None: + self.iotdata_client.publish(topic=self.topic, payload=json.dumps({"event": event.to_dict()})) diff --git a/griptape/drivers/event_listener/base_event_listener_driver.py b/griptape/drivers/event_listener/base_event_listener_driver.py new file mode 100644 index 000000000..5bfbe6709 --- /dev/null +++ b/griptape/drivers/event_listener/base_event_listener_driver.py @@ -0,0 +1,20 @@ +from __future__ import annotations +from abc import ABC, abstractmethod +from concurrent import futures +from attr import define, field, Factory +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from griptape.events import BaseEvent + + +@define +class BaseEventListenerDriver(ABC): + futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + + def publish_event(self, event: BaseEvent) -> None: + self.futures_executor.submit(self.try_publish_event, event) + + @abstractmethod + def try_publish_event(self, event: BaseEvent) -> None: + ... diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py new file mode 100644 index 000000000..181a246f6 --- /dev/null +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +import os +import requests + +from urllib.parse import urljoin +from attr import define, field, Factory + +from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver +from griptape.events.base_event import BaseEvent + + +@define +class GriptapeCloudEventListenerDriver(BaseEventListenerDriver): + base_url: str = field(default="https://cloud.griptape.ai", kw_only=True) + api_key: str = field(kw_only=True) + headers: dict = field( + default=Factory(lambda self: {"Authorization": f"Bearer {self.api_key}"}, takes_self=True), kw_only=True + ) + run_id: str = field(default=Factory(lambda: os.getenv("GT_CLOUD_RUN_ID")), kw_only=True) + + @run_id.validator # pyright: ignore + def validate_run_id(self, _, run_id: str): + if run_id is None: + raise ValueError( + "run_id must be set either in the constructor or as an environment variable (GT_CLOUD_RUN_ID)." + ) + + def try_publish_event(self, event: BaseEvent) -> None: + url = urljoin(self.base_url.strip("/"), f"/api/runs/{self.run_id}/events/") + + requests.post(url=url, json=event.to_dict(), headers=self.headers) diff --git a/griptape/drivers/event_listener/local_event_listener_driver.py b/griptape/drivers/event_listener/local_event_listener_driver.py new file mode 100644 index 000000000..b276b94ef --- /dev/null +++ b/griptape/drivers/event_listener/local_event_listener_driver.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from typing import Callable, Any +from attr import define, field + +from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver +from griptape.events.base_event import BaseEvent + + +@define +class LocalEventListenerDriver(BaseEventListenerDriver): + handler: Callable[[BaseEvent], Any] = field(default=None, kw_only=True) + + def publish_event(self, event: BaseEvent) -> None: + self.try_publish_event(event) + + def try_publish_event(self, event: BaseEvent) -> None: + self.handler(event) diff --git a/griptape/drivers/event_listener/webhook_event_listener_driver.py b/griptape/drivers/event_listener/webhook_event_listener_driver.py new file mode 100644 index 000000000..d2f0046d0 --- /dev/null +++ b/griptape/drivers/event_listener/webhook_event_listener_driver.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import requests + +from attr import define, field + +from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver +from griptape.events.base_event import BaseEvent + + +@define +class WebhookEventListenerDriver(BaseEventListenerDriver): + webhook_url: str = field(kw_only=True) + headers: dict = field(default=None, kw_only=True) + + def try_publish_event(self, event: BaseEvent) -> None: + requests.post(url=self.webhook_url, json={"event": event.to_dict()}, headers=self.headers) diff --git a/griptape/events/event_listener.py b/griptape/events/event_listener.py index e757b1b06..aa7da5dcd 100644 --- a/griptape/events/event_listener.py +++ b/griptape/events/event_listener.py @@ -1,9 +1,20 @@ -from typing import Callable, Optional, Type, Any +from __future__ import annotations +from typing import Optional, TYPE_CHECKING from attrs import define, field from .base_event import BaseEvent +if TYPE_CHECKING: + from griptape.drivers import BaseEventListenerDriver + @define class EventListener: - handler: Callable[[BaseEvent], Any] = field() - event_types: Optional[list[Type[BaseEvent]]] = field(default=None, kw_only=True) + event_types: Optional[list[type[BaseEvent]]] = field(default=None, kw_only=True) + driver: Optional[BaseEventListenerDriver] = field(default=None, kw_only=True) + + def publish_event(self, event: BaseEvent) -> None: + event_types = self.event_types + + if event_types is None or type(event) in event_types: + if self.driver is not None: + self.driver.publish_event(event) diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 4e14d087d..e05d25ca5 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -251,11 +251,7 @@ def remove_event_listener(self, event_listener: EventListener) -> None: def publish_event(self, event: BaseEvent) -> None: for event_listener in self.event_listeners: - handler = event_listener.handler - event_types = event_listener.event_types - - if event_types is None or type(event) in event_types: - handler(event) + event_listener.publish_event(event) def context(self, task: BaseTask) -> dict[str, Any]: return {"args": self.execution_args, "structure": self} diff --git a/griptape/utils/stream.py b/griptape/utils/stream.py index a6c5c0db4..80d3ea5a1 100644 --- a/griptape/utils/stream.py +++ b/griptape/utils/stream.py @@ -53,11 +53,14 @@ def run(self, *args) -> Iterator[TextArtifact]: t.join() def _run_structure(self, *args): + from griptape.drivers import LocalEventListenerDriver + def event_handler(event: BaseEvent): self._event_queue.put(event) stream_event_listener = EventListener( - event_handler, event_types=[CompletionChunkEvent, FinishPromptEvent, FinishStructureRunEvent] + driver=LocalEventListenerDriver(handler=event_handler), + event_types=[CompletionChunkEvent, FinishPromptEvent, FinishStructureRunEvent], ) self.structure.add_event_listener(stream_event_listener) diff --git a/poetry.lock b/poetry.lock index 21abd3413..3cc0fbee2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1943,6 +1943,17 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] +[[package]] +name = "jsondiff" +version = "2.0.0" +description = "Diff JSON and JSON-like structures in Python" +optional = false +python-versions = "*" +files = [ + {file = "jsondiff-2.0.0-py3-none-any.whl", hash = "sha256:689841d66273fc88fc79f7d33f4c074774f4f214b6466e3aff0e5adaf889d1e0"}, + {file = "jsondiff-2.0.0.tar.gz", hash = "sha256:2795844ef075ec8a2b8d385c4d59f5ea48b08e7180fce3cb2787be0db00b1fb4"}, +] + [[package]] name = "justext" version = "3.0.0" @@ -2049,7 +2060,6 @@ files = [ {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, @@ -2349,6 +2359,7 @@ botocore = ">=1.12.201" cryptography = ">=3.3.1" docker = {version = ">=3.0.0", optional = true, markers = "extra == \"dynamodb\""} Jinja2 = ">=2.10.1" +jsondiff = {version = ">=1.1.2", optional = true, markers = "extra == \"iotdata\""} py-partiql-parser = {version = "0.5.0", optional = true, markers = "extra == \"dynamodb\""} python-dateutil = ">=2.1,<3.0.0" requests = ">=2.5" @@ -3034,6 +3045,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -3042,6 +3054,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -5043,6 +5057,8 @@ drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-google = ["google-generativeai"] drivers-embedding-huggingface = ["huggingface-hub", "transformers"] drivers-embedding-voyageai = ["voyageai"] +drivers-event-listener-amazon-iot = ["boto3"] +drivers-event-listener-amazon-sqs = ["boto3"] drivers-memory-conversation-amazon-dynamodb = ["boto3"] drivers-prompt-amazon-bedrock = ["anthropic", "boto3"] drivers-prompt-amazon-sagemaker = ["boto3", "transformers"] @@ -5070,4 +5086,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "4eac3f039981703a8c3d3a2d8ead8a9286c6e346e2ba39b0ff77c0e0b0de6aef" +content-hash = "7b1203869463a403ae5ecbf8b3b267a919d6ef1baff302a28084e18c70e52205" diff --git a/pyproject.toml b/pyproject.toml index 6755f02c5..0a52e0a88 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -89,6 +89,9 @@ drivers-embedding-google = ["google-generativeai"] drivers-web-scraper-trafilatura = ["trafilatura"] drivers-web-scraper-markdownify = ["playwright", "beautifulsoup4", "markdownify"] +drivers-event-listener-amazon-sqs = ["boto3"] +drivers-event-listener-amazon-iot = ["boto3"] + loaders-dataframe = ["pandas"] loaders-pdf = ["pypdf"] loaders-image = ["pillow"] @@ -134,7 +137,7 @@ pytest-mock = "*" mongomock = "*" twine = ">=4" -moto = {extras = ["dynamodb"], version = "^4.1.8"} +moto = {extras = ["dynamodb", "iotdata", "sqs"], version = "^4.2.13"} pytest-xdist = "^3.3.1" pytest-cov = "^4.1.0" pytest-env = "^1.1.1" diff --git a/tests/unit/drivers/event_listener/__init__.py b/tests/unit/drivers/event_listener/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py b/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py new file mode 100644 index 000000000..4a19011be --- /dev/null +++ b/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py @@ -0,0 +1,31 @@ +from pytest import fixture +from moto import mock_sqs +import boto3 +from tests.mocks.mock_event import MockEvent +from griptape.drivers.event_listener.amazon_sqs_event_listener_driver import AmazonSqsEventListenerDriver +from tests.utils.aws import mock_aws_credentials + + +class TestAmazonSqsEventListenerDriver: + @fixture() + def run_before_and_after_tests(self): + mock_aws_credentials() + + @fixture() + def driver(self): + mock = mock_sqs() + mock.start() + + session = boto3.Session(region_name="us-east-1") + response = session.client("sqs").create_queue(QueueName="foo-bar") + queue_url = response["QueueUrl"] + + yield AmazonSqsEventListenerDriver(queue_url=queue_url, session=session) + + mock.stop() + + def test_init(self, driver): + assert driver + + def test_try_publish_event(self, driver): + driver.try_publish_event(event=MockEvent()) diff --git a/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py new file mode 100644 index 000000000..c56ead9fe --- /dev/null +++ b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py @@ -0,0 +1,25 @@ +from pytest import fixture +from moto import mock_iotdata +import boto3 +from tests.mocks.mock_event import MockEvent +from griptape.drivers.event_listener.aws_iot_core_event_listener_driver import AwsIotCoreEventListenerDriver +from tests.utils.aws import mock_aws_credentials + + +@mock_iotdata +class TestAwsIotCoreEventListenerDriver: + @fixture() + def run_before_and_after_tests(self): + mock_aws_credentials() + + @fixture() + def driver(self): + return AwsIotCoreEventListenerDriver( + iot_endpoint="foo bar", topic="fizz buzz", session=boto3.Session(region_name="us-east-1") + ) + + def test_init(self, driver): + assert driver + + def test_try_publish_event(self, driver): + driver.try_publish_event(event=MockEvent()) diff --git a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py new file mode 100644 index 000000000..be6340b45 --- /dev/null +++ b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py @@ -0,0 +1,37 @@ +from unittest.mock import Mock +from pytest import fixture +import pytest +from tests.mocks.mock_event import MockEvent +from griptape.drivers.event_listener.griptape_cloud_event_listener_driver import GriptapeCloudEventListenerDriver + + +class TestGriptapeCloudEventListenerDriver: + @fixture(autouse=True) + def mock_post(self, mocker): + data = {"data": {"id": "test"}} + + mock_post = mocker.patch("requests.post") + mock_post.return_value = Mock(status_code=201, json=data) + + return mock_post + + @fixture() + def driver(self): + return GriptapeCloudEventListenerDriver(api_key="foo bar", run_id="baz") + + def test_init(self, driver): + assert driver + + def test_try_publish_event(self, mock_post, driver): + event = MockEvent() + driver.try_publish_event(event=event) + + mock_post.assert_called_once_with( + url=f"https://cloud.griptape.ai/api/runs/{driver.run_id}/events/", + json=event.to_dict(), + headers={"Authorization": "Bearer foo bar"}, + ) + + def test_no_run_id(self): + with pytest.raises(ValueError): + GriptapeCloudEventListenerDriver(api_key="foo bar") diff --git a/tests/unit/drivers/event_listener/test_local_event_listener_driver.py b/tests/unit/drivers/event_listener/test_local_event_listener_driver.py new file mode 100644 index 000000000..a92276fa8 --- /dev/null +++ b/tests/unit/drivers/event_listener/test_local_event_listener_driver.py @@ -0,0 +1,14 @@ +from moto import mock_iotdata +from unittest.mock import Mock +from tests.mocks.mock_event import MockEvent +from griptape.drivers.event_listener.local_event_listener_driver import LocalEventListenerDriver + + +@mock_iotdata +class TestLocalEventListenerDriver: + def test_try_publish_event(self): + mock = Mock() + event = MockEvent() + driver = LocalEventListenerDriver(handler=mock) + driver.try_publish_event(event=event) + mock.assert_called_once_with(event) diff --git a/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py b/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py new file mode 100644 index 000000000..207fd48cf --- /dev/null +++ b/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py @@ -0,0 +1,25 @@ +from unittest.mock import Mock +from pytest import fixture +from tests.mocks.mock_event import MockEvent +from griptape.drivers.event_listener.webhook_event_listener_driver import WebhookEventListenerDriver + + +class TestWebhookEventListenerDriver: + @fixture(autouse=True) + def mock_post(self, mocker): + mock_post = mocker.patch("requests.post") + mock_post.return_value = Mock(status_code=201) + + return mock_post + + def test_init(self): + assert WebhookEventListenerDriver(webhook_url="") + + def test_try_publish_event(self, mock_post): + driver = WebhookEventListenerDriver(webhook_url="foo bar", headers={"Authorization": "Bearer foo bar"}) + event = MockEvent() + driver.try_publish_event(event=event) + + mock_post.assert_called_once_with( + url="foo bar", json={"event": event.to_dict()}, headers={"Authorization": "Bearer foo bar"} + ) diff --git a/tests/unit/events/test_event_listener.py b/tests/unit/events/test_event_listener.py index 17f2dc8c0..39b59ea94 100644 --- a/tests/unit/events/test_event_listener.py +++ b/tests/unit/events/test_event_listener.py @@ -1,5 +1,6 @@ from unittest.mock import Mock import pytest +from griptape.drivers.event_listener.local_event_listener_driver import LocalEventListenerDriver from griptape.structures import Pipeline from griptape.tasks import ToolkitTask, ActionsSubtask from griptape.events import ( @@ -33,7 +34,10 @@ def test_untyped_listeners(self, pipeline): event_handler_1 = Mock() event_handler_2 = Mock() - pipeline.event_listeners = [EventListener(handler=event_handler_1), EventListener(handler=event_handler_2)] + pipeline.event_listeners = [ + EventListener(driver=LocalEventListenerDriver(handler=event_handler_1)), + EventListener(driver=LocalEventListenerDriver(handler=event_handler_2)), + ] # can't mock subtask events, so must manually call pipeline.tasks[0].subtasks[0].before_run() pipeline.tasks[0].subtasks[0].after_run() @@ -54,15 +58,37 @@ def test_typed_listeners(self, pipeline): completion_chunk_handler = Mock() pipeline.event_listeners = [ - EventListener(start_prompt_event_handler, event_types=[StartPromptEvent]), - EventListener(finish_prompt_event_handler, event_types=[FinishPromptEvent]), - EventListener(start_task_event_handler, event_types=[StartTaskEvent]), - EventListener(finish_task_event_handler, event_types=[FinishTaskEvent]), - EventListener(start_subtask_event_handler, event_types=[StartActionsSubtaskEvent]), - EventListener(finish_subtask_event_handler, event_types=[FinishActionsSubtaskEvent]), - EventListener(start_structure_run_event_handler, event_types=[StartStructureRunEvent]), - EventListener(finish_structure_run_event_handler, event_types=[FinishStructureRunEvent]), - EventListener(completion_chunk_handler, event_types=[CompletionChunkEvent]), + EventListener( + driver=LocalEventListenerDriver(handler=start_prompt_event_handler), event_types=[StartPromptEvent] + ), + EventListener( + driver=LocalEventListenerDriver(handler=finish_prompt_event_handler), event_types=[FinishPromptEvent] + ), + EventListener( + driver=LocalEventListenerDriver(handler=start_task_event_handler), event_types=[StartTaskEvent] + ), + EventListener( + driver=LocalEventListenerDriver(handler=finish_task_event_handler), event_types=[FinishTaskEvent] + ), + EventListener( + driver=LocalEventListenerDriver(handler=start_subtask_event_handler), + event_types=[StartActionsSubtaskEvent], + ), + EventListener( + driver=LocalEventListenerDriver(handler=finish_subtask_event_handler), + event_types=[FinishActionsSubtaskEvent], + ), + EventListener( + driver=LocalEventListenerDriver(handler=start_structure_run_event_handler), + event_types=[StartStructureRunEvent], + ), + EventListener( + driver=LocalEventListenerDriver(handler=finish_structure_run_event_handler), + event_types=[FinishStructureRunEvent], + ), + EventListener( + driver=LocalEventListenerDriver(handler=completion_chunk_handler), event_types=[CompletionChunkEvent] + ), ] # can't mock subtask events, so must manually call @@ -84,19 +110,23 @@ def test_add_remove_event_listener(self, pipeline): pipeline.event_listeners = [] mock1 = Mock() mock2 = Mock() - # duplicate event listeners will only get added once - event_listener_1 = pipeline.add_event_listener(EventListener(mock1, event_types=[StartPromptEvent])) - pipeline.add_event_listener(EventListener(mock1, event_types=[StartPromptEvent])) + event_listener_1 = pipeline.add_event_listener( + EventListener(driver=LocalEventListenerDriver(handler=mock1), event_types=[StartPromptEvent]) + ) - event_listener_3 = pipeline.add_event_listener(EventListener(mock1, event_types=[FinishPromptEvent])) - event_listener_4 = pipeline.add_event_listener(EventListener(mock2, event_types=[StartPromptEvent])) + event_listener_2 = pipeline.add_event_listener( + EventListener(driver=LocalEventListenerDriver(handler=mock1), event_types=[FinishPromptEvent]) + ) + event_listener_3 = pipeline.add_event_listener( + EventListener(driver=LocalEventListenerDriver(handler=mock2), event_types=[StartPromptEvent]) + ) - event_listener_5 = pipeline.add_event_listener(EventListener(mock2)) + event_listener_4 = pipeline.add_event_listener(EventListener(driver=LocalEventListenerDriver(handler=mock2))) assert len(pipeline.event_listeners) == 4 pipeline.remove_event_listener(event_listener_1) + pipeline.remove_event_listener(event_listener_2) pipeline.remove_event_listener(event_listener_3) pipeline.remove_event_listener(event_listener_4) - pipeline.remove_event_listener(event_listener_5) assert len(pipeline.event_listeners) == 0 From f4b2af7a5c6dc506a1e5a38ac6322d00e5a6a3fa Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 10 Apr 2024 13:26:49 -0700 Subject: [PATCH 013/145] Fix trailing slash (#740) --- .../event_listener/griptape_cloud_event_listener_driver.py | 2 +- .../event_listener/test_griptape_cloud_event_listener_driver.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py index 181a246f6..0b59d93cb 100644 --- a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -27,6 +27,6 @@ def validate_run_id(self, _, run_id: str): ) def try_publish_event(self, event: BaseEvent) -> None: - url = urljoin(self.base_url.strip("/"), f"/api/runs/{self.run_id}/events/") + url = urljoin(self.base_url.strip("/"), f"/api/runs/{self.run_id}/events") requests.post(url=url, json=event.to_dict(), headers=self.headers) diff --git a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py index be6340b45..04b7de4e7 100644 --- a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py @@ -27,7 +27,7 @@ def test_try_publish_event(self, mock_post, driver): driver.try_publish_event(event=event) mock_post.assert_called_once_with( - url=f"https://cloud.griptape.ai/api/runs/{driver.run_id}/events/", + url=f"https://cloud.griptape.ai/api/runs/{driver.run_id}/events", json=event.to_dict(), headers={"Authorization": "Bearer foo bar"}, ) From 3cac56179959af5ab8daf5472b96667faba8c820 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Thu, 11 Apr 2024 10:32:52 +0200 Subject: [PATCH 014/145] Add LocalFileManagerDriver (#738) --- CHANGELOG.md | 6 +- griptape/drivers/__init__.py | 5 + griptape/drivers/file_manager/__init__.py | 0 .../file_manager/base_file_manager_driver.py | 100 +++++++++ .../file_manager/local_file_manager_driver.py | 41 ++++ griptape/loaders/__init__.py | 2 + griptape/loaders/base_loader.py | 3 +- griptape/loaders/blob_loader.py | 19 ++ griptape/tools/file_manager/tool.py | 142 +++---------- tests/unit/drivers/file_manager/__init__.py | 0 .../test_local_file_manager_driver.py | 88 ++++++++ tests/unit/loaders/test_blob_loader.py | 46 +++++ tests/unit/tools/test_file_manager.py | 195 +++++++++--------- 13 files changed, 440 insertions(+), 207 deletions(-) create mode 100644 griptape/drivers/file_manager/__init__.py create mode 100644 griptape/drivers/file_manager/base_file_manager_driver.py create mode 100644 griptape/drivers/file_manager/local_file_manager_driver.py create mode 100644 griptape/loaders/blob_loader.py create mode 100644 tests/unit/drivers/file_manager/__init__.py create mode 100644 tests/unit/drivers/file_manager/test_local_file_manager_driver.py create mode 100644 tests/unit/loaders/test_blob_loader.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ddbe989d..333717ba2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `GriptapeCloudEventListenerDriver` for sending events to Griptape Cloud. - `WebhookEventListenerDriver` for sending events to a webhook. - `LocalEventListenerDriver` for sending events to a callback function. - +- `BaseFileManagerDriver` to abstract file management operations. +- `LocalFileManagerDriver` for managing files on the local file system. +- Added optional `BaseLoader.encoding` field. +- `BlobLoader` for loading arbitrary binary data as a `BlobArtifact`. ### Changed - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. @@ -25,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: `FileManager.default_loader` is now `None` by default. - **BREAKING**: Replaced `EventListener.handler` with `EventListener.driver` and `LocalEventListenerDriver`. - Improved RAG performance in `VectorQueryEngine`. +- **BREAKING**: Removed `workdir`, `loaders`, `default_loader`, and `save_file_encoding` fields from `FileManager` and added `file_manager_driver`. ## [0.24.2] - 2024-04-04 diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 2adc56d7f..5f3e4f50e 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -93,6 +93,9 @@ from .event_listener.griptape_cloud_event_listener_driver import GriptapeCloudEventListenerDriver from .event_listener.local_event_listener_driver import LocalEventListenerDriver +from .file_manager.base_file_manager_driver import BaseFileManagerDriver +from .file_manager.local_file_manager_driver import LocalFileManagerDriver + __all__ = [ "BasePromptDriver", "OpenAiChatPromptDriver", @@ -174,4 +177,6 @@ "AwsIotCoreEventListenerDriver", "GriptapeCloudEventListenerDriver", "LocalEventListenerDriver", + "BaseFileManagerDriver", + "LocalFileManagerDriver", ] diff --git a/griptape/drivers/file_manager/__init__.py b/griptape/drivers/file_manager/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/drivers/file_manager/base_file_manager_driver.py b/griptape/drivers/file_manager/base_file_manager_driver.py new file mode 100644 index 000000000..897a05336 --- /dev/null +++ b/griptape/drivers/file_manager/base_file_manager_driver.py @@ -0,0 +1,100 @@ +from __future__ import annotations +from abc import ABC, abstractmethod +from attr import Factory, define, field +from griptape.artifacts import BaseArtifact, ErrorArtifact, TextArtifact, InfoArtifact, ListArtifact +import griptape.loaders as loaders + + +@define +class BaseFileManagerDriver(ABC): + """ + BaseFileManagerDriver can be used to list, load, and save files. + + Attributes: + default_loader: The default loader to use for loading file contents into artifacts. + loaders: Dictionary of file extension specifc loaders to use for loading file contents into artifacts. + """ + + default_loader: loaders.BaseLoader = field(default=Factory(lambda: loaders.BlobLoader()), kw_only=True) + loaders: dict[str, loaders.BaseLoader] = field( + default=Factory( + lambda: { + "pdf": loaders.PdfLoader(), + "csv": loaders.CsvLoader(), + "txt": loaders.TextLoader(), + "html": loaders.TextLoader(), + "json": loaders.TextLoader(), + "yaml": loaders.TextLoader(), + "xml": loaders.TextLoader(), + "png": loaders.ImageLoader(), + "jpg": loaders.ImageLoader(), + "jpeg": loaders.ImageLoader(), + "webp": loaders.ImageLoader(), + "gif": loaders.ImageLoader(), + "bmp": loaders.ImageLoader(), + "tiff": loaders.ImageLoader(), + } + ), + kw_only=True, + ) + + def list_files(self, path: str) -> TextArtifact | ErrorArtifact: + try: + entries = self.try_list_files(path) + return TextArtifact("\n".join([e for e in entries])) + except FileNotFoundError: + return ErrorArtifact("Path not found") + except NotADirectoryError: + return ErrorArtifact("Path is not a directory") + except Exception as e: + return ErrorArtifact(f"Failed to list files: {str(e)}") + + @abstractmethod + def try_list_files(self, path: str) -> list[str]: + ... + + def load_file(self, path: str) -> BaseArtifact: + try: + extension = path.split(".")[-1] + loader = self.loaders.get(extension) or self.default_loader + source = self.try_load_file(path) + result = loader.load(source) + + if isinstance(result, BaseArtifact): + return result + else: + return ListArtifact(result) + except FileNotFoundError: + return ErrorArtifact("Path not found") + except IsADirectoryError: + return ErrorArtifact("Path is a directory") + except Exception as e: + return ErrorArtifact(f"Failed to load file: {str(e)}") + + @abstractmethod + def try_load_file(self, path: str) -> bytes: + ... + + def save_file(self, path: str, value: bytes | str) -> InfoArtifact | ErrorArtifact: + try: + extension = path.split(".")[-1] + loader = self.loaders.get(extension) or self.default_loader + encoding = None if loader is None else loader.encoding + + if isinstance(value, str): + if encoding is None: + value = value.encode() + else: + value = value.encode(encoding=encoding) + elif isinstance(value, bytearray) or isinstance(value, memoryview): + raise ValueError(f"Unsupported type: {type(value)}") + + self.try_save_file(path, value) + + return InfoArtifact("Successfully saved file") + except Exception as e: + return ErrorArtifact(f"Failed to save file: {str(e)}") + + @abstractmethod + def try_save_file(self, path: str, value: bytes): + ... diff --git a/griptape/drivers/file_manager/local_file_manager_driver.py b/griptape/drivers/file_manager/local_file_manager_driver.py new file mode 100644 index 000000000..aa875c57a --- /dev/null +++ b/griptape/drivers/file_manager/local_file_manager_driver.py @@ -0,0 +1,41 @@ +from __future__ import annotations +import os +from pathlib import Path +from attr import define, field, Factory +from .base_file_manager_driver import BaseFileManagerDriver + + +@define +class LocalFileManagerDriver(BaseFileManagerDriver): + """ + LocalFileManagerDriver can be used to list, load, and save files on the local file system. + + Attributes: + workdir: The absolute working directory. List, load, and save operations will be performed relative to this directory. + """ + + workdir: str = field(default=Factory(lambda: os.getcwd()), kw_only=True) + + @workdir.validator # pyright: ignore + def validate_workdir(self, _, workdir: str) -> None: + if not Path(workdir).is_absolute(): + raise ValueError("Workdir must be an absolute path") + + def try_list_files(self, path: str) -> list[str]: + full_path = self._full_path(path) + return os.listdir(full_path) + + def try_load_file(self, path: str) -> bytes: + full_path = self._full_path(path) + with open(full_path, "rb") as file: + return file.read() + + def try_save_file(self, path: str, value: bytes): + full_path = self._full_path(path) + os.makedirs(os.path.dirname(full_path), exist_ok=True) + with open(full_path, "wb") as file: + file.write(value) + + def _full_path(self, path: str) -> Path: + path = path.lstrip("/") + return Path(os.path.normpath(os.path.join(self.workdir, path))) diff --git a/griptape/loaders/__init__.py b/griptape/loaders/__init__.py index 622ed0c1c..38beba01a 100644 --- a/griptape/loaders/__init__.py +++ b/griptape/loaders/__init__.py @@ -8,6 +8,7 @@ from .dataframe_loader import DataFrameLoader from .email_loader import EmailLoader from .image_loader import ImageLoader +from .blob_loader import BlobLoader __all__ = [ @@ -21,4 +22,5 @@ "DataFrameLoader", "EmailLoader", "ImageLoader", + "BlobLoader", ] diff --git a/griptape/loaders/base_loader.py b/griptape/loaders/base_loader.py index 531ec23b5..092319b85 100644 --- a/griptape/loaders/base_loader.py +++ b/griptape/loaders/base_loader.py @@ -2,7 +2,7 @@ from abc import ABC, abstractmethod from concurrent import futures -from typing import Any +from typing import Any, Optional from collections.abc import Mapping, Sequence from attr import define, field, Factory @@ -15,6 +15,7 @@ @define class BaseLoader(ABC): futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + encoding: Optional[str] = field(default=None, kw_only=True) @abstractmethod def load(self, source: Any, *args, **kwargs) -> BaseArtifact | Sequence[BaseArtifact]: diff --git a/griptape/loaders/blob_loader.py b/griptape/loaders/blob_loader.py new file mode 100644 index 000000000..c85c63bcb --- /dev/null +++ b/griptape/loaders/blob_loader.py @@ -0,0 +1,19 @@ +from __future__ import annotations +from typing import Any, Union, cast + +from attr import define + +from griptape.artifacts import BlobArtifact, ErrorArtifact +from griptape.loaders import BaseLoader + + +@define +class BlobLoader(BaseLoader): + def load(self, source: Any, *args, **kwargs) -> BlobArtifact | ErrorArtifact: + if self.encoding is None: + return BlobArtifact(source) + else: + return BlobArtifact(source, encoding=self.encoding) + + def load_collection(self, sources: list[bytes | str], *args, **kwargs) -> dict[str, BlobArtifact | ErrorArtifact]: + return cast(dict[str, Union[BlobArtifact, ErrorArtifact]], super().load_collection(sources, *args, **kwargs)) diff --git a/griptape/tools/file_manager/tool.py b/griptape/tools/file_manager/tool.py index 7587360cf..6aa2c85c0 100644 --- a/griptape/tools/file_manager/tool.py +++ b/griptape/tools/file_manager/tool.py @@ -1,58 +1,23 @@ from __future__ import annotations -import logging import os -from pathlib import Path from attr import define, field, Factory -from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact, BaseArtifact, TextArtifact -from griptape.artifacts.blob_artifact import BlobArtifact +from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact, TextArtifact +from griptape.drivers import BaseFileManagerDriver, LocalFileManagerDriver from griptape.tools import BaseTool from griptape.utils.decorators import activity -from griptape.loaders import BaseLoader, PdfLoader, CsvLoader, TextLoader, ImageLoader from schema import Schema, Literal -from typing import Optional, Any @define class FileManager(BaseTool): """ - FileManager is a tool that can be used to load and save files. + FileManager is a tool that can be used to list, load, and save files. Attributes: - workdir: The absolute directory to load files from and save files to. - loaders: Dictionary of file extensions and matching loaders to use when loading files in load_files_from_disk. - default_loader: The loader to use when loading files in load_files_from_disk without any matching loader in `loaders`. - save_file_encoding: The encoding to use when saving files to disk. + file_manager_driver: File Manager Driver to use to list, load, and save files. """ - workdir: str = field(default=Factory(lambda: os.getcwd()), kw_only=True) - default_loader: Optional[BaseLoader] = field(default=None, kw_only=True) - loaders: dict[str, BaseLoader] = field( - default=Factory( - lambda: { - "pdf": PdfLoader(), - "csv": CsvLoader(), - "txt": TextLoader(), - "html": TextLoader(), - "json": TextLoader(), - "yaml": TextLoader(), - "xml": TextLoader(), - "png": ImageLoader(), - "jpg": ImageLoader(), - "jpeg": ImageLoader(), - "webp": ImageLoader(), - "gif": ImageLoader(), - "bmp": ImageLoader(), - "tiff": ImageLoader(), - } - ), - kw_only=True, - ) - save_file_encoding: Optional[str] = field(default=None, kw_only=True) - - @workdir.validator # pyright: ignore - def validate_workdir(self, _, workdir: str) -> None: - if not Path(workdir).is_absolute(): - raise ValueError("workdir has to be absolute absolute") + file_manager_driver: BaseFileManagerDriver = field(default=Factory(lambda: LocalFileManagerDriver()), kw_only=True) @activity( config={ @@ -63,15 +28,8 @@ def validate_workdir(self, _, workdir: str) -> None: } ) def list_files_from_disk(self, params: dict) -> TextArtifact | ErrorArtifact: - path = params["values"]["path"].lstrip("/") - full_path = Path(os.path.join(self.workdir, path)) - - if os.path.exists(full_path): - entries = os.listdir(full_path) - - return TextArtifact("\n".join([e for e in entries])) - else: - return ErrorArtifact("Path not found") + path = params["values"]["path"] + return self.file_manager_driver.list_files(path) @activity( config={ @@ -87,28 +45,15 @@ def list_files_from_disk(self, params: dict) -> TextArtifact | ErrorArtifact: } ) def load_files_from_disk(self, params: dict) -> ListArtifact | ErrorArtifact: + paths = params["values"]["paths"] artifacts = [] - for path in params["values"]["paths"]: - path = path.lstrip("/") - full_path = Path(os.path.join(self.workdir, path)) - extension = path.split(".")[-1] - loader = self.loaders.get(extension) or self.default_loader - with open(full_path, "rb") as file: - content = file.read() - - if loader is None: - result = BlobArtifact(content) + for path in paths: + artifact = self.file_manager_driver.load_file(path) + if isinstance(artifact, ListArtifact): + artifacts.extend(artifact.value) else: - result = loader.load(content) - - if isinstance(result, list): - artifacts.extend(result) - elif isinstance(result, BaseArtifact): - artifacts.append(result) - else: - logging.warning(f"Unknown loader return type for file {path}") - + artifacts.append(artifact) return ListArtifact(artifacts) @activity( @@ -128,33 +73,29 @@ def load_files_from_disk(self, params: dict) -> ListArtifact | ErrorArtifact: } ) def save_memory_artifacts_to_disk(self, params: dict) -> ErrorArtifact | InfoArtifact: - memory = self.find_input_memory(params["values"]["memory_name"]) - artifact_namespace = params["values"]["artifact_namespace"] dir_name = params["values"]["dir_name"] file_name = params["values"]["file_name"] + memory_name = params["values"]["memory_name"] + artifact_namespace = params["values"]["artifact_namespace"] - if memory: - list_artifact = memory.load_artifacts(artifact_namespace) + memory = self.find_input_memory(params["values"]["memory_name"]) + if not memory: + return ErrorArtifact(f"Failed to save memory artifacts to disk - memory named '{memory_name}' not found") - if len(list_artifact) == 0: - return ErrorArtifact("no artifacts found") - elif len(list_artifact) == 1: - try: - self._save_to_disk(os.path.join(self.workdir, dir_name, file_name), list_artifact.value[0].value) + list_artifact = memory.load_artifacts(artifact_namespace) - return InfoArtifact("saved successfully") - except Exception as e: - return ErrorArtifact(f"error writing file to disk: {e}") - else: - try: - for a in list_artifact.value: - self._save_to_disk(os.path.join(self.workdir, dir_name, f"{a.name}-{file_name}"), a.to_text()) + if len(list_artifact) == 0: + return ErrorArtifact( + f"Failed to save memory artifacts to disk - memory named '{memory_name}' does not contain any artifacts" + ) - return InfoArtifact("saved successfully") - except Exception as e: - return ErrorArtifact(f"error writing file to disk: {e}") - else: - return ErrorArtifact("memory not found") + for artifact in list_artifact.value: + formatted_file_name = f"{artifact.name}-{file_name}" if len(list_artifact) > 1 else file_name + result = self.file_manager_driver.save_file(os.path.join(dir_name, formatted_file_name), artifact.value) + if isinstance(result, ErrorArtifact): + return result + + return InfoArtifact("Successfully saved memory artifacts to disk") @activity( config={ @@ -171,25 +112,6 @@ def save_memory_artifacts_to_disk(self, params: dict) -> ErrorArtifact | InfoArt } ) def save_content_to_file(self, params: dict) -> ErrorArtifact | InfoArtifact: + path = params["values"]["path"] content = params["values"]["content"] - new_path = params["values"]["path"].lstrip("/") - full_path = os.path.join(self.workdir, new_path) - - try: - self._save_to_disk(full_path, content) - - return InfoArtifact("saved successfully") - except Exception as e: - return ErrorArtifact(f"error writing file to disk: {e}") - - def _save_to_disk(self, path: str, value: Any) -> None: - os.makedirs(os.path.dirname(path), exist_ok=True) - - with open(path, "wb") as file: - if isinstance(value, str): - if self.save_file_encoding: - file.write(value.encode(self.save_file_encoding)) - else: - file.write(value.encode()) - else: - file.write(value) + return self.file_manager_driver.save_file(path, content) diff --git a/tests/unit/drivers/file_manager/__init__.py b/tests/unit/drivers/file_manager/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/drivers/file_manager/test_local_file_manager_driver.py b/tests/unit/drivers/file_manager/test_local_file_manager_driver.py new file mode 100644 index 000000000..43ef250cf --- /dev/null +++ b/tests/unit/drivers/file_manager/test_local_file_manager_driver.py @@ -0,0 +1,88 @@ +import os +from pathlib import Path +import tempfile +import pytest +from griptape.artifacts import ErrorArtifact, ListArtifact, TextArtifact +from griptape.drivers import LocalFileManagerDriver +from griptape.loaders.text_loader import TextLoader + + +class TestLocalFileManagerDriver: + @pytest.fixture + def driver(self): + tests_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) + return LocalFileManagerDriver(workdir=tests_dir) + + @pytest.fixture + def temp_dir(self): + with tempfile.TemporaryDirectory() as temp_dir: + yield temp_dir + + def test_validate_workdir(self): + with pytest.raises(ValueError): + LocalFileManagerDriver(workdir="foo") + + def test_list_files(self, driver: LocalFileManagerDriver): + artifact = driver.list_files("resources") + + assert isinstance(artifact, TextArtifact) + assert "bitcoin.pdf" in artifact.value + assert "small.png" in artifact.value + + def test_load_file(self, driver: LocalFileManagerDriver): + artifact = driver.load_file("resources/bitcoin.pdf") + + assert isinstance(artifact, ListArtifact) + assert len(artifact.value) == 4 + + def test_load_file_with_encoding(self, driver: LocalFileManagerDriver): + artifact = driver.load_file("resources/test.txt") + + assert isinstance(artifact, ListArtifact) + assert len(artifact.value) == 1 + assert isinstance(artifact.value[0], TextArtifact) + + def test_load_file_with_encoding_failure(self): + driver = LocalFileManagerDriver( + default_loader=TextLoader(encoding="utf-8"), loaders={}, workdir=os.path.abspath(os.path.dirname(__file__)) + ) + + artifact = driver.load_file("resources/bitcoin.pdf") + + assert isinstance(artifact, ErrorArtifact) + + def test_save_file(self, temp_dir): + driver = LocalFileManagerDriver(workdir=temp_dir) + result = driver.save_file(os.path.join("test", "foobar.txt"), "foobar") + + assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + assert result.value == "Successfully saved file" + + def test_save_file_with_encoding(self, temp_dir): + driver = LocalFileManagerDriver(default_loader=TextLoader(encoding="utf-8"), loaders={}, workdir=temp_dir) + result = driver.save_file(os.path.join("test", "foobar.txt"), "foobar") + + assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + assert result.value == "Successfully saved file" + + def test_save_and_load_file_with_encoding(self, temp_dir): + driver = LocalFileManagerDriver(loaders={"txt": TextLoader(encoding="ascii")}, workdir=temp_dir) + result = driver.save_file(os.path.join("test", "foobar.txt"), "foobar") + + assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + assert result.value == "Successfully saved file" + + driver = LocalFileManagerDriver(default_loader=TextLoader(encoding="ascii"), loaders={}, workdir=temp_dir) + result = driver.load_file(os.path.join("test", "foobar.txt")) + + assert isinstance(result, ListArtifact) + assert len(result.value) == 1 + assert isinstance(result.value[0], TextArtifact) + + def test_chrdir_getcwd(self, temp_dir): + os.chdir(temp_dir) + file_manager_1 = LocalFileManagerDriver() + assert file_manager_1.workdir.endswith(temp_dir) + os.chdir("/tmp") + file_manager_2 = LocalFileManagerDriver() + assert file_manager_2.workdir.endswith("/tmp") diff --git a/tests/unit/loaders/test_blob_loader.py b/tests/unit/loaders/test_blob_loader.py new file mode 100644 index 000000000..f2b462726 --- /dev/null +++ b/tests/unit/loaders/test_blob_loader.py @@ -0,0 +1,46 @@ +import pytest +from griptape.artifacts import BlobArtifact +from griptape.loaders import BlobLoader + + +class TestTextLoader: + @pytest.fixture(params=["utf-8", "ascii", None]) + def loader(self, request): + encoding = request.param + kwargs = {"encoding": encoding} if encoding is not None else {} + return BlobLoader(**kwargs) + + @pytest.fixture(params=["bytes_from_resource_path", "str_from_resource_path"]) + def create_source(self, request): + return request.getfixturevalue(request.param) + + def test_load(self, loader, create_source): + source = create_source("test.txt") + + artifact = loader.load(source) + + assert isinstance(artifact, BlobArtifact) + if loader.encoding is None: + assert artifact.value.decode("utf-8").startswith("foobar foobar foobar") + else: + assert artifact.encoding == loader.encoding + assert artifact.to_text().startswith("foobar foobar foobar") + + def test_load_collection(self, loader, create_source): + resource_paths = ["test.txt"] + sources = [create_source(resource_path) for resource_path in resource_paths] + + collection = loader.load_collection(sources) + + keys = {loader.to_key(source) for source in sources} + assert collection.keys() == keys + + key = next(iter(keys)) + artifact = collection[key] + + assert isinstance(artifact, BlobArtifact) + if loader.encoding is None: + assert artifact.value.decode("utf-8").startswith("foobar foobar foobar") + else: + assert artifact.encoding == loader.encoding + assert artifact.to_text().startswith("foobar foobar foobar") diff --git a/tests/unit/tools/test_file_manager.py b/tests/unit/tools/test_file_manager.py index 3ca19a5cc..06c49f32b 100644 --- a/tests/unit/tools/test_file_manager.py +++ b/tests/unit/tools/test_file_manager.py @@ -3,138 +3,143 @@ import tempfile from pathlib import Path import pytest -from griptape.artifacts import ErrorArtifact from griptape.artifacts import TextArtifact, ListArtifact -from griptape.loaders.pdf_loader import PdfLoader +from griptape.artifacts.error_artifact import ErrorArtifact +from griptape.drivers.file_manager.local_file_manager_driver import LocalFileManagerDriver from griptape.loaders.text_loader import TextLoader from griptape.tools import FileManager from tests.utils import defaults class TestFileManager: - def test_validate_workdir(self): - with pytest.raises(ValueError): - FileManager(workdir="foo") + @pytest.fixture + def file_manager(self): + return FileManager( + input_memory=[defaults.text_task_memory("Memory1")], + file_manager_driver=LocalFileManagerDriver(workdir=os.path.abspath(os.path.dirname(__file__))), + ) + + @pytest.fixture + def temp_dir(self): + with tempfile.TemporaryDirectory() as temp_dir: + yield temp_dir - def test_list_files_from_disk(self): - result = FileManager( - input_memory=[defaults.text_task_memory("Memory1")], workdir=os.path.abspath(os.path.dirname(__file__)) - ).list_files_from_disk({"values": {"path": "../../resources"}}) + def test_list_files_from_disk(self, file_manager): + result = file_manager.list_files_from_disk({"values": {"path": "../../resources"}}) assert isinstance(result, TextArtifact) assert "bitcoin.pdf" in result.value assert "small.png" in result.value - def test_load_files_from_disk(self): - result = FileManager( - input_memory=[defaults.text_task_memory("Memory1")], workdir=os.path.abspath(os.path.dirname(__file__)) - ).load_files_from_disk({"values": {"paths": ["../../resources/bitcoin.pdf"]}}) + def test_load_files_from_disk(self, file_manager): + result = file_manager.load_files_from_disk({"values": {"paths": ["../../resources/bitcoin.pdf"]}}) assert isinstance(result, ListArtifact) assert len(result.value) == 4 - def test_load_files_from_disk_with_encoding(self): - result = FileManager(workdir=os.path.abspath(os.path.dirname(__file__))).load_files_from_disk( - {"values": {"paths": ["../../resources/test.txt"]}} - ) + def test_load_files_from_disk_with_encoding(self, file_manager): + result = file_manager.load_files_from_disk({"values": {"paths": ["../../resources/test.txt"]}}) assert isinstance(result, ListArtifact) assert len(result.value) == 1 assert isinstance(result.value[0], TextArtifact) def test_load_files_from_disk_with_encoding_failure(self): - result = FileManager( - workdir=os.path.abspath(os.path.dirname(__file__)), default_loader=TextLoader(encoding="utf-8"), loaders={} - ).load_files_from_disk({"values": {"paths": ["../../resources/bitcoin.pdf"]}}) + file_manager = FileManager( + file_manager_driver=LocalFileManagerDriver( + default_loader=TextLoader(encoding="utf-8"), + loaders={}, + workdir=os.path.abspath(os.path.dirname(__file__)), + ) + ) + + result = file_manager.load_files_from_disk({"values": {"paths": ["../../resources/bitcoin.pdf"]}}) assert isinstance(result.value[0], ErrorArtifact) - def test_save_memory_artifacts_to_disk_for_one_artifact(self): - with tempfile.TemporaryDirectory() as temp_dir: - memory = defaults.text_task_memory("Memory1") - artifact = TextArtifact("foobar") - - memory.store_artifact("foobar", artifact) - - result = FileManager(workdir=temp_dir, input_memory=[memory]).save_memory_artifacts_to_disk( - { - "values": { - "dir_name": "test", - "file_name": "foobar.txt", - "memory_name": memory.name, - "artifact_namespace": "foobar", - } + def test_save_memory_artifacts_to_disk_for_one_artifact(self, temp_dir): + memory = defaults.text_task_memory("Memory1") + artifact = TextArtifact("foobar") + + memory.store_artifact("foobar", artifact) + + file_manager = FileManager(input_memory=[memory], file_manager_driver=LocalFileManagerDriver(workdir=temp_dir)) + result = file_manager.save_memory_artifacts_to_disk( + { + "values": { + "dir_name": "test", + "file_name": "foobar.txt", + "memory_name": memory.name, + "artifact_namespace": "foobar", } - ) + } + ) - assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" - assert result.value == "saved successfully" + assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + assert result.value == "Successfully saved memory artifacts to disk" - def test_save_memory_artifacts_to_disk_for_multiple_artifacts(self): + def test_save_memory_artifacts_to_disk_for_multiple_artifacts(self, temp_dir): file_name = "foobar.txt" - - with tempfile.TemporaryDirectory() as temp_dir: - memory = defaults.text_task_memory("Memory1") - artifacts = [TextArtifact("foobar"), TextArtifact("baz")] - - for a in artifacts: - memory.store_artifact("foobar", a) - - result = FileManager(workdir=temp_dir, input_memory=[memory]).save_memory_artifacts_to_disk( - { - "values": { - "dir_name": "test", - "file_name": file_name, - "memory_name": memory.name, - "artifact_namespace": "foobar", - } + memory = defaults.text_task_memory("Memory1") + artifacts = [TextArtifact("foobar"), TextArtifact("baz")] + + for a in artifacts: + memory.store_artifact("foobar", a) + + file_manager = FileManager(input_memory=[memory], file_manager_driver=LocalFileManagerDriver(workdir=temp_dir)) + result = file_manager.save_memory_artifacts_to_disk( + { + "values": { + "dir_name": "test", + "file_name": file_name, + "memory_name": memory.name, + "artifact_namespace": "foobar", } - ) - - assert Path(os.path.join(temp_dir, "test", f"{artifacts[0].name}-{file_name}")).read_text() == "foobar" - assert Path(os.path.join(temp_dir, "test", f"{artifacts[1].name}-{file_name}")).read_text() == "baz" - assert result.value == "saved successfully" + } + ) - def test_save_content_to_file(self): - with tempfile.TemporaryDirectory() as temp_dir: - result = FileManager(workdir=temp_dir).save_content_to_file( - {"values": {"path": os.path.join("test", "foobar.txt"), "content": "foobar"}} - ) + assert Path(os.path.join(temp_dir, "test", f"{artifacts[0].name}-{file_name}")).read_text() == "foobar" + assert Path(os.path.join(temp_dir, "test", f"{artifacts[1].name}-{file_name}")).read_text() == "baz" + assert result.value == "Successfully saved memory artifacts to disk" - assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" - assert result.value == "saved successfully" + def test_save_content_to_file(self, temp_dir): + file_manager = FileManager(file_manager_driver=LocalFileManagerDriver(workdir=temp_dir)) + result = file_manager.save_content_to_file( + {"values": {"path": os.path.join("test", "foobar.txt"), "content": "foobar"}} + ) - def test_save_content_to_file_with_encoding(self): - with tempfile.TemporaryDirectory() as temp_dir: - result = FileManager(workdir=temp_dir, save_file_encoding="utf-8").save_content_to_file( - {"values": {"path": os.path.join("test", "foobar.txt"), "content": "foobar"}} - ) + assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + assert result.value == "Successfully saved file" - assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" - assert result.value == "saved successfully" + def test_save_content_to_file_with_encoding(self, temp_dir): + file_manager = FileManager( + file_manager_driver=LocalFileManagerDriver(default_loader=TextLoader(encoding="utf-8"), workdir=temp_dir) + ) + result = file_manager.save_content_to_file( + {"values": {"path": os.path.join("test", "foobar.txt"), "content": "foobar"}} + ) - def test_save_and_load_content_to_file_with_encoding(self): - with tempfile.TemporaryDirectory() as temp_dir: - result = FileManager(workdir=temp_dir, save_file_encoding="ascii").save_content_to_file( - {"values": {"path": os.path.join("test", "foobar.txt"), "content": "foobar"}} - ) + assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + assert result.value == "Successfully saved file" - assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" - assert result.value == "saved successfully" + def test_save_and_load_content_to_file_with_encoding(self, temp_dir): + file_manager = FileManager( + file_manager_driver=LocalFileManagerDriver(loaders={"txt": TextLoader(encoding="ascii")}, workdir=temp_dir) + ) + result = file_manager.save_content_to_file( + {"values": {"path": os.path.join("test", "foobar.txt"), "content": "foobar"}} + ) - result = FileManager( - workdir=temp_dir, default_loader=TextLoader(encoding="ascii"), loaders={} - ).load_files_from_disk({"values": {"paths": [os.path.join("test", "foobar.txt")]}}) + assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + assert result.value == "Successfully saved file" - assert isinstance(result, ListArtifact) - assert len(result.value) == 1 - assert isinstance(result.value[0], TextArtifact) + file_manager = FileManager( + file_manager_driver=LocalFileManagerDriver( + default_loader=TextLoader(encoding="ascii"), loaders={}, workdir=temp_dir + ) + ) + result = file_manager.load_files_from_disk({"values": {"paths": [os.path.join("test", "foobar.txt")]}}) - def test_chrdir_getcwd(self): - with tempfile.TemporaryDirectory() as temp_dir: - os.chdir(temp_dir) - file_manager_1 = FileManager() - assert file_manager_1.workdir.endswith(temp_dir) - os.chdir("/tmp") - file_manager_2 = FileManager() - assert file_manager_2.workdir.endswith("/tmp") + assert isinstance(result, ListArtifact) + assert len(result.value) == 1 + assert isinstance(result.value[0], TextArtifact) From fa2f3378838dd5f9e5af26db1b49f003a05f5dd9 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 11 Apr 2024 13:26:43 -0700 Subject: [PATCH 015/145] Add new fields to events (#742) --- CHANGELOG.md | 3 ++ griptape/drivers/prompt/base_prompt_driver.py | 3 +- griptape/events/base_prompt_event.py | 1 + griptape/events/finish_structure_run_event.py | 12 +++++-- griptape/events/start_structure_run_event.py | 12 +++++-- griptape/structures/structure.py | 10 ++++-- tests/unit/events/test_base_event.py | 33 +++++++++++++++++-- tests/unit/events/test_finish_prompt_event.py | 3 +- .../events/test_finish_structure_run_event.py | 6 +++- tests/unit/events/test_start_prompt_event.py | 3 +- .../events/test_start_structure_run_event.py | 5 ++- 11 files changed, 77 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 333717ba2..d973c90e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `LocalFileManagerDriver` for managing files on the local file system. - Added optional `BaseLoader.encoding` field. - `BlobLoader` for loading arbitrary binary data as a `BlobArtifact`. +- `model` field to `StartPromptEvent` and `FinishPromptEvent`. +- `input_task_input` and `input_task_output` fields to `StartStructureRunEvent`. +- `output_task_input` and `output_task_output` fields to `FinishStructureRunEvent`. ### Changed - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index 2133617b8..2f7607b00 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -57,6 +57,7 @@ def before_run(self, prompt_stack: PromptStack) -> None: if self.structure: self.structure.publish_event( StartPromptEvent( + model=self.model, token_count=self.token_count(prompt_stack), prompt_stack=prompt_stack, prompt=self.prompt_stack_to_string(prompt_stack), @@ -66,7 +67,7 @@ def before_run(self, prompt_stack: PromptStack) -> None: def after_run(self, result: TextArtifact) -> None: if self.structure: self.structure.publish_event( - FinishPromptEvent(token_count=result.token_count(self.tokenizer), result=result.value) + FinishPromptEvent(model=self.model, token_count=result.token_count(self.tokenizer), result=result.value) ) def run(self, prompt_stack: PromptStack) -> TextArtifact: diff --git a/griptape/events/base_prompt_event.py b/griptape/events/base_prompt_event.py index 3087f0c51..b9dcd0c57 100644 --- a/griptape/events/base_prompt_event.py +++ b/griptape/events/base_prompt_event.py @@ -6,4 +6,5 @@ @define class BasePromptEvent(BaseEvent, ABC): + model: str = field(kw_only=True, metadata={"serializable": True}) token_count: int = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/finish_structure_run_event.py b/griptape/events/finish_structure_run_event.py index 72138c16f..8591041e2 100644 --- a/griptape/events/finish_structure_run_event.py +++ b/griptape/events/finish_structure_run_event.py @@ -1,7 +1,15 @@ -from attrs import define +from typing import Optional, Union +from collections.abc import Sequence + +from attrs import define, field + +from griptape.artifacts import BaseArtifact from griptape.events.base_event import BaseEvent @define class FinishStructureRunEvent(BaseEvent): - ... + output_task_input: Union[ + BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]] + ] = field(kw_only=True, metadata={"serializable": True}) + output_task_output: Optional[BaseArtifact] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/start_structure_run_event.py b/griptape/events/start_structure_run_event.py index c8e0180df..a0780fd1f 100644 --- a/griptape/events/start_structure_run_event.py +++ b/griptape/events/start_structure_run_event.py @@ -1,7 +1,15 @@ -from attrs import define +from typing import Optional, Union +from collections.abc import Sequence + +from attrs import define, field + +from griptape.artifacts import BaseArtifact from griptape.events.base_event import BaseEvent @define class StartStructureRunEvent(BaseEvent): - ... + input_task_input: Union[ + BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]] + ] = field(kw_only=True, metadata={"serializable": True}) + input_task_output: Optional[BaseArtifact] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index e05d25ca5..e807393f4 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -257,10 +257,16 @@ def context(self, task: BaseTask) -> dict[str, Any]: return {"args": self.execution_args, "structure": self} def before_run(self) -> None: - self.publish_event(StartStructureRunEvent()) + self.publish_event( + StartStructureRunEvent(input_task_input=self.input_task.input, input_task_output=self.input_task.output) + ) def after_run(self) -> None: - self.publish_event(FinishStructureRunEvent()) + self.publish_event( + FinishStructureRunEvent( + output_task_input=self.output_task.input, output_task_output=self.output_task.output + ) + ) @abstractmethod def add_task(self, task: BaseTask) -> BaseTask: diff --git a/tests/unit/events/test_base_event.py b/tests/unit/events/test_base_event.py index 9c9f340a3..2def78015 100644 --- a/tests/unit/events/test_base_event.py +++ b/tests/unit/events/test_base_event.py @@ -33,6 +33,7 @@ def test_start_prompt_event_from_dict(self): "token_count": 10, "prompt_stack": {"inputs": [{"content": "foo", "role": "user"}, {"content": "bar", "role": "system"}]}, "prompt": "foo bar", + "model": "foo bar", } event = BaseEvent.from_dict(dict_value) @@ -45,9 +46,16 @@ def test_start_prompt_event_from_dict(self): assert event.prompt_stack.inputs[1].content == "bar" assert event.prompt_stack.inputs[1].role == "system" assert event.prompt == "foo bar" + assert event.model == "foo bar" def test_finish_prompt_event_from_dict(self): - dict_value = {"type": "FinishPromptEvent", "timestamp": 123.0, "token_count": 10, "result": "foo bar"} + dict_value = { + "type": "FinishPromptEvent", + "timestamp": 123.0, + "token_count": 10, + "result": "foo bar", + "model": "foo bar", + } event = BaseEvent.from_dict(dict_value) @@ -55,6 +63,7 @@ def test_finish_prompt_event_from_dict(self): assert event.timestamp == 123 assert event.token_count == 10 assert event.result == "foo bar" + assert event.model == "foo bar" def test_start_task_event_from_dict(self): dict_value = { @@ -103,6 +112,7 @@ def test_start_subtask_event_from_dict(self): assert event.task_input.value == "foo" assert event.task_output.value == "bar" assert event.subtask_thought == "bar" + assert event.subtask_actions is not None assert event.subtask_actions[0]["tag"] == "foo" assert event.subtask_actions[0]["name"] == "qux" assert event.subtask_actions[0]["path"] == "foopath" @@ -156,6 +166,7 @@ def test_finish_subtask_event_from_dict(self): assert event.task_input.value == "foo" assert event.task_output.value == "bar" assert event.subtask_thought == "bar" + assert event.subtask_actions is not None assert event.subtask_actions[0]["tag"] == "foo" assert event.subtask_actions[0]["name"] == "qux" assert event.subtask_actions[0]["path"] == "foopath" @@ -163,20 +174,36 @@ def test_finish_subtask_event_from_dict(self): assert event.subtask_actions[0]["input"]["value"] == "quux" def test_start_structure_run_event_from_dict(self): - dict_value = {"type": "StartStructureRunEvent", "timestamp": 123.0} + dict_value = { + "type": "StartStructureRunEvent", + "timestamp": 123.0, + "input_task_input": {"type": "TextArtifact", "value": "foo"}, + "input_task_output": {"type": "TextArtifact", "value": "bar"}, + } event = BaseEvent.from_dict(dict_value) assert isinstance(event, StartStructureRunEvent) assert event.timestamp == 123 + assert isinstance(event.input_task_input, BaseArtifact) + assert event.input_task_input.value == "foo" + assert event.input_task_output.value == "bar" def test_finish_structure_run_event_from_dict(self): - dict_value = {"type": "FinishStructureRunEvent", "timestamp": 123.0} + dict_value = { + "type": "FinishStructureRunEvent", + "timestamp": 123.0, + "output_task_input": {"type": "TextArtifact", "value": "foo"}, + "output_task_output": {"type": "TextArtifact", "value": "bar"}, + } event = BaseEvent.from_dict(dict_value) assert isinstance(event, FinishStructureRunEvent) assert event.timestamp == 123 + assert isinstance(event.output_task_input, BaseArtifact) + assert event.output_task_input.value == "foo" + assert event.output_task_output.value == "bar" def test_completion_chunk_event_from_dict(self): dict_value = {"type": "CompletionChunkEvent", "timestamp": 123.0, "token": "foo"} diff --git a/tests/unit/events/test_finish_prompt_event.py b/tests/unit/events/test_finish_prompt_event.py index 038804a7d..b788c67f9 100644 --- a/tests/unit/events/test_finish_prompt_event.py +++ b/tests/unit/events/test_finish_prompt_event.py @@ -5,7 +5,7 @@ class TestFinishPromptEvent: @pytest.fixture def finish_prompt_event(self): - return FinishPromptEvent(token_count=123, result="foo bar") + return FinishPromptEvent(token_count=123, result="foo bar", model="foo bar") def test_to_dict(self, finish_prompt_event): assert "timestamp" in finish_prompt_event.to_dict() @@ -13,3 +13,4 @@ def test_to_dict(self, finish_prompt_event): assert finish_prompt_event.to_dict()["token_count"] == 123 assert finish_prompt_event.to_dict()["result"] == "foo bar" + assert finish_prompt_event.to_dict()["model"] == "foo bar" diff --git a/tests/unit/events/test_finish_structure_run_event.py b/tests/unit/events/test_finish_structure_run_event.py index 363b2cf0d..d369ab5e5 100644 --- a/tests/unit/events/test_finish_structure_run_event.py +++ b/tests/unit/events/test_finish_structure_run_event.py @@ -1,11 +1,15 @@ import pytest +from griptape.artifacts.text_artifact import TextArtifact from griptape.events import FinishStructureRunEvent class TestFinishStructureRunEvent: @pytest.fixture def finish_structure_run_event(self): - return FinishStructureRunEvent() + return FinishStructureRunEvent(output_task_input=TextArtifact("foo"), output_task_output=TextArtifact("bar")) def test_to_dict(self, finish_structure_run_event): assert finish_structure_run_event.to_dict() is not None + + assert finish_structure_run_event.to_dict()["output_task_input"]["value"] == "foo" + assert finish_structure_run_event.to_dict()["output_task_output"]["value"] == "bar" diff --git a/tests/unit/events/test_start_prompt_event.py b/tests/unit/events/test_start_prompt_event.py index cc3f8e2ea..a80f8cdfc 100644 --- a/tests/unit/events/test_start_prompt_event.py +++ b/tests/unit/events/test_start_prompt_event.py @@ -9,7 +9,7 @@ def start_prompt_event(self): prompt_stack = PromptStack() prompt_stack.add_user_input("foo") prompt_stack.add_system_input("bar") - return StartPromptEvent(token_count=123, prompt_stack=prompt_stack, prompt="foo bar") + return StartPromptEvent(token_count=123, prompt_stack=prompt_stack, prompt="foo bar", model="foo bar") def test_to_dict(self, start_prompt_event): assert "timestamp" in start_prompt_event.to_dict() @@ -21,3 +21,4 @@ def test_to_dict(self, start_prompt_event): assert start_prompt_event.to_dict()["prompt_stack"]["inputs"][1]["role"] == "system" assert start_prompt_event.to_dict()["prompt"] == "foo bar" + assert start_prompt_event.to_dict()["model"] == "foo bar" diff --git a/tests/unit/events/test_start_structure_run_event.py b/tests/unit/events/test_start_structure_run_event.py index 675ca4799..945b38e64 100644 --- a/tests/unit/events/test_start_structure_run_event.py +++ b/tests/unit/events/test_start_structure_run_event.py @@ -1,11 +1,14 @@ import pytest +from griptape.artifacts.text_artifact import TextArtifact from griptape.events import StartStructureRunEvent class TestStartStructureRunEvent: @pytest.fixture def start_structure_run_event(self): - return StartStructureRunEvent() + return StartStructureRunEvent(input_task_input=TextArtifact("foo"), input_task_output=TextArtifact("bar")) def test_to_dict(self, start_structure_run_event): assert start_structure_run_event.to_dict() is not None + assert start_structure_run_event.to_dict()["input_task_input"]["value"] == "foo" + assert start_structure_run_event.to_dict()["input_task_output"]["value"] == "bar" From fe53d86870498b018657ff1731fdda46fee5d832 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 11 Apr 2024 13:36:55 -0700 Subject: [PATCH 016/145] Remove boto3 from types (#741) --- griptape/schemas/base_schema.py | 5 ++++- griptape/utils/__init__.py | 2 ++ griptape/utils/import_utils.py | 17 +++++++++++++++++ tests/unit/utils/test_import_utils.py | 17 +++++++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/unit/utils/test_import_utils.py diff --git a/griptape/schemas/base_schema.py b/griptape/schemas/base_schema.py index e436e19da..82bc072fb 100644 --- a/griptape/schemas/base_schema.py +++ b/griptape/schemas/base_schema.py @@ -100,13 +100,16 @@ def _resolve_types(cls, attrs_cls: type) -> None: Args: attrs_cls: An attrs class. """ + from griptape.utils.import_utils import import_optional_dependency, is_dependency_installed # These modules are required to avoid `NameError`s when resolving types. from griptape.drivers import BaseConversationMemoryDriver, BasePromptDriver, BasePromptModelDriver from griptape.structures import Structure from griptape.utils import PromptStack from griptape.tokenizers.base_tokenizer import BaseTokenizer - import boto3 + from typing import Any + + boto3 = import_optional_dependency("boto3") if is_dependency_installed("boto3") else Any attrs.resolve_types( attrs_cls, diff --git a/griptape/utils/__init__.py b/griptape/utils/__init__.py index dc3f6e901..1aad72db9 100644 --- a/griptape/utils/__init__.py +++ b/griptape/utils/__init__.py @@ -12,6 +12,7 @@ from .dict_utils import dict_merge from .hash import str_to_hash from .import_utils import import_optional_dependency +from .import_utils import is_dependency_installed from .stream import Stream from .constants import Constants as constants from .load_artifact_from_memory import load_artifact_from_memory @@ -32,6 +33,7 @@ def minify_json(value: str) -> str: "Chat", "str_to_hash", "import_optional_dependency", + "is_dependency_installed", "execute_futures_dict", "TokenCounter", "PromptStack", diff --git a/griptape/utils/import_utils.py b/griptape/utils/import_utils.py index ffbb5ab66..dd5b5b68e 100644 --- a/griptape/utils/import_utils.py +++ b/griptape/utils/import_utils.py @@ -33,3 +33,20 @@ def import_optional_dependency(name: str) -> Optional[ModuleType]: raise ImportError(msg) return module + + +def is_dependency_installed(name: str) -> bool: + """Check if an optional dependency is available. + + Args: + name: The module name. + Returns: + True if the dependency is available. + False if the dependency is not available. + """ + try: + import_optional_dependency(name) + except ImportError: + return False + + return True diff --git a/tests/unit/utils/test_import_utils.py b/tests/unit/utils/test_import_utils.py new file mode 100644 index 000000000..bcfb06c87 --- /dev/null +++ b/tests/unit/utils/test_import_utils.py @@ -0,0 +1,17 @@ +import pytest +from griptape.utils import import_optional_dependency, is_dependency_installed + + +class TestImportUtils: + def test_import_optional_dependency(self): + assert import_optional_dependency("os") + assert import_optional_dependency("boto3") + + with pytest.raises(ImportError): + assert import_optional_dependency("foobar") + + def test_is_dependency_installed(self): + assert is_dependency_installed("os") is True + assert is_dependency_installed("boto3") is True + + assert is_dependency_installed("foobar") is False From 2cc293cce101af0c01e86392fa43874246e34697 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Fri, 12 Apr 2024 22:17:34 +0200 Subject: [PATCH 017/145] Add AmazonS3FileManagerDriver (#743) Co-authored-by: Collin Dutter --- CHANGELOG.md | 1 + griptape/drivers/__init__.py | 2 + .../amazon_s3_file_manager_driver.py | 122 ++++++++ .../file_manager/base_file_manager_driver.py | 4 + .../file_manager/local_file_manager_driver.py | 18 +- .../test_aws_iot_event_listener_driver.py | 2 +- .../test_amazon_s3_file_manager_driver.py | 294 ++++++++++++++++++ .../test_local_file_manager_driver.py | 198 +++++++++++- 8 files changed, 624 insertions(+), 17 deletions(-) create mode 100644 griptape/drivers/file_manager/amazon_s3_file_manager_driver.py create mode 100644 tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index d973c90e8..cd1606b63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `model` field to `StartPromptEvent` and `FinishPromptEvent`. - `input_task_input` and `input_task_output` fields to `StartStructureRunEvent`. - `output_task_input` and `output_task_output` fields to `FinishStructureRunEvent`. +- `AmazonS3FileManagerDriver` for managing files on Amazon S3. ### Changed - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 5f3e4f50e..740990031 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -95,6 +95,7 @@ from .file_manager.base_file_manager_driver import BaseFileManagerDriver from .file_manager.local_file_manager_driver import LocalFileManagerDriver +from .file_manager.amazon_s3_file_manager_driver import AmazonS3FileManagerDriver __all__ = [ "BasePromptDriver", @@ -179,4 +180,5 @@ "LocalEventListenerDriver", "BaseFileManagerDriver", "LocalFileManagerDriver", + "AmazonS3FileManagerDriver", ] diff --git a/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py b/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py new file mode 100644 index 000000000..cbf2109ef --- /dev/null +++ b/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py @@ -0,0 +1,122 @@ +from __future__ import annotations +import os +from pathlib import Path +from typing import TYPE_CHECKING, Any +from attr import define, field, Factory +from griptape.utils.import_utils import import_optional_dependency +from .base_file_manager_driver import BaseFileManagerDriver + +if TYPE_CHECKING: + import boto3 + + +@define +class AmazonS3FileManagerDriver(BaseFileManagerDriver): + """ + AmazonS3FileManagerDriver can be used to list, load, and save files in an Amazon S3 bucket. + + Attributes: + session: The boto3 session to use for S3 operations. + bucket: The name of the S3 bucket. + workdir: The absolute working directory (must start with "/"). List, load, and save + operations will be performed relative to this directory. + s3_client: The S3 client to use for S3 operations. + """ + + session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) + bucket: str = field(kw_only=True) + workdir: str = field(default="/", kw_only=True) + s3_client: Any = field(default=Factory(lambda self: self.session.client("s3"), takes_self=True), kw_only=True) + + @workdir.validator # pyright: ignore + def validate_workdir(self, _, workdir: str) -> None: + if not Path(workdir).is_absolute(): + raise ValueError("Workdir must be an absolute path") + + def try_list_files(self, path: str) -> list[str]: + full_key = self._to_dir_full_key(path) + files_and_dirs = self._list_files_and_dirs(full_key) + if len(files_and_dirs) == 0: + if len(self._list_files_and_dirs(full_key.rstrip("/"), max_items=1)) > 0: + raise NotADirectoryError + else: + raise FileNotFoundError + return files_and_dirs + + def try_load_file(self, path: str) -> bytes: + botocore = import_optional_dependency("botocore") + full_key = self._to_full_key(path) + + if self._is_a_directory(full_key): + raise IsADirectoryError + + try: + response = self.s3_client.get_object(Bucket=self.bucket, Key=full_key) + return response["Body"].read() + except botocore.exceptions.ClientError as e: + if e.response["Error"]["Code"] in {"NoSuchKey", "404"}: + raise FileNotFoundError + else: + raise e + + def try_save_file(self, path: str, value: bytes): + full_key = self._to_full_key(path) + if self._is_a_directory(full_key): + raise IsADirectoryError + self.s3_client.put_object(Bucket=self.bucket, Key=full_key, Body=value) + + def _to_full_key(self, path: str) -> str: + path = path.lstrip("/") + full_key = os.path.join(self.workdir, path) + # Need to keep the trailing slash if it was there, + # because it means the path is a directory. + ended_with_slash = path.endswith("/") + full_key = os.path.normpath(full_key) + if ended_with_slash: + full_key += "/" + return full_key.lstrip("/") + + def _to_dir_full_key(self, path: str) -> str: + full_key = self._to_full_key(path) + # S3 "directories" always end with a slash, except for the root. + if full_key != "" and not full_key.endswith("/"): + full_key += "/" + return full_key + + def _list_files_and_dirs(self, full_key: str, **kwargs) -> list[str]: + max_items = kwargs.get("max_items") + pagination_config = {} + if max_items is not None: + pagination_config["MaxItems"] = max_items + + paginator = self.s3_client.get_paginator("list_objects_v2") + pages = paginator.paginate( + Bucket=self.bucket, Prefix=full_key, Delimiter="/", PaginationConfig=pagination_config + ) + files_and_dirs = [] + for page in pages: + for obj in page.get("CommonPrefixes", []): + prefix = obj.get("Prefix") + dir = prefix[len(full_key) :].rstrip("/") + files_and_dirs.append(dir) + + for obj in page.get("Contents", []): + key = obj.get("Key") + file = key[len(full_key) :] + files_and_dirs.append(file) + return files_and_dirs + + def _is_a_directory(self, full_key: str) -> bool: + botocore = import_optional_dependency("botocore") + if full_key == "" or full_key.endswith("/"): + return True + + try: + self.s3_client.head_object(Bucket=self.bucket, Key=full_key) + except botocore.exceptions.ClientError as e: + if e.response["Error"]["Code"] in {"NoSuchKey", "404"}: + return len(self._list_files_and_dirs(full_key, max_items=1)) > 0 + else: + raise e + + return False diff --git a/griptape/drivers/file_manager/base_file_manager_driver.py b/griptape/drivers/file_manager/base_file_manager_driver.py index 897a05336..b6c0a02ca 100644 --- a/griptape/drivers/file_manager/base_file_manager_driver.py +++ b/griptape/drivers/file_manager/base_file_manager_driver.py @@ -68,6 +68,8 @@ def load_file(self, path: str) -> BaseArtifact: return ErrorArtifact("Path not found") except IsADirectoryError: return ErrorArtifact("Path is a directory") + except NotADirectoryError: + return ErrorArtifact("Not a directory") except Exception as e: return ErrorArtifact(f"Failed to load file: {str(e)}") @@ -92,6 +94,8 @@ def save_file(self, path: str, value: bytes | str) -> InfoArtifact | ErrorArtifa self.try_save_file(path, value) return InfoArtifact("Successfully saved file") + except IsADirectoryError: + return ErrorArtifact("Path is a directory") except Exception as e: return ErrorArtifact(f"Failed to save file: {str(e)}") diff --git a/griptape/drivers/file_manager/local_file_manager_driver.py b/griptape/drivers/file_manager/local_file_manager_driver.py index aa875c57a..96766fa9a 100644 --- a/griptape/drivers/file_manager/local_file_manager_driver.py +++ b/griptape/drivers/file_manager/local_file_manager_driver.py @@ -27,15 +27,29 @@ def try_list_files(self, path: str) -> list[str]: def try_load_file(self, path: str) -> bytes: full_path = self._full_path(path) + if self._is_dir(full_path): + raise IsADirectoryError with open(full_path, "rb") as file: return file.read() def try_save_file(self, path: str, value: bytes): full_path = self._full_path(path) + if self._is_dir(full_path): + raise IsADirectoryError os.makedirs(os.path.dirname(full_path), exist_ok=True) with open(full_path, "wb") as file: file.write(value) - def _full_path(self, path: str) -> Path: + def _full_path(self, path: str) -> str: path = path.lstrip("/") - return Path(os.path.normpath(os.path.join(self.workdir, path))) + full_path = os.path.join(self.workdir, path) + # Need to keep the trailing slash if it was there, + # because it means the path is a directory. + ended_with_slash = path.endswith("/") + full_path = os.path.normpath(full_path) + if ended_with_slash: + full_path = full_path.rstrip("/") + "/" + return full_path + + def _is_dir(self, full_path: str) -> bool: + return full_path.endswith("/") or Path(full_path).is_dir() diff --git a/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py index c56ead9fe..c8b6a77ed 100644 --- a/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py @@ -8,7 +8,7 @@ @mock_iotdata class TestAwsIotCoreEventListenerDriver: - @fixture() + @fixture(autouse=True) def run_before_and_after_tests(self): mock_aws_credentials() diff --git a/tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py b/tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py new file mode 100644 index 000000000..285cf9510 --- /dev/null +++ b/tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py @@ -0,0 +1,294 @@ +import os +import tempfile +import boto3 +import pytest +from moto import mock_s3 +from griptape.artifacts import ErrorArtifact, ListArtifact, InfoArtifact, TextArtifact +from griptape.drivers import AmazonS3FileManagerDriver +from griptape.loaders import TextLoader +from tests.utils.aws import mock_aws_credentials + + +class TestAmazonS3FileManagerDriver: + @pytest.fixture(autouse=True) + def set_aws_credentials(self): + mock_aws_credentials() + + @pytest.fixture + def session(self): + mock = mock_s3() + mock.start() + yield boto3.Session(region_name="us-east-1") + mock.stop() + + @pytest.fixture + def s3_client(self, session): + yield session.client("s3") + + @pytest.fixture(autouse=True) + def bucket(self, s3_client): + bucket = "test-bucket" + s3_client.create_bucket(Bucket=bucket) + + def write_file(path: str, content: bytes): + s3_client.put_object(Bucket=bucket, Key=path, Body=content) + + def mkdir(path: str): + # S3-style empty directories, such as is created via the `Create Folder` button + # in the AWS S3 console (essentially, an empty file with a trailing slash). + s3_dir_key = path.rstrip("/") + "/" + s3_client.put_object(Bucket=bucket, Key=s3_dir_key) + + def copy_test_resource(resource_path: str): + file_dir = os.path.dirname(__file__) + full_path = os.path.join(file_dir, "../../../resources", resource_path) + full_path = os.path.normpath(full_path) + s3_client.upload_file(Bucket=bucket, Key=f"resources/{resource_path}", Filename=full_path) + + # Add some files + write_file("foo.txt", b"foo") + write_file("foo/bar.txt", b"bar") + write_file("foo/bar/baz.txt", b"baz") + copy_test_resource("bitcoin.pdf") + copy_test_resource("small.png") + copy_test_resource("test.txt") + + # Add some empty directories + mkdir("foo-empty") + mkdir("foo/bar-empty") + mkdir("foo/bar/baz-empty") + + yield bucket + + @pytest.fixture + def driver(self, session, bucket): + return AmazonS3FileManagerDriver(session=session, bucket=bucket) + + @pytest.fixture + def temp_dir(self): + with tempfile.TemporaryDirectory() as temp_dir: + yield temp_dir + + @pytest.fixture + def get_s3_value(self, s3_client, bucket): + def _get_s3_value(key): + return s3_client.get_object(Bucket=bucket, Key=key)["Body"].read().decode() + + return _get_s3_value + + @pytest.mark.parametrize("workdir", ["", ".", "foo", "foo/bar"]) + def test_validate_workdir(self, workdir, session, bucket): + with pytest.raises(ValueError): + AmazonS3FileManagerDriver(session=session, bucket=bucket, workdir=workdir) + + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # Valid non-empty directories (witout trailing slash) + ("/", "", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo", ["bar", "bar.txt", "bar-empty"]), + ("/", "foo/bar", ["baz.txt", "baz-empty"]), + ("/", "resources", ["bitcoin.pdf", "small.png", "test.txt"]), + ("/foo", "", ["bar", "bar.txt", "bar-empty"]), + ("/foo", "bar", ["baz.txt", "baz-empty"]), + ("/foo/bar", "", ["baz.txt", "baz-empty"]), + ("/resources", "", ["bitcoin.pdf", "small.png", "test.txt"]), + # Valid non-empty directories (with trailing slash) + ("/", "/", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo/", ["bar", "bar.txt", "bar-empty"]), + ("/", "foo/bar/", ["baz.txt", "baz-empty"]), + ("/foo", "/", ["bar", "bar.txt", "bar-empty"]), + ("/foo", "bar/", ["baz.txt", "baz-empty"]), + ("/foo/bar", "/", ["baz.txt", "baz-empty"]), + # relative paths + ("/", ".", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "bar/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo/.", ["bar", "bar.txt", "bar-empty"]), + ("/", "foo/bar/.", ["baz.txt", "baz-empty"]), + ("/./..", ".", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/./..", "foo/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/./..", "bar/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/./..", "foo/.", ["bar", "bar.txt", "bar-empty"]), + ("/./..", "foo/bar/.", ["baz.txt", "baz-empty"]), + # Empty folders (witout trailing slash) + ("/", "foo-empty", []), + ("/", "foo/bar-empty", []), + ("/", "foo/bar/baz-empty", []), + # Empty folders (with trailing slash) + ("/", "foo-empty/", []), + ("/", "foo/bar-empty/", []), + ("/", "foo/bar/baz-empty/", []), + ], + ) + def test_list_files(self, workdir, path, expected, driver): + driver.workdir = workdir + + artifact = driver.list_files(path) + + assert isinstance(artifact, TextArtifact) + assert set(filter(None, artifact.value.split("\n"))) == set(expected) + + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # non-existent paths + ("/", "bar", "Path not found"), + ("/", "bar/", "Path not found"), + ("/", "bitcoin.pdf", "Path not found"), + # # paths to files (not directories) + ("/", "foo.txt", "Path is not a directory"), + ("/", "/foo.txt", "Path is not a directory"), + ("/resources", "bitcoin.pdf", "Path is not a directory"), + ("/resources", "/bitcoin.pdf", "Path is not a directory"), + ], + ) + def test_list_files_failure(self, workdir, path, expected, driver): + driver.workdir = workdir + + artifact = driver.list_files(path) + + assert isinstance(artifact, ErrorArtifact) + assert artifact.value == expected + + def test_load_file(self, driver): + artifact = driver.load_file("resources/bitcoin.pdf") + + assert isinstance(artifact, ListArtifact) + assert len(artifact.value) == 4 + + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # non-existent files or directories + ("/", "bitcoin.pdf", "Path not found"), + ("/resources", "foo.txt", "Path not found"), + ("/", "bar/", "Path is a directory"), + # existing files with trailing slash + ("/", "resources/bitcoin.pdf/", "Path is a directory"), + ("/resources", "bitcoin.pdf/", "Path is a directory"), + # directories (not files) + ("/", "", "Path is a directory"), + ("/", "/", "Path is a directory"), + ("/", "resources", "Path is a directory"), + ("/", "resources/", "Path is a directory"), + ("/resources", "", "Path is a directory"), + ("/resources", "/", "Path is a directory"), + ], + ) + def test_load_file_failure(self, workdir, path, expected, driver): + driver.workdir = workdir + + artifact = driver.load_file(path) + + assert isinstance(artifact, ErrorArtifact) + assert artifact.value == expected + + def test_load_file_with_encoding(self, driver): + artifact = driver.load_file("resources/test.txt") + + assert isinstance(artifact, ListArtifact) + assert len(artifact.value) == 1 + assert isinstance(artifact.value[0], TextArtifact) + + def test_load_file_with_encoding_failure(self, session, bucket): + driver = AmazonS3FileManagerDriver( + session=session, bucket=bucket, default_loader=TextLoader(encoding="utf-8"), loaders={} + ) + + artifact = driver.load_file("resources/bitcoin.pdf") + + assert isinstance(artifact, ErrorArtifact) + + @pytest.mark.parametrize( + "workdir,path,content", + [ + # non-existent files + ("/", "resources/foo.txt", "one"), + ("/resources", "foo.txt", "two"), + # existing files + ("/", "foo.txt", "three"), + ("/resources", "test.txt", "four"), + ("/", "resources/test.txt", "five"), + # binary content + ("/", "bone.fooz", b"bone"), + ], + ) + def test_save_file(self, workdir, path, content, driver, get_s3_value): + driver.workdir = workdir + + result = driver.save_file(path, content) + + assert isinstance(result, InfoArtifact) + assert result.value == "Successfully saved file" + expected_s3_key = os.path.join(workdir, path).lstrip("/") + content_str = content if isinstance(content, str) else content.decode() + assert get_s3_value(expected_s3_key) == content_str + + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # non-existent directories + ("/", "bar/", "Path is a directory"), + ("/", "/bar/", "Path is a directory"), + # # existing directories + ("/", "", "Path is a directory"), + ("/", "/", "Path is a directory"), + ("/", "resources", "Path is a directory"), + ("/", "resources/", "Path is a directory"), + ("/resources", "", "Path is a directory"), + ("/resources", "/", "Path is a directory"), + # existing files with trailing slash + ("/", "resources/bitcoin.pdf/", "Path is a directory"), + ("/resources", "bitcoin.pdf/", "Path is a directory"), + ], + ) + def test_save_file_failure(self, workdir, path, expected, temp_dir, driver, s3_client, bucket): + driver.workdir = workdir + + artifact = driver.save_file(path, "foobar") + + # loop over the files in the bucket and print them + response = s3_client.list_objects_v2(Bucket=bucket) + for obj in response.get("Contents", []): + print(obj.get("Key")) + + assert isinstance(artifact, ErrorArtifact) + assert artifact.value == expected + + def test_save_file_with_encoding(self, session, bucket, get_s3_value): + workdir = "/sub-folder" + driver = AmazonS3FileManagerDriver( + session=session, bucket=bucket, default_loader=TextLoader(encoding="utf-8"), loaders={}, workdir=workdir + ) + path = os.path.join("test", "foobar.txt") + + result = driver.save_file(path, "foobar") + + expected_s3_key = os.path.join(workdir, path).lstrip("/") + assert get_s3_value(expected_s3_key) == "foobar" + assert result.value == "Successfully saved file" + + def test_save_and_load_file_with_encoding(self, session, bucket, get_s3_value): + workdir = "/sub-folder" + driver = AmazonS3FileManagerDriver( + session=session, bucket=bucket, loaders={"txt": TextLoader(encoding="ascii")}, workdir=workdir + ) + path = os.path.join("test", "foobar.txt") + + result = driver.save_file(path, "foobar") + + expected_s3_key = os.path.join(workdir, path).lstrip("/") + assert get_s3_value(expected_s3_key) == "foobar" + assert result.value == "Successfully saved file" + + driver = AmazonS3FileManagerDriver( + session=session, bucket=bucket, default_loader=TextLoader(encoding="ascii"), loaders={}, workdir=workdir + ) + path = os.path.join("test", "foobar.txt") + + result = driver.load_file(path) + + assert isinstance(result, ListArtifact) + assert len(result.value) == 1 + assert isinstance(result.value[0], TextArtifact) diff --git a/tests/unit/drivers/file_manager/test_local_file_manager_driver.py b/tests/unit/drivers/file_manager/test_local_file_manager_driver.py index 43ef250cf..236281739 100644 --- a/tests/unit/drivers/file_manager/test_local_file_manager_driver.py +++ b/tests/unit/drivers/file_manager/test_local_file_manager_driver.py @@ -2,32 +2,129 @@ from pathlib import Path import tempfile import pytest -from griptape.artifacts import ErrorArtifact, ListArtifact, TextArtifact +from griptape.artifacts import ErrorArtifact, ListArtifact, InfoArtifact, TextArtifact from griptape.drivers import LocalFileManagerDriver from griptape.loaders.text_loader import TextLoader class TestLocalFileManagerDriver: - @pytest.fixture - def driver(self): - tests_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..")) - return LocalFileManagerDriver(workdir=tests_dir) - @pytest.fixture def temp_dir(self): with tempfile.TemporaryDirectory() as temp_dir: + + def write_file(path: str, content: bytes): + full_path = os.path.join(temp_dir, path) + os.makedirs(os.path.dirname(full_path), exist_ok=True) + with open(full_path, "wb") as f: + f.write(content) + + def mkdir(path: str): + full_path = os.path.join(temp_dir, path) + os.makedirs(full_path, exist_ok=True) + + def copy_test_resources(resource_path: str): + file_dir = os.path.dirname(__file__) + full_path = os.path.join(file_dir, "../../../resources", resource_path) + full_path = os.path.normpath(full_path) + with open(full_path, "rb") as source: + content = source.read() + dest_path = os.path.join(temp_dir, "resources", resource_path) + write_file(dest_path, content) + + # Add some files + write_file("foo.txt", b"foo") + write_file("foo/bar.txt", b"bar") + write_file("foo/bar/baz.txt", b"baz") + copy_test_resources("bitcoin.pdf") + copy_test_resources("small.png") + copy_test_resources("test.txt") + + # Add some empty directories + mkdir("foo-empty") + mkdir("foo/bar-empty") + mkdir("foo/bar/baz-empty") + yield temp_dir + @pytest.fixture + def driver(self, temp_dir): + return LocalFileManagerDriver(workdir=temp_dir) + def test_validate_workdir(self): with pytest.raises(ValueError): LocalFileManagerDriver(workdir="foo") - def test_list_files(self, driver: LocalFileManagerDriver): - artifact = driver.list_files("resources") + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # Valid non-empty directories (witout trailing slash) + ("/", "", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo", ["bar", "bar.txt", "bar-empty"]), + ("/", "foo/bar", ["baz.txt", "baz-empty"]), + ("/", "resources", ["bitcoin.pdf", "small.png", "test.txt"]), + ("/foo", "", ["bar", "bar.txt", "bar-empty"]), + ("/foo", "bar", ["baz.txt", "baz-empty"]), + ("/foo/bar", "", ["baz.txt", "baz-empty"]), + ("/resources", "", ["bitcoin.pdf", "small.png", "test.txt"]), + # Valid non-empty directories (with trailing slash) + ("/", "/", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo/", ["bar", "bar.txt", "bar-empty"]), + ("/", "foo/bar/", ["baz.txt", "baz-empty"]), + ("/foo", "/", ["bar", "bar.txt", "bar-empty"]), + ("/foo", "bar/", ["baz.txt", "baz-empty"]), + ("/foo/bar", "/", ["baz.txt", "baz-empty"]), + # relative paths + ("/", ".", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "bar/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/", "foo/.", ["bar", "bar.txt", "bar-empty"]), + ("/", "foo/bar/.", ["baz.txt", "baz-empty"]), + ("/./..", ".", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/./..", "foo/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/./..", "bar/..", ["foo", "foo.txt", "foo-empty", "resources"]), + ("/./..", "foo/.", ["bar", "bar.txt", "bar-empty"]), + ("/./..", "foo/bar/.", ["baz.txt", "baz-empty"]), + # Empty folders (witout trailing slash) + ("/", "foo-empty", []), + ("/", "foo/bar-empty", []), + ("/", "foo/bar/baz-empty", []), + # Empty folders (with trailing slash) + ("/", "foo-empty/", []), + ("/", "foo/bar-empty/", []), + ("/", "foo/bar/baz-empty/", []), + ], + ) + def test_list_files(self, workdir, path, expected, temp_dir, driver): + # Treat the workdir as an absolute path, but modify it to be relative to the temp_dir. + driver.workdir = os.path.join(temp_dir, os.path.abspath(workdir).lstrip("/")) + + artifact = driver.list_files(path) assert isinstance(artifact, TextArtifact) - assert "bitcoin.pdf" in artifact.value - assert "small.png" in artifact.value + assert set(filter(None, artifact.value.split("\n"))) == set(expected) + + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # non-existent paths + ("/", "bar", "Path not found"), + ("/", "bar/", "Path not found"), + ("/", "bitcoin.pdf", "Path not found"), + # # paths to files (not directories) + ("/", "foo.txt", "Path is not a directory"), + ("/", "/foo.txt", "Path is not a directory"), + ("/resources", "bitcoin.pdf", "Path is not a directory"), + ("/resources", "/bitcoin.pdf", "Path is not a directory"), + ], + ) + def test_list_files_failure(self, workdir, path, expected, temp_dir, driver): + # Treat the workdir as an absolute path, but modify it to be relative to the temp_dir. + driver.workdir = os.path.join(temp_dir, os.path.abspath(workdir).lstrip("/")) + + artifact = driver.list_files(path) + + assert isinstance(artifact, ErrorArtifact) + assert artifact.value == expected def test_load_file(self, driver: LocalFileManagerDriver): artifact = driver.load_file("resources/bitcoin.pdf") @@ -35,6 +132,34 @@ def test_load_file(self, driver: LocalFileManagerDriver): assert isinstance(artifact, ListArtifact) assert len(artifact.value) == 4 + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # # non-existent files or directories + ("/", "bitcoin.pdf", "Path not found"), + ("/resources", "foo.txt", "Path not found"), + ("/", "bar/", "Path is a directory"), + # existing files with trailing slash + ("/", "resources/bitcoin.pdf/", "Path is a directory"), + ("/resources", "bitcoin.pdf/", "Path is a directory"), + # directories (not files) + ("/", "", "Path is a directory"), + ("/", "/", "Path is a directory"), + ("/", "resources", "Path is a directory"), + ("/", "resources/", "Path is a directory"), + ("/resources", "", "Path is a directory"), + ("/resources", "/", "Path is a directory"), + ], + ) + def test_load_file_failure(self, workdir, path, expected, temp_dir, driver): + # Treat the workdir as an absolute path, but modify it to be relative to the temp_dir. + driver.workdir = os.path.join(temp_dir, os.path.abspath(workdir).lstrip("/")) + + artifact = driver.load_file(path) + + assert isinstance(artifact, ErrorArtifact) + assert artifact.value == expected + def test_load_file_with_encoding(self, driver: LocalFileManagerDriver): artifact = driver.load_file("resources/test.txt") @@ -51,12 +176,57 @@ def test_load_file_with_encoding_failure(self): assert isinstance(artifact, ErrorArtifact) - def test_save_file(self, temp_dir): - driver = LocalFileManagerDriver(workdir=temp_dir) - result = driver.save_file(os.path.join("test", "foobar.txt"), "foobar") + @pytest.mark.parametrize( + "workdir,path,content", + [ + # non-existent files + ("/", "resources/foo.txt", "one"), + ("/resources", "foo.txt", "two"), + # existing files + ("/", "foo.txt", "three"), + ("/resources", "test.txt", "four"), + ("/", "resources/test.txt", "five"), + # binary content + ("/", "bone.fooz", b"bone"), + ], + ) + def test_save_file(self, workdir, path, content, temp_dir, driver): + # Treat the workdir as an absolute path, but modify it to be relative to the temp_dir. + driver.workdir = os.path.join(temp_dir, os.path.abspath(workdir).lstrip("/")) - assert Path(os.path.join(temp_dir, "test", "foobar.txt")).read_text() == "foobar" + result = driver.save_file(path, content) + + assert isinstance(result, InfoArtifact) assert result.value == "Successfully saved file" + content_bytes = content if isinstance(content, str) else content.decode() + assert Path(driver.workdir, path).read_text() == content_bytes + + @pytest.mark.parametrize( + "workdir,path,expected", + [ + # non-existent directories + ("/", "bar/", "Path is a directory"), + ("/", "/bar/", "Path is a directory"), + # existing directories + ("/", "", "Path is a directory"), + ("/", "/", "Path is a directory"), + ("/", "resources", "Path is a directory"), + ("/", "resources/", "Path is a directory"), + ("/resources", "", "Path is a directory"), + ("/resources", "/", "Path is a directory"), + # existing files with trailing slash + ("/", "resources/bitcoin.pdf/", "Path is a directory"), + ("/resources", "bitcoin.pdf/", "Path is a directory"), + ], + ) + def test_save_file_failure(self, workdir, path, expected, temp_dir, driver): + # Treat the workdir as an absolute path, but modify it to be relative to the temp_dir. + driver.workdir = os.path.join(temp_dir, os.path.abspath(workdir).lstrip("/")) + + artifact = driver.save_file(path, "foobar") + + assert isinstance(artifact, ErrorArtifact) + assert artifact.value == expected def test_save_file_with_encoding(self, temp_dir): driver = LocalFileManagerDriver(default_loader=TextLoader(encoding="utf-8"), loaders={}, workdir=temp_dir) From 54ef8fb5aaea24b003b030f763a43a70497614da Mon Sep 17 00:00:00 2001 From: Andrew French Date: Fri, 12 Apr 2024 14:13:24 -0700 Subject: [PATCH 018/145] Add MediaArtifact (#520) --- CHANGELOG.md | 2 + griptape/artifacts/__init__.py | 2 + griptape/artifacts/image_artifact.py | 46 ++++------------ griptape/artifacts/media_artifact.py | 53 +++++++++++++++++++ .../amazon_bedrock_image_generation_driver.py | 8 +-- .../leonardo_image_generation_driver.py | 4 +- .../openai_image_generation_driver.py | 2 +- griptape/loaders/image_loader.py | 4 +- tests/mocks/mock_image_generation_task.py | 2 +- tests/unit/artifacts/test_base_artifact.py | 4 +- .../artifacts/test_base_media_artifact.py | 31 +++++++++++ tests/unit/artifacts/test_image_artifact.py | 11 ++-- ...table_diffusion_image_generation_driver.py | 5 +- .../test_dummy_image_generation_driver.py | 12 ++--- ...ock_stable_diffusion_image_model_driver.py | 4 +- .../test_bedrock_titan_image_model_driver.py | 4 +- .../test_amazon_bedrock_image_query_driver.py | 6 ++- .../test_anthropic_image_query_driver.py | 12 +++-- .../test_dummy_image_query_driver.py | 2 +- .../test_openai_image_query_driver.py | 6 +-- ...bedrock_claude_image_query_model_driver.py | 2 +- .../test_image_artifact_file_output_mixin.py | 4 +- tests/unit/tasks/test_image_query_task.py | 2 +- .../test_inpainting_image_generation_task.py | 2 +- .../test_outpainting_image_generation_task.py | 2 +- .../test_variation_image_generation_task.py | 2 +- ...test_inpainting_image_generation_client.py | 6 +-- ...test_outpainting_image_variation_client.py | 6 +-- .../test_prompt_image_generation_client.py | 4 +- .../test_variation_image_generation_client.py | 6 +-- .../utils/test_load_artifact_from_memory.py | 2 +- 31 files changed, 164 insertions(+), 94 deletions(-) create mode 100644 griptape/artifacts/media_artifact.py create mode 100644 tests/unit/artifacts/test_base_media_artifact.py diff --git a/CHANGELOG.md b/CHANGELOG.md index cd1606b63..0d5d047f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `input_task_input` and `input_task_output` fields to `StartStructureRunEvent`. - `output_task_input` and `output_task_output` fields to `FinishStructureRunEvent`. - `AmazonS3FileManagerDriver` for managing files on Amazon S3. +- `MediaArtifact` as a base class for `ImageArtifact` and future media Artifacts. ### Changed - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. @@ -33,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Replaced `EventListener.handler` with `EventListener.driver` and `LocalEventListenerDriver`. - Improved RAG performance in `VectorQueryEngine`. - **BREAKING**: Removed `workdir`, `loaders`, `default_loader`, and `save_file_encoding` fields from `FileManager` and added `file_manager_driver`. +- **BREADKING**: Removed `mime_type` field from `ImageArtifact`. `mime_type` is now a property constructed using the Artifact type and `format` field. ## [0.24.2] - 2024-04-04 diff --git a/griptape/artifacts/__init__.py b/griptape/artifacts/__init__.py index 3290bcb6a..f97580db1 100644 --- a/griptape/artifacts/__init__.py +++ b/griptape/artifacts/__init__.py @@ -5,6 +5,7 @@ from .blob_artifact import BlobArtifact from .csv_row_artifact import CsvRowArtifact from .list_artifact import ListArtifact +from .media_artifact import MediaArtifact from .image_artifact import ImageArtifact @@ -17,4 +18,5 @@ "CsvRowArtifact", "ListArtifact", "ImageArtifact", + "MediaArtifact", ] diff --git a/griptape/artifacts/image_artifact.py b/griptape/artifacts/image_artifact.py index 0d8a977b4..068cf6d00 100644 --- a/griptape/artifacts/image_artifact.py +++ b/griptape/artifacts/image_artifact.py @@ -1,47 +1,23 @@ from __future__ import annotations -import base64 -import string -import time -import random -from typing import Optional -from attr import define, field, Factory -from griptape.artifacts import BlobArtifact +from attr import define, field + +from griptape.artifacts import MediaArtifact @define -class ImageArtifact(BlobArtifact): - """ImageArtifact is a type of BlobArtifact that represents an image. +class ImageArtifact(MediaArtifact): + """ImageArtifact is a type of MediaArtifact representing an image. Attributes: - value: Raw bytes representing the image. + value: Raw bytes representing media data. + media_type: The type of media, defaults to "image". + format: The format of the media, like png, jpeg, or gif. name: Artifact name, generated using creation time and a random string. - mime_type: The mime type of the image, like image/png or image/jpeg. - width: The width of the image in pixels. - height: The height of the image in pixels. - model: Optionally specify the model used to generate the image. - prompt: Optionally specify the prompt used to generate the image. + model: Optionally specify the model used to generate the media. + prompt: Optionally specify the prompt used to generate the media. """ - mime_type: str = field(kw_only=True, default="image/png", metadata={"serializable": True}) + media_type: str = "image" width: int = field(kw_only=True, metadata={"serializable": True}) height: int = field(kw_only=True, metadata={"serializable": True}) - model: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - prompt: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - name: str = field( - default=Factory(lambda self: self.make_name(), takes_self=True), kw_only=True, metadata={"serializable": True} - ) - - @property - def base64(self) -> str: - return base64.b64encode(self.value).decode("utf-8") - - def make_name(self) -> str: - entropy = "".join(random.choices(string.ascii_lowercase + string.digits, k=4)) - fmt_time = time.strftime("%y%m%d%H%M%S", time.localtime()) - extension = self.mime_type.split("/")[1].split("+")[0] - - return f"image_artifact_{fmt_time}_{entropy}.{extension}" - - def to_text(self) -> str: - return f"Image, dimensions: {self.width}x{self.height}, type: {self.mime_type}, size: {len(self.value)} bytes" diff --git a/griptape/artifacts/media_artifact.py b/griptape/artifacts/media_artifact.py new file mode 100644 index 000000000..dc78ea352 --- /dev/null +++ b/griptape/artifacts/media_artifact.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +import string +import time +import random +from typing import Optional + +from attr import define, field +from griptape.artifacts import BlobArtifact +import base64 + + +@define +class MediaArtifact(BlobArtifact): + """MediaArtifact is a type of BlobArtifact that represents media (image, audio, video, etc.) + and can be extended to support a specific media type. + + Attributes: + value: Raw bytes representing media data. + media_type: The type of media, like image, audio, or video. + format: The format of the media, like png, wav, or mp4. + name: Artifact name, generated using creation time and a random string. + model: Optionally specify the model used to generate the media. + prompt: Optionally specify the prompt used to generate the media. + """ + + media_type: str = field(default="media", kw_only=True, metadata={"serializable": True}) + format: str = field(kw_only=True, metadata={"serializable": True}) + model: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + prompt: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + + def __attrs_post_init__(self): + # Generating the name string requires attributes set by child classes. + # This waits until all attributes are available before generating a name. + if self.name == self.id: + self.name = self.make_name() + + @property + def mime_type(self) -> str: + return f"{self.media_type}/{self.format}" + + @property + def base64(self) -> str: + return base64.b64encode(self.value).decode("utf-8") + + def to_text(self) -> str: + return f"Media, type: {self.mime_type}, size: {len(self.value)} bytes" + + def make_name(self) -> str: + entropy = "".join(random.choices(string.ascii_lowercase + string.digits, k=4)) + fmt_time = time.strftime("%y%m%d%H%M%S", time.localtime()) + + return f"{self.media_type}_artifact_{fmt_time}_{entropy}.{self.format}" diff --git a/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py b/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py index f928a9525..e3e72d55e 100644 --- a/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py +++ b/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py @@ -44,7 +44,7 @@ def try_text_to_image(self, prompts: list[str], negative_prompts: Optional[list[ return ImageArtifact( prompt=", ".join(prompts), value=image_bytes, - mime_type="image/png", + format="png", width=self.image_width, height=self.image_height, model=self.model, @@ -62,7 +62,7 @@ def try_image_variation( return ImageArtifact( prompt=", ".join(prompts), value=image_bytes, - mime_type="image/png", + format="png", width=image.width, height=image.height, model=self.model, @@ -84,7 +84,7 @@ def try_image_inpainting( return ImageArtifact( prompt=", ".join(prompts), value=image_bytes, - mime_type="image/png", + format="png", width=image.width, height=image.height, model=self.model, @@ -106,7 +106,7 @@ def try_image_outpainting( return ImageArtifact( prompt=", ".join(prompts), value=image_bytes, - mime_type="image/png", + format="png", width=image.width, height=image.height, model=self.model, diff --git a/griptape/drivers/image_generation/leonardo_image_generation_driver.py b/griptape/drivers/image_generation/leonardo_image_generation_driver.py index 6245fef4c..c41b15d97 100644 --- a/griptape/drivers/image_generation/leonardo_image_generation_driver.py +++ b/griptape/drivers/image_generation/leonardo_image_generation_driver.py @@ -53,7 +53,7 @@ def try_text_to_image(self, prompts: list[str], negative_prompts: Optional[list[ return ImageArtifact( value=image_data, - mime_type="image/png", + format="png", width=self.image_width, height=self.image_height, model=self.model, @@ -75,7 +75,7 @@ def try_image_variation( return ImageArtifact( value=image_data, - mime_type="image/png", + format="png", width=self.image_width, height=self.image_height, model=self.model, diff --git a/griptape/drivers/image_generation/openai_image_generation_driver.py b/griptape/drivers/image_generation/openai_image_generation_driver.py index 200cf54bc..aaf959038 100644 --- a/griptape/drivers/image_generation/openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/openai_image_generation_driver.py @@ -130,7 +130,7 @@ def _parse_image_response(self, response: ImagesResponse, prompt: str) -> ImageA return ImageArtifact( value=image_data, - mime_type="image/png", + format="png", width=image_dimensions[0], height=image_dimensions[1], model=self.model, diff --git a/griptape/loaders/image_loader.py b/griptape/loaders/image_loader.py index 28e272d1e..99b779210 100644 --- a/griptape/loaders/image_loader.py +++ b/griptape/loaders/image_loader.py @@ -45,9 +45,7 @@ def load(self, source: bytes, *args, **kwargs) -> ImageArtifact: image = Image.open(byte_stream) source = byte_stream.getvalue() - image_artifact = ImageArtifact( - source, mime_type=self._get_mime_type(image.format), width=image.width, height=image.height - ) + image_artifact = ImageArtifact(source, format=image.format.lower(), width=image.width, height=image.height) return image_artifact diff --git a/tests/mocks/mock_image_generation_task.py b/tests/mocks/mock_image_generation_task.py index 3aa2e799d..24c25dc37 100644 --- a/tests/mocks/mock_image_generation_task.py +++ b/tests/mocks/mock_image_generation_task.py @@ -17,4 +17,4 @@ def input(self, value: str): self._input = TextArtifact(value) def run(self) -> ImageArtifact: - return ImageArtifact(value=b"image data", mime_type="image/png", width=512, height=512) + return ImageArtifact(value=b"image data", format="png", width=512, height=512) diff --git a/tests/unit/artifacts/test_base_artifact.py b/tests/unit/artifacts/test_base_artifact.py index cae1adae5..a7d7acaaf 100644 --- a/tests/unit/artifacts/test_base_artifact.py +++ b/tests/unit/artifacts/test_base_artifact.py @@ -50,8 +50,8 @@ def test_image_artifact_from_dict(self): dict_value = { "type": "ImageArtifact", "value": b"aW1hZ2UgZGF0YQ==", - "mime_type": "image/png", "dir_name": "foo", + "format": "png", "width": 256, "height": 256, "model": "test-model", @@ -60,7 +60,7 @@ def test_image_artifact_from_dict(self): artifact = BaseArtifact.from_dict(dict_value) assert isinstance(artifact, ImageArtifact) - assert artifact.to_text() == "Image, dimensions: 256x256, type: image/png, size: 10 bytes" + assert artifact.to_text() == "Media, type: image/png, size: 10 bytes" assert artifact.value == b"image data" def test_unsupported_from_dict(self): diff --git a/tests/unit/artifacts/test_base_media_artifact.py b/tests/unit/artifacts/test_base_media_artifact.py new file mode 100644 index 000000000..d72a8bb02 --- /dev/null +++ b/tests/unit/artifacts/test_base_media_artifact.py @@ -0,0 +1,31 @@ +import pytest + +from attr import define + +from griptape.artifacts import MediaArtifact + + +class TestMediaArtifact: + @define + class ImaginaryMediaArtifact(MediaArtifact): + media_type: str = "imagination" + + @pytest.fixture + def media_artifact(self): + return self.ImaginaryMediaArtifact(value=b"some binary dream data", format="dream") + + def test_to_dict(self, media_artifact): + image_dict = media_artifact.to_dict() + + assert image_dict["format"] == "dream" + assert image_dict["value"] == "c29tZSBiaW5hcnkgZHJlYW0gZGF0YQ==" + + def test_name(self, media_artifact): + assert media_artifact.name.startswith("imagination_artifact") + assert media_artifact.name.endswith(".dream") + + def test_mime_type(self, media_artifact): + assert media_artifact.mime_type == "imagination/dream" + + def test_to_text(self, media_artifact): + assert media_artifact.to_text() == "Media, type: imagination/dream, size: 22 bytes" diff --git a/tests/unit/artifacts/test_image_artifact.py b/tests/unit/artifacts/test_image_artifact.py index 53385773e..687397260 100644 --- a/tests/unit/artifacts/test_image_artifact.py +++ b/tests/unit/artifacts/test_image_artifact.py @@ -7,20 +7,20 @@ class TestImageArtifact: def image_artifact(self): return ImageArtifact( value=b"some binary png image data", - mime_type="image/png", + format="png", width=512, height=512, model="openai/dalle2", prompt="a cute cat", ) - def test_to_text(self, image_artifact): - assert image_artifact.to_text() == "Image, dimensions: 512x512, type: image/png, size: 26 bytes" + def test_to_text(self, image_artifact: ImageArtifact): + assert image_artifact.to_text() == "Media, type: image/png, size: 26 bytes" - def test_to_dict(self, image_artifact): + def test_to_dict(self, image_artifact: ImageArtifact): image_dict = image_artifact.to_dict() - assert image_dict["mime_type"] == "image/png" + assert image_dict["format"] == "png" assert image_dict["width"] == 512 assert image_dict["height"] == 512 assert image_dict["model"] == "openai/dalle2" @@ -35,6 +35,7 @@ def test_deserialization(self, image_artifact): assert deserialized_artifact.value == b"some binary png image data" assert deserialized_artifact.mime_type == "image/png" + assert deserialized_artifact.format == "png" assert deserialized_artifact.width == 512 assert deserialized_artifact.height == 512 assert deserialized_artifact.model == "openai/dalle2" diff --git a/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py b/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py index 2cd941337..2c911da18 100644 --- a/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py +++ b/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py @@ -37,7 +37,9 @@ def test_init(self, driver): def test_init_requires_image_generation_model_driver(self, session): with pytest.raises(TypeError): - AmazonBedrockImageGenerationDriver(session=session, model="stability.stable-diffusion-xl-v1") + AmazonBedrockImageGenerationDriver( + session=session, model="stability.stable-diffusion-xl-v1" + ) # pyright: ignore def test_try_text_to_image(self, driver): driver.bedrock_client.invoke_model.return_value = { @@ -56,6 +58,7 @@ def test_try_text_to_image(self, driver): image_artifact = driver.try_text_to_image(prompts=["test prompt"], negative_prompts=["test negative prompt"]) assert image_artifact.value == b"image data" + assert image_artifact.format == "png" assert image_artifact.mime_type == "image/png" assert image_artifact.width == 512 assert image_artifact.height == 512 diff --git a/tests/unit/drivers/image_generation/test_dummy_image_generation_driver.py b/tests/unit/drivers/image_generation/test_dummy_image_generation_driver.py index add334b35..971c39b89 100644 --- a/tests/unit/drivers/image_generation/test_dummy_image_generation_driver.py +++ b/tests/unit/drivers/image_generation/test_dummy_image_generation_driver.py @@ -21,22 +21,22 @@ def test_try_image_variation(self, image_generation_driver): with pytest.raises(DummyException): image_generation_driver.try_image_variation( "prompt-stack", - ImageArtifact(value=b"", width=100, height=100), - ImageArtifact(value=b"", width=100, height=100), + ImageArtifact(value=b"", width=100, height=100, format="png"), + ImageArtifact(value=b"", width=100, height=100, format="png"), ) def test_try_image_inpainting(self, image_generation_driver): with pytest.raises(DummyException): image_generation_driver.try_image_inpainting( "prompt-stack", - ImageArtifact(value=b"", width=100, height=100), - ImageArtifact(value=b"", width=100, height=100), + ImageArtifact(value=b"", width=100, height=100, format="png"), + ImageArtifact(value=b"", width=100, height=100, format="png"), ) def test_try_image_outpainting(self, image_generation_driver): with pytest.raises(DummyException): image_generation_driver.try_image_outpainting( "prompt-stack", - ImageArtifact(value=b"", width=100, height=100), - ImageArtifact(value=b"", width=100, height=100), + ImageArtifact(value=b"", width=100, height=100, format="png"), + ImageArtifact(value=b"", width=100, height=100, format="png"), ) diff --git a/tests/unit/drivers/image_generation_model/test_bedrock_stable_diffusion_image_model_driver.py b/tests/unit/drivers/image_generation_model/test_bedrock_stable_diffusion_image_model_driver.py index 6415e4a2d..cdd4e95b7 100644 --- a/tests/unit/drivers/image_generation_model/test_bedrock_stable_diffusion_image_model_driver.py +++ b/tests/unit/drivers/image_generation_model/test_bedrock_stable_diffusion_image_model_driver.py @@ -13,11 +13,11 @@ def model_driver(self): @pytest.fixture def image_artifact(self): - return ImageArtifact(b"image", mime_type="image/png", width=1024, height=1024) + return ImageArtifact(b"image", format="png", width=1024, height=1024) @pytest.fixture def mask_artifact(self): - return ImageArtifact(b"mask", mime_type="image/png", width=1024, height=1024) + return ImageArtifact(b"mask", format="png", width=1024, height=1024) def test_init(self, model_driver): assert model_driver diff --git a/tests/unit/drivers/image_generation_model/test_bedrock_titan_image_model_driver.py b/tests/unit/drivers/image_generation_model/test_bedrock_titan_image_model_driver.py index b6aded591..8c4ed40e3 100644 --- a/tests/unit/drivers/image_generation_model/test_bedrock_titan_image_model_driver.py +++ b/tests/unit/drivers/image_generation_model/test_bedrock_titan_image_model_driver.py @@ -11,11 +11,11 @@ def model_driver(self): @pytest.fixture def image_artifact(self): - return ImageArtifact(b"image", mime_type="image/png", width=1024, height=512) + return ImageArtifact(b"image", format="png", width=1024, height=512) @pytest.fixture def mask_artifact(self): - return ImageArtifact(b"mask", mime_type="image/png", width=1024, height=512) + return ImageArtifact(b"mask", format="png", width=1024, height=512) def test_init(self, model_driver): assert model_driver diff --git a/tests/unit/drivers/image_query/test_amazon_bedrock_image_query_driver.py b/tests/unit/drivers/image_query/test_amazon_bedrock_image_query_driver.py index 7f5b44aa4..57336e8ea 100644 --- a/tests/unit/drivers/image_query/test_amazon_bedrock_image_query_driver.py +++ b/tests/unit/drivers/image_query/test_amazon_bedrock_image_query_driver.py @@ -36,7 +36,7 @@ def test_try_query(self, image_query_driver): image_query_driver.bedrock_client.invoke_model.return_value = {"body": io.BytesIO(b"""{"content": []}""")} text_artifact = image_query_driver.try_query( - "Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100)] + "Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100, format="png")] ) assert text_artifact.value == "content" @@ -45,4 +45,6 @@ def test_try_query_no_body(self, image_query_driver): image_query_driver.bedrock_client.invoke_model.return_value = {"body": io.BytesIO(b"")} with pytest.raises(ValueError): - image_query_driver.try_query("Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100)]) + image_query_driver.try_query( + "Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100, format="png")] + ) diff --git a/tests/unit/drivers/image_query/test_anthropic_image_query_driver.py b/tests/unit/drivers/image_query/test_anthropic_image_query_driver.py index ff53375b0..24958d58f 100644 --- a/tests/unit/drivers/image_query/test_anthropic_image_query_driver.py +++ b/tests/unit/drivers/image_query/test_anthropic_image_query_driver.py @@ -26,7 +26,7 @@ def test_try_query(self, mock_client): test_binary_data = b"test-data" text_artifact = driver.try_query( - test_prompt_string, [ImageArtifact(value=test_binary_data, width=100, height=100)] + test_prompt_string, [ImageArtifact(value=test_binary_data, width=100, height=100, format="png")] ) expected_message = self._expected_message(test_binary_data, "image/png", test_prompt_string) @@ -43,7 +43,7 @@ def test_try_query_max_tokens_value(self, mock_client): test_binary_data = b"test-data" text_artifact = driver.try_query( - test_prompt_string, [ImageArtifact(value=test_binary_data, width=100, height=100)] + test_prompt_string, [ImageArtifact(value=test_binary_data, width=100, height=100, format="png")] ) expected_message = self._expected_message(test_binary_data, "image/png", test_prompt_string) @@ -59,16 +59,18 @@ def test_try_query_max_tokens_none(self, mock_client): test_prompt_string = "Prompt String" test_binary_data = b"test-data" with pytest.raises(TypeError): - driver.try_query(test_prompt_string, [ImageArtifact(value=test_binary_data, width=100, height=100)]) + driver.try_query( + test_prompt_string, [ImageArtifact(value=test_binary_data, width=100, height=100, format="png")] + ) def test_try_query_wrong_media_type(self, mock_client): driver = AnthropicImageQueryDriver(model="test-model") test_prompt_string = "Prompt String" test_binary_data = b"test-data" - # we expect this to pass Griptape code as the model will error approriately + # we expect this to pass Griptape code as the model will error appropriately text_artifact = driver.try_query( - test_prompt_string, [ImageArtifact(value=test_binary_data, mime_type="image/exr", width=100, height=100)] + test_prompt_string, [ImageArtifact(value=test_binary_data, width=100, height=100, format="exr")] ) expected_message = self._expected_message(test_binary_data, "image/exr", test_prompt_string) diff --git a/tests/unit/drivers/image_query/test_dummy_image_query_driver.py b/tests/unit/drivers/image_query/test_dummy_image_query_driver.py index 6341717b8..8efcfa749 100644 --- a/tests/unit/drivers/image_query/test_dummy_image_query_driver.py +++ b/tests/unit/drivers/image_query/test_dummy_image_query_driver.py @@ -15,4 +15,4 @@ def test_init(self, image_query_driver): def test_try_query(self, image_query_driver): with pytest.raises(DummyException): - image_query_driver.try_query("Prompt", [ImageArtifact(value=b"", width=100, height=100)]) + image_query_driver.try_query("Prompt", [ImageArtifact(value=b"", width=100, height=100, format="png")]) diff --git a/tests/unit/drivers/image_query/test_openai_image_query_driver.py b/tests/unit/drivers/image_query/test_openai_image_query_driver.py index f811f87cf..d6ce8550b 100644 --- a/tests/unit/drivers/image_query/test_openai_image_query_driver.py +++ b/tests/unit/drivers/image_query/test_openai_image_query_driver.py @@ -19,7 +19,7 @@ def test_try_query_defaults(self, mock_completion_create): driver = OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview") test_prompt_string = "Prompt String" test_binary_data = b"test-data" - test_image = ImageArtifact(value=test_binary_data, width=100, height=100) + test_image = ImageArtifact(value=test_binary_data, width=100, height=100, format="png") text_artifact = driver.try_query(test_prompt_string, [test_image]) messages = self._expected_messages(test_prompt_string, test_image.base64) @@ -32,7 +32,7 @@ def test_try_query_max_tokens(self, mock_completion_create): driver = OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview", max_tokens=1024) test_prompt_string = "Prompt String" test_binary_data = b"test-data" - test_image = ImageArtifact(value=test_binary_data, width=100, height=100) + test_image = ImageArtifact(value=test_binary_data, width=100, height=100, format="png") driver.try_query(test_prompt_string, [test_image]) messages = self._expected_messages(test_prompt_string, test_image.base64) @@ -44,7 +44,7 @@ def test_try_query_multiple_choices(self, mock_completion_create): driver = OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview") with pytest.raises(Exception): - driver.try_query("Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100)]) + driver.try_query("Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100, format="png")]) def _expected_messages(self, expected_prompt_string, expected_binary_data): return { diff --git a/tests/unit/drivers/image_query_models/test_bedrock_claude_image_query_model_driver.py b/tests/unit/drivers/image_query_models/test_bedrock_claude_image_query_model_driver.py index a4c57917b..14fa8ff28 100644 --- a/tests/unit/drivers/image_query_models/test_bedrock_claude_image_query_model_driver.py +++ b/tests/unit/drivers/image_query_models/test_bedrock_claude_image_query_model_driver.py @@ -10,7 +10,7 @@ def test_init(self): def test_image_query_request_parameters(self): model_driver = BedrockClaudeImageQueryModelDriver() params = model_driver.image_query_request_parameters( - "Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100)], 256 + "Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100, format="png")], 256 ) assert isinstance(params, dict) diff --git a/tests/unit/mixins/test_image_artifact_file_output_mixin.py b/tests/unit/mixins/test_image_artifact_file_output_mixin.py index b04d662bc..c0b021f5e 100644 --- a/tests/unit/mixins/test_image_artifact_file_output_mixin.py +++ b/tests/unit/mixins/test_image_artifact_file_output_mixin.py @@ -16,7 +16,7 @@ class Test(ImageArtifactFileOutputMixin): assert Test().output_dir is None def test_output_file(self): - artifact = ImageArtifact(name="test.png", value=b"test", height=1, width=1, mime_type="image/png") + artifact = ImageArtifact(name="test.png", value=b"test", height=1, width=1, format="png") class Test(ImageArtifactFileOutputMixin): def run(self): @@ -31,7 +31,7 @@ def run(self): assert os.path.exists(outfile) def test_output_dir(self): - artifact = ImageArtifact(name="test.png", value=b"test", height=1, width=1, mime_type="image/png") + artifact = ImageArtifact(name="test.png", value=b"test", height=1, width=1, format="png") class Test(ImageArtifactFileOutputMixin): def run(self): diff --git a/tests/unit/tasks/test_image_query_task.py b/tests/unit/tasks/test_image_query_task.py index 0542e37a6..1d195f835 100644 --- a/tests/unit/tasks/test_image_query_task.py +++ b/tests/unit/tasks/test_image_query_task.py @@ -15,7 +15,7 @@ def text_artifact(self): @pytest.fixture def image_artifact(self): - return ImageArtifact(value=b"some image data", mime_type="image/png", width=512, height=512) + return ImageArtifact(value=b"some image data", format="png", width=512, height=512) def test_text_inputs(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): task = ImageQueryTask((text_artifact.value, [image_artifact, image_artifact])) diff --git a/tests/unit/tasks/test_inpainting_image_generation_task.py b/tests/unit/tasks/test_inpainting_image_generation_task.py index 5dd0abc49..1fd84f2a6 100644 --- a/tests/unit/tasks/test_inpainting_image_generation_task.py +++ b/tests/unit/tasks/test_inpainting_image_generation_task.py @@ -17,7 +17,7 @@ def text_artifact(self): @pytest.fixture def image_artifact(self): - return ImageArtifact(value=b"some image data", mime_type="image/png", width=512, height=512) + return ImageArtifact(value=b"some image data", format="png", width=512, height=512) def test_artifact_inputs(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): input_tuple = (text_artifact, image_artifact, image_artifact) diff --git a/tests/unit/tasks/test_outpainting_image_generation_task.py b/tests/unit/tasks/test_outpainting_image_generation_task.py index a9704af14..f73467258 100644 --- a/tests/unit/tasks/test_outpainting_image_generation_task.py +++ b/tests/unit/tasks/test_outpainting_image_generation_task.py @@ -18,7 +18,7 @@ def text_artifact(self): @pytest.fixture def image_artifact(self): - return ImageArtifact(value=b"some image data", mime_type="image/png", width=512, height=512) + return ImageArtifact(value=b"some image data", format="png", width=512, height=512) def test_artifact_inputs(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): input_tuple = (text_artifact, image_artifact, image_artifact) diff --git a/tests/unit/tasks/test_variation_image_generation_task.py b/tests/unit/tasks/test_variation_image_generation_task.py index 356a09b9e..bef2107ac 100644 --- a/tests/unit/tasks/test_variation_image_generation_task.py +++ b/tests/unit/tasks/test_variation_image_generation_task.py @@ -17,7 +17,7 @@ def text_artifact(self): @pytest.fixture def image_artifact(self): - return ImageArtifact(value=b"some image data", mime_type="image/png", width=512, height=512) + return ImageArtifact(value=b"some image data", format="png", width=512, height=512) def test_artifact_inputs(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): input_tuple = (text_artifact, image_artifact) diff --git a/tests/unit/tools/test_inpainting_image_generation_client.py b/tests/unit/tools/test_inpainting_image_generation_client.py index a6322d034..9e1d017bb 100644 --- a/tests/unit/tools/test_inpainting_image_generation_client.py +++ b/tests/unit/tools/test_inpainting_image_generation_client.py @@ -17,7 +17,7 @@ def image_generation_engine(self) -> Mock: @pytest.fixture def image_loader(self) -> Mock: loader = Mock() - loader.load.return_value = ImageArtifact(value=b"image_data", mime_type="image/png", width=512, height=512) + loader.load.return_value = ImageArtifact(value=b"image_data", format="png", width=512, height=512) return loader @@ -31,7 +31,7 @@ def test_validate_output_configs(self, image_generation_engine) -> None: def test_image_inpainting(self, image_generator) -> None: image_generator.engine.run.return_value = Mock( - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.image_inpainting_from_file( @@ -54,7 +54,7 @@ def test_image_inpainting_with_outfile(self, image_generation_engine, image_load ) image_generator.engine.run.return_value = Mock( # pyright: ignore - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.image_inpainting_from_file( diff --git a/tests/unit/tools/test_outpainting_image_variation_client.py b/tests/unit/tools/test_outpainting_image_variation_client.py index 9fd6b994b..1a84018a4 100644 --- a/tests/unit/tools/test_outpainting_image_variation_client.py +++ b/tests/unit/tools/test_outpainting_image_variation_client.py @@ -17,7 +17,7 @@ def image_generation_engine(self) -> Mock: @pytest.fixture def image_loader(self) -> Mock: loader = Mock() - loader.load.return_value = ImageArtifact(value=b"image_data", mime_type="image/png", width=512, height=512) + loader.load.return_value = ImageArtifact(value=b"image_data", format="png", width=512, height=512) return loader @@ -31,7 +31,7 @@ def test_validate_output_configs(self, image_generation_engine) -> None: def test_image_outpainting(self, image_generator) -> None: image_generator.engine.run.return_value = Mock( - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.image_outpainting_from_file( @@ -54,7 +54,7 @@ def test_image_outpainting_with_outfile(self, image_generation_engine, image_loa ) image_generator.engine.run.return_value = Mock( # pyright: ignore - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.image_outpainting_from_file( diff --git a/tests/unit/tools/test_prompt_image_generation_client.py b/tests/unit/tools/test_prompt_image_generation_client.py index b0ab15ff0..dffbb4239 100644 --- a/tests/unit/tools/test_prompt_image_generation_client.py +++ b/tests/unit/tools/test_prompt_image_generation_client.py @@ -23,7 +23,7 @@ def test_validate_output_configs(self, image_generation_engine) -> None: def test_generate_image(self, image_generator) -> None: image_generator.engine.run.return_value = Mock( - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.generate_image( @@ -37,7 +37,7 @@ def test_generate_image_with_outfile(self, image_generation_engine) -> None: image_generator = PromptImageGenerationClient(engine=image_generation_engine, output_file=outfile) image_generator.engine.run.return_value = Mock( # pyright: ignore - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.generate_image( diff --git a/tests/unit/tools/test_variation_image_generation_client.py b/tests/unit/tools/test_variation_image_generation_client.py index aec3a5983..b29f4fecf 100644 --- a/tests/unit/tools/test_variation_image_generation_client.py +++ b/tests/unit/tools/test_variation_image_generation_client.py @@ -17,7 +17,7 @@ def image_generation_engine(self) -> Mock: @pytest.fixture def image_loader(self) -> Mock: loader = Mock() - loader.load.return_value = ImageArtifact(value=b"image_data", mime_type="image/png", width=512, height=512) + loader.load.return_value = ImageArtifact(value=b"image_data", format="png", width=512, height=512) return loader @@ -33,7 +33,7 @@ def test_validate_output_configs(self, image_generation_engine, image_loader) -> def test_image_variation(self, image_generator) -> None: image_generator.engine.run.return_value = Mock( - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.image_variation_from_file( @@ -55,7 +55,7 @@ def test_image_variation_with_outfile(self, image_generation_engine, image_loade ) image_generator.engine.run.return_value = Mock( # pyright: ignore - value=b"image data", mime_type="image/png", width=512, height=512, model="test model", prompt="test prompt" + value=b"image data", format="png", width=512, height=512, model="test model", prompt="test prompt" ) image_artifact = image_generator.image_variation_from_file( diff --git a/tests/unit/utils/test_load_artifact_from_memory.py b/tests/unit/utils/test_load_artifact_from_memory.py index 2fd63e8d4..db4f7d573 100644 --- a/tests/unit/utils/test_load_artifact_from_memory.py +++ b/tests/unit/utils/test_load_artifact_from_memory.py @@ -17,7 +17,7 @@ def text_artifact(self): @pytest.fixture def image_artifact(self): - return ImageArtifact(value=b"image", name="image", mime_type="image/png", height=32, width=32) + return ImageArtifact(value=b"image", name="image", format="png", height=32, width=32) def test_no_memory(self): with pytest.raises(ValueError): From ed08311d4b3b323db7f00933cc561dcf8205aa1c Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 16 Apr 2024 14:06:53 -0700 Subject: [PATCH 019/145] Add docs to repo (#744) --- .github/actions/init-environment/action.yml | 4 + ...n-tests.yml => docs-integration-tests.yml} | 65 +- .github/workflows/pull-request-links.yml | 20 + .gitignore | 4 + .readthedocs.yml | 13 + CHANGELOG.md | 1 + README.md | 2 +- docs/assets/css/code_select.css | 3 + docs/assets/css/extra.css | 12 + docs/assets/css/mkdocstrings.css | 44 + docs/assets/css/swagger-ui.css | 9305 +++++++++++++++++ docs/assets/css/swagger-ui.css.map | 1 + docs/assets/img/data-architecture.png | Bin 0 -> 74665 bytes .../assets/img/griptape-mark-square-light.svg | 11 + docs/assets/img/tools/output.png | Bin 0 -> 151667 bytes docs/assets/img/tools/poetry_setup.png | Bin 0 -> 173909 bytes docs/assets/img/tools/toml.png | Bin 0 -> 899349 bytes docs/assets/scripts/swagger-ui-bundle.js | 3 + docs/assets/scripts/swagger-ui-bundle.js.map | 1 + .../scripts/swagger-ui-standalone-preset.js | 3 + .../swagger-ui-standalone-preset.js.map | 1 + docs/contributing.md | 54 + docs/examples/index.md | 3 + docs/examples/load-and-query-pinecone.md | 44 + docs/examples/load-query-and-chat-marqo.md | 47 + docs/examples/multiple-agent-shared-memory.md | 80 + docs/examples/query-webpage.md | 28 + docs/examples/talk-to-a-pdf.md | 49 + docs/examples/talk-to-a-webpage.md | 62 + docs/examples/talk-to-redshift.md | 47 + docs/gen_ref_pages.py | 48 + docs/griptape-framework/data/artifacts.md | 38 + docs/griptape-framework/data/chunkers.md | 22 + docs/griptape-framework/data/index.md | 21 + docs/griptape-framework/data/loaders.md | 174 + .../drivers/embedding-drivers.md | 193 + .../drivers/image-generation-drivers.md | 174 + .../drivers/image-query-drivers.md | 124 + .../drivers/prompt-drivers.md | 598 ++ .../griptape-framework/drivers/sql-drivers.md | 75 + .../drivers/vector-store-drivers.md | 417 + .../drivers/web-scraper-drivers.md | 79 + .../engines/extraction-engines.md | 79 + .../engines/image-generation-engines.md | 165 + .../engines/image-query-engines.md | 25 + .../engines/query-engines.md | 27 + .../engines/summary-engines.md | 29 + docs/griptape-framework/index.md | 208 + docs/griptape-framework/misc/events.md | 271 + docs/griptape-framework/misc/tokenizers.md | 143 + docs/griptape-framework/structures/agents.md | 79 + docs/griptape-framework/structures/config.md | 147 + .../structures/conversation-memory.md | 161 + .../structures/pipelines.md | 47 + .../griptape-framework/structures/rulesets.md | 185 + .../structures/task-memory.md | 89 + docs/griptape-framework/structures/tasks.md | 669 ++ .../structures/workflows.md | 149 + docs/griptape-framework/tools/index.md | 62 + docs/griptape-tools/custom-tools/index.md | 79 + docs/griptape-tools/index.md | 37 + .../official-tools/aws-iam-client.md | 68 + .../official-tools/aws-s3-client.md | 65 + .../official-tools/calculator.md | 33 + .../griptape-tools/official-tools/computer.md | 107 + .../official-tools/date-time.md | 36 + .../official-tools/email-client.md | 22 + .../official-tools/file-manager.md | 48 + .../official-tools/google-cal-client.md | 37 + .../official-tools/google-docs-client.md | 63 + .../official-tools/google-drive-client.md | 60 + .../official-tools/google-gmail-client.md | 62 + .../official-tools/image-query-client.md | 29 + .../inpainting-image-generation-client.md | 32 + .../official-tools/openweather-client.md | 20 + .../outpainting-image-generation-client.md | 32 + .../prompt-image-generation-client.md | 31 + .../official-tools/rest-api-client.md | 159 + .../official-tools/sql-client.md | 71 + .../official-tools/task-memory-client.md | 11 + .../variation-image-generation-client.md | 83 + .../official-tools/vector-store-client.md | 37 + .../official-tools/web-scraper.md | 76 + .../official-tools/web-search.md | 110 + docs/index.md | 27 + docs/overrides/main.html | 9 + docs/plugins/swagger_ui_plugin.py | 35 + docs/plugins/tmpl/swagger.md.tmpl | 29 + mkdocs.yml | 153 + poetry.lock | 341 +- pyproject.toml | 14 + tests/integration/test_code_blocks.py | 22 + tests/resources/addresses.csv | 7 + tests/resources/cities.csv | 130 + tests/resources/cow.png | Bin 0 -> 3147861 bytes tests/resources/mountain-mask.png | Bin 0 -> 9161 bytes tests/resources/mountain.jpg | Bin 0 -> 82351 bytes tests/resources/mountain.png | Bin 0 -> 436989 bytes tests/utils/code_blocks.py | 80 + tests/utils/structure_tester.py | 30 +- 100 files changed, 16664 insertions(+), 26 deletions(-) rename .github/workflows/{integration-tests.yml => docs-integration-tests.yml} (57%) create mode 100644 .github/workflows/pull-request-links.yml create mode 100644 .readthedocs.yml create mode 100644 docs/assets/css/code_select.css create mode 100644 docs/assets/css/extra.css create mode 100644 docs/assets/css/mkdocstrings.css create mode 100644 docs/assets/css/swagger-ui.css create mode 100644 docs/assets/css/swagger-ui.css.map create mode 100644 docs/assets/img/data-architecture.png create mode 100644 docs/assets/img/griptape-mark-square-light.svg create mode 100644 docs/assets/img/tools/output.png create mode 100644 docs/assets/img/tools/poetry_setup.png create mode 100644 docs/assets/img/tools/toml.png create mode 100644 docs/assets/scripts/swagger-ui-bundle.js create mode 100644 docs/assets/scripts/swagger-ui-bundle.js.map create mode 100644 docs/assets/scripts/swagger-ui-standalone-preset.js create mode 100644 docs/assets/scripts/swagger-ui-standalone-preset.js.map create mode 100644 docs/contributing.md create mode 100644 docs/examples/index.md create mode 100644 docs/examples/load-and-query-pinecone.md create mode 100644 docs/examples/load-query-and-chat-marqo.md create mode 100644 docs/examples/multiple-agent-shared-memory.md create mode 100644 docs/examples/query-webpage.md create mode 100644 docs/examples/talk-to-a-pdf.md create mode 100644 docs/examples/talk-to-a-webpage.md create mode 100644 docs/examples/talk-to-redshift.md create mode 100644 docs/gen_ref_pages.py create mode 100644 docs/griptape-framework/data/artifacts.md create mode 100644 docs/griptape-framework/data/chunkers.md create mode 100644 docs/griptape-framework/data/index.md create mode 100644 docs/griptape-framework/data/loaders.md create mode 100644 docs/griptape-framework/drivers/embedding-drivers.md create mode 100644 docs/griptape-framework/drivers/image-generation-drivers.md create mode 100644 docs/griptape-framework/drivers/image-query-drivers.md create mode 100644 docs/griptape-framework/drivers/prompt-drivers.md create mode 100644 docs/griptape-framework/drivers/sql-drivers.md create mode 100644 docs/griptape-framework/drivers/vector-store-drivers.md create mode 100644 docs/griptape-framework/drivers/web-scraper-drivers.md create mode 100644 docs/griptape-framework/engines/extraction-engines.md create mode 100644 docs/griptape-framework/engines/image-generation-engines.md create mode 100644 docs/griptape-framework/engines/image-query-engines.md create mode 100644 docs/griptape-framework/engines/query-engines.md create mode 100644 docs/griptape-framework/engines/summary-engines.md create mode 100644 docs/griptape-framework/index.md create mode 100644 docs/griptape-framework/misc/events.md create mode 100644 docs/griptape-framework/misc/tokenizers.md create mode 100644 docs/griptape-framework/structures/agents.md create mode 100644 docs/griptape-framework/structures/config.md create mode 100644 docs/griptape-framework/structures/conversation-memory.md create mode 100644 docs/griptape-framework/structures/pipelines.md create mode 100644 docs/griptape-framework/structures/rulesets.md create mode 100644 docs/griptape-framework/structures/task-memory.md create mode 100644 docs/griptape-framework/structures/tasks.md create mode 100644 docs/griptape-framework/structures/workflows.md create mode 100644 docs/griptape-framework/tools/index.md create mode 100644 docs/griptape-tools/custom-tools/index.md create mode 100644 docs/griptape-tools/index.md create mode 100644 docs/griptape-tools/official-tools/aws-iam-client.md create mode 100644 docs/griptape-tools/official-tools/aws-s3-client.md create mode 100644 docs/griptape-tools/official-tools/calculator.md create mode 100644 docs/griptape-tools/official-tools/computer.md create mode 100644 docs/griptape-tools/official-tools/date-time.md create mode 100644 docs/griptape-tools/official-tools/email-client.md create mode 100644 docs/griptape-tools/official-tools/file-manager.md create mode 100644 docs/griptape-tools/official-tools/google-cal-client.md create mode 100644 docs/griptape-tools/official-tools/google-docs-client.md create mode 100644 docs/griptape-tools/official-tools/google-drive-client.md create mode 100644 docs/griptape-tools/official-tools/google-gmail-client.md create mode 100644 docs/griptape-tools/official-tools/image-query-client.md create mode 100644 docs/griptape-tools/official-tools/inpainting-image-generation-client.md create mode 100644 docs/griptape-tools/official-tools/openweather-client.md create mode 100644 docs/griptape-tools/official-tools/outpainting-image-generation-client.md create mode 100644 docs/griptape-tools/official-tools/prompt-image-generation-client.md create mode 100644 docs/griptape-tools/official-tools/rest-api-client.md create mode 100644 docs/griptape-tools/official-tools/sql-client.md create mode 100644 docs/griptape-tools/official-tools/task-memory-client.md create mode 100644 docs/griptape-tools/official-tools/variation-image-generation-client.md create mode 100644 docs/griptape-tools/official-tools/vector-store-client.md create mode 100644 docs/griptape-tools/official-tools/web-scraper.md create mode 100644 docs/griptape-tools/official-tools/web-search.md create mode 100644 docs/index.md create mode 100644 docs/overrides/main.html create mode 100644 docs/plugins/swagger_ui_plugin.py create mode 100644 docs/plugins/tmpl/swagger.md.tmpl create mode 100644 mkdocs.yml create mode 100644 tests/integration/test_code_blocks.py create mode 100644 tests/resources/addresses.csv create mode 100644 tests/resources/cities.csv create mode 100644 tests/resources/cow.png create mode 100644 tests/resources/mountain-mask.png create mode 100644 tests/resources/mountain.jpg create mode 100644 tests/resources/mountain.png create mode 100644 tests/utils/code_blocks.py diff --git a/.github/actions/init-environment/action.yml b/.github/actions/init-environment/action.yml index 761e27357..686f57e34 100644 --- a/.github/actions/init-environment/action.yml +++ b/.github/actions/init-environment/action.yml @@ -35,3 +35,7 @@ runs: source .venv/bin/activate echo PATH=$PATH >> $GITHUB_ENV shell: bash + + - name: Install playwright + run: playwright install --with-deps + shell: bash diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/docs-integration-tests.yml similarity index 57% rename from .github/workflows/integration-tests.yml rename to .github/workflows/docs-integration-tests.yml index c9939f8a9..bba8bdcdd 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -1,7 +1,13 @@ -name: Integration Tests - -on: workflow_dispatch +name: Docs Integration Tests +on: + pull_request: + types: + - opened + - reopened + branches: [ "main", "dev" ] + paths: + - "docs/**" jobs: test: runs-on: ubuntu-latest @@ -38,6 +44,15 @@ jobs: MONGODB_DATABASE_NAME: ${{ secrets.INTEG_MONGODB_DATABASE_NAME }} MONGODB_COLLECTION_NAME: ${{ secrets.INTEG_MONGODB_COLLECTION_NAME }} MONGODB_PASSWORD: ${{ secrets.INTEG_MONGODB_PASSWORD }} + MONGODB_INDEX_NAME: ${{ secrets.INTEG_MONGODB_INDEX_NAME }} + MONGODB_VECTOR_PATH: ${{ secrets.INTEG_MONGODB_VECTOR_PATH }} + AZURE_MONGODB_HOST: ${{ secrets.INTEG_AZURE_MONGODB_HOST }} + AZURE_MONGODB_USERNAME: ${{ secrets.INTEG_AZURE_MONGODB_USERNAME }} + AZURE_MONGODB_PASSWORD: ${{ secrets.INTEG_AZURE_MONGODB_PASSWORD }} + AZURE_MONGODB_DATABASE_NAME: ${{ secrets.INTEG_AZURE_MONGODB_DATABASE_NAME }} + AZURE_MONGODB_COLLECTION_NAME: ${{ secrets.INTEG_AZURE_MONGODB_COLLECTION_NAME }} + AZURE_MONGODB_INDEX_NAME: ${{ secrets.INTEG_AZURE_MONGODB_INDEX_NAME }} + AZURE_MONGODB_VECTOR_PATH: ${{ secrets.INTEG_AZURE_MONGODB_VECTOR_PATH }} AMAZON_OPENSEARCH_HOST: ${{ secrets.INTEG_AMAZON_OPENSEARCH_HOST }} AMAZON_OPENSEARCH_INDEX_NAME: ${{ secrets.INTEG_AMAZON_OPENSEARCH_INDEX_NAME }} GOOGLE_API_KEY: ${{ secrets.INTEG_GOOGLE_API_KEY }} @@ -52,19 +67,35 @@ jobs: GOOGLE_AUTH_URI: ${{ secrets.INTEG_GOOGLE_AUTH_URI }} GOOGLE_TOKEN_URI: ${{ secrets.INTEG_GOOGLE_TOKEN_URI }} GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.INTEG_GOOGLE_AUTH_PROVIDER_X509_CERT_URL }} + OPENWEATHER_API_KEY: ${{ secrets.INTEG_OPENWEATHER_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.INTEG_ANTHROPIC_API_KEY }} SAGEMAKER_LLAMA_ENDPOINT_NAME: ${{ secrets.INTEG_LLAMA_ENDPOINT_NAME }} SAGEMAKER_FALCON_ENDPOINT_NAME: ${{ secrets.INTEG_FALCON_ENDPOINT_NAME }} - HUGGINGFACE_ACCESS_TOKEN: ${{ secrets.INTEG_HUGGINGFACE_ACCESS_TOKEN }} - AZURE_OPENAI_API_BASE_1: ${{ secrets.INTEG_AZURE_OPENAI_API_BASE_1 }} + HUGGINGFACE_HUB_ACCESS_TOKEN: ${{ secrets.INTEG_HUGGINGFACE_HUB_ACCESS_TOKEN }} + AZURE_OPENAI_ENDPOINT_1: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_1 }} AZURE_OPENAI_API_KEY_1: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_1 }} - AZURE_OPENAI_API_BASE_2: ${{ secrets.INTEG_AZURE_OPENAI_API_BASE_2 }} + AZURE_OPENAI_ENDPOINT_2: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_2 }} AZURE_OPENAI_API_KEY_2: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_2 }} - AZURE_OPENAI_35_16k_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_35_16k_DEPLOYMENT_ID }} + AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_35_TURBO_16K_DEPLOYMENT_ID }} AZURE_OPENAI_DAVINCI_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_DAVINCI_DEPLOYMENT_ID }} AZURE_OPENAI_4_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_4_DEPLOYMENT_ID }} - AZURE_OPENAI_4_32k_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_4_32k_DEPLOYMENT_ID }} + AZURE_OPENAI_4_32K_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_4_32K_DEPLOYMENT_ID }} + AZURE_OPENAI_DALL_E_3_DEPLOYMENT_ID: ${{ secrets.INTEG_AZURE_OPENAI_DALL_E_3_DEPLOYMENT_ID }} + AZURE_OPENAI_DEV_2_API_BASE: ${{ secrets.INTEG_AZURE_OPENAI_DEV_2_API_BASE }} + AZURE_OPENAI_DEV_2_API_KEY: ${{ secrets.INTEG_AZURE_OPENAI_DEV_2_API_KEY }} + AZURE_OPENAI_API_BASE: ${{ secrets.INTEG_AZURE_OPENAI_API_BASE }} COHERE_API_KEY: ${{ secrets.INTEG_COHERE_API_KEY }} + GOOGLE_OWNER_EMAIL: ${{ secrets.INTEG_GOOGLE_OWNER_EMAIL }} + LEONARDO_API_KEY: ${{ secrets.INTEG_LEONARDO_API_KEY }} + LEONARDO_MODEL_ID: ${{ secrets.INTEG_LEONARDO_MODEL_ID }} + SAGEMAKER_TENSORFLOW_HUB_MODEL: ${{ secrets.INTEG_SAGEMAKER_TENSORFLOW_HUB_MODEL }} + SAGEMAKER_HUGGINGFACE_MODEL: ${{ secrets.INTEG_SAGEMAKER_HUGGINGFACE_MODEL }} + POSTGRES_USER: ${{ secrets.INTEG_POSTGRES_USER }} + POSTGRES_PASSWORD: ${{ secrets.INTEG_POSTGRES_PASSWORD }} + POSTGRES_DB: ${{ secrets.INTEG_POSTGRES_DB }} + POSTGRES_HOST: ${{ secrets.INTEG_POSTGRES_HOST }} + POSTGRES_PORT: ${{ secrets.INTEG_POSTGRES_PORT }} + VOYAGE_API_KEY: ${{ secrets.INTEG_VOYAGE_API_KEY }} services: postgres: image: ankane/pgvector:v0.5.0 @@ -84,5 +115,21 @@ jobs: uses: actions/checkout@v3 - name: Init environment uses: ./.github/actions/init-environment + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v44 + with: + files: | + **.md + - name: List all changed files + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + run: | + for file in ${ALL_CHANGED_FILES}; do + echo "$file was changed" + done - name: Run integration tests - run: pytest -vs tests/integration + if: steps.changed-files.outputs.any_changed == 'true' + run: pytest -n auto tests/integration/test_code_blocks.py + env: + DOCS_ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} diff --git a/.github/workflows/pull-request-links.yml b/.github/workflows/pull-request-links.yml new file mode 100644 index 000000000..0d937ac94 --- /dev/null +++ b/.github/workflows/pull-request-links.yml @@ -0,0 +1,20 @@ +name: Read the Docs Preview +on: + pull_request_target: + types: + - opened + paths: + - "docs/**" + +permissions: + pull-requests: write + +jobs: + pull-request-links: + runs-on: ubuntu-latest + steps: + - uses: readthedocs/actions/preview@v1 + with: + project-slug: ${{ secrets.READTHEDOCS_PROJECT_SLUG }} + single-version: 'false' + project-language: "" diff --git a/.gitignore b/.gitignore index f7478c108..ba63b4aca 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,7 @@ dist/** # asdf .tool-versions + +# mkdocs build output +site +reference diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 000000000..4e6ae54a4 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,13 @@ +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.11" + jobs: + post_install: + - VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH poetry install --with docs + +mkdocs: + configuration: mkdocs.yml + fail_on_warning: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d5d047f1..93291262f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved RAG performance in `VectorQueryEngine`. - **BREAKING**: Removed `workdir`, `loaders`, `default_loader`, and `save_file_encoding` fields from `FileManager` and added `file_manager_driver`. - **BREADKING**: Removed `mime_type` field from `ImageArtifact`. `mime_type` is now a property constructed using the Artifact type and `format` field. +- Moved [Griptape Docs](https://github.com/griptape-ai/griptape-docs) to this repository. ## [0.24.2] - 2024-04-04 diff --git a/README.md b/README.md index 014247ecd..66d21c82f 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ The important thing to note here is that no matter how big the webpage is it can All Tools have the `off_prompt` property enabled be default. Disabling it (`off_prompt=False`) will force the framework to return all tool outputs directly to the LLM prompt. `TaskMemoryClient` requires the user to set this property explicitly for usability reasons. In the above example, we set `off_prompt` to `True`, which means that the LLM can never see the data it manipulates, but can send it to other Tools. -[Check out our docs](https://docs.griptape.ai/latest/griptape-framework/structures/prompt-drivers/) to learn more about how to use Griptape with other LLM providers like Anthropic, Claude, Hugging Face, and Azure. +[Check out our docs](https://docs.griptape.ai/latest/griptape-framework/drivers/prompt-drivers/) to learn more about how to use Griptape with other LLM providers like Anthropic, Claude, Hugging Face, and Azure. ## Versioning diff --git a/docs/assets/css/code_select.css b/docs/assets/css/code_select.css new file mode 100644 index 000000000..5939aac1a --- /dev/null +++ b/docs/assets/css/code_select.css @@ -0,0 +1,3 @@ +.highlight .gp, .highlight .go { /* Generic.Prompt, Generic.Output */ + user-select: none; +} diff --git a/docs/assets/css/extra.css b/docs/assets/css/extra.css new file mode 100644 index 000000000..17c7b4335 --- /dev/null +++ b/docs/assets/css/extra.css @@ -0,0 +1,12 @@ +.md-typeset__table { + min-width: 100%; +} + +.md-typeset table:not([class]) { + display: table; +} + +/* Hide the code block title since we're using it for other purposes.*/ +.filename { + display: none !important +} diff --git a/docs/assets/css/mkdocstrings.css b/docs/assets/css/mkdocstrings.css new file mode 100644 index 000000000..38a87d909 --- /dev/null +++ b/docs/assets/css/mkdocstrings.css @@ -0,0 +1,44 @@ +.doc-heading code { + background-color: inherit; + padding: 0; +} + +h3.doc-heading { + font-size: 1.1rem; +} + +h4.doc-heading { + font-size: 0.8rem; +} + +.doc-label-instance-attribute { + display: none; +} + +/* Indentation. */ +div.doc-contents:not(.first) { + padding-left: 25px; + border-left: 0.05rem solid var(--md-typeset-table-color); +} + +/* Mark external links as such. */ +a.external::after, +a.autorefs-external::after { + /* https://primer.style/octicons/arrow-up-right-24 */ + mask-image: url('data:image/svg+xml,'); + -webkit-mask-image: url('data:image/svg+xml,'); + content: " "; + + display: inline-block; + vertical-align: middle; + position: relative; + + height: 1em; + width: 1em; + background-color: var(--md-typeset-a-color); +} + +a.external:hover::after, +a.autorefs-external:hover::after { + background-color: var(--md-accent-fg-color); +} diff --git a/docs/assets/css/swagger-ui.css b/docs/assets/css/swagger-ui.css new file mode 100644 index 000000000..eb9dc086c --- /dev/null +++ b/docs/assets/css/swagger-ui.css @@ -0,0 +1,9305 @@ +.swagger-ui { + color: #8b8d95; + font-family: sans-serif; /*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ +} +.swagger-ui html { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 1.15; +} +.swagger-ui body { + margin: 0; +} +.swagger-ui article, +.swagger-ui aside, +.swagger-ui footer, +.swagger-ui header, +.swagger-ui nav, +.swagger-ui section { + display: block; +} +.swagger-ui h1 { + font-size: 2em; + margin: 0.67em 0; +} +.swagger-ui figcaption, +.swagger-ui figure, +.swagger-ui main { + display: block; +} +.swagger-ui figure { + margin: 1em 40px; +} +.swagger-ui hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} +.swagger-ui pre { + font-family: monospace, monospace; + font-size: 1em; +} +.swagger-ui a { + -webkit-text-decoration-skip: objects; + background-color: transparent; +} +.swagger-ui abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} +.swagger-ui b, +.swagger-ui strong { + font-weight: inherit; + font-weight: bolder; +} +.swagger-ui code, +.swagger-ui kbd, +.swagger-ui samp { + font-family: monospace, monospace; + font-size: 1em; +} +.swagger-ui dfn { + font-style: italic; +} +.swagger-ui mark { + background-color: #ff0; + color: #000; +} +.swagger-ui small { + font-size: 80%; +} +.swagger-ui sub, +.swagger-ui sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +.swagger-ui sub { + bottom: -0.25em; +} +.swagger-ui sup { + top: -0.5em; +} +.swagger-ui audio, +.swagger-ui video { + display: inline-block; +} +.swagger-ui audio:not([controls]) { + display: none; + height: 0; +} +.swagger-ui img { + border-style: none; +} +.swagger-ui svg:not(:root) { + overflow: hidden; +} +.swagger-ui button, +.swagger-ui input, +.swagger-ui optgroup, +.swagger-ui select, +.swagger-ui textarea { + font-family: sans-serif; + font-size: 100%; + line-height: 1.15; + margin: 0; +} +.swagger-ui button, +.swagger-ui input { + overflow: visible; +} +.swagger-ui button, +.swagger-ui select { + text-transform: none; +} +.swagger-ui [type="reset"], +.swagger-ui [type="submit"], +.swagger-ui button, +.swagger-ui html [type="button"] { + -webkit-appearance: button; +} +.swagger-ui [type="button"]::-moz-focus-inner, +.swagger-ui [type="reset"]::-moz-focus-inner, +.swagger-ui [type="submit"]::-moz-focus-inner, +.swagger-ui button::-moz-focus-inner { + border-style: none; + padding: 0; +} +.swagger-ui [type="button"]:-moz-focusring, +.swagger-ui [type="reset"]:-moz-focusring, +.swagger-ui [type="submit"]:-moz-focusring, +.swagger-ui button:-moz-focusring { + outline: 1px dotted ButtonText; +} +.swagger-ui fieldset { + padding: 0.35em 0.75em 0.625em; +} +.swagger-ui legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} +.swagger-ui progress { + display: inline-block; + vertical-align: baseline; +} +.swagger-ui textarea { + overflow: auto; +} +.swagger-ui [type="checkbox"], +.swagger-ui [type="radio"] { + box-sizing: border-box; + padding: 0; +} +.swagger-ui [type="number"]::-webkit-inner-spin-button, +.swagger-ui [type="number"]::-webkit-outer-spin-button { + height: auto; +} +.swagger-ui [type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} +.swagger-ui [type="search"]::-webkit-search-cancel-button, +.swagger-ui [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +.swagger-ui ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} +.swagger-ui details, +.swagger-ui menu { + display: block; +} +.swagger-ui summary { + display: list-item; +} +.swagger-ui canvas { + display: inline-block; +} +.swagger-ui [hidden], +.swagger-ui template { + display: none; +} +.swagger-ui .debug * { + outline: 1px solid gold; +} +.swagger-ui .debug-white * { + outline: 1px solid #fff; +} +.swagger-ui .debug-black * { + outline: 1px solid #000; +} +.swagger-ui .debug-grid { + background: transparent + url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) + repeat 0 0; +} +.swagger-ui .debug-grid-16 { + background: transparent + url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) + repeat 0 0; +} +.swagger-ui .debug-grid-8-solid { + background: #fff + url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) + repeat 0 0; +} +.swagger-ui .debug-grid-16-solid { + background: #fff + url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) + repeat 0 0; +} +.swagger-ui .border-box, +.swagger-ui a, +.swagger-ui article, +.swagger-ui body, +.swagger-ui code, +.swagger-ui dd, +.swagger-ui div, +.swagger-ui dl, +.swagger-ui dt, +.swagger-ui fieldset, +.swagger-ui footer, +.swagger-ui form, +.swagger-ui h1, +.swagger-ui h2, +.swagger-ui h3, +.swagger-ui h4, +.swagger-ui h5, +.swagger-ui h6, +.swagger-ui header, +.swagger-ui html, +.swagger-ui input[type="email"], +.swagger-ui input[type="number"], +.swagger-ui input[type="password"], +.swagger-ui input[type="tel"], +.swagger-ui input[type="text"], +.swagger-ui input[type="url"], +.swagger-ui legend, +.swagger-ui li, +.swagger-ui main, +.swagger-ui ol, +.swagger-ui p, +.swagger-ui pre, +.swagger-ui section, +.swagger-ui table, +.swagger-ui td, +.swagger-ui textarea, +.swagger-ui th, +.swagger-ui tr, +.swagger-ui ul { + box-sizing: border-box; +} +.swagger-ui .aspect-ratio { + height: 0; + position: relative; +} +.swagger-ui .aspect-ratio--16x9 { + padding-bottom: 56.25%; +} +.swagger-ui .aspect-ratio--9x16 { + padding-bottom: 177.77%; +} +.swagger-ui .aspect-ratio--4x3 { + padding-bottom: 75%; +} +.swagger-ui .aspect-ratio--3x4 { + padding-bottom: 133.33%; +} +.swagger-ui .aspect-ratio--6x4 { + padding-bottom: 66.6%; +} +.swagger-ui .aspect-ratio--4x6 { + padding-bottom: 150%; +} +.swagger-ui .aspect-ratio--8x5 { + padding-bottom: 62.5%; +} +.swagger-ui .aspect-ratio--5x8 { + padding-bottom: 160%; +} +.swagger-ui .aspect-ratio--7x5 { + padding-bottom: 71.42%; +} +.swagger-ui .aspect-ratio--5x7 { + padding-bottom: 140%; +} +.swagger-ui .aspect-ratio--1x1 { + padding-bottom: 100%; +} +.swagger-ui .aspect-ratio--object { + bottom: 0; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; + z-index: 100; +} +@media screen and (min-width: 30em) { + .swagger-ui .aspect-ratio-ns { + height: 0; + position: relative; + } + .swagger-ui .aspect-ratio--16x9-ns { + padding-bottom: 56.25%; + } + .swagger-ui .aspect-ratio--9x16-ns { + padding-bottom: 177.77%; + } + .swagger-ui .aspect-ratio--4x3-ns { + padding-bottom: 75%; + } + .swagger-ui .aspect-ratio--3x4-ns { + padding-bottom: 133.33%; + } + .swagger-ui .aspect-ratio--6x4-ns { + padding-bottom: 66.6%; + } + .swagger-ui .aspect-ratio--4x6-ns { + padding-bottom: 150%; + } + .swagger-ui .aspect-ratio--8x5-ns { + padding-bottom: 62.5%; + } + .swagger-ui .aspect-ratio--5x8-ns { + padding-bottom: 160%; + } + .swagger-ui .aspect-ratio--7x5-ns { + padding-bottom: 71.42%; + } + .swagger-ui .aspect-ratio--5x7-ns { + padding-bottom: 140%; + } + .swagger-ui .aspect-ratio--1x1-ns { + padding-bottom: 100%; + } + .swagger-ui .aspect-ratio--object-ns { + bottom: 0; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; + z-index: 100; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .aspect-ratio-m { + height: 0; + position: relative; + } + .swagger-ui .aspect-ratio--16x9-m { + padding-bottom: 56.25%; + } + .swagger-ui .aspect-ratio--9x16-m { + padding-bottom: 177.77%; + } + .swagger-ui .aspect-ratio--4x3-m { + padding-bottom: 75%; + } + .swagger-ui .aspect-ratio--3x4-m { + padding-bottom: 133.33%; + } + .swagger-ui .aspect-ratio--6x4-m { + padding-bottom: 66.6%; + } + .swagger-ui .aspect-ratio--4x6-m { + padding-bottom: 150%; + } + .swagger-ui .aspect-ratio--8x5-m { + padding-bottom: 62.5%; + } + .swagger-ui .aspect-ratio--5x8-m { + padding-bottom: 160%; + } + .swagger-ui .aspect-ratio--7x5-m { + padding-bottom: 71.42%; + } + .swagger-ui .aspect-ratio--5x7-m { + padding-bottom: 140%; + } + .swagger-ui .aspect-ratio--1x1-m { + padding-bottom: 100%; + } + .swagger-ui .aspect-ratio--object-m { + bottom: 0; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; + z-index: 100; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .aspect-ratio-l { + height: 0; + position: relative; + } + .swagger-ui .aspect-ratio--16x9-l { + padding-bottom: 56.25%; + } + .swagger-ui .aspect-ratio--9x16-l { + padding-bottom: 177.77%; + } + .swagger-ui .aspect-ratio--4x3-l { + padding-bottom: 75%; + } + .swagger-ui .aspect-ratio--3x4-l { + padding-bottom: 133.33%; + } + .swagger-ui .aspect-ratio--6x4-l { + padding-bottom: 66.6%; + } + .swagger-ui .aspect-ratio--4x6-l { + padding-bottom: 150%; + } + .swagger-ui .aspect-ratio--8x5-l { + padding-bottom: 62.5%; + } + .swagger-ui .aspect-ratio--5x8-l { + padding-bottom: 160%; + } + .swagger-ui .aspect-ratio--7x5-l { + padding-bottom: 71.42%; + } + .swagger-ui .aspect-ratio--5x7-l { + padding-bottom: 140%; + } + .swagger-ui .aspect-ratio--1x1-l { + padding-bottom: 100%; + } + .swagger-ui .aspect-ratio--object-l { + bottom: 0; + height: 100%; + left: 0; + position: absolute; + right: 0; + top: 0; + width: 100%; + z-index: 100; + } +} +.swagger-ui img { + max-width: 100%; +} +.swagger-ui .cover { + background-size: cover !important; +} +.swagger-ui .contain { + background-size: contain !important; +} +@media screen and (min-width: 30em) { + .swagger-ui .cover-ns { + background-size: cover !important; + } + .swagger-ui .contain-ns { + background-size: contain !important; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .cover-m { + background-size: cover !important; + } + .swagger-ui .contain-m { + background-size: contain !important; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .cover-l { + background-size: cover !important; + } + .swagger-ui .contain-l { + background-size: contain !important; + } +} +.swagger-ui .bg-center { + background-position: 50%; + background-repeat: no-repeat; +} +.swagger-ui .bg-top { + background-position: top; + background-repeat: no-repeat; +} +.swagger-ui .bg-right { + background-position: 100%; + background-repeat: no-repeat; +} +.swagger-ui .bg-bottom { + background-position: bottom; + background-repeat: no-repeat; +} +.swagger-ui .bg-left { + background-position: 0; + background-repeat: no-repeat; +} +@media screen and (min-width: 30em) { + .swagger-ui .bg-center-ns { + background-position: 50%; + background-repeat: no-repeat; + } + .swagger-ui .bg-top-ns { + background-position: top; + background-repeat: no-repeat; + } + .swagger-ui .bg-right-ns { + background-position: 100%; + background-repeat: no-repeat; + } + .swagger-ui .bg-bottom-ns { + background-position: bottom; + background-repeat: no-repeat; + } + .swagger-ui .bg-left-ns { + background-position: 0; + background-repeat: no-repeat; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .bg-center-m { + background-position: 50%; + background-repeat: no-repeat; + } + .swagger-ui .bg-top-m { + background-position: top; + background-repeat: no-repeat; + } + .swagger-ui .bg-right-m { + background-position: 100%; + background-repeat: no-repeat; + } + .swagger-ui .bg-bottom-m { + background-position: bottom; + background-repeat: no-repeat; + } + .swagger-ui .bg-left-m { + background-position: 0; + background-repeat: no-repeat; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .bg-center-l { + background-position: 50%; + background-repeat: no-repeat; + } + .swagger-ui .bg-top-l { + background-position: top; + background-repeat: no-repeat; + } + .swagger-ui .bg-right-l { + background-position: 100%; + background-repeat: no-repeat; + } + .swagger-ui .bg-bottom-l { + background-position: bottom; + background-repeat: no-repeat; + } + .swagger-ui .bg-left-l { + background-position: 0; + background-repeat: no-repeat; + } +} +.swagger-ui .outline { + outline: 1px solid; +} +.swagger-ui .outline-transparent { + outline: 1px solid transparent; +} +.swagger-ui .outline-0 { + outline: 0; +} +@media screen and (min-width: 30em) { + .swagger-ui .outline-ns { + outline: 1px solid; + } + .swagger-ui .outline-transparent-ns { + outline: 1px solid transparent; + } + .swagger-ui .outline-0-ns { + outline: 0; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .outline-m { + outline: 1px solid; + } + .swagger-ui .outline-transparent-m { + outline: 1px solid transparent; + } + .swagger-ui .outline-0-m { + outline: 0; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .outline-l { + outline: 1px solid; + } + .swagger-ui .outline-transparent-l { + outline: 1px solid transparent; + } + .swagger-ui .outline-0-l { + outline: 0; + } +} +.swagger-ui .ba { + border-style: solid; + border-width: 1px; +} +.swagger-ui .bt { + border-top-style: solid; + border-top-width: 1px; +} +.swagger-ui .br { + border-right-style: solid; + border-right-width: 1px; +} +.swagger-ui .bb { + border-bottom-style: solid; + border-bottom-width: 1px; +} +.swagger-ui .bl { + border-left-style: solid; + border-left-width: 1px; +} +.swagger-ui .bn { + border-style: none; + border-width: 0; +} +@media screen and (min-width: 30em) { + .swagger-ui .ba-ns { + border-style: solid; + border-width: 1px; + } + .swagger-ui .bt-ns { + border-top-style: solid; + border-top-width: 1px; + } + .swagger-ui .br-ns { + border-right-style: solid; + border-right-width: 1px; + } + .swagger-ui .bb-ns { + border-bottom-style: solid; + border-bottom-width: 1px; + } + .swagger-ui .bl-ns { + border-left-style: solid; + border-left-width: 1px; + } + .swagger-ui .bn-ns { + border-style: none; + border-width: 0; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .ba-m { + border-style: solid; + border-width: 1px; + } + .swagger-ui .bt-m { + border-top-style: solid; + border-top-width: 1px; + } + .swagger-ui .br-m { + border-right-style: solid; + border-right-width: 1px; + } + .swagger-ui .bb-m { + border-bottom-style: solid; + border-bottom-width: 1px; + } + .swagger-ui .bl-m { + border-left-style: solid; + border-left-width: 1px; + } + .swagger-ui .bn-m { + border-style: none; + border-width: 0; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .ba-l { + border-style: solid; + border-width: 1px; + } + .swagger-ui .bt-l { + border-top-style: solid; + border-top-width: 1px; + } + .swagger-ui .br-l { + border-right-style: solid; + border-right-width: 1px; + } + .swagger-ui .bb-l { + border-bottom-style: solid; + border-bottom-width: 1px; + } + .swagger-ui .bl-l { + border-left-style: solid; + border-left-width: 1px; + } + .swagger-ui .bn-l { + border-style: none; + border-width: 0; + } +} +.swagger-ui .b--black { + border-color: #000; +} +.swagger-ui .b--near-black { + border-color: #111; +} +.swagger-ui .b--dark-gray { + border-color: #333; +} +.swagger-ui .b--mid-gray { + border-color: #555; +} +.swagger-ui .b--gray { + border-color: #777; +} +.swagger-ui .b--silver { + border-color: #999; +} +.swagger-ui .b--light-silver { + border-color: #aaa; +} +.swagger-ui .b--moon-gray { + border-color: #ccc; +} +.swagger-ui .b--light-gray { + border-color: #eee; +} +.swagger-ui .b--near-white { + border-color: #f4f4f4; +} +.swagger-ui .b--white { + border-color: #fff; +} +.swagger-ui .b--white-90 { + border-color: hsla(0, 0%, 100%, 0.9); +} +.swagger-ui .b--white-80 { + border-color: hsla(0, 0%, 100%, 0.8); +} +.swagger-ui .b--white-70 { + border-color: hsla(0, 0%, 100%, 0.7); +} +.swagger-ui .b--white-60 { + border-color: hsla(0, 0%, 100%, 0.6); +} +.swagger-ui .b--white-50 { + border-color: hsla(0, 0%, 100%, 0.5); +} +.swagger-ui .b--white-40 { + border-color: hsla(0, 0%, 100%, 0.4); +} +.swagger-ui .b--white-30 { + border-color: hsla(0, 0%, 100%, 0.3); +} +.swagger-ui .b--white-20 { + border-color: hsla(0, 0%, 100%, 0.2); +} +.swagger-ui .b--white-10 { + border-color: hsla(0, 0%, 100%, 0.1); +} +.swagger-ui .b--white-05 { + border-color: hsla(0, 0%, 100%, 0.05); +} +.swagger-ui .b--white-025 { + border-color: hsla(0, 0%, 100%, 0.025); +} +.swagger-ui .b--white-0125 { + border-color: hsla(0, 0%, 100%, 0.013); +} +.swagger-ui .b--black-90 { + border-color: rgba(0, 0, 0, 0.9); +} +.swagger-ui .b--black-80 { + border-color: rgba(0, 0, 0, 0.8); +} +.swagger-ui .b--black-70 { + border-color: rgba(0, 0, 0, 0.7); +} +.swagger-ui .b--black-60 { + border-color: rgba(0, 0, 0, 0.6); +} +.swagger-ui .b--black-50 { + border-color: rgba(0, 0, 0, 0.5); +} +.swagger-ui .b--black-40 { + border-color: rgba(0, 0, 0, 0.4); +} +.swagger-ui .b--black-30 { + border-color: rgba(0, 0, 0, 0.3); +} +.swagger-ui .b--black-20 { + border-color: rgba(0, 0, 0, 0.2); +} +.swagger-ui .b--black-10 { + border-color: rgba(0, 0, 0, 0.1); +} +.swagger-ui .b--black-05 { + border-color: rgba(0, 0, 0, 0.05); +} +.swagger-ui .b--black-025 { + border-color: rgba(0, 0, 0, 0.025); +} +.swagger-ui .b--black-0125 { + border-color: rgba(0, 0, 0, 0.013); +} +.swagger-ui .b--dark-red { + border-color: #e7040f; +} +.swagger-ui .b--red { + border-color: #ff4136; +} +.swagger-ui .b--light-red { + border-color: #ff725c; +} +.swagger-ui .b--orange { + border-color: #ff6300; +} +.swagger-ui .b--gold { + border-color: #ffb700; +} +.swagger-ui .b--yellow { + border-color: gold; +} +.swagger-ui .b--light-yellow { + border-color: #fbf1a9; +} +.swagger-ui .b--purple { + border-color: #5e2ca5; +} +.swagger-ui .b--light-purple { + border-color: #a463f2; +} +.swagger-ui .b--dark-pink { + border-color: #d5008f; +} +.swagger-ui .b--hot-pink { + border-color: #ff41b4; +} +.swagger-ui .b--pink { + border-color: #ff80cc; +} +.swagger-ui .b--light-pink { + border-color: #ffa3d7; +} +.swagger-ui .b--dark-green { + border-color: #137752; +} +.swagger-ui .b--green { + border-color: #19a974; +} +.swagger-ui .b--light-green { + border-color: #9eebcf; +} +.swagger-ui .b--navy { + border-color: #001b44; +} +.swagger-ui .b--dark-blue { + border-color: #00449e; +} +.swagger-ui .b--blue { + border-color: #357edd; +} +.swagger-ui .b--light-blue { + border-color: #96ccff; +} +.swagger-ui .b--lightest-blue { + border-color: #cdecff; +} +.swagger-ui .b--washed-blue { + border-color: #f6fffe; +} +.swagger-ui .b--washed-green { + border-color: #e8fdf5; +} +.swagger-ui .b--washed-yellow { + border-color: #fffceb; +} +.swagger-ui .b--washed-red { + border-color: #ffdfdf; +} +.swagger-ui .b--transparent { + border-color: transparent; +} +.swagger-ui .b--inherit { + border-color: inherit; +} +.swagger-ui .br0 { + border-radius: 0; +} +.swagger-ui .br1 { + border-radius: 0.125rem; +} +.swagger-ui .br2 { + border-radius: 0.25rem; +} +.swagger-ui .br3 { + border-radius: 0.5rem; +} +.swagger-ui .br4 { + border-radius: 1rem; +} +.swagger-ui .br-100 { + border-radius: 100%; +} +.swagger-ui .br-pill { + border-radius: 9999px; +} +.swagger-ui .br--bottom { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.swagger-ui .br--top { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.swagger-ui .br--right { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.swagger-ui .br--left { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +@media screen and (min-width: 30em) { + .swagger-ui .br0-ns { + border-radius: 0; + } + .swagger-ui .br1-ns { + border-radius: 0.125rem; + } + .swagger-ui .br2-ns { + border-radius: 0.25rem; + } + .swagger-ui .br3-ns { + border-radius: 0.5rem; + } + .swagger-ui .br4-ns { + border-radius: 1rem; + } + .swagger-ui .br-100-ns { + border-radius: 100%; + } + .swagger-ui .br-pill-ns { + border-radius: 9999px; + } + .swagger-ui .br--bottom-ns { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .swagger-ui .br--top-ns { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + .swagger-ui .br--right-ns { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + .swagger-ui .br--left-ns { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .br0-m { + border-radius: 0; + } + .swagger-ui .br1-m { + border-radius: 0.125rem; + } + .swagger-ui .br2-m { + border-radius: 0.25rem; + } + .swagger-ui .br3-m { + border-radius: 0.5rem; + } + .swagger-ui .br4-m { + border-radius: 1rem; + } + .swagger-ui .br-100-m { + border-radius: 100%; + } + .swagger-ui .br-pill-m { + border-radius: 9999px; + } + .swagger-ui .br--bottom-m { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .swagger-ui .br--top-m { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + .swagger-ui .br--right-m { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + .swagger-ui .br--left-m { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .br0-l { + border-radius: 0; + } + .swagger-ui .br1-l { + border-radius: 0.125rem; + } + .swagger-ui .br2-l { + border-radius: 0.25rem; + } + .swagger-ui .br3-l { + border-radius: 0.5rem; + } + .swagger-ui .br4-l { + border-radius: 1rem; + } + .swagger-ui .br-100-l { + border-radius: 100%; + } + .swagger-ui .br-pill-l { + border-radius: 9999px; + } + .swagger-ui .br--bottom-l { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .swagger-ui .br--top-l { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + .swagger-ui .br--right-l { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + .swagger-ui .br--left-l { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } +} +.swagger-ui .b--dotted { + border-style: dotted; +} +.swagger-ui .b--dashed { + border-style: dashed; +} +.swagger-ui .b--solid { + border-style: solid; +} +.swagger-ui .b--none { + border-style: none; +} +@media screen and (min-width: 30em) { + .swagger-ui .b--dotted-ns { + border-style: dotted; + } + .swagger-ui .b--dashed-ns { + border-style: dashed; + } + .swagger-ui .b--solid-ns { + border-style: solid; + } + .swagger-ui .b--none-ns { + border-style: none; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .b--dotted-m { + border-style: dotted; + } + .swagger-ui .b--dashed-m { + border-style: dashed; + } + .swagger-ui .b--solid-m { + border-style: solid; + } + .swagger-ui .b--none-m { + border-style: none; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .b--dotted-l { + border-style: dotted; + } + .swagger-ui .b--dashed-l { + border-style: dashed; + } + .swagger-ui .b--solid-l { + border-style: solid; + } + .swagger-ui .b--none-l { + border-style: none; + } +} +.swagger-ui .bw0 { + border-width: 0; +} +.swagger-ui .bw1 { + border-width: 0.125rem; +} +.swagger-ui .bw2 { + border-width: 0.25rem; +} +.swagger-ui .bw3 { + border-width: 0.5rem; +} +.swagger-ui .bw4 { + border-width: 1rem; +} +.swagger-ui .bw5 { + border-width: 2rem; +} +.swagger-ui .bt-0 { + border-top-width: 0; +} +.swagger-ui .br-0 { + border-right-width: 0; +} +.swagger-ui .bb-0 { + border-bottom-width: 0; +} +.swagger-ui .bl-0 { + border-left-width: 0; +} +@media screen and (min-width: 30em) { + .swagger-ui .bw0-ns { + border-width: 0; + } + .swagger-ui .bw1-ns { + border-width: 0.125rem; + } + .swagger-ui .bw2-ns { + border-width: 0.25rem; + } + .swagger-ui .bw3-ns { + border-width: 0.5rem; + } + .swagger-ui .bw4-ns { + border-width: 1rem; + } + .swagger-ui .bw5-ns { + border-width: 2rem; + } + .swagger-ui .bt-0-ns { + border-top-width: 0; + } + .swagger-ui .br-0-ns { + border-right-width: 0; + } + .swagger-ui .bb-0-ns { + border-bottom-width: 0; + } + .swagger-ui .bl-0-ns { + border-left-width: 0; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .bw0-m { + border-width: 0; + } + .swagger-ui .bw1-m { + border-width: 0.125rem; + } + .swagger-ui .bw2-m { + border-width: 0.25rem; + } + .swagger-ui .bw3-m { + border-width: 0.5rem; + } + .swagger-ui .bw4-m { + border-width: 1rem; + } + .swagger-ui .bw5-m { + border-width: 2rem; + } + .swagger-ui .bt-0-m { + border-top-width: 0; + } + .swagger-ui .br-0-m { + border-right-width: 0; + } + .swagger-ui .bb-0-m { + border-bottom-width: 0; + } + .swagger-ui .bl-0-m { + border-left-width: 0; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .bw0-l { + border-width: 0; + } + .swagger-ui .bw1-l { + border-width: 0.125rem; + } + .swagger-ui .bw2-l { + border-width: 0.25rem; + } + .swagger-ui .bw3-l { + border-width: 0.5rem; + } + .swagger-ui .bw4-l { + border-width: 1rem; + } + .swagger-ui .bw5-l { + border-width: 2rem; + } + .swagger-ui .bt-0-l { + border-top-width: 0; + } + .swagger-ui .br-0-l { + border-right-width: 0; + } + .swagger-ui .bb-0-l { + border-bottom-width: 0; + } + .swagger-ui .bl-0-l { + border-left-width: 0; + } +} +.swagger-ui .shadow-1 { + box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2); +} +.swagger-ui .shadow-2 { + box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.2); +} +.swagger-ui .shadow-3 { + box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, 0.2); +} +.swagger-ui .shadow-4 { + box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.2); +} +.swagger-ui .shadow-5 { + box-shadow: 4px 4px 8px 0 rgba(0, 0, 0, 0.2); +} +@media screen and (min-width: 30em) { + .swagger-ui .shadow-1-ns { + box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-2-ns { + box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-3-ns { + box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-4-ns { + box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-5-ns { + box-shadow: 4px 4px 8px 0 rgba(0, 0, 0, 0.2); + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .shadow-1-m { + box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-2-m { + box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-3-m { + box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-4-m { + box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-5-m { + box-shadow: 4px 4px 8px 0 rgba(0, 0, 0, 0.2); + } +} +@media screen and (min-width: 60em) { + .swagger-ui .shadow-1-l { + box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-2-l { + box-shadow: 0 0 8px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-3-l { + box-shadow: 2px 2px 4px 2px rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-4-l { + box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.2); + } + .swagger-ui .shadow-5-l { + box-shadow: 4px 4px 8px 0 rgba(0, 0, 0, 0.2); + } +} +.swagger-ui .pre { + overflow-x: auto; + overflow-y: hidden; + overflow: scroll; +} +.swagger-ui .top-0 { + top: 0; +} +.swagger-ui .right-0 { + right: 0; +} +.swagger-ui .bottom-0 { + bottom: 0; +} +.swagger-ui .left-0 { + left: 0; +} +.swagger-ui .top-1 { + top: 1rem; +} +.swagger-ui .right-1 { + right: 1rem; +} +.swagger-ui .bottom-1 { + bottom: 1rem; +} +.swagger-ui .left-1 { + left: 1rem; +} +.swagger-ui .top-2 { + top: 2rem; +} +.swagger-ui .right-2 { + right: 2rem; +} +.swagger-ui .bottom-2 { + bottom: 2rem; +} +.swagger-ui .left-2 { + left: 2rem; +} +.swagger-ui .top--1 { + top: -1rem; +} +.swagger-ui .right--1 { + right: -1rem; +} +.swagger-ui .bottom--1 { + bottom: -1rem; +} +.swagger-ui .left--1 { + left: -1rem; +} +.swagger-ui .top--2 { + top: -2rem; +} +.swagger-ui .right--2 { + right: -2rem; +} +.swagger-ui .bottom--2 { + bottom: -2rem; +} +.swagger-ui .left--2 { + left: -2rem; +} +.swagger-ui .absolute--fill { + bottom: 0; + left: 0; + right: 0; + top: 0; +} +@media screen and (min-width: 30em) { + .swagger-ui .top-0-ns { + top: 0; + } + .swagger-ui .left-0-ns { + left: 0; + } + .swagger-ui .right-0-ns { + right: 0; + } + .swagger-ui .bottom-0-ns { + bottom: 0; + } + .swagger-ui .top-1-ns { + top: 1rem; + } + .swagger-ui .left-1-ns { + left: 1rem; + } + .swagger-ui .right-1-ns { + right: 1rem; + } + .swagger-ui .bottom-1-ns { + bottom: 1rem; + } + .swagger-ui .top-2-ns { + top: 2rem; + } + .swagger-ui .left-2-ns { + left: 2rem; + } + .swagger-ui .right-2-ns { + right: 2rem; + } + .swagger-ui .bottom-2-ns { + bottom: 2rem; + } + .swagger-ui .top--1-ns { + top: -1rem; + } + .swagger-ui .right--1-ns { + right: -1rem; + } + .swagger-ui .bottom--1-ns { + bottom: -1rem; + } + .swagger-ui .left--1-ns { + left: -1rem; + } + .swagger-ui .top--2-ns { + top: -2rem; + } + .swagger-ui .right--2-ns { + right: -2rem; + } + .swagger-ui .bottom--2-ns { + bottom: -2rem; + } + .swagger-ui .left--2-ns { + left: -2rem; + } + .swagger-ui .absolute--fill-ns { + bottom: 0; + left: 0; + right: 0; + top: 0; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .top-0-m { + top: 0; + } + .swagger-ui .left-0-m { + left: 0; + } + .swagger-ui .right-0-m { + right: 0; + } + .swagger-ui .bottom-0-m { + bottom: 0; + } + .swagger-ui .top-1-m { + top: 1rem; + } + .swagger-ui .left-1-m { + left: 1rem; + } + .swagger-ui .right-1-m { + right: 1rem; + } + .swagger-ui .bottom-1-m { + bottom: 1rem; + } + .swagger-ui .top-2-m { + top: 2rem; + } + .swagger-ui .left-2-m { + left: 2rem; + } + .swagger-ui .right-2-m { + right: 2rem; + } + .swagger-ui .bottom-2-m { + bottom: 2rem; + } + .swagger-ui .top--1-m { + top: -1rem; + } + .swagger-ui .right--1-m { + right: -1rem; + } + .swagger-ui .bottom--1-m { + bottom: -1rem; + } + .swagger-ui .left--1-m { + left: -1rem; + } + .swagger-ui .top--2-m { + top: -2rem; + } + .swagger-ui .right--2-m { + right: -2rem; + } + .swagger-ui .bottom--2-m { + bottom: -2rem; + } + .swagger-ui .left--2-m { + left: -2rem; + } + .swagger-ui .absolute--fill-m { + bottom: 0; + left: 0; + right: 0; + top: 0; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .top-0-l { + top: 0; + } + .swagger-ui .left-0-l { + left: 0; + } + .swagger-ui .right-0-l { + right: 0; + } + .swagger-ui .bottom-0-l { + bottom: 0; + } + .swagger-ui .top-1-l { + top: 1rem; + } + .swagger-ui .left-1-l { + left: 1rem; + } + .swagger-ui .right-1-l { + right: 1rem; + } + .swagger-ui .bottom-1-l { + bottom: 1rem; + } + .swagger-ui .top-2-l { + top: 2rem; + } + .swagger-ui .left-2-l { + left: 2rem; + } + .swagger-ui .right-2-l { + right: 2rem; + } + .swagger-ui .bottom-2-l { + bottom: 2rem; + } + .swagger-ui .top--1-l { + top: -1rem; + } + .swagger-ui .right--1-l { + right: -1rem; + } + .swagger-ui .bottom--1-l { + bottom: -1rem; + } + .swagger-ui .left--1-l { + left: -1rem; + } + .swagger-ui .top--2-l { + top: -2rem; + } + .swagger-ui .right--2-l { + right: -2rem; + } + .swagger-ui .bottom--2-l { + bottom: -2rem; + } + .swagger-ui .left--2-l { + left: -2rem; + } + .swagger-ui .absolute--fill-l { + bottom: 0; + left: 0; + right: 0; + top: 0; + } +} +.swagger-ui .cf:after, +.swagger-ui .cf:before { + content: " "; + display: table; +} +.swagger-ui .cf:after { + clear: both; +} +.swagger-ui .cf { + zoom: 1; +} +.swagger-ui .cl { + clear: left; +} +.swagger-ui .cr { + clear: right; +} +.swagger-ui .cb { + clear: both; +} +.swagger-ui .cn { + clear: none; +} +@media screen and (min-width: 30em) { + .swagger-ui .cl-ns { + clear: left; + } + .swagger-ui .cr-ns { + clear: right; + } + .swagger-ui .cb-ns { + clear: both; + } + .swagger-ui .cn-ns { + clear: none; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .cl-m { + clear: left; + } + .swagger-ui .cr-m { + clear: right; + } + .swagger-ui .cb-m { + clear: both; + } + .swagger-ui .cn-m { + clear: none; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .cl-l { + clear: left; + } + .swagger-ui .cr-l { + clear: right; + } + .swagger-ui .cb-l { + clear: both; + } + .swagger-ui .cn-l { + clear: none; + } +} +.swagger-ui .flex { + display: flex; +} +.swagger-ui .inline-flex { + display: inline-flex; +} +.swagger-ui .flex-auto { + flex: 1 1 auto; + min-height: 0; + min-width: 0; +} +.swagger-ui .flex-none { + flex: none; +} +.swagger-ui .flex-column { + flex-direction: column; +} +.swagger-ui .flex-row { + flex-direction: row; +} +.swagger-ui .flex-wrap { + flex-wrap: wrap; +} +.swagger-ui .flex-nowrap { + flex-wrap: nowrap; +} +.swagger-ui .flex-wrap-reverse { + flex-wrap: wrap-reverse; +} +.swagger-ui .flex-column-reverse { + flex-direction: column-reverse; +} +.swagger-ui .flex-row-reverse { + flex-direction: row-reverse; +} +.swagger-ui .items-start { + align-items: flex-start; +} +.swagger-ui .items-end { + align-items: flex-end; +} +.swagger-ui .items-center { + align-items: center; +} +.swagger-ui .items-baseline { + align-items: baseline; +} +.swagger-ui .items-stretch { + align-items: stretch; +} +.swagger-ui .self-start { + align-self: flex-start; +} +.swagger-ui .self-end { + align-self: flex-end; +} +.swagger-ui .self-center { + align-self: center; +} +.swagger-ui .self-baseline { + align-self: baseline; +} +.swagger-ui .self-stretch { + align-self: stretch; +} +.swagger-ui .justify-start { + justify-content: flex-start; +} +.swagger-ui .justify-end { + justify-content: flex-end; +} +.swagger-ui .justify-center { + justify-content: center; +} +.swagger-ui .justify-between { + justify-content: space-between; +} +.swagger-ui .justify-around { + justify-content: space-around; +} +.swagger-ui .content-start { + align-content: flex-start; +} +.swagger-ui .content-end { + align-content: flex-end; +} +.swagger-ui .content-center { + align-content: center; +} +.swagger-ui .content-between { + align-content: space-between; +} +.swagger-ui .content-around { + align-content: space-around; +} +.swagger-ui .content-stretch { + align-content: stretch; +} +.swagger-ui .order-0 { + order: 0; +} +.swagger-ui .order-1 { + order: 1; +} +.swagger-ui .order-2 { + order: 2; +} +.swagger-ui .order-3 { + order: 3; +} +.swagger-ui .order-4 { + order: 4; +} +.swagger-ui .order-5 { + order: 5; +} +.swagger-ui .order-6 { + order: 6; +} +.swagger-ui .order-7 { + order: 7; +} +.swagger-ui .order-8 { + order: 8; +} +.swagger-ui .order-last { + order: 99999; +} +.swagger-ui .flex-grow-0 { + flex-grow: 0; +} +.swagger-ui .flex-grow-1 { + flex-grow: 1; +} +.swagger-ui .flex-shrink-0 { + flex-shrink: 0; +} +.swagger-ui .flex-shrink-1 { + flex-shrink: 1; +} +@media screen and (min-width: 30em) { + .swagger-ui .flex-ns { + display: flex; + } + .swagger-ui .inline-flex-ns { + display: inline-flex; + } + .swagger-ui .flex-auto-ns { + flex: 1 1 auto; + min-height: 0; + min-width: 0; + } + .swagger-ui .flex-none-ns { + flex: none; + } + .swagger-ui .flex-column-ns { + flex-direction: column; + } + .swagger-ui .flex-row-ns { + flex-direction: row; + } + .swagger-ui .flex-wrap-ns { + flex-wrap: wrap; + } + .swagger-ui .flex-nowrap-ns { + flex-wrap: nowrap; + } + .swagger-ui .flex-wrap-reverse-ns { + flex-wrap: wrap-reverse; + } + .swagger-ui .flex-column-reverse-ns { + flex-direction: column-reverse; + } + .swagger-ui .flex-row-reverse-ns { + flex-direction: row-reverse; + } + .swagger-ui .items-start-ns { + align-items: flex-start; + } + .swagger-ui .items-end-ns { + align-items: flex-end; + } + .swagger-ui .items-center-ns { + align-items: center; + } + .swagger-ui .items-baseline-ns { + align-items: baseline; + } + .swagger-ui .items-stretch-ns { + align-items: stretch; + } + .swagger-ui .self-start-ns { + align-self: flex-start; + } + .swagger-ui .self-end-ns { + align-self: flex-end; + } + .swagger-ui .self-center-ns { + align-self: center; + } + .swagger-ui .self-baseline-ns { + align-self: baseline; + } + .swagger-ui .self-stretch-ns { + align-self: stretch; + } + .swagger-ui .justify-start-ns { + justify-content: flex-start; + } + .swagger-ui .justify-end-ns { + justify-content: flex-end; + } + .swagger-ui .justify-center-ns { + justify-content: center; + } + .swagger-ui .justify-between-ns { + justify-content: space-between; + } + .swagger-ui .justify-around-ns { + justify-content: space-around; + } + .swagger-ui .content-start-ns { + align-content: flex-start; + } + .swagger-ui .content-end-ns { + align-content: flex-end; + } + .swagger-ui .content-center-ns { + align-content: center; + } + .swagger-ui .content-between-ns { + align-content: space-between; + } + .swagger-ui .content-around-ns { + align-content: space-around; + } + .swagger-ui .content-stretch-ns { + align-content: stretch; + } + .swagger-ui .order-0-ns { + order: 0; + } + .swagger-ui .order-1-ns { + order: 1; + } + .swagger-ui .order-2-ns { + order: 2; + } + .swagger-ui .order-3-ns { + order: 3; + } + .swagger-ui .order-4-ns { + order: 4; + } + .swagger-ui .order-5-ns { + order: 5; + } + .swagger-ui .order-6-ns { + order: 6; + } + .swagger-ui .order-7-ns { + order: 7; + } + .swagger-ui .order-8-ns { + order: 8; + } + .swagger-ui .order-last-ns { + order: 99999; + } + .swagger-ui .flex-grow-0-ns { + flex-grow: 0; + } + .swagger-ui .flex-grow-1-ns { + flex-grow: 1; + } + .swagger-ui .flex-shrink-0-ns { + flex-shrink: 0; + } + .swagger-ui .flex-shrink-1-ns { + flex-shrink: 1; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .flex-m { + display: flex; + } + .swagger-ui .inline-flex-m { + display: inline-flex; + } + .swagger-ui .flex-auto-m { + flex: 1 1 auto; + min-height: 0; + min-width: 0; + } + .swagger-ui .flex-none-m { + flex: none; + } + .swagger-ui .flex-column-m { + flex-direction: column; + } + .swagger-ui .flex-row-m { + flex-direction: row; + } + .swagger-ui .flex-wrap-m { + flex-wrap: wrap; + } + .swagger-ui .flex-nowrap-m { + flex-wrap: nowrap; + } + .swagger-ui .flex-wrap-reverse-m { + flex-wrap: wrap-reverse; + } + .swagger-ui .flex-column-reverse-m { + flex-direction: column-reverse; + } + .swagger-ui .flex-row-reverse-m { + flex-direction: row-reverse; + } + .swagger-ui .items-start-m { + align-items: flex-start; + } + .swagger-ui .items-end-m { + align-items: flex-end; + } + .swagger-ui .items-center-m { + align-items: center; + } + .swagger-ui .items-baseline-m { + align-items: baseline; + } + .swagger-ui .items-stretch-m { + align-items: stretch; + } + .swagger-ui .self-start-m { + align-self: flex-start; + } + .swagger-ui .self-end-m { + align-self: flex-end; + } + .swagger-ui .self-center-m { + align-self: center; + } + .swagger-ui .self-baseline-m { + align-self: baseline; + } + .swagger-ui .self-stretch-m { + align-self: stretch; + } + .swagger-ui .justify-start-m { + justify-content: flex-start; + } + .swagger-ui .justify-end-m { + justify-content: flex-end; + } + .swagger-ui .justify-center-m { + justify-content: center; + } + .swagger-ui .justify-between-m { + justify-content: space-between; + } + .swagger-ui .justify-around-m { + justify-content: space-around; + } + .swagger-ui .content-start-m { + align-content: flex-start; + } + .swagger-ui .content-end-m { + align-content: flex-end; + } + .swagger-ui .content-center-m { + align-content: center; + } + .swagger-ui .content-between-m { + align-content: space-between; + } + .swagger-ui .content-around-m { + align-content: space-around; + } + .swagger-ui .content-stretch-m { + align-content: stretch; + } + .swagger-ui .order-0-m { + order: 0; + } + .swagger-ui .order-1-m { + order: 1; + } + .swagger-ui .order-2-m { + order: 2; + } + .swagger-ui .order-3-m { + order: 3; + } + .swagger-ui .order-4-m { + order: 4; + } + .swagger-ui .order-5-m { + order: 5; + } + .swagger-ui .order-6-m { + order: 6; + } + .swagger-ui .order-7-m { + order: 7; + } + .swagger-ui .order-8-m { + order: 8; + } + .swagger-ui .order-last-m { + order: 99999; + } + .swagger-ui .flex-grow-0-m { + flex-grow: 0; + } + .swagger-ui .flex-grow-1-m { + flex-grow: 1; + } + .swagger-ui .flex-shrink-0-m { + flex-shrink: 0; + } + .swagger-ui .flex-shrink-1-m { + flex-shrink: 1; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .flex-l { + display: flex; + } + .swagger-ui .inline-flex-l { + display: inline-flex; + } + .swagger-ui .flex-auto-l { + flex: 1 1 auto; + min-height: 0; + min-width: 0; + } + .swagger-ui .flex-none-l { + flex: none; + } + .swagger-ui .flex-column-l { + flex-direction: column; + } + .swagger-ui .flex-row-l { + flex-direction: row; + } + .swagger-ui .flex-wrap-l { + flex-wrap: wrap; + } + .swagger-ui .flex-nowrap-l { + flex-wrap: nowrap; + } + .swagger-ui .flex-wrap-reverse-l { + flex-wrap: wrap-reverse; + } + .swagger-ui .flex-column-reverse-l { + flex-direction: column-reverse; + } + .swagger-ui .flex-row-reverse-l { + flex-direction: row-reverse; + } + .swagger-ui .items-start-l { + align-items: flex-start; + } + .swagger-ui .items-end-l { + align-items: flex-end; + } + .swagger-ui .items-center-l { + align-items: center; + } + .swagger-ui .items-baseline-l { + align-items: baseline; + } + .swagger-ui .items-stretch-l { + align-items: stretch; + } + .swagger-ui .self-start-l { + align-self: flex-start; + } + .swagger-ui .self-end-l { + align-self: flex-end; + } + .swagger-ui .self-center-l { + align-self: center; + } + .swagger-ui .self-baseline-l { + align-self: baseline; + } + .swagger-ui .self-stretch-l { + align-self: stretch; + } + .swagger-ui .justify-start-l { + justify-content: flex-start; + } + .swagger-ui .justify-end-l { + justify-content: flex-end; + } + .swagger-ui .justify-center-l { + justify-content: center; + } + .swagger-ui .justify-between-l { + justify-content: space-between; + } + .swagger-ui .justify-around-l { + justify-content: space-around; + } + .swagger-ui .content-start-l { + align-content: flex-start; + } + .swagger-ui .content-end-l { + align-content: flex-end; + } + .swagger-ui .content-center-l { + align-content: center; + } + .swagger-ui .content-between-l { + align-content: space-between; + } + .swagger-ui .content-around-l { + align-content: space-around; + } + .swagger-ui .content-stretch-l { + align-content: stretch; + } + .swagger-ui .order-0-l { + order: 0; + } + .swagger-ui .order-1-l { + order: 1; + } + .swagger-ui .order-2-l { + order: 2; + } + .swagger-ui .order-3-l { + order: 3; + } + .swagger-ui .order-4-l { + order: 4; + } + .swagger-ui .order-5-l { + order: 5; + } + .swagger-ui .order-6-l { + order: 6; + } + .swagger-ui .order-7-l { + order: 7; + } + .swagger-ui .order-8-l { + order: 8; + } + .swagger-ui .order-last-l { + order: 99999; + } + .swagger-ui .flex-grow-0-l { + flex-grow: 0; + } + .swagger-ui .flex-grow-1-l { + flex-grow: 1; + } + .swagger-ui .flex-shrink-0-l { + flex-shrink: 0; + } + .swagger-ui .flex-shrink-1-l { + flex-shrink: 1; + } +} +.swagger-ui .dn { + display: none; +} +.swagger-ui .di { + display: inline; +} +.swagger-ui .db { + display: block; +} +.swagger-ui .dib { + display: inline-block; +} +.swagger-ui .dit { + display: inline-table; +} +.swagger-ui .dt { + display: table; +} +.swagger-ui .dtc { + display: table-cell; +} +.swagger-ui .dt-row { + display: table-row; +} +.swagger-ui .dt-row-group { + display: table-row-group; +} +.swagger-ui .dt-column { + display: table-column; +} +.swagger-ui .dt-column-group { + display: table-column-group; +} +.swagger-ui .dt--fixed { + table-layout: fixed; + width: 100%; +} +@media screen and (min-width: 30em) { + .swagger-ui .dn-ns { + display: none; + } + .swagger-ui .di-ns { + display: inline; + } + .swagger-ui .db-ns { + display: block; + } + .swagger-ui .dib-ns { + display: inline-block; + } + .swagger-ui .dit-ns { + display: inline-table; + } + .swagger-ui .dt-ns { + display: table; + } + .swagger-ui .dtc-ns { + display: table-cell; + } + .swagger-ui .dt-row-ns { + display: table-row; + } + .swagger-ui .dt-row-group-ns { + display: table-row-group; + } + .swagger-ui .dt-column-ns { + display: table-column; + } + .swagger-ui .dt-column-group-ns { + display: table-column-group; + } + .swagger-ui .dt--fixed-ns { + table-layout: fixed; + width: 100%; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .dn-m { + display: none; + } + .swagger-ui .di-m { + display: inline; + } + .swagger-ui .db-m { + display: block; + } + .swagger-ui .dib-m { + display: inline-block; + } + .swagger-ui .dit-m { + display: inline-table; + } + .swagger-ui .dt-m { + display: table; + } + .swagger-ui .dtc-m { + display: table-cell; + } + .swagger-ui .dt-row-m { + display: table-row; + } + .swagger-ui .dt-row-group-m { + display: table-row-group; + } + .swagger-ui .dt-column-m { + display: table-column; + } + .swagger-ui .dt-column-group-m { + display: table-column-group; + } + .swagger-ui .dt--fixed-m { + table-layout: fixed; + width: 100%; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .dn-l { + display: none; + } + .swagger-ui .di-l { + display: inline; + } + .swagger-ui .db-l { + display: block; + } + .swagger-ui .dib-l { + display: inline-block; + } + .swagger-ui .dit-l { + display: inline-table; + } + .swagger-ui .dt-l { + display: table; + } + .swagger-ui .dtc-l { + display: table-cell; + } + .swagger-ui .dt-row-l { + display: table-row; + } + .swagger-ui .dt-row-group-l { + display: table-row-group; + } + .swagger-ui .dt-column-l { + display: table-column; + } + .swagger-ui .dt-column-group-l { + display: table-column-group; + } + .swagger-ui .dt--fixed-l { + table-layout: fixed; + width: 100%; + } +} +.swagger-ui .fl { + _display: inline; + float: left; +} +.swagger-ui .fr { + _display: inline; + float: right; +} +.swagger-ui .fn { + float: none; +} +@media screen and (min-width: 30em) { + .swagger-ui .fl-ns { + _display: inline; + float: left; + } + .swagger-ui .fr-ns { + _display: inline; + float: right; + } + .swagger-ui .fn-ns { + float: none; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .fl-m { + _display: inline; + float: left; + } + .swagger-ui .fr-m { + _display: inline; + float: right; + } + .swagger-ui .fn-m { + float: none; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .fl-l { + _display: inline; + float: left; + } + .swagger-ui .fr-l { + _display: inline; + float: right; + } + .swagger-ui .fn-l { + float: none; + } +} +.swagger-ui .sans-serif { + font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, helvetica, + helvetica neue, ubuntu, roboto, noto, segoe ui, arial, sans-serif; +} +.swagger-ui .serif { + font-family: georgia, serif; +} +.swagger-ui .system-sans-serif { + font-family: sans-serif; +} +.swagger-ui .system-serif { + font-family: serif; +} +.swagger-ui .code, +.swagger-ui code { + font-family: Consolas, monaco, monospace; +} +.swagger-ui .courier { + font-family: Courier Next, courier, monospace; +} +.swagger-ui .helvetica { + font-family: helvetica neue, helvetica, sans-serif; +} +.swagger-ui .avenir { + font-family: avenir next, avenir, sans-serif; +} +.swagger-ui .athelas { + font-family: athelas, georgia, serif; +} +.swagger-ui .georgia { + font-family: georgia, serif; +} +.swagger-ui .times { + font-family: times, serif; +} +.swagger-ui .bodoni { + font-family: Bodoni MT, serif; +} +.swagger-ui .calisto { + font-family: Calisto MT, serif; +} +.swagger-ui .garamond { + font-family: garamond, serif; +} +.swagger-ui .baskerville { + font-family: baskerville, serif; +} +.swagger-ui .i { + font-style: italic; +} +.swagger-ui .fs-normal { + font-style: normal; +} +@media screen and (min-width: 30em) { + .swagger-ui .i-ns { + font-style: italic; + } + .swagger-ui .fs-normal-ns { + font-style: normal; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .i-m { + font-style: italic; + } + .swagger-ui .fs-normal-m { + font-style: normal; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .i-l { + font-style: italic; + } + .swagger-ui .fs-normal-l { + font-style: normal; + } +} +.swagger-ui .normal { + font-weight: 400; +} +.swagger-ui .b { + font-weight: 700; +} +.swagger-ui .fw1 { + font-weight: 100; +} +.swagger-ui .fw2 { + font-weight: 200; +} +.swagger-ui .fw3 { + font-weight: 300; +} +.swagger-ui .fw4 { + font-weight: 400; +} +.swagger-ui .fw5 { + font-weight: 500; +} +.swagger-ui .fw6 { + font-weight: 600; +} +.swagger-ui .fw7 { + font-weight: 700; +} +.swagger-ui .fw8 { + font-weight: 800; +} +.swagger-ui .fw9 { + font-weight: 900; +} +@media screen and (min-width: 30em) { + .swagger-ui .normal-ns { + font-weight: 400; + } + .swagger-ui .b-ns { + font-weight: 700; + } + .swagger-ui .fw1-ns { + font-weight: 100; + } + .swagger-ui .fw2-ns { + font-weight: 200; + } + .swagger-ui .fw3-ns { + font-weight: 300; + } + .swagger-ui .fw4-ns { + font-weight: 400; + } + .swagger-ui .fw5-ns { + font-weight: 500; + } + .swagger-ui .fw6-ns { + font-weight: 600; + } + .swagger-ui .fw7-ns { + font-weight: 700; + } + .swagger-ui .fw8-ns { + font-weight: 800; + } + .swagger-ui .fw9-ns { + font-weight: 900; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .normal-m { + font-weight: 400; + } + .swagger-ui .b-m { + font-weight: 700; + } + .swagger-ui .fw1-m { + font-weight: 100; + } + .swagger-ui .fw2-m { + font-weight: 200; + } + .swagger-ui .fw3-m { + font-weight: 300; + } + .swagger-ui .fw4-m { + font-weight: 400; + } + .swagger-ui .fw5-m { + font-weight: 500; + } + .swagger-ui .fw6-m { + font-weight: 600; + } + .swagger-ui .fw7-m { + font-weight: 700; + } + .swagger-ui .fw8-m { + font-weight: 800; + } + .swagger-ui .fw9-m { + font-weight: 900; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .normal-l { + font-weight: 400; + } + .swagger-ui .b-l { + font-weight: 700; + } + .swagger-ui .fw1-l { + font-weight: 100; + } + .swagger-ui .fw2-l { + font-weight: 200; + } + .swagger-ui .fw3-l { + font-weight: 300; + } + .swagger-ui .fw4-l { + font-weight: 400; + } + .swagger-ui .fw5-l { + font-weight: 500; + } + .swagger-ui .fw6-l { + font-weight: 600; + } + .swagger-ui .fw7-l { + font-weight: 700; + } + .swagger-ui .fw8-l { + font-weight: 800; + } + .swagger-ui .fw9-l { + font-weight: 900; + } +} +.swagger-ui .input-reset { + -webkit-appearance: none; + -moz-appearance: none; +} +.swagger-ui .button-reset::-moz-focus-inner, +.swagger-ui .input-reset::-moz-focus-inner { + border: 0; + padding: 0; +} +.swagger-ui .h1 { + height: 1rem; +} +.swagger-ui .h2 { + height: 2rem; +} +.swagger-ui .h3 { + height: 4rem; +} +.swagger-ui .h4 { + height: 8rem; +} +.swagger-ui .h5 { + height: 16rem; +} +.swagger-ui .h-25 { + height: 25%; +} +.swagger-ui .h-50 { + height: 50%; +} +.swagger-ui .h-75 { + height: 75%; +} +.swagger-ui .h-100 { + height: 100%; +} +.swagger-ui .min-h-100 { + min-height: 100%; +} +.swagger-ui .vh-25 { + height: 25vh; +} +.swagger-ui .vh-50 { + height: 50vh; +} +.swagger-ui .vh-75 { + height: 75vh; +} +.swagger-ui .vh-100 { + height: 100vh; +} +.swagger-ui .min-vh-100 { + min-height: 100vh; +} +.swagger-ui .h-auto { + height: auto; +} +.swagger-ui .h-inherit { + height: inherit; +} +@media screen and (min-width: 30em) { + .swagger-ui .h1-ns { + height: 1rem; + } + .swagger-ui .h2-ns { + height: 2rem; + } + .swagger-ui .h3-ns { + height: 4rem; + } + .swagger-ui .h4-ns { + height: 8rem; + } + .swagger-ui .h5-ns { + height: 16rem; + } + .swagger-ui .h-25-ns { + height: 25%; + } + .swagger-ui .h-50-ns { + height: 50%; + } + .swagger-ui .h-75-ns { + height: 75%; + } + .swagger-ui .h-100-ns { + height: 100%; + } + .swagger-ui .min-h-100-ns { + min-height: 100%; + } + .swagger-ui .vh-25-ns { + height: 25vh; + } + .swagger-ui .vh-50-ns { + height: 50vh; + } + .swagger-ui .vh-75-ns { + height: 75vh; + } + .swagger-ui .vh-100-ns { + height: 100vh; + } + .swagger-ui .min-vh-100-ns { + min-height: 100vh; + } + .swagger-ui .h-auto-ns { + height: auto; + } + .swagger-ui .h-inherit-ns { + height: inherit; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .h1-m { + height: 1rem; + } + .swagger-ui .h2-m { + height: 2rem; + } + .swagger-ui .h3-m { + height: 4rem; + } + .swagger-ui .h4-m { + height: 8rem; + } + .swagger-ui .h5-m { + height: 16rem; + } + .swagger-ui .h-25-m { + height: 25%; + } + .swagger-ui .h-50-m { + height: 50%; + } + .swagger-ui .h-75-m { + height: 75%; + } + .swagger-ui .h-100-m { + height: 100%; + } + .swagger-ui .min-h-100-m { + min-height: 100%; + } + .swagger-ui .vh-25-m { + height: 25vh; + } + .swagger-ui .vh-50-m { + height: 50vh; + } + .swagger-ui .vh-75-m { + height: 75vh; + } + .swagger-ui .vh-100-m { + height: 100vh; + } + .swagger-ui .min-vh-100-m { + min-height: 100vh; + } + .swagger-ui .h-auto-m { + height: auto; + } + .swagger-ui .h-inherit-m { + height: inherit; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .h1-l { + height: 1rem; + } + .swagger-ui .h2-l { + height: 2rem; + } + .swagger-ui .h3-l { + height: 4rem; + } + .swagger-ui .h4-l { + height: 8rem; + } + .swagger-ui .h5-l { + height: 16rem; + } + .swagger-ui .h-25-l { + height: 25%; + } + .swagger-ui .h-50-l { + height: 50%; + } + .swagger-ui .h-75-l { + height: 75%; + } + .swagger-ui .h-100-l { + height: 100%; + } + .swagger-ui .min-h-100-l { + min-height: 100%; + } + .swagger-ui .vh-25-l { + height: 25vh; + } + .swagger-ui .vh-50-l { + height: 50vh; + } + .swagger-ui .vh-75-l { + height: 75vh; + } + .swagger-ui .vh-100-l { + height: 100vh; + } + .swagger-ui .min-vh-100-l { + min-height: 100vh; + } + .swagger-ui .h-auto-l { + height: auto; + } + .swagger-ui .h-inherit-l { + height: inherit; + } +} +.swagger-ui .tracked { + letter-spacing: 0.1em; +} +.swagger-ui .tracked-tight { + letter-spacing: -0.05em; +} +.swagger-ui .tracked-mega { + letter-spacing: 0.25em; +} +@media screen and (min-width: 30em) { + .swagger-ui .tracked-ns { + letter-spacing: 0.1em; + } + .swagger-ui .tracked-tight-ns { + letter-spacing: -0.05em; + } + .swagger-ui .tracked-mega-ns { + letter-spacing: 0.25em; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .tracked-m { + letter-spacing: 0.1em; + } + .swagger-ui .tracked-tight-m { + letter-spacing: -0.05em; + } + .swagger-ui .tracked-mega-m { + letter-spacing: 0.25em; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .tracked-l { + letter-spacing: 0.1em; + } + .swagger-ui .tracked-tight-l { + letter-spacing: -0.05em; + } + .swagger-ui .tracked-mega-l { + letter-spacing: 0.25em; + } +} +.swagger-ui .lh-solid { + line-height: 1; +} +.swagger-ui .lh-title { + line-height: 1.25; +} +.swagger-ui .lh-copy { + line-height: 1.5; +} +@media screen and (min-width: 30em) { + .swagger-ui .lh-solid-ns { + line-height: 1; + } + .swagger-ui .lh-title-ns { + line-height: 1.25; + } + .swagger-ui .lh-copy-ns { + line-height: 1.5; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .lh-solid-m { + line-height: 1; + } + .swagger-ui .lh-title-m { + line-height: 1.25; + } + .swagger-ui .lh-copy-m { + line-height: 1.5; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .lh-solid-l { + line-height: 1; + } + .swagger-ui .lh-title-l { + line-height: 1.25; + } + .swagger-ui .lh-copy-l { + line-height: 1.5; + } +} +.swagger-ui .link { + -webkit-text-decoration: none; + text-decoration: none; +} +.swagger-ui .link, +.swagger-ui .link:active, +.swagger-ui .link:focus, +.swagger-ui .link:hover, +.swagger-ui .link:link, +.swagger-ui .link:visited { + transition: color 0.15s ease-in; +} +.swagger-ui .link:focus { + outline: 1px dotted currentColor; +} +.swagger-ui .list { + list-style-type: none; +} +.swagger-ui .mw-100 { + max-width: 100%; +} +.swagger-ui .mw1 { + max-width: 1rem; +} +.swagger-ui .mw2 { + max-width: 2rem; +} +.swagger-ui .mw3 { + max-width: 4rem; +} +.swagger-ui .mw4 { + max-width: 8rem; +} +.swagger-ui .mw5 { + max-width: 16rem; +} +.swagger-ui .mw6 { + max-width: 32rem; +} +.swagger-ui .mw7 { + max-width: 48rem; +} +.swagger-ui .mw8 { + max-width: 64rem; +} +.swagger-ui .mw9 { + max-width: 96rem; +} +.swagger-ui .mw-none { + max-width: none; +} +@media screen and (min-width: 30em) { + .swagger-ui .mw-100-ns { + max-width: 100%; + } + .swagger-ui .mw1-ns { + max-width: 1rem; + } + .swagger-ui .mw2-ns { + max-width: 2rem; + } + .swagger-ui .mw3-ns { + max-width: 4rem; + } + .swagger-ui .mw4-ns { + max-width: 8rem; + } + .swagger-ui .mw5-ns { + max-width: 16rem; + } + .swagger-ui .mw6-ns { + max-width: 32rem; + } + .swagger-ui .mw7-ns { + max-width: 48rem; + } + .swagger-ui .mw8-ns { + max-width: 64rem; + } + .swagger-ui .mw9-ns { + max-width: 96rem; + } + .swagger-ui .mw-none-ns { + max-width: none; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .mw-100-m { + max-width: 100%; + } + .swagger-ui .mw1-m { + max-width: 1rem; + } + .swagger-ui .mw2-m { + max-width: 2rem; + } + .swagger-ui .mw3-m { + max-width: 4rem; + } + .swagger-ui .mw4-m { + max-width: 8rem; + } + .swagger-ui .mw5-m { + max-width: 16rem; + } + .swagger-ui .mw6-m { + max-width: 32rem; + } + .swagger-ui .mw7-m { + max-width: 48rem; + } + .swagger-ui .mw8-m { + max-width: 64rem; + } + .swagger-ui .mw9-m { + max-width: 96rem; + } + .swagger-ui .mw-none-m { + max-width: none; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .mw-100-l { + max-width: 100%; + } + .swagger-ui .mw1-l { + max-width: 1rem; + } + .swagger-ui .mw2-l { + max-width: 2rem; + } + .swagger-ui .mw3-l { + max-width: 4rem; + } + .swagger-ui .mw4-l { + max-width: 8rem; + } + .swagger-ui .mw5-l { + max-width: 16rem; + } + .swagger-ui .mw6-l { + max-width: 32rem; + } + .swagger-ui .mw7-l { + max-width: 48rem; + } + .swagger-ui .mw8-l { + max-width: 64rem; + } + .swagger-ui .mw9-l { + max-width: 96rem; + } + .swagger-ui .mw-none-l { + max-width: none; + } +} +.swagger-ui .w1 { + width: 1rem; +} +.swagger-ui .w2 { + width: 2rem; +} +.swagger-ui .w3 { + width: 4rem; +} +.swagger-ui .w4 { + width: 8rem; +} +.swagger-ui .w5 { + width: 16rem; +} +.swagger-ui .w-10 { + width: 10%; +} +.swagger-ui .w-20 { + width: 20%; +} +.swagger-ui .w-25 { + width: 25%; +} +.swagger-ui .w-30 { + width: 30%; +} +.swagger-ui .w-33 { + width: 33%; +} +.swagger-ui .w-34 { + width: 34%; +} +.swagger-ui .w-40 { + width: 40%; +} +.swagger-ui .w-50 { + width: 50%; +} +.swagger-ui .w-60 { + width: 60%; +} +.swagger-ui .w-70 { + width: 70%; +} +.swagger-ui .w-75 { + width: 75%; +} +.swagger-ui .w-80 { + width: 80%; +} +.swagger-ui .w-90 { + width: 90%; +} +.swagger-ui .w-100 { + width: 100%; +} +.swagger-ui .w-third { + width: 33.3333333333%; +} +.swagger-ui .w-two-thirds { + width: 66.6666666667%; +} +.swagger-ui .w-auto { + width: auto; +} +@media screen and (min-width: 30em) { + .swagger-ui .w1-ns { + width: 1rem; + } + .swagger-ui .w2-ns { + width: 2rem; + } + .swagger-ui .w3-ns { + width: 4rem; + } + .swagger-ui .w4-ns { + width: 8rem; + } + .swagger-ui .w5-ns { + width: 16rem; + } + .swagger-ui .w-10-ns { + width: 10%; + } + .swagger-ui .w-20-ns { + width: 20%; + } + .swagger-ui .w-25-ns { + width: 25%; + } + .swagger-ui .w-30-ns { + width: 30%; + } + .swagger-ui .w-33-ns { + width: 33%; + } + .swagger-ui .w-34-ns { + width: 34%; + } + .swagger-ui .w-40-ns { + width: 40%; + } + .swagger-ui .w-50-ns { + width: 50%; + } + .swagger-ui .w-60-ns { + width: 60%; + } + .swagger-ui .w-70-ns { + width: 70%; + } + .swagger-ui .w-75-ns { + width: 75%; + } + .swagger-ui .w-80-ns { + width: 80%; + } + .swagger-ui .w-90-ns { + width: 90%; + } + .swagger-ui .w-100-ns { + width: 100%; + } + .swagger-ui .w-third-ns { + width: 33.3333333333%; + } + .swagger-ui .w-two-thirds-ns { + width: 66.6666666667%; + } + .swagger-ui .w-auto-ns { + width: auto; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .w1-m { + width: 1rem; + } + .swagger-ui .w2-m { + width: 2rem; + } + .swagger-ui .w3-m { + width: 4rem; + } + .swagger-ui .w4-m { + width: 8rem; + } + .swagger-ui .w5-m { + width: 16rem; + } + .swagger-ui .w-10-m { + width: 10%; + } + .swagger-ui .w-20-m { + width: 20%; + } + .swagger-ui .w-25-m { + width: 25%; + } + .swagger-ui .w-30-m { + width: 30%; + } + .swagger-ui .w-33-m { + width: 33%; + } + .swagger-ui .w-34-m { + width: 34%; + } + .swagger-ui .w-40-m { + width: 40%; + } + .swagger-ui .w-50-m { + width: 50%; + } + .swagger-ui .w-60-m { + width: 60%; + } + .swagger-ui .w-70-m { + width: 70%; + } + .swagger-ui .w-75-m { + width: 75%; + } + .swagger-ui .w-80-m { + width: 80%; + } + .swagger-ui .w-90-m { + width: 90%; + } + .swagger-ui .w-100-m { + width: 100%; + } + .swagger-ui .w-third-m { + width: 33.3333333333%; + } + .swagger-ui .w-two-thirds-m { + width: 66.6666666667%; + } + .swagger-ui .w-auto-m { + width: auto; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .w1-l { + width: 1rem; + } + .swagger-ui .w2-l { + width: 2rem; + } + .swagger-ui .w3-l { + width: 4rem; + } + .swagger-ui .w4-l { + width: 8rem; + } + .swagger-ui .w5-l { + width: 16rem; + } + .swagger-ui .w-10-l { + width: 10%; + } + .swagger-ui .w-20-l { + width: 20%; + } + .swagger-ui .w-25-l { + width: 25%; + } + .swagger-ui .w-30-l { + width: 30%; + } + .swagger-ui .w-33-l { + width: 33%; + } + .swagger-ui .w-34-l { + width: 34%; + } + .swagger-ui .w-40-l { + width: 40%; + } + .swagger-ui .w-50-l { + width: 50%; + } + .swagger-ui .w-60-l { + width: 60%; + } + .swagger-ui .w-70-l { + width: 70%; + } + .swagger-ui .w-75-l { + width: 75%; + } + .swagger-ui .w-80-l { + width: 80%; + } + .swagger-ui .w-90-l { + width: 90%; + } + .swagger-ui .w-100-l { + width: 100%; + } + .swagger-ui .w-third-l { + width: 33.3333333333%; + } + .swagger-ui .w-two-thirds-l { + width: 66.6666666667%; + } + .swagger-ui .w-auto-l { + width: auto; + } +} +.swagger-ui .overflow-visible { + overflow: visible; +} +.swagger-ui .overflow-hidden { + overflow: hidden; +} +.swagger-ui .overflow-scroll { + overflow: scroll; +} +.swagger-ui .overflow-auto { + overflow: auto; +} +.swagger-ui .overflow-x-visible { + overflow-x: visible; +} +.swagger-ui .overflow-x-hidden { + overflow-x: hidden; +} +.swagger-ui .overflow-x-scroll { + overflow-x: scroll; +} +.swagger-ui .overflow-x-auto { + overflow-x: auto; +} +.swagger-ui .overflow-y-visible { + overflow-y: visible; +} +.swagger-ui .overflow-y-hidden { + overflow-y: hidden; +} +.swagger-ui .overflow-y-scroll { + overflow-y: scroll; +} +.swagger-ui .overflow-y-auto { + overflow-y: auto; +} +@media screen and (min-width: 30em) { + .swagger-ui .overflow-visible-ns { + overflow: visible; + } + .swagger-ui .overflow-hidden-ns { + overflow: hidden; + } + .swagger-ui .overflow-scroll-ns { + overflow: scroll; + } + .swagger-ui .overflow-auto-ns { + overflow: auto; + } + .swagger-ui .overflow-x-visible-ns { + overflow-x: visible; + } + .swagger-ui .overflow-x-hidden-ns { + overflow-x: hidden; + } + .swagger-ui .overflow-x-scroll-ns { + overflow-x: scroll; + } + .swagger-ui .overflow-x-auto-ns { + overflow-x: auto; + } + .swagger-ui .overflow-y-visible-ns { + overflow-y: visible; + } + .swagger-ui .overflow-y-hidden-ns { + overflow-y: hidden; + } + .swagger-ui .overflow-y-scroll-ns { + overflow-y: scroll; + } + .swagger-ui .overflow-y-auto-ns { + overflow-y: auto; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .overflow-visible-m { + overflow: visible; + } + .swagger-ui .overflow-hidden-m { + overflow: hidden; + } + .swagger-ui .overflow-scroll-m { + overflow: scroll; + } + .swagger-ui .overflow-auto-m { + overflow: auto; + } + .swagger-ui .overflow-x-visible-m { + overflow-x: visible; + } + .swagger-ui .overflow-x-hidden-m { + overflow-x: hidden; + } + .swagger-ui .overflow-x-scroll-m { + overflow-x: scroll; + } + .swagger-ui .overflow-x-auto-m { + overflow-x: auto; + } + .swagger-ui .overflow-y-visible-m { + overflow-y: visible; + } + .swagger-ui .overflow-y-hidden-m { + overflow-y: hidden; + } + .swagger-ui .overflow-y-scroll-m { + overflow-y: scroll; + } + .swagger-ui .overflow-y-auto-m { + overflow-y: auto; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .overflow-visible-l { + overflow: visible; + } + .swagger-ui .overflow-hidden-l { + overflow: hidden; + } + .swagger-ui .overflow-scroll-l { + overflow: scroll; + } + .swagger-ui .overflow-auto-l { + overflow: auto; + } + .swagger-ui .overflow-x-visible-l { + overflow-x: visible; + } + .swagger-ui .overflow-x-hidden-l { + overflow-x: hidden; + } + .swagger-ui .overflow-x-scroll-l { + overflow-x: scroll; + } + .swagger-ui .overflow-x-auto-l { + overflow-x: auto; + } + .swagger-ui .overflow-y-visible-l { + overflow-y: visible; + } + .swagger-ui .overflow-y-hidden-l { + overflow-y: hidden; + } + .swagger-ui .overflow-y-scroll-l { + overflow-y: scroll; + } + .swagger-ui .overflow-y-auto-l { + overflow-y: auto; + } +} +.swagger-ui .static { + position: static; +} +.swagger-ui .relative { + position: relative; +} +.swagger-ui .absolute { + position: absolute; +} +.swagger-ui .fixed { + position: fixed; +} +@media screen and (min-width: 30em) { + .swagger-ui .static-ns { + position: static; + } + .swagger-ui .relative-ns { + position: relative; + } + .swagger-ui .absolute-ns { + position: absolute; + } + .swagger-ui .fixed-ns { + position: fixed; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .static-m { + position: static; + } + .swagger-ui .relative-m { + position: relative; + } + .swagger-ui .absolute-m { + position: absolute; + } + .swagger-ui .fixed-m { + position: fixed; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .static-l { + position: static; + } + .swagger-ui .relative-l { + position: relative; + } + .swagger-ui .absolute-l { + position: absolute; + } + .swagger-ui .fixed-l { + position: fixed; + } +} +.swagger-ui .o-100 { + opacity: 1; +} +.swagger-ui .o-90 { + opacity: 0.9; +} +.swagger-ui .o-80 { + opacity: 0.8; +} +.swagger-ui .o-70 { + opacity: 0.7; +} +.swagger-ui .o-60 { + opacity: 0.6; +} +.swagger-ui .o-50 { + opacity: 0.5; +} +.swagger-ui .o-40 { + opacity: 0.4; +} +.swagger-ui .o-30 { + opacity: 0.3; +} +.swagger-ui .o-20 { + opacity: 0.2; +} +.swagger-ui .o-10 { + opacity: 0.1; +} +.swagger-ui .o-05 { + opacity: 0.05; +} +.swagger-ui .o-025 { + opacity: 0.025; +} +.swagger-ui .o-0 { + opacity: 0; +} +.swagger-ui .rotate-45 { + transform: rotate(45deg); +} +.swagger-ui .rotate-90 { + transform: rotate(90deg); +} +.swagger-ui .rotate-135 { + transform: rotate(135deg); +} +.swagger-ui .rotate-180 { + transform: rotate(180deg); +} +.swagger-ui .rotate-225 { + transform: rotate(225deg); +} +.swagger-ui .rotate-270 { + transform: rotate(270deg); +} +.swagger-ui .rotate-315 { + transform: rotate(315deg); +} +@media screen and (min-width: 30em) { + .swagger-ui .rotate-45-ns { + transform: rotate(45deg); + } + .swagger-ui .rotate-90-ns { + transform: rotate(90deg); + } + .swagger-ui .rotate-135-ns { + transform: rotate(135deg); + } + .swagger-ui .rotate-180-ns { + transform: rotate(180deg); + } + .swagger-ui .rotate-225-ns { + transform: rotate(225deg); + } + .swagger-ui .rotate-270-ns { + transform: rotate(270deg); + } + .swagger-ui .rotate-315-ns { + transform: rotate(315deg); + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .rotate-45-m { + transform: rotate(45deg); + } + .swagger-ui .rotate-90-m { + transform: rotate(90deg); + } + .swagger-ui .rotate-135-m { + transform: rotate(135deg); + } + .swagger-ui .rotate-180-m { + transform: rotate(180deg); + } + .swagger-ui .rotate-225-m { + transform: rotate(225deg); + } + .swagger-ui .rotate-270-m { + transform: rotate(270deg); + } + .swagger-ui .rotate-315-m { + transform: rotate(315deg); + } +} +@media screen and (min-width: 60em) { + .swagger-ui .rotate-45-l { + transform: rotate(45deg); + } + .swagger-ui .rotate-90-l { + transform: rotate(90deg); + } + .swagger-ui .rotate-135-l { + transform: rotate(135deg); + } + .swagger-ui .rotate-180-l { + transform: rotate(180deg); + } + .swagger-ui .rotate-225-l { + transform: rotate(225deg); + } + .swagger-ui .rotate-270-l { + transform: rotate(270deg); + } + .swagger-ui .rotate-315-l { + transform: rotate(315deg); + } +} +.swagger-ui .black-90 { + color: rgba(0, 0, 0, 0.9); +} +.swagger-ui .black-80 { + color: rgba(0, 0, 0, 0.8); +} +.swagger-ui .black-70 { + color: rgba(0, 0, 0, 0.7); +} +.swagger-ui .black-60 { + color: rgba(0, 0, 0, 0.6); +} +.swagger-ui .black-50 { + color: rgba(0, 0, 0, 0.5); +} +.swagger-ui .black-40 { + color: rgba(0, 0, 0, 0.4); +} +.swagger-ui .black-30 { + color: rgba(0, 0, 0, 0.3); +} +.swagger-ui .black-20 { + color: rgba(0, 0, 0, 0.2); +} +.swagger-ui .black-10 { + color: rgba(0, 0, 0, 0.1); +} +.swagger-ui .black-05 { + color: rgba(0, 0, 0, 0.05); +} +.swagger-ui .white-90 { + color: hsla(0, 0%, 100%, 0.9); +} +.swagger-ui .white-80 { + color: hsla(0, 0%, 100%, 0.8); +} +.swagger-ui .white-70 { + color: hsla(0, 0%, 100%, 0.7); +} +.swagger-ui .white-60 { + color: hsla(0, 0%, 100%, 0.6); +} +.swagger-ui .white-50 { + color: hsla(0, 0%, 100%, 0.5); +} +.swagger-ui .white-40 { + color: hsla(0, 0%, 100%, 0.4); +} +.swagger-ui .white-30 { + color: hsla(0, 0%, 100%, 0.3); +} +.swagger-ui .white-20 { + color: hsla(0, 0%, 100%, 0.2); +} +.swagger-ui .white-10 { + color: hsla(0, 0%, 100%, 0.1); +} +.swagger-ui .black { + color: #000; +} +.swagger-ui .near-black { + color: #111; +} +.swagger-ui .dark-gray { + color: #333; +} +.swagger-ui .mid-gray { + color: #555; +} +.swagger-ui .gray { + color: #777; +} +.swagger-ui .silver { + color: #999; +} +.swagger-ui .light-silver { + color: #aaa; +} +.swagger-ui .moon-gray { + color: #ccc; +} +.swagger-ui .light-gray { + color: #eee; +} +.swagger-ui .near-white { + color: #f4f4f4; +} +.swagger-ui .white { + color: #fff; +} +.swagger-ui .dark-red { + color: #e7040f; +} +.swagger-ui .red { + color: #ff4136; +} +.swagger-ui .light-red { + color: #ff725c; +} +.swagger-ui .orange { + color: #ff6300; +} +.swagger-ui .gold { + color: #ffb700; +} +.swagger-ui .yellow { + color: gold; +} +.swagger-ui .light-yellow { + color: #fbf1a9; +} +.swagger-ui .purple { + color: #5e2ca5; +} +.swagger-ui .light-purple { + color: #a463f2; +} +.swagger-ui .dark-pink { + color: #d5008f; +} +.swagger-ui .hot-pink { + color: #ff41b4; +} +.swagger-ui .pink { + color: #ff80cc; +} +.swagger-ui .light-pink { + color: #ffa3d7; +} +.swagger-ui .dark-green { + color: #137752; +} +.swagger-ui .green { + color: #19a974; +} +.swagger-ui .light-green { + color: #9eebcf; +} +.swagger-ui .navy { + color: #001b44; +} +.swagger-ui .dark-blue { + color: #00449e; +} +.swagger-ui .blue { + color: #357edd; +} +.swagger-ui .light-blue { + color: #96ccff; +} +.swagger-ui .lightest-blue { + color: #cdecff; +} +.swagger-ui .washed-blue { + color: #f6fffe; +} +.swagger-ui .washed-green { + color: #e8fdf5; +} +.swagger-ui .washed-yellow { + color: #fffceb; +} +.swagger-ui .washed-red { + color: #ffdfdf; +} +.swagger-ui .color-inherit { + color: inherit; +} +.swagger-ui .bg-black-90 { + background-color: rgba(0, 0, 0, 0.9); +} +.swagger-ui .bg-black-80 { + background-color: rgba(0, 0, 0, 0.8); +} +.swagger-ui .bg-black-70 { + background-color: rgba(0, 0, 0, 0.7); +} +.swagger-ui .bg-black-60 { + background-color: rgba(0, 0, 0, 0.6); +} +.swagger-ui .bg-black-50 { + background-color: rgba(0, 0, 0, 0.5); +} +.swagger-ui .bg-black-40 { + background-color: rgba(0, 0, 0, 0.4); +} +.swagger-ui .bg-black-30 { + background-color: rgba(0, 0, 0, 0.3); +} +.swagger-ui .bg-black-20 { + background-color: rgba(0, 0, 0, 0.2); +} +.swagger-ui .bg-black-10 { + background-color: rgba(0, 0, 0, 0.1); +} +.swagger-ui .bg-black-05 { + background-color: rgba(0, 0, 0, 0.05); +} +.swagger-ui .bg-white-90 { + background-color: hsla(0, 0%, 100%, 0.9); +} +.swagger-ui .bg-white-80 { + background-color: hsla(0, 0%, 100%, 0.8); +} +.swagger-ui .bg-white-70 { + background-color: hsla(0, 0%, 100%, 0.7); +} +.swagger-ui .bg-white-60 { + background-color: hsla(0, 0%, 100%, 0.6); +} +.swagger-ui .bg-white-50 { + background-color: hsla(0, 0%, 100%, 0.5); +} +.swagger-ui .bg-white-40 { + background-color: hsla(0, 0%, 100%, 0.4); +} +.swagger-ui .bg-white-30 { + background-color: hsla(0, 0%, 100%, 0.3); +} +.swagger-ui .bg-white-20 { + background-color: hsla(0, 0%, 100%, 0.2); +} +.swagger-ui .bg-white-10 { + background-color: hsla(0, 0%, 100%, 0.1); +} +.swagger-ui .bg-black { + background-color: #000; +} +.swagger-ui .bg-near-black { + background-color: #111; +} +.swagger-ui .bg-dark-gray { + background-color: #333; +} +.swagger-ui .bg-mid-gray { + background-color: #555; +} +.swagger-ui .bg-gray { + background-color: #777; +} +.swagger-ui .bg-silver { + background-color: #999; +} +.swagger-ui .bg-light-silver { + background-color: #aaa; +} +.swagger-ui .bg-moon-gray { + background-color: #ccc; +} +.swagger-ui .bg-light-gray { + background-color: #eee; +} +.swagger-ui .bg-near-white { + background-color: #f4f4f4; +} +.swagger-ui .bg-white { + background-color: #fff; +} +.swagger-ui .bg-transparent { + background-color: transparent; +} +.swagger-ui .bg-dark-red { + background-color: #e7040f; +} +.swagger-ui .bg-red { + background-color: #ff4136; +} +.swagger-ui .bg-light-red { + background-color: #ff725c; +} +.swagger-ui .bg-orange { + background-color: #ff6300; +} +.swagger-ui .bg-gold { + background-color: #ffb700; +} +.swagger-ui .bg-yellow { + background-color: gold; +} +.swagger-ui .bg-light-yellow { + background-color: #fbf1a9; +} +.swagger-ui .bg-purple { + background-color: #5e2ca5; +} +.swagger-ui .bg-light-purple { + background-color: #a463f2; +} +.swagger-ui .bg-dark-pink { + background-color: #d5008f; +} +.swagger-ui .bg-hot-pink { + background-color: #ff41b4; +} +.swagger-ui .bg-pink { + background-color: #ff80cc; +} +.swagger-ui .bg-light-pink { + background-color: #ffa3d7; +} +.swagger-ui .bg-dark-green { + background-color: #137752; +} +.swagger-ui .bg-green { + background-color: #19a974; +} +.swagger-ui .bg-light-green { + background-color: #9eebcf; +} +.swagger-ui .bg-navy { + background-color: #001b44; +} +.swagger-ui .bg-dark-blue { + background-color: #00449e; +} +.swagger-ui .bg-blue { + background-color: #357edd; +} +.swagger-ui .bg-light-blue { + background-color: #96ccff; +} +.swagger-ui .bg-lightest-blue { + background-color: #cdecff; +} +.swagger-ui .bg-washed-blue { + background-color: #f6fffe; +} +.swagger-ui .bg-washed-green { + background-color: #e8fdf5; +} +.swagger-ui .bg-washed-yellow { + background-color: #fffceb; +} +.swagger-ui .bg-washed-red { + background-color: #ffdfdf; +} +.swagger-ui .bg-inherit { + background-color: inherit; +} +.swagger-ui .hover-black:focus, +.swagger-ui .hover-black:hover { + color: #000; +} +.swagger-ui .hover-near-black:focus, +.swagger-ui .hover-near-black:hover { + color: #111; +} +.swagger-ui .hover-dark-gray:focus, +.swagger-ui .hover-dark-gray:hover { + color: #333; +} +.swagger-ui .hover-mid-gray:focus, +.swagger-ui .hover-mid-gray:hover { + color: #555; +} +.swagger-ui .hover-gray:focus, +.swagger-ui .hover-gray:hover { + color: #777; +} +.swagger-ui .hover-silver:focus, +.swagger-ui .hover-silver:hover { + color: #999; +} +.swagger-ui .hover-light-silver:focus, +.swagger-ui .hover-light-silver:hover { + color: #aaa; +} +.swagger-ui .hover-moon-gray:focus, +.swagger-ui .hover-moon-gray:hover { + color: #ccc; +} +.swagger-ui .hover-light-gray:focus, +.swagger-ui .hover-light-gray:hover { + color: #eee; +} +.swagger-ui .hover-near-white:focus, +.swagger-ui .hover-near-white:hover { + color: #f4f4f4; +} +.swagger-ui .hover-white:focus, +.swagger-ui .hover-white:hover { + color: #fff; +} +.swagger-ui .hover-black-90:focus, +.swagger-ui .hover-black-90:hover { + color: rgba(0, 0, 0, 0.9); +} +.swagger-ui .hover-black-80:focus, +.swagger-ui .hover-black-80:hover { + color: rgba(0, 0, 0, 0.8); +} +.swagger-ui .hover-black-70:focus, +.swagger-ui .hover-black-70:hover { + color: rgba(0, 0, 0, 0.7); +} +.swagger-ui .hover-black-60:focus, +.swagger-ui .hover-black-60:hover { + color: rgba(0, 0, 0, 0.6); +} +.swagger-ui .hover-black-50:focus, +.swagger-ui .hover-black-50:hover { + color: rgba(0, 0, 0, 0.5); +} +.swagger-ui .hover-black-40:focus, +.swagger-ui .hover-black-40:hover { + color: rgba(0, 0, 0, 0.4); +} +.swagger-ui .hover-black-30:focus, +.swagger-ui .hover-black-30:hover { + color: rgba(0, 0, 0, 0.3); +} +.swagger-ui .hover-black-20:focus, +.swagger-ui .hover-black-20:hover { + color: rgba(0, 0, 0, 0.2); +} +.swagger-ui .hover-black-10:focus, +.swagger-ui .hover-black-10:hover { + color: rgba(0, 0, 0, 0.1); +} +.swagger-ui .hover-white-90:focus, +.swagger-ui .hover-white-90:hover { + color: hsla(0, 0%, 100%, 0.9); +} +.swagger-ui .hover-white-80:focus, +.swagger-ui .hover-white-80:hover { + color: hsla(0, 0%, 100%, 0.8); +} +.swagger-ui .hover-white-70:focus, +.swagger-ui .hover-white-70:hover { + color: hsla(0, 0%, 100%, 0.7); +} +.swagger-ui .hover-white-60:focus, +.swagger-ui .hover-white-60:hover { + color: hsla(0, 0%, 100%, 0.6); +} +.swagger-ui .hover-white-50:focus, +.swagger-ui .hover-white-50:hover { + color: hsla(0, 0%, 100%, 0.5); +} +.swagger-ui .hover-white-40:focus, +.swagger-ui .hover-white-40:hover { + color: hsla(0, 0%, 100%, 0.4); +} +.swagger-ui .hover-white-30:focus, +.swagger-ui .hover-white-30:hover { + color: hsla(0, 0%, 100%, 0.3); +} +.swagger-ui .hover-white-20:focus, +.swagger-ui .hover-white-20:hover { + color: hsla(0, 0%, 100%, 0.2); +} +.swagger-ui .hover-white-10:focus, +.swagger-ui .hover-white-10:hover { + color: hsla(0, 0%, 100%, 0.1); +} +.swagger-ui .hover-inherit:focus, +.swagger-ui .hover-inherit:hover { + color: inherit; +} +.swagger-ui .hover-bg-black:focus, +.swagger-ui .hover-bg-black:hover { + background-color: #000; +} +.swagger-ui .hover-bg-near-black:focus, +.swagger-ui .hover-bg-near-black:hover { + background-color: #111; +} +.swagger-ui .hover-bg-dark-gray:focus, +.swagger-ui .hover-bg-dark-gray:hover { + background-color: #333; +} +.swagger-ui .hover-bg-mid-gray:focus, +.swagger-ui .hover-bg-mid-gray:hover { + background-color: #555; +} +.swagger-ui .hover-bg-gray:focus, +.swagger-ui .hover-bg-gray:hover { + background-color: #777; +} +.swagger-ui .hover-bg-silver:focus, +.swagger-ui .hover-bg-silver:hover { + background-color: #999; +} +.swagger-ui .hover-bg-light-silver:focus, +.swagger-ui .hover-bg-light-silver:hover { + background-color: #aaa; +} +.swagger-ui .hover-bg-moon-gray:focus, +.swagger-ui .hover-bg-moon-gray:hover { + background-color: #ccc; +} +.swagger-ui .hover-bg-light-gray:focus, +.swagger-ui .hover-bg-light-gray:hover { + background-color: #eee; +} +.swagger-ui .hover-bg-near-white:focus, +.swagger-ui .hover-bg-near-white:hover { + background-color: #f4f4f4; +} +.swagger-ui .hover-bg-white:focus, +.swagger-ui .hover-bg-white:hover { + background-color: #fff; +} +.swagger-ui .hover-bg-transparent:focus, +.swagger-ui .hover-bg-transparent:hover { + background-color: transparent; +} +.swagger-ui .hover-bg-black-90:focus, +.swagger-ui .hover-bg-black-90:hover { + background-color: rgba(0, 0, 0, 0.9); +} +.swagger-ui .hover-bg-black-80:focus, +.swagger-ui .hover-bg-black-80:hover { + background-color: rgba(0, 0, 0, 0.8); +} +.swagger-ui .hover-bg-black-70:focus, +.swagger-ui .hover-bg-black-70:hover { + background-color: rgba(0, 0, 0, 0.7); +} +.swagger-ui .hover-bg-black-60:focus, +.swagger-ui .hover-bg-black-60:hover { + background-color: rgba(0, 0, 0, 0.6); +} +.swagger-ui .hover-bg-black-50:focus, +.swagger-ui .hover-bg-black-50:hover { + background-color: rgba(0, 0, 0, 0.5); +} +.swagger-ui .hover-bg-black-40:focus, +.swagger-ui .hover-bg-black-40:hover { + background-color: rgba(0, 0, 0, 0.4); +} +.swagger-ui .hover-bg-black-30:focus, +.swagger-ui .hover-bg-black-30:hover { + background-color: rgba(0, 0, 0, 0.3); +} +.swagger-ui .hover-bg-black-20:focus, +.swagger-ui .hover-bg-black-20:hover { + background-color: rgba(0, 0, 0, 0.2); +} +.swagger-ui .hover-bg-black-10:focus, +.swagger-ui .hover-bg-black-10:hover { + background-color: rgba(0, 0, 0, 0.1); +} +.swagger-ui .hover-bg-white-90:focus, +.swagger-ui .hover-bg-white-90:hover { + background-color: hsla(0, 0%, 100%, 0.9); +} +.swagger-ui .hover-bg-white-80:focus, +.swagger-ui .hover-bg-white-80:hover { + background-color: hsla(0, 0%, 100%, 0.8); +} +.swagger-ui .hover-bg-white-70:focus, +.swagger-ui .hover-bg-white-70:hover { + background-color: hsla(0, 0%, 100%, 0.7); +} +.swagger-ui .hover-bg-white-60:focus, +.swagger-ui .hover-bg-white-60:hover { + background-color: hsla(0, 0%, 100%, 0.6); +} +.swagger-ui .hover-bg-white-50:focus, +.swagger-ui .hover-bg-white-50:hover { + background-color: hsla(0, 0%, 100%, 0.5); +} +.swagger-ui .hover-bg-white-40:focus, +.swagger-ui .hover-bg-white-40:hover { + background-color: hsla(0, 0%, 100%, 0.4); +} +.swagger-ui .hover-bg-white-30:focus, +.swagger-ui .hover-bg-white-30:hover { + background-color: hsla(0, 0%, 100%, 0.3); +} +.swagger-ui .hover-bg-white-20:focus, +.swagger-ui .hover-bg-white-20:hover { + background-color: hsla(0, 0%, 100%, 0.2); +} +.swagger-ui .hover-bg-white-10:focus, +.swagger-ui .hover-bg-white-10:hover { + background-color: hsla(0, 0%, 100%, 0.1); +} +.swagger-ui .hover-dark-red:focus, +.swagger-ui .hover-dark-red:hover { + color: #e7040f; +} +.swagger-ui .hover-red:focus, +.swagger-ui .hover-red:hover { + color: #ff4136; +} +.swagger-ui .hover-light-red:focus, +.swagger-ui .hover-light-red:hover { + color: #ff725c; +} +.swagger-ui .hover-orange:focus, +.swagger-ui .hover-orange:hover { + color: #ff6300; +} +.swagger-ui .hover-gold:focus, +.swagger-ui .hover-gold:hover { + color: #ffb700; +} +.swagger-ui .hover-yellow:focus, +.swagger-ui .hover-yellow:hover { + color: gold; +} +.swagger-ui .hover-light-yellow:focus, +.swagger-ui .hover-light-yellow:hover { + color: #fbf1a9; +} +.swagger-ui .hover-purple:focus, +.swagger-ui .hover-purple:hover { + color: #5e2ca5; +} +.swagger-ui .hover-light-purple:focus, +.swagger-ui .hover-light-purple:hover { + color: #a463f2; +} +.swagger-ui .hover-dark-pink:focus, +.swagger-ui .hover-dark-pink:hover { + color: #d5008f; +} +.swagger-ui .hover-hot-pink:focus, +.swagger-ui .hover-hot-pink:hover { + color: #ff41b4; +} +.swagger-ui .hover-pink:focus, +.swagger-ui .hover-pink:hover { + color: #ff80cc; +} +.swagger-ui .hover-light-pink:focus, +.swagger-ui .hover-light-pink:hover { + color: #ffa3d7; +} +.swagger-ui .hover-dark-green:focus, +.swagger-ui .hover-dark-green:hover { + color: #137752; +} +.swagger-ui .hover-green:focus, +.swagger-ui .hover-green:hover { + color: #19a974; +} +.swagger-ui .hover-light-green:focus, +.swagger-ui .hover-light-green:hover { + color: #9eebcf; +} +.swagger-ui .hover-navy:focus, +.swagger-ui .hover-navy:hover { + color: #001b44; +} +.swagger-ui .hover-dark-blue:focus, +.swagger-ui .hover-dark-blue:hover { + color: #00449e; +} +.swagger-ui .hover-blue:focus, +.swagger-ui .hover-blue:hover { + color: #357edd; +} +.swagger-ui .hover-light-blue:focus, +.swagger-ui .hover-light-blue:hover { + color: #96ccff; +} +.swagger-ui .hover-lightest-blue:focus, +.swagger-ui .hover-lightest-blue:hover { + color: #cdecff; +} +.swagger-ui .hover-washed-blue:focus, +.swagger-ui .hover-washed-blue:hover { + color: #f6fffe; +} +.swagger-ui .hover-washed-green:focus, +.swagger-ui .hover-washed-green:hover { + color: #e8fdf5; +} +.swagger-ui .hover-washed-yellow:focus, +.swagger-ui .hover-washed-yellow:hover { + color: #fffceb; +} +.swagger-ui .hover-washed-red:focus, +.swagger-ui .hover-washed-red:hover { + color: #ffdfdf; +} +.swagger-ui .hover-bg-dark-red:focus, +.swagger-ui .hover-bg-dark-red:hover { + background-color: #e7040f; +} +.swagger-ui .hover-bg-red:focus, +.swagger-ui .hover-bg-red:hover { + background-color: #ff4136; +} +.swagger-ui .hover-bg-light-red:focus, +.swagger-ui .hover-bg-light-red:hover { + background-color: #ff725c; +} +.swagger-ui .hover-bg-orange:focus, +.swagger-ui .hover-bg-orange:hover { + background-color: #ff6300; +} +.swagger-ui .hover-bg-gold:focus, +.swagger-ui .hover-bg-gold:hover { + background-color: #ffb700; +} +.swagger-ui .hover-bg-yellow:focus, +.swagger-ui .hover-bg-yellow:hover { + background-color: gold; +} +.swagger-ui .hover-bg-light-yellow:focus, +.swagger-ui .hover-bg-light-yellow:hover { + background-color: #fbf1a9; +} +.swagger-ui .hover-bg-purple:focus, +.swagger-ui .hover-bg-purple:hover { + background-color: #5e2ca5; +} +.swagger-ui .hover-bg-light-purple:focus, +.swagger-ui .hover-bg-light-purple:hover { + background-color: #a463f2; +} +.swagger-ui .hover-bg-dark-pink:focus, +.swagger-ui .hover-bg-dark-pink:hover { + background-color: #d5008f; +} +.swagger-ui .hover-bg-hot-pink:focus, +.swagger-ui .hover-bg-hot-pink:hover { + background-color: #ff41b4; +} +.swagger-ui .hover-bg-pink:focus, +.swagger-ui .hover-bg-pink:hover { + background-color: #ff80cc; +} +.swagger-ui .hover-bg-light-pink:focus, +.swagger-ui .hover-bg-light-pink:hover { + background-color: #ffa3d7; +} +.swagger-ui .hover-bg-dark-green:focus, +.swagger-ui .hover-bg-dark-green:hover { + background-color: #137752; +} +.swagger-ui .hover-bg-green:focus, +.swagger-ui .hover-bg-green:hover { + background-color: #19a974; +} +.swagger-ui .hover-bg-light-green:focus, +.swagger-ui .hover-bg-light-green:hover { + background-color: #9eebcf; +} +.swagger-ui .hover-bg-navy:focus, +.swagger-ui .hover-bg-navy:hover { + background-color: #001b44; +} +.swagger-ui .hover-bg-dark-blue:focus, +.swagger-ui .hover-bg-dark-blue:hover { + background-color: #00449e; +} +.swagger-ui .hover-bg-blue:focus, +.swagger-ui .hover-bg-blue:hover { + background-color: #357edd; +} +.swagger-ui .hover-bg-light-blue:focus, +.swagger-ui .hover-bg-light-blue:hover { + background-color: #96ccff; +} +.swagger-ui .hover-bg-lightest-blue:focus, +.swagger-ui .hover-bg-lightest-blue:hover { + background-color: #cdecff; +} +.swagger-ui .hover-bg-washed-blue:focus, +.swagger-ui .hover-bg-washed-blue:hover { + background-color: #f6fffe; +} +.swagger-ui .hover-bg-washed-green:focus, +.swagger-ui .hover-bg-washed-green:hover { + background-color: #e8fdf5; +} +.swagger-ui .hover-bg-washed-yellow:focus, +.swagger-ui .hover-bg-washed-yellow:hover { + background-color: #fffceb; +} +.swagger-ui .hover-bg-washed-red:focus, +.swagger-ui .hover-bg-washed-red:hover { + background-color: #ffdfdf; +} +.swagger-ui .hover-bg-inherit:focus, +.swagger-ui .hover-bg-inherit:hover { + background-color: inherit; +} +.swagger-ui .pa0 { + padding: 0; +} +.swagger-ui .pa1 { + padding: 0.25rem; +} +.swagger-ui .pa2 { + padding: 0.5rem; +} +.swagger-ui .pa3 { + padding: 1rem; +} +.swagger-ui .pa4 { + padding: 2rem; +} +.swagger-ui .pa5 { + padding: 4rem; +} +.swagger-ui .pa6 { + padding: 8rem; +} +.swagger-ui .pa7 { + padding: 16rem; +} +.swagger-ui .pl0 { + padding-left: 0; +} +.swagger-ui .pl1 { + padding-left: 0.25rem; +} +.swagger-ui .pl2 { + padding-left: 0.5rem; +} +.swagger-ui .pl3 { + padding-left: 1rem; +} +.swagger-ui .pl4 { + padding-left: 2rem; +} +.swagger-ui .pl5 { + padding-left: 4rem; +} +.swagger-ui .pl6 { + padding-left: 8rem; +} +.swagger-ui .pl7 { + padding-left: 16rem; +} +.swagger-ui .pr0 { + padding-right: 0; +} +.swagger-ui .pr1 { + padding-right: 0.25rem; +} +.swagger-ui .pr2 { + padding-right: 0.5rem; +} +.swagger-ui .pr3 { + padding-right: 1rem; +} +.swagger-ui .pr4 { + padding-right: 2rem; +} +.swagger-ui .pr5 { + padding-right: 4rem; +} +.swagger-ui .pr6 { + padding-right: 8rem; +} +.swagger-ui .pr7 { + padding-right: 16rem; +} +.swagger-ui .pb0 { + padding-bottom: 0; +} +.swagger-ui .pb1 { + padding-bottom: 0.25rem; +} +.swagger-ui .pb2 { + padding-bottom: 0.5rem; +} +.swagger-ui .pb3 { + padding-bottom: 1rem; +} +.swagger-ui .pb4 { + padding-bottom: 2rem; +} +.swagger-ui .pb5 { + padding-bottom: 4rem; +} +.swagger-ui .pb6 { + padding-bottom: 8rem; +} +.swagger-ui .pb7 { + padding-bottom: 16rem; +} +.swagger-ui .pt0 { + padding-top: 0; +} +.swagger-ui .pt1 { + padding-top: 0.25rem; +} +.swagger-ui .pt2 { + padding-top: 0.5rem; +} +.swagger-ui .pt3 { + padding-top: 1rem; +} +.swagger-ui .pt4 { + padding-top: 2rem; +} +.swagger-ui .pt5 { + padding-top: 4rem; +} +.swagger-ui .pt6 { + padding-top: 8rem; +} +.swagger-ui .pt7 { + padding-top: 16rem; +} +.swagger-ui .pv0 { + padding-bottom: 0; + padding-top: 0; +} +.swagger-ui .pv1 { + padding-bottom: 0.25rem; + padding-top: 0.25rem; +} +.swagger-ui .pv2 { + padding-bottom: 0.5rem; + padding-top: 0.5rem; +} +.swagger-ui .pv3 { + padding-bottom: 1rem; + padding-top: 1rem; +} +.swagger-ui .pv4 { + padding-bottom: 2rem; + padding-top: 2rem; +} +.swagger-ui .pv5 { + padding-bottom: 4rem; + padding-top: 4rem; +} +.swagger-ui .pv6 { + padding-bottom: 8rem; + padding-top: 8rem; +} +.swagger-ui .pv7 { + padding-bottom: 16rem; + padding-top: 16rem; +} +.swagger-ui .ph0 { + padding-left: 0; + padding-right: 0; +} +.swagger-ui .ph1 { + padding-left: 0.25rem; + padding-right: 0.25rem; +} +.swagger-ui .ph2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} +.swagger-ui .ph3 { + padding-left: 1rem; + padding-right: 1rem; +} +.swagger-ui .ph4 { + padding-left: 2rem; + padding-right: 2rem; +} +.swagger-ui .ph5 { + padding-left: 4rem; + padding-right: 4rem; +} +.swagger-ui .ph6 { + padding-left: 8rem; + padding-right: 8rem; +} +.swagger-ui .ph7 { + padding-left: 16rem; + padding-right: 16rem; +} +.swagger-ui .ma0 { + margin: 0; +} +.swagger-ui .ma1 { + margin: 0.25rem; +} +.swagger-ui .ma2 { + margin: 0.5rem; +} +.swagger-ui .ma3 { + margin: 1rem; +} +.swagger-ui .ma4 { + margin: 2rem; +} +.swagger-ui .ma5 { + margin: 4rem; +} +.swagger-ui .ma6 { + margin: 8rem; +} +.swagger-ui .ma7 { + margin: 16rem; +} +.swagger-ui .ml0 { + margin-left: 0; +} +.swagger-ui .ml1 { + margin-left: 0.25rem; +} +.swagger-ui .ml2 { + margin-left: 0.5rem; +} +.swagger-ui .ml3 { + margin-left: 1rem; +} +.swagger-ui .ml4 { + margin-left: 2rem; +} +.swagger-ui .ml5 { + margin-left: 4rem; +} +.swagger-ui .ml6 { + margin-left: 8rem; +} +.swagger-ui .ml7 { + margin-left: 16rem; +} +.swagger-ui .mr0 { + margin-right: 0; +} +.swagger-ui .mr1 { + margin-right: 0.25rem; +} +.swagger-ui .mr2 { + margin-right: 0.5rem; +} +.swagger-ui .mr3 { + margin-right: 1rem; +} +.swagger-ui .mr4 { + margin-right: 2rem; +} +.swagger-ui .mr5 { + margin-right: 4rem; +} +.swagger-ui .mr6 { + margin-right: 8rem; +} +.swagger-ui .mr7 { + margin-right: 16rem; +} +.swagger-ui .mb0 { + margin-bottom: 0; +} +.swagger-ui .mb1 { + margin-bottom: 0.25rem; +} +.swagger-ui .mb2 { + margin-bottom: 0.5rem; +} +.swagger-ui .mb3 { + margin-bottom: 1rem; +} +.swagger-ui .mb4 { + margin-bottom: 2rem; +} +.swagger-ui .mb5 { + margin-bottom: 4rem; +} +.swagger-ui .mb6 { + margin-bottom: 8rem; +} +.swagger-ui .mb7 { + margin-bottom: 16rem; +} +.swagger-ui .mt0 { + margin-top: 0; +} +.swagger-ui .mt1 { + margin-top: 0.25rem; +} +.swagger-ui .mt2 { + margin-top: 0.5rem; +} +.swagger-ui .mt3 { + margin-top: 1rem; +} +.swagger-ui .mt4 { + margin-top: 2rem; +} +.swagger-ui .mt5 { + margin-top: 4rem; +} +.swagger-ui .mt6 { + margin-top: 8rem; +} +.swagger-ui .mt7 { + margin-top: 16rem; +} +.swagger-ui .mv0 { + margin-bottom: 0; + margin-top: 0; +} +.swagger-ui .mv1 { + margin-bottom: 0.25rem; + margin-top: 0.25rem; +} +.swagger-ui .mv2 { + margin-bottom: 0.5rem; + margin-top: 0.5rem; +} +.swagger-ui .mv3 { + margin-bottom: 1rem; + margin-top: 1rem; +} +.swagger-ui .mv4 { + margin-bottom: 2rem; + margin-top: 2rem; +} +.swagger-ui .mv5 { + margin-bottom: 4rem; + margin-top: 4rem; +} +.swagger-ui .mv6 { + margin-bottom: 8rem; + margin-top: 8rem; +} +.swagger-ui .mv7 { + margin-bottom: 16rem; + margin-top: 16rem; +} +.swagger-ui .mh0 { + margin-left: 0; + margin-right: 0; +} +.swagger-ui .mh1 { + margin-left: 0.25rem; + margin-right: 0.25rem; +} +.swagger-ui .mh2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +.swagger-ui .mh3 { + margin-left: 1rem; + margin-right: 1rem; +} +.swagger-ui .mh4 { + margin-left: 2rem; + margin-right: 2rem; +} +.swagger-ui .mh5 { + margin-left: 4rem; + margin-right: 4rem; +} +.swagger-ui .mh6 { + margin-left: 8rem; + margin-right: 8rem; +} +.swagger-ui .mh7 { + margin-left: 16rem; + margin-right: 16rem; +} +@media screen and (min-width: 30em) { + .swagger-ui .pa0-ns { + padding: 0; + } + .swagger-ui .pa1-ns { + padding: 0.25rem; + } + .swagger-ui .pa2-ns { + padding: 0.5rem; + } + .swagger-ui .pa3-ns { + padding: 1rem; + } + .swagger-ui .pa4-ns { + padding: 2rem; + } + .swagger-ui .pa5-ns { + padding: 4rem; + } + .swagger-ui .pa6-ns { + padding: 8rem; + } + .swagger-ui .pa7-ns { + padding: 16rem; + } + .swagger-ui .pl0-ns { + padding-left: 0; + } + .swagger-ui .pl1-ns { + padding-left: 0.25rem; + } + .swagger-ui .pl2-ns { + padding-left: 0.5rem; + } + .swagger-ui .pl3-ns { + padding-left: 1rem; + } + .swagger-ui .pl4-ns { + padding-left: 2rem; + } + .swagger-ui .pl5-ns { + padding-left: 4rem; + } + .swagger-ui .pl6-ns { + padding-left: 8rem; + } + .swagger-ui .pl7-ns { + padding-left: 16rem; + } + .swagger-ui .pr0-ns { + padding-right: 0; + } + .swagger-ui .pr1-ns { + padding-right: 0.25rem; + } + .swagger-ui .pr2-ns { + padding-right: 0.5rem; + } + .swagger-ui .pr3-ns { + padding-right: 1rem; + } + .swagger-ui .pr4-ns { + padding-right: 2rem; + } + .swagger-ui .pr5-ns { + padding-right: 4rem; + } + .swagger-ui .pr6-ns { + padding-right: 8rem; + } + .swagger-ui .pr7-ns { + padding-right: 16rem; + } + .swagger-ui .pb0-ns { + padding-bottom: 0; + } + .swagger-ui .pb1-ns { + padding-bottom: 0.25rem; + } + .swagger-ui .pb2-ns { + padding-bottom: 0.5rem; + } + .swagger-ui .pb3-ns { + padding-bottom: 1rem; + } + .swagger-ui .pb4-ns { + padding-bottom: 2rem; + } + .swagger-ui .pb5-ns { + padding-bottom: 4rem; + } + .swagger-ui .pb6-ns { + padding-bottom: 8rem; + } + .swagger-ui .pb7-ns { + padding-bottom: 16rem; + } + .swagger-ui .pt0-ns { + padding-top: 0; + } + .swagger-ui .pt1-ns { + padding-top: 0.25rem; + } + .swagger-ui .pt2-ns { + padding-top: 0.5rem; + } + .swagger-ui .pt3-ns { + padding-top: 1rem; + } + .swagger-ui .pt4-ns { + padding-top: 2rem; + } + .swagger-ui .pt5-ns { + padding-top: 4rem; + } + .swagger-ui .pt6-ns { + padding-top: 8rem; + } + .swagger-ui .pt7-ns { + padding-top: 16rem; + } + .swagger-ui .pv0-ns { + padding-bottom: 0; + padding-top: 0; + } + .swagger-ui .pv1-ns { + padding-bottom: 0.25rem; + padding-top: 0.25rem; + } + .swagger-ui .pv2-ns { + padding-bottom: 0.5rem; + padding-top: 0.5rem; + } + .swagger-ui .pv3-ns { + padding-bottom: 1rem; + padding-top: 1rem; + } + .swagger-ui .pv4-ns { + padding-bottom: 2rem; + padding-top: 2rem; + } + .swagger-ui .pv5-ns { + padding-bottom: 4rem; + padding-top: 4rem; + } + .swagger-ui .pv6-ns { + padding-bottom: 8rem; + padding-top: 8rem; + } + .swagger-ui .pv7-ns { + padding-bottom: 16rem; + padding-top: 16rem; + } + .swagger-ui .ph0-ns { + padding-left: 0; + padding-right: 0; + } + .swagger-ui .ph1-ns { + padding-left: 0.25rem; + padding-right: 0.25rem; + } + .swagger-ui .ph2-ns { + padding-left: 0.5rem; + padding-right: 0.5rem; + } + .swagger-ui .ph3-ns { + padding-left: 1rem; + padding-right: 1rem; + } + .swagger-ui .ph4-ns { + padding-left: 2rem; + padding-right: 2rem; + } + .swagger-ui .ph5-ns { + padding-left: 4rem; + padding-right: 4rem; + } + .swagger-ui .ph6-ns { + padding-left: 8rem; + padding-right: 8rem; + } + .swagger-ui .ph7-ns { + padding-left: 16rem; + padding-right: 16rem; + } + .swagger-ui .ma0-ns { + margin: 0; + } + .swagger-ui .ma1-ns { + margin: 0.25rem; + } + .swagger-ui .ma2-ns { + margin: 0.5rem; + } + .swagger-ui .ma3-ns { + margin: 1rem; + } + .swagger-ui .ma4-ns { + margin: 2rem; + } + .swagger-ui .ma5-ns { + margin: 4rem; + } + .swagger-ui .ma6-ns { + margin: 8rem; + } + .swagger-ui .ma7-ns { + margin: 16rem; + } + .swagger-ui .ml0-ns { + margin-left: 0; + } + .swagger-ui .ml1-ns { + margin-left: 0.25rem; + } + .swagger-ui .ml2-ns { + margin-left: 0.5rem; + } + .swagger-ui .ml3-ns { + margin-left: 1rem; + } + .swagger-ui .ml4-ns { + margin-left: 2rem; + } + .swagger-ui .ml5-ns { + margin-left: 4rem; + } + .swagger-ui .ml6-ns { + margin-left: 8rem; + } + .swagger-ui .ml7-ns { + margin-left: 16rem; + } + .swagger-ui .mr0-ns { + margin-right: 0; + } + .swagger-ui .mr1-ns { + margin-right: 0.25rem; + } + .swagger-ui .mr2-ns { + margin-right: 0.5rem; + } + .swagger-ui .mr3-ns { + margin-right: 1rem; + } + .swagger-ui .mr4-ns { + margin-right: 2rem; + } + .swagger-ui .mr5-ns { + margin-right: 4rem; + } + .swagger-ui .mr6-ns { + margin-right: 8rem; + } + .swagger-ui .mr7-ns { + margin-right: 16rem; + } + .swagger-ui .mb0-ns { + margin-bottom: 0; + } + .swagger-ui .mb1-ns { + margin-bottom: 0.25rem; + } + .swagger-ui .mb2-ns { + margin-bottom: 0.5rem; + } + .swagger-ui .mb3-ns { + margin-bottom: 1rem; + } + .swagger-ui .mb4-ns { + margin-bottom: 2rem; + } + .swagger-ui .mb5-ns { + margin-bottom: 4rem; + } + .swagger-ui .mb6-ns { + margin-bottom: 8rem; + } + .swagger-ui .mb7-ns { + margin-bottom: 16rem; + } + .swagger-ui .mt0-ns { + margin-top: 0; + } + .swagger-ui .mt1-ns { + margin-top: 0.25rem; + } + .swagger-ui .mt2-ns { + margin-top: 0.5rem; + } + .swagger-ui .mt3-ns { + margin-top: 1rem; + } + .swagger-ui .mt4-ns { + margin-top: 2rem; + } + .swagger-ui .mt5-ns { + margin-top: 4rem; + } + .swagger-ui .mt6-ns { + margin-top: 8rem; + } + .swagger-ui .mt7-ns { + margin-top: 16rem; + } + .swagger-ui .mv0-ns { + margin-bottom: 0; + margin-top: 0; + } + .swagger-ui .mv1-ns { + margin-bottom: 0.25rem; + margin-top: 0.25rem; + } + .swagger-ui .mv2-ns { + margin-bottom: 0.5rem; + margin-top: 0.5rem; + } + .swagger-ui .mv3-ns { + margin-bottom: 1rem; + margin-top: 1rem; + } + .swagger-ui .mv4-ns { + margin-bottom: 2rem; + margin-top: 2rem; + } + .swagger-ui .mv5-ns { + margin-bottom: 4rem; + margin-top: 4rem; + } + .swagger-ui .mv6-ns { + margin-bottom: 8rem; + margin-top: 8rem; + } + .swagger-ui .mv7-ns { + margin-bottom: 16rem; + margin-top: 16rem; + } + .swagger-ui .mh0-ns { + margin-left: 0; + margin-right: 0; + } + .swagger-ui .mh1-ns { + margin-left: 0.25rem; + margin-right: 0.25rem; + } + .swagger-ui .mh2-ns { + margin-left: 0.5rem; + margin-right: 0.5rem; + } + .swagger-ui .mh3-ns { + margin-left: 1rem; + margin-right: 1rem; + } + .swagger-ui .mh4-ns { + margin-left: 2rem; + margin-right: 2rem; + } + .swagger-ui .mh5-ns { + margin-left: 4rem; + margin-right: 4rem; + } + .swagger-ui .mh6-ns { + margin-left: 8rem; + margin-right: 8rem; + } + .swagger-ui .mh7-ns { + margin-left: 16rem; + margin-right: 16rem; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .pa0-m { + padding: 0; + } + .swagger-ui .pa1-m { + padding: 0.25rem; + } + .swagger-ui .pa2-m { + padding: 0.5rem; + } + .swagger-ui .pa3-m { + padding: 1rem; + } + .swagger-ui .pa4-m { + padding: 2rem; + } + .swagger-ui .pa5-m { + padding: 4rem; + } + .swagger-ui .pa6-m { + padding: 8rem; + } + .swagger-ui .pa7-m { + padding: 16rem; + } + .swagger-ui .pl0-m { + padding-left: 0; + } + .swagger-ui .pl1-m { + padding-left: 0.25rem; + } + .swagger-ui .pl2-m { + padding-left: 0.5rem; + } + .swagger-ui .pl3-m { + padding-left: 1rem; + } + .swagger-ui .pl4-m { + padding-left: 2rem; + } + .swagger-ui .pl5-m { + padding-left: 4rem; + } + .swagger-ui .pl6-m { + padding-left: 8rem; + } + .swagger-ui .pl7-m { + padding-left: 16rem; + } + .swagger-ui .pr0-m { + padding-right: 0; + } + .swagger-ui .pr1-m { + padding-right: 0.25rem; + } + .swagger-ui .pr2-m { + padding-right: 0.5rem; + } + .swagger-ui .pr3-m { + padding-right: 1rem; + } + .swagger-ui .pr4-m { + padding-right: 2rem; + } + .swagger-ui .pr5-m { + padding-right: 4rem; + } + .swagger-ui .pr6-m { + padding-right: 8rem; + } + .swagger-ui .pr7-m { + padding-right: 16rem; + } + .swagger-ui .pb0-m { + padding-bottom: 0; + } + .swagger-ui .pb1-m { + padding-bottom: 0.25rem; + } + .swagger-ui .pb2-m { + padding-bottom: 0.5rem; + } + .swagger-ui .pb3-m { + padding-bottom: 1rem; + } + .swagger-ui .pb4-m { + padding-bottom: 2rem; + } + .swagger-ui .pb5-m { + padding-bottom: 4rem; + } + .swagger-ui .pb6-m { + padding-bottom: 8rem; + } + .swagger-ui .pb7-m { + padding-bottom: 16rem; + } + .swagger-ui .pt0-m { + padding-top: 0; + } + .swagger-ui .pt1-m { + padding-top: 0.25rem; + } + .swagger-ui .pt2-m { + padding-top: 0.5rem; + } + .swagger-ui .pt3-m { + padding-top: 1rem; + } + .swagger-ui .pt4-m { + padding-top: 2rem; + } + .swagger-ui .pt5-m { + padding-top: 4rem; + } + .swagger-ui .pt6-m { + padding-top: 8rem; + } + .swagger-ui .pt7-m { + padding-top: 16rem; + } + .swagger-ui .pv0-m { + padding-bottom: 0; + padding-top: 0; + } + .swagger-ui .pv1-m { + padding-bottom: 0.25rem; + padding-top: 0.25rem; + } + .swagger-ui .pv2-m { + padding-bottom: 0.5rem; + padding-top: 0.5rem; + } + .swagger-ui .pv3-m { + padding-bottom: 1rem; + padding-top: 1rem; + } + .swagger-ui .pv4-m { + padding-bottom: 2rem; + padding-top: 2rem; + } + .swagger-ui .pv5-m { + padding-bottom: 4rem; + padding-top: 4rem; + } + .swagger-ui .pv6-m { + padding-bottom: 8rem; + padding-top: 8rem; + } + .swagger-ui .pv7-m { + padding-bottom: 16rem; + padding-top: 16rem; + } + .swagger-ui .ph0-m { + padding-left: 0; + padding-right: 0; + } + .swagger-ui .ph1-m { + padding-left: 0.25rem; + padding-right: 0.25rem; + } + .swagger-ui .ph2-m { + padding-left: 0.5rem; + padding-right: 0.5rem; + } + .swagger-ui .ph3-m { + padding-left: 1rem; + padding-right: 1rem; + } + .swagger-ui .ph4-m { + padding-left: 2rem; + padding-right: 2rem; + } + .swagger-ui .ph5-m { + padding-left: 4rem; + padding-right: 4rem; + } + .swagger-ui .ph6-m { + padding-left: 8rem; + padding-right: 8rem; + } + .swagger-ui .ph7-m { + padding-left: 16rem; + padding-right: 16rem; + } + .swagger-ui .ma0-m { + margin: 0; + } + .swagger-ui .ma1-m { + margin: 0.25rem; + } + .swagger-ui .ma2-m { + margin: 0.5rem; + } + .swagger-ui .ma3-m { + margin: 1rem; + } + .swagger-ui .ma4-m { + margin: 2rem; + } + .swagger-ui .ma5-m { + margin: 4rem; + } + .swagger-ui .ma6-m { + margin: 8rem; + } + .swagger-ui .ma7-m { + margin: 16rem; + } + .swagger-ui .ml0-m { + margin-left: 0; + } + .swagger-ui .ml1-m { + margin-left: 0.25rem; + } + .swagger-ui .ml2-m { + margin-left: 0.5rem; + } + .swagger-ui .ml3-m { + margin-left: 1rem; + } + .swagger-ui .ml4-m { + margin-left: 2rem; + } + .swagger-ui .ml5-m { + margin-left: 4rem; + } + .swagger-ui .ml6-m { + margin-left: 8rem; + } + .swagger-ui .ml7-m { + margin-left: 16rem; + } + .swagger-ui .mr0-m { + margin-right: 0; + } + .swagger-ui .mr1-m { + margin-right: 0.25rem; + } + .swagger-ui .mr2-m { + margin-right: 0.5rem; + } + .swagger-ui .mr3-m { + margin-right: 1rem; + } + .swagger-ui .mr4-m { + margin-right: 2rem; + } + .swagger-ui .mr5-m { + margin-right: 4rem; + } + .swagger-ui .mr6-m { + margin-right: 8rem; + } + .swagger-ui .mr7-m { + margin-right: 16rem; + } + .swagger-ui .mb0-m { + margin-bottom: 0; + } + .swagger-ui .mb1-m { + margin-bottom: 0.25rem; + } + .swagger-ui .mb2-m { + margin-bottom: 0.5rem; + } + .swagger-ui .mb3-m { + margin-bottom: 1rem; + } + .swagger-ui .mb4-m { + margin-bottom: 2rem; + } + .swagger-ui .mb5-m { + margin-bottom: 4rem; + } + .swagger-ui .mb6-m { + margin-bottom: 8rem; + } + .swagger-ui .mb7-m { + margin-bottom: 16rem; + } + .swagger-ui .mt0-m { + margin-top: 0; + } + .swagger-ui .mt1-m { + margin-top: 0.25rem; + } + .swagger-ui .mt2-m { + margin-top: 0.5rem; + } + .swagger-ui .mt3-m { + margin-top: 1rem; + } + .swagger-ui .mt4-m { + margin-top: 2rem; + } + .swagger-ui .mt5-m { + margin-top: 4rem; + } + .swagger-ui .mt6-m { + margin-top: 8rem; + } + .swagger-ui .mt7-m { + margin-top: 16rem; + } + .swagger-ui .mv0-m { + margin-bottom: 0; + margin-top: 0; + } + .swagger-ui .mv1-m { + margin-bottom: 0.25rem; + margin-top: 0.25rem; + } + .swagger-ui .mv2-m { + margin-bottom: 0.5rem; + margin-top: 0.5rem; + } + .swagger-ui .mv3-m { + margin-bottom: 1rem; + margin-top: 1rem; + } + .swagger-ui .mv4-m { + margin-bottom: 2rem; + margin-top: 2rem; + } + .swagger-ui .mv5-m { + margin-bottom: 4rem; + margin-top: 4rem; + } + .swagger-ui .mv6-m { + margin-bottom: 8rem; + margin-top: 8rem; + } + .swagger-ui .mv7-m { + margin-bottom: 16rem; + margin-top: 16rem; + } + .swagger-ui .mh0-m { + margin-left: 0; + margin-right: 0; + } + .swagger-ui .mh1-m { + margin-left: 0.25rem; + margin-right: 0.25rem; + } + .swagger-ui .mh2-m { + margin-left: 0.5rem; + margin-right: 0.5rem; + } + .swagger-ui .mh3-m { + margin-left: 1rem; + margin-right: 1rem; + } + .swagger-ui .mh4-m { + margin-left: 2rem; + margin-right: 2rem; + } + .swagger-ui .mh5-m { + margin-left: 4rem; + margin-right: 4rem; + } + .swagger-ui .mh6-m { + margin-left: 8rem; + margin-right: 8rem; + } + .swagger-ui .mh7-m { + margin-left: 16rem; + margin-right: 16rem; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .pa0-l { + padding: 0; + } + .swagger-ui .pa1-l { + padding: 0.25rem; + } + .swagger-ui .pa2-l { + padding: 0.5rem; + } + .swagger-ui .pa3-l { + padding: 1rem; + } + .swagger-ui .pa4-l { + padding: 2rem; + } + .swagger-ui .pa5-l { + padding: 4rem; + } + .swagger-ui .pa6-l { + padding: 8rem; + } + .swagger-ui .pa7-l { + padding: 16rem; + } + .swagger-ui .pl0-l { + padding-left: 0; + } + .swagger-ui .pl1-l { + padding-left: 0.25rem; + } + .swagger-ui .pl2-l { + padding-left: 0.5rem; + } + .swagger-ui .pl3-l { + padding-left: 1rem; + } + .swagger-ui .pl4-l { + padding-left: 2rem; + } + .swagger-ui .pl5-l { + padding-left: 4rem; + } + .swagger-ui .pl6-l { + padding-left: 8rem; + } + .swagger-ui .pl7-l { + padding-left: 16rem; + } + .swagger-ui .pr0-l { + padding-right: 0; + } + .swagger-ui .pr1-l { + padding-right: 0.25rem; + } + .swagger-ui .pr2-l { + padding-right: 0.5rem; + } + .swagger-ui .pr3-l { + padding-right: 1rem; + } + .swagger-ui .pr4-l { + padding-right: 2rem; + } + .swagger-ui .pr5-l { + padding-right: 4rem; + } + .swagger-ui .pr6-l { + padding-right: 8rem; + } + .swagger-ui .pr7-l { + padding-right: 16rem; + } + .swagger-ui .pb0-l { + padding-bottom: 0; + } + .swagger-ui .pb1-l { + padding-bottom: 0.25rem; + } + .swagger-ui .pb2-l { + padding-bottom: 0.5rem; + } + .swagger-ui .pb3-l { + padding-bottom: 1rem; + } + .swagger-ui .pb4-l { + padding-bottom: 2rem; + } + .swagger-ui .pb5-l { + padding-bottom: 4rem; + } + .swagger-ui .pb6-l { + padding-bottom: 8rem; + } + .swagger-ui .pb7-l { + padding-bottom: 16rem; + } + .swagger-ui .pt0-l { + padding-top: 0; + } + .swagger-ui .pt1-l { + padding-top: 0.25rem; + } + .swagger-ui .pt2-l { + padding-top: 0.5rem; + } + .swagger-ui .pt3-l { + padding-top: 1rem; + } + .swagger-ui .pt4-l { + padding-top: 2rem; + } + .swagger-ui .pt5-l { + padding-top: 4rem; + } + .swagger-ui .pt6-l { + padding-top: 8rem; + } + .swagger-ui .pt7-l { + padding-top: 16rem; + } + .swagger-ui .pv0-l { + padding-bottom: 0; + padding-top: 0; + } + .swagger-ui .pv1-l { + padding-bottom: 0.25rem; + padding-top: 0.25rem; + } + .swagger-ui .pv2-l { + padding-bottom: 0.5rem; + padding-top: 0.5rem; + } + .swagger-ui .pv3-l { + padding-bottom: 1rem; + padding-top: 1rem; + } + .swagger-ui .pv4-l { + padding-bottom: 2rem; + padding-top: 2rem; + } + .swagger-ui .pv5-l { + padding-bottom: 4rem; + padding-top: 4rem; + } + .swagger-ui .pv6-l { + padding-bottom: 8rem; + padding-top: 8rem; + } + .swagger-ui .pv7-l { + padding-bottom: 16rem; + padding-top: 16rem; + } + .swagger-ui .ph0-l { + padding-left: 0; + padding-right: 0; + } + .swagger-ui .ph1-l { + padding-left: 0.25rem; + padding-right: 0.25rem; + } + .swagger-ui .ph2-l { + padding-left: 0.5rem; + padding-right: 0.5rem; + } + .swagger-ui .ph3-l { + padding-left: 1rem; + padding-right: 1rem; + } + .swagger-ui .ph4-l { + padding-left: 2rem; + padding-right: 2rem; + } + .swagger-ui .ph5-l { + padding-left: 4rem; + padding-right: 4rem; + } + .swagger-ui .ph6-l { + padding-left: 8rem; + padding-right: 8rem; + } + .swagger-ui .ph7-l { + padding-left: 16rem; + padding-right: 16rem; + } + .swagger-ui .ma0-l { + margin: 0; + } + .swagger-ui .ma1-l { + margin: 0.25rem; + } + .swagger-ui .ma2-l { + margin: 0.5rem; + } + .swagger-ui .ma3-l { + margin: 1rem; + } + .swagger-ui .ma4-l { + margin: 2rem; + } + .swagger-ui .ma5-l { + margin: 4rem; + } + .swagger-ui .ma6-l { + margin: 8rem; + } + .swagger-ui .ma7-l { + margin: 16rem; + } + .swagger-ui .ml0-l { + margin-left: 0; + } + .swagger-ui .ml1-l { + margin-left: 0.25rem; + } + .swagger-ui .ml2-l { + margin-left: 0.5rem; + } + .swagger-ui .ml3-l { + margin-left: 1rem; + } + .swagger-ui .ml4-l { + margin-left: 2rem; + } + .swagger-ui .ml5-l { + margin-left: 4rem; + } + .swagger-ui .ml6-l { + margin-left: 8rem; + } + .swagger-ui .ml7-l { + margin-left: 16rem; + } + .swagger-ui .mr0-l { + margin-right: 0; + } + .swagger-ui .mr1-l { + margin-right: 0.25rem; + } + .swagger-ui .mr2-l { + margin-right: 0.5rem; + } + .swagger-ui .mr3-l { + margin-right: 1rem; + } + .swagger-ui .mr4-l { + margin-right: 2rem; + } + .swagger-ui .mr5-l { + margin-right: 4rem; + } + .swagger-ui .mr6-l { + margin-right: 8rem; + } + .swagger-ui .mr7-l { + margin-right: 16rem; + } + .swagger-ui .mb0-l { + margin-bottom: 0; + } + .swagger-ui .mb1-l { + margin-bottom: 0.25rem; + } + .swagger-ui .mb2-l { + margin-bottom: 0.5rem; + } + .swagger-ui .mb3-l { + margin-bottom: 1rem; + } + .swagger-ui .mb4-l { + margin-bottom: 2rem; + } + .swagger-ui .mb5-l { + margin-bottom: 4rem; + } + .swagger-ui .mb6-l { + margin-bottom: 8rem; + } + .swagger-ui .mb7-l { + margin-bottom: 16rem; + } + .swagger-ui .mt0-l { + margin-top: 0; + } + .swagger-ui .mt1-l { + margin-top: 0.25rem; + } + .swagger-ui .mt2-l { + margin-top: 0.5rem; + } + .swagger-ui .mt3-l { + margin-top: 1rem; + } + .swagger-ui .mt4-l { + margin-top: 2rem; + } + .swagger-ui .mt5-l { + margin-top: 4rem; + } + .swagger-ui .mt6-l { + margin-top: 8rem; + } + .swagger-ui .mt7-l { + margin-top: 16rem; + } + .swagger-ui .mv0-l { + margin-bottom: 0; + margin-top: 0; + } + .swagger-ui .mv1-l { + margin-bottom: 0.25rem; + margin-top: 0.25rem; + } + .swagger-ui .mv2-l { + margin-bottom: 0.5rem; + margin-top: 0.5rem; + } + .swagger-ui .mv3-l { + margin-bottom: 1rem; + margin-top: 1rem; + } + .swagger-ui .mv4-l { + margin-bottom: 2rem; + margin-top: 2rem; + } + .swagger-ui .mv5-l { + margin-bottom: 4rem; + margin-top: 4rem; + } + .swagger-ui .mv6-l { + margin-bottom: 8rem; + margin-top: 8rem; + } + .swagger-ui .mv7-l { + margin-bottom: 16rem; + margin-top: 16rem; + } + .swagger-ui .mh0-l { + margin-left: 0; + margin-right: 0; + } + .swagger-ui .mh1-l { + margin-left: 0.25rem; + margin-right: 0.25rem; + } + .swagger-ui .mh2-l { + margin-left: 0.5rem; + margin-right: 0.5rem; + } + .swagger-ui .mh3-l { + margin-left: 1rem; + margin-right: 1rem; + } + .swagger-ui .mh4-l { + margin-left: 2rem; + margin-right: 2rem; + } + .swagger-ui .mh5-l { + margin-left: 4rem; + margin-right: 4rem; + } + .swagger-ui .mh6-l { + margin-left: 8rem; + margin-right: 8rem; + } + .swagger-ui .mh7-l { + margin-left: 16rem; + margin-right: 16rem; + } +} +.swagger-ui .na1 { + margin: -0.25rem; +} +.swagger-ui .na2 { + margin: -0.5rem; +} +.swagger-ui .na3 { + margin: -1rem; +} +.swagger-ui .na4 { + margin: -2rem; +} +.swagger-ui .na5 { + margin: -4rem; +} +.swagger-ui .na6 { + margin: -8rem; +} +.swagger-ui .na7 { + margin: -16rem; +} +.swagger-ui .nl1 { + margin-left: -0.25rem; +} +.swagger-ui .nl2 { + margin-left: -0.5rem; +} +.swagger-ui .nl3 { + margin-left: -1rem; +} +.swagger-ui .nl4 { + margin-left: -2rem; +} +.swagger-ui .nl5 { + margin-left: -4rem; +} +.swagger-ui .nl6 { + margin-left: -8rem; +} +.swagger-ui .nl7 { + margin-left: -16rem; +} +.swagger-ui .nr1 { + margin-right: -0.25rem; +} +.swagger-ui .nr2 { + margin-right: -0.5rem; +} +.swagger-ui .nr3 { + margin-right: -1rem; +} +.swagger-ui .nr4 { + margin-right: -2rem; +} +.swagger-ui .nr5 { + margin-right: -4rem; +} +.swagger-ui .nr6 { + margin-right: -8rem; +} +.swagger-ui .nr7 { + margin-right: -16rem; +} +.swagger-ui .nb1 { + margin-bottom: -0.25rem; +} +.swagger-ui .nb2 { + margin-bottom: -0.5rem; +} +.swagger-ui .nb3 { + margin-bottom: -1rem; +} +.swagger-ui .nb4 { + margin-bottom: -2rem; +} +.swagger-ui .nb5 { + margin-bottom: -4rem; +} +.swagger-ui .nb6 { + margin-bottom: -8rem; +} +.swagger-ui .nb7 { + margin-bottom: -16rem; +} +.swagger-ui .nt1 { + margin-top: -0.25rem; +} +.swagger-ui .nt2 { + margin-top: -0.5rem; +} +.swagger-ui .nt3 { + margin-top: -1rem; +} +.swagger-ui .nt4 { + margin-top: -2rem; +} +.swagger-ui .nt5 { + margin-top: -4rem; +} +.swagger-ui .nt6 { + margin-top: -8rem; +} +.swagger-ui .nt7 { + margin-top: -16rem; +} +@media screen and (min-width: 30em) { + .swagger-ui .na1-ns { + margin: -0.25rem; + } + .swagger-ui .na2-ns { + margin: -0.5rem; + } + .swagger-ui .na3-ns { + margin: -1rem; + } + .swagger-ui .na4-ns { + margin: -2rem; + } + .swagger-ui .na5-ns { + margin: -4rem; + } + .swagger-ui .na6-ns { + margin: -8rem; + } + .swagger-ui .na7-ns { + margin: -16rem; + } + .swagger-ui .nl1-ns { + margin-left: -0.25rem; + } + .swagger-ui .nl2-ns { + margin-left: -0.5rem; + } + .swagger-ui .nl3-ns { + margin-left: -1rem; + } + .swagger-ui .nl4-ns { + margin-left: -2rem; + } + .swagger-ui .nl5-ns { + margin-left: -4rem; + } + .swagger-ui .nl6-ns { + margin-left: -8rem; + } + .swagger-ui .nl7-ns { + margin-left: -16rem; + } + .swagger-ui .nr1-ns { + margin-right: -0.25rem; + } + .swagger-ui .nr2-ns { + margin-right: -0.5rem; + } + .swagger-ui .nr3-ns { + margin-right: -1rem; + } + .swagger-ui .nr4-ns { + margin-right: -2rem; + } + .swagger-ui .nr5-ns { + margin-right: -4rem; + } + .swagger-ui .nr6-ns { + margin-right: -8rem; + } + .swagger-ui .nr7-ns { + margin-right: -16rem; + } + .swagger-ui .nb1-ns { + margin-bottom: -0.25rem; + } + .swagger-ui .nb2-ns { + margin-bottom: -0.5rem; + } + .swagger-ui .nb3-ns { + margin-bottom: -1rem; + } + .swagger-ui .nb4-ns { + margin-bottom: -2rem; + } + .swagger-ui .nb5-ns { + margin-bottom: -4rem; + } + .swagger-ui .nb6-ns { + margin-bottom: -8rem; + } + .swagger-ui .nb7-ns { + margin-bottom: -16rem; + } + .swagger-ui .nt1-ns { + margin-top: -0.25rem; + } + .swagger-ui .nt2-ns { + margin-top: -0.5rem; + } + .swagger-ui .nt3-ns { + margin-top: -1rem; + } + .swagger-ui .nt4-ns { + margin-top: -2rem; + } + .swagger-ui .nt5-ns { + margin-top: -4rem; + } + .swagger-ui .nt6-ns { + margin-top: -8rem; + } + .swagger-ui .nt7-ns { + margin-top: -16rem; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .na1-m { + margin: -0.25rem; + } + .swagger-ui .na2-m { + margin: -0.5rem; + } + .swagger-ui .na3-m { + margin: -1rem; + } + .swagger-ui .na4-m { + margin: -2rem; + } + .swagger-ui .na5-m { + margin: -4rem; + } + .swagger-ui .na6-m { + margin: -8rem; + } + .swagger-ui .na7-m { + margin: -16rem; + } + .swagger-ui .nl1-m { + margin-left: -0.25rem; + } + .swagger-ui .nl2-m { + margin-left: -0.5rem; + } + .swagger-ui .nl3-m { + margin-left: -1rem; + } + .swagger-ui .nl4-m { + margin-left: -2rem; + } + .swagger-ui .nl5-m { + margin-left: -4rem; + } + .swagger-ui .nl6-m { + margin-left: -8rem; + } + .swagger-ui .nl7-m { + margin-left: -16rem; + } + .swagger-ui .nr1-m { + margin-right: -0.25rem; + } + .swagger-ui .nr2-m { + margin-right: -0.5rem; + } + .swagger-ui .nr3-m { + margin-right: -1rem; + } + .swagger-ui .nr4-m { + margin-right: -2rem; + } + .swagger-ui .nr5-m { + margin-right: -4rem; + } + .swagger-ui .nr6-m { + margin-right: -8rem; + } + .swagger-ui .nr7-m { + margin-right: -16rem; + } + .swagger-ui .nb1-m { + margin-bottom: -0.25rem; + } + .swagger-ui .nb2-m { + margin-bottom: -0.5rem; + } + .swagger-ui .nb3-m { + margin-bottom: -1rem; + } + .swagger-ui .nb4-m { + margin-bottom: -2rem; + } + .swagger-ui .nb5-m { + margin-bottom: -4rem; + } + .swagger-ui .nb6-m { + margin-bottom: -8rem; + } + .swagger-ui .nb7-m { + margin-bottom: -16rem; + } + .swagger-ui .nt1-m { + margin-top: -0.25rem; + } + .swagger-ui .nt2-m { + margin-top: -0.5rem; + } + .swagger-ui .nt3-m { + margin-top: -1rem; + } + .swagger-ui .nt4-m { + margin-top: -2rem; + } + .swagger-ui .nt5-m { + margin-top: -4rem; + } + .swagger-ui .nt6-m { + margin-top: -8rem; + } + .swagger-ui .nt7-m { + margin-top: -16rem; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .na1-l { + margin: -0.25rem; + } + .swagger-ui .na2-l { + margin: -0.5rem; + } + .swagger-ui .na3-l { + margin: -1rem; + } + .swagger-ui .na4-l { + margin: -2rem; + } + .swagger-ui .na5-l { + margin: -4rem; + } + .swagger-ui .na6-l { + margin: -8rem; + } + .swagger-ui .na7-l { + margin: -16rem; + } + .swagger-ui .nl1-l { + margin-left: -0.25rem; + } + .swagger-ui .nl2-l { + margin-left: -0.5rem; + } + .swagger-ui .nl3-l { + margin-left: -1rem; + } + .swagger-ui .nl4-l { + margin-left: -2rem; + } + .swagger-ui .nl5-l { + margin-left: -4rem; + } + .swagger-ui .nl6-l { + margin-left: -8rem; + } + .swagger-ui .nl7-l { + margin-left: -16rem; + } + .swagger-ui .nr1-l { + margin-right: -0.25rem; + } + .swagger-ui .nr2-l { + margin-right: -0.5rem; + } + .swagger-ui .nr3-l { + margin-right: -1rem; + } + .swagger-ui .nr4-l { + margin-right: -2rem; + } + .swagger-ui .nr5-l { + margin-right: -4rem; + } + .swagger-ui .nr6-l { + margin-right: -8rem; + } + .swagger-ui .nr7-l { + margin-right: -16rem; + } + .swagger-ui .nb1-l { + margin-bottom: -0.25rem; + } + .swagger-ui .nb2-l { + margin-bottom: -0.5rem; + } + .swagger-ui .nb3-l { + margin-bottom: -1rem; + } + .swagger-ui .nb4-l { + margin-bottom: -2rem; + } + .swagger-ui .nb5-l { + margin-bottom: -4rem; + } + .swagger-ui .nb6-l { + margin-bottom: -8rem; + } + .swagger-ui .nb7-l { + margin-bottom: -16rem; + } + .swagger-ui .nt1-l { + margin-top: -0.25rem; + } + .swagger-ui .nt2-l { + margin-top: -0.5rem; + } + .swagger-ui .nt3-l { + margin-top: -1rem; + } + .swagger-ui .nt4-l { + margin-top: -2rem; + } + .swagger-ui .nt5-l { + margin-top: -4rem; + } + .swagger-ui .nt6-l { + margin-top: -8rem; + } + .swagger-ui .nt7-l { + margin-top: -16rem; + } +} +.swagger-ui .collapse { + border-collapse: collapse; + border-spacing: 0; +} +.swagger-ui .striped--light-silver:nth-child(odd) { + background-color: #aaa; +} +.swagger-ui .striped--moon-gray:nth-child(odd) { + background-color: #ccc; +} +.swagger-ui .striped--light-gray:nth-child(odd) { + background-color: #eee; +} +.swagger-ui .striped--near-white:nth-child(odd) { + background-color: #f4f4f4; +} +.swagger-ui .stripe-light:nth-child(odd) { + background-color: hsla(0, 0%, 100%, 0.1); +} +.swagger-ui .stripe-dark:nth-child(odd) { + background-color: rgba(0, 0, 0, 0.1); +} +.swagger-ui .strike { + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.swagger-ui .underline { + -webkit-text-decoration: underline; + text-decoration: underline; +} +.swagger-ui .no-underline { + -webkit-text-decoration: none; + text-decoration: none; +} +@media screen and (min-width: 30em) { + .swagger-ui .strike-ns { + -webkit-text-decoration: line-through; + text-decoration: line-through; + } + .swagger-ui .underline-ns { + -webkit-text-decoration: underline; + text-decoration: underline; + } + .swagger-ui .no-underline-ns { + -webkit-text-decoration: none; + text-decoration: none; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .strike-m { + -webkit-text-decoration: line-through; + text-decoration: line-through; + } + .swagger-ui .underline-m { + -webkit-text-decoration: underline; + text-decoration: underline; + } + .swagger-ui .no-underline-m { + -webkit-text-decoration: none; + text-decoration: none; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .strike-l { + -webkit-text-decoration: line-through; + text-decoration: line-through; + } + .swagger-ui .underline-l { + -webkit-text-decoration: underline; + text-decoration: underline; + } + .swagger-ui .no-underline-l { + -webkit-text-decoration: none; + text-decoration: none; + } +} +.swagger-ui .tl { + text-align: left; +} +.swagger-ui .tr { + text-align: right; +} +.swagger-ui .tc { + text-align: center; +} +.swagger-ui .tj { + text-align: justify; +} +@media screen and (min-width: 30em) { + .swagger-ui .tl-ns { + text-align: left; + } + .swagger-ui .tr-ns { + text-align: right; + } + .swagger-ui .tc-ns { + text-align: center; + } + .swagger-ui .tj-ns { + text-align: justify; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .tl-m { + text-align: left; + } + .swagger-ui .tr-m { + text-align: right; + } + .swagger-ui .tc-m { + text-align: center; + } + .swagger-ui .tj-m { + text-align: justify; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .tl-l { + text-align: left; + } + .swagger-ui .tr-l { + text-align: right; + } + .swagger-ui .tc-l { + text-align: center; + } + .swagger-ui .tj-l { + text-align: justify; + } +} +.swagger-ui .ttc { + text-transform: capitalize; +} +.swagger-ui .ttl { + text-transform: lowercase; +} +.swagger-ui .ttu { + text-transform: uppercase; +} +.swagger-ui .ttn { + text-transform: none; +} +@media screen and (min-width: 30em) { + .swagger-ui .ttc-ns { + text-transform: capitalize; + } + .swagger-ui .ttl-ns { + text-transform: lowercase; + } + .swagger-ui .ttu-ns { + text-transform: uppercase; + } + .swagger-ui .ttn-ns { + text-transform: none; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .ttc-m { + text-transform: capitalize; + } + .swagger-ui .ttl-m { + text-transform: lowercase; + } + .swagger-ui .ttu-m { + text-transform: uppercase; + } + .swagger-ui .ttn-m { + text-transform: none; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .ttc-l { + text-transform: capitalize; + } + .swagger-ui .ttl-l { + text-transform: lowercase; + } + .swagger-ui .ttu-l { + text-transform: uppercase; + } + .swagger-ui .ttn-l { + text-transform: none; + } +} +.swagger-ui .f-6, +.swagger-ui .f-headline { + font-size: 6rem; +} +.swagger-ui .f-5, +.swagger-ui .f-subheadline { + font-size: 5rem; +} +.swagger-ui .f1 { + font-size: 3rem; +} +.swagger-ui .f2 { + font-size: 2.25rem; +} +.swagger-ui .f3 { + font-size: 1.5rem; +} +.swagger-ui .f4 { + font-size: 1.25rem; +} +.swagger-ui .f5 { + font-size: 1rem; +} +.swagger-ui .f6 { + font-size: 0.875rem; +} +.swagger-ui .f7 { + font-size: 0.75rem; +} +@media screen and (min-width: 30em) { + .swagger-ui .f-6-ns, + .swagger-ui .f-headline-ns { + font-size: 6rem; + } + .swagger-ui .f-5-ns, + .swagger-ui .f-subheadline-ns { + font-size: 5rem; + } + .swagger-ui .f1-ns { + font-size: 3rem; + } + .swagger-ui .f2-ns { + font-size: 2.25rem; + } + .swagger-ui .f3-ns { + font-size: 1.5rem; + } + .swagger-ui .f4-ns { + font-size: 1.25rem; + } + .swagger-ui .f5-ns { + font-size: 1rem; + } + .swagger-ui .f6-ns { + font-size: 0.875rem; + } + .swagger-ui .f7-ns { + font-size: 0.75rem; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .f-6-m, + .swagger-ui .f-headline-m { + font-size: 6rem; + } + .swagger-ui .f-5-m, + .swagger-ui .f-subheadline-m { + font-size: 5rem; + } + .swagger-ui .f1-m { + font-size: 3rem; + } + .swagger-ui .f2-m { + font-size: 2.25rem; + } + .swagger-ui .f3-m { + font-size: 1.5rem; + } + .swagger-ui .f4-m { + font-size: 1.25rem; + } + .swagger-ui .f5-m { + font-size: 1rem; + } + .swagger-ui .f6-m { + font-size: 0.875rem; + } + .swagger-ui .f7-m { + font-size: 0.75rem; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .f-6-l, + .swagger-ui .f-headline-l { + font-size: 6rem; + } + .swagger-ui .f-5-l, + .swagger-ui .f-subheadline-l { + font-size: 5rem; + } + .swagger-ui .f1-l { + font-size: 3rem; + } + .swagger-ui .f2-l { + font-size: 2.25rem; + } + .swagger-ui .f3-l { + font-size: 1.5rem; + } + .swagger-ui .f4-l { + font-size: 1.25rem; + } + .swagger-ui .f5-l { + font-size: 1rem; + } + .swagger-ui .f6-l { + font-size: 0.875rem; + } + .swagger-ui .f7-l { + font-size: 0.75rem; + } +} +.swagger-ui .measure { + max-width: 30em; +} +.swagger-ui .measure-wide { + max-width: 34em; +} +.swagger-ui .measure-narrow { + max-width: 20em; +} +.swagger-ui .indent { + margin-bottom: 0; + margin-top: 0; + text-indent: 1em; +} +.swagger-ui .small-caps { + font-feature-settings: "smcp"; + font-variant: small-caps; +} +.swagger-ui .truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +@media screen and (min-width: 30em) { + .swagger-ui .measure-ns { + max-width: 30em; + } + .swagger-ui .measure-wide-ns { + max-width: 34em; + } + .swagger-ui .measure-narrow-ns { + max-width: 20em; + } + .swagger-ui .indent-ns { + margin-bottom: 0; + margin-top: 0; + text-indent: 1em; + } + .swagger-ui .small-caps-ns { + font-feature-settings: "smcp"; + font-variant: small-caps; + } + .swagger-ui .truncate-ns { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .measure-m { + max-width: 30em; + } + .swagger-ui .measure-wide-m { + max-width: 34em; + } + .swagger-ui .measure-narrow-m { + max-width: 20em; + } + .swagger-ui .indent-m { + margin-bottom: 0; + margin-top: 0; + text-indent: 1em; + } + .swagger-ui .small-caps-m { + font-feature-settings: "smcp"; + font-variant: small-caps; + } + .swagger-ui .truncate-m { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .measure-l { + max-width: 30em; + } + .swagger-ui .measure-wide-l { + max-width: 34em; + } + .swagger-ui .measure-narrow-l { + max-width: 20em; + } + .swagger-ui .indent-l { + margin-bottom: 0; + margin-top: 0; + text-indent: 1em; + } + .swagger-ui .small-caps-l { + font-feature-settings: "smcp"; + font-variant: small-caps; + } + .swagger-ui .truncate-l { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } +} +.swagger-ui .overflow-container { + overflow-y: scroll; +} +.swagger-ui .center { + margin-left: auto; + margin-right: auto; +} +.swagger-ui .mr-auto { + margin-right: auto; +} +.swagger-ui .ml-auto { + margin-left: auto; +} +@media screen and (min-width: 30em) { + .swagger-ui .center-ns { + margin-left: auto; + margin-right: auto; + } + .swagger-ui .mr-auto-ns { + margin-right: auto; + } + .swagger-ui .ml-auto-ns { + margin-left: auto; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .center-m { + margin-left: auto; + margin-right: auto; + } + .swagger-ui .mr-auto-m { + margin-right: auto; + } + .swagger-ui .ml-auto-m { + margin-left: auto; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .center-l { + margin-left: auto; + margin-right: auto; + } + .swagger-ui .mr-auto-l { + margin-right: auto; + } + .swagger-ui .ml-auto-l { + margin-left: auto; + } +} +.swagger-ui .clip { + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); + position: fixed !important; + _position: absolute !important; +} +@media screen and (min-width: 30em) { + .swagger-ui .clip-ns { + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); + position: fixed !important; + _position: absolute !important; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .clip-m { + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); + position: fixed !important; + _position: absolute !important; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .clip-l { + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); + position: fixed !important; + _position: absolute !important; + } +} +.swagger-ui .ws-normal { + white-space: normal; +} +.swagger-ui .nowrap { + white-space: nowrap; +} +.swagger-ui .pre { + white-space: pre; +} +@media screen and (min-width: 30em) { + .swagger-ui .ws-normal-ns { + white-space: normal; + } + .swagger-ui .nowrap-ns { + white-space: nowrap; + } + .swagger-ui .pre-ns { + white-space: pre; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .ws-normal-m { + white-space: normal; + } + .swagger-ui .nowrap-m { + white-space: nowrap; + } + .swagger-ui .pre-m { + white-space: pre; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .ws-normal-l { + white-space: normal; + } + .swagger-ui .nowrap-l { + white-space: nowrap; + } + .swagger-ui .pre-l { + white-space: pre; + } +} +.swagger-ui .v-base { + vertical-align: baseline; +} +.swagger-ui .v-mid { + vertical-align: middle; +} +.swagger-ui .v-top { + vertical-align: top; +} +.swagger-ui .v-btm { + vertical-align: bottom; +} +@media screen and (min-width: 30em) { + .swagger-ui .v-base-ns { + vertical-align: baseline; + } + .swagger-ui .v-mid-ns { + vertical-align: middle; + } + .swagger-ui .v-top-ns { + vertical-align: top; + } + .swagger-ui .v-btm-ns { + vertical-align: bottom; + } +} +@media screen and (min-width: 30em) and (max-width: 60em) { + .swagger-ui .v-base-m { + vertical-align: baseline; + } + .swagger-ui .v-mid-m { + vertical-align: middle; + } + .swagger-ui .v-top-m { + vertical-align: top; + } + .swagger-ui .v-btm-m { + vertical-align: bottom; + } +} +@media screen and (min-width: 60em) { + .swagger-ui .v-base-l { + vertical-align: baseline; + } + .swagger-ui .v-mid-l { + vertical-align: middle; + } + .swagger-ui .v-top-l { + vertical-align: top; + } + .swagger-ui .v-btm-l { + vertical-align: bottom; + } +} +.swagger-ui .dim { + opacity: 1; + transition: opacity 0.15s ease-in; +} +.swagger-ui .dim:focus, +.swagger-ui .dim:hover { + opacity: 0.5; + transition: opacity 0.15s ease-in; +} +.swagger-ui .dim:active { + opacity: 0.8; + transition: opacity 0.15s ease-out; +} +.swagger-ui .glow { + transition: opacity 0.15s ease-in; +} +.swagger-ui .glow:focus, +.swagger-ui .glow:hover { + opacity: 1; + transition: opacity 0.15s ease-in; +} +.swagger-ui .hide-child .child { + opacity: 0; + transition: opacity 0.15s ease-in; +} +.swagger-ui .hide-child:active .child, +.swagger-ui .hide-child:focus .child, +.swagger-ui .hide-child:hover .child { + opacity: 1; + transition: opacity 0.15s ease-in; +} +.swagger-ui .underline-hover:focus, +.swagger-ui .underline-hover:hover { + -webkit-text-decoration: underline; + text-decoration: underline; +} +.swagger-ui .grow { + -moz-osx-font-smoothing: grayscale; + backface-visibility: hidden; + transform: translateZ(0); + transition: transform 0.25s ease-out; +} +.swagger-ui .grow:focus, +.swagger-ui .grow:hover { + transform: scale(1.05); +} +.swagger-ui .grow:active { + transform: scale(0.9); +} +.swagger-ui .grow-large { + -moz-osx-font-smoothing: grayscale; + backface-visibility: hidden; + transform: translateZ(0); + transition: transform 0.25s ease-in-out; +} +.swagger-ui .grow-large:focus, +.swagger-ui .grow-large:hover { + transform: scale(1.2); +} +.swagger-ui .grow-large:active { + transform: scale(0.95); +} +.swagger-ui .pointer:hover { + cursor: pointer; +} +.swagger-ui .shadow-hover { + cursor: pointer; + position: relative; + transition: all 0.5s cubic-bezier(0.165, 0.84, 0.44, 1); +} +.swagger-ui .shadow-hover:after { + border-radius: inherit; + box-shadow: 0 0 16px 2px rgba(0, 0, 0, 0.2); + content: ""; + height: 100%; + left: 0; + opacity: 0; + position: absolute; + top: 0; + transition: opacity 0.5s cubic-bezier(0.165, 0.84, 0.44, 1); + width: 100%; + z-index: -1; +} +.swagger-ui .shadow-hover:focus:after, +.swagger-ui .shadow-hover:hover:after { + opacity: 1; +} +.swagger-ui .bg-animate, +.swagger-ui .bg-animate:focus, +.swagger-ui .bg-animate:hover { + transition: background-color 0.15s ease-in-out; +} +.swagger-ui .z-0 { + z-index: 0; +} +.swagger-ui .z-1 { + z-index: 1; +} +.swagger-ui .z-2 { + z-index: 2; +} +.swagger-ui .z-3 { + z-index: 3; +} +.swagger-ui .z-4 { + z-index: 4; +} +.swagger-ui .z-5 { + z-index: 5; +} +.swagger-ui .z-999 { + z-index: 999; +} +.swagger-ui .z-9999 { + z-index: 9999; +} +.swagger-ui .z-max { + z-index: 2147483647; +} +.swagger-ui .z-inherit { + z-index: inherit; +} +.swagger-ui .z-initial, +.swagger-ui .z-unset { + z-index: auto; +} +.swagger-ui .nested-copy-line-height ol, +.swagger-ui .nested-copy-line-height p, +.swagger-ui .nested-copy-line-height ul { + line-height: 1.5; +} +.swagger-ui .nested-headline-line-height h1, +.swagger-ui .nested-headline-line-height h2, +.swagger-ui .nested-headline-line-height h3, +.swagger-ui .nested-headline-line-height h4, +.swagger-ui .nested-headline-line-height h5, +.swagger-ui .nested-headline-line-height h6 { + line-height: 1.25; +} +.swagger-ui .nested-list-reset ol, +.swagger-ui .nested-list-reset ul { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} +.swagger-ui .nested-copy-indent p + p { + margin-bottom: 0; + margin-top: 0; + text-indent: 0.1em; +} +.swagger-ui .nested-copy-seperator p + p { + margin-top: 1.5em; +} +.swagger-ui .nested-img img { + display: block; + max-width: 100%; + width: 100%; +} +.swagger-ui .nested-links a { + color: #357edd; + transition: color 0.15s ease-in; +} +.swagger-ui .nested-links a:focus, +.swagger-ui .nested-links a:hover { + color: #96ccff; + transition: color 0.15s ease-in; +} +.swagger-ui .wrapper { + box-sizing: border-box; + margin: 0 auto; + max-width: 1460px; + padding: 0 20px; + width: 100%; +} +.swagger-ui .wrapper section section.models.is-open { + background-color: #272a35; +} +.swagger-ui .wrapper section section div { + background-color: #272a35; +} +.swagger-ui .wrapper section section div.no-margin div { + background-color: #1e2129; +} +.swagger-ui .wrapper section div { + background-color: #1e2129; +} +.swagger-ui .opblock-tag-section { + display: flex; + flex-direction: column; +} +.swagger-ui .try-out.btn-group { + display: flex; + flex: 0.1 2 auto; + padding: 0; +} +.swagger-ui .try-out__btn { + margin-left: 1.25rem; +} +.swagger-ui .opblock-tag { + align-items: center; + border-bottom: 1px solid rgba(59, 65, 81, 0.3); + cursor: pointer; + display: flex; + padding: 10px 20px 10px 10px; + transition: all 0.2s; +} +.swagger-ui .opblock-tag:hover { + background: rgba(0, 0, 0, 0.02); +} +.swagger-ui .opblock-tag { + color: #8b8d95; + font-family: sans-serif; + font-size: 24px; + margin: 0 0 5px; +} +.swagger-ui .opblock-tag.no-desc span { + flex: 1; +} +.swagger-ui .opblock-tag svg { + transition: all 0.4s; +} +.swagger-ui .opblock-tag small { + color: #8b8d95; + flex: 2; + font-family: sans-serif; + font-size: 14px; + font-weight: 400; + padding: 0 10px; +} +.swagger-ui .opblock-tag > div { + flex: 1 1 150px; + font-weight: 400; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +@media (max-width: 640px) { + .swagger-ui .opblock-tag small, + .swagger-ui .opblock-tag > div { + flex: 1; + } +} +.swagger-ui .opblock-tag .info__externaldocs { + text-align: right; +} +.swagger-ui .parameter__type { + color: #8b8d95; + font-family: monospace; + font-size: 12px; + font-weight: 600; + padding: 5px 0; +} +.swagger-ui .parameter-controls { + margin-top: 0.75em; +} +.swagger-ui .examples__title { + display: block; + font-size: 1.1em; + font-weight: 700; + margin-bottom: 0.75em; +} +.swagger-ui .examples__section { + margin-top: 1.5em; +} +.swagger-ui .examples__section-header { + font-size: 0.9rem; + font-weight: 700; + margin-bottom: 0.5rem; +} +.swagger-ui .examples-select { + display: inline-block; + margin-bottom: 0.75em; +} +.swagger-ui .examples-select .examples-select-element { + width: 100%; +} +.swagger-ui .examples-select__section-label { + font-size: 0.9rem; + font-weight: 700; + margin-right: 0.5rem; +} +.swagger-ui .example__section { + margin-top: 1.5em; +} +.swagger-ui .example__section-header { + font-size: 0.9rem; + font-weight: 700; + margin-bottom: 0.5rem; +} +.swagger-ui .view-line-link { + cursor: pointer; + margin: 0 5px; + position: relative; + top: 3px; + transition: all 0.5s; + width: 20px; +} +.swagger-ui .opblock { + border: 1px solid #000; + border-radius: 4px; + box-shadow: 0 0 3px rgba(0, 0, 0, 0.19); + margin: 0 0 15px; +} +.swagger-ui .opblock .tab-header { + display: flex; + flex: 1; +} +.swagger-ui .opblock .tab-header .tab-item { + cursor: pointer; + padding: 0 40px; +} +.swagger-ui .opblock .tab-header .tab-item:first-of-type { + padding: 0 40px 0 0; +} +.swagger-ui .opblock .tab-header .tab-item.active h4 span { + position: relative; +} +.swagger-ui .opblock .tab-header .tab-item.active h4 span:after { + background: gray; + bottom: -15px; + content: ""; + height: 4px; + left: 50%; + position: absolute; + transform: translateX(-50%); + width: 120%; +} +.swagger-ui .opblock.is-open .opblock-summary { + border-bottom: 1px solid #000; +} +.swagger-ui .opblock .opblock-section-header { + align-items: center; + background: #1e2129; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + display: flex; + min-height: 50px; + padding: 8px 20px; +} +.swagger-ui .opblock .opblock-section-header > label { + align-items: center; + color: #8b8d95; + display: flex; + font-family: sans-serif; + font-size: 12px; + font-weight: 700; + margin: 0 0 0 auto; +} +.swagger-ui .opblock .opblock-section-header > label > span { + padding: 0 10px 0 0; +} +.swagger-ui .opblock .opblock-section-header h4 { + color: #8b8d95; + flex: 1; + font-family: sans-serif; + font-size: 14px; + margin: 0; +} +.swagger-ui .opblock .opblock-summary-method { + background: #000; + border-radius: 3px; + color: #fff; + font-family: sans-serif; + font-size: 14px; + font-weight: 700; + min-width: 80px; + padding: 6px 0; + text-align: center; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1); +} +@media (max-width: 768px) { + .swagger-ui .opblock .opblock-summary-method { + font-size: 12px; + } +} +.swagger-ui .opblock .opblock-summary-operation-id, +.swagger-ui .opblock .opblock-summary-path, +.swagger-ui .opblock .opblock-summary-path__deprecated { + align-items: center; + color: #8b8d95; + display: flex; + font-family: monospace; + font-size: 16px; + font-weight: 600; + word-break: break-word; +} +@media (max-width: 768px) { + .swagger-ui .opblock .opblock-summary-operation-id, + .swagger-ui .opblock .opblock-summary-path, + .swagger-ui .opblock .opblock-summary-path__deprecated { + font-size: 12px; + } +} +.swagger-ui .opblock .opblock-summary-path { + flex-shrink: 0; +} +@media (max-width: 640px) { + .swagger-ui .opblock .opblock-summary-path { + flex-shrink: 1; + max-width: 100%; + } +} +.swagger-ui .opblock .opblock-summary-path__deprecated { + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.swagger-ui .opblock .opblock-summary-operation-id { + font-size: 14px; +} +.swagger-ui .opblock .opblock-summary-description { + color: #8b8d95; + font-family: sans-serif; + font-size: 13px; + word-break: break-word; +} +.swagger-ui .opblock .opblock-summary-path-description-wrapper { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 0 10px; + padding: 0 10px; + width: 100%; +} +@media (max-width: 550px) { + .swagger-ui .opblock .opblock-summary-path-description-wrapper { + align-items: start; + flex-direction: column; + } +} +.swagger-ui .opblock .opblock-summary { + align-items: center; + cursor: pointer; + display: flex; + padding: 5px; +} +.swagger-ui .opblock .opblock-summary .view-line-link { + cursor: pointer; + margin: 0; + position: relative; + top: 2px; + transition: all 0.5s; + width: 0; +} +.swagger-ui .opblock .opblock-summary:hover .view-line-link { + margin: 0 5px; + width: 18px; +} +.swagger-ui .opblock .opblock-summary:hover .view-line-link.copy-to-clipboard { + width: 24px; +} +.swagger-ui .opblock.opblock-post { + background: rgba(73, 204, 144, 0.1); + border-color: #49cc90; +} +.swagger-ui .opblock.opblock-post .opblock-summary-method { + background: #49cc90; +} +.swagger-ui .opblock.opblock-post .opblock-summary { + border-color: #49cc90; +} +.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after { + background: #49cc90; +} +.swagger-ui .opblock.opblock-put { + background: rgba(252, 161, 48, 0.1); + border-color: #fca130; +} +.swagger-ui .opblock.opblock-put .opblock-summary-method { + background: #fca130; +} +.swagger-ui .opblock.opblock-put .opblock-summary { + border-color: #fca130; +} +.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after { + background: #fca130; +} +.swagger-ui .opblock.opblock-delete { + background: rgba(249, 62, 62, 0.1); + border-color: #f93e3e; +} +.swagger-ui .opblock.opblock-delete .opblock-summary-method { + background: #f93e3e; +} +.swagger-ui .opblock.opblock-delete .opblock-summary { + border-color: #f93e3e; +} +.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after { + background: #f93e3e; +} +.swagger-ui .opblock.opblock-get { + background: rgba(97, 175, 254, 0.1); + border-color: #61affe; +} +.swagger-ui .opblock.opblock-get .opblock-summary-method { + background: #61affe; +} +.swagger-ui .opblock.opblock-get .opblock-summary { + border-color: #61affe; +} +.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after { + background: #61affe; +} +.swagger-ui .opblock.opblock-patch { + background: rgba(80, 227, 194, 0.1); + border-color: #50e3c2; +} +.swagger-ui .opblock.opblock-patch .opblock-summary-method { + background: #50e3c2; +} +.swagger-ui .opblock.opblock-patch .opblock-summary { + border-color: #50e3c2; +} +.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after { + background: #50e3c2; +} +.swagger-ui .opblock.opblock-head { + background: rgba(144, 18, 254, 0.1); + border-color: #9012fe; +} +.swagger-ui .opblock.opblock-head .opblock-summary-method { + background: #9012fe; +} +.swagger-ui .opblock.opblock-head .opblock-summary { + border-color: #9012fe; +} +.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after { + background: #9012fe; +} +.swagger-ui .opblock.opblock-options { + background: rgba(13, 90, 167, 0.1); + border-color: #0d5aa7; +} +.swagger-ui .opblock.opblock-options .opblock-summary-method { + background: #0d5aa7; +} +.swagger-ui .opblock.opblock-options .opblock-summary { + border-color: #0d5aa7; +} +.swagger-ui + .opblock.opblock-options + .tab-header + .tab-item.active + h4 + span:after { + background: #0d5aa7; +} +.swagger-ui .opblock.opblock-deprecated { + background: hsla(0, 0%, 92%, 0.1); + border-color: #ebebeb; + opacity: 0.6; +} +.swagger-ui .opblock.opblock-deprecated .opblock-summary-method { + background: #ebebeb; +} +.swagger-ui .opblock.opblock-deprecated .opblock-summary { + border-color: #ebebeb; +} +.swagger-ui + .opblock.opblock-deprecated + .tab-header + .tab-item.active + h4 + span:after { + background: #ebebeb; +} +.swagger-ui .opblock .opblock-schemes { + padding: 8px 20px; +} +.swagger-ui .opblock .opblock-schemes .schemes-title { + padding: 0 10px 0 0; +} +.swagger-ui .filter .operation-filter-input { + border: 2px solid #d8dde7; + margin: 20px 0; + padding: 10px; + width: 100%; +} +.swagger-ui .download-url-wrapper .failed, +.swagger-ui .filter .failed { + color: red; +} +.swagger-ui .download-url-wrapper .loading, +.swagger-ui .filter .loading { + color: #aaa; +} +.swagger-ui .model-example { + margin-top: 1em; +} +.swagger-ui .tab { + display: flex; + list-style: none; + padding: 0; +} +.swagger-ui .tab li { + color: #8b8d95; + cursor: pointer; + font-family: sans-serif; + font-size: 12px; + min-width: 60px; + padding: 0; +} +.swagger-ui .tab li:first-of-type { + padding-left: 0; + padding-right: 12px; + position: relative; +} +.swagger-ui .tab li:first-of-type:after { + background: rgba(0, 0, 0, 0.2); + content: ""; + height: 100%; + position: absolute; + right: 6px; + top: 0; + width: 1px; +} +.swagger-ui .tab li.active { + font-weight: 700; +} +.swagger-ui .tab li button.tablinks { + background: none; + border: 0; + color: inherit; + font-family: inherit; + font-weight: inherit; + padding: 0; +} +.swagger-ui .opblock-description-wrapper, +.swagger-ui .opblock-external-docs-wrapper, +.swagger-ui .opblock-title_normal { + color: #8b8d95; + font-family: sans-serif; + font-size: 12px; + margin: 0 0 5px; + padding: 15px 20px; +} +.swagger-ui .opblock-description-wrapper h4, +.swagger-ui .opblock-external-docs-wrapper h4, +.swagger-ui .opblock-title_normal h4 { + color: #8b8d95; + font-family: sans-serif; + font-size: 12px; + margin: 0 0 5px; +} +.swagger-ui .opblock-description-wrapper p, +.swagger-ui .opblock-external-docs-wrapper p, +.swagger-ui .opblock-title_normal p { + color: #8b8d95; + font-family: sans-serif; + font-size: 14px; + margin: 0; +} +.swagger-ui .opblock-external-docs-wrapper h4 { + padding-left: 0; +} +.swagger-ui .execute-wrapper { + padding: 20px; + text-align: right; +} +.swagger-ui .execute-wrapper .btn { + padding: 8px 40px; + width: 100%; +} +.swagger-ui .body-param-options { + display: flex; + flex-direction: column; +} +.swagger-ui .body-param-options .body-param-edit { + padding: 10px 0; +} +.swagger-ui .body-param-options label { + padding: 8px 0; +} +.swagger-ui .body-param-options label select { + margin: 3px 0 0; +} +.swagger-ui .responses-inner { + padding: 20px; +} +.swagger-ui .responses-inner h4, +.swagger-ui .responses-inner h5 { + color: #8b8d95; + font-family: sans-serif; + font-size: 12px; + margin: 10px 0 5px; +} +.swagger-ui .responses-inner .curl { + white-space: normal; +} +.swagger-ui .response-col_status { + color: #8b8d95; + font-family: sans-serif; + font-size: 14px; +} +.swagger-ui .response-col_status .response-undocumented { + color: #909090; + font-family: monospace; + font-size: 11px; + font-weight: 600; +} +.swagger-ui .response-col_links { + color: #8b8d95; + font-family: sans-serif; + font-size: 14px; + max-width: 40em; + padding-left: 2em; +} +.swagger-ui .response-col_links .response-undocumented { + color: #909090; + font-family: monospace; + font-size: 11px; + font-weight: 600; +} +.swagger-ui .response-col_links .operation-link { + margin-bottom: 1.5em; +} +.swagger-ui .response-col_links .operation-link .description { + margin-bottom: 0.5em; +} +.swagger-ui .opblock-body .opblock-loading-animation { + display: block; + margin: 3em auto; +} +.swagger-ui .opblock-body pre.microlight { + word-wrap: break-word; + background: #333; + border-radius: 4px; + color: #fff; + font-family: monospace; + font-size: 12px; + font-weight: 600; + -webkit-hyphens: auto; + hyphens: auto; + margin: 0; + padding: 10px; + white-space: pre-wrap; + word-break: break-all; + word-break: break-word; +} +.swagger-ui .opblock-body pre.microlight .headerline { + display: block; +} +.swagger-ui .highlight-code { + position: relative; +} +.swagger-ui .highlight-code > .microlight { + max-height: 400px; + min-height: 6em; + overflow-y: auto; +} +.swagger-ui .highlight-code > .microlight code { + white-space: pre-wrap !important; + word-break: break-all; +} +.swagger-ui .curl-command { + position: relative; +} +.swagger-ui .download-contents { + align-items: center; + background: #7d8293; + border: none; + border-radius: 4px; + bottom: 10px; + color: #fff; + display: flex; + font-family: sans-serif; + font-size: 14px; + font-weight: 600; + height: 30px; + justify-content: center; + padding: 5px; + position: absolute; + right: 10px; + text-align: center; +} +.swagger-ui .scheme-container { + background: #272a35; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15); + margin: 0 0 20px; + padding: 30px 0; +} +.swagger-ui .scheme-container .schemes { + align-items: flex-end; + display: flex; + flex-wrap: wrap; + gap: 10px; + justify-content: space-between; +} +.swagger-ui .scheme-container .schemes > label { + color: #8b8d95; + display: flex; + flex-direction: column; + font-family: sans-serif; + font-size: 12px; + font-weight: 700; + margin: -20px 15px 0 0; +} +.swagger-ui .scheme-container .schemes > label select { + min-width: 130px; + text-transform: uppercase; +} +.swagger-ui .scheme-container .schemes .auth-wrapper { + flex: none; + justify-content: none; +} +.swagger-ui .scheme-container .schemes .auth-wrapper .authorize { + display: flex; + flex-wrap: nowrap; + margin: 0; + padding-right: 20px; +} +.swagger-ui .loading-container { + align-items: center; + display: flex; + flex-direction: column; + justify-content: center; + margin-top: 1em; + min-height: 1px; + padding: 40px 0 60px; +} +.swagger-ui .loading-container .loading { + position: relative; +} +.swagger-ui .loading-container .loading:after { + color: #8b8d95; + content: "loading"; + font-family: sans-serif; + font-size: 10px; + font-weight: 700; + left: 50%; + position: absolute; + text-transform: uppercase; + top: 50%; + transform: translate(-50%, -50%); +} +.swagger-ui .loading-container .loading:before { + animation: rotation 1s linear infinite, opacity 0.5s; + backface-visibility: hidden; + border: 2px solid rgba(85, 85, 85, 0.1); + border-radius: 100%; + border-top-color: rgba(0, 0, 0, 0.6); + content: ""; + display: block; + height: 60px; + left: 50%; + margin: -30px; + opacity: 1; + position: absolute; + top: 50%; + width: 60px; +} +@keyframes rotation { + to { + transform: rotate(1turn); + } +} +.swagger-ui .response-controls { + display: flex; + padding-top: 1em; +} +.swagger-ui .response-control-media-type { + margin-right: 1em; +} +.swagger-ui .response-control-media-type--accept-controller select { + border-color: green; +} +.swagger-ui .response-control-media-type__accept-message { + color: green; + font-size: 0.7em; +} +.swagger-ui .response-control-examples__title, +.swagger-ui .response-control-media-type__title { + display: block; + font-size: 0.7em; + margin-bottom: 0.2em; +} +@keyframes blinker { + 50% { + opacity: 0; + } +} +.swagger-ui .hidden { + display: none; +} +.swagger-ui .no-margin { + border: none; + height: auto; + margin: 0; + padding: 0; +} +.swagger-ui .float-right { + float: right; +} +.swagger-ui .svg-assets { + height: 0; + position: absolute; + width: 0; +} +.swagger-ui section h3 { + color: #8b8d95; + font-family: sans-serif; +} +.swagger-ui a.nostyle { + display: inline; +} +.swagger-ui a.nostyle, +.swagger-ui a.nostyle:visited { + color: inherit; + cursor: pointer; + text-decoration: inherit; +} +.swagger-ui .fallback { + color: #aaa; + padding: 1em; +} +.swagger-ui .version-pragma { + height: 100%; + padding: 5em 0; +} +.swagger-ui .version-pragma__message { + display: flex; + font-size: 1.2em; + height: 100%; + justify-content: center; + line-height: 1.5em; + padding: 0 0.6em; + text-align: center; +} +.swagger-ui .version-pragma__message > div { + flex: 1; + max-width: 55ch; +} +.swagger-ui .version-pragma__message code { + background-color: #dedede; + padding: 4px 4px 2px; + white-space: pre; +} +.swagger-ui .opblock-link { + font-weight: 400; +} +.swagger-ui .opblock-link.shown { + font-weight: 700; +} +.swagger-ui span.token-string { + color: #555; +} +.swagger-ui span.token-not-formatted { + color: #555; + font-weight: 700; +} +.swagger-ui .btn { + background: transparent; + border: 2px solid gray; + border-radius: 4px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + color: #8b8d95; + font-family: sans-serif; + font-size: 14px; + font-weight: 700; + padding: 5px 23px; + transition: all 0.3s; +} +.swagger-ui .btn.btn-sm { + font-size: 12px; + padding: 4px 23px; +} +.swagger-ui .btn[disabled] { + cursor: not-allowed; + opacity: 0.3; +} +.swagger-ui .btn:hover { + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} +.swagger-ui .btn.cancel { + background-color: transparent; + border-color: #ff6060; + color: #ff6060; + font-family: sans-serif; +} +.swagger-ui .btn.authorize { + background-color: transparent; + border-color: #49cc90; + color: #49cc90; + display: inline; + line-height: 1; +} +.swagger-ui .btn.authorize span { + float: left; + padding: 4px 20px 0 0; +} +.swagger-ui .btn.authorize svg { + fill: #49cc90; +} +.swagger-ui .btn.execute { + background-color: #4990e2; + border-color: #4990e2; + color: #fff; +} +.swagger-ui .btn-group { + display: flex; + padding: 30px; +} +.swagger-ui .btn-group .btn { + flex: 1; +} +.swagger-ui .btn-group .btn:first-child { + border-radius: 4px 0 0 4px; +} +.swagger-ui .btn-group .btn:last-child { + border-radius: 0 4px 4px 0; +} +.swagger-ui .authorization__btn { + background: none; + border: none; + padding: 0 0 0 10px; +} +.swagger-ui .authorization__btn .locked { + opacity: 1; +} +.swagger-ui .authorization__btn .unlocked { + opacity: 0.4; +} +.swagger-ui .model-box-control, +.swagger-ui .models-control, +.swagger-ui .opblock-summary-control { + all: inherit; + border-bottom: 0; + cursor: pointer; + flex: 1; + padding: 0; +} +.swagger-ui .model-box-control:focus, +.swagger-ui .models-control:focus, +.swagger-ui .opblock-summary-control:focus { + outline: auto; +} +.swagger-ui .expand-methods, +.swagger-ui .expand-operation { + background: none; + border: none; +} +.swagger-ui .expand-methods svg, +.swagger-ui .expand-operation svg { + height: 20px; + width: 20px; +} +.swagger-ui .expand-methods { + padding: 0 10px; +} +.swagger-ui .expand-methods:hover svg { + fill: #404040; +} +.swagger-ui .expand-methods svg { + fill: #707070; + transition: all 0.3s; +} +.swagger-ui button { + cursor: pointer; +} +.swagger-ui button.invalid { + animation: shake 0.4s 1; + background: #feebeb; + border-color: #f93e3e; +} +.swagger-ui .copy-to-clipboard { + align-items: center; + background: #7d8293; + border: none; + border-radius: 4px; + bottom: 10px; + display: flex; + height: 30px; + justify-content: center; + position: absolute; + right: 100px; + width: 30px; +} +.swagger-ui .copy-to-clipboard button { + background: url('data:image/svg+xml;charset=utf-8,') + 50% no-repeat; + border: none; + flex-grow: 1; + flex-shrink: 1; + height: 25px; +} +.swagger-ui .copy-to-clipboard:active { + background: #5e626f; +} +.swagger-ui .opblock-control-arrow { + background: none; + border: none; + text-align: center; +} +.swagger-ui .curl-command .copy-to-clipboard { + bottom: 5px; + height: 20px; + right: 10px; + width: 20px; +} +.swagger-ui .curl-command .copy-to-clipboard button { + height: 18px; +} +.swagger-ui .opblock .opblock-summary .view-line-link.copy-to-clipboard { + height: 26px; + position: static; +} +.swagger-ui select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: #3b3b3b + url('data:image/svg+xml;charset=utf-8,') + right 10px center no-repeat; + background-size: 20px; + border: 2px solid #41444e; + border-radius: 4px; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.25); + color: #8b8d95; + font-family: sans-serif; + font-size: 14px; + font-weight: 700; + padding: 5px 40px 5px 10px; +} +.swagger-ui select[multiple] { + background: #3b3b3b; + margin: 5px 0; + padding: 5px; +} +.swagger-ui select.invalid { + animation: shake 0.4s 1; + background: #feebeb; + border-color: #f93e3e; +} +.swagger-ui .opblock-body select { + min-width: 230px; +} +@media (max-width: 768px) { + .swagger-ui .opblock-body select { + min-width: 180px; + } +} +@media (max-width: 640px) { + .swagger-ui .opblock-body select { + min-width: 100%; + width: 100%; + } +} +.swagger-ui label { + color: #8b8d95; + font-family: sans-serif; + font-size: 12px; + font-weight: 700; + margin: 0 0 5px; +} +.swagger-ui input[type="email"], +.swagger-ui input[type="file"], +.swagger-ui input[type="password"], +.swagger-ui input[type="search"], +.swagger-ui input[type="text"] { + line-height: 1; +} +@media (max-width: 768px) { + .swagger-ui input[type="email"], + .swagger-ui input[type="file"], + .swagger-ui input[type="password"], + .swagger-ui input[type="search"], + .swagger-ui input[type="text"] { + max-width: 175px; + } +} +.swagger-ui input[type="email"], +.swagger-ui input[type="file"], +.swagger-ui input[type="password"], +.swagger-ui input[type="search"], +.swagger-ui input[type="text"], +.swagger-ui textarea { + background: #8b8d95; + border: 1px solid #8b8d95; + border-radius: 4px; + margin: 5px 0; + min-width: 100px; + padding: 8px 10px; +} +.swagger-ui input[type="email"].invalid, +.swagger-ui input[type="file"].invalid, +.swagger-ui input[type="password"].invalid, +.swagger-ui input[type="search"].invalid, +.swagger-ui input[type="text"].invalid, +.swagger-ui textarea.invalid { + animation: shake 0.4s 1; + background: #feebeb; + border-color: #f93e3e; +} +.swagger-ui input[disabled], +.swagger-ui select[disabled], +.swagger-ui textarea[disabled] { + background-color: #3b3b3b; + color: #8b8d95; + cursor: not-allowed; +} +.swagger-ui select[disabled] { + border-color: #888; +} +.swagger-ui textarea[disabled] { + background-color: #41444e; + color: #fff; +} +@keyframes shake { + 10%, + 90% { + transform: translate3d(-1px, 0, 0); + } + 20%, + 80% { + transform: translate3d(2px, 0, 0); + } + 30%, + 50%, + 70% { + transform: translate3d(-4px, 0, 0); + } + 40%, + 60% { + transform: translate3d(4px, 0, 0); + } +} +.swagger-ui textarea { + background: hsla(0, 0%, 100%, 0.8); + border: none; + border-radius: 4px; + color: #8b8d95; + font-family: monospace; + font-size: 12px; + font-weight: 600; + min-height: 280px; + outline: none; + padding: 10px; + width: 100%; +} +.swagger-ui textarea:focus { + border: 2px solid #61affe; +} +.swagger-ui textarea.curl { + background: #41444e; + border-radius: 4px; + color: #fff; + font-family: monospace; + font-size: 12px; + font-weight: 600; + margin: 0; + min-height: 100px; + padding: 10px; + resize: none; +} +.swagger-ui .checkbox { + color: #303030; + padding: 5px 0 10px; + transition: opacity 0.5s; +} +.swagger-ui .checkbox label { + display: flex; +} +.swagger-ui .checkbox p { + color: #8b8d95; + font-family: monospace; + font-style: italic; + font-weight: 400 !important; + font-weight: 600; + margin: 0 !important; +} +.swagger-ui .checkbox input[type="checkbox"] { + display: none; +} +.swagger-ui .checkbox input[type="checkbox"] + label > .item { + background: #e8e8e8; + border-radius: 1px; + box-shadow: 0 0 0 2px #e8e8e8; + cursor: pointer; + display: inline-block; + flex: none; + height: 16px; + margin: 0 8px 0 0; + padding: 5px; + position: relative; + top: 3px; + width: 16px; +} +.swagger-ui .checkbox input[type="checkbox"] + label > .item:active { + transform: scale(0.9); +} +.swagger-ui .checkbox input[type="checkbox"]:checked + label > .item { + background: #e8e8e8 + url('data:image/svg+xml;charset=utf-8,') + 50% no-repeat; +} +.swagger-ui .dialog-ux { + bottom: 0; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 9999; +} +.swagger-ui .dialog-ux .backdrop-ux { + background: rgba(0, 0, 0, 0.8); + bottom: 0; + left: 0; + position: fixed; + right: 0; + top: 0; +} +.swagger-ui .dialog-ux .modal-ux { + background: #fff; + border: 1px solid #ebebeb; + border-radius: 4px; + box-shadow: 0 10px 30px 0 rgba(0, 0, 0, 0.2); + left: 50%; + max-width: 650px; + min-width: 300px; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + width: 100%; + z-index: 9999; +} +.swagger-ui .dialog-ux .modal-ux-content { + max-height: 540px; + overflow-y: auto; + padding: 20px; +} +.swagger-ui .dialog-ux .modal-ux-content p { + color: #41444e; + color: #8b8d95; + font-family: sans-serif; + font-size: 12px; + margin: 0 0 5px; +} +.swagger-ui .dialog-ux .modal-ux-content h4 { + color: #8b8d95; + font-family: sans-serif; + font-size: 18px; + font-weight: 600; + margin: 15px 0 0; +} +.swagger-ui .dialog-ux .modal-ux-header { + align-items: center; + border-bottom: 1px solid #ebebeb; + display: flex; + padding: 12px 0; +} +.swagger-ui .dialog-ux .modal-ux-header .close-modal { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: none; + border: none; + padding: 0 10px; +} +.swagger-ui .dialog-ux .modal-ux-header h3 { + color: #8b8d95; + flex: 1; + font-family: sans-serif; + font-size: 20px; + font-weight: 600; + margin: 0; + padding: 0 20px; +} +.swagger-ui .model { + color: #8b8d95; + font-family: monospace; + font-size: 12px; + font-weight: 300; + font-weight: 600; +} +.swagger-ui .model .deprecated span, +.swagger-ui .model .deprecated td { + color: #a0a0a0 !important; +} +.swagger-ui .model .deprecated > td:first-of-type { + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.swagger-ui .model-toggle { + cursor: pointer; + display: inline-block; + font-size: 10px; + margin: auto 0.3em; + position: relative; + top: 6px; + transform: rotate(90deg); + transform-origin: 50% 50%; + transition: transform 0.15s ease-in; +} +.swagger-ui .model-toggle.collapsed { + transform: rotate(0deg); +} +.swagger-ui .model-toggle:after { + background: url('data:image/svg+xml;charset=utf-8,') + 50% no-repeat; + background-size: 100%; + content: ""; + display: block; + height: 20px; + width: 20px; +} +.swagger-ui .model-jump-to-path { + cursor: pointer; + position: relative; +} +.swagger-ui .model-jump-to-path .view-line-link { + cursor: pointer; + position: absolute; + top: -0.4em; +} +.swagger-ui .model-title { + position: relative; +} +.swagger-ui .model-title:hover .model-hint { + visibility: visible; +} +.swagger-ui .model-hint { + background: rgba(0, 0, 0, 0.7); + border-radius: 4px; + color: #ebebeb; + padding: 0.1em 0.5em; + position: absolute; + top: -1.8em; + visibility: hidden; + white-space: nowrap; +} +.swagger-ui .model p { + margin: 0 0 1em; +} +.swagger-ui .model .property { + color: #999; + font-style: italic; +} +.swagger-ui .model .property.primitive { + color: #6b6b6b; +} +.swagger-ui .model .external-docs, +.swagger-ui table.model tr.description { + color: #666; + font-weight: 400; +} +.swagger-ui table.model tr.description { + color: #666; + font-weight: 400; +} +.swagger-ui table.model tr.description td:first-child, +.swagger-ui table.model tr.property-row.required td:first-child { + font-weight: 700; +} +.swagger-ui table.model tr.property-row td { + vertical-align: top; +} +.swagger-ui table.model tr.property-row td:first-child { + padding-right: 0.2em; +} +.swagger-ui table.model tr.property-row .star { + color: red; +} +.swagger-ui table.model tr.extension { + color: #777; +} +.swagger-ui table.model tr.extension td:last-child { + vertical-align: top; +} +.swagger-ui table.model tr.external-docs td:first-child { + font-weight: 700; +} +.swagger-ui table.model tr .renderedMarkdown p:first-child { + margin-top: 0; +} +.swagger-ui section.models { + border: 1px solid rgba(59, 65, 81, 0.3); + border-radius: 4px; + margin: 30px 0; +} +.swagger-ui section.models .pointer { + cursor: pointer; +} +.swagger-ui section.models.is-open { + padding: 0 0 20px; +} +.swagger-ui section.models.is-open h4 { + border-bottom: 1px solid rgba(59, 65, 81, 0.3); + margin: 0 0 5px; +} +.swagger-ui section.models h4 { + align-items: center; + color: #8b8d95; + cursor: pointer; + display: flex; + font-family: sans-serif; + font-size: 16px; + margin: 0; + padding: 10px 20px 10px 10px; + transition: all 0.2s; +} +.swagger-ui section.models h4 svg { + transition: all 0.4s; +} +.swagger-ui section.models h4 span { + flex: 1; +} +.swagger-ui section.models h4:hover { + background: rgba(0, 0, 0, 0.02); +} +.swagger-ui section.models h5 { + color: #707070; + font-family: sans-serif; + font-size: 16px; + margin: 0 0 10px; +} +.swagger-ui section.models .model-jump-to-path { + position: relative; + top: 5px; +} +.swagger-ui section.models .model-container { + background: rgba(0, 0, 0, 0.05); + border-radius: 4px; + margin: 0 20px 15px; + position: relative; + transition: all 0.5s; +} +.swagger-ui section.models .model-container:hover { + /* background: rgba(0, 0, 0, 0.07); */ +} +.swagger-ui section.models .model-container:first-of-type { + margin: 20px; +} +.swagger-ui section.models .model-container:last-of-type { + margin: 0 20px; +} +.swagger-ui section.models .model-container .models-jump-to-path { + opacity: 0.65; + position: absolute; + right: 5px; + top: 8px; +} +.swagger-ui section.models .model-box { + background: none; +} +.swagger-ui .model-box { + background: rgba(0, 0, 0, 0.1); + border-radius: 4px; + display: inline-block; + padding: 10px; +} +.swagger-ui .model-box .model-jump-to-path { + position: relative; + top: 4px; +} +.swagger-ui .model-box.deprecated { + opacity: 0.5; +} +.swagger-ui .model-title { + color: #505050; + font-family: sans-serif; + font-size: 16px; +} +.swagger-ui .model-title img { + bottom: 0; + margin-left: 1em; + position: relative; +} +.swagger-ui .model-deprecated-warning { + color: #f93e3e; + font-family: sans-serif; + font-size: 16px; + font-weight: 600; + margin-right: 1em; +} +.swagger-ui span > span.model .brace-close { + padding: 0 0 0 10px; +} +.swagger-ui .prop-name { + display: inline-block; + margin-right: 1em; +} +.swagger-ui .prop-type { + color: #55a; +} +.swagger-ui .prop-enum { + display: block; +} +.swagger-ui .prop-format { + color: #8b8d95; +} +.swagger-ui .servers > label { + color: #8b8d95; + font-family: sans-serif; + font-size: 12px; + margin: -20px 15px 0 0; +} +.swagger-ui .servers > label select { + max-width: 100%; + min-width: 130px; + width: 100%; +} +.swagger-ui .servers h4.message { + padding-bottom: 2em; +} +.swagger-ui .servers table tr { + width: 30em; +} +.swagger-ui .servers table td { + display: inline-block; + max-width: 15em; + padding-bottom: 10px; + padding-top: 10px; + vertical-align: middle; + border-top: none; +} +.swagger-ui .servers table td:first-of-type { + padding-right: 1em; + padding-left: 1em; +} +.swagger-ui .servers table td input { + height: 100%; + width: 100%; +} +.swagger-ui .servers .computed-url { + margin: 2em 0; +} +.swagger-ui .servers .computed-url code { + display: inline-block; + font-size: 16px; + margin: 0 1em; + padding: 4px; +} +.swagger-ui .servers-title { + font-size: 12px; + font-weight: 700; +} +.swagger-ui .operation-servers h4.message { + margin-bottom: 2em; +} +.swagger-ui table { + border-collapse: collapse; + padding: 0 10px; + width: 100%; +} +.swagger-ui table.model tbody tr td { + padding: 0; + vertical-align: top; +} +.swagger-ui table.model tbody tr td:first-of-type { + padding: 0 0 0 2em; + width: 174px; +} +.swagger-ui table.headers td { + color: #8b8d95; + font-family: monospace; + font-size: 12px; + font-weight: 300; + font-weight: 600; + vertical-align: middle; +} +.swagger-ui table.headers .header-example { + color: #999; + font-style: italic; +} +.swagger-ui table tbody tr td { + padding: 10px 0 0; + vertical-align: top; +} +.swagger-ui table tbody tr td:first-of-type { + min-width: 6em; + padding: 10px 0; +} +.swagger-ui table thead tr td, +.swagger-ui table thead tr th { + border-bottom: 1px solid rgba(59, 65, 81, 0.2); + color: #8b8d95; + font-family: sans-serif; + font-size: 12px; + font-weight: 700; + padding: 12px 0; + text-align: left; +} +.swagger-ui .parameters-col_description { + margin-bottom: 2em; + width: 99%; +} +.swagger-ui .parameters-col_description input { + max-width: 340px; + width: 100%; +} +.swagger-ui .parameters-col_description select { + border-width: 1px; +} +.swagger-ui .parameters-col_description .markdown p, +.swagger-ui .parameters-col_description .renderedMarkdown p { + margin: 0; +} +.swagger-ui .parameter__name { + color: #8b8d95; + font-family: sans-serif; + font-size: 16px; + font-weight: 400; + margin-right: 0.75em; +} +.swagger-ui .parameter__name.required { + font-weight: 700; +} +.swagger-ui .parameter__name.required span { + color: red; +} +.swagger-ui .parameter__name.required:after { + color: rgba(255, 0, 0, 0.6); + content: "required"; + font-size: 10px; + padding: 5px; + position: relative; + top: -6px; +} +.swagger-ui .parameter__extension, +.swagger-ui .parameter__in { + color: gray; + font-family: monospace; + font-size: 12px; + font-style: italic; + font-weight: 600; +} +.swagger-ui .parameter__deprecated { + color: red; + font-family: monospace; + font-size: 12px; + font-style: italic; + font-weight: 600; +} +.swagger-ui .parameter__empty_value_toggle { + display: block; + font-size: 13px; + padding-bottom: 12px; + padding-top: 5px; +} +.swagger-ui .parameter__empty_value_toggle input { + margin-right: 7px; + width: auto; +} +.swagger-ui .parameter__empty_value_toggle.disabled { + opacity: 0.7; +} +.swagger-ui .table-container { + padding: 20px; +} +.swagger-ui .response-col_description { + width: 99%; +} +.swagger-ui .response-col_description .markdown p, +.swagger-ui .response-col_description .renderedMarkdown p { + margin: 0; +} +.swagger-ui .response-col_links { + min-width: 6em; +} +.swagger-ui .response__extension { + color: gray; + font-family: monospace; + font-size: 12px; + font-style: italic; + font-weight: 600; +} +.swagger-ui .topbar { + background-color: #1b1b1b; + padding: 10px 0; +} +.swagger-ui .topbar .topbar-wrapper { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 10px; +} +@media (max-width: 550px) { + .swagger-ui .topbar .topbar-wrapper { + align-items: start; + flex-direction: column; + } +} +.swagger-ui .topbar a { + align-items: center; + color: #fff; + display: flex; + flex: 1; + font-family: sans-serif; + font-size: 1.5em; + font-weight: 700; + max-width: 300px; + -webkit-text-decoration: none; + text-decoration: none; +} +.swagger-ui .topbar a span { + margin: 0; + padding: 0 10px; +} +.swagger-ui .topbar .download-url-wrapper { + display: flex; + flex: 3; + justify-content: flex-end; +} +.swagger-ui .topbar .download-url-wrapper input[type="text"] { + border: 2px solid #62a03f; + border-radius: 4px 0 0 4px; + margin: 0; + max-width: 100%; + outline: none; + width: 100%; +} +.swagger-ui .topbar .download-url-wrapper .select-label { + align-items: center; + color: #f0f0f0; + display: flex; + margin: 0; + max-width: 600px; + width: 100%; +} +.swagger-ui .topbar .download-url-wrapper .select-label span { + flex: 1; + font-size: 16px; + padding: 0 10px 0 0; + text-align: right; +} +.swagger-ui .topbar .download-url-wrapper .select-label select { + border: 2px solid #62a03f; + box-shadow: none; + flex: 2; + outline: none; + width: 100%; +} +.swagger-ui .topbar .download-url-wrapper .download-url-button { + background: #62a03f; + border: none; + border-radius: 0 4px 4px 0; + color: #fff; + font-family: sans-serif; + font-size: 16px; + font-weight: 700; + padding: 4px 30px; +} +@media (max-width: 550px) { + .swagger-ui .topbar .download-url-wrapper { + width: 100%; + } +} +.swagger-ui .info { + margin: 50px 0; +} +.swagger-ui .info.failed-config { + margin-left: auto; + margin-right: auto; + max-width: 880px; + text-align: center; +} +.swagger-ui .info hgroup.main { + margin: 0 0 20px; +} +.swagger-ui .info hgroup.main a { + font-size: 12px; +} +.swagger-ui .info pre { + font-size: 14px; +} +.swagger-ui .info li, +.swagger-ui .info p, +.swagger-ui .info table { + color: #8b8d95; + font-family: sans-serif; + font-size: 14px; +} +.swagger-ui .info h1, +.swagger-ui .info h2, +.swagger-ui .info h3, +.swagger-ui .info h4, +.swagger-ui .info h5 { + color: #8b8d95; + font-family: sans-serif; +} +.swagger-ui .info a { + color: #4990e2; + font-family: sans-serif; + font-size: 14px; + transition: all 0.4s; +} +.swagger-ui .info a:hover { + color: #1f69c0; +} +.swagger-ui .info > div { + margin: 0 0 5px; +} +.swagger-ui .info .base-url { + color: #8b8d95; + font-family: monospace; + font-size: 12px; + font-weight: 300 !important; + font-weight: 600; + margin: 0; +} +.swagger-ui .info .title { + color: #8b8d95; + font-family: sans-serif; + font-size: 36px; + margin: 0; +} +.swagger-ui .info .title small { + background: #7d8492; + border-radius: 57px; + display: inline-block; + font-size: 10px; + margin: 0 0 0 5px; + padding: 2px 4px; + position: relative; + top: -5px; + vertical-align: super; +} +.swagger-ui .info .title small.version-stamp { + background-color: #89bf04; +} +.swagger-ui .info .title small pre { + color: #fff; + font-family: sans-serif; + margin: 0; + padding: 0; +} +.swagger-ui .auth-btn-wrapper { + display: flex; + justify-content: center; + padding: 10px 0; +} +.swagger-ui .auth-btn-wrapper .btn-done { + margin-right: 1em; +} +.swagger-ui .auth-wrapper { + display: flex; + flex: 1; + justify-content: flex-end; +} +.swagger-ui .auth-wrapper .authorize { + margin-left: 10px; + margin-right: 10px; + padding-right: 20px; +} +.swagger-ui .auth-container { + border-bottom: 1px solid #ebebeb; + margin: 0 0 10px; + padding: 10px 20px; +} +.swagger-ui .auth-container:last-of-type { + border: 0; + margin: 0; + padding: 10px 20px; +} +.swagger-ui .auth-container h4 { + margin: 5px 0 15px !important; +} +.swagger-ui .auth-container .wrapper { + margin: 0; + padding: 0; +} +.swagger-ui .auth-container input[type="password"], +.swagger-ui .auth-container input[type="text"] { + min-width: 230px; +} +.swagger-ui .auth-container .errors { + background-color: #fee; + border-radius: 4px; + color: red; + color: #8b8d95; + font-family: monospace; + font-size: 12px; + font-weight: 600; + margin: 1em; + padding: 10px; +} +.swagger-ui .auth-container .errors b { + margin-right: 1em; + text-transform: capitalize; +} +.swagger-ui .scopes h2 { + color: #8b8d95; + font-family: sans-serif; + font-size: 14px; +} +.swagger-ui .scopes h2 a { + color: #4990e2; + cursor: pointer; + font-size: 12px; + padding-left: 10px; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.swagger-ui .scope-def { + padding: 0 0 20px; +} +.swagger-ui .errors-wrapper { + animation: scaleUp 0.5s; + background: rgba(249, 62, 62, 0.1); + border: 2px solid #f93e3e; + border-radius: 4px; + margin: 20px; + padding: 10px 20px; +} +.swagger-ui .errors-wrapper .error-wrapper { + margin: 0 0 10px; +} +.swagger-ui .errors-wrapper .errors h4 { + color: #8b8d95; + font-family: monospace; + font-size: 14px; + font-weight: 600; + margin: 0; +} +.swagger-ui .errors-wrapper .errors small { + color: #8b8d95; +} +.swagger-ui .errors-wrapper .errors .message { + white-space: pre-line; +} +.swagger-ui .errors-wrapper .errors .message.thrown { + max-width: 100%; +} +.swagger-ui .errors-wrapper .errors .error-line { + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.swagger-ui .errors-wrapper hgroup { + align-items: center; + display: flex; +} +.swagger-ui .errors-wrapper hgroup h4 { + color: #8b8d95; + flex: 1; + font-family: sans-serif; + font-size: 20px; + margin: 0; +} +@keyframes scaleUp { + 0% { + opacity: 0; + transform: scale(0.8); + } + to { + opacity: 1; + transform: scale(1); + } +} +.swagger-ui .Resizer.vertical.disabled { + display: none; +} +.swagger-ui .markdown p, +.swagger-ui .markdown pre, +.swagger-ui .renderedMarkdown p, +.swagger-ui .renderedMarkdown pre { + margin: 1em auto; + word-break: break-all; + word-break: break-word; +} +.swagger-ui .markdown pre, +.swagger-ui .renderedMarkdown pre { + background: none; + color: #000; + font-weight: 400; + padding: 0; + white-space: pre-wrap; +} +.swagger-ui .markdown code, +.swagger-ui .renderedMarkdown code { + background: rgba(0, 0, 0, 0.05); + border-radius: 4px; + color: #9012fe; + font-family: monospace; + font-size: 14px; + font-weight: 600; + padding: 5px 7px; +} +.swagger-ui .markdown pre > code, +.swagger-ui .renderedMarkdown pre > code { + display: block; +} +.swagger-ui .json-schema-2020-12 { + background-color: rgba(0, 0, 0, 0.05); + border-radius: 4px; + margin: 0 20px 15px; + padding: 12px 0 12px 20px; +} +.swagger-ui .json-schema-2020-12:first-of-type { + margin: 20px; +} +.swagger-ui .json-schema-2020-12:last-of-type { + margin: 0 20px; +} +.swagger-ui .json-schema-2020-12--embedded { + background-color: inherit; + padding-bottom: 0; + padding-left: inherit; + padding-right: inherit; + padding-top: 0; +} +.swagger-ui .json-schema-2020-12-body { + border-left: 1px dashed rgba(0, 0, 0, 0.1); + margin: 2px 0; +} +.swagger-ui .json-schema-2020-12-body--collapsed { + display: none; +} +.swagger-ui .json-schema-2020-12-accordion { + border: none; + outline: none; + padding-left: 0; +} +.swagger-ui .json-schema-2020-12-accordion__children { + display: inline-block; +} +.swagger-ui .json-schema-2020-12-accordion__icon { + display: inline-block; + height: 18px; + vertical-align: bottom; + width: 18px; +} +.swagger-ui .json-schema-2020-12-accordion__icon--expanded { + transform: rotate(-90deg); + transform-origin: 50% 50%; + transition: transform 0.15s ease-in; +} +.swagger-ui .json-schema-2020-12-accordion__icon--collapsed { + transform: rotate(0deg); + transform-origin: 50% 50%; + transition: transform 0.15s ease-in; +} +.swagger-ui .json-schema-2020-12-accordion__icon svg { + height: 20px; + width: 20px; +} +.swagger-ui .json-schema-2020-12-expand-deep-button { + border: none; + color: #505050; + color: #afaeae; + font-family: sans-serif; + font-size: 12px; + padding-right: 0; +} +.swagger-ui .json-schema-2020-12-keyword { + margin: 5px 0; +} +.swagger-ui .json-schema-2020-12-keyword__children { + border-left: 1px dashed rgba(0, 0, 0, 0.1); + margin: 0 0 0 20px; + padding: 0; +} +.swagger-ui .json-schema-2020-12-keyword__children--collapsed { + display: none; +} +.swagger-ui .json-schema-2020-12-keyword__name { + font-size: 12px; + font-weight: 700; + margin-left: 20px; +} +.swagger-ui .json-schema-2020-12-keyword__name--primary { + color: #8b8d95; + font-style: normal; +} +.swagger-ui .json-schema-2020-12-keyword__name--secondary { + color: #6b6b6b; + font-style: italic; +} +.swagger-ui .json-schema-2020-12-keyword__value { + color: #6b6b6b; + font-size: 12px; + font-style: italic; + font-weight: 400; +} +.swagger-ui .json-schema-2020-12-keyword__value--primary { + color: #8b8d95; + font-style: normal; +} +.swagger-ui .json-schema-2020-12-keyword__value--secondary { + color: #6b6b6b; + font-style: italic; +} +.swagger-ui .json-schema-2020-12-keyword__value--const, +.swagger-ui .json-schema-2020-12-keyword__value--warning { + border: 1px dashed #6b6b6b; + border-radius: 4px; + color: #8b8d95; + color: #6b6b6b; + display: inline-block; + font-family: monospace; + font-style: normal; + font-weight: 600; + line-height: 1.5; + margin-left: 10px; + padding: 1px 4px; +} +.swagger-ui .json-schema-2020-12-keyword__value--warning { + border: 1px dashed red; + color: red; +} +.swagger-ui + .json-schema-2020-12-keyword__name--secondary + + .json-schema-2020-12-keyword__value--secondary:before { + content: "="; +} +.swagger-ui .json-schema-2020-12__attribute { + color: #8b8d95; + font-family: monospace; + font-size: 12px; + padding-left: 10px; + text-transform: lowercase; +} +.swagger-ui .json-schema-2020-12__attribute--primary { + color: #55a; +} +.swagger-ui .json-schema-2020-12__attribute--muted { + color: gray; +} +.swagger-ui .json-schema-2020-12__attribute--warning { + color: red; +} +.swagger-ui .json-schema-2020-12-keyword--\$vocabulary ul { + border-left: 1px dashed rgba(0, 0, 0, 0.1); + margin: 0 0 0 20px; +} +.swagger-ui .json-schema-2020-12-\$vocabulary-uri { + margin-left: 35px; +} +.swagger-ui .json-schema-2020-12-\$vocabulary-uri--disabled { + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.swagger-ui .json-schema-2020-12-keyword--description { + color: #6b6b6b; + font-size: 12px; + margin-left: 20px; +} +.swagger-ui .json-schema-2020-12-keyword--description p { + margin: 0; +} +.swagger-ui .json-schema-2020-12__title { + color: #505050; + display: inline-block; + font-family: sans-serif; + font-size: 12px; + font-weight: 700; + line-height: normal; +} +.swagger-ui .json-schema-2020-12__title .json-schema-2020-12-keyword__name { + margin: 0; +} +.swagger-ui .json-schema-2020-12-property { + margin: 7px 0; +} +.swagger-ui .json-schema-2020-12-property .json-schema-2020-12__title { + color: #8b8d95; + font-family: monospace; + font-size: 12px; + font-weight: 600; + vertical-align: middle; +} +.swagger-ui .json-schema-2020-12-keyword--properties > ul { + border: none; + margin: 0; + padding: 0; +} +.swagger-ui .json-schema-2020-12-property { + list-style-type: none; +} +.swagger-ui + .json-schema-2020-12-property--required + > .json-schema-2020-12:first-of-type + > .json-schema-2020-12-head + .json-schema-2020-12__title:after { + color: red; + content: "*"; + font-weight: 700; +} +.swagger-ui .json-schema-2020-12-keyword--patternProperties ul { + border: none; + margin: 0; + padding: 0; +} +.swagger-ui + .json-schema-2020-12-keyword--patternProperties + .json-schema-2020-12__title:first-of-type:after, +.swagger-ui + .json-schema-2020-12-keyword--patternProperties + .json-schema-2020-12__title:first-of-type:before { + color: #55a; + content: "/"; +} +.swagger-ui .json-schema-2020-12-keyword--enum > ul { + display: inline-block; + margin: 0; + padding: 0; +} +.swagger-ui .json-schema-2020-12-keyword--enum > ul li { + display: inline; + list-style-type: none; +} +.swagger-ui .json-schema-2020-12__constraint { + background-color: #805ad5; + border-radius: 4px; + color: #8b8d95; + color: #fff; + font-family: monospace; + font-weight: 600; + line-height: 1.5; + margin-left: 10px; + padding: 1px 3px; +} +.swagger-ui .json-schema-2020-12__constraint--string { + background-color: #d69e2e; + color: #fff; +} +.swagger-ui .json-schema-2020-12-keyword--dependentRequired > ul { + display: inline-block; + margin: 0; + padding: 0; +} +.swagger-ui .json-schema-2020-12-keyword--dependentRequired > ul li { + display: inline; + list-style-type: none; +} +.swagger-ui + .model-box + .json-schema-2020-12:not(.json-schema-2020-12--embedded) + > .json-schema-2020-12-head + .json-schema-2020-12__title:first-of-type { + font-size: 16px; +} +.swagger-ui .model-box > .json-schema-2020-12 { + margin: 0; +} +.swagger-ui .model-box .json-schema-2020-12 { + background-color: transparent; + padding: 0; +} +.swagger-ui .model-box .json-schema-2020-12-accordion, +.swagger-ui .model-box .json-schema-2020-12-expand-deep-button { + background-color: transparent; +} +.swagger-ui + .models + .json-schema-2020-12:not(.json-schema-2020-12--embedded) + > .json-schema-2020-12-head + .json-schema-2020-12__title:first-of-type { + font-size: 16px; +} + +/*# sourceMappingURL=swagger-ui.css.map*/ diff --git a/docs/assets/css/swagger-ui.css.map b/docs/assets/css/swagger-ui.css.map new file mode 100644 index 000000000..76a2ab51a --- /dev/null +++ b/docs/assets/css/swagger-ui.css.map @@ -0,0 +1 @@ +{"version":3,"file":"swagger-ui.css","mappings":"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,CDrDb,oDC8BW,CD7BX,oDC8BW,CD7BX,oDC8BW,CD7BX,oDC8BW,CD7BX,oDC8BW,CD7BX,oDC8BW,CD7BX,oDC8BW,CD7BX,oDC8BW,CD7BX,oDC8BW,CD7BX,qDC8BW,CD7BX,uDC8BY,CD7BZ,wDC8Ba,CD5Bb,6CCyCW,CDxCX,wCCyCM,CDxCN,8CCyCY,CDxCZ,2CCyCS,CDxCT,yCCyCO,CDxCP,wCCyCS,CDxCT,iDCyCe,CDxCf,2CCyCS,CDxCT,iDCyCe,CDxCf,8CCyCY,CDxCZ,6CCyCW,CDxCX,yCCyCO,CDxCP,+CCyCa,CDxCb,+CCyCa,CDxCb,0CCyCQ,CDxCR,gDCyCc,CDxCd,yCCyCO,CDxCP,8CCyCY,CDxCZ,yCCyCO,CDxCP,+CCyCa,CDxCb,kDCyCgB,CDxChB,gDCyCc,CDxCd,iDCyCe,CDxCf,kDCyCgB,CDxChB,+CCyCa,CDvCb,oDCVc,CDWd,6CE3DE,gCDmBmB,CClBnB,sCDmBgB,CClBhB,qCDmBgB,CClBhB,oCDmBgB,CClBhB,mCDmBgB,CClBhB,sCDmBqB,CClBrB,yCDmBmB,CClBnB,wBACI,yBACA,0BAEJ,qBACI,4BACA,6BAEJ,uBAEI,4BADA,wBACA,CAEJ,sBAEI,6BADA,yBACA,CAGN,mCACE,mCDNmB,CCOnB,yCDNgB,CCOhB,wCDNgB,CCOhB,uCDNgB,CCOhB,sCDNgB,CCOhB,yCDNqB,CCOrB,4CDNmB,CCOnB,2BACI,yBACA,0BAEJ,wBACI,4BACA,6BAEJ,0BAEI,4BADA,wBACA,CAEJ,yBAEI,6BADA,yBACA,EAIN,uDACE,kCDhCmB,CCiCnB,wCDhCgB,CCiChB,uCDhCgB,CCiChB,sCDhCgB,CCiChB,qCDhCgB,CCiChB,wCDhCqB,CCiCrB,2CDhCmB,CCiCnB,0BACI,yBACA,0BAEJ,uBACI,4BACA,6BAEJ,yBAEI,4BADA,wBACA,CAEJ,wBAEI,6BADA,yBACA,EAIN,mCACE,kCD1DmB,CC2DnB,wCD1DgB,CC2DhB,uCD1DgB,CC2DhB,sCD1DgB,CC2DhB,qCD1DgB,CC2DhB,wCD1DqB,CC2DrB,2CD1DmB,CC2DnB,0BACI,yBACA,0BAEJ,uBACI,4BACA,6BAEJ,yBAEI,4BADA,wBACA,CAEJ,wBAEI,6BADA,yBACA,ECrGN,2CACA,2CACA,yCACA,uCAEA,mCACE,8CACA,8CACA,4CACA,2CAGF,uDACE,6CACA,6CACA,2CACA,0CAGF,mCACE,6CACA,6CACA,2CACA,0CCvBF,+BH6BoB,CG5BpB,qCH6BiB,CG5BjB,oCH6BiB,CG5BjB,mCH6BiB,CG5BjB,kCH6BiB,CG5BjB,kCH6BiB,CG1BjB,oCHqBoB,CGpBpB,sCHoBoB,CGnBpB,uCHmBoB,CGlBpB,qCHkBoB,CGhBpB,mCACE,kCHekB,CGdlB,wCHee,CGdf,uCHee,CGdf,sCHee,CGdf,qCHee,CGdf,qCHee,CGdf,uCHSkB,CGRlB,yCHQkB,CGPlB,0CHOkB,CGNlB,wCHMkB,EGHpB,uDACE,iCHEkB,CGDlB,uCHEe,CGDf,sCHEe,CGDf,qCHEe,CGDf,oCHEe,CGDf,oCHEe,CGDf,sCHJkB,CGKlB,wCHLkB,CGMlB,yCHNkB,CGOlB,uCHPkB,EGUpB,mCACE,iCHXkB,CGYlB,uCHXe,CGYf,sCHXe,CGYf,qCHXe,CGYf,oCHXe,CGYf,oCHXe,CGYf,sCHjBkB,CGkBlB,wCHlBkB,CGmBlB,yCHnBkB,CGoBlB,uCHpBkB,EIxCpB,2DJ8Ce,CI7Cf,2DJ8Ce,CI7Cf,+DJ8Ce,CI7Cf,6DJ8Ce,CI7Cf,6DJ8Ce,CI5Cf,mCACE,8DJuCa,CItCb,8DJuCa,CItCb,kEJuCa,CItCb,gEJuCa,CItCb,gEJuCa,EIpCf,uDACE,6DJ+Ba,CI9Bb,6DJ+Ba,CI9Bb,iEJ+Ba,CI9Bb,+DJ+Ba,CI9Bb,+DJ+Ba,EI5Bf,mCACE,6DJuBa,CItBb,6DJuBa,CItBb,iEJuBa,CItBb,+DJuBa,CItBb,+DJuBa,EKxDf,iBACE,gBACA,kBACA,gBCkBF,yBACA,6BACA,+BACA,2BAEA,4BACA,gCACA,kCACA,8BAEA,4BACA,gCACA,kCACA,8BAEA,8BACA,kCACA,oCACA,gCAEA,8BACA,kCACA,oCACA,gCAGA,4BAGE,SACA,OAFA,QADA,KAGA,CAGF,mCACE,4BACA,8BACA,gCACA,kCACA,+BACA,iCACA,mCACA,qCACA,+BACA,iCACA,mCACA,qCACA,iCACA,qCACA,uCACA,mCACA,iCACA,qCACA,uCACA,mCACA,+BAGE,SACA,OAFA,QADA,KAGA,EAIJ,uDACE,2BACA,6BACA,+BACA,iCACA,8BACA,gCACA,kCACA,oCACA,8BACA,gCACA,kCACA,oCACA,gCACA,oCACA,sCACA,kCACA,gCACA,oCACA,sCACA,kCACA,8BAGE,SACA,OAFA,QADA,KAGA,EAIJ,mCACE,2BACA,6BACA,+BACA,iCACA,8BACA,gCACA,kCACA,oCACA,8BACA,gCACA,kCACA,oCACA,gCACA,oCACA,sCACA,kCACA,gCACA,oCACA,sCACA,kCACA,8BAGE,SACA,OAFA,QADA,KAGA,ECrIJ,6CACY,0BACZ,iCACA,uBAEA,2BACA,4BACA,2BACA,2BAEA,mCACE,8BACA,+BACA,8BACA,+BAGF,uDACE,6BACA,8BACA,6BACA,8BAGF,mCACE,6BACA,8BACA,6BACA,8BC3BF,+BACA,6CAIA,uBACE,cAEA,aADA,WACA,CAGF,iCAEA,+CACA,yCACA,sCACA,0CACA,sDACA,+DACA,yDAEA,gDACA,4CACA,6CACA,iDACA,+CAEA,8CACA,0CACA,2CACA,+CACA,6CAEA,sDACA,kDACA,mDACA,2DACA,yDAEA,oDACA,gDACA,iDACA,yDACA,uDACA,mDAEA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,oCAEA,qCACA,qCAEA,yCACA,yCAEA,mCACE,kCACA,gDACA,0BACE,cAEA,aADA,WACA,CAEF,oCACA,kDACA,4CACA,yCACA,6CACA,yDACA,kEACA,4DACA,mDACA,+CACA,gDACA,oDACA,kDAEA,iDACA,6CACA,8CACA,kDACA,gDAEA,yDACA,qDACA,sDACA,8DACA,4DAEA,uDACA,mDACA,oDACA,4DACA,0DACA,sDAEA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,uCAEA,wCACA,wCAEA,4CACA,6CAEF,uDACE,iCACA,+CACA,yBACE,cAEA,aADA,WACA,CAEF,mCACA,iDACA,2CACA,wCACA,4CACA,wDACA,iEACA,2DACA,kDACA,8CACA,+CACA,mDACA,iDAEA,gDACA,4CACA,6CACA,iDACA,+CAEA,wDACA,oDACA,qDACA,6DACA,2DAEA,sDACA,kDACA,mDACA,2DACA,yDACA,qDAEA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,sCAEA,uCACA,uCAEA,2CACA,4CAGF,mCACE,iCACA,+CACA,yBACE,cAEA,aADA,WACA,CAEF,mCACA,iDACA,2CACA,wCACA,4CACA,wDACA,iEACA,2DAEA,kDACA,8CACA,+CACA,mDACA,iDAEA,gDACA,4CACA,6CACA,iDACA,+CAEA,wDACA,oDACA,qDACA,6DACA,2DAEA,sDACA,kDACA,mDACA,2DACA,yDACA,qDAEA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,sCAEA,uCACA,uCAEA,2CACA,4CC9NF,6BACA,+BACA,8BACA,sCACA,sCACA,8BACA,oCACA,sCACA,kDACA,4CACA,wDAMA,uBACE,mBACA,WAGF,mCACE,gCACA,kCACA,iCACA,yCACA,yCACA,iCACA,uCACA,yCACA,qDACA,+CACA,2DAEA,0BACE,mBACA,YAIJ,uDACE,+BACA,iCACA,gCACA,wCACA,wCACA,gCACA,sCACA,wCACA,oDACA,8CACA,0DAEA,yBACE,mBACA,YAIJ,mCACE,+BACA,iCACA,gCACA,wCACA,wCACA,gCACA,sCACA,wCACA,oDACA,8CACA,0DAEA,yBACE,mBACA,YCxEJ,2CACA,4CACA,2BAEA,mCACE,8CACA,+CACA,+BAGF,uDACE,6CACA,8CACA,8BAGF,mCACE,6CACA,8CACA,8BCvCF,wBACE,qIXbW,CWgBb,mBACE,yBXhBM,CWmBR,+BACE,uBAGF,0BACE,kBAOF,mCACE,sCAKF,qBACE,2CAQF,uBACE,gDAIF,oBACE,0CAOF,qBACE,kCAKF,qBACE,0BAIF,mBACE,wBAIF,oBACE,4BAIF,qBACE,6BAIF,sBACE,2BAIF,yBACE,8BC5EF,iCACA,yCAEA,mCACE,oCACA,6CAGF,uDACE,mCACA,4CAGF,mCACE,mCACA,4CCDF,oCACA,+BACA,iCACA,iCACA,iCACA,iCACA,iCACA,iCACA,iCACA,iCACA,iCAGA,mCACE,uCACA,kCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,qCAGF,uDACE,sCACA,iCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,oCAGF,mCACE,sCACA,iCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,oCCxEF,yBACE,wBACA,qBAGF,uFAEE,SACA,UCqBF,2BfTW,CeUX,2BfTW,CeUX,2BfTW,CeUX,2BfTW,CeUX,4BfTW,CeaX,6BACA,6BACA,6BACA,+BAEA,uCAIA,+BACA,+BACA,+BACA,iCAEA,yCAKA,gCACA,sCAEA,mCACE,8BfxCS,CeyCT,8BfxCS,CeyCT,8BfxCS,CeyCT,8BfxCS,CeyCT,+BfxCS,CeyCT,gCACA,gCACA,gCACA,kCACA,0CACA,kCACA,kCACA,kCACA,oCACA,4CACA,mCACA,0CAGF,uDACE,6Bf5DS,Ce6DT,6Bf5DS,Ce6DT,6Bf5DS,Ce6DT,6Bf5DS,Ce6DT,8Bf5DS,Ce6DT,+BACA,+BACA,+BACA,iCACA,yCACA,iCACA,iCACA,iCACA,mCACA,2CACA,kCACA,yCAGF,mCACE,6BfhFS,CeiFT,6BfhFS,CeiFT,6BfhFS,CeiFT,6BfhFS,CeiFT,8BfhFS,CeiFT,+BACA,+BACA,+BACA,iCACA,yCACA,iCACA,iCACA,iCACA,mCACA,2CACA,kCACA,yCC9GF,wChBHmB,CgBInB,gDhBLuB,CgBMvB,8ChBJmB,CgBMnB,mCACE,2ChBRiB,CgBSjB,mDhBVqB,CgBWrB,iDhBTiB,EgBYnB,uDACE,0ChBdiB,CgBejB,kDhBhBqB,CgBiBrB,gDhBfiB,EgBkBnB,mCACE,0ChBpBiB,CgBqBjB,kDhBtBqB,CgBuBrB,gDhBrBiB,EiBEjB,mCjBDkB,CiBElB,sCjBDkB,CiBElB,oCjBDiB,CiBGnB,mCACE,sCjBNkB,CiBOlB,yCjBNkB,CiBOlB,uCjBNiB,EiBSnB,uDACE,qCjBZkB,CiBalB,wCjBZkB,CiBalB,sCjBZiB,EiBenB,mCACE,qCjBlBkB,CiBmBlB,wCjBlBkB,CiBmBlB,sCjBlBiB,EkBNnB,kBACE,iDACA,CAaF,4IAFE,6BAIA,CAFF,wBAEE,gCCjBF,uCC0BA,mCAIA,+BpBDc,CoBEd,+BpBDc,CoBEd,+BpBDc,CoBEd,+BpBDc,CoBEd,gCpBDc,CoBEd,gCpBDc,CoBEd,gCpBDc,CoBEd,gCpBDc,CoBEd,gCpBDc,CoBKd,oCAEA,mCACE,sCAEA,kCpBlBY,CoBmBZ,kCpBlBY,CoBmBZ,kCpBlBY,CoBmBZ,kCpBlBY,CoBmBZ,mCpBlBY,CoBmBZ,mCpBlBY,CoBmBZ,mCpBlBY,CoBmBZ,mCpBlBY,CoBmBZ,mCpBlBY,CoBoBZ,wCAGF,uDACE,qCAEA,iCpBlCY,CoBmCZ,iCpBlCY,CoBmCZ,iCpBlCY,CoBmCZ,iCpBlCY,CoBmCZ,kCpBlCY,CoBmCZ,kCpBlCY,CoBmCZ,kCpBlCY,CoBmCZ,kCpBlCY,CoBmCZ,kCpBlCY,CoBoCZ,uCAGF,mCACE,qCAEA,iCpBlDY,CoBmDZ,iCpBlDY,CoBmDZ,iCpBlDY,CoBmDZ,iCpBlDY,CoBmDZ,kCpBlDY,CoBmDZ,kCpBlDY,CoBmDZ,kCpBlDY,CoBmDZ,kCpBlDY,CoBmDZ,kCpBlDY,CoBoDZ,uCCpDF,0BrBbU,CqBcV,0BrBbU,CqBcV,0BrBbU,CqBcV,0BrBbU,CqBcV,2BrBbU,CqBeV,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,4BACA,8BAEA,0CACA,+CACA,+BAEA,mCACE,6BrBvCQ,CqBwCR,6BrBvCQ,CqBwCR,6BrBvCQ,CqBwCR,6BrBvCQ,CqBwCR,8BrBvCQ,CqBwCR,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,+BACA,iCACA,6CACA,kDACA,mCAGF,uDACE,4BrBhEQ,CqBiER,4BrBhEQ,CqBiER,4BrBhEQ,CqBiER,4BrBhEQ,CqBiER,6BrBhEQ,CqBiER,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,gCACA,4CACA,iDACA,kCAGF,mCACE,4BrBzFQ,CqB0FR,4BrBzFQ,CqB0FR,4BrBzFQ,CqB0FR,4BrBzFQ,CqB0FR,6BrBzFQ,CqB0FR,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,gCACA,4CACA,iDACA,kCClIF,+CACA,6CACA,6CACA,yCAEA,mDACA,iDACA,iDACA,6CAEA,mDACA,iDACA,iDACA,6CAEA,mCACE,kDACA,gDACA,gDACA,4CACA,sDACA,oDACA,oDACA,gDAEA,sDACA,oDACA,oDACA,iDAGF,uDACE,iDACA,+CACA,+CACA,2CAEA,qDACA,mDACA,mDACA,+CAEA,qDACA,mDACA,mDACA,gDAGF,mCACE,iDACA,+CACA,+CACA,2CAEA,qDACA,mDACA,mDACA,+CAEA,qDACA,mDACA,mDACA,gDC7DF,oCACA,wCACA,wCACA,kCAEA,mCACE,uCACA,2CACA,2CACA,sCAGF,uDACE,sCACA,0CACA,0CACA,qCAGF,mCACE,sCACA,0CACA,0CACA,qCC5BF,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,8BACA,gCACA,2BCbA,+CACA,+CACA,iDACA,iDACA,iDACA,iDACA,iDAEA,mCACE,kDACA,kDACA,oDACA,oDACA,oDACA,oDACA,qDAGF,uDACE,iDACA,iDACA,mDACA,mDACA,mDACA,mDACA,oDAGF,mCACE,iDACA,iDACA,mDACA,mDACA,mDACA,mDACA,oDC5BF,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,0C1B8DW,C0B7DX,2C1B8DW,C0B5DX,8C1B+DW,C0B9DX,8C1B+DW,C0B9DX,8C1B+DW,C0B9DX,8C1B+DW,C0B9DX,8C1B+DW,C0B9DX,8C1B+DW,C0B9DX,8C1B+DW,C0B9DX,8C1B+DW,C0B9DX,8C1B+DW,C0B7DX,6B1B6BQ,C0B5BR,kC1B6Ba,C0B5Bb,iC1B6BY,C0B5BZ,gC1B6BW,C0B5BX,4B1B6BO,C0B5BP,8B1B6BS,C0B5BT,oC1B6Be,C0B5Bf,iC1B6BY,C0B5BZ,kC1B6Ba,C0B5Bb,qC1B6Ba,C0B5Bb,6B1B6BQ,C0B3BR,mC1BqDW,C0BpDX,8B1BqDM,C0BpDN,oC1BqDY,C0BpDZ,iC1BqDS,C0BpDT,+B1BqDO,C0BpDP,8B1BqDS,C0BpDT,uC1BqDe,C0BpDf,iC1BqDS,C0BpDT,uC1BqDe,C0BpDf,oC1BqDY,C0BpDZ,mC1BqDW,C0BpDX,+B1BqDO,C0BpDP,qC1BqDa,C0BpDb,qC1BqDa,C0BpDb,gC1BqDQ,C0BpDR,sC1BqDc,C0BpDd,+B1BqDO,C0BpDP,oC1BqDY,C0BpDZ,+B1BqDO,C0BpDP,qC1BqDa,C0BpDb,wC1BqDgB,C0BpDhB,sC1BqDc,C0BpDd,uC1BqDe,C0BpDf,wC1BqDgB,C0BpDhB,qC1BqDa,C0BpDb,yCAEA,wD1BEW,C0BDX,wD1BEW,C0BDX,wD1BEW,C0BDX,wD1BEW,C0BDX,wD1BEW,C0BDX,wD1BEW,C0BDX,wD1BEW,C0BDX,wD1BEW,C0BDX,wD1BEW,C0BDX,yD1BEW,C0BDX,4D1BIW,C0BHX,4D1BIW,C0BHX,4D1BIW,C0BHX,4D1BIW,C0BHX,4D1BIW,C0BHX,4D1BIW,C0BHX,4D1BIW,C0BHX,4D1BIW,C0BHX,4D1BIW,C0BEX,2C1BlCQ,C0BmCR,gD1BlCa,C0BmCb,+C1BlCY,C0BmCZ,8C1BlCW,C0BmCX,0C1BlCO,C0BmCP,4C1BlCS,C0BmCT,kD1BlCe,C0BmCf,+C1BlCY,C0BmCZ,gD1BlCa,C0BmCb,mD1BlCa,C0BmCb,2C1BlCQ,C0BmCR,wD1BlCc,C0BoCd,iD1BXW,C0BYX,4C1BXM,C0BYN,kD1BXY,C0BYZ,+C1BXS,C0BYT,6C1BXO,C0BYP,4C1BXS,C0BYT,qD1BXe,C0BYf,+C1BXS,C0BYT,qD1BXe,C0BYf,kD1BXY,C0BYZ,iD1BXW,C0BYX,6C1BXO,C0BYP,mD1BXa,C0BYb,mD1BXa,C0BYb,8C1BXQ,C0BYR,oD1BXc,C0BYd,6C1BXO,C0BYP,kD1BXY,C0BYZ,6C1BXO,C0BYP,mD1BXa,C0BYb,sD1BXgB,C0BYhB,oD1BXc,C0BYd,qD1BXe,C0BYf,sD1BXgB,C0BYhB,mD1BXa,C0BYb,iDC9HA,8DACqB,U3BqDb,C2BpDR,wEAC0B,U3BoDb,C2BnDb,sEACyB,U3BmDb,C2BlDZ,oEACwB,U3BkDb,C2BjDX,4DACoB,U3BiDb,C2BhDP,gEACsB,U3BgDb,C2B/CT,4EAC4B,U3B+Cb,C2B9Cf,sEACyB,U3B8Cb,C2B7CZ,wEAC0B,U3B6Cb,C2B5Cb,wEAC0B,a3B4Cb,C2B3Cb,8DACqB,U3B2Cb,C2BzCR,oEACwB,oB3B0Cb,C2BzCX,oEACwB,oB3ByCb,C2BxCX,oEACwB,oB3BwCb,C2BvCX,oEACwB,oB3BuCb,C2BtCX,oEACwB,oB3BsCb,C2BrCX,oEACwB,oB3BqCb,C2BpCX,oEACwB,oB3BoCb,C2BnCX,oEACwB,oB3BmCb,C2BlCX,oEACwB,oB3BkCb,C2BjCX,oEACwB,wB3BoCb,C2BnCX,oEACwB,wB3BmCb,C2BlCX,oEACwB,wB3BkCb,C2BjCX,oEACwB,wB3BiCb,C2BhCX,oEACwB,wB3BgCb,C2B/BX,oEACwB,wB3B+Bb,C2B9BX,oEACwB,wB3B8Bb,C2B7BX,oEACwB,wB3B6Bb,C2B5BX,oEACwB,wB3B4Bb,C2B3BX,kEACuB,cAEvB,oEACwB,qB3BThB,C2BUR,8EAC6B,qB3BVhB,C2BWb,4EAC4B,qB3BXhB,C2BYZ,0EAC2B,qB3BZhB,C2BaX,kEACuB,qB3BbhB,C2BcP,sEACyB,qB3BdhB,C2BeT,kFAC+B,qB3BfhB,C2BgBf,4EAC4B,qB3BhBhB,C2BiBZ,8EAC6B,qB3BjBhB,C2BkBb,8EAC6B,wB3BlBhB,C2BmBb,oEACwB,qB3BnBhB,C2BoBR,gFAC8B,4B3BpBhB,C2BsBd,0EAC2B,+B3BtBhB,C2BuBX,0EAC2B,+B3BvBhB,C2BwBX,0EAC2B,+B3BxBhB,C2ByBX,0EAC2B,+B3BzBhB,C2B0BX,0EAC2B,+B3B1BhB,C2B2BX,0EAC2B,+B3B3BhB,C2B4BX,0EAC2B,+B3B5BhB,C2B6BX,0EAC2B,+B3B7BhB,C2B8BX,0EAC2B,+B3B9BhB,C2B+BX,0EAC2B,mC3B5BhB,C2B6BX,0EAC2B,mC3B7BhB,C2B8BX,0EAC2B,mC3B9BhB,C2B+BX,0EAC2B,mC3B/BhB,C2BgCX,0EAC2B,mC3BhChB,C2BiCX,0EAC2B,mC3BjChB,C2BkCX,0EAC2B,mC3BlChB,C2BmCX,0EAC2B,mC3BnChB,C2BoCX,0EAC2B,mC3BpChB,C2BsCX,oEACwB,a3BnCb,C2BoCX,0DACmB,a3BpCb,C2BqCN,sEACyB,a3BrCb,C2BsCZ,gEACsB,a3BtCb,C2BuCT,4DACoB,a3BvCb,C2BwCP,gEACsB,U3BxCb,C2ByCT,4EAC4B,a3BzCb,C2B0Cf,gEACsB,a3B1Cb,C2B2CT,4EAC4B,a3B3Cb,C2B4Cf,sEACyB,a3B5Cb,C2B6CZ,oEACwB,a3B7Cb,C2B8CX,4DACoB,a3B9Cb,C2B+CP,wEAC0B,a3B/Cb,C2BgDb,wEAC0B,a3BhDb,C2BiDb,8DACqB,a3BjDb,C2BkDR,0EAC2B,a3BlDb,C2BmDd,4DACoB,a3BnDb,C2BoDP,sEACyB,a3BpDb,C2BqDZ,4DACoB,a3BrDb,C2BsDP,wEAC0B,a3BtDb,C2BuDb,8EAC6B,a3BvDb,C2BwDhB,0EAC2B,a3BxDb,C2ByDd,4EAC4B,a3BzDb,C2B0Df,8EAC6B,a3B1Db,C2B2DhB,wEAC0B,a3B3Db,C2B6Db,0EAC2B,wB3BtFhB,C2BuFX,gEACsB,wB3BvFhB,C2BwFN,4EAC4B,wB3BxFhB,C2ByFZ,sEACyB,wB3BzFhB,C2B0FT,kEACuB,wB3B1FhB,C2B2FP,sEACyB,qB3B3FhB,C2B4FT,kFAC+B,wB3B5FhB,C2B6Ff,sEACyB,wB3B7FhB,C2B8FT,kFAC+B,wB3B9FhB,C2B+Ff,4EAC4B,wB3B/FhB,C2BgGZ,0EAC2B,wB3BhGhB,C2BiGX,kEACuB,wB3BjGhB,C2BkGP,8EAC6B,wB3BlGhB,C2BmGb,8EAC6B,wB3BnGhB,C2BoGb,oEACwB,wB3BpGhB,C2BqGR,gFAC8B,wB3BrGhB,C2BsGd,kEACuB,wB3BtGhB,C2BuGP,4EAC4B,wB3BvGhB,C2BwGZ,kEACuB,wB3BxGhB,C2ByGP,8EAC6B,wB3BzGhB,C2B0Gb,oFACgC,wB3B1GhB,C2B2GhB,gFAC8B,wB3B3GhB,C2B4Gd,kFAC+B,wB3B5GhB,C2B6Gf,oFACgC,wB3B7GhB,C2B8GhB,8EAC6B,wB3B9GhB,C2B+Gb,wEAC0B,yBCrM1B,0B5BrBe,C4BsBf,+B5BrBsB,C4BsBtB,8B5BrBgB,C4BsBhB,6B5BrBiB,C4BsBjB,6B5BrBgB,C4BsBhB,6B5BrBsB,C4BsBtB,6B5BrB4B,C4BsB5B,8B5BrBkC,C4BuBlC,+B5B9Be,C4B+Bf,oC5B9BsB,C4B+BtB,mC5B9BgB,C4B+BhB,kC5B9BiB,C4B+BjB,kC5B9BgB,C4B+BhB,kC5B9BsB,C4B+BtB,kC5B9B4B,C4B+B5B,mC5B9BkC,C4BgClC,gC5BvCe,C4BwCf,qC5BvCsB,C4BwCtB,oC5BvCgB,C4BwChB,mC5BvCiB,C4BwCjB,mC5BvCgB,C4BwChB,mC5BvCsB,C4BwCtB,mC5BvC4B,C4BwC5B,oC5BvCkC,C4ByClC,iC5BhDe,C4BiDf,sC5BhDsB,C4BiDtB,qC5BhDgB,C4BiDhB,oC5BhDiB,C4BiDjB,oC5BhDgB,C4BiDhB,oC5BhDsB,C4BiDtB,oC5BhD4B,C4BiD5B,qC5BhDkC,C4BkDlC,8B5BzDe,C4B0Df,mC5BzDsB,C4B0DtB,kC5BzDgB,C4B0DhB,iC5BzDiB,C4B0DjB,iC5BzDgB,C4B0DhB,iC5BzDsB,C4B0DtB,iC5BzD4B,C4B0D5B,kC5BzDkC,C4B2DlC,iBAEE,gB5BpEa,C4BmEb,a5BnEa,C4BsEf,iBAEE,qB5BvEoB,C4BsEpB,kB5BtEoB,C4ByEtB,iBAEE,oB5B1Ec,C4ByEd,iB5BzEc,C4B4EhB,iBAEE,mB5B7Ee,C4B4Ef,gB5B5Ee,C4B+EjB,iBAEE,mB5BhFc,C4B+Ed,gB5B/Ec,C4BkFhB,iBAEE,mB5BnFoB,C4BkFpB,gB5BlFoB,C4BqFtB,iBAEE,mB5BtF0B,C4BqF1B,gB5BrF0B,C4ByF5B,iBAEE,oB5B1FgC,C4ByFhC,iB5BzFgC,C4B6FlC,iBACE,c5BrGa,C4BsGb,e5BtGa,C4ByGf,iBACE,mB5BzGoB,C4B0GpB,oB5B1GoB,C4B6GtB,iBACE,kB5B7Gc,C4B8Gd,mB5B9Gc,C4BiHhB,iBACE,iB5BjHe,C4BkHf,kB5BlHe,C4BqHjB,iBACE,iB5BrHc,C4BsHd,kB5BtHc,C4ByHhB,iBACE,iB5BzHoB,C4B0HpB,kB5B1HoB,C4B6HtB,iBACE,iB5B7H0B,C4B8H1B,kB5B9H0B,C4BiI5B,iBACE,kB5BjIgC,C4BkIhC,mB5BlIgC,C4BqIlC,yB5B5Ie,C4B6If,8B5B5IsB,C4B6ItB,6B5B5IgB,C4B6IhB,4B5B5IiB,C4B6IjB,4B5B5IgB,C4B6IhB,4B5B5IsB,C4B6ItB,4B5B5I4B,C4B6I5B,6B5B5IkC,C4B8IlC,8B5BrJe,C4BsJf,mC5BrJsB,C4BsJtB,kC5BrJgB,C4BsJhB,iC5BrJiB,C4BsJjB,iC5BrJgB,C4BsJhB,iC5BrJsB,C4BsJtB,iC5BrJ4B,C4BsJ5B,kC5BrJkC,C4BuJlC,+B5B9Je,C4B+Jf,oC5B9JsB,C4B+JtB,mC5B9JgB,C4B+JhB,kC5B9JiB,C4B+JjB,kC5B9JgB,C4B+JhB,kC5B9JsB,C4B+JtB,kC5B9J4B,C4B+J5B,mC5B9JkC,C4BgKlC,gC5BvKe,C4BwKf,qC5BvKsB,C4BwKtB,oC5BvKgB,C4BwKhB,mC5BvKiB,C4BwKjB,mC5BvKgB,C4BwKhB,mC5BvKsB,C4BwKtB,mC5BvK4B,C4BwK5B,oC5BvKkC,C4ByKlC,6B5BhLe,C4BiLf,kC5BhLsB,C4BiLtB,iC5BhLgB,C4BiLhB,gC5BhLiB,C4BiLjB,gC5BhLgB,C4BiLhB,gC5BhLsB,C4BiLtB,gC5BhL4B,C4BiL5B,iC5BhLkC,C4BkLlC,iBAEE,e5B3La,C4B0Lb,Y5B1La,C4B6Lf,iBAEE,oB5B9LoB,C4B6LpB,iB5B7LoB,C4BgMtB,iBAEE,mB5BjMc,C4BgMd,gB5BhMc,C4BmMhB,iBAEE,kB5BpMe,C4BmMf,e5BnMe,C4BsMjB,iBAEE,kB5BvMc,C4BsMd,e5BtMc,C4ByMhB,iBAEE,kB5B1MoB,C4ByMpB,e5BzMoB,C4B4MtB,iBAEE,kB5B7M0B,C4B4M1B,e5B5M0B,C4B+M5B,iBAEE,mB5BhNgC,C4B+MhC,gB5B/MgC,C4BmNlC,iBACE,a5B3Na,C4B4Nb,c5B5Na,C4B8Nf,iBACE,kB5B9NoB,C4B+NpB,mB5B/NoB,C4BiOtB,iBACE,iB5BjOc,C4BkOd,kB5BlOc,C4BoOhB,iBACE,gB5BpOe,C4BqOf,iB5BrOe,C4BuOjB,iBACE,gB5BvOc,C4BwOd,iB5BxOc,C4B0OhB,iBACE,gB5B1OoB,C4B2OpB,iB5B3OoB,C4B6OtB,iBACE,gB5B7O0B,C4B8O1B,iB5B9O0B,C4BgP5B,iBACE,iB5BhPgC,C4BiPhC,kB5BjPgC,C4BoPlC,mCACE,6B5B5Pa,C4B6Pb,kC5B5PoB,C4B6PpB,iC5B5Pc,C4B6Pd,gC5B5Pe,C4B6Pf,gC5B5Pc,C4B6Pd,gC5B5PoB,C4B6PpB,gC5B5P0B,C4B6P1B,iC5B5PgC,C4B8PhC,kC5BrQa,C4BsQb,uC5BrQoB,C4BsQpB,sC5BrQc,C4BsQd,qC5BrQe,C4BsQf,qC5BrQc,C4BsQd,qC5BrQoB,C4BsQpB,qC5BrQ0B,C4BsQ1B,sC5BrQgC,C4BuQhC,mC5B9Qa,C4B+Qb,wC5B9QoB,C4B+QpB,uC5B9Qc,C4B+Qd,sC5B9Qe,C4B+Qf,sC5B9Qc,C4B+Qd,sC5B9QoB,C4B+QpB,sC5B9Q0B,C4B+Q1B,uC5B9QgC,C4BgRhC,oC5BvRa,C4BwRb,yC5BvRoB,C4BwRpB,wC5BvRc,C4BwRd,uC5BvRe,C4BwRf,uC5BvRc,C4BwRd,uC5BvRoB,C4BwRpB,uC5BvR0B,C4BwR1B,wC5BvRgC,C4ByRhC,iC5BhSa,C4BiSb,sC5BhSoB,C4BiSpB,qC5BhSc,C4BiSd,oC5BhSe,C4BiSf,oC5BhSc,C4BiSd,oC5BhSoB,C4BiSpB,oC5BhS0B,C4BiS1B,qC5BhSgC,C4BkShC,oBAEE,gB5B3SW,C4B0SX,a5B1SW,C4B6Sb,oBAEE,qB5B9SkB,C4B6SlB,kB5B7SkB,C4BgTpB,oBAEE,oB5BjTY,C4BgTZ,iB5BhTY,C4BmTd,oBAEE,mB5BpTa,C4BmTb,gB5BnTa,C4BsTf,oBAEE,mB5BvTY,C4BsTZ,gB5BtTY,C4ByTd,oBAEE,mB5B1TkB,C4ByTlB,gB5BzTkB,C4B4TpB,oBAEE,mB5B7TwB,C4B4TxB,gB5B5TwB,C4B+T1B,oBAEE,oB5BhU8B,C4B+T9B,iB5B/T8B,C4BkUhC,oBACE,c5B1UW,C4B2UX,e5B3UW,C4B6Ub,oBACE,mB5B7UkB,C4B8UlB,oB5B9UkB,C4BgVpB,oBACE,kB5BhVY,C4BiVZ,mB5BjVY,C4BmVd,oBACE,iB5BnVa,C4BoVb,kB5BpVa,C4BsVf,oBACE,iB5BtVY,C4BuVZ,kB5BvVY,C4ByVd,oBACE,iB5BzVkB,C4B0VlB,kB5B1VkB,C4B4VpB,oBACE,iB5B5VwB,C4B6VxB,kB5B7VwB,C4B+V1B,oBACE,kB5B/V8B,C4BgW9B,mB5BhW8B,C4BmWhC,4B5B1Wa,C4B2Wb,iC5B1WoB,C4B2WpB,gC5B1Wc,C4B2Wd,+B5B1We,C4B2Wf,+B5B1Wc,C4B2Wd,+B5B1WoB,C4B2WpB,+B5B1W0B,C4B2W1B,gC5B1WgC,C4B4WhC,iC5BnXa,C4BoXb,sC5BnXoB,C4BoXpB,qC5BnXc,C4BoXd,oC5BnXe,C4BoXf,oC5BnXc,C4BoXd,oC5BnXoB,C4BoXpB,oC5BnX0B,C4BoX1B,qC5BnXgC,C4BqXhC,kC5B5Xa,C4B6Xb,uC5B5XoB,C4B6XpB,sC5B5Xc,C4B6Xd,qC5B5Xe,C4B6Xf,qC5B5Xc,C4B6Xd,qC5B5XoB,C4B6XpB,qC5B5X0B,C4B6X1B,sC5B5XgC,C4B8XhC,mC5BrYa,C4BsYb,wC5BrYoB,C4BsYpB,uC5BrYc,C4BsYd,sC5BrYe,C4BsYf,sC5BrYc,C4BsYd,sC5BrYoB,C4BsYpB,sC5BrY0B,C4BsY1B,uC5BrYgC,C4BuYhC,gC5B9Ya,C4B+Yb,qC5B9YoB,C4B+YpB,oC5B9Yc,C4B+Yd,mC5B9Ye,C4B+Yf,mC5B9Yc,C4B+Yd,mC5B9YoB,C4B+YpB,mC5B9Y0B,C4B+Y1B,oC5B9YgC,C4BgZhC,oBAEE,e5BzZW,C4BwZX,Y5BxZW,C4B2Zb,oBAEE,oB5B5ZkB,C4B2ZlB,iB5B3ZkB,C4B8ZpB,oBAEE,mB5B/ZY,C4B8ZZ,gB5B9ZY,C4Biad,oBAEE,kB5Blaa,C4Biab,e5Bjaa,C4Boaf,oBAEE,kB5BraY,C4BoaZ,e5BpaY,C4Buad,oBAEE,kB5BxakB,C4BualB,e5BvakB,C4B0apB,oBAEE,kB5B3awB,C4B0axB,e5B1awB,C4B6a1B,oBAEE,mB5B9a8B,C4B6a9B,gB5B7a8B,C4BibhC,oBACE,a5BzbW,C4B0bX,c5B1bW,C4B4bb,oBACE,kB5B5bkB,C4B6blB,mB5B7bkB,C4B+bpB,oBACE,iB5B/bY,C4BgcZ,kB5BhcY,C4Bkcd,oBACE,gB5Blca,C4Bmcb,iB5Bnca,C4Bqcf,oBACE,gB5BrcY,C4BscZ,iB5BtcY,C4Bwcd,oBACE,gB5BxckB,C4ByclB,iB5BzckB,C4B2cpB,oBACE,gB5B3cwB,C4B4cxB,iB5B5cwB,C4B8c1B,oBACE,iB5B9c8B,C4B+c9B,kB5B/c8B,E4BodlC,uDACE,4B5B5da,C4B6db,iC5B5doB,C4B6dpB,gC5B5dc,C4B6dd,+B5B5de,C4B6df,+B5B5dc,C4B6dd,+B5B5doB,C4B6dpB,+B5B5d0B,C4B6d1B,gC5B5dgC,C4B8dhC,iC5Brea,C4Bseb,sC5BreoB,C4BsepB,qC5Brec,C4Bsed,oC5Bree,C4Bsef,oC5Brec,C4Bsed,oC5BreoB,C4BsepB,oC5Bre0B,C4Bse1B,qC5BregC,C4BuehC,kC5B9ea,C4B+eb,uC5B9eoB,C4B+epB,sC5B9ec,C4B+ed,qC5B9ee,C4B+ef,qC5B9ec,C4B+ed,qC5B9eoB,C4B+epB,qC5B9e0B,C4B+e1B,sC5B9egC,C4BgfhC,mC5Bvfa,C4Bwfb,wC5BvfoB,C4BwfpB,uC5Bvfc,C4Bwfd,sC5Bvfe,C4Bwff,sC5Bvfc,C4Bwfd,sC5BvfoB,C4BwfpB,sC5Bvf0B,C4Bwf1B,uC5BvfgC,C4ByfhC,gC5BhgBa,C4BigBb,qC5BhgBoB,C4BigBpB,oC5BhgBc,C4BigBd,mC5BhgBe,C4BigBf,mC5BhgBc,C4BigBd,mC5BhgBoB,C4BigBpB,mC5BhgB0B,C4BigB1B,oC5BhgBgC,C4BkgBhC,mBAEE,gB5B3gBW,C4B0gBX,a5B1gBW,C4B6gBb,mBAEE,qB5B9gBkB,C4B6gBlB,kB5B7gBkB,C4BghBpB,mBAEE,oB5BjhBY,C4BghBZ,iB5BhhBY,C4BmhBd,mBAEE,mB5BphBa,C4BmhBb,gB5BnhBa,C4BshBf,mBAEE,mB5BvhBY,C4BshBZ,gB5BthBY,C4ByhBd,mBAEE,mB5B1hBkB,C4ByhBlB,gB5BzhBkB,C4B4hBpB,mBAEE,mB5B7hBwB,C4B4hBxB,gB5B5hBwB,C4B+hB1B,mBAEE,oB5BhiB8B,C4B+hB9B,iB5B/hB8B,C4BmiBhC,mBACE,c5B3iBW,C4B4iBX,e5B5iBW,C4B8iBb,mBACE,mB5B9iBkB,C4B+iBlB,oB5B/iBkB,C4BijBpB,mBACE,kB5BjjBY,C4BkjBZ,mB5BljBY,C4BojBd,mBACE,iB5BpjBa,C4BqjBb,kB5BrjBa,C4BujBf,mBACE,iB5BvjBY,C4BwjBZ,kB5BxjBY,C4B0jBd,mBACE,iB5B1jBkB,C4B2jBlB,kB5B3jBkB,C4B6jBpB,mBACE,iB5B7jBwB,C4B8jBxB,kB5B9jBwB,C4BgkB1B,mBACE,kB5BhkB8B,C4BikB9B,mB5BjkB8B,C4BokBhC,2B5B3kBa,C4B4kBb,gC5B3kBoB,C4B4kBpB,+B5B3kBc,C4B4kBd,8B5B3kBe,C4B4kBf,8B5B3kBc,C4B4kBd,8B5B3kBoB,C4B4kBpB,8B5B3kB0B,C4B4kB1B,+B5B3kBgC,C4B6kBhC,gC5BplBa,C4BqlBb,qC5BplBoB,C4BqlBpB,oC5BplBc,C4BqlBd,mC5BplBe,C4BqlBf,mC5BplBc,C4BqlBd,mC5BplBoB,C4BqlBpB,mC5BplB0B,C4BqlB1B,oC5BplBgC,C4BslBhC,iC5B7lBa,C4B8lBb,sC5B7lBoB,C4B8lBpB,qC5B7lBc,C4B8lBd,oC5B7lBe,C4B8lBf,oC5B7lBc,C4B8lBd,oC5B7lBoB,C4B8lBpB,oC5B7lB0B,C4B8lB1B,qC5B7lBgC,C4B+lBhC,kC5BtmBa,C4BumBb,uC5BtmBoB,C4BumBpB,sC5BtmBc,C4BumBd,qC5BtmBe,C4BumBf,qC5BtmBc,C4BumBd,qC5BtmBoB,C4BumBpB,qC5BtmB0B,C4BumB1B,sC5BtmBgC,C4BwmBhC,+B5B/mBa,C4BgnBb,oC5B/mBoB,C4BgnBpB,mC5B/mBc,C4BgnBd,kC5B/mBe,C4BgnBf,kC5B/mBc,C4BgnBd,kC5B/mBoB,C4BgnBpB,kC5B/mB0B,C4BgnB1B,mC5B/mBgC,C4BinBhC,mBAEE,e5B1nBW,C4BynBX,Y5BznBW,C4B4nBb,mBAEE,oB5B7nBkB,C4B4nBlB,iB5B5nBkB,C4B+nBpB,mBAEE,mB5BhoBY,C4B+nBZ,gB5B/nBY,C4BkoBd,mBAEE,kB5BnoBa,C4BkoBb,e5BloBa,C4BqoBf,mBAEE,kB5BtoBY,C4BqoBZ,e5BroBY,C4BwoBd,mBAEE,kB5BzoBkB,C4BwoBlB,e5BxoBkB,C4B2oBpB,mBAEE,kB5B5oBwB,C4B2oBxB,e5B3oBwB,C4B8oB1B,mBAEE,mB5B/oB8B,C4B8oB9B,gB5B9oB8B,C4BkpBhC,mBACE,a5B1pBW,C4B2pBX,c5B3pBW,C4B6pBb,mBACE,kB5B7pBkB,C4B8pBlB,mB5B9pBkB,C4BgqBpB,mBACE,iB5BhqBY,C4BiqBZ,kB5BjqBY,C4BmqBd,mBACE,gB5BnqBa,C4BoqBb,iB5BpqBa,C4BsqBf,mBACE,gB5BtqBY,C4BuqBZ,iB5BvqBY,C4ByqBd,mBACE,gB5BzqBkB,C4B0qBlB,iB5B1qBkB,C4B4qBpB,mBACE,gB5B5qBwB,C4B6qBxB,iB5B7qBwB,C4B+qB1B,mBACE,iB5B/qB8B,C4BgrB9B,kB5BhrB8B,E4BqrBlC,mCACE,4B5B7rBa,C4B8rBb,iC5B7rBoB,C4B8rBpB,gC5B7rBc,C4B8rBd,+B5B7rBe,C4B8rBf,+B5B7rBc,C4B8rBd,+B5B7rBoB,C4B8rBpB,+B5B7rB0B,C4B8rB1B,gC5B7rBgC,C4B+rBhC,iC5BtsBa,C4BusBb,sC5BtsBoB,C4BusBpB,qC5BtsBc,C4BusBd,oC5BtsBe,C4BusBf,oC5BtsBc,C4BusBd,oC5BtsBoB,C4BusBpB,oC5BtsB0B,C4BusB1B,qC5BtsBgC,C4BwsBhC,kC5B/sBa,C4BgtBb,uC5B/sBoB,C4BgtBpB,sC5B/sBc,C4BgtBd,qC5B/sBe,C4BgtBf,qC5B/sBc,C4BgtBd,qC5B/sBoB,C4BgtBpB,qC5B/sB0B,C4BgtB1B,sC5B/sBgC,C4BitBhC,mC5BxtBa,C4BytBb,wC5BxtBoB,C4BytBpB,uC5BxtBc,C4BytBd,sC5BxtBe,C4BytBf,sC5BxtBc,C4BytBd,sC5BxtBoB,C4BytBpB,sC5BxtB0B,C4BytB1B,uC5BxtBgC,C4B0tBhC,gC5BjuBa,C4BkuBb,qC5BjuBoB,C4BkuBpB,oC5BjuBc,C4BkuBd,mC5BjuBe,C4BkuBf,mC5BjuBc,C4BkuBd,mC5BjuBoB,C4BkuBpB,mC5BjuB0B,C4BkuB1B,oC5BjuBgC,C4BmuBhC,mBAEE,gB5B5uBW,C4B2uBX,a5B3uBW,C4B8uBb,mBAEE,qB5B/uBkB,C4B8uBlB,kB5B9uBkB,C4BivBpB,mBAEE,oB5BlvBY,C4BivBZ,iB5BjvBY,C4BovBd,mBAEE,mB5BrvBa,C4BovBb,gB5BpvBa,C4BuvBf,mBAEE,mB5BxvBY,C4BuvBZ,gB5BvvBY,C4B0vBd,mBAEE,mB5B3vBkB,C4B0vBlB,gB5B1vBkB,C4B6vBpB,mBAEE,mB5B9vBwB,C4B6vBxB,gB5B7vBwB,C4BgwB1B,mBAEE,oB5BjwB8B,C4BgwB9B,iB5BhwB8B,C4BowBhC,mBACE,c5B5wBW,C4B6wBX,e5B7wBW,C4B+wBb,mBACE,mB5B/wBkB,C4BgxBlB,oB5BhxBkB,C4BkxBpB,mBACE,kB5BlxBY,C4BmxBZ,mB5BnxBY,C4BqxBd,mBACE,iB5BrxBa,C4BsxBb,kB5BtxBa,C4BwxBf,mBACE,iB5BxxBY,C4ByxBZ,kB5BzxBY,C4B2xBd,mBACE,iB5B3xBkB,C4B4xBlB,kB5B5xBkB,C4B8xBpB,mBACE,iB5B9xBwB,C4B+xBxB,kB5B/xBwB,C4BiyB1B,mBACE,kB5BjyB8B,C4BkyB9B,mB5BlyB8B,C4BqyBhC,2B5B5yBa,C4B6yBb,gC5B5yBoB,C4B6yBpB,+B5B5yBc,C4B6yBd,8B5B5yBe,C4B6yBf,8B5B5yBc,C4B6yBd,8B5B5yBoB,C4B6yBpB,8B5B5yB0B,C4B6yB1B,+B5B5yBgC,C4B8yBhC,gC5BrzBa,C4BszBb,qC5BrzBoB,C4BszBpB,oC5BrzBc,C4BszBd,mC5BrzBe,C4BszBf,mC5BrzBc,C4BszBd,mC5BrzBoB,C4BszBpB,mC5BrzB0B,C4BszB1B,oC5BrzBgC,C4BuzBhC,iC5B9zBa,C4B+zBb,sC5B9zBoB,C4B+zBpB,qC5B9zBc,C4B+zBd,oC5B9zBe,C4B+zBf,oC5B9zBc,C4B+zBd,oC5B9zBoB,C4B+zBpB,oC5B9zB0B,C4B+zB1B,qC5B9zBgC,C4Bg0BhC,kC5Bv0Ba,C4Bw0Bb,uC5Bv0BoB,C4Bw0BpB,sC5Bv0Bc,C4Bw0Bd,qC5Bv0Be,C4Bw0Bf,qC5Bv0Bc,C4Bw0Bd,qC5Bv0BoB,C4Bw0BpB,qC5Bv0B0B,C4Bw0B1B,sC5Bv0BgC,C4By0BhC,+B5Bh1Ba,C4Bi1Bb,oC5Bh1BoB,C4Bi1BpB,mC5Bh1Bc,C4Bi1Bd,kC5Bh1Be,C4Bi1Bf,kC5Bh1Bc,C4Bi1Bd,kC5Bh1BoB,C4Bi1BpB,kC5Bh1B0B,C4Bi1B1B,mC5Bh1BgC,C4Bk1BhC,mBAEE,e5B31BW,C4B01BX,Y5B11BW,C4B61Bb,mBAEE,oB5B91BkB,C4B61BlB,iB5B71BkB,C4Bg2BpB,mBAEE,mB5Bj2BY,C4Bg2BZ,gB5Bh2BY,C4Bm2Bd,mBAEE,kB5Bp2Ba,C4Bm2Bb,e5Bn2Ba,C4Bs2Bf,mBAEE,kB5Bv2BY,C4Bs2BZ,e5Bt2BY,C4By2Bd,mBAEE,kB5B12BkB,C4By2BlB,e5Bz2BkB,C4B42BpB,mBAEE,kB5B72BwB,C4B42BxB,e5B52BwB,C4B+2B1B,mBAEE,mB5Bh3B8B,C4B+2B9B,gB5B/2B8B,C4Bm3BhC,mBACE,a5B33BW,C4B43BX,c5B53BW,C4B83Bb,mBACE,kB5B93BkB,C4B+3BlB,mB5B/3BkB,C4Bi4BpB,mBACE,iB5Bj4BY,C4Bk4BZ,kB5Bl4BY,C4Bo4Bd,mBACE,gB5Bp4Ba,C4Bq4Bb,iB5Br4Ba,C4Bu4Bf,mBACE,gB5Bv4BY,C4Bw4BZ,iB5Bx4BY,C4B04Bd,mBACE,gB5B14BkB,C4B24BlB,iB5B34BkB,C4B64BpB,mBACE,gB5B74BwB,C4B84BxB,iB5B94BwB,C4Bg5B1B,mBACE,iB5Bh5B8B,C4Bi5B9B,kB5Bj5B8B,E6BMlC,gCACA,+BACA,8BACA,8BACA,8BACA,8BACA,+BAEA,qCACA,oCACA,mCACA,mCACA,mCACA,mCACA,oCAEA,sCACA,qCACA,oCACA,oCACA,oCACA,oCACA,qCAEA,uCACA,sCACA,qCACA,qCACA,qCACA,qCACA,sCAEA,oCACA,mCACA,kCACA,kCACA,kCACA,kCACA,mCAEA,mCAEE,mCACA,kCACA,iCACA,iCACA,iCACA,iCACA,kCAEA,wCACA,uCACA,sCACA,sCACA,sCACA,sCACA,uCAEA,yCACA,wCACA,uCACA,uCACA,uCACA,uCACA,wCAEA,0CACA,yCACA,wCACA,wCACA,wCACA,wCACA,yCAEA,uCACA,sCACA,qCACA,qCACA,qCACA,qCACA,uCAIF,uDACE,kCACA,iCACA,gCACA,gCACA,gCACA,gCACA,iCAEA,uCACA,sCACA,qCACA,qCACA,qCACA,qCACA,sCAEA,wCACA,uCACA,sCACA,sCACA,sCACA,sCACA,uCAEA,yCACA,wCACA,uCACA,uCACA,uCACA,uCACA,wCAEA,sCACA,qCACA,oCACA,oCACA,oCACA,oCACA,sCAIF,mCACE,kCACA,iCACA,gCACA,gCACA,gCACA,gCACA,iCAEA,uCACA,sCACA,qCACA,qCACA,qCACA,qCACA,sCAEA,wCACA,uCACA,sCACA,sCACA,sCACA,sCACA,uCAEA,yCACA,wCACA,uCACA,uCACA,uCACA,uCACA,wCAEA,sCACA,qCACA,oCACA,oCACA,oCACA,oCACA,sCC7LF,sBACI,yBACA,iBAGJ,kDACE,qB9BwDa,C8BrDf,+CACE,qB9BqDU,C8BlDZ,gDACE,qB9BkDW,C8B/Cb,gDACE,wB9B+CW,C8B5Cb,yCACE,mC9BkES,C8B/DX,wCACE,+B9BkDS,C+BtEX,sFACA,mFACA,4EAGA,mCACE,yFACA,sFACA,gFAGF,uDACE,wFACA,qFACA,+EAGF,mCACE,wFACA,qFACA,+ECZF,gCACA,iCACA,kCACA,mCAEA,mCACE,mCACA,oCACA,qCACA,uCAGF,uDACE,kCACA,mCACA,oCACA,sCAGF,mCACE,kCACA,mCACA,oCACA,sCCvBF,2CACA,0CACA,0CACA,qCAEA,mCACE,8CACA,6CACA,6CACA,yCAGF,uDACE,6CACA,4CACA,4CACA,wCAGF,mCACE,6CACA,4CACA,4CACA,wCCfF,yCAEE,clChCmB,CkCkCrB,4CAEE,clCnCsB,CkC0CxB,8BlCzCc,CkC0Cd,iClCzCc,CkC0Cd,gClCzCc,CkC0Cd,iClCzCc,CkC0Cd,8BlCzCc,CkC0Cd,iClCzCc,CkC0Cd,gClCzCc,CkC2Cd,mCACE,+CACiB,clCrDE,CkCsDnB,kDACoB,clCtDE,CkCuDtB,iClCtDY,CkCuDZ,oClCtDY,CkCuDZ,mClCtDY,CkCuDZ,oClCtDY,CkCuDZ,iClCtDY,CkCuDZ,oClCtDY,CkCuDZ,mClCtDY,EkCyDd,uDACE,6CACgB,clCnEG,CkCoEnB,gDACmB,clCpEG,CkCqEtB,gClCpEY,CkCqEZ,mClCpEY,CkCqEZ,kClCpEY,CkCqEZ,mClCpEY,CkCqEZ,gClCpEY,CkCqEZ,mClCpEY,CkCqEZ,kClCpEY,EkCuEd,mCACE,6CAEE,clClFiB,CkCoFnB,gDAEE,clCrFoB,CkCuFtB,gClCtFY,CkCuFZ,mClCtFY,CkCuFZ,kClCtFY,CkCuFZ,mClCtFY,CkCuFZ,gClCtFY,CkCuFZ,mClCtFY,CkCuFZ,kClCtFY,EmCQd,qBACE,cnCFQ,CmCMV,0BACE,cnCLa,CmCSf,4BACE,cnCXe,CmCejB,oBAGE,gBADA,aADA,eAEA,CAGF,wBACE,qDAKF,sBAEE,gBACA,uBAFA,kBAEA,CAGF,mCACE,wBACE,cnCpCM,CmCsCR,6BACE,cnCrCW,CmCuCb,+BACE,cnCzCa,CmC2Cf,uBAGE,gBADA,aADA,eAEA,CAEF,2BACE,qDAEF,yBAEE,gBACA,uBAFA,kBAEA,EAIJ,uDACE,uBACE,cnC7DM,CmC+DR,4BACE,cnC9DW,CmCgEb,8BACE,cnClEa,CmCoEf,sBAGE,gBADA,aADA,eAEA,CAEF,0BACE,qDAEF,wBAEE,gBACA,uBAFA,kBAEA,EAIJ,mCACE,uBACE,cnCtFM,CmCwFR,4BACE,cnCvFW,CmCyFb,8BACE,cnC3Fa,CmC6Ff,sBAGE,gBADA,aADA,eA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","sources":["webpack://swagger-ui/./src/style/main.scss","webpack://swagger-ui/./src/style/_type.scss","webpack://swagger-ui/./src/style/_variables.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_normalize.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_debug-children.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_debug-grid.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_box-sizing.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_aspect-ratios.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_images.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_background-size.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_background-position.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_outlines.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_borders.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_border-colors.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_variables.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_border-radius.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_border-style.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_border-widths.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_box-shadow.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_code.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_coordinates.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_clears.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_flexbox.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_display.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_floats.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_font-family.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_font-style.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_font-weight.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_forms.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_heights.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_letter-spacing.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_line-height.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_links.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_lists.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_max-widths.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_widths.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_overflow.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_position.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_opacity.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_rotations.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_skins.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_skins-pseudo.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_spacing.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_negative-margins.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_tables.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_text-decoration.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_text-align.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_text-transform.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_type-scale.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_typography.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_utilities.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_visibility.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_white-space.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_vertical-align.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_hovers.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_z-index.scss","webpack://swagger-ui/./node_modules/tachyons-sass/scss/_nested.scss","webpack://swagger-ui/./src/style/_layout.scss","webpack://swagger-ui/./src/style/_buttons.scss","webpack://swagger-ui/./src/style/_mixins.scss","webpack://swagger-ui/./src/style/_form.scss","webpack://swagger-ui/./src/style/_modal.scss","webpack://swagger-ui/./src/style/_models.scss","webpack://swagger-ui/./src/style/_servers.scss","webpack://swagger-ui/./src/style/_table.scss","webpack://swagger-ui/./src/style/_topbar.scss","webpack://swagger-ui/./src/style/_information.scss","webpack://swagger-ui/./src/style/_authorize.scss","webpack://swagger-ui/./src/style/_errors.scss","webpack://swagger-ui/./src/style/_split-pane-mode.scss","webpack://swagger-ui/./src/style/_markdown.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/JSONSchema/_json-schema.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/_all.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/Accordion/_accordion.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/ExpandDeepButton/_expand-deep-button.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/_all.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$vocabulary/_$vocabulary.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Description/_description.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Title/_title.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Properties/_properties.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/PatternProperties/_pattern-properties.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Enum/_enum.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Constraint/_constraint.scss","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/DependentRequired/_dependent-required.scss","webpack://swagger-ui/./src/core/plugins/oas31/components/model/_model.scss","webpack://swagger-ui/./src/core/plugins/oas31/components/models/_models.scss"],"sourcesContent":[".swagger-ui\n{\n @import '~tachyons-sass/tachyons.scss';\n @import 'mixins';\n @import 'variables';\n @import 'type';\n @import 'layout';\n @import 'buttons';\n @import 'form';\n @import 'modal';\n @import 'models';\n @import 'servers';\n @import 'table';\n @import 'topbar';\n @import 'information';\n @import 'authorize';\n @import 'errors';\n @include text_body();\n @import 'split-pane-mode';\n @import 'markdown';\n @import '../core/plugins/json-schema-2020-12/components/all';\n @import '../core/plugins/oas31/components/all';\n}\n","@mixin text_body($color: $text-body-default-font-color)\n{\n font-family: sans-serif;\n\n color: $color;\n}\n\n@mixin text_code($color: $text-code-default-font-color)\n{\n font-family: monospace;\n font-weight: 600;\n\n color: $color;\n}\n\n@mixin text_headline($color: $text-headline-default-font-color)\n{\n font-family: sans-serif;\n\n color: $color;\n}\n","// Base Colours\n$black: #000 !default;\n$white: #fff !default;\n$gray-50: lighten($black, 92%) !default; //ebebeb\n$gray-200: lighten($black, 62.75%) !default; // #a0a0a0\n$gray-300: lighten($black, 56.5%) !default; // #909090\n$gray-400: lighten($black, 50%) !default; // #808080\n$gray-500: lighten($black, 43.75%) !default; // #707070\n$gray-600: lighten($black, 37.5%) !default; // #606060\n$gray-650: lighten($black, 33.3%) !default; // #555555\n$gray-700: lighten($black, 31.25%) !default; // #505050\n$gray-800: lighten($black, 25%) !default; // #404040\n$gray-900: lighten($black, 18.75%) !default; // #303030\n\n$cod-gray: #1b1b1b !default;\n$agate-gray: #333333 !default;\n$bright-gray: #3b4151 !default;\n$mako-gray: #41444e !default;\n$waterloo-gray: #7d8492 !default;\n$alto-gray: #d9d9d9 !default;\n$mercury-gray: #e4e4e4 !default;\n$concrete-gray: #e8e8e8 !default;\n$alabaster: #f7f7f7 !default;\n$apple-green: #62a03f !default;\n$green-haze: #009d77 !default;\n$japanese-laurel: #008000 !default;\n$persian-green: #00a0a7 !default;\n$geyser-blue: #d8dde7 !default;\n$dodger-blue: #1391ff !default;\n$endeavour-blue: #005dae !default;\n$scampi-purple: #55a !default;\n$electric-violet: #7300e5 !default;\n$persian-red: #cf3030 !default;\n$mango-tango: #e97500 !default;\n\n// Theme\n\n$color-primary: #89bf04 !default;\n$color-secondary: #9012fe !default;\n$color-info: #4990e2 !default;\n$color-warning: #ff6060 !default;\n$color-danger: #f00 !default;\n\n$color-primary-hover: lighten($color-primary, .5%) !default;\n\n$_color-post: #49cc90 !default;\n$_color-get: #61affe !default;\n$_color-put: #fca130 !default;\n$_color-delete: #f93e3e !default;\n$_color-head: #9012fe !default;\n$_color-patch: #50e3c2 !default;\n$_color-disabled: #ebebeb !default;\n$_color-options: #0d5aa7 !default;\n\n// Authorize\n\n$auth-container-border-color: $gray-50 !default;\n$auth-select-all-none-link-font-color: $color-info !default;\n// Buttons\n\n$btn-background-color: transparent !default;\n$btn-border-color: $gray-400 !default;\n$btn-font-color: inherit !default;\n$btn-box-shadow-color: $black !default;\n\n$btn-authorize-background-color: transparent !default;\n$btn-authorize-border-color: $_color-post !default;\n$btn-authorize-font-color: $_color-post !default;\n$btn-authorize-svg-fill-color: $_color-post !default;\n\n$btn-cancel-background-color: transparent !default;\n$btn-cancel-border-color: $color-warning !default;\n$btn-cancel-font-color: $color-warning !default;\n\n$btn-execute-background-color: transparent !default;\n$btn-execute-border-color: $color-info !default;\n$btn-execute-font-color: $white !default;\n$btn-execute-background-color-alt: $color-info !default;\n\n$expand-methods-svg-fill-color: $gray-500 !default;\n$expand-methods-svg-fill-color-hover: $gray-800 !default;\n\n// Errors\n\n$errors-wrapper-background-color: $_color-delete !default;\n$errors-wrapper-border-color: $_color-delete !default;\n\n$errors-wrapper-errors-small-font-color: $gray-600 !default;\n\n// Form\n\n$form-select-background-color: $alabaster !default;\n$form-select-border-color: $mako-gray !default;\n$form-select-box-shadow-color: $black !default;\n\n$form-input-border-color: $alto-gray !default;\n$form-input-background-color: $white !default;\n\n$form-textarea-background-color: $white !default;\n$form-textarea-focus-border-color: $_color-get !default;\n\n$form-textarea-curl-background-color: $mako-gray !default;\n$form-textarea-curl-font-color: $white !default;\n\n$form-checkbox-label-font-color: $gray-900 !default;\n$form-checkbox-background-color: $concrete-gray !default;\n$form-checkbox-box-shadow-color: $concrete-gray !default;\n\n// Information\n\n$info-code-background-color: $black !default;\n$info-code-font-color: $_color-head !default;\n\n$info-link-font-color: $color-info !default;\n$info-link-font-color-hover: $info-link-font-color !default;\n\n$info-title-small-background-color: $waterloo-gray !default;\n\n$info-title-small-pre-font-color: $white !default;\n\n// Layout\n\n$opblock-border-color: $black !default;\n$opblock-box-shadow-color: $black !default;\n\n$opblock-tag-border-bottom-color: $bright-gray !default;\n$opblock-tag-background-color-hover: $black !default;\n\n$opblock-tab-header-tab-item-active-h4-span-after-background-color: $gray-400 !default;\n\n$opblock-isopen-summary-border-bottom-color: $black !default;\n\n$opblock-isopen-section-header-background-color: $white !default;\n$opblock-isopen-section-header-box-shadow-color: $black !default;\n\n$opblock-summary-method-background-color: $black !default;\n$opblock-summary-method-font-color: $white !default;\n$opblock-summary-method-text-shadow-color: $black !default;\n\n$operational-filter-input-border-color: $geyser-blue !default;\n\n$tab-list-item-first-background-color: $black !default;\n\n$response-col-status-undocumented-font-color: $gray-300 !default;\n\n$response-col-links-font-color: $gray-300 !default;\n\n$opblock-body-background-color: $agate-gray !default;\n$opblock-body-font-color: $white !default;\n\n$scheme-container-background-color: $white !default;\n$scheme-container-box-shadow-color: $black !default;\n\n$server-container-background-color: $white !default;\n$server-container-box-shadow-color: $black !default;\n\n$server-container-computed-url-code-font-color: $gray-400 !default;\n\n$loading-container-before-border-color: $gray-650 !default;\n$loading-container-before-border-top-color: $black !default;\n\n$response-content-type-controls-accept-header-select-border-color: $japanese-laurel !default;\n$response-content-type-controls-accept-header-small-font-color: $japanese-laurel !default;\n\n// Modal\n\n$dialog-ux-backdrop-background-color: $black !default;\n\n\n$dialog-ux-modal-background-color: $white !default;\n$dialog-ux-modal-border-color: $gray-50 !default;\n$dialog-ux-modal-box-shadow-color: $black !default;\n\n$dialog-ux-modal-content-font-color: $mako-gray !default;\n\n$dialog-ux-modal-header-border-bottom-color: $gray-50 !default;\n\n// Models\n\n$model-deprecated-font-color: $gray-200 !default;\n\n$model-hint-font-color: $gray-50 !default;\n$model-hint-background-color: $black !default;\n\n$section-models-border-color: $bright-gray !default;\n\n$section-models-isopen-h4-border-bottom-color: $section-models-border-color !default;\n\n$section-models-h4-font-color: $gray-600 !default;\n$section-models-h4-background-color-hover: $black !default;\n\n$section-models-h5-font-color: $gray-500 !default;\n\n$section-models-model-container-background-color: $black !default;\n\n$section-models-model-box-background-color: $black !default;\n\n$section-models-model-title-font-color: $gray-700 !default;\n\n$prop-type-font-color: $scampi-purple !default;\n\n$prop-format-font-color: $gray-600 !default;\n\n// Tables\n\n$table-thead-td-border-bottom-color: $bright-gray !default;\n\n$table-parameter-name-required-font-color: $color-danger !default;\n\n$table-parameter-in-font-color: $gray-400 !default;\n\n$table-parameter-deprecated-font-color: $color-danger !default;\n\n// Topbar\n\n$topbar-background-color: $cod-gray !default;\n\n$topbar-link-font-color: $white !default;\n\n$topbar-download-url-wrapper-element-border-color: $apple-green !default;\n\n$topbar-download-url-button-background-color: $apple-green !default;\n$topbar-download-url-button-font-color: $white !default;\n\n// Type\n\n$text-body-default-font-color: $bright-gray !default;\n$text-code-default-font-color: $bright-gray !default;\n$text-headline-default-font-color: $bright-gray !default;\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n * IE on Windows Phone and in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n background-color: transparent; /* 1 */\n -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n background-color: #ff0;\n color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: sans-serif; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Scripting\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n display: none;\n}\n\n/* Hidden\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n display: none;\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n DEBUG CHILDREN\n Docs: http://tachyons.io/docs/debug/\n\n Just add the debug class to any element to see outlines on its\n children.\n\n*/\n\n.debug * { outline: 1px solid gold; }\n.debug-white * { outline: 1px solid white; }\n.debug-black * { outline: 1px solid black; }\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n DEBUG GRID\n http://tachyons.io/docs/debug-grid/\n\n Can be useful for debugging layout issues\n or helping to make sure things line up perfectly.\n Just tack one of these classes onto a parent element.\n\n*/\n\n.debug-grid {\n background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat top left;\n}\n\n.debug-grid-16 {\n background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat top left;\n}\n\n.debug-grid-8-solid {\n background:white url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat top left;\n}\n\n.debug-grid-16-solid {\n background:white url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat top left;\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BOX SIZING\n\n*/\n\nhtml,\nbody,\ndiv,\narticle,\nsection,\nmain,\nfooter,\nheader,\nform,\nfieldset,\nlegend,\npre,\ncode,\na,\nh1,h2,h3,h4,h5,h6,\np,\nul,\nol,\nli,\ndl,\ndt,\ndd,\ntextarea,\ntable,\ntd,\nth,\ntr,\ninput[type=\"email\"],\ninput[type=\"number\"],\ninput[type=\"password\"],\ninput[type=\"tel\"],\ninput[type=\"text\"],\ninput[type=\"url\"],\n.border-box {\n box-sizing: border-box;\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n ASPECT RATIOS\n\n*/\n\n/* This is for fluid media that is embedded from third party sites like youtube, vimeo etc.\n * Wrap the outer element in aspect-ratio and then extend it with the desired ratio i.e\n * Make sure there are no height and width attributes on the embedded media.\n * Adapted from: https://github.com/suitcss/components-flex-embed\n *\n * Example:\n *\n *
\n * \n *
\n *\n * */\n\n.aspect-ratio {\n height: 0;\n position: relative;\n}\n\n.aspect-ratio--16x9 { padding-bottom: 56.25%; }\n.aspect-ratio--9x16 { padding-bottom: 177.77%; }\n\n.aspect-ratio--4x3 { padding-bottom: 75%; }\n.aspect-ratio--3x4 { padding-bottom: 133.33%; }\n\n.aspect-ratio--6x4 { padding-bottom: 66.6%; }\n.aspect-ratio--4x6 { padding-bottom: 150%; }\n\n.aspect-ratio--8x5 { padding-bottom: 62.5%; }\n.aspect-ratio--5x8 { padding-bottom: 160%; }\n\n.aspect-ratio--7x5 { padding-bottom: 71.42%; }\n.aspect-ratio--5x7 { padding-bottom: 140%; }\n\n.aspect-ratio--1x1 { padding-bottom: 100%; }\n\n.aspect-ratio--object {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 100;\n}\n\n@media #{$breakpoint-not-small}{\n .aspect-ratio-ns {\n height: 0;\n position: relative;\n }\n .aspect-ratio--16x9-ns { padding-bottom: 56.25%; }\n .aspect-ratio--9x16-ns { padding-bottom: 177.77%; }\n .aspect-ratio--4x3-ns { padding-bottom: 75%; }\n .aspect-ratio--3x4-ns { padding-bottom: 133.33%; }\n .aspect-ratio--6x4-ns { padding-bottom: 66.6%; }\n .aspect-ratio--4x6-ns { padding-bottom: 150%; }\n .aspect-ratio--8x5-ns { padding-bottom: 62.5%; }\n .aspect-ratio--5x8-ns { padding-bottom: 160%; }\n .aspect-ratio--7x5-ns { padding-bottom: 71.42%; }\n .aspect-ratio--5x7-ns { padding-bottom: 140%; }\n .aspect-ratio--1x1-ns { padding-bottom: 100%; }\n .aspect-ratio--object-ns {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 100;\n }\n}\n\n@media #{$breakpoint-medium}{\n .aspect-ratio-m {\n height: 0;\n position: relative;\n }\n .aspect-ratio--16x9-m { padding-bottom: 56.25%; }\n .aspect-ratio--9x16-m { padding-bottom: 177.77%; }\n .aspect-ratio--4x3-m { padding-bottom: 75%; }\n .aspect-ratio--3x4-m { padding-bottom: 133.33%; }\n .aspect-ratio--6x4-m { padding-bottom: 66.6%; }\n .aspect-ratio--4x6-m { padding-bottom: 150%; }\n .aspect-ratio--8x5-m { padding-bottom: 62.5%; }\n .aspect-ratio--5x8-m { padding-bottom: 160%; }\n .aspect-ratio--7x5-m { padding-bottom: 71.42%; }\n .aspect-ratio--5x7-m { padding-bottom: 140%; }\n .aspect-ratio--1x1-m { padding-bottom: 100%; }\n .aspect-ratio--object-m {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 100;\n }\n}\n\n@media #{$breakpoint-large}{\n .aspect-ratio-l {\n height: 0;\n position: relative;\n }\n .aspect-ratio--16x9-l { padding-bottom: 56.25%; }\n .aspect-ratio--9x16-l { padding-bottom: 177.77%; }\n .aspect-ratio--4x3-l { padding-bottom: 75%; }\n .aspect-ratio--3x4-l { padding-bottom: 133.33%; }\n .aspect-ratio--6x4-l { padding-bottom: 66.6%; }\n .aspect-ratio--4x6-l { padding-bottom: 150%; }\n .aspect-ratio--8x5-l { padding-bottom: 62.5%; }\n .aspect-ratio--5x8-l { padding-bottom: 160%; }\n .aspect-ratio--7x5-l { padding-bottom: 71.42%; }\n .aspect-ratio--5x7-l { padding-bottom: 140%; }\n .aspect-ratio--1x1-l { padding-bottom: 100%; }\n .aspect-ratio--object-l {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 100;\n }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n IMAGES\n Docs: http://tachyons.io/docs/elements/images/\n\n*/\n\n/* Responsive images! */\n\nimg { max-width: 100%; }\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BACKGROUND SIZE\n Docs: http://tachyons.io/docs/themes/background-size/\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n/*\n Often used in combination with background image set as an inline style\n on an html element.\n*/\n\n .cover { background-size: cover!important; }\n .contain { background-size: contain!important; }\n\n@media #{$breakpoint-not-small} {\n .cover-ns { background-size: cover!important; }\n .contain-ns { background-size: contain!important; }\n}\n\n@media #{$breakpoint-medium} {\n .cover-m { background-size: cover!important; }\n .contain-m { background-size: contain!important; }\n}\n\n@media #{$breakpoint-large} {\n .cover-l { background-size: cover!important; }\n .contain-l { background-size: contain!important; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BACKGROUND POSITION\n\n Base:\n bg = background\n\n Modifiers:\n -center = center center\n -top = top center\n -right = center right\n -bottom = bottom center\n -left = center left\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n */\n\n.bg-center { \n background-repeat: no-repeat;\n background-position: center center; \n}\n\n.bg-top { \n background-repeat: no-repeat; \n background-position: top center; \n}\n\n.bg-right { \n background-repeat: no-repeat; \n background-position: center right; \n}\n\n.bg-bottom { \n background-repeat: no-repeat; \n background-position: bottom center; \n}\n\n.bg-left { \n background-repeat: no-repeat; \n background-position: center left; \n}\n\n@media #{$breakpoint-not-small} {\n .bg-center-ns { \n background-repeat: no-repeat;\n background-position: center center; \n }\n\n .bg-top-ns { \n background-repeat: no-repeat; \n background-position: top center; \n }\n\n .bg-right-ns { \n background-repeat: no-repeat; \n background-position: center right; \n }\n\n .bg-bottom-ns { \n background-repeat: no-repeat; \n background-position: bottom center; \n }\n\n .bg-left-ns { \n background-repeat: no-repeat; \n background-position: center left; \n }\n}\n\n@media #{$breakpoint-medium} {\n .bg-center-m { \n background-repeat: no-repeat;\n background-position: center center; \n }\n\n .bg-top-m { \n background-repeat: no-repeat; \n background-position: top center; \n }\n\n .bg-right-m { \n background-repeat: no-repeat; \n background-position: center right; \n }\n\n .bg-bottom-m { \n background-repeat: no-repeat; \n background-position: bottom center; \n }\n\n .bg-left-m { \n background-repeat: no-repeat; \n background-position: center left; \n }\n}\n\n@media #{$breakpoint-large} {\n .bg-center-l { \n background-repeat: no-repeat;\n background-position: center center; \n }\n\n .bg-top-l { \n background-repeat: no-repeat; \n background-position: top center; \n }\n\n .bg-right-l { \n background-repeat: no-repeat; \n background-position: center right; \n }\n\n .bg-bottom-l { \n background-repeat: no-repeat; \n background-position: bottom center; \n }\n\n .bg-left-l { \n background-repeat: no-repeat; \n background-position: center left; \n }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n OUTLINES\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.outline { outline: 1px solid; }\n.outline-transparent { outline: 1px solid transparent; }\n.outline-0 { outline: 0; }\n\n@media #{$breakpoint-not-small} {\n .outline-ns { outline: 1px solid; }\n .outline-transparent-ns { outline: 1px solid transparent; }\n .outline-0-ns { outline: 0; }\n}\n\n@media #{$breakpoint-medium} {\n .outline-m { outline: 1px solid; }\n .outline-transparent-m { outline: 1px solid transparent; }\n .outline-0-m { outline: 0; }\n}\n\n@media #{$breakpoint-large} {\n .outline-l { outline: 1px solid; }\n .outline-transparent-l { outline: 1px solid transparent; }\n .outline-0-l { outline: 0; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BORDERS\n Docs: http://tachyons.io/docs/themes/borders/\n\n Base:\n b = border\n\n Modifiers:\n a = all\n t = top\n r = right\n b = bottom\n l = left\n n = none\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n .ba { border-style: solid; border-width: 1px; }\n .bt { border-top-style: solid; border-top-width: 1px; }\n .br { border-right-style: solid; border-right-width: 1px; }\n .bb { border-bottom-style: solid; border-bottom-width: 1px; }\n .bl { border-left-style: solid; border-left-width: 1px; }\n .bn { border-style: none; border-width: 0; }\n\n\n@media #{$breakpoint-not-small} {\n .ba-ns { border-style: solid; border-width: 1px; }\n .bt-ns { border-top-style: solid; border-top-width: 1px; }\n .br-ns { border-right-style: solid; border-right-width: 1px; }\n .bb-ns { border-bottom-style: solid; border-bottom-width: 1px; }\n .bl-ns { border-left-style: solid; border-left-width: 1px; }\n .bn-ns { border-style: none; border-width: 0; }\n}\n\n@media #{$breakpoint-medium} {\n .ba-m { border-style: solid; border-width: 1px; }\n .bt-m { border-top-style: solid; border-top-width: 1px; }\n .br-m { border-right-style: solid; border-right-width: 1px; }\n .bb-m { border-bottom-style: solid; border-bottom-width: 1px; }\n .bl-m { border-left-style: solid; border-left-width: 1px; }\n .bn-m { border-style: none; border-width: 0; }\n}\n\n@media #{$breakpoint-large} {\n .ba-l { border-style: solid; border-width: 1px; }\n .bt-l { border-top-style: solid; border-top-width: 1px; }\n .br-l { border-right-style: solid; border-right-width: 1px; }\n .bb-l { border-bottom-style: solid; border-bottom-width: 1px; }\n .bl-l { border-left-style: solid; border-left-width: 1px; }\n .bn-l { border-style: none; border-width: 0; }\n}\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BORDER COLORS\n Docs: http://tachyons.io/docs/themes/borders/\n\n Border colors can be used to extend the base\n border classes ba,bt,bb,br,bl found in the _borders.css file.\n\n The base border class by default will set the color of the border\n to that of the current text color. These classes are for the cases\n where you desire for the text and border colors to be different.\n\n Base:\n b = border\n\n Modifiers:\n --color-name = each color variable name is also a border color name\n\n*/\n\n.b--black { border-color: $black; }\n.b--near-black { border-color: $near-black; }\n.b--dark-gray { border-color: $dark-gray; }\n.b--mid-gray { border-color: $mid-gray; }\n.b--gray { border-color: $gray; }\n.b--silver { border-color: $silver; }\n.b--light-silver { border-color: $light-silver; }\n.b--moon-gray { border-color: $moon-gray; }\n.b--light-gray { border-color: $light-gray; }\n.b--near-white { border-color: $near-white; }\n.b--white { border-color: $white; }\n\n.b--white-90 { border-color: $white-90; }\n.b--white-80 { border-color: $white-80; }\n.b--white-70 { border-color: $white-70; }\n.b--white-60 { border-color: $white-60; }\n.b--white-50 { border-color: $white-50; }\n.b--white-40 { border-color: $white-40; }\n.b--white-30 { border-color: $white-30; }\n.b--white-20 { border-color: $white-20; }\n.b--white-10 { border-color: $white-10; }\n.b--white-05 { border-color: $white-05; }\n.b--white-025 { border-color: $white-025; }\n.b--white-0125 { border-color: $white-0125; }\n\n.b--black-90 { border-color: $black-90; }\n.b--black-80 { border-color: $black-80; }\n.b--black-70 { border-color: $black-70; }\n.b--black-60 { border-color: $black-60; }\n.b--black-50 { border-color: $black-50; }\n.b--black-40 { border-color: $black-40; }\n.b--black-30 { border-color: $black-30; }\n.b--black-20 { border-color: $black-20; }\n.b--black-10 { border-color: $black-10; }\n.b--black-05 { border-color: $black-05; }\n.b--black-025 { border-color: $black-025; }\n.b--black-0125 { border-color: $black-0125; }\n\n.b--dark-red { border-color: $dark-red; }\n.b--red { border-color: $red; }\n.b--light-red { border-color: $light-red; }\n.b--orange { border-color: $orange; }\n.b--gold { border-color: $gold; }\n.b--yellow { border-color: $yellow; }\n.b--light-yellow { border-color: $light-yellow; }\n.b--purple { border-color: $purple; }\n.b--light-purple { border-color: $light-purple; }\n.b--dark-pink { border-color: $dark-pink; }\n.b--hot-pink { border-color: $hot-pink; }\n.b--pink { border-color: $pink; }\n.b--light-pink { border-color: $light-pink; }\n.b--dark-green { border-color: $dark-green; }\n.b--green { border-color: $green; }\n.b--light-green { border-color: $light-green; }\n.b--navy { border-color: $navy; }\n.b--dark-blue { border-color: $dark-blue; }\n.b--blue { border-color: $blue; }\n.b--light-blue { border-color: $light-blue; }\n.b--lightest-blue { border-color: $lightest-blue; }\n.b--washed-blue { border-color: $washed-blue; }\n.b--washed-green { border-color: $washed-green; }\n.b--washed-yellow { border-color: $washed-yellow; }\n.b--washed-red { border-color: $washed-red; }\n\n.b--transparent { border-color: $transparent; }\n.b--inherit { border-color: inherit; }\n","\n// Converted Variables\n\n$sans-serif: -apple-system, BlinkMacSystemFont, 'avenir next', avenir, helvetica, 'helvetica neue', ubuntu, roboto, noto, 'segoe ui', arial, sans-serif !default;\n$serif: georgia, serif !default;\n$code: consolas, monaco, monospace !default;\n$font-size-headline: 6rem !default;\n$font-size-subheadline: 5rem !default;\n$font-size-1: 3rem !default;\n$font-size-2: 2.25rem !default;\n$font-size-3: 1.5rem !default;\n$font-size-4: 1.25rem !default;\n$font-size-5: 1rem !default;\n$font-size-6: .875rem !default;\n$font-size-7: .75rem !default;\n$letter-spacing-tight: -.05em !default;\n$letter-spacing-1: .1em !default;\n$letter-spacing-2: .25em !default;\n$line-height-solid: 1 !default;\n$line-height-title: 1.25 !default;\n$line-height-copy: 1.5 !default;\n$measure: 30em !default;\n$measure-narrow: 20em !default;\n$measure-wide: 34em !default;\n$spacing-none: 0 !default;\n$spacing-extra-small: .25rem !default;\n$spacing-small: .5rem !default;\n$spacing-medium: 1rem !default;\n$spacing-large: 2rem !default;\n$spacing-extra-large: 4rem !default;\n$spacing-extra-extra-large: 8rem !default;\n$spacing-extra-extra-extra-large: 16rem !default;\n$spacing-copy-separator: 1.5em !default;\n$height-1: 1rem !default;\n$height-2: 2rem !default;\n$height-3: 4rem !default;\n$height-4: 8rem !default;\n$height-5: 16rem !default;\n$width-1: 1rem !default;\n$width-2: 2rem !default;\n$width-3: 4rem !default;\n$width-4: 8rem !default;\n$width-5: 16rem !default;\n$max-width-1: 1rem !default;\n$max-width-2: 2rem !default;\n$max-width-3: 4rem !default;\n$max-width-4: 8rem !default;\n$max-width-5: 16rem !default;\n$max-width-6: 32rem !default;\n$max-width-7: 48rem !default;\n$max-width-8: 64rem !default;\n$max-width-9: 96rem !default;\n$border-radius-none: 0 !default;\n$border-radius-1: .125rem !default;\n$border-radius-2: .25rem !default;\n$border-radius-3: .5rem !default;\n$border-radius-4: 1rem !default;\n$border-radius-circle: 100% !default;\n$border-radius-pill: 9999px !default;\n$border-width-none: 0 !default;\n$border-width-1: .125rem !default;\n$border-width-2: .25rem !default;\n$border-width-3: .5rem !default;\n$border-width-4: 1rem !default;\n$border-width-5: 2rem !default;\n$box-shadow-1: 0px 0px 4px 2px rgba( 0, 0, 0, 0.2 ) !default;\n$box-shadow-2: 0px 0px 8px 2px rgba( 0, 0, 0, 0.2 ) !default;\n$box-shadow-3: 2px 2px 4px 2px rgba( 0, 0, 0, 0.2 ) !default;\n$box-shadow-4: 2px 2px 8px 0px rgba( 0, 0, 0, 0.2 ) !default;\n$box-shadow-5: 4px 4px 8px 0px rgba( 0, 0, 0, 0.2 ) !default;\n$black: #000 !default;\n$near-black: #111 !default;\n$dark-gray: #333 !default;\n$mid-gray: #555 !default;\n$gray: #777 !default;\n$silver: #999 !default;\n$light-silver: #aaa !default;\n$moon-gray: #ccc !default;\n$light-gray: #eee !default;\n$near-white: #f4f4f4 !default;\n$white: #fff !default;\n$transparent: transparent !default;\n$black-90: rgba(0,0,0,.9) !default;\n$black-80: rgba(0,0,0,.8) !default;\n$black-70: rgba(0,0,0,.7) !default;\n$black-60: rgba(0,0,0,.6) !default;\n$black-50: rgba(0,0,0,.5) !default;\n$black-40: rgba(0,0,0,.4) !default;\n$black-30: rgba(0,0,0,.3) !default;\n$black-20: rgba(0,0,0,.2) !default;\n$black-10: rgba(0,0,0,.1) !default;\n$black-05: rgba(0,0,0,.05) !default;\n$black-025: rgba(0,0,0,.025) !default;\n$black-0125: rgba(0,0,0,.0125) !default;\n$white-90: rgba(255,255,255,.9) !default;\n$white-80: rgba(255,255,255,.8) !default;\n$white-70: rgba(255,255,255,.7) !default;\n$white-60: rgba(255,255,255,.6) !default;\n$white-50: rgba(255,255,255,.5) !default;\n$white-40: rgba(255,255,255,.4) !default;\n$white-30: rgba(255,255,255,.3) !default;\n$white-20: rgba(255,255,255,.2) !default;\n$white-10: rgba(255,255,255,.1) !default;\n$white-05: rgba(255,255,255,.05) !default;\n$white-025: rgba(255,255,255,.025) !default;\n$white-0125: rgba(255,255,255,.0125) !default;\n$dark-red: #e7040f !default;\n$red: #ff4136 !default;\n$light-red: #ff725c !default;\n$orange: #ff6300 !default;\n$gold: #ffb700 !default;\n$yellow: #ffd700 !default;\n$light-yellow: #fbf1a9 !default;\n$purple: #5e2ca5 !default;\n$light-purple: #a463f2 !default;\n$dark-pink: #d5008f !default;\n$hot-pink: #ff41b4 !default;\n$pink: #ff80cc !default;\n$light-pink: #ffa3d7 !default;\n$dark-green: #137752 !default;\n$green: #19a974 !default;\n$light-green: #9eebcf !default;\n$navy: #001b44 !default;\n$dark-blue: #00449e !default;\n$blue: #357edd !default;\n$light-blue: #96ccff !default;\n$lightest-blue: #cdecff !default;\n$washed-blue: #f6fffe !default;\n$washed-green: #e8fdf5 !default;\n$washed-yellow: #fffceb !default;\n$washed-red: #ffdfdf !default;\n\n// Custom Media Query Variables\n\n$breakpoint-not-small: 'screen and (min-width: 30em)' !default;\n$breakpoint-medium: 'screen and (min-width: 30em) and (max-width: 60em)' !default;\n$breakpoint-large: 'screen and (min-width: 60em)' !default;\n\n/*\n\n VARIABLES\n\n*/\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BORDER RADIUS\n Docs: http://tachyons.io/docs/themes/border-radius/\n\n Base:\n br = border-radius\n\n Modifiers:\n 0 = 0/none\n 1 = 1st step in scale\n 2 = 2nd step in scale\n 3 = 3rd step in scale\n 4 = 4th step in scale\n\n Literal values:\n -100 = 100%\n -pill = 9999px\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n .br0 { border-radius: $border-radius-none }\n .br1 { border-radius: $border-radius-1; }\n .br2 { border-radius: $border-radius-2; }\n .br3 { border-radius: $border-radius-3; }\n .br4 { border-radius: $border-radius-4; }\n .br-100 { border-radius: $border-radius-circle; }\n .br-pill { border-radius: $border-radius-pill; }\n .br--bottom {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n .br--top {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n .br--right {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .br--left {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n@media #{$breakpoint-not-small} {\n .br0-ns { border-radius: $border-radius-none }\n .br1-ns { border-radius: $border-radius-1; }\n .br2-ns { border-radius: $border-radius-2; }\n .br3-ns { border-radius: $border-radius-3; }\n .br4-ns { border-radius: $border-radius-4; }\n .br-100-ns { border-radius: $border-radius-circle; }\n .br-pill-ns { border-radius: $border-radius-pill; }\n .br--bottom-ns {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n .br--top-ns {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n .br--right-ns {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .br--left-ns {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n}\n\n@media #{$breakpoint-medium} {\n .br0-m { border-radius: $border-radius-none }\n .br1-m { border-radius: $border-radius-1; }\n .br2-m { border-radius: $border-radius-2; }\n .br3-m { border-radius: $border-radius-3; }\n .br4-m { border-radius: $border-radius-4; }\n .br-100-m { border-radius: $border-radius-circle; }\n .br-pill-m { border-radius: $border-radius-pill; }\n .br--bottom-m {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n .br--top-m {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n .br--right-m {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .br--left-m {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n}\n\n@media #{$breakpoint-large} {\n .br0-l { border-radius: $border-radius-none }\n .br1-l { border-radius: $border-radius-1; }\n .br2-l { border-radius: $border-radius-2; }\n .br3-l { border-radius: $border-radius-3; }\n .br4-l { border-radius: $border-radius-4; }\n .br-100-l { border-radius: $border-radius-circle; }\n .br-pill-l { border-radius: $border-radius-pill; }\n .br--bottom-l {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n .br--top-l {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n .br--right-l {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .br--left-l {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BORDER STYLES\n Docs: http://tachyons.io/docs/themes/borders/\n\n Depends on base border module in _borders.css\n\n Base:\n b = border-style\n\n Modifiers:\n --none = none\n --dotted = dotted\n --dashed = dashed\n --solid = solid\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n */\n\n.b--dotted { border-style: dotted; }\n.b--dashed { border-style: dashed; }\n.b--solid { border-style: solid; }\n.b--none { border-style: none; }\n\n@media #{$breakpoint-not-small} {\n .b--dotted-ns { border-style: dotted; }\n .b--dashed-ns { border-style: dashed; }\n .b--solid-ns { border-style: solid; }\n .b--none-ns { border-style: none; }\n}\n\n@media #{$breakpoint-medium} {\n .b--dotted-m { border-style: dotted; }\n .b--dashed-m { border-style: dashed; }\n .b--solid-m { border-style: solid; }\n .b--none-m { border-style: none; }\n}\n\n@media #{$breakpoint-large} {\n .b--dotted-l { border-style: dotted; }\n .b--dashed-l { border-style: dashed; }\n .b--solid-l { border-style: solid; }\n .b--none-l { border-style: none; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BORDER WIDTHS\n Docs: http://tachyons.io/docs/themes/borders/\n\n Base:\n bw = border-width\n\n Modifiers:\n 0 = 0 width border\n 1 = 1st step in border-width scale\n 2 = 2nd step in border-width scale\n 3 = 3rd step in border-width scale\n 4 = 4th step in border-width scale\n 5 = 5th step in border-width scale\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.bw0 { border-width: $border-width-none; }\n.bw1 { border-width: $border-width-1; }\n.bw2 { border-width: $border-width-2; }\n.bw3 { border-width: $border-width-3; }\n.bw4 { border-width: $border-width-4; }\n.bw5 { border-width: $border-width-5; }\n\n/* Resets */\n.bt-0 { border-top-width: $border-width-none }\n.br-0 { border-right-width: $border-width-none }\n.bb-0 { border-bottom-width: $border-width-none }\n.bl-0 { border-left-width: $border-width-none }\n\n@media #{$breakpoint-not-small} {\n .bw0-ns { border-width: $border-width-none; }\n .bw1-ns { border-width: $border-width-1; }\n .bw2-ns { border-width: $border-width-2; }\n .bw3-ns { border-width: $border-width-3; }\n .bw4-ns { border-width: $border-width-4; }\n .bw5-ns { border-width: $border-width-5; }\n .bt-0-ns { border-top-width: $border-width-none }\n .br-0-ns { border-right-width: $border-width-none }\n .bb-0-ns { border-bottom-width: $border-width-none }\n .bl-0-ns { border-left-width: $border-width-none }\n}\n\n@media #{$breakpoint-medium} {\n .bw0-m { border-width: $border-width-none; }\n .bw1-m { border-width: $border-width-1; }\n .bw2-m { border-width: $border-width-2; }\n .bw3-m { border-width: $border-width-3; }\n .bw4-m { border-width: $border-width-4; }\n .bw5-m { border-width: $border-width-5; }\n .bt-0-m { border-top-width: $border-width-none }\n .br-0-m { border-right-width: $border-width-none }\n .bb-0-m { border-bottom-width: $border-width-none }\n .bl-0-m { border-left-width: $border-width-none }\n}\n\n@media #{$breakpoint-large} {\n .bw0-l { border-width: $border-width-none; }\n .bw1-l { border-width: $border-width-1; }\n .bw2-l { border-width: $border-width-2; }\n .bw3-l { border-width: $border-width-3; }\n .bw4-l { border-width: $border-width-4; }\n .bw5-l { border-width: $border-width-5; }\n .bt-0-l { border-top-width: $border-width-none }\n .br-0-l { border-right-width: $border-width-none }\n .bb-0-l { border-bottom-width: $border-width-none }\n .bl-0-l { border-left-width: $border-width-none }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n BOX-SHADOW\n Docs: http://tachyons.io/docs/themes/box-shadow/\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n */\n\n.shadow-1 { box-shadow: $box-shadow-1; }\n.shadow-2 { box-shadow: $box-shadow-2; }\n.shadow-3 { box-shadow: $box-shadow-3; }\n.shadow-4 { box-shadow: $box-shadow-4; }\n.shadow-5 { box-shadow: $box-shadow-5; }\n\n@media #{$breakpoint-not-small} {\n .shadow-1-ns { box-shadow: $box-shadow-1; }\n .shadow-2-ns { box-shadow: $box-shadow-2; }\n .shadow-3-ns { box-shadow: $box-shadow-3; }\n .shadow-4-ns { box-shadow: $box-shadow-4; }\n .shadow-5-ns { box-shadow: $box-shadow-5; }\n}\n\n@media #{$breakpoint-medium} {\n .shadow-1-m { box-shadow: $box-shadow-1; }\n .shadow-2-m { box-shadow: $box-shadow-2; }\n .shadow-3-m { box-shadow: $box-shadow-3; }\n .shadow-4-m { box-shadow: $box-shadow-4; }\n .shadow-5-m { box-shadow: $box-shadow-5; }\n}\n\n@media #{$breakpoint-large} {\n .shadow-1-l { box-shadow: $box-shadow-1; }\n .shadow-2-l { box-shadow: $box-shadow-2; }\n .shadow-3-l { box-shadow: $box-shadow-3; }\n .shadow-4-l { box-shadow: $box-shadow-4; }\n .shadow-5-l { box-shadow: $box-shadow-5; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n CODE\n\n*/\n\n.pre {\n overflow-x: auto;\n overflow-y: hidden;\n overflow: scroll;\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n COORDINATES\n Docs: http://tachyons.io/docs/layout/position/\n\n Use in combination with the position module.\n\n Base:\n top\n bottom\n right\n left\n\n Modifiers:\n -0 = literal value 0\n -1 = literal value 1\n -2 = literal value 2\n --1 = literal value -1\n --2 = literal value -2\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.top-0 { top: 0; }\n.right-0 { right: 0; }\n.bottom-0 { bottom: 0; }\n.left-0 { left: 0; }\n\n.top-1 { top: 1rem; }\n.right-1 { right: 1rem; }\n.bottom-1 { bottom: 1rem; }\n.left-1 { left: 1rem; }\n\n.top-2 { top: 2rem; }\n.right-2 { right: 2rem; }\n.bottom-2 { bottom: 2rem; }\n.left-2 { left: 2rem; }\n\n.top--1 { top: -1rem; }\n.right--1 { right: -1rem; }\n.bottom--1 { bottom: -1rem; }\n.left--1 { left: -1rem; }\n\n.top--2 { top: -2rem; }\n.right--2 { right: -2rem; }\n.bottom--2 { bottom: -2rem; }\n.left--2 { left: -2rem; }\n\n\n.absolute--fill {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n@media #{$breakpoint-not-small} {\n .top-0-ns { top: 0; }\n .left-0-ns { left: 0; }\n .right-0-ns { right: 0; }\n .bottom-0-ns { bottom: 0; }\n .top-1-ns { top: 1rem; }\n .left-1-ns { left: 1rem; }\n .right-1-ns { right: 1rem; }\n .bottom-1-ns { bottom: 1rem; }\n .top-2-ns { top: 2rem; }\n .left-2-ns { left: 2rem; }\n .right-2-ns { right: 2rem; }\n .bottom-2-ns { bottom: 2rem; }\n .top--1-ns { top: -1rem; }\n .right--1-ns { right: -1rem; }\n .bottom--1-ns { bottom: -1rem; }\n .left--1-ns { left: -1rem; }\n .top--2-ns { top: -2rem; }\n .right--2-ns { right: -2rem; }\n .bottom--2-ns { bottom: -2rem; }\n .left--2-ns { left: -2rem; }\n .absolute--fill-ns {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\n\n@media #{$breakpoint-medium} {\n .top-0-m { top: 0; }\n .left-0-m { left: 0; }\n .right-0-m { right: 0; }\n .bottom-0-m { bottom: 0; }\n .top-1-m { top: 1rem; }\n .left-1-m { left: 1rem; }\n .right-1-m { right: 1rem; }\n .bottom-1-m { bottom: 1rem; }\n .top-2-m { top: 2rem; }\n .left-2-m { left: 2rem; }\n .right-2-m { right: 2rem; }\n .bottom-2-m { bottom: 2rem; }\n .top--1-m { top: -1rem; }\n .right--1-m { right: -1rem; }\n .bottom--1-m { bottom: -1rem; }\n .left--1-m { left: -1rem; }\n .top--2-m { top: -2rem; }\n .right--2-m { right: -2rem; }\n .bottom--2-m { bottom: -2rem; }\n .left--2-m { left: -2rem; }\n .absolute--fill-m {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\n\n@media #{$breakpoint-large} {\n .top-0-l { top: 0; }\n .left-0-l { left: 0; }\n .right-0-l { right: 0; }\n .bottom-0-l { bottom: 0; }\n .top-1-l { top: 1rem; }\n .left-1-l { left: 1rem; }\n .right-1-l { right: 1rem; }\n .bottom-1-l { bottom: 1rem; }\n .top-2-l { top: 2rem; }\n .left-2-l { left: 2rem; }\n .right-2-l { right: 2rem; }\n .bottom-2-l { bottom: 2rem; }\n .top--1-l { top: -1rem; }\n .right--1-l { right: -1rem; }\n .bottom--1-l { bottom: -1rem; }\n .left--1-l { left: -1rem; }\n .top--2-l { top: -2rem; }\n .right--2-l { right: -2rem; }\n .bottom--2-l { bottom: -2rem; }\n .left--2-l { left: -2rem; }\n .absolute--fill-l {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n CLEARFIX\n http://tachyons.io/docs/layout/clearfix/\n\n*/\n\n/* Nicolas Gallaghers Clearfix solution\n Ref: http://nicolasgallagher.com/micro-clearfix-hack/ */\n\n.cf:before,\n.cf:after { content: \" \"; display: table; }\n.cf:after { clear: both; }\n.cf { zoom: 1; }\n\n.cl { clear: left; }\n.cr { clear: right; }\n.cb { clear: both; }\n.cn { clear: none; }\n\n@media #{$breakpoint-not-small} {\n .cl-ns { clear: left; }\n .cr-ns { clear: right; }\n .cb-ns { clear: both; }\n .cn-ns { clear: none; }\n}\n\n@media #{$breakpoint-medium} {\n .cl-m { clear: left; }\n .cr-m { clear: right; }\n .cb-m { clear: both; }\n .cn-m { clear: none; }\n}\n\n@media #{$breakpoint-large} {\n .cl-l { clear: left; }\n .cr-l { clear: right; }\n .cb-l { clear: both; }\n .cn-l { clear: none; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n FLEXBOX\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.flex { display: flex; }\n.inline-flex { display: inline-flex; }\n\n/* 1. Fix for Chrome 44 bug.\n * https://code.google.com/p/chromium/issues/detail?id=506893 */\n.flex-auto {\n flex: 1 1 auto;\n min-width: 0; /* 1 */\n min-height: 0; /* 1 */\n}\n\n.flex-none { flex: none; }\n\n.flex-column { flex-direction: column; }\n.flex-row { flex-direction: row; }\n.flex-wrap { flex-wrap: wrap; }\n.flex-nowrap { flex-wrap: nowrap; }\n.flex-wrap-reverse { flex-wrap: wrap-reverse; }\n.flex-column-reverse { flex-direction: column-reverse; }\n.flex-row-reverse { flex-direction: row-reverse; }\n\n.items-start { align-items: flex-start; }\n.items-end { align-items: flex-end; }\n.items-center { align-items: center; }\n.items-baseline { align-items: baseline; }\n.items-stretch { align-items: stretch; }\n\n.self-start { align-self: flex-start; }\n.self-end { align-self: flex-end; }\n.self-center { align-self: center; }\n.self-baseline { align-self: baseline; }\n.self-stretch { align-self: stretch; }\n\n.justify-start { justify-content: flex-start; }\n.justify-end { justify-content: flex-end; }\n.justify-center { justify-content: center; }\n.justify-between { justify-content: space-between; }\n.justify-around { justify-content: space-around; }\n\n.content-start { align-content: flex-start; }\n.content-end { align-content: flex-end; }\n.content-center { align-content: center; }\n.content-between { align-content: space-between; }\n.content-around { align-content: space-around; }\n.content-stretch { align-content: stretch; }\n\n.order-0 { order: 0; }\n.order-1 { order: 1; }\n.order-2 { order: 2; }\n.order-3 { order: 3; }\n.order-4 { order: 4; }\n.order-5 { order: 5; }\n.order-6 { order: 6; }\n.order-7 { order: 7; }\n.order-8 { order: 8; }\n.order-last { order: 99999; }\n\n.flex-grow-0 { flex-grow: 0; }\n.flex-grow-1 { flex-grow: 1; }\n\n.flex-shrink-0 { flex-shrink: 0; }\n.flex-shrink-1 { flex-shrink: 1; }\n\n@media #{$breakpoint-not-small} {\n .flex-ns { display: flex; }\n .inline-flex-ns { display: inline-flex; }\n .flex-auto-ns {\n flex: 1 1 auto;\n min-width: 0; /* 1 */\n min-height: 0; /* 1 */\n }\n .flex-none-ns { flex: none; }\n .flex-column-ns { flex-direction: column; }\n .flex-row-ns { flex-direction: row; }\n .flex-wrap-ns { flex-wrap: wrap; }\n .flex-nowrap-ns { flex-wrap: nowrap; }\n .flex-wrap-reverse-ns { flex-wrap: wrap-reverse; }\n .flex-column-reverse-ns { flex-direction: column-reverse; }\n .flex-row-reverse-ns { flex-direction: row-reverse; }\n .items-start-ns { align-items: flex-start; }\n .items-end-ns { align-items: flex-end; }\n .items-center-ns { align-items: center; }\n .items-baseline-ns { align-items: baseline; }\n .items-stretch-ns { align-items: stretch; }\n\n .self-start-ns { align-self: flex-start; }\n .self-end-ns { align-self: flex-end; }\n .self-center-ns { align-self: center; }\n .self-baseline-ns { align-self: baseline; }\n .self-stretch-ns { align-self: stretch; }\n\n .justify-start-ns { justify-content: flex-start; }\n .justify-end-ns { justify-content: flex-end; }\n .justify-center-ns { justify-content: center; }\n .justify-between-ns { justify-content: space-between; }\n .justify-around-ns { justify-content: space-around; }\n\n .content-start-ns { align-content: flex-start; }\n .content-end-ns { align-content: flex-end; }\n .content-center-ns { align-content: center; }\n .content-between-ns { align-content: space-between; }\n .content-around-ns { align-content: space-around; }\n .content-stretch-ns { align-content: stretch; }\n\n .order-0-ns { order: 0; }\n .order-1-ns { order: 1; }\n .order-2-ns { order: 2; }\n .order-3-ns { order: 3; }\n .order-4-ns { order: 4; }\n .order-5-ns { order: 5; }\n .order-6-ns { order: 6; }\n .order-7-ns { order: 7; }\n .order-8-ns { order: 8; }\n .order-last-ns { order: 99999; }\n\n .flex-grow-0-ns { flex-grow: 0; }\n .flex-grow-1-ns { flex-grow: 1; }\n\n .flex-shrink-0-ns { flex-shrink: 0; }\n .flex-shrink-1-ns { flex-shrink: 1; }\n}\n@media #{$breakpoint-medium} {\n .flex-m { display: flex; }\n .inline-flex-m { display: inline-flex; }\n .flex-auto-m {\n flex: 1 1 auto;\n min-width: 0; /* 1 */\n min-height: 0; /* 1 */\n }\n .flex-none-m { flex: none; }\n .flex-column-m { flex-direction: column; }\n .flex-row-m { flex-direction: row; }\n .flex-wrap-m { flex-wrap: wrap; }\n .flex-nowrap-m { flex-wrap: nowrap; }\n .flex-wrap-reverse-m { flex-wrap: wrap-reverse; }\n .flex-column-reverse-m { flex-direction: column-reverse; }\n .flex-row-reverse-m { flex-direction: row-reverse; }\n .items-start-m { align-items: flex-start; }\n .items-end-m { align-items: flex-end; }\n .items-center-m { align-items: center; }\n .items-baseline-m { align-items: baseline; }\n .items-stretch-m { align-items: stretch; }\n\n .self-start-m { align-self: flex-start; }\n .self-end-m { align-self: flex-end; }\n .self-center-m { align-self: center; }\n .self-baseline-m { align-self: baseline; }\n .self-stretch-m { align-self: stretch; }\n\n .justify-start-m { justify-content: flex-start; }\n .justify-end-m { justify-content: flex-end; }\n .justify-center-m { justify-content: center; }\n .justify-between-m { justify-content: space-between; }\n .justify-around-m { justify-content: space-around; }\n\n .content-start-m { align-content: flex-start; }\n .content-end-m { align-content: flex-end; }\n .content-center-m { align-content: center; }\n .content-between-m { align-content: space-between; }\n .content-around-m { align-content: space-around; }\n .content-stretch-m { align-content: stretch; }\n\n .order-0-m { order: 0; }\n .order-1-m { order: 1; }\n .order-2-m { order: 2; }\n .order-3-m { order: 3; }\n .order-4-m { order: 4; }\n .order-5-m { order: 5; }\n .order-6-m { order: 6; }\n .order-7-m { order: 7; }\n .order-8-m { order: 8; }\n .order-last-m { order: 99999; }\n\n .flex-grow-0-m { flex-grow: 0; }\n .flex-grow-1-m { flex-grow: 1; }\n\n .flex-shrink-0-m { flex-shrink: 0; }\n .flex-shrink-1-m { flex-shrink: 1; }\n}\n\n@media #{$breakpoint-large} {\n .flex-l { display: flex; }\n .inline-flex-l { display: inline-flex; }\n .flex-auto-l {\n flex: 1 1 auto;\n min-width: 0; /* 1 */\n min-height: 0; /* 1 */\n }\n .flex-none-l { flex: none; }\n .flex-column-l { flex-direction: column; }\n .flex-row-l { flex-direction: row; }\n .flex-wrap-l { flex-wrap: wrap; }\n .flex-nowrap-l { flex-wrap: nowrap; }\n .flex-wrap-reverse-l { flex-wrap: wrap-reverse; }\n .flex-column-reverse-l { flex-direction: column-reverse; }\n .flex-row-reverse-l { flex-direction: row-reverse; }\n\n .items-start-l { align-items: flex-start; }\n .items-end-l { align-items: flex-end; }\n .items-center-l { align-items: center; }\n .items-baseline-l { align-items: baseline; }\n .items-stretch-l { align-items: stretch; }\n\n .self-start-l { align-self: flex-start; }\n .self-end-l { align-self: flex-end; }\n .self-center-l { align-self: center; }\n .self-baseline-l { align-self: baseline; }\n .self-stretch-l { align-self: stretch; }\n\n .justify-start-l { justify-content: flex-start; }\n .justify-end-l { justify-content: flex-end; }\n .justify-center-l { justify-content: center; }\n .justify-between-l { justify-content: space-between; }\n .justify-around-l { justify-content: space-around; }\n\n .content-start-l { align-content: flex-start; }\n .content-end-l { align-content: flex-end; }\n .content-center-l { align-content: center; }\n .content-between-l { align-content: space-between; }\n .content-around-l { align-content: space-around; }\n .content-stretch-l { align-content: stretch; }\n\n .order-0-l { order: 0; }\n .order-1-l { order: 1; }\n .order-2-l { order: 2; }\n .order-3-l { order: 3; }\n .order-4-l { order: 4; }\n .order-5-l { order: 5; }\n .order-6-l { order: 6; }\n .order-7-l { order: 7; }\n .order-8-l { order: 8; }\n .order-last-l { order: 99999; }\n\n .flex-grow-0-l { flex-grow: 0; }\n .flex-grow-1-l { flex-grow: 1; }\n\n .flex-shrink-0-l { flex-shrink: 0; }\n .flex-shrink-1-l { flex-shrink: 1; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n DISPLAY\n Docs: http://tachyons.io/docs/layout/display\n\n Base:\n d = display\n\n Modifiers:\n n = none\n b = block\n ib = inline-block\n it = inline-table\n t = table\n tc = table-cell\n tr = table-row\n tcol = table-column\n tcolg = table-column-group\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.dn { display: none; }\n.di { display: inline; }\n.db { display: block; }\n.dib { display: inline-block; }\n.dit { display: inline-table; }\n.dt { display: table; }\n.dtc { display: table-cell; }\n.dt-row { display: table-row; }\n.dt-row-group { display: table-row-group; }\n.dt-column { display: table-column; }\n.dt-column-group { display: table-column-group; }\n\n/*\n This will set table to full width and then\n all cells will be equal width\n*/\n.dt--fixed {\n table-layout: fixed;\n width: 100%;\n}\n\n@media #{$breakpoint-not-small} {\n .dn-ns { display: none; }\n .di-ns { display: inline; }\n .db-ns { display: block; }\n .dib-ns { display: inline-block; }\n .dit-ns { display: inline-table; }\n .dt-ns { display: table; }\n .dtc-ns { display: table-cell; }\n .dt-row-ns { display: table-row; }\n .dt-row-group-ns { display: table-row-group; }\n .dt-column-ns { display: table-column; }\n .dt-column-group-ns { display: table-column-group; }\n\n .dt--fixed-ns {\n table-layout: fixed;\n width: 100%;\n }\n}\n\n@media #{$breakpoint-medium} {\n .dn-m { display: none; }\n .di-m { display: inline; }\n .db-m { display: block; }\n .dib-m { display: inline-block; }\n .dit-m { display: inline-table; }\n .dt-m { display: table; }\n .dtc-m { display: table-cell; }\n .dt-row-m { display: table-row; }\n .dt-row-group-m { display: table-row-group; }\n .dt-column-m { display: table-column; }\n .dt-column-group-m { display: table-column-group; }\n\n .dt--fixed-m {\n table-layout: fixed;\n width: 100%;\n }\n}\n\n@media #{$breakpoint-large} {\n .dn-l { display: none; }\n .di-l { display: inline; }\n .db-l { display: block; }\n .dib-l { display: inline-block; }\n .dit-l { display: inline-table; }\n .dt-l { display: table; }\n .dtc-l { display: table-cell; }\n .dt-row-l { display: table-row; }\n .dt-row-group-l { display: table-row-group; }\n .dt-column-l { display: table-column; }\n .dt-column-group-l { display: table-column-group; }\n\n .dt--fixed-l {\n table-layout: fixed;\n width: 100%;\n }\n}\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n FLOATS\n http://tachyons.io/docs/layout/floats/\n\n 1. Floated elements are automatically rendered as block level elements.\n Setting floats to display inline will fix the double margin bug in\n ie6. You know... just in case.\n\n 2. Don't forget to clearfix your floats with .cf\n\n Base:\n f = float\n\n Modifiers:\n l = left\n r = right\n n = none\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n\n\n.fl { float: left; _display: inline; }\n.fr { float: right; _display: inline; }\n.fn { float: none; }\n\n@media #{$breakpoint-not-small} {\n .fl-ns { float: left; _display: inline; }\n .fr-ns { float: right; _display: inline; }\n .fn-ns { float: none; }\n}\n\n@media #{$breakpoint-medium} {\n .fl-m { float: left; _display: inline; }\n .fr-m { float: right; _display: inline; }\n .fn-m { float: none; }\n}\n\n@media #{$breakpoint-large} {\n .fl-l { float: left; _display: inline; }\n .fr-l { float: right; _display: inline; }\n .fn-l { float: none; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n FONT FAMILY GROUPS\n Docs: http://tachyons.io/docs/typography/font-family/\n\n*/\n\n\n.sans-serif {\n font-family: $sans-serif;\n}\n\n.serif {\n font-family: $serif;\n}\n\n.system-sans-serif {\n font-family: sans-serif;\n}\n\n.system-serif {\n font-family: serif;\n}\n\n\n/* Monospaced Typefaces (for code) */\n\n/* From http://cssfontstack.com */\ncode, .code {\n font-family: Consolas,\n monaco,\n monospace;\n}\n\n.courier {\n font-family: 'Courier Next',\n courier,\n monospace;\n}\n\n\n/* Sans-Serif Typefaces */\n\n.helvetica {\n font-family: 'helvetica neue', helvetica,\n sans-serif;\n}\n\n.avenir {\n font-family: 'avenir next', avenir,\n sans-serif;\n}\n\n\n/* Serif Typefaces */\n\n.athelas {\n font-family: athelas,\n georgia,\n serif;\n}\n\n.georgia {\n font-family: georgia,\n serif;\n}\n\n.times {\n font-family: times,\n serif;\n}\n\n.bodoni {\n font-family: \"Bodoni MT\",\n serif;\n}\n\n.calisto {\n font-family: \"Calisto MT\",\n serif;\n}\n\n.garamond {\n font-family: garamond,\n serif;\n}\n\n.baskerville {\n font-family: baskerville,\n serif;\n}\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n FONT STYLE\n Docs: http://tachyons.io/docs/typography/font-style/\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.i { font-style: italic; }\n.fs-normal { font-style: normal; }\n\n@media #{$breakpoint-not-small} {\n .i-ns { font-style: italic; }\n .fs-normal-ns { font-style: normal; }\n}\n\n@media #{$breakpoint-medium} {\n .i-m { font-style: italic; }\n .fs-normal-m { font-style: normal; }\n}\n\n@media #{$breakpoint-large} {\n .i-l { font-style: italic; }\n .fs-normal-l { font-style: normal; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n FONT WEIGHT\n Docs: http://tachyons.io/docs/typography/font-weight/\n\n Base\n fw = font-weight\n\n Modifiers:\n 1 = literal value 100\n 2 = literal value 200\n 3 = literal value 300\n 4 = literal value 400\n 5 = literal value 500\n 6 = literal value 600\n 7 = literal value 700\n 8 = literal value 800\n 9 = literal value 900\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.normal { font-weight: normal; }\n.b { font-weight: bold; }\n.fw1 { font-weight: 100; }\n.fw2 { font-weight: 200; }\n.fw3 { font-weight: 300; }\n.fw4 { font-weight: 400; }\n.fw5 { font-weight: 500; }\n.fw6 { font-weight: 600; }\n.fw7 { font-weight: 700; }\n.fw8 { font-weight: 800; }\n.fw9 { font-weight: 900; }\n\n\n@media #{$breakpoint-not-small} {\n .normal-ns { font-weight: normal; }\n .b-ns { font-weight: bold; }\n .fw1-ns { font-weight: 100; }\n .fw2-ns { font-weight: 200; }\n .fw3-ns { font-weight: 300; }\n .fw4-ns { font-weight: 400; }\n .fw5-ns { font-weight: 500; }\n .fw6-ns { font-weight: 600; }\n .fw7-ns { font-weight: 700; }\n .fw8-ns { font-weight: 800; }\n .fw9-ns { font-weight: 900; }\n}\n\n@media #{$breakpoint-medium} {\n .normal-m { font-weight: normal; }\n .b-m { font-weight: bold; }\n .fw1-m { font-weight: 100; }\n .fw2-m { font-weight: 200; }\n .fw3-m { font-weight: 300; }\n .fw4-m { font-weight: 400; }\n .fw5-m { font-weight: 500; }\n .fw6-m { font-weight: 600; }\n .fw7-m { font-weight: 700; }\n .fw8-m { font-weight: 800; }\n .fw9-m { font-weight: 900; }\n}\n\n@media #{$breakpoint-large} {\n .normal-l { font-weight: normal; }\n .b-l { font-weight: bold; }\n .fw1-l { font-weight: 100; }\n .fw2-l { font-weight: 200; }\n .fw3-l { font-weight: 300; }\n .fw4-l { font-weight: 400; }\n .fw5-l { font-weight: 500; }\n .fw6-l { font-weight: 600; }\n .fw7-l { font-weight: 700; }\n .fw8-l { font-weight: 800; }\n .fw9-l { font-weight: 900; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n FORMS\n \n*/\n\n.input-reset {\n -webkit-appearance: none;\n -moz-appearance: none;\n}\n\n.button-reset::-moz-focus-inner,\n.input-reset::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n HEIGHTS\n Docs: http://tachyons.io/docs/layout/heights/\n\n Base:\n h = height\n min-h = min-height\n min-vh = min-height vertical screen height\n vh = vertical screen height\n\n Modifiers\n 1 = 1st step in height scale\n 2 = 2nd step in height scale\n 3 = 3rd step in height scale\n 4 = 4th step in height scale\n 5 = 5th step in height scale\n\n -25 = literal value 25%\n -50 = literal value 50%\n -75 = literal value 75%\n -100 = literal value 100%\n\n -auto = string value of auto\n -inherit = string value of inherit\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n/* Height Scale */\n\n.h1 { height: $height-1; }\n.h2 { height: $height-2; }\n.h3 { height: $height-3; }\n.h4 { height: $height-4; }\n.h5 { height: $height-5; }\n\n/* Height Percentages - Based off of height of parent */\n\n.h-25 { height: 25%; }\n.h-50 { height: 50%; }\n.h-75 { height: 75%; }\n.h-100 { height: 100%; }\n\n.min-h-100 { min-height: 100%; }\n\n/* Screen Height Percentage */\n\n.vh-25 { height: 25vh; }\n.vh-50 { height: 50vh; }\n.vh-75 { height: 75vh; }\n.vh-100 { height: 100vh; }\n\n.min-vh-100 { min-height: 100vh; }\n\n\n/* String Properties */\n\n.h-auto { height: auto; }\n.h-inherit { height: inherit; }\n\n@media #{$breakpoint-not-small} {\n .h1-ns { height: $height-1; }\n .h2-ns { height: $height-2; }\n .h3-ns { height: $height-3; }\n .h4-ns { height: $height-4; }\n .h5-ns { height: $height-5; }\n .h-25-ns { height: 25%; }\n .h-50-ns { height: 50%; }\n .h-75-ns { height: 75%; }\n .h-100-ns { height: 100%; }\n .min-h-100-ns { min-height: 100%; }\n .vh-25-ns { height: 25vh; }\n .vh-50-ns { height: 50vh; }\n .vh-75-ns { height: 75vh; }\n .vh-100-ns { height: 100vh; }\n .min-vh-100-ns { min-height: 100vh; }\n .h-auto-ns { height: auto; }\n .h-inherit-ns { height: inherit; }\n}\n\n@media #{$breakpoint-medium} {\n .h1-m { height: $height-1; }\n .h2-m { height: $height-2; }\n .h3-m { height: $height-3; }\n .h4-m { height: $height-4; }\n .h5-m { height: $height-5; }\n .h-25-m { height: 25%; }\n .h-50-m { height: 50%; }\n .h-75-m { height: 75%; }\n .h-100-m { height: 100%; }\n .min-h-100-m { min-height: 100%; }\n .vh-25-m { height: 25vh; }\n .vh-50-m { height: 50vh; }\n .vh-75-m { height: 75vh; }\n .vh-100-m { height: 100vh; }\n .min-vh-100-m { min-height: 100vh; }\n .h-auto-m { height: auto; }\n .h-inherit-m { height: inherit; }\n}\n\n@media #{$breakpoint-large} {\n .h1-l { height: $height-1; }\n .h2-l { height: $height-2; }\n .h3-l { height: $height-3; }\n .h4-l { height: $height-4; }\n .h5-l { height: $height-5; }\n .h-25-l { height: 25%; }\n .h-50-l { height: 50%; }\n .h-75-l { height: 75%; }\n .h-100-l { height: 100%; }\n .min-h-100-l { min-height: 100%; }\n .vh-25-l { height: 25vh; }\n .vh-50-l { height: 50vh; }\n .vh-75-l { height: 75vh; }\n .vh-100-l { height: 100vh; }\n .min-vh-100-l { min-height: 100vh; }\n .h-auto-l { height: auto; }\n .h-inherit-l { height: inherit; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n LETTER SPACING\n Docs: http://tachyons.io/docs/typography/tracking/\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.tracked { letter-spacing: $letter-spacing-1; }\n.tracked-tight { letter-spacing: $letter-spacing-tight; }\n.tracked-mega { letter-spacing: $letter-spacing-2; }\n\n@media #{$breakpoint-not-small} {\n .tracked-ns { letter-spacing: $letter-spacing-1; }\n .tracked-tight-ns { letter-spacing: $letter-spacing-tight; }\n .tracked-mega-ns { letter-spacing: $letter-spacing-2; }\n}\n\n@media #{$breakpoint-medium} {\n .tracked-m { letter-spacing: $letter-spacing-1; }\n .tracked-tight-m { letter-spacing: $letter-spacing-tight; }\n .tracked-mega-m { letter-spacing: $letter-spacing-2; }\n}\n\n@media #{$breakpoint-large} {\n .tracked-l { letter-spacing: $letter-spacing-1; }\n .tracked-tight-l { letter-spacing: $letter-spacing-tight; }\n .tracked-mega-l { letter-spacing: $letter-spacing-2; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n LINE HEIGHT / LEADING\n Docs: http://tachyons.io/docs/typography/line-height\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n .lh-solid { line-height: $line-height-solid; }\n .lh-title { line-height: $line-height-title; }\n .lh-copy { line-height: $line-height-copy; }\n\n@media #{$breakpoint-not-small} {\n .lh-solid-ns { line-height: $line-height-solid; }\n .lh-title-ns { line-height: $line-height-title; }\n .lh-copy-ns { line-height: $line-height-copy; }\n}\n\n@media #{$breakpoint-medium} {\n .lh-solid-m { line-height: $line-height-solid; }\n .lh-title-m { line-height: $line-height-title; }\n .lh-copy-m { line-height: $line-height-copy; }\n}\n\n@media #{$breakpoint-large} {\n .lh-solid-l { line-height: $line-height-solid; }\n .lh-title-l { line-height: $line-height-title; }\n .lh-copy-l { line-height: $line-height-copy; }\n}\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n LINKS\n Docs: http://tachyons.io/docs/elements/links/\n\n*/\n\n.link {\n text-decoration: none;\n transition: color .15s ease-in;\n}\n\n.link:link,\n.link:visited {\n transition: color .15s ease-in;\n}\n.link:hover {\n transition: color .15s ease-in;\n}\n.link:active {\n transition: color .15s ease-in;\n}\n.link:focus {\n transition: color .15s ease-in;\n outline: 1px dotted currentColor;\n}\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n LISTS\n http://tachyons.io/docs/elements/lists/\n\n*/\n\n.list { list-style-type: none; }\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n MAX WIDTHS\n Docs: http://tachyons.io/docs/layout/max-widths/\n\n Base:\n mw = max-width\n\n Modifiers\n 1 = 1st step in width scale\n 2 = 2nd step in width scale\n 3 = 3rd step in width scale\n 4 = 4th step in width scale\n 5 = 5th step in width scale\n 6 = 6st step in width scale\n 7 = 7nd step in width scale\n 8 = 8rd step in width scale\n 9 = 9th step in width scale\n\n -100 = literal value 100%\n\n -none = string value none\n\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n/* Max Width Percentages */\n\n.mw-100 { max-width: 100%; }\n\n/* Max Width Scale */\n\n.mw1 { max-width: $max-width-1; }\n.mw2 { max-width: $max-width-2; }\n.mw3 { max-width: $max-width-3; }\n.mw4 { max-width: $max-width-4; }\n.mw5 { max-width: $max-width-5; }\n.mw6 { max-width: $max-width-6; }\n.mw7 { max-width: $max-width-7; }\n.mw8 { max-width: $max-width-8; }\n.mw9 { max-width: $max-width-9; }\n\n/* Max Width String Properties */\n\n.mw-none { max-width: none; }\n\n@media #{$breakpoint-not-small} {\n .mw-100-ns { max-width: 100%; }\n\n .mw1-ns { max-width: $max-width-1; }\n .mw2-ns { max-width: $max-width-2; }\n .mw3-ns { max-width: $max-width-3; }\n .mw4-ns { max-width: $max-width-4; }\n .mw5-ns { max-width: $max-width-5; }\n .mw6-ns { max-width: $max-width-6; }\n .mw7-ns { max-width: $max-width-7; }\n .mw8-ns { max-width: $max-width-8; }\n .mw9-ns { max-width: $max-width-9; }\n\n .mw-none-ns { max-width: none; }\n}\n\n@media #{$breakpoint-medium} {\n .mw-100-m { max-width: 100%; }\n\n .mw1-m { max-width: $max-width-1; }\n .mw2-m { max-width: $max-width-2; }\n .mw3-m { max-width: $max-width-3; }\n .mw4-m { max-width: $max-width-4; }\n .mw5-m { max-width: $max-width-5; }\n .mw6-m { max-width: $max-width-6; }\n .mw7-m { max-width: $max-width-7; }\n .mw8-m { max-width: $max-width-8; }\n .mw9-m { max-width: $max-width-9; }\n\n .mw-none-m { max-width: none; }\n}\n\n@media #{$breakpoint-large} {\n .mw-100-l { max-width: 100%; }\n\n .mw1-l { max-width: $max-width-1; }\n .mw2-l { max-width: $max-width-2; }\n .mw3-l { max-width: $max-width-3; }\n .mw4-l { max-width: $max-width-4; }\n .mw5-l { max-width: $max-width-5; }\n .mw6-l { max-width: $max-width-6; }\n .mw7-l { max-width: $max-width-7; }\n .mw8-l { max-width: $max-width-8; }\n .mw9-l { max-width: $max-width-9; }\n\n .mw-none-l { max-width: none; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n WIDTHS\n Docs: http://tachyons.io/docs/layout/widths/\n\n Base:\n w = width\n\n Modifiers\n 1 = 1st step in width scale\n 2 = 2nd step in width scale\n 3 = 3rd step in width scale\n 4 = 4th step in width scale\n 5 = 5th step in width scale\n\n -10 = literal value 10%\n -20 = literal value 20%\n -25 = literal value 25%\n -30 = literal value 30%\n -33 = literal value 33%\n -34 = literal value 34%\n -40 = literal value 40%\n -50 = literal value 50%\n -60 = literal value 60%\n -70 = literal value 70%\n -75 = literal value 75%\n -80 = literal value 80%\n -90 = literal value 90%\n -100 = literal value 100%\n\n -third = 100% / 3 (Not supported in opera mini or IE8)\n -two-thirds = 100% / 1.5 (Not supported in opera mini or IE8)\n -auto = string value auto\n\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n */\n\n/* Width Scale */\n\n.w1 { width: $width-1; }\n.w2 { width: $width-2; }\n.w3 { width: $width-3; }\n.w4 { width: $width-4; }\n.w5 { width: $width-5; }\n\n.w-10 { width: 10%; }\n.w-20 { width: 20%; }\n.w-25 { width: 25%; }\n.w-30 { width: 30%; }\n.w-33 { width: 33%; }\n.w-34 { width: 34%; }\n.w-40 { width: 40%; }\n.w-50 { width: 50%; }\n.w-60 { width: 60%; }\n.w-70 { width: 70%; }\n.w-75 { width: 75%; }\n.w-80 { width: 80%; }\n.w-90 { width: 90%; }\n.w-100 { width: 100%; }\n\n.w-third { width: (100% / 3); }\n.w-two-thirds { width: (100% / 1.5); }\n.w-auto { width: auto; }\n\n@media #{$breakpoint-not-small} {\n .w1-ns { width: $width-1; }\n .w2-ns { width: $width-2; }\n .w3-ns { width: $width-3; }\n .w4-ns { width: $width-4; }\n .w5-ns { width: $width-5; }\n .w-10-ns { width: 10%; }\n .w-20-ns { width: 20%; }\n .w-25-ns { width: 25%; }\n .w-30-ns { width: 30%; }\n .w-33-ns { width: 33%; }\n .w-34-ns { width: 34%; }\n .w-40-ns { width: 40%; }\n .w-50-ns { width: 50%; }\n .w-60-ns { width: 60%; }\n .w-70-ns { width: 70%; }\n .w-75-ns { width: 75%; }\n .w-80-ns { width: 80%; }\n .w-90-ns { width: 90%; }\n .w-100-ns { width: 100%; }\n .w-third-ns { width: (100% / 3); }\n .w-two-thirds-ns { width: (100% / 1.5); }\n .w-auto-ns { width: auto; }\n}\n\n@media #{$breakpoint-medium} {\n .w1-m { width: $width-1; }\n .w2-m { width: $width-2; }\n .w3-m { width: $width-3; }\n .w4-m { width: $width-4; }\n .w5-m { width: $width-5; }\n .w-10-m { width: 10%; }\n .w-20-m { width: 20%; }\n .w-25-m { width: 25%; }\n .w-30-m { width: 30%; }\n .w-33-m { width: 33%; }\n .w-34-m { width: 34%; }\n .w-40-m { width: 40%; }\n .w-50-m { width: 50%; }\n .w-60-m { width: 60%; }\n .w-70-m { width: 70%; }\n .w-75-m { width: 75%; }\n .w-80-m { width: 80%; }\n .w-90-m { width: 90%; }\n .w-100-m { width: 100%; }\n .w-third-m { width: (100% / 3); }\n .w-two-thirds-m { width: (100% / 1.5); }\n .w-auto-m { width: auto; }\n}\n\n@media #{$breakpoint-large} {\n .w1-l { width: $width-1; }\n .w2-l { width: $width-2; }\n .w3-l { width: $width-3; }\n .w4-l { width: $width-4; }\n .w5-l { width: $width-5; }\n .w-10-l { width: 10%; }\n .w-20-l { width: 20%; }\n .w-25-l { width: 25%; }\n .w-30-l { width: 30%; }\n .w-33-l { width: 33%; }\n .w-34-l { width: 34%; }\n .w-40-l { width: 40%; }\n .w-50-l { width: 50%; }\n .w-60-l { width: 60%; }\n .w-70-l { width: 70%; }\n .w-75-l { width: 75%; }\n .w-80-l { width: 80%; }\n .w-90-l { width: 90%; }\n .w-100-l { width: 100%; }\n .w-third-l { width: (100% / 3); }\n .w-two-thirds-l { width: (100% / 1.5); }\n .w-auto-l { width: auto; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n OVERFLOW\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n */\n\n.overflow-visible { overflow: visible; }\n.overflow-hidden { overflow: hidden; }\n.overflow-scroll { overflow: scroll; }\n.overflow-auto { overflow: auto; }\n\n.overflow-x-visible { overflow-x: visible; }\n.overflow-x-hidden { overflow-x: hidden; }\n.overflow-x-scroll { overflow-x: scroll; }\n.overflow-x-auto { overflow-x: auto; }\n\n.overflow-y-visible { overflow-y: visible; }\n.overflow-y-hidden { overflow-y: hidden; }\n.overflow-y-scroll { overflow-y: scroll; }\n.overflow-y-auto { overflow-y: auto; }\n\n@media #{$breakpoint-not-small} {\n .overflow-visible-ns { overflow: visible; }\n .overflow-hidden-ns { overflow: hidden; }\n .overflow-scroll-ns { overflow: scroll; }\n .overflow-auto-ns { overflow: auto; }\n .overflow-x-visible-ns { overflow-x: visible; }\n .overflow-x-hidden-ns { overflow-x: hidden; }\n .overflow-x-scroll-ns { overflow-x: scroll; }\n .overflow-x-auto-ns { overflow-x: auto; }\n\n .overflow-y-visible-ns { overflow-y: visible; }\n .overflow-y-hidden-ns { overflow-y: hidden; }\n .overflow-y-scroll-ns { overflow-y: scroll; }\n .overflow-y-auto-ns { overflow-y: auto; }\n}\n\n@media #{$breakpoint-medium} {\n .overflow-visible-m { overflow: visible; }\n .overflow-hidden-m { overflow: hidden; }\n .overflow-scroll-m { overflow: scroll; }\n .overflow-auto-m { overflow: auto; }\n\n .overflow-x-visible-m { overflow-x: visible; }\n .overflow-x-hidden-m { overflow-x: hidden; }\n .overflow-x-scroll-m { overflow-x: scroll; }\n .overflow-x-auto-m { overflow-x: auto; }\n\n .overflow-y-visible-m { overflow-y: visible; }\n .overflow-y-hidden-m { overflow-y: hidden; }\n .overflow-y-scroll-m { overflow-y: scroll; }\n .overflow-y-auto-m { overflow-y: auto; }\n}\n\n@media #{$breakpoint-large} {\n .overflow-visible-l { overflow: visible; }\n .overflow-hidden-l { overflow: hidden; }\n .overflow-scroll-l { overflow: scroll; }\n .overflow-auto-l { overflow: auto; }\n\n .overflow-x-visible-l { overflow-x: visible; }\n .overflow-x-hidden-l { overflow-x: hidden; }\n .overflow-x-scroll-l { overflow-x: scroll; }\n .overflow-x-auto-l { overflow-x: auto; }\n\n .overflow-y-visible-l { overflow-y: visible; }\n .overflow-y-hidden-l { overflow-y: hidden; }\n .overflow-y-scroll-l { overflow-y: scroll; }\n .overflow-y-auto-l { overflow-y: auto; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n POSITIONING\n Docs: http://tachyons.io/docs/layout/position/\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.static { position: static; }\n.relative { position: relative; }\n.absolute { position: absolute; }\n.fixed { position: fixed; }\n\n@media #{$breakpoint-not-small} {\n .static-ns { position: static; }\n .relative-ns { position: relative; }\n .absolute-ns { position: absolute; }\n .fixed-ns { position: fixed; }\n}\n\n@media #{$breakpoint-medium} {\n .static-m { position: static; }\n .relative-m { position: relative; }\n .absolute-m { position: absolute; }\n .fixed-m { position: fixed; }\n}\n\n@media #{$breakpoint-large} {\n .static-l { position: static; }\n .relative-l { position: relative; }\n .absolute-l { position: absolute; }\n .fixed-l { position: fixed; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n OPACITY\n Docs: http://tachyons.io/docs/themes/opacity/\n\n*/\n\n.o-100 { opacity: 1; }\n.o-90 { opacity: .9; }\n.o-80 { opacity: .8; }\n.o-70 { opacity: .7; }\n.o-60 { opacity: .6; }\n.o-50 { opacity: .5; }\n.o-40 { opacity: .4; }\n.o-30 { opacity: .3; }\n.o-20 { opacity: .2; }\n.o-10 { opacity: .1; }\n.o-05 { opacity: .05; }\n.o-025 { opacity: .025; }\n.o-0 { opacity: 0; }\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n ROTATIONS\n\n*/\n\n.rotate-45 { transform: rotate(45deg); }\n.rotate-90 { transform: rotate(90deg); }\n.rotate-135 { transform: rotate(135deg); }\n.rotate-180 { transform: rotate(180deg); }\n.rotate-225 { transform: rotate(225deg); }\n.rotate-270 { transform: rotate(270deg); }\n.rotate-315 { transform: rotate(315deg); }\n\n@media #{$breakpoint-not-small}{\n .rotate-45-ns { transform: rotate(45deg); }\n .rotate-90-ns { transform: rotate(90deg); }\n .rotate-135-ns { transform: rotate(135deg); }\n .rotate-180-ns { transform: rotate(180deg); }\n .rotate-225-ns { transform: rotate(225deg); }\n .rotate-270-ns { transform: rotate(270deg); }\n .rotate-315-ns { transform: rotate(315deg); }\n}\n\n@media #{$breakpoint-medium}{\n .rotate-45-m { transform: rotate(45deg); }\n .rotate-90-m { transform: rotate(90deg); }\n .rotate-135-m { transform: rotate(135deg); }\n .rotate-180-m { transform: rotate(180deg); }\n .rotate-225-m { transform: rotate(225deg); }\n .rotate-270-m { transform: rotate(270deg); }\n .rotate-315-m { transform: rotate(315deg); }\n}\n\n@media #{$breakpoint-large}{\n .rotate-45-l { transform: rotate(45deg); }\n .rotate-90-l { transform: rotate(90deg); }\n .rotate-135-l { transform: rotate(135deg); }\n .rotate-180-l { transform: rotate(180deg); }\n .rotate-225-l { transform: rotate(225deg); }\n .rotate-270-l { transform: rotate(270deg); }\n .rotate-315-l { transform: rotate(315deg); }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n SKINS\n Docs: http://tachyons.io/docs/themes/skins/\n\n Classes for setting foreground and background colors on elements.\n If you haven't declared a border color, but set border on an element, it will\n be set to the current text color.\n\n*/\n\n/* Text colors */\n\n.black-90 { color: $black-90; }\n.black-80 { color: $black-80; }\n.black-70 { color: $black-70; }\n.black-60 { color: $black-60; }\n.black-50 { color: $black-50; }\n.black-40 { color: $black-40; }\n.black-30 { color: $black-30; }\n.black-20 { color: $black-20; }\n.black-10 { color: $black-10; }\n.black-05 { color: $black-05; }\n\n.white-90 { color: $white-90; }\n.white-80 { color: $white-80; }\n.white-70 { color: $white-70; }\n.white-60 { color: $white-60; }\n.white-50 { color: $white-50; }\n.white-40 { color: $white-40; }\n.white-30 { color: $white-30; }\n.white-20 { color: $white-20; }\n.white-10 { color: $white-10; }\n\n.black { color: $black; }\n.near-black { color: $near-black; }\n.dark-gray { color: $dark-gray; }\n.mid-gray { color: $mid-gray; }\n.gray { color: $gray; }\n.silver { color: $silver; }\n.light-silver { color: $light-silver; }\n.moon-gray { color: $moon-gray; }\n.light-gray { color: $light-gray; }\n.near-white { color: $near-white; }\n.white { color: $white; }\n\n.dark-red { color: $dark-red; }\n.red { color: $red; }\n.light-red { color: $light-red; }\n.orange { color: $orange; }\n.gold { color: $gold; }\n.yellow { color: $yellow; }\n.light-yellow { color: $light-yellow; }\n.purple { color: $purple; }\n.light-purple { color: $light-purple; }\n.dark-pink { color: $dark-pink; }\n.hot-pink { color: $hot-pink; }\n.pink { color: $pink; }\n.light-pink { color: $light-pink; }\n.dark-green { color: $dark-green; }\n.green { color: $green; }\n.light-green { color: $light-green; }\n.navy { color: $navy; }\n.dark-blue { color: $dark-blue; }\n.blue { color: $blue; }\n.light-blue { color: $light-blue; }\n.lightest-blue { color: $lightest-blue; }\n.washed-blue { color: $washed-blue; }\n.washed-green { color: $washed-green; }\n.washed-yellow { color: $washed-yellow; }\n.washed-red { color: $washed-red; }\n.color-inherit { color: inherit; }\n\n.bg-black-90 { background-color: $black-90; }\n.bg-black-80 { background-color: $black-80; }\n.bg-black-70 { background-color: $black-70; }\n.bg-black-60 { background-color: $black-60; }\n.bg-black-50 { background-color: $black-50; }\n.bg-black-40 { background-color: $black-40; }\n.bg-black-30 { background-color: $black-30; }\n.bg-black-20 { background-color: $black-20; }\n.bg-black-10 { background-color: $black-10; }\n.bg-black-05 { background-color: $black-05; }\n.bg-white-90 { background-color: $white-90; }\n.bg-white-80 { background-color: $white-80; }\n.bg-white-70 { background-color: $white-70; }\n.bg-white-60 { background-color: $white-60; }\n.bg-white-50 { background-color: $white-50; }\n.bg-white-40 { background-color: $white-40; }\n.bg-white-30 { background-color: $white-30; }\n.bg-white-20 { background-color: $white-20; }\n.bg-white-10 { background-color: $white-10; }\n\n\n\n/* Background colors */\n\n.bg-black { background-color: $black; }\n.bg-near-black { background-color: $near-black; }\n.bg-dark-gray { background-color: $dark-gray; }\n.bg-mid-gray { background-color: $mid-gray; }\n.bg-gray { background-color: $gray; }\n.bg-silver { background-color: $silver; }\n.bg-light-silver { background-color: $light-silver; }\n.bg-moon-gray { background-color: $moon-gray; }\n.bg-light-gray { background-color: $light-gray; }\n.bg-near-white { background-color: $near-white; }\n.bg-white { background-color: $white; }\n.bg-transparent { background-color: $transparent; }\n\n.bg-dark-red { background-color: $dark-red; }\n.bg-red { background-color: $red; }\n.bg-light-red { background-color: $light-red; }\n.bg-orange { background-color: $orange; }\n.bg-gold { background-color: $gold; }\n.bg-yellow { background-color: $yellow; }\n.bg-light-yellow { background-color: $light-yellow; }\n.bg-purple { background-color: $purple; }\n.bg-light-purple { background-color: $light-purple; }\n.bg-dark-pink { background-color: $dark-pink; }\n.bg-hot-pink { background-color: $hot-pink; }\n.bg-pink { background-color: $pink; }\n.bg-light-pink { background-color: $light-pink; }\n.bg-dark-green { background-color: $dark-green; }\n.bg-green { background-color: $green; }\n.bg-light-green { background-color: $light-green; }\n.bg-navy { background-color: $navy; }\n.bg-dark-blue { background-color: $dark-blue; }\n.bg-blue { background-color: $blue; }\n.bg-light-blue { background-color: $light-blue; }\n.bg-lightest-blue { background-color: $lightest-blue; }\n.bg-washed-blue { background-color: $washed-blue; }\n.bg-washed-green { background-color: $washed-green; }\n.bg-washed-yellow { background-color: $washed-yellow; }\n.bg-washed-red { background-color: $washed-red; }\n.bg-inherit { background-color: inherit; }\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n SKINS:PSEUDO\n\n Customize the color of an element when\n it is focused or hovered over.\n\n */\n\n.hover-black:hover,\n.hover-black:focus { color: $black; }\n.hover-near-black:hover,\n.hover-near-black:focus { color: $near-black; }\n.hover-dark-gray:hover,\n.hover-dark-gray:focus { color: $dark-gray; }\n.hover-mid-gray:hover,\n.hover-mid-gray:focus { color: $mid-gray; }\n.hover-gray:hover,\n.hover-gray:focus { color: $gray; }\n.hover-silver:hover,\n.hover-silver:focus { color: $silver; }\n.hover-light-silver:hover,\n.hover-light-silver:focus { color: $light-silver; }\n.hover-moon-gray:hover,\n.hover-moon-gray:focus { color: $moon-gray; }\n.hover-light-gray:hover,\n.hover-light-gray:focus { color: $light-gray; }\n.hover-near-white:hover,\n.hover-near-white:focus { color: $near-white; }\n.hover-white:hover,\n.hover-white:focus { color: $white; }\n\n.hover-black-90:hover,\n.hover-black-90:focus { color: $black-90; }\n.hover-black-80:hover,\n.hover-black-80:focus { color: $black-80; }\n.hover-black-70:hover,\n.hover-black-70:focus { color: $black-70; }\n.hover-black-60:hover,\n.hover-black-60:focus { color: $black-60; }\n.hover-black-50:hover,\n.hover-black-50:focus { color: $black-50; }\n.hover-black-40:hover,\n.hover-black-40:focus { color: $black-40; }\n.hover-black-30:hover,\n.hover-black-30:focus { color: $black-30; }\n.hover-black-20:hover,\n.hover-black-20:focus { color: $black-20; }\n.hover-black-10:hover,\n.hover-black-10:focus { color: $black-10; }\n.hover-white-90:hover,\n.hover-white-90:focus { color: $white-90; }\n.hover-white-80:hover,\n.hover-white-80:focus { color: $white-80; }\n.hover-white-70:hover,\n.hover-white-70:focus { color: $white-70; }\n.hover-white-60:hover,\n.hover-white-60:focus { color: $white-60; }\n.hover-white-50:hover,\n.hover-white-50:focus { color: $white-50; }\n.hover-white-40:hover,\n.hover-white-40:focus { color: $white-40; }\n.hover-white-30:hover,\n.hover-white-30:focus { color: $white-30; }\n.hover-white-20:hover,\n.hover-white-20:focus { color: $white-20; }\n.hover-white-10:hover,\n.hover-white-10:focus { color: $white-10; }\n.hover-inherit:hover,\n.hover-inherit:focus { color: inherit; }\n\n.hover-bg-black:hover,\n.hover-bg-black:focus { background-color: $black; }\n.hover-bg-near-black:hover,\n.hover-bg-near-black:focus { background-color: $near-black; }\n.hover-bg-dark-gray:hover,\n.hover-bg-dark-gray:focus { background-color: $dark-gray; }\n.hover-bg-mid-gray:hover,\n.hover-bg-mid-gray:focus { background-color: $mid-gray; }\n.hover-bg-gray:hover,\n.hover-bg-gray:focus { background-color: $gray; }\n.hover-bg-silver:hover,\n.hover-bg-silver:focus { background-color: $silver; }\n.hover-bg-light-silver:hover,\n.hover-bg-light-silver:focus { background-color: $light-silver; }\n.hover-bg-moon-gray:hover,\n.hover-bg-moon-gray:focus { background-color: $moon-gray; }\n.hover-bg-light-gray:hover,\n.hover-bg-light-gray:focus { background-color: $light-gray; }\n.hover-bg-near-white:hover,\n.hover-bg-near-white:focus { background-color: $near-white; }\n.hover-bg-white:hover,\n.hover-bg-white:focus { background-color: $white; }\n.hover-bg-transparent:hover,\n.hover-bg-transparent:focus { background-color: $transparent; }\n\n.hover-bg-black-90:hover,\n.hover-bg-black-90:focus { background-color: $black-90; }\n.hover-bg-black-80:hover,\n.hover-bg-black-80:focus { background-color: $black-80; }\n.hover-bg-black-70:hover,\n.hover-bg-black-70:focus { background-color: $black-70; }\n.hover-bg-black-60:hover,\n.hover-bg-black-60:focus { background-color: $black-60; }\n.hover-bg-black-50:hover,\n.hover-bg-black-50:focus { background-color: $black-50; }\n.hover-bg-black-40:hover,\n.hover-bg-black-40:focus { background-color: $black-40; }\n.hover-bg-black-30:hover,\n.hover-bg-black-30:focus { background-color: $black-30; }\n.hover-bg-black-20:hover,\n.hover-bg-black-20:focus { background-color: $black-20; }\n.hover-bg-black-10:hover,\n.hover-bg-black-10:focus { background-color: $black-10; }\n.hover-bg-white-90:hover,\n.hover-bg-white-90:focus { background-color: $white-90; }\n.hover-bg-white-80:hover,\n.hover-bg-white-80:focus { background-color: $white-80; }\n.hover-bg-white-70:hover,\n.hover-bg-white-70:focus { background-color: $white-70; }\n.hover-bg-white-60:hover,\n.hover-bg-white-60:focus { background-color: $white-60; }\n.hover-bg-white-50:hover,\n.hover-bg-white-50:focus { background-color: $white-50; }\n.hover-bg-white-40:hover,\n.hover-bg-white-40:focus { background-color: $white-40; }\n.hover-bg-white-30:hover,\n.hover-bg-white-30:focus { background-color: $white-30; }\n.hover-bg-white-20:hover,\n.hover-bg-white-20:focus { background-color: $white-20; }\n.hover-bg-white-10:hover,\n.hover-bg-white-10:focus { background-color: $white-10; }\n\n.hover-dark-red:hover,\n.hover-dark-red:focus { color: $dark-red; }\n.hover-red:hover,\n.hover-red:focus { color: $red; }\n.hover-light-red:hover,\n.hover-light-red:focus { color: $light-red; }\n.hover-orange:hover,\n.hover-orange:focus { color: $orange; }\n.hover-gold:hover,\n.hover-gold:focus { color: $gold; }\n.hover-yellow:hover,\n.hover-yellow:focus { color: $yellow; }\n.hover-light-yellow:hover,\n.hover-light-yellow:focus { color: $light-yellow; }\n.hover-purple:hover,\n.hover-purple:focus { color: $purple; }\n.hover-light-purple:hover,\n.hover-light-purple:focus { color: $light-purple; }\n.hover-dark-pink:hover,\n.hover-dark-pink:focus { color: $dark-pink; }\n.hover-hot-pink:hover,\n.hover-hot-pink:focus { color: $hot-pink; }\n.hover-pink:hover,\n.hover-pink:focus { color: $pink; }\n.hover-light-pink:hover,\n.hover-light-pink:focus { color: $light-pink; }\n.hover-dark-green:hover,\n.hover-dark-green:focus { color: $dark-green; }\n.hover-green:hover,\n.hover-green:focus { color: $green; }\n.hover-light-green:hover,\n.hover-light-green:focus { color: $light-green; }\n.hover-navy:hover,\n.hover-navy:focus { color: $navy; }\n.hover-dark-blue:hover,\n.hover-dark-blue:focus { color: $dark-blue; }\n.hover-blue:hover,\n.hover-blue:focus { color: $blue; }\n.hover-light-blue:hover,\n.hover-light-blue:focus { color: $light-blue; }\n.hover-lightest-blue:hover,\n.hover-lightest-blue:focus { color: $lightest-blue; }\n.hover-washed-blue:hover,\n.hover-washed-blue:focus { color: $washed-blue; }\n.hover-washed-green:hover,\n.hover-washed-green:focus { color: $washed-green; }\n.hover-washed-yellow:hover,\n.hover-washed-yellow:focus { color: $washed-yellow; }\n.hover-washed-red:hover,\n.hover-washed-red:focus { color: $washed-red; }\n\n.hover-bg-dark-red:hover,\n.hover-bg-dark-red:focus { background-color: $dark-red; }\n.hover-bg-red:hover,\n.hover-bg-red:focus { background-color: $red; }\n.hover-bg-light-red:hover,\n.hover-bg-light-red:focus { background-color: $light-red; }\n.hover-bg-orange:hover,\n.hover-bg-orange:focus { background-color: $orange; }\n.hover-bg-gold:hover,\n.hover-bg-gold:focus { background-color: $gold; }\n.hover-bg-yellow:hover,\n.hover-bg-yellow:focus { background-color: $yellow; }\n.hover-bg-light-yellow:hover,\n.hover-bg-light-yellow:focus { background-color: $light-yellow; }\n.hover-bg-purple:hover,\n.hover-bg-purple:focus { background-color: $purple; }\n.hover-bg-light-purple:hover,\n.hover-bg-light-purple:focus { background-color: $light-purple; }\n.hover-bg-dark-pink:hover,\n.hover-bg-dark-pink:focus { background-color: $dark-pink; }\n.hover-bg-hot-pink:hover,\n.hover-bg-hot-pink:focus { background-color: $hot-pink; }\n.hover-bg-pink:hover,\n.hover-bg-pink:focus { background-color: $pink; }\n.hover-bg-light-pink:hover,\n.hover-bg-light-pink:focus { background-color: $light-pink; }\n.hover-bg-dark-green:hover,\n.hover-bg-dark-green:focus { background-color: $dark-green; }\n.hover-bg-green:hover,\n.hover-bg-green:focus { background-color: $green; }\n.hover-bg-light-green:hover,\n.hover-bg-light-green:focus { background-color: $light-green; }\n.hover-bg-navy:hover,\n.hover-bg-navy:focus { background-color: $navy; }\n.hover-bg-dark-blue:hover,\n.hover-bg-dark-blue:focus { background-color: $dark-blue; }\n.hover-bg-blue:hover,\n.hover-bg-blue:focus { background-color: $blue; }\n.hover-bg-light-blue:hover,\n.hover-bg-light-blue:focus { background-color: $light-blue; }\n.hover-bg-lightest-blue:hover,\n.hover-bg-lightest-blue:focus { background-color: $lightest-blue; }\n.hover-bg-washed-blue:hover,\n.hover-bg-washed-blue:focus { background-color: $washed-blue; }\n.hover-bg-washed-green:hover,\n.hover-bg-washed-green:focus { background-color: $washed-green; }\n.hover-bg-washed-yellow:hover,\n.hover-bg-washed-yellow:focus { background-color: $washed-yellow; }\n.hover-bg-washed-red:hover,\n.hover-bg-washed-red:focus { background-color: $washed-red; }\n.hover-bg-inherit:hover,\n.hover-bg-inherit:focus { background-color: inherit; }\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/* Variables */\n\n/*\n SPACING\n Docs: http://tachyons.io/docs/layout/spacing/\n\n An eight step powers of two scale ranging from 0 to 16rem.\n\n Base:\n p = padding\n m = margin\n\n Modifiers:\n a = all\n h = horizontal\n v = vertical\n t = top\n r = right\n b = bottom\n l = left\n\n 0 = none\n 1 = 1st step in spacing scale\n 2 = 2nd step in spacing scale\n 3 = 3rd step in spacing scale\n 4 = 4th step in spacing scale\n 5 = 5th step in spacing scale\n 6 = 6th step in spacing scale\n 7 = 7th step in spacing scale\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n\n.pa0 { padding: $spacing-none; }\n.pa1 { padding: $spacing-extra-small; }\n.pa2 { padding: $spacing-small; }\n.pa3 { padding: $spacing-medium; }\n.pa4 { padding: $spacing-large; }\n.pa5 { padding: $spacing-extra-large; }\n.pa6 { padding: $spacing-extra-extra-large; }\n.pa7 { padding: $spacing-extra-extra-extra-large; }\n\n.pl0 { padding-left: $spacing-none; }\n.pl1 { padding-left: $spacing-extra-small; }\n.pl2 { padding-left: $spacing-small; }\n.pl3 { padding-left: $spacing-medium; }\n.pl4 { padding-left: $spacing-large; }\n.pl5 { padding-left: $spacing-extra-large; }\n.pl6 { padding-left: $spacing-extra-extra-large; }\n.pl7 { padding-left: $spacing-extra-extra-extra-large; }\n\n.pr0 { padding-right: $spacing-none; }\n.pr1 { padding-right: $spacing-extra-small; }\n.pr2 { padding-right: $spacing-small; }\n.pr3 { padding-right: $spacing-medium; }\n.pr4 { padding-right: $spacing-large; }\n.pr5 { padding-right: $spacing-extra-large; }\n.pr6 { padding-right: $spacing-extra-extra-large; }\n.pr7 { padding-right: $spacing-extra-extra-extra-large; }\n\n.pb0 { padding-bottom: $spacing-none; }\n.pb1 { padding-bottom: $spacing-extra-small; }\n.pb2 { padding-bottom: $spacing-small; }\n.pb3 { padding-bottom: $spacing-medium; }\n.pb4 { padding-bottom: $spacing-large; }\n.pb5 { padding-bottom: $spacing-extra-large; }\n.pb6 { padding-bottom: $spacing-extra-extra-large; }\n.pb7 { padding-bottom: $spacing-extra-extra-extra-large; }\n\n.pt0 { padding-top: $spacing-none; }\n.pt1 { padding-top: $spacing-extra-small; }\n.pt2 { padding-top: $spacing-small; }\n.pt3 { padding-top: $spacing-medium; }\n.pt4 { padding-top: $spacing-large; }\n.pt5 { padding-top: $spacing-extra-large; }\n.pt6 { padding-top: $spacing-extra-extra-large; }\n.pt7 { padding-top: $spacing-extra-extra-extra-large; }\n\n.pv0 {\n padding-top: $spacing-none;\n padding-bottom: $spacing-none;\n}\n.pv1 {\n padding-top: $spacing-extra-small;\n padding-bottom: $spacing-extra-small;\n}\n.pv2 {\n padding-top: $spacing-small;\n padding-bottom: $spacing-small;\n}\n.pv3 {\n padding-top: $spacing-medium;\n padding-bottom: $spacing-medium;\n}\n.pv4 {\n padding-top: $spacing-large;\n padding-bottom: $spacing-large;\n}\n.pv5 {\n padding-top: $spacing-extra-large;\n padding-bottom: $spacing-extra-large;\n}\n.pv6 {\n padding-top: $spacing-extra-extra-large;\n padding-bottom: $spacing-extra-extra-large;\n}\n\n.pv7 {\n padding-top: $spacing-extra-extra-extra-large;\n padding-bottom: $spacing-extra-extra-extra-large;\n}\n\n.ph0 {\n padding-left: $spacing-none;\n padding-right: $spacing-none;\n}\n\n.ph1 {\n padding-left: $spacing-extra-small;\n padding-right: $spacing-extra-small;\n}\n\n.ph2 {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n}\n\n.ph3 {\n padding-left: $spacing-medium;\n padding-right: $spacing-medium;\n}\n\n.ph4 {\n padding-left: $spacing-large;\n padding-right: $spacing-large;\n}\n\n.ph5 {\n padding-left: $spacing-extra-large;\n padding-right: $spacing-extra-large;\n}\n\n.ph6 {\n padding-left: $spacing-extra-extra-large;\n padding-right: $spacing-extra-extra-large;\n}\n\n.ph7 {\n padding-left: $spacing-extra-extra-extra-large;\n padding-right: $spacing-extra-extra-extra-large;\n}\n\n.ma0 { margin: $spacing-none; }\n.ma1 { margin: $spacing-extra-small; }\n.ma2 { margin: $spacing-small; }\n.ma3 { margin: $spacing-medium; }\n.ma4 { margin: $spacing-large; }\n.ma5 { margin: $spacing-extra-large; }\n.ma6 { margin: $spacing-extra-extra-large; }\n.ma7 { margin: $spacing-extra-extra-extra-large; }\n\n.ml0 { margin-left: $spacing-none; }\n.ml1 { margin-left: $spacing-extra-small; }\n.ml2 { margin-left: $spacing-small; }\n.ml3 { margin-left: $spacing-medium; }\n.ml4 { margin-left: $spacing-large; }\n.ml5 { margin-left: $spacing-extra-large; }\n.ml6 { margin-left: $spacing-extra-extra-large; }\n.ml7 { margin-left: $spacing-extra-extra-extra-large; }\n\n.mr0 { margin-right: $spacing-none; }\n.mr1 { margin-right: $spacing-extra-small; }\n.mr2 { margin-right: $spacing-small; }\n.mr3 { margin-right: $spacing-medium; }\n.mr4 { margin-right: $spacing-large; }\n.mr5 { margin-right: $spacing-extra-large; }\n.mr6 { margin-right: $spacing-extra-extra-large; }\n.mr7 { margin-right: $spacing-extra-extra-extra-large; }\n\n.mb0 { margin-bottom: $spacing-none; }\n.mb1 { margin-bottom: $spacing-extra-small; }\n.mb2 { margin-bottom: $spacing-small; }\n.mb3 { margin-bottom: $spacing-medium; }\n.mb4 { margin-bottom: $spacing-large; }\n.mb5 { margin-bottom: $spacing-extra-large; }\n.mb6 { margin-bottom: $spacing-extra-extra-large; }\n.mb7 { margin-bottom: $spacing-extra-extra-extra-large; }\n\n.mt0 { margin-top: $spacing-none; }\n.mt1 { margin-top: $spacing-extra-small; }\n.mt2 { margin-top: $spacing-small; }\n.mt3 { margin-top: $spacing-medium; }\n.mt4 { margin-top: $spacing-large; }\n.mt5 { margin-top: $spacing-extra-large; }\n.mt6 { margin-top: $spacing-extra-extra-large; }\n.mt7 { margin-top: $spacing-extra-extra-extra-large; }\n\n.mv0 {\n margin-top: $spacing-none;\n margin-bottom: $spacing-none;\n}\n.mv1 {\n margin-top: $spacing-extra-small;\n margin-bottom: $spacing-extra-small;\n}\n.mv2 {\n margin-top: $spacing-small;\n margin-bottom: $spacing-small;\n}\n.mv3 {\n margin-top: $spacing-medium;\n margin-bottom: $spacing-medium;\n}\n.mv4 {\n margin-top: $spacing-large;\n margin-bottom: $spacing-large;\n}\n.mv5 {\n margin-top: $spacing-extra-large;\n margin-bottom: $spacing-extra-large;\n}\n.mv6 {\n margin-top: $spacing-extra-extra-large;\n margin-bottom: $spacing-extra-extra-large;\n}\n.mv7 {\n margin-top: $spacing-extra-extra-extra-large;\n margin-bottom: $spacing-extra-extra-extra-large;\n}\n\n.mh0 {\n margin-left: $spacing-none;\n margin-right: $spacing-none;\n}\n.mh1 {\n margin-left: $spacing-extra-small;\n margin-right: $spacing-extra-small;\n}\n.mh2 {\n margin-left: $spacing-small;\n margin-right: $spacing-small;\n}\n.mh3 {\n margin-left: $spacing-medium;\n margin-right: $spacing-medium;\n}\n.mh4 {\n margin-left: $spacing-large;\n margin-right: $spacing-large;\n}\n.mh5 {\n margin-left: $spacing-extra-large;\n margin-right: $spacing-extra-large;\n}\n.mh6 {\n margin-left: $spacing-extra-extra-large;\n margin-right: $spacing-extra-extra-large;\n}\n.mh7 {\n margin-left: $spacing-extra-extra-extra-large;\n margin-right: $spacing-extra-extra-extra-large;\n}\n\n@media #{$breakpoint-not-small} {\n .pa0-ns { padding: $spacing-none; }\n .pa1-ns { padding: $spacing-extra-small; }\n .pa2-ns { padding: $spacing-small; }\n .pa3-ns { padding: $spacing-medium; }\n .pa4-ns { padding: $spacing-large; }\n .pa5-ns { padding: $spacing-extra-large; }\n .pa6-ns { padding: $spacing-extra-extra-large; }\n .pa7-ns { padding: $spacing-extra-extra-extra-large; }\n\n .pl0-ns { padding-left: $spacing-none; }\n .pl1-ns { padding-left: $spacing-extra-small; }\n .pl2-ns { padding-left: $spacing-small; }\n .pl3-ns { padding-left: $spacing-medium; }\n .pl4-ns { padding-left: $spacing-large; }\n .pl5-ns { padding-left: $spacing-extra-large; }\n .pl6-ns { padding-left: $spacing-extra-extra-large; }\n .pl7-ns { padding-left: $spacing-extra-extra-extra-large; }\n\n .pr0-ns { padding-right: $spacing-none; }\n .pr1-ns { padding-right: $spacing-extra-small; }\n .pr2-ns { padding-right: $spacing-small; }\n .pr3-ns { padding-right: $spacing-medium; }\n .pr4-ns { padding-right: $spacing-large; }\n .pr5-ns { padding-right: $spacing-extra-large; }\n .pr6-ns { padding-right: $spacing-extra-extra-large; }\n .pr7-ns { padding-right: $spacing-extra-extra-extra-large; }\n\n .pb0-ns { padding-bottom: $spacing-none; }\n .pb1-ns { padding-bottom: $spacing-extra-small; }\n .pb2-ns { padding-bottom: $spacing-small; }\n .pb3-ns { padding-bottom: $spacing-medium; }\n .pb4-ns { padding-bottom: $spacing-large; }\n .pb5-ns { padding-bottom: $spacing-extra-large; }\n .pb6-ns { padding-bottom: $spacing-extra-extra-large; }\n .pb7-ns { padding-bottom: $spacing-extra-extra-extra-large; }\n\n .pt0-ns { padding-top: $spacing-none; }\n .pt1-ns { padding-top: $spacing-extra-small; }\n .pt2-ns { padding-top: $spacing-small; }\n .pt3-ns { padding-top: $spacing-medium; }\n .pt4-ns { padding-top: $spacing-large; }\n .pt5-ns { padding-top: $spacing-extra-large; }\n .pt6-ns { padding-top: $spacing-extra-extra-large; }\n .pt7-ns { padding-top: $spacing-extra-extra-extra-large; }\n\n .pv0-ns {\n padding-top: $spacing-none;\n padding-bottom: $spacing-none;\n }\n .pv1-ns {\n padding-top: $spacing-extra-small;\n padding-bottom: $spacing-extra-small;\n }\n .pv2-ns {\n padding-top: $spacing-small;\n padding-bottom: $spacing-small;\n }\n .pv3-ns {\n padding-top: $spacing-medium;\n padding-bottom: $spacing-medium;\n }\n .pv4-ns {\n padding-top: $spacing-large;\n padding-bottom: $spacing-large;\n }\n .pv5-ns {\n padding-top: $spacing-extra-large;\n padding-bottom: $spacing-extra-large;\n }\n .pv6-ns {\n padding-top: $spacing-extra-extra-large;\n padding-bottom: $spacing-extra-extra-large;\n }\n .pv7-ns {\n padding-top: $spacing-extra-extra-extra-large;\n padding-bottom: $spacing-extra-extra-extra-large;\n }\n .ph0-ns {\n padding-left: $spacing-none;\n padding-right: $spacing-none;\n }\n .ph1-ns {\n padding-left: $spacing-extra-small;\n padding-right: $spacing-extra-small;\n }\n .ph2-ns {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n }\n .ph3-ns {\n padding-left: $spacing-medium;\n padding-right: $spacing-medium;\n }\n .ph4-ns {\n padding-left: $spacing-large;\n padding-right: $spacing-large;\n }\n .ph5-ns {\n padding-left: $spacing-extra-large;\n padding-right: $spacing-extra-large;\n }\n .ph6-ns {\n padding-left: $spacing-extra-extra-large;\n padding-right: $spacing-extra-extra-large;\n }\n .ph7-ns {\n padding-left: $spacing-extra-extra-extra-large;\n padding-right: $spacing-extra-extra-extra-large;\n }\n\n .ma0-ns { margin: $spacing-none; }\n .ma1-ns { margin: $spacing-extra-small; }\n .ma2-ns { margin: $spacing-small; }\n .ma3-ns { margin: $spacing-medium; }\n .ma4-ns { margin: $spacing-large; }\n .ma5-ns { margin: $spacing-extra-large; }\n .ma6-ns { margin: $spacing-extra-extra-large; }\n .ma7-ns { margin: $spacing-extra-extra-extra-large; }\n\n .ml0-ns { margin-left: $spacing-none; }\n .ml1-ns { margin-left: $spacing-extra-small; }\n .ml2-ns { margin-left: $spacing-small; }\n .ml3-ns { margin-left: $spacing-medium; }\n .ml4-ns { margin-left: $spacing-large; }\n .ml5-ns { margin-left: $spacing-extra-large; }\n .ml6-ns { margin-left: $spacing-extra-extra-large; }\n .ml7-ns { margin-left: $spacing-extra-extra-extra-large; }\n\n .mr0-ns { margin-right: $spacing-none; }\n .mr1-ns { margin-right: $spacing-extra-small; }\n .mr2-ns { margin-right: $spacing-small; }\n .mr3-ns { margin-right: $spacing-medium; }\n .mr4-ns { margin-right: $spacing-large; }\n .mr5-ns { margin-right: $spacing-extra-large; }\n .mr6-ns { margin-right: $spacing-extra-extra-large; }\n .mr7-ns { margin-right: $spacing-extra-extra-extra-large; }\n\n .mb0-ns { margin-bottom: $spacing-none; }\n .mb1-ns { margin-bottom: $spacing-extra-small; }\n .mb2-ns { margin-bottom: $spacing-small; }\n .mb3-ns { margin-bottom: $spacing-medium; }\n .mb4-ns { margin-bottom: $spacing-large; }\n .mb5-ns { margin-bottom: $spacing-extra-large; }\n .mb6-ns { margin-bottom: $spacing-extra-extra-large; }\n .mb7-ns { margin-bottom: $spacing-extra-extra-extra-large; }\n\n .mt0-ns { margin-top: $spacing-none; }\n .mt1-ns { margin-top: $spacing-extra-small; }\n .mt2-ns { margin-top: $spacing-small; }\n .mt3-ns { margin-top: $spacing-medium; }\n .mt4-ns { margin-top: $spacing-large; }\n .mt5-ns { margin-top: $spacing-extra-large; }\n .mt6-ns { margin-top: $spacing-extra-extra-large; }\n .mt7-ns { margin-top: $spacing-extra-extra-extra-large; }\n\n .mv0-ns {\n margin-top: $spacing-none;\n margin-bottom: $spacing-none;\n }\n .mv1-ns {\n margin-top: $spacing-extra-small;\n margin-bottom: $spacing-extra-small;\n }\n .mv2-ns {\n margin-top: $spacing-small;\n margin-bottom: $spacing-small;\n }\n .mv3-ns {\n margin-top: $spacing-medium;\n margin-bottom: $spacing-medium;\n }\n .mv4-ns {\n margin-top: $spacing-large;\n margin-bottom: $spacing-large;\n }\n .mv5-ns {\n margin-top: $spacing-extra-large;\n margin-bottom: $spacing-extra-large;\n }\n .mv6-ns {\n margin-top: $spacing-extra-extra-large;\n margin-bottom: $spacing-extra-extra-large;\n }\n .mv7-ns {\n margin-top: $spacing-extra-extra-extra-large;\n margin-bottom: $spacing-extra-extra-extra-large;\n }\n\n .mh0-ns {\n margin-left: $spacing-none;\n margin-right: $spacing-none;\n }\n .mh1-ns {\n margin-left: $spacing-extra-small;\n margin-right: $spacing-extra-small;\n }\n .mh2-ns {\n margin-left: $spacing-small;\n margin-right: $spacing-small;\n }\n .mh3-ns {\n margin-left: $spacing-medium;\n margin-right: $spacing-medium;\n }\n .mh4-ns {\n margin-left: $spacing-large;\n margin-right: $spacing-large;\n }\n .mh5-ns {\n margin-left: $spacing-extra-large;\n margin-right: $spacing-extra-large;\n }\n .mh6-ns {\n margin-left: $spacing-extra-extra-large;\n margin-right: $spacing-extra-extra-large;\n }\n .mh7-ns {\n margin-left: $spacing-extra-extra-extra-large;\n margin-right: $spacing-extra-extra-extra-large;\n }\n\n}\n\n@media #{$breakpoint-medium} {\n .pa0-m { padding: $spacing-none; }\n .pa1-m { padding: $spacing-extra-small; }\n .pa2-m { padding: $spacing-small; }\n .pa3-m { padding: $spacing-medium; }\n .pa4-m { padding: $spacing-large; }\n .pa5-m { padding: $spacing-extra-large; }\n .pa6-m { padding: $spacing-extra-extra-large; }\n .pa7-m { padding: $spacing-extra-extra-extra-large; }\n\n .pl0-m { padding-left: $spacing-none; }\n .pl1-m { padding-left: $spacing-extra-small; }\n .pl2-m { padding-left: $spacing-small; }\n .pl3-m { padding-left: $spacing-medium; }\n .pl4-m { padding-left: $spacing-large; }\n .pl5-m { padding-left: $spacing-extra-large; }\n .pl6-m { padding-left: $spacing-extra-extra-large; }\n .pl7-m { padding-left: $spacing-extra-extra-extra-large; }\n\n .pr0-m { padding-right: $spacing-none; }\n .pr1-m { padding-right: $spacing-extra-small; }\n .pr2-m { padding-right: $spacing-small; }\n .pr3-m { padding-right: $spacing-medium; }\n .pr4-m { padding-right: $spacing-large; }\n .pr5-m { padding-right: $spacing-extra-large; }\n .pr6-m { padding-right: $spacing-extra-extra-large; }\n .pr7-m { padding-right: $spacing-extra-extra-extra-large; }\n\n .pb0-m { padding-bottom: $spacing-none; }\n .pb1-m { padding-bottom: $spacing-extra-small; }\n .pb2-m { padding-bottom: $spacing-small; }\n .pb3-m { padding-bottom: $spacing-medium; }\n .pb4-m { padding-bottom: $spacing-large; }\n .pb5-m { padding-bottom: $spacing-extra-large; }\n .pb6-m { padding-bottom: $spacing-extra-extra-large; }\n .pb7-m { padding-bottom: $spacing-extra-extra-extra-large; }\n\n .pt0-m { padding-top: $spacing-none; }\n .pt1-m { padding-top: $spacing-extra-small; }\n .pt2-m { padding-top: $spacing-small; }\n .pt3-m { padding-top: $spacing-medium; }\n .pt4-m { padding-top: $spacing-large; }\n .pt5-m { padding-top: $spacing-extra-large; }\n .pt6-m { padding-top: $spacing-extra-extra-large; }\n .pt7-m { padding-top: $spacing-extra-extra-extra-large; }\n\n .pv0-m {\n padding-top: $spacing-none;\n padding-bottom: $spacing-none;\n }\n .pv1-m {\n padding-top: $spacing-extra-small;\n padding-bottom: $spacing-extra-small;\n }\n .pv2-m {\n padding-top: $spacing-small;\n padding-bottom: $spacing-small;\n }\n .pv3-m {\n padding-top: $spacing-medium;\n padding-bottom: $spacing-medium;\n }\n .pv4-m {\n padding-top: $spacing-large;\n padding-bottom: $spacing-large;\n }\n .pv5-m {\n padding-top: $spacing-extra-large;\n padding-bottom: $spacing-extra-large;\n }\n .pv6-m {\n padding-top: $spacing-extra-extra-large;\n padding-bottom: $spacing-extra-extra-large;\n }\n .pv7-m {\n padding-top: $spacing-extra-extra-extra-large;\n padding-bottom: $spacing-extra-extra-extra-large;\n }\n\n .ph0-m {\n padding-left: $spacing-none;\n padding-right: $spacing-none;\n }\n .ph1-m {\n padding-left: $spacing-extra-small;\n padding-right: $spacing-extra-small;\n }\n .ph2-m {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n }\n .ph3-m {\n padding-left: $spacing-medium;\n padding-right: $spacing-medium;\n }\n .ph4-m {\n padding-left: $spacing-large;\n padding-right: $spacing-large;\n }\n .ph5-m {\n padding-left: $spacing-extra-large;\n padding-right: $spacing-extra-large;\n }\n .ph6-m {\n padding-left: $spacing-extra-extra-large;\n padding-right: $spacing-extra-extra-large;\n }\n .ph7-m {\n padding-left: $spacing-extra-extra-extra-large;\n padding-right: $spacing-extra-extra-extra-large;\n }\n\n .ma0-m { margin: $spacing-none; }\n .ma1-m { margin: $spacing-extra-small; }\n .ma2-m { margin: $spacing-small; }\n .ma3-m { margin: $spacing-medium; }\n .ma4-m { margin: $spacing-large; }\n .ma5-m { margin: $spacing-extra-large; }\n .ma6-m { margin: $spacing-extra-extra-large; }\n .ma7-m { margin: $spacing-extra-extra-extra-large; }\n\n .ml0-m { margin-left: $spacing-none; }\n .ml1-m { margin-left: $spacing-extra-small; }\n .ml2-m { margin-left: $spacing-small; }\n .ml3-m { margin-left: $spacing-medium; }\n .ml4-m { margin-left: $spacing-large; }\n .ml5-m { margin-left: $spacing-extra-large; }\n .ml6-m { margin-left: $spacing-extra-extra-large; }\n .ml7-m { margin-left: $spacing-extra-extra-extra-large; }\n\n .mr0-m { margin-right: $spacing-none; }\n .mr1-m { margin-right: $spacing-extra-small; }\n .mr2-m { margin-right: $spacing-small; }\n .mr3-m { margin-right: $spacing-medium; }\n .mr4-m { margin-right: $spacing-large; }\n .mr5-m { margin-right: $spacing-extra-large; }\n .mr6-m { margin-right: $spacing-extra-extra-large; }\n .mr7-m { margin-right: $spacing-extra-extra-extra-large; }\n\n .mb0-m { margin-bottom: $spacing-none; }\n .mb1-m { margin-bottom: $spacing-extra-small; }\n .mb2-m { margin-bottom: $spacing-small; }\n .mb3-m { margin-bottom: $spacing-medium; }\n .mb4-m { margin-bottom: $spacing-large; }\n .mb5-m { margin-bottom: $spacing-extra-large; }\n .mb6-m { margin-bottom: $spacing-extra-extra-large; }\n .mb7-m { margin-bottom: $spacing-extra-extra-extra-large; }\n\n .mt0-m { margin-top: $spacing-none; }\n .mt1-m { margin-top: $spacing-extra-small; }\n .mt2-m { margin-top: $spacing-small; }\n .mt3-m { margin-top: $spacing-medium; }\n .mt4-m { margin-top: $spacing-large; }\n .mt5-m { margin-top: $spacing-extra-large; }\n .mt6-m { margin-top: $spacing-extra-extra-large; }\n .mt7-m { margin-top: $spacing-extra-extra-extra-large; }\n\n .mv0-m {\n margin-top: $spacing-none;\n margin-bottom: $spacing-none;\n }\n .mv1-m {\n margin-top: $spacing-extra-small;\n margin-bottom: $spacing-extra-small;\n }\n .mv2-m {\n margin-top: $spacing-small;\n margin-bottom: $spacing-small;\n }\n .mv3-m {\n margin-top: $spacing-medium;\n margin-bottom: $spacing-medium;\n }\n .mv4-m {\n margin-top: $spacing-large;\n margin-bottom: $spacing-large;\n }\n .mv5-m {\n margin-top: $spacing-extra-large;\n margin-bottom: $spacing-extra-large;\n }\n .mv6-m {\n margin-top: $spacing-extra-extra-large;\n margin-bottom: $spacing-extra-extra-large;\n }\n .mv7-m {\n margin-top: $spacing-extra-extra-extra-large;\n margin-bottom: $spacing-extra-extra-extra-large;\n }\n\n .mh0-m {\n margin-left: $spacing-none;\n margin-right: $spacing-none;\n }\n .mh1-m {\n margin-left: $spacing-extra-small;\n margin-right: $spacing-extra-small;\n }\n .mh2-m {\n margin-left: $spacing-small;\n margin-right: $spacing-small;\n }\n .mh3-m {\n margin-left: $spacing-medium;\n margin-right: $spacing-medium;\n }\n .mh4-m {\n margin-left: $spacing-large;\n margin-right: $spacing-large;\n }\n .mh5-m {\n margin-left: $spacing-extra-large;\n margin-right: $spacing-extra-large;\n }\n .mh6-m {\n margin-left: $spacing-extra-extra-large;\n margin-right: $spacing-extra-extra-large;\n }\n .mh7-m {\n margin-left: $spacing-extra-extra-extra-large;\n margin-right: $spacing-extra-extra-extra-large;\n }\n\n}\n\n@media #{$breakpoint-large} {\n .pa0-l { padding: $spacing-none; }\n .pa1-l { padding: $spacing-extra-small; }\n .pa2-l { padding: $spacing-small; }\n .pa3-l { padding: $spacing-medium; }\n .pa4-l { padding: $spacing-large; }\n .pa5-l { padding: $spacing-extra-large; }\n .pa6-l { padding: $spacing-extra-extra-large; }\n .pa7-l { padding: $spacing-extra-extra-extra-large; }\n\n .pl0-l { padding-left: $spacing-none; }\n .pl1-l { padding-left: $spacing-extra-small; }\n .pl2-l { padding-left: $spacing-small; }\n .pl3-l { padding-left: $spacing-medium; }\n .pl4-l { padding-left: $spacing-large; }\n .pl5-l { padding-left: $spacing-extra-large; }\n .pl6-l { padding-left: $spacing-extra-extra-large; }\n .pl7-l { padding-left: $spacing-extra-extra-extra-large; }\n\n .pr0-l { padding-right: $spacing-none; }\n .pr1-l { padding-right: $spacing-extra-small; }\n .pr2-l { padding-right: $spacing-small; }\n .pr3-l { padding-right: $spacing-medium; }\n .pr4-l { padding-right: $spacing-large; }\n .pr5-l { padding-right: $spacing-extra-large; }\n .pr6-l { padding-right: $spacing-extra-extra-large; }\n .pr7-l { padding-right: $spacing-extra-extra-extra-large; }\n\n .pb0-l { padding-bottom: $spacing-none; }\n .pb1-l { padding-bottom: $spacing-extra-small; }\n .pb2-l { padding-bottom: $spacing-small; }\n .pb3-l { padding-bottom: $spacing-medium; }\n .pb4-l { padding-bottom: $spacing-large; }\n .pb5-l { padding-bottom: $spacing-extra-large; }\n .pb6-l { padding-bottom: $spacing-extra-extra-large; }\n .pb7-l { padding-bottom: $spacing-extra-extra-extra-large; }\n\n .pt0-l { padding-top: $spacing-none; }\n .pt1-l { padding-top: $spacing-extra-small; }\n .pt2-l { padding-top: $spacing-small; }\n .pt3-l { padding-top: $spacing-medium; }\n .pt4-l { padding-top: $spacing-large; }\n .pt5-l { padding-top: $spacing-extra-large; }\n .pt6-l { padding-top: $spacing-extra-extra-large; }\n .pt7-l { padding-top: $spacing-extra-extra-extra-large; }\n\n .pv0-l {\n padding-top: $spacing-none;\n padding-bottom: $spacing-none;\n }\n .pv1-l {\n padding-top: $spacing-extra-small;\n padding-bottom: $spacing-extra-small;\n }\n .pv2-l {\n padding-top: $spacing-small;\n padding-bottom: $spacing-small;\n }\n .pv3-l {\n padding-top: $spacing-medium;\n padding-bottom: $spacing-medium;\n }\n .pv4-l {\n padding-top: $spacing-large;\n padding-bottom: $spacing-large;\n }\n .pv5-l {\n padding-top: $spacing-extra-large;\n padding-bottom: $spacing-extra-large;\n }\n .pv6-l {\n padding-top: $spacing-extra-extra-large;\n padding-bottom: $spacing-extra-extra-large;\n }\n .pv7-l {\n padding-top: $spacing-extra-extra-extra-large;\n padding-bottom: $spacing-extra-extra-extra-large;\n }\n\n .ph0-l {\n padding-left: $spacing-none;\n padding-right: $spacing-none;\n }\n .ph1-l {\n padding-left: $spacing-extra-small;\n padding-right: $spacing-extra-small;\n }\n .ph2-l {\n padding-left: $spacing-small;\n padding-right: $spacing-small;\n }\n .ph3-l {\n padding-left: $spacing-medium;\n padding-right: $spacing-medium;\n }\n .ph4-l {\n padding-left: $spacing-large;\n padding-right: $spacing-large;\n }\n .ph5-l {\n padding-left: $spacing-extra-large;\n padding-right: $spacing-extra-large;\n }\n .ph6-l {\n padding-left: $spacing-extra-extra-large;\n padding-right: $spacing-extra-extra-large;\n }\n .ph7-l {\n padding-left: $spacing-extra-extra-extra-large;\n padding-right: $spacing-extra-extra-extra-large;\n }\n\n .ma0-l { margin: $spacing-none; }\n .ma1-l { margin: $spacing-extra-small; }\n .ma2-l { margin: $spacing-small; }\n .ma3-l { margin: $spacing-medium; }\n .ma4-l { margin: $spacing-large; }\n .ma5-l { margin: $spacing-extra-large; }\n .ma6-l { margin: $spacing-extra-extra-large; }\n .ma7-l { margin: $spacing-extra-extra-extra-large; }\n\n .ml0-l { margin-left: $spacing-none; }\n .ml1-l { margin-left: $spacing-extra-small; }\n .ml2-l { margin-left: $spacing-small; }\n .ml3-l { margin-left: $spacing-medium; }\n .ml4-l { margin-left: $spacing-large; }\n .ml5-l { margin-left: $spacing-extra-large; }\n .ml6-l { margin-left: $spacing-extra-extra-large; }\n .ml7-l { margin-left: $spacing-extra-extra-extra-large; }\n\n .mr0-l { margin-right: $spacing-none; }\n .mr1-l { margin-right: $spacing-extra-small; }\n .mr2-l { margin-right: $spacing-small; }\n .mr3-l { margin-right: $spacing-medium; }\n .mr4-l { margin-right: $spacing-large; }\n .mr5-l { margin-right: $spacing-extra-large; }\n .mr6-l { margin-right: $spacing-extra-extra-large; }\n .mr7-l { margin-right: $spacing-extra-extra-extra-large; }\n\n .mb0-l { margin-bottom: $spacing-none; }\n .mb1-l { margin-bottom: $spacing-extra-small; }\n .mb2-l { margin-bottom: $spacing-small; }\n .mb3-l { margin-bottom: $spacing-medium; }\n .mb4-l { margin-bottom: $spacing-large; }\n .mb5-l { margin-bottom: $spacing-extra-large; }\n .mb6-l { margin-bottom: $spacing-extra-extra-large; }\n .mb7-l { margin-bottom: $spacing-extra-extra-extra-large; }\n\n .mt0-l { margin-top: $spacing-none; }\n .mt1-l { margin-top: $spacing-extra-small; }\n .mt2-l { margin-top: $spacing-small; }\n .mt3-l { margin-top: $spacing-medium; }\n .mt4-l { margin-top: $spacing-large; }\n .mt5-l { margin-top: $spacing-extra-large; }\n .mt6-l { margin-top: $spacing-extra-extra-large; }\n .mt7-l { margin-top: $spacing-extra-extra-extra-large; }\n\n .mv0-l {\n margin-top: $spacing-none;\n margin-bottom: $spacing-none;\n }\n .mv1-l {\n margin-top: $spacing-extra-small;\n margin-bottom: $spacing-extra-small;\n }\n .mv2-l {\n margin-top: $spacing-small;\n margin-bottom: $spacing-small;\n }\n .mv3-l {\n margin-top: $spacing-medium;\n margin-bottom: $spacing-medium;\n }\n .mv4-l {\n margin-top: $spacing-large;\n margin-bottom: $spacing-large;\n }\n .mv5-l {\n margin-top: $spacing-extra-large;\n margin-bottom: $spacing-extra-large;\n }\n .mv6-l {\n margin-top: $spacing-extra-extra-large;\n margin-bottom: $spacing-extra-extra-large;\n }\n .mv7-l {\n margin-top: $spacing-extra-extra-extra-large;\n margin-bottom: $spacing-extra-extra-extra-large;\n }\n\n .mh0-l {\n margin-left: $spacing-none;\n margin-right: $spacing-none;\n }\n .mh1-l {\n margin-left: $spacing-extra-small;\n margin-right: $spacing-extra-small;\n }\n .mh2-l {\n margin-left: $spacing-small;\n margin-right: $spacing-small;\n }\n .mh3-l {\n margin-left: $spacing-medium;\n margin-right: $spacing-medium;\n }\n .mh4-l {\n margin-left: $spacing-large;\n margin-right: $spacing-large;\n }\n .mh5-l {\n margin-left: $spacing-extra-large;\n margin-right: $spacing-extra-large;\n }\n .mh6-l {\n margin-left: $spacing-extra-extra-large;\n margin-right: $spacing-extra-extra-large;\n }\n .mh7-l {\n margin-left: $spacing-extra-extra-extra-large;\n margin-right: $spacing-extra-extra-extra-large;\n }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n NEGATIVE MARGINS\n\n Base:\n n = negative\n\n Modifiers:\n a = all\n t = top\n r = right\n b = bottom\n l = left\n\n 1 = 1st step in spacing scale\n 2 = 2nd step in spacing scale\n 3 = 3rd step in spacing scale\n 4 = 4th step in spacing scale\n 5 = 5th step in spacing scale\n 6 = 6th step in spacing scale\n 7 = 7th step in spacing scale\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n\n\n.na1 { margin: -$spacing-extra-small; }\n.na2 { margin: -$spacing-small; }\n.na3 { margin: -$spacing-medium; }\n.na4 { margin: -$spacing-large; }\n.na5 { margin: -$spacing-extra-large; }\n.na6 { margin: -$spacing-extra-extra-large; }\n.na7 { margin: -$spacing-extra-extra-extra-large; }\n\n.nl1 { margin-left: -$spacing-extra-small; }\n.nl2 { margin-left: -$spacing-small; }\n.nl3 { margin-left: -$spacing-medium; }\n.nl4 { margin-left: -$spacing-large; }\n.nl5 { margin-left: -$spacing-extra-large; }\n.nl6 { margin-left: -$spacing-extra-extra-large; }\n.nl7 { margin-left: -$spacing-extra-extra-extra-large; }\n\n.nr1 { margin-right: -$spacing-extra-small; }\n.nr2 { margin-right: -$spacing-small; }\n.nr3 { margin-right: -$spacing-medium; }\n.nr4 { margin-right: -$spacing-large; }\n.nr5 { margin-right: -$spacing-extra-large; }\n.nr6 { margin-right: -$spacing-extra-extra-large; }\n.nr7 { margin-right: -$spacing-extra-extra-extra-large; }\n\n.nb1 { margin-bottom: -$spacing-extra-small; }\n.nb2 { margin-bottom: -$spacing-small; }\n.nb3 { margin-bottom: -$spacing-medium; }\n.nb4 { margin-bottom: -$spacing-large; }\n.nb5 { margin-bottom: -$spacing-extra-large; }\n.nb6 { margin-bottom: -$spacing-extra-extra-large; }\n.nb7 { margin-bottom: -$spacing-extra-extra-extra-large; }\n\n.nt1 { margin-top: -$spacing-extra-small; }\n.nt2 { margin-top: -$spacing-small; }\n.nt3 { margin-top: -$spacing-medium; }\n.nt4 { margin-top: -$spacing-large; }\n.nt5 { margin-top: -$spacing-extra-large; }\n.nt6 { margin-top: -$spacing-extra-extra-large; }\n.nt7 { margin-top: -$spacing-extra-extra-extra-large; }\n\n@media #{$breakpoint-not-small} {\n\n .na1-ns { margin: -$spacing-extra-small; }\n .na2-ns { margin: -$spacing-small; }\n .na3-ns { margin: -$spacing-medium; }\n .na4-ns { margin: -$spacing-large; }\n .na5-ns { margin: -$spacing-extra-large; }\n .na6-ns { margin: -$spacing-extra-extra-large; }\n .na7-ns { margin: -$spacing-extra-extra-extra-large; }\n\n .nl1-ns { margin-left: -$spacing-extra-small; }\n .nl2-ns { margin-left: -$spacing-small; }\n .nl3-ns { margin-left: -$spacing-medium; }\n .nl4-ns { margin-left: -$spacing-large; }\n .nl5-ns { margin-left: -$spacing-extra-large; }\n .nl6-ns { margin-left: -$spacing-extra-extra-large; }\n .nl7-ns { margin-left: -$spacing-extra-extra-extra-large; }\n\n .nr1-ns { margin-right: -$spacing-extra-small; }\n .nr2-ns { margin-right: -$spacing-small; }\n .nr3-ns { margin-right: -$spacing-medium; }\n .nr4-ns { margin-right: -$spacing-large; }\n .nr5-ns { margin-right: -$spacing-extra-large; }\n .nr6-ns { margin-right: -$spacing-extra-extra-large; }\n .nr7-ns { margin-right: -$spacing-extra-extra-extra-large; }\n\n .nb1-ns { margin-bottom: -$spacing-extra-small; }\n .nb2-ns { margin-bottom: -$spacing-small; }\n .nb3-ns { margin-bottom: -$spacing-medium; }\n .nb4-ns { margin-bottom: -$spacing-large; }\n .nb5-ns { margin-bottom: -$spacing-extra-large; }\n .nb6-ns { margin-bottom: -$spacing-extra-extra-large; }\n .nb7-ns { margin-bottom: -$spacing-extra-extra-extra-large; }\n\n .nt1-ns { margin-top: -$spacing-extra-small; }\n .nt2-ns { margin-top: -$spacing-small; }\n .nt3-ns { margin-top: -$spacing-medium; }\n .nt4-ns { margin-top: -$spacing-large; }\n .nt5-ns { margin-top: -$spacing-extra-large; }\n .nt6-ns { margin-top: -$spacing-extra-extra-large; }\n .nt7-ns { margin-top: -$spacing-extra-extra-extra-large; }\n\n}\n\n@media #{$breakpoint-medium} {\n .na1-m { margin: -$spacing-extra-small; }\n .na2-m { margin: -$spacing-small; }\n .na3-m { margin: -$spacing-medium; }\n .na4-m { margin: -$spacing-large; }\n .na5-m { margin: -$spacing-extra-large; }\n .na6-m { margin: -$spacing-extra-extra-large; }\n .na7-m { margin: -$spacing-extra-extra-extra-large; }\n\n .nl1-m { margin-left: -$spacing-extra-small; }\n .nl2-m { margin-left: -$spacing-small; }\n .nl3-m { margin-left: -$spacing-medium; }\n .nl4-m { margin-left: -$spacing-large; }\n .nl5-m { margin-left: -$spacing-extra-large; }\n .nl6-m { margin-left: -$spacing-extra-extra-large; }\n .nl7-m { margin-left: -$spacing-extra-extra-extra-large; }\n\n .nr1-m { margin-right: -$spacing-extra-small; }\n .nr2-m { margin-right: -$spacing-small; }\n .nr3-m { margin-right: -$spacing-medium; }\n .nr4-m { margin-right: -$spacing-large; }\n .nr5-m { margin-right: -$spacing-extra-large; }\n .nr6-m { margin-right: -$spacing-extra-extra-large; }\n .nr7-m { margin-right: -$spacing-extra-extra-extra-large; }\n\n .nb1-m { margin-bottom: -$spacing-extra-small; }\n .nb2-m { margin-bottom: -$spacing-small; }\n .nb3-m { margin-bottom: -$spacing-medium; }\n .nb4-m { margin-bottom: -$spacing-large; }\n .nb5-m { margin-bottom: -$spacing-extra-large; }\n .nb6-m { margin-bottom: -$spacing-extra-extra-large; }\n .nb7-m { margin-bottom: -$spacing-extra-extra-extra-large; }\n\n .nt1-m { margin-top: -$spacing-extra-small; }\n .nt2-m { margin-top: -$spacing-small; }\n .nt3-m { margin-top: -$spacing-medium; }\n .nt4-m { margin-top: -$spacing-large; }\n .nt5-m { margin-top: -$spacing-extra-large; }\n .nt6-m { margin-top: -$spacing-extra-extra-large; }\n .nt7-m { margin-top: -$spacing-extra-extra-extra-large; }\n\n}\n\n@media #{$breakpoint-large} {\n .na1-l { margin: -$spacing-extra-small; }\n .na2-l { margin: -$spacing-small; }\n .na3-l { margin: -$spacing-medium; }\n .na4-l { margin: -$spacing-large; }\n .na5-l { margin: -$spacing-extra-large; }\n .na6-l { margin: -$spacing-extra-extra-large; }\n .na7-l { margin: -$spacing-extra-extra-extra-large; }\n\n .nl1-l { margin-left: -$spacing-extra-small; }\n .nl2-l { margin-left: -$spacing-small; }\n .nl3-l { margin-left: -$spacing-medium; }\n .nl4-l { margin-left: -$spacing-large; }\n .nl5-l { margin-left: -$spacing-extra-large; }\n .nl6-l { margin-left: -$spacing-extra-extra-large; }\n .nl7-l { margin-left: -$spacing-extra-extra-extra-large; }\n\n .nr1-l { margin-right: -$spacing-extra-small; }\n .nr2-l { margin-right: -$spacing-small; }\n .nr3-l { margin-right: -$spacing-medium; }\n .nr4-l { margin-right: -$spacing-large; }\n .nr5-l { margin-right: -$spacing-extra-large; }\n .nr6-l { margin-right: -$spacing-extra-extra-large; }\n .nr7-l { margin-right: -$spacing-extra-extra-extra-large; }\n\n .nb1-l { margin-bottom: -$spacing-extra-small; }\n .nb2-l { margin-bottom: -$spacing-small; }\n .nb3-l { margin-bottom: -$spacing-medium; }\n .nb4-l { margin-bottom: -$spacing-large; }\n .nb5-l { margin-bottom: -$spacing-extra-large; }\n .nb6-l { margin-bottom: -$spacing-extra-extra-large; }\n .nb7-l { margin-bottom: -$spacing-extra-extra-extra-large; }\n\n .nt1-l { margin-top: -$spacing-extra-small; }\n .nt2-l { margin-top: -$spacing-small; }\n .nt3-l { margin-top: -$spacing-medium; }\n .nt4-l { margin-top: -$spacing-large; }\n .nt5-l { margin-top: -$spacing-extra-large; }\n .nt6-l { margin-top: -$spacing-extra-extra-large; }\n .nt7-l { margin-top: -$spacing-extra-extra-extra-large; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n TABLES\n Docs: http://tachyons.io/docs/elements/tables/\n\n*/\n\n.collapse {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\n.striped--light-silver:nth-child(odd) {\n background-color: $light-silver;\n}\n\n.striped--moon-gray:nth-child(odd) {\n background-color: $moon-gray;\n}\n\n.striped--light-gray:nth-child(odd) {\n background-color: $light-gray;\n}\n\n.striped--near-white:nth-child(odd) {\n background-color: $near-white;\n}\n\n.stripe-light:nth-child(odd) {\n background-color: $white-10;\n}\n\n.stripe-dark:nth-child(odd) {\n background-color: $black-10;\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n TEXT DECORATION\n Docs: http://tachyons.io/docs/typography/text-decoration/\n\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.strike { text-decoration: line-through; }\n.underline { text-decoration: underline; }\n.no-underline { text-decoration: none; }\n\n\n@media #{$breakpoint-not-small} {\n .strike-ns { text-decoration: line-through; }\n .underline-ns { text-decoration: underline; }\n .no-underline-ns { text-decoration: none; }\n}\n\n@media #{$breakpoint-medium} {\n .strike-m { text-decoration: line-through; }\n .underline-m { text-decoration: underline; }\n .no-underline-m { text-decoration: none; }\n}\n\n@media #{$breakpoint-large} {\n .strike-l { text-decoration: line-through; }\n .underline-l { text-decoration: underline; }\n .no-underline-l { text-decoration: none; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n TEXT ALIGN\n Docs: http://tachyons.io/docs/typography/text-align/\n\n Base\n t = text-align\n\n Modifiers\n l = left\n r = right\n c = center\n j = justify\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.tl { text-align: left; }\n.tr { text-align: right; }\n.tc { text-align: center; }\n.tj { text-align: justify; }\n\n@media #{$breakpoint-not-small} {\n .tl-ns { text-align: left; }\n .tr-ns { text-align: right; }\n .tc-ns { text-align: center; }\n .tj-ns { text-align: justify; }\n}\n\n@media #{$breakpoint-medium} {\n .tl-m { text-align: left; }\n .tr-m { text-align: right; }\n .tc-m { text-align: center; }\n .tj-m { text-align: justify; }\n}\n\n@media #{$breakpoint-large} {\n .tl-l { text-align: left; }\n .tr-l { text-align: right; }\n .tc-l { text-align: center; }\n .tj-l { text-align: justify; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n TEXT TRANSFORM\n Docs: http://tachyons.io/docs/typography/text-transform/\n\n Base:\n tt = text-transform\n\n Modifiers\n c = capitalize\n l = lowercase\n u = uppercase\n n = none\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.ttc { text-transform: capitalize; }\n.ttl { text-transform: lowercase; }\n.ttu { text-transform: uppercase; }\n.ttn { text-transform: none; }\n\n@media #{$breakpoint-not-small} {\n .ttc-ns { text-transform: capitalize; }\n .ttl-ns { text-transform: lowercase; }\n .ttu-ns { text-transform: uppercase; }\n .ttn-ns { text-transform: none; }\n}\n\n@media #{$breakpoint-medium} {\n .ttc-m { text-transform: capitalize; }\n .ttl-m { text-transform: lowercase; }\n .ttu-m { text-transform: uppercase; }\n .ttn-m { text-transform: none; }\n}\n\n@media #{$breakpoint-large} {\n .ttc-l { text-transform: capitalize; }\n .ttl-l { text-transform: lowercase; }\n .ttu-l { text-transform: uppercase; }\n .ttn-l { text-transform: none; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n TYPE SCALE\n Docs: http://tachyons.io/docs/typography/scale/\n\n Base:\n f = font-size\n\n Modifiers\n 1 = 1st step in size scale\n 2 = 2nd step in size scale\n 3 = 3rd step in size scale\n 4 = 4th step in size scale\n 5 = 5th step in size scale\n 6 = 6th step in size scale\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n*/\n\n/*\n * For Hero/Marketing Titles\n *\n * These generally are too large for mobile\n * so be careful using them on smaller screens.\n * */\n\n.f-6,\n.f-headline {\n font-size: $font-size-headline;\n}\n.f-5,\n.f-subheadline {\n font-size: $font-size-subheadline;\n}\n\n\n/* Type Scale */\n\n\n.f1 { font-size: $font-size-1; }\n.f2 { font-size: $font-size-2; }\n.f3 { font-size: $font-size-3; }\n.f4 { font-size: $font-size-4; }\n.f5 { font-size: $font-size-5; }\n.f6 { font-size: $font-size-6; }\n.f7 { font-size: $font-size-7; }\n\n@media #{$breakpoint-not-small}{\n .f-6-ns,\n .f-headline-ns { font-size: $font-size-headline; }\n .f-5-ns,\n .f-subheadline-ns { font-size: $font-size-subheadline; }\n .f1-ns { font-size: $font-size-1; }\n .f2-ns { font-size: $font-size-2; }\n .f3-ns { font-size: $font-size-3; }\n .f4-ns { font-size: $font-size-4; }\n .f5-ns { font-size: $font-size-5; }\n .f6-ns { font-size: $font-size-6; }\n .f7-ns { font-size: $font-size-7; }\n}\n\n@media #{$breakpoint-medium} {\n .f-6-m,\n .f-headline-m { font-size: $font-size-headline; }\n .f-5-m,\n .f-subheadline-m { font-size: $font-size-subheadline; }\n .f1-m { font-size: $font-size-1; }\n .f2-m { font-size: $font-size-2; }\n .f3-m { font-size: $font-size-3; }\n .f4-m { font-size: $font-size-4; }\n .f5-m { font-size: $font-size-5; }\n .f6-m { font-size: $font-size-6; }\n .f7-m { font-size: $font-size-7; }\n}\n\n@media #{$breakpoint-large} {\n .f-6-l,\n .f-headline-l {\n font-size: $font-size-headline;\n }\n .f-5-l,\n .f-subheadline-l {\n font-size: $font-size-subheadline;\n }\n .f1-l { font-size: $font-size-1; }\n .f2-l { font-size: $font-size-2; }\n .f3-l { font-size: $font-size-3; }\n .f4-l { font-size: $font-size-4; }\n .f5-l { font-size: $font-size-5; }\n .f6-l { font-size: $font-size-6; }\n .f7-l { font-size: $font-size-7; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n TYPOGRAPHY\n http://tachyons.io/docs/typography/measure/\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n\n\n/* Measure is limited to ~66 characters */\n.measure {\n max-width: $measure;\n}\n\n/* Measure is limited to ~80 characters */\n.measure-wide {\n max-width: $measure-wide;\n}\n\n/* Measure is limited to ~45 characters */\n.measure-narrow {\n max-width: $measure-narrow;\n}\n\n/* Book paragraph style - paragraphs are indented with no vertical spacing. */\n.indent {\n text-indent: 1em;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.small-caps {\n font-variant: small-caps;\n}\n\n/* Combine this class with a width to truncate text (or just leave as is to truncate at width of containing element. */\n\n.truncate {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n@media #{$breakpoint-not-small} {\n .measure-ns {\n max-width: $measure;\n }\n .measure-wide-ns {\n max-width: $measure-wide;\n }\n .measure-narrow-ns {\n max-width: $measure-narrow;\n }\n .indent-ns {\n text-indent: 1em;\n margin-top: 0;\n margin-bottom: 0;\n }\n .small-caps-ns {\n font-variant: small-caps;\n }\n .truncate-ns {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n@media #{$breakpoint-medium} {\n .measure-m {\n max-width: $measure;\n }\n .measure-wide-m {\n max-width: $measure-wide;\n }\n .measure-narrow-m {\n max-width: $measure-narrow;\n }\n .indent-m {\n text-indent: 1em;\n margin-top: 0;\n margin-bottom: 0;\n }\n .small-caps-m {\n font-variant: small-caps;\n }\n .truncate-m {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n@media #{$breakpoint-large} {\n .measure-l {\n max-width: $measure;\n }\n .measure-wide-l {\n max-width: $measure-wide;\n }\n .measure-narrow-l {\n max-width: $measure-narrow;\n }\n .indent-l {\n text-indent: 1em;\n margin-top: 0;\n margin-bottom: 0;\n }\n .small-caps-l {\n font-variant: small-caps;\n }\n .truncate-l {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n UTILITIES\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n/* Equivalent to .overflow-y-scroll */\n.overflow-container {\n overflow-y: scroll;\n}\n\n.center {\n margin-right: auto;\n margin-left: auto;\n}\n\n.mr-auto { margin-right: auto; }\n.ml-auto { margin-left: auto; }\n\n@media #{$breakpoint-not-small}{\n .center-ns {\n margin-right: auto;\n margin-left: auto;\n }\n .mr-auto-ns { margin-right: auto; }\n .ml-auto-ns { margin-left: auto; }\n}\n\n@media #{$breakpoint-medium}{\n .center-m {\n margin-right: auto;\n margin-left: auto;\n }\n .mr-auto-m { margin-right: auto; }\n .ml-auto-m { margin-left: auto; }\n}\n\n@media #{$breakpoint-large}{\n .center-l {\n margin-right: auto;\n margin-left: auto;\n }\n .mr-auto-l { margin-right: auto; }\n .ml-auto-l { margin-left: auto; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n VISIBILITY\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n\n/*\n Text that is hidden but accessible\n Ref: http://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n*/\n\n.clip {\n position: fixed !important;\n _position: absolute !important;\n clip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n clip: rect(1px, 1px, 1px, 1px);\n}\n\n@media #{$breakpoint-not-small} {\n .clip-ns {\n position: fixed !important;\n _position: absolute !important;\n clip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n clip: rect(1px, 1px, 1px, 1px);\n }\n}\n\n@media #{$breakpoint-medium} {\n .clip-m {\n position: fixed !important;\n _position: absolute !important;\n clip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n clip: rect(1px, 1px, 1px, 1px);\n }\n}\n\n@media #{$breakpoint-large} {\n .clip-l {\n position: fixed !important;\n _position: absolute !important;\n clip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n clip: rect(1px, 1px, 1px, 1px);\n }\n}\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n WHITE SPACE\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n\n.ws-normal { white-space: normal; }\n.nowrap { white-space: nowrap; }\n.pre { white-space: pre; }\n\n@media #{$breakpoint-not-small} {\n .ws-normal-ns { white-space: normal; }\n .nowrap-ns { white-space: nowrap; }\n .pre-ns { white-space: pre; }\n}\n\n@media #{$breakpoint-medium} {\n .ws-normal-m { white-space: normal; }\n .nowrap-m { white-space: nowrap; }\n .pre-m { white-space: pre; }\n}\n\n@media #{$breakpoint-large} {\n .ws-normal-l { white-space: normal; }\n .nowrap-l { white-space: nowrap; }\n .pre-l { white-space: pre; }\n}\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n VERTICAL ALIGN\n\n Media Query Extensions:\n -ns = not-small\n -m = medium\n -l = large\n\n*/\n\n.v-base { vertical-align: baseline; }\n.v-mid { vertical-align: middle; }\n.v-top { vertical-align: top; }\n.v-btm { vertical-align: bottom; }\n\n@media #{$breakpoint-not-small} {\n .v-base-ns { vertical-align: baseline; }\n .v-mid-ns { vertical-align: middle; }\n .v-top-ns { vertical-align: top; }\n .v-btm-ns { vertical-align: bottom; }\n}\n\n@media #{$breakpoint-medium} {\n .v-base-m { vertical-align: baseline; }\n .v-mid-m { vertical-align: middle; }\n .v-top-m { vertical-align: top; }\n .v-btm-m { vertical-align: bottom; }\n}\n\n@media #{$breakpoint-large} {\n .v-base-l { vertical-align: baseline; }\n .v-mid-l { vertical-align: middle; }\n .v-top-l { vertical-align: top; }\n .v-btm-l { vertical-align: bottom; }\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n HOVER EFFECTS\n Docs: http://tachyons.io/docs/themes/hovers/\n\n - Dim\n - Glow\n - Hide Child\n - Underline text\n - Grow\n - Pointer\n - Shadow\n\n*/\n\n/*\n\n Dim element on hover by adding the dim class.\n\n*/\n.dim {\n opacity: 1;\n transition: opacity .15s ease-in;\n}\n.dim:hover,\n.dim:focus {\n opacity: .5;\n transition: opacity .15s ease-in;\n}\n.dim:active {\n opacity: .8; transition: opacity .15s ease-out;\n}\n\n/*\n\n Animate opacity to 100% on hover by adding the glow class.\n\n*/\n.glow {\n transition: opacity .15s ease-in;\n}\n.glow:hover,\n.glow:focus {\n opacity: 1;\n transition: opacity .15s ease-in;\n}\n\n/*\n\n Hide child & reveal on hover:\n\n Put the hide-child class on a parent element and any nested element with the\n child class will be hidden and displayed on hover or focus.\n\n
\n
Hidden until hover or focus
\n
Hidden until hover or focus
\n
Hidden until hover or focus
\n
Hidden until hover or focus
\n
\n*/\n\n.hide-child .child {\n opacity: 0;\n transition: opacity .15s ease-in;\n}\n.hide-child:hover .child,\n.hide-child:focus .child,\n.hide-child:active .child {\n opacity: 1;\n transition: opacity .15s ease-in;\n}\n\n.underline-hover:hover,\n.underline-hover:focus {\n text-decoration: underline;\n}\n\n/* Can combine this with overflow-hidden to make background images grow on hover\n * even if you are using background-size: cover */\n\n.grow {\n -moz-osx-font-smoothing: grayscale;\n backface-visibility: hidden;\n transform: translateZ(0);\n transition: transform 0.25s ease-out;\n}\n\n.grow:hover,\n.grow:focus {\n transform: scale(1.05);\n}\n\n.grow:active {\n transform: scale(.90);\n}\n\n.grow-large {\n -moz-osx-font-smoothing: grayscale;\n backface-visibility: hidden;\n transform: translateZ(0);\n transition: transform .25s ease-in-out;\n}\n\n.grow-large:hover,\n.grow-large:focus {\n transform: scale(1.2);\n}\n\n.grow-large:active {\n transform: scale(.95);\n}\n\n/* Add pointer on hover */\n\n.pointer:hover {\n cursor: pointer;\n}\n\n/*\n Add shadow on hover.\n\n Performant box-shadow animation pattern from\n http://tobiasahlin.com/blog/how-to-animate-box-shadow/\n*/\n\n.shadow-hover {\n cursor: pointer;\n position: relative;\n transition: all 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);\n}\n\n.shadow-hover::after {\n content: '';\n box-shadow: 0px 0px 16px 2px rgba( 0, 0, 0, .2 );\n border-radius: inherit;\n opacity: 0;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: -1;\n transition: opacity 0.5s cubic-bezier(0.165, 0.84, 0.44, 1);\n}\n\n.shadow-hover:hover::after,\n.shadow-hover:focus::after {\n opacity: 1;\n}\n\n/* Combine with classes in skins and skins-pseudo for\n * many different transition possibilities. */\n\n.bg-animate,\n.bg-animate:hover,\n.bg-animate:focus {\n transition: background-color .15s ease-in-out;\n}\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n Z-INDEX\n\n Base\n z = z-index\n\n Modifiers\n -0 = literal value 0\n -1 = literal value 1\n -2 = literal value 2\n -3 = literal value 3\n -4 = literal value 4\n -5 = literal value 5\n -999 = literal value 999\n -9999 = literal value 9999\n\n -max = largest accepted z-index value as integer\n\n -inherit = string value inherit\n -initial = string value initial\n -unset = string value unset\n\n MDN: https://developer.mozilla.org/en/docs/Web/CSS/z-index\n Spec: http://www.w3.org/TR/CSS2/zindex.html\n Articles:\n https://philipwalton.com/articles/what-no-one-told-you-about-z-index/\n\n Tips on extending:\n There might be a time worth using negative z-index values.\n Or if you are using tachyons with another project, you might need to\n adjust these values to suit your needs.\n\n*/\n\n.z-0 { z-index: 0; }\n.z-1 { z-index: 1; }\n.z-2 { z-index: 2; }\n.z-3 { z-index: 3; }\n.z-4 { z-index: 4; }\n.z-5 { z-index: 5; }\n\n.z-999 { z-index: 999; }\n.z-9999 { z-index: 9999; }\n\n.z-max {\n z-index: 2147483647;\n}\n\n.z-inherit { z-index: inherit; }\n.z-initial { z-index: initial; }\n.z-unset { z-index: unset; }\n\n","\n// Converted Variables\n\n\n// Custom Media Query Variables\n\n\n/*\n\n NESTED\n Tachyons module for styling nested elements\n that are generated by a cms.\n\n*/\n\n.nested-copy-line-height p,\n.nested-copy-line-height ul,\n.nested-copy-line-height ol {\n line-height: $line-height-copy;\n}\n\n.nested-headline-line-height h1,\n.nested-headline-line-height h2,\n.nested-headline-line-height h3,\n.nested-headline-line-height h4,\n.nested-headline-line-height h5,\n.nested-headline-line-height h6 {\n line-height: $line-height-title;\n}\n\n.nested-list-reset ul,\n.nested-list-reset ol {\n padding-left: 0;\n margin-left: 0;\n list-style-type: none;\n}\n\n.nested-copy-indent p+p {\n text-indent: $letter-spacing-1;\n margin-top: $spacing-none;\n margin-bottom: $spacing-none;\n}\n\n.nested-copy-seperator p+p {\n margin-top: $spacing-copy-separator;\n}\n\n.nested-img img {\n width: 100%;\n max-width: 100%;\n display: block;\n}\n\n.nested-links a {\n color: $blue;\n transition: color .15s ease-in;\n}\n\n.nested-links a:hover,\n.nested-links a:focus {\n color: $light-blue;\n transition: color .15s ease-in;\n}\n",".wrapper\n{\n width: 100%;\n max-width: 1460px;\n margin: 0 auto;\n padding: 0 20px;\n box-sizing: border-box;\n}\n\n.opblock-tag-section\n{\n display: flex;\n flex-direction: column;\n}\n\n.try-out.btn-group {\n padding: 0;\n display: flex;\n flex: 0.1 2 auto;\n}\n\n.try-out__btn {\n margin-left: 1.25rem;\n}\n\n.opblock-tag\n{\n display: flex;\n align-items: center;\n\n padding: 10px 20px 10px 10px;\n\n cursor: pointer;\n transition: all .2s;\n\n border-bottom: 1px solid rgba($opblock-tag-border-bottom-color, .3);\n\n &:hover\n {\n background: rgba($opblock-tag-background-color-hover,.02);\n }\n}\n\n@mixin method($color)\n{\n border-color: $color;\n background: rgba($color, .1);\n\n .opblock-summary-method\n {\n background: $color;\n }\n\n .opblock-summary\n {\n border-color: $color;\n }\n\n .tab-header .tab-item.active h4 span:after\n {\n background: $color;\n }\n}\n\n\n\n\n.opblock-tag\n{\n font-size: 24px;\n\n margin: 0 0 5px 0;\n\n @include text_headline();\n\n &.no-desc\n {\n span\n {\n flex: 1;\n }\n }\n\n svg\n {\n transition: all .4s;\n }\n\n small\n {\n font-size: 14px;\n font-weight: normal;\n\n flex: 2;\n\n padding: 0 10px;\n\n @include text_body();\n }\n\n >div\n {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n flex: 1 1 150px;\n font-weight: 400;\n }\n\n @media (max-width: 640px) {\n small\n {\n flex: 1;\n }\n\n >div\n {\n flex: 1;\n }\n }\n\n .info__externaldocs\n {\n text-align: right;\n }\n}\n\n.parameter__type\n{\n font-size: 12px;\n\n padding: 5px 0;\n\n @include text_code();\n}\n\n.parameter-controls {\n margin-top: 0.75em;\n}\n\n.examples {\n &__title {\n display: block;\n font-size: 1.1em;\n font-weight: bold;\n margin-bottom: 0.75em;\n }\n\n &__section {\n margin-top: 1.5em;\n }\n &__section-header {\n font-weight: bold;\n font-size: .9rem;\n margin-bottom: .5rem;\n // color: #555;\n }\n}\n\n.examples-select {\n margin-bottom: .75em;\n display: inline-block;\n .examples-select-element {\n width: 100%;\n }\n &__section-label {\n font-weight: bold;\n font-size: .9rem;\n margin-right: .5rem;\n }\n}\n\n.example {\n &__section {\n margin-top: 1.5em;\n }\n &__section-header {\n font-weight: bold;\n font-size: .9rem;\n margin-bottom: .5rem;\n // color: #555;\n }\n}\n\n.view-line-link\n{\n position: relative;\n top: 3px;\n\n width: 20px;\n margin: 0 5px;\n\n cursor: pointer;\n transition: all .5s;\n}\n\n\n\n.opblock\n{\n margin: 0 0 15px 0;\n\n border: 1px solid $opblock-border-color;\n border-radius: 4px;\n box-shadow: 0 0 3px rgba($opblock-box-shadow-color,.19);\n\n .tab-header\n {\n display: flex;\n\n flex: 1;\n\n .tab-item\n {\n padding: 0 40px;\n\n cursor: pointer;\n\n &:first-of-type\n {\n padding: 0 40px 0 0;\n }\n &.active\n {\n h4\n {\n span\n {\n position: relative;\n\n\n &:after\n {\n position: absolute;\n bottom: -15px;\n left: 50%;\n\n width: 120%;\n height: 4px;\n\n content: '';\n transform: translateX(-50%);\n\n background: $opblock-tab-header-tab-item-active-h4-span-after-background-color;\n }\n }\n }\n }\n }\n }\n\n\n &.is-open\n {\n .opblock-summary\n {\n border-bottom: 1px solid $opblock-isopen-summary-border-bottom-color;\n }\n }\n\n .opblock-section-header\n {\n display: flex;\n align-items: center;\n\n padding: 8px 20px;\n\n min-height: 50px;\n\n background: rgba($opblock-isopen-section-header-background-color,.8);\n box-shadow: 0 1px 2px rgba($opblock-isopen-section-header-box-shadow-color,.1);\n\n >label\n {\n font-size: 12px;\n font-weight: bold;\n\n display: flex;\n align-items: center;\n\n margin: 0;\n margin-left: auto;\n\n @include text_headline();\n\n >span\n {\n padding: 0 10px 0 0;\n }\n }\n\n h4\n {\n font-size: 14px;\n\n flex: 1;\n\n margin: 0;\n\n @include text_headline();\n }\n }\n\n .opblock-summary-method\n {\n font-size: 14px;\n font-weight: bold;\n @media (max-width: 768px) {\n font-size: 12px;\n }\n\n min-width: 80px;\n padding: 6px 0;\n\n text-align: center;\n\n border-radius: 3px;\n background: $opblock-summary-method-background-color;\n text-shadow: 0 1px 0 rgba($opblock-summary-method-text-shadow-color,.1);\n\n @include text_headline($opblock-summary-method-font-color);\n }\n\n .opblock-summary-path,\n .opblock-summary-operation-id,\n .opblock-summary-path__deprecated\n {\n font-size: 16px;\n @media (max-width: 768px) {\n font-size: 12px;\n }\n\n\n display: flex;\n align-items: center;\n\n word-break: break-word;\n\n @include text_code();\n\n }\n\n .opblock-summary-path\n {\n flex-shrink: 0;\n }\n\n @media (max-width: 640px) {\n .opblock-summary-path\n {\n flex-shrink: 1;\n max-width: 100%;\n }\n }\n\n .opblock-summary-path__deprecated\n {\n text-decoration: line-through;\n }\n\n .opblock-summary-operation-id\n {\n font-size: 14px;\n }\n\n .opblock-summary-description\n {\n font-size: 13px;\n\n word-break: break-word;\n\n @include text_body();\n }\n\n .opblock-summary-path-description-wrapper\n {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0px 10px;\n\n padding: 0 10px;\n\n width: 100%;\n }\n\n @media (max-width: 550px) {\n .opblock-summary-path-description-wrapper\n {\n flex-direction: column;\n align-items: start;\n }\n }\n\n .opblock-summary\n {\n display: flex;\n align-items: center;\n\n padding: 5px;\n\n cursor: pointer;\n\n .view-line-link\n {\n position: relative;\n top: 2px;\n\n width: 0;\n margin: 0;\n\n cursor: pointer;\n transition: all .5s;\n }\n\n &:hover\n {\n .view-line-link\n {\n width: 18px;\n margin: 0 5px;\n\n &.copy-to-clipboard {\n width: 24px;\n }\n }\n }\n }\n\n\n\n &.opblock-post\n {\n @include method($_color-post);\n }\n\n &.opblock-put\n {\n @include method($_color-put);\n }\n\n &.opblock-delete\n {\n @include method($_color-delete);\n }\n\n &.opblock-get\n {\n @include method($_color-get);\n }\n\n &.opblock-patch\n {\n @include method($_color-patch);\n }\n\n &.opblock-head\n {\n @include method($_color-head);\n }\n\n &.opblock-options\n {\n @include method($_color-options);\n }\n\n &.opblock-deprecated\n {\n opacity: .6;\n\n @include method($_color-disabled);\n }\n\n .opblock-schemes\n {\n padding: 8px 20px;\n\n .schemes-title\n {\n padding: 0 10px 0 0;\n }\n }\n}\n\n.filter\n{\n .operation-filter-input\n {\n width: 100%;\n margin: 20px 0;\n padding: 10px 10px;\n\n border: 2px solid $operational-filter-input-border-color;\n }\n}\n\n.filter, .download-url-wrapper\n{\n .failed\n {\n color: red;\n }\n\n .loading\n {\n color: #aaa;\n }\n}\n\n.model-example {\n margin-top: 1em;\n}\n\n.tab\n{\n display: flex;\n\n padding: 0;\n\n list-style: none;\n\n li\n {\n font-size: 12px;\n\n min-width: 60px;\n padding: 0;\n\n cursor: pointer;\n\n @include text_headline();\n\n &:first-of-type\n {\n position: relative;\n\n padding-left: 0;\n padding-right: 12px;\n\n &:after\n {\n position: absolute;\n top: 0;\n right: 6px;\n\n width: 1px;\n height: 100%;\n\n content: '';\n\n background: rgba($tab-list-item-first-background-color,.2);\n }\n }\n\n &.active\n {\n font-weight: bold;\n }\n\n button.tablinks\n {\n background: none;\n border: 0;\n padding: 0;\n\n color: inherit;\n font-family: inherit;\n font-weight: inherit;\n }\n }\n}\n\n.opblock-description-wrapper,\n.opblock-external-docs-wrapper,\n.opblock-title_normal\n{\n font-size: 12px;\n\n margin: 0 0 5px 0;\n padding: 15px 20px;\n\n @include text_body();\n\n h4\n {\n font-size: 12px;\n\n margin: 0 0 5px 0;\n\n @include text_body();\n }\n\n p\n {\n font-size: 14px;\n\n margin: 0;\n\n @include text_body();\n }\n}\n\n.opblock-external-docs-wrapper {\n h4 {\n padding-left: 0px;\n }\n}\n\n.execute-wrapper\n{\n padding: 20px;\n\n text-align: right;\n\n .btn\n {\n width: 100%;\n padding: 8px 40px;\n }\n}\n\n.body-param-options\n{\n display: flex;\n flex-direction: column;\n\n .body-param-edit\n {\n padding: 10px 0;\n }\n\n label\n {\n padding: 8px 0;\n select\n {\n margin: 3px 0 0 0;\n }\n }\n}\n\n.responses-inner\n{\n padding: 20px;\n\n h5,\n h4\n {\n font-size: 12px;\n\n margin: 10px 0 5px 0;\n\n @include text_body();\n }\n\n .curl\n {\n white-space: normal;\n }\n}\n\n.response-col_status\n{\n font-size: 14px;\n\n @include text_body();\n\n .response-undocumented\n {\n font-size: 11px;\n\n @include text_code($response-col-status-undocumented-font-color);\n }\n}\n\n.response-col_links\n{\n padding-left: 2em;\n max-width: 40em;\n font-size: 14px;\n\n @include text_body();\n\n .response-undocumented\n {\n font-size: 11px;\n\n @include text_code($response-col-links-font-color);\n }\n\n .operation-link\n {\n margin-bottom: 1.5em;\n\n .description\n {\n margin-bottom: 0.5em;\n }\n }\n}\n\n.opblock-body\n{\n .opblock-loading-animation\n {\n display: block;\n margin: 3em;\n margin-left: auto;\n margin-right: auto;\n }\n}\n\n.opblock-body pre.microlight\n{\n font-size: 12px;\n\n margin: 0;\n padding: 10px;\n\n white-space: pre-wrap;\n word-wrap: break-word;\n word-break: break-all;\n word-break: break-word;\n hyphens: auto;\n\n border-radius: 4px;\n background: $opblock-body-background-color;\n\n overflow-wrap: break-word;\n @include text_code($opblock-body-font-color);\n\n // disabled to have syntax highliting with react-syntax-highlight\n // span\n // {\n // color: $opblock-body-font-color !important;\n // }\n\n .headerline\n {\n display: block;\n }\n}\n\n.highlight-code {\n position: relative;\n\n > .microlight {\n overflow-y: auto;\n max-height: 400px;\n min-height: 6em;\n\n code {\n white-space: pre-wrap !important;\n word-break: break-all;\n }\n }\n}\n.curl-command {\n position: relative;\n}\n\n.download-contents {\n position: absolute;\n bottom: 10px;\n right: 10px;\n background: #7d8293;\n text-align: center;\n padding: 5px;\n border: none;\n border-radius: 4px;\n font-family: sans-serif;\n font-weight: 600;\n color: white;\n font-size: 14px;\n height: 30px;\n justify-content: center;\n align-items: center;\n display: flex;\n}\n\n.scheme-container\n{\n margin: 0 0 20px 0;\n padding: 30px 0;\n\n background: $scheme-container-background-color;\n box-shadow: 0 1px 2px 0 rgba($scheme-container-box-shadow-color,.15);\n\n .schemes\n {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n flex-wrap: wrap;\n\n gap: 10px;\n\n > label\n {\n font-size: 12px;\n font-weight: bold;\n\n display: flex;\n flex-direction: column;\n\n margin: -20px 15px 0 0;\n\n @include text_headline();\n\n select\n {\n min-width: 130px;\n\n text-transform: uppercase;\n }\n }\n\n /* \n Target Authorize Button in schemes wrapper\n This was added here to fix responsiveness issues with the authorize button\n within the schemes wrapper without affecting other instances of it's usage\n */\n .auth-wrapper \n {\n flex: none;\n justify-content: none;\n \n .authorize\n {\n padding-right: 20px;\n margin: 0;\n\n display: flex;\n\n flex-wrap: nowrap;\n }\n }\n }\n}\n\n.loading-container\n{\n padding: 40px 0 60px;\n margin-top: 1em;\n min-height: 1px;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n .loading\n {\n position: relative;\n\n\n &:after\n {\n font-size: 10px;\n font-weight: bold;\n\n position: absolute;\n top: 50%;\n left: 50%;\n\n content: 'loading';\n transform: translate(-50%,-50%);\n text-transform: uppercase;\n\n @include text_headline();\n }\n\n &:before\n {\n position: absolute;\n top: 50%;\n left: 50%;\n\n display: block;\n\n width: 60px;\n height: 60px;\n margin: -30px -30px;\n\n content: '';\n animation: rotation 1s infinite linear, opacity .5s;\n\n opacity: 1;\n border: 2px solid rgba($loading-container-before-border-color, .1);\n border-top-color: rgba($loading-container-before-border-top-color, .6);\n border-radius: 100%;\n\n backface-visibility: hidden;\n\n @keyframes rotation\n {\n to\n {\n transform: rotate(360deg);\n }\n }\n }\n }\n}\n\n.response-controls {\n padding-top: 1em;\n display: flex;\n}\n\n.response-control-media-type {\n margin-right: 1em;\n\n &--accept-controller {\n select {\n border-color: $response-content-type-controls-accept-header-select-border-color;\n }\n }\n\n &__accept-message {\n color: $response-content-type-controls-accept-header-small-font-color;\n font-size: .7em;\n }\n\n &__title {\n display: block;\n margin-bottom: 0.2em;\n font-size: .7em;\n }\n}\n\n.response-control-examples {\n &__title {\n display: block;\n margin-bottom: 0.2em;\n font-size: .7em;\n }\n}\n\n@keyframes blinker\n{\n 50%\n {\n opacity: 0;\n }\n}\n\n.hidden\n{\n display: none;\n}\n\n.no-margin\n{\n height: auto;\n border: none;\n margin: 0;\n padding: 0;\n}\n\n.float-right\n{\n float: right;\n}\n\n.svg-assets\n{\n position: absolute;\n width: 0;\n height: 0;\n}\n\nsection\n{\n h3\n {\n @include text_headline();\n }\n}\n\na.nostyle {\n text-decoration: inherit;\n color: inherit;\n cursor: pointer;\n display: inline;\n\n &:visited {\n text-decoration: inherit;\n color: inherit;\n cursor: pointer;\n }\n}\n\n.fallback\n{\n padding: 1em;\n color: #aaa;\n}\n\n.version-pragma {\n height: 100%;\n padding: 5em 0px;\n\n &__message {\n display: flex;\n justify-content: center;\n height: 100%;\n font-size: 1.2em;\n text-align: center;\n line-height: 1.5em;\n\n padding: 0px .6em;\n\n > div {\n max-width: 55ch;\n flex: 1;\n }\n\n code {\n background-color: #dedede;\n padding: 4px 4px 2px;\n white-space: pre;\n }\n }\n}\n\n.opblock-link\n{\n font-weight: normal;\n\n &.shown\n {\n font-weight: bold;\n }\n}\n\nspan\n{\n &.token-string\n {\n color: #555;\n }\n\n &.token-not-formatted\n {\n color: #555;\n font-weight: bold;\n }\n}\n",".btn\n{\n font-size: 14px;\n font-weight: bold;\n\n padding: 5px 23px;\n\n transition: all .3s;\n\n border: 2px solid $btn-border-color;\n border-radius: 4px;\n background: transparent;\n box-shadow: 0 1px 2px rgba($btn-box-shadow-color,.1);\n\n @include text_headline();\n\n &.btn-sm\n {\n font-size: 12px;\n padding: 4px 23px;\n }\n\n &[disabled]\n {\n cursor: not-allowed;\n\n opacity: .3;\n }\n\n &:hover\n {\n box-shadow: 0 0 5px rgba($btn-box-shadow-color,.3);\n }\n\n &.cancel\n {\n border-color: $btn-cancel-border-color;\n background-color: $btn-cancel-background-color;\n @include text_headline($btn-cancel-font-color);\n }\n\n &.authorize\n {\n line-height: 1;\n\n display: inline;\n\n color: $btn-authorize-font-color;\n border-color: $btn-authorize-border-color;\n background-color: $btn-authorize-background-color;\n\n span\n {\n float: left;\n\n padding: 4px 20px 0 0;\n }\n\n svg\n {\n fill: $btn-authorize-svg-fill-color;\n }\n }\n\n &.execute\n {\n background-color: $btn-execute-background-color-alt;\n color: $btn-execute-font-color;\n border-color: $btn-execute-border-color;\n }\n}\n\n.btn-group\n{\n display: flex;\n\n padding: 30px;\n\n .btn\n {\n flex: 1;\n\n &:first-child\n {\n border-radius: 4px 0 0 4px;\n }\n\n &:last-child\n {\n border-radius: 0 4px 4px 0;\n }\n }\n}\n\n.authorization__btn\n{\n padding: 0 0 0 10px;\n\n border: none;\n background: none;\n\n .locked\n {\n opacity: 1;\n }\n\n .unlocked\n {\n opacity: .4;\n }\n}\n\n.opblock-summary-control,\n.models-control,\n.model-box-control\n{\n all: inherit;\n flex: 1;\n border-bottom: 0;\n padding: 0;\n cursor: pointer;\n\n &:focus {\n outline: auto;\n }\n}\n\n.expand-methods,\n.expand-operation\n{\n border: none;\n background: none;\n\n svg\n {\n width: 20px;\n height: 20px;\n }\n}\n\n.expand-methods\n{\n padding: 0 10px;\n\n &:hover\n {\n svg\n {\n fill: $expand-methods-svg-fill-color-hover;\n }\n }\n\n svg\n {\n transition: all .3s;\n\n fill: $expand-methods-svg-fill-color;\n }\n}\n\nbutton\n{\n cursor: pointer;\n\n &.invalid\n {\n @include invalidFormElement();\n }\n}\n\n.copy-to-clipboard\n{\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n bottom: 10px;\n right: 100px;\n width: 30px;\n height: 30px;\n background: #7d8293;\n border-radius: 4px;\n border: none;\n\n button\n {\n flex-grow: 1;\n flex-shrink: 1;\n border: none;\n height: 25px;\n background: url(\"data:image/svg+xml, \") center center no-repeat;\n }\n}\n\n.copy-to-clipboard:active\n{\n background: #5e626f;\n}\n\n.opblock-control-arrow\n{\n border: none;\n text-align: center;\n background: none;\n}\n\n// overrides for smaller copy button for curl command\n.curl-command .copy-to-clipboard\n{\n bottom: 5px;\n right: 10px;\n width: 20px;\n height: 20px;\n\n button\n {\n height: 18px;\n }\n}\n\n// overrides for copy to clipboard button\n.opblock .opblock-summary .view-line-link.copy-to-clipboard\n{\n height: 26px;\n position: unset;\n}\n","// - - - - - - - - - - - - - - - - - - -\n// - - _mixins.scss module\n// styles for the _mixins.scss module\n@function calculateRem($size)\n{\n $remSize: $size / 16px;\n @return $remSize * 1rem;\n}\n\n@mixin font-size($size)\n{\n font-size: $size;\n font-size: calculateRem($size);\n}\n\n%clearfix\n{\n &:before,\n &:after\n {\n display: table;\n\n content: ' ';\n }\n &:after\n {\n clear: both;\n }\n}\n\n@mixin size($width, $height: $width)\n{\n width: $width;\n height: $height;\n}\n\n$ease: (\n in-quad: cubic-bezier(.550, .085, .680, .530),\n in-cubic: cubic-bezier(.550, .055, .675, .190),\n in-quart: cubic-bezier(.895, .030, .685, .220),\n in-quint: cubic-bezier(.755, .050, .855, .060),\n in-sine: cubic-bezier(.470, .000, .745, .715),\n in-expo: cubic-bezier(.950, .050, .795, .035),\n in-circ: cubic-bezier(.600, .040, .980, .335),\n in-back: cubic-bezier(.600, -.280, .735, .045),\n out-quad: cubic-bezier(.250, .460, .450, .940),\n out-cubic: cubic-bezier(.215, .610, .355, 1.000),\n out-quart: cubic-bezier(.165, .840, .440, 1.000),\n out-quint: cubic-bezier(.230, 1.000, .320, 1.000),\n out-sine: cubic-bezier(.390, .575, .565, 1.000),\n out-expo: cubic-bezier(.190, 1.000, .220, 1.000),\n out-circ: cubic-bezier(.075, .820, .165, 1.000),\n out-back: cubic-bezier(.175, .885, .320, 1.275),\n in-out-quad: cubic-bezier(.455, .030, .515, .955),\n in-out-cubic: cubic-bezier(.645, .045, .355, 1.000),\n in-out-quart: cubic-bezier(.770, .000, .175, 1.000),\n in-out-quint: cubic-bezier(.860, .000, .070, 1.000),\n in-out-sine: cubic-bezier(.445, .050, .550, .950),\n in-out-expo: cubic-bezier(1.000, .000, .000, 1.000),\n in-out-circ: cubic-bezier(.785, .135, .150, .860),\n in-out-back: cubic-bezier(.680, -.550, .265, 1.550)\n);\n\n@function ease($key)\n{\n @if map-has-key($ease, $key)\n {\n @return map-get($ease, $key);\n }\n\n @warn 'Unkown \\'#{$key}\\' in $ease.';\n @return null;\n}\n\n\n@mixin ease($key)\n{\n transition-timing-function: ease($key);\n}\n\n@mixin text-truncate\n{\n overflow: hidden;\n\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n@mixin aspect-ratio($width, $height)\n{\n position: relative;\n &:before\n {\n display: block;\n\n width: 100%;\n padding-top: ($height / $width) * 100%;\n\n content: '';\n }\n > iframe\n {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\n\n$browser-context: 16;\n\n@function em($pixels, $context: $browser-context)\n{\n @if (unitless($pixels))\n {\n $pixels: $pixels * 1px;\n }\n\n @if (unitless($context))\n {\n $context: $context * 1px;\n }\n\n @return $pixels / $context * 1em;\n}\n\n@mixin maxHeight($height)\n{\n @media (max-height: $height)\n {\n @content;\n }\n}\n\n\n@mixin breakpoint($class)\n{\n @if $class == tablet\n {\n @media (min-width: 768px) and (max-width: 1024px)\n {\n @content;\n }\n }\n\n @else if $class == mobile\n {\n @media (min-width: 320px) and (max-width : 736px)\n {\n @content;\n }\n }\n\n @else if $class == desktop\n {\n @media (min-width: 1400px)\n {\n @content;\n }\n }\n\n @else\n {\n @warn 'Breakpoint mixin supports: tablet, mobile, desktop';\n }\n}\n\n@mixin invalidFormElement() {\n animation: shake .4s 1;\n border-color: $_color-delete;\n background: lighten($_color-delete, 35%);\n}\n","select\n{\n font-size: 14px;\n font-weight: bold;\n\n padding: 5px 40px 5px 10px;\n\n border: 2px solid $form-select-border-color;\n border-radius: 4px;\n background: $form-select-background-color url('data:image/svg+xml, ') right 10px center no-repeat;\n background-size: 20px;\n box-shadow: 0 1px 2px 0 rgba($form-select-box-shadow-color, .25);\n\n @include text_headline();\n appearance: none;\n\n &[multiple]\n {\n margin: 5px 0;\n padding: 5px;\n\n background: $form-select-background-color;\n }\n\n &.invalid {\n @include invalidFormElement();\n }\n}\n\n.opblock-body select\n{\n min-width: 230px;\n @media (max-width: 768px)\n {\n min-width: 180px;\n }\n @media (max-width: 640px)\n {\n width: 100%;\n min-width: 100%;\n }\n}\n\nlabel\n{\n font-size: 12px;\n font-weight: bold;\n\n margin: 0 0 5px 0;\n\n @include text_headline();\n}\n\ninput[type=text],\ninput[type=password],\ninput[type=search],\ninput[type=email],\ninput[type=file]\n{\n line-height: 1;\n\n @media (max-width: 768px) {\n max-width: 175px;\n }\n}\n\n\ninput[type=text],\ninput[type=password],\ninput[type=search],\ninput[type=email],\ninput[type=file],\ntextarea\n{\n min-width: 100px;\n margin: 5px 0;\n padding: 8px 10px;\n\n border: 1px solid $form-input-border-color;\n border-radius: 4px;\n background: $form-input-background-color;\n\n\n &.invalid\n {\n @include invalidFormElement();\n }\n\n}\n\ninput,\ntextarea,\nselect {\n &[disabled] {\n // opacity: 0.85;\n background-color: #fafafa;\n color: #888;\n cursor: not-allowed;\n }\n}\n\nselect[disabled] {\n border-color: #888;\n}\n\ntextarea[disabled] {\n background-color: #41444e;\n color: #fff;\n}\n\n@keyframes shake\n{\n 10%,\n 90%\n {\n transform: translate3d(-1px, 0, 0);\n }\n\n 20%,\n 80%\n {\n transform: translate3d(2px, 0, 0);\n }\n\n 30%,\n 50%,\n 70%\n {\n transform: translate3d(-4px, 0, 0);\n }\n\n 40%,\n 60%\n {\n transform: translate3d(4px, 0, 0);\n }\n}\n\ntextarea\n{\n font-size: 12px;\n\n width: 100%;\n min-height: 280px;\n padding: 10px;\n\n border: none;\n border-radius: 4px;\n outline: none;\n background: rgba($form-textarea-background-color,.8);\n\n @include text_code();\n\n &:focus\n {\n border: 2px solid $form-textarea-focus-border-color;\n }\n\n &.curl\n {\n font-size: 12px;\n\n min-height: 100px;\n margin: 0;\n padding: 10px;\n\n resize: none;\n\n border-radius: 4px;\n background: $form-textarea-curl-background-color;\n\n @include text_code($form-textarea-curl-font-color);\n }\n}\n\n\n.checkbox\n{\n padding: 5px 0 10px;\n\n transition: opacity .5s;\n\n color: $form-checkbox-label-font-color;\n\n label\n {\n display: flex;\n }\n\n p\n {\n font-weight: normal !important;\n font-style: italic;\n\n margin: 0 !important;\n\n @include text_code();\n }\n\n input[type=checkbox]\n {\n display: none;\n\n & + label > .item\n {\n position: relative;\n top: 3px;\n\n display: inline-block;\n\n width: 16px;\n height: 16px;\n margin: 0 8px 0 0;\n padding: 5px;\n\n cursor: pointer;\n\n border-radius: 1px;\n background: $form-checkbox-background-color;\n box-shadow: 0 0 0 2px $form-checkbox-box-shadow-color;\n\n flex: none;\n\n &:active\n {\n transform: scale(.9);\n }\n }\n\n &:checked + label > .item\n {\n background: $form-checkbox-background-color url('data:image/svg+xml, ') center center no-repeat;\n }\n }\n}\n",".dialog-ux\n{\n position: fixed;\n z-index: 9999;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n .backdrop-ux\n {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n background: rgba($dialog-ux-backdrop-background-color,.8);\n }\n\n .modal-ux\n {\n position: absolute;\n z-index: 9999;\n top: 50%;\n left: 50%;\n\n width: 100%;\n min-width: 300px;\n max-width: 650px;\n\n transform: translate(-50%,-50%);\n\n border: 1px solid $dialog-ux-modal-border-color;\n border-radius: 4px;\n background: $dialog-ux-modal-background-color;\n box-shadow: 0 10px 30px 0 rgba($dialog-ux-modal-box-shadow-color,.20);\n }\n\n .modal-ux-content\n {\n overflow-y: auto;\n\n max-height: 540px;\n padding: 20px;\n\n p\n {\n font-size: 12px;\n\n margin: 0 0 5px 0;\n\n color: $dialog-ux-modal-content-font-color;\n\n @include text_body();\n }\n\n h4\n {\n font-size: 18px;\n font-weight: 600;\n\n margin: 15px 0 0 0;\n\n @include text_headline();\n }\n }\n\n .modal-ux-header\n {\n display: flex;\n\n padding: 12px 0;\n\n border-bottom: 1px solid $dialog-ux-modal-header-border-bottom-color;\n\n align-items: center;\n\n .close-modal\n {\n padding: 0 10px;\n\n border: none;\n background: none;\n\n appearance: none;\n }\n\n\n h3\n {\n font-size: 20px;\n font-weight: 600;\n\n margin: 0;\n padding: 0 20px;\n\n flex: 1;\n @include text_headline();\n }\n }\n}\n",".model\n{\n font-size: 12px;\n font-weight: 300;\n\n @include text_code();\n\n .deprecated\n {\n span,\n td\n {\n color: $model-deprecated-font-color !important;\n }\n\n > td:first-of-type {\n text-decoration: line-through;\n }\n }\n &-toggle\n {\n font-size: 10px;\n\n position: relative;\n top: 6px;\n\n display: inline-block;\n\n margin: auto .3em;\n\n cursor: pointer;\n transition: transform .15s ease-in;\n transform: rotate(90deg);\n transform-origin: 50% 50%;\n\n &.collapsed\n {\n transform: rotate(0deg);\n }\n\n &:after\n {\n display: block;\n\n width: 20px;\n height: 20px;\n\n content: '';\n\n background: url('data:image/svg+xml, ') center no-repeat;\n background-size: 100%;\n }\n }\n\n &-jump-to-path\n {\n position: relative;\n\n cursor: pointer;\n\n .view-line-link\n {\n position: absolute;\n top: -.4em;\n\n cursor: pointer;\n }\n }\n\n &-title\n {\n position: relative;\n\n &:hover .model-hint\n {\n visibility: visible;\n }\n }\n\n &-hint\n {\n position: absolute;\n top: -1.8em;\n\n visibility: hidden;\n\n padding: .1em .5em;\n\n white-space: nowrap;\n\n color: $model-hint-font-color;\n border-radius: 4px;\n background: rgba($model-hint-background-color,.7);\n }\n\n p\n {\n margin: 0 0 1em 0;\n }\n\n .property\n {\n color: #999;\n font-style: italic;\n\n &.primitive\n {\n color: #6b6b6b;\n }\n }\n\n .external-docs\n {\n color: #666;\n font-weight: normal;\n }\n}\n\ntable.model\n{\n tr\n {\n &.description\n {\n color: #666;\n font-weight: normal;\n \n td:first-child\n {\n font-weight: bold;\n }\n }\n\n &.property-row\n {\n &.required td:first-child\n {\n font-weight: bold;\n }\n\n td\n {\n vertical-align: top;\n\n &:first-child\n {\n padding-right: 0.2em;\n }\n }\n\n .star\n {\n color: red;\n }\n }\n\n &.extension\n {\n color: #777;\n\n td:last-child\n {\n vertical-align: top;\n }\n }\n\n &.external-docs\n {\n td:first-child\n {\n font-weight: bold;\n }\n }\n\n .renderedMarkdown p:first-child\n {\n margin-top: 0;\n } \n }\n}\n\nsection.models\n{\n margin: 30px 0;\n\n border: 1px solid rgba($section-models-border-color, .3);\n border-radius: 4px;\n\n .pointer\n {\n cursor: pointer;\n }\n\n &.is-open\n {\n padding: 0 0 20px;\n h4\n {\n margin: 0 0 5px 0;\n\n border-bottom: 1px solid rgba($section-models-isopen-h4-border-bottom-color, .3);\n }\n }\n h4\n {\n font-size: 16px;\n\n display: flex;\n align-items: center;\n\n margin: 0;\n padding: 10px 20px 10px 10px;\n\n cursor: pointer;\n transition: all .2s;\n\n @include text_headline($section-models-h4-font-color);\n\n svg\n {\n transition: all .4s;\n }\n\n span\n {\n flex: 1;\n }\n\n &:hover\n {\n background: rgba($section-models-h4-background-color-hover,.02);\n }\n }\n\n h5\n {\n font-size: 16px;\n\n margin: 0 0 10px 0;\n\n @include text_headline($section-models-h5-font-color);\n }\n\n .model-jump-to-path\n {\n position: relative;\n top: 5px;\n }\n\n .model-container\n {\n margin: 0 20px 15px;\n position: relative;\n\n transition: all .5s;\n\n border-radius: 4px;\n background: rgba($section-models-model-container-background-color,.05);\n\n &:hover\n {\n background: rgba($section-models-model-container-background-color,.07);\n }\n\n &:first-of-type\n {\n margin: 20px;\n }\n\n &:last-of-type\n {\n margin: 0 20px;\n }\n\n .models-jump-to-path {\n position: absolute;\n top: 8px;\n right: 5px;\n opacity: 0.65;\n }\n }\n\n .model-box\n {\n background: none;\n }\n}\n\n\n.model-box\n{\n padding: 10px;\n display: inline-block;\n\n border-radius: 4px;\n background: rgba($section-models-model-box-background-color,.1);\n\n .model-jump-to-path\n {\n position: relative;\n top: 4px;\n }\n\n &.deprecated\n {\n opacity: .5;\n }\n}\n\n\n.model-title\n{\n font-size: 16px;\n\n @include text_headline($section-models-model-title-font-color);\n\n img\n {\n margin-left: 1em;\n position: relative;\n bottom: 0px;\n }\n}\n\n.model-deprecated-warning\n{\n font-size: 16px;\n font-weight: 600;\n\n margin-right: 1em;\n\n @include text_headline($_color-delete);\n}\n\n\nspan\n{\n > span.model\n {\n .brace-close\n {\n padding: 0 0 0 10px;\n }\n }\n}\n\n.prop-name\n{\n display: inline-block;\n\n margin-right: 1em;\n}\n\n.prop-type\n{\n color: $prop-type-font-color;\n}\n\n.prop-enum\n{\n display: block;\n}\n.prop-format\n{\n color: $prop-format-font-color;\n}\n",".servers\n{\n > label\n {\n font-size: 12px;\n\n margin: -20px 15px 0 0;\n\n @include text_headline();\n\n select\n {\n min-width: 130px;\n max-width: 100%;\n width: 100%;\n }\n }\n\n h4.message {\n padding-bottom: 2em;\n }\n\n table {\n tr {\n width: 30em;\n }\n td {\n display: inline-block;\n max-width: 15em;\n vertical-align: middle;\n padding-top: 10px;\n padding-bottom: 10px;\n\n &:first-of-type {\n padding-right: 1em;\n }\n\n input {\n width: 100%;\n height: 100%;\n }\n }\n }\n\n .computed-url {\n margin: 2em 0;\n\n code {\n display: inline-block;\n padding: 4px;\n font-size: 16px;\n margin: 0 1em;\n }\n }\n}\n\n.servers-title {\n font-size: 12px;\n font-weight: bold;\n}\n\n.operation-servers {\n h4.message {\n margin-bottom: 2em;\n }\n}\n","table\n{\n width: 100%;\n padding: 0 10px;\n\n border-collapse: collapse;\n\n &.model\n {\n tbody\n {\n tr\n {\n td\n {\n padding: 0;\n\n vertical-align: top;\n\n &:first-of-type\n {\n width: 174px;\n padding: 0 0 0 2em;\n }\n }\n }\n }\n }\n\n &.headers\n {\n td\n {\n font-size: 12px;\n font-weight: 300;\n\n vertical-align: middle;\n\n @include text_code();\n }\n\n .header-example\n {\n color: #999;\n font-style: italic;\n }\n }\n\n tbody\n {\n tr\n {\n td\n {\n padding: 10px 0 0 0;\n\n vertical-align: top;\n\n &:first-of-type\n {\n min-width: 6em;\n padding: 10px 0;\n }\n }\n }\n }\n\n thead\n {\n tr\n {\n th,\n td\n {\n font-size: 12px;\n font-weight: bold;\n\n padding: 12px 0;\n\n text-align: left;\n\n border-bottom: 1px solid rgba($table-thead-td-border-bottom-color, .2);\n\n @include text_body();\n }\n }\n }\n}\n\n.parameters-col_description\n{\n width: 99%; // forces other columns to shrink to their content widths\n margin-bottom: 2em;\n input\n {\n width: 100%;\n max-width: 340px;\n }\n\n select {\n border-width: 1px;\n }\n\n .markdown, .renderedMarkdown {\n p {\n margin: 0;\n }\n }\n}\n\n.parameter__name\n{\n font-size: 16px;\n font-weight: normal;\n\n // hack to give breathing room to the name column\n // TODO: refactor all of this to flexbox\n margin-right: .75em;\n\n @include text_headline();\n\n &.required\n {\n font-weight: bold;\n\n span\n {\n color: red;\n }\n\n &:after\n {\n font-size: 10px;\n\n position: relative;\n top: -6px;\n\n padding: 5px;\n\n content: 'required';\n\n color: rgba($table-parameter-name-required-font-color, .6);\n }\n }\n}\n\n.parameter__in,\n.parameter__extension\n{\n font-size: 12px;\n font-style: italic;\n\n @include text_code($table-parameter-in-font-color);\n}\n\n.parameter__deprecated\n{\n font-size: 12px;\n font-style: italic;\n\n @include text_code($table-parameter-deprecated-font-color);\n}\n\n.parameter__empty_value_toggle {\n display: block;\n font-size: 13px;\n padding-top: 5px;\n padding-bottom: 12px;\n\n input {\n margin-right: 7px;\n width: auto;\n }\n\n &.disabled {\n opacity: 0.7;\n }\n}\n\n\n.table-container\n{\n padding: 20px;\n}\n\n\n.response-col_description {\n width: 99%; // forces other columns to shrink to their content widths\n\n .markdown, .renderedMarkdown {\n p {\n margin: 0;\n }\n }\n}\n\n.response-col_links {\n min-width: 6em;\n}\n\n.response__extension\n{\n font-size: 12px;\n font-style: italic;\n\n @include text_code($table-parameter-in-font-color);\n}\n",".topbar\n{\n padding: 10px 0;\n\n background-color: $topbar-background-color;\n .topbar-wrapper\n {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n }\n @media (max-width: 550px) {\n .topbar-wrapper\n {\n flex-direction: column;\n align-items: start;\n }\n }\n\n a\n {\n font-size: 1.5em;\n font-weight: bold;\n\n display: flex;\n align-items: center;\n flex: 1;\n\n max-width: 300px;\n\n text-decoration: none;\n\n @include text_headline($topbar-link-font-color);\n\n span\n {\n margin: 0;\n padding: 0 10px;\n }\n }\n\n .download-url-wrapper\n {\n display: flex;\n flex: 3;\n justify-content: flex-end;\n\n input[type=text]\n {\n width: 100%;\n max-width: 100%;\n margin: 0;\n\n border: 2px solid $topbar-download-url-wrapper-element-border-color;\n border-radius: 4px 0 0 4px;\n outline: none;\n }\n\n .select-label\n {\n display: flex;\n align-items: center;\n\n width: 100%;\n max-width: 600px;\n margin: 0;\n color: #f0f0f0;\n span\n {\n font-size: 16px;\n\n flex: 1;\n\n padding: 0 10px 0 0;\n\n text-align: right;\n }\n\n select\n {\n flex: 2;\n\n width: 100%;\n\n border: 2px solid $topbar-download-url-wrapper-element-border-color;\n outline: none;\n box-shadow: none;\n }\n }\n\n\n .download-url-button\n {\n font-size: 16px;\n font-weight: bold;\n\n padding: 4px 30px;\n\n border: none;\n border-radius: 0 4px 4px 0;\n background: $topbar-download-url-button-background-color;\n\n @include text_headline($topbar-download-url-button-font-color);\n }\n }\n @media (max-width: 550px) {\n .download-url-wrapper\n {\n width: 100%;\n }\n }\n}\n",".info\n{\n margin: 50px 0;\n\n &.failed-config\n { \n max-width: 880px;\n margin-left: auto;\n margin-right: auto;\n text-align: center\n }\n\n hgroup.main\n {\n margin: 0 0 20px 0;\n a\n {\n font-size: 12px;\n }\n }\n pre \n {\n font-size: 14px;\n }\n p, li, table\n {\n font-size: 14px;\n\n @include text_body();\n }\n\n h1, h2, h3, h4, h5\n {\n @include text_body();\n }\n\n a\n {\n font-size: 14px;\n\n transition: all .4s;\n\n @include text_body($info-link-font-color);\n\n &:hover\n {\n color: darken($info-link-font-color-hover, 15%);\n }\n }\n > div\n {\n margin: 0 0 5px 0;\n }\n\n .base-url\n {\n font-size: 12px;\n font-weight: 300 !important;\n\n margin: 0;\n\n @include text_code();\n }\n\n .title\n {\n font-size: 36px;\n\n margin: 0;\n\n @include text_body();\n\n small\n {\n font-size: 10px;\n\n position: relative;\n top: -5px;\n\n display: inline-block;\n\n margin: 0 0 0 5px;\n padding: 2px 4px;\n\n vertical-align: super;\n\n border-radius: 57px;\n background: $info-title-small-background-color;\n \n &.version-stamp\n {\n background-color: #89bf04;\n }\n\n pre\n {\n margin: 0;\n padding: 0;\n\n @include text_headline($info-title-small-pre-font-color);\n }\n }\n }\n}\n",".auth-btn-wrapper\n{\n display: flex;\n\n padding: 10px 0;\n\n justify-content: center;\n\n .btn-done {\n margin-right: 1em;\n }\n}\n\n.auth-wrapper\n{\n display: flex;\n\n flex: 1;\n justify-content: flex-end;\n\n .authorize\n {\n padding-right: 20px;\n margin-left: 10px;\n margin-right: 10px;\n }\n}\n\n.auth-container\n{\n margin: 0 0 10px 0;\n padding: 10px 20px;\n\n border-bottom: 1px solid $auth-container-border-color;\n\n &:last-of-type\n {\n margin: 0;\n padding: 10px 20px;\n\n border: 0;\n }\n\n h4\n {\n margin: 5px 0 15px 0 !important;\n }\n\n .wrapper\n {\n margin: 0;\n padding: 0;\n }\n\n input[type=text],\n input[type=password]\n {\n min-width: 230px;\n }\n\n .errors\n {\n font-size: 12px;\n\n padding: 10px;\n\n border-radius: 4px;\n\n background-color: #ffeeee;\n\n color: red;\n\n margin: 1em;\n\n @include text_code();\n\n b\n {\n text-transform: capitalize;\n margin-right: 1em;\n }\n }\n}\n\n.scopes\n{\n h2\n {\n font-size: 14px;\n\n @include text_headline();\n\n a\n {\n font-size: 12px;\n color: $auth-select-all-none-link-font-color;\n cursor: pointer;\n padding-left: 10px;\n text-decoration: underline;\n }\n }\n}\n\n.scope-def\n{\n padding: 0 0 20px 0;\n}\n",".errors-wrapper\n{\n margin: 20px;\n padding: 10px 20px;\n\n animation: scaleUp .5s;\n\n border: 2px solid $_color-delete;\n border-radius: 4px;\n background: rgba($_color-delete, .1);\n\n .error-wrapper\n {\n margin: 0 0 10px 0;\n }\n\n .errors\n {\n h4\n {\n font-size: 14px;\n\n margin: 0;\n\n @include text_code();\n }\n\n small\n {\n color: $errors-wrapper-errors-small-font-color;\n }\n\n .message\n { \n white-space: pre-line;\n \n &.thrown\n {\n max-width: 100%;\n }\n }\n\n .error-line\n {\n text-decoration: underline;\n cursor: pointer;\n }\n }\n\n hgroup\n {\n display: flex;\n\n align-items: center;\n\n h4\n {\n font-size: 20px;\n\n margin: 0;\n\n flex: 1;\n @include text_headline();\n }\n }\n}\n\n\n@keyframes scaleUp\n{\n 0%\n {\n transform: scale(.8);\n\n opacity: 0;\n }\n 100%\n {\n transform: scale(1);\n\n opacity: 1;\n }\n}\n",".Resizer.vertical.disabled {\n display: none;\n}",".markdown, .renderedMarkdown {\n p, pre {\n margin: 1em auto;\n\n word-break: break-all; /* Fallback trick */\n word-break: break-word;\n }\n pre {\n color: black;\n font-weight: normal;\n white-space: pre-wrap;\n background: none;\n padding: 0px;\n }\n\n code {\n font-size: 14px;\n padding: 5px 7px;\n\n border-radius: 4px;\n background: rgba($info-code-background-color,.05);\n\n @include text_code($info-code-font-color);\n }\n\n pre > code {\n display: block;\n }\n}\n",".json-schema-2020-12 {\n margin: 0 20px 15px 20px;\n border-radius: 4px;\n padding: 12px 0 12px 20px;\n background-color: rgba($section-models-model-container-background-color, .05);\n\n &:first-of-type {\n margin: 20px;\n }\n\n &:last-of-type {\n margin: 0 20px;\n }\n\n &--embedded {\n background-color: inherit;\n padding: 0 inherit 0 inherit;\n }\n\n &-body {\n @include expansion-border;\n margin: 2px 0;\n\n &--collapsed {\n display: none;\n }\n }\n}\n\n\n","@mixin expansion-border {\n margin: 0 0 0 20px;\n border-left: 1px dashed rgba($section-models-model-container-background-color, 0.1);\n}\n\n@import './JSONSchema/json-schema';\n@import './Accordion/accordion';\n@import './ExpandDeepButton/expand-deep-button';\n@import './keywords/all';\n",".json-schema-2020-12-accordion {\n outline: none;\n border: none;\n padding-left: 0;\n\n &__children {\n display: inline-block;\n }\n\n &__icon {\n width: 18px;\n height: 18px;\n display: inline-block;\n vertical-align: bottom;\n\n &--expanded {\n transition: transform .15s ease-in;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n }\n\n &--collapsed {\n transition: transform .15s ease-in;\n transform: rotate(0deg);\n transform-origin: 50% 50%;\n }\n\n & svg {\n height: 20px;\n width: 20px;\n }\n }\n}\n\n",".json-schema-2020-12-expand-deep-button {\n @include text_headline($section-models-model-title-font-color);\n font-size: 12px;\n color: rgb(175, 174, 174);\n border: none;\n padding-right: 0;\n}\n",".json-schema-2020-12-keyword {\n margin: 5px 0 5px 0;\n\n &__children {\n @include expansion-border;\n padding: 0;\n\n &--collapsed {\n display: none;\n }\n }\n\n &__name {\n font-size: 12px;\n margin-left: 20px;\n font-weight: bold;\n\n &--primary {\n color: $text-code-default-font-color;\n font-style: normal;\n }\n\n &--secondary {\n color: #6b6b6b;\n font-style: italic;\n }\n }\n\n &__value {\n color: #6b6b6b;\n font-style: italic;\n font-size: 12px;\n font-weight: normal;\n\n &--primary {\n color: $text-code-default-font-color;\n font-style: normal;\n }\n\n &--secondary {\n color: #6b6b6b;\n font-style: italic;\n }\n\n &--const {\n @include text_code();\n color: #6b6b6b;\n font-style: normal;\n display: inline-block;\n margin-left: 10px;\n line-height: 1.5;\n padding: 1px 4px 1px 4px;\n border: 1px dashed #6b6b6b;\n border-radius: 4px;\n }\n\n &--warning {\n @extend .json-schema-2020-12-keyword__value--const;\n color: red;\n border: 1px dashed red;\n }\n }\n}\n.json-schema-2020-12-keyword__name--secondary + .json-schema-2020-12-keyword__value--secondary::before {\n content: '='\n}\n\n.json-schema-2020-12__attribute {\n font-family: monospace;\n color: $text-code-default-font-color;\n font-size: 12px;\n text-transform: lowercase;\n padding-left: 10px;\n\n &--primary {\n color: $prop-type-font-color;\n }\n\n &--muted {\n color: gray;\n }\n\n &--warning {\n color: red;\n }\n}\n\n@import './$vocabulary/$vocabulary';\n@import './Description/description';\n@import './Title/title';\n@import './Properties/properties';\n@import './PatternProperties/pattern-properties';\n@import './Enum/enum';\n@import './Constraint/constraint';\n@import './DependentRequired/dependent-required';\n",".json-schema-2020-12 {\n &-keyword--\\$vocabulary {\n ul {\n @include expansion-border;\n }\n }\n\n &-\\$vocabulary-uri {\n margin-left: 35px;\n\n &--disabled {\n text-decoration: line-through;\n }\n }\n}\n",".json-schema-2020-12-keyword--description {\n color: #6b6b6b;\n font-size: 12px;\n margin-left: 20px;\n\n & p {\n margin: 0;\n }\n}\n",".json-schema-2020-12 {\n &__title {\n @include text_headline($section-models-model-title-font-color);\n display: inline-block;\n font-weight: bold;\n font-size: 12px;\n line-height: normal;\n\n & .json-schema-2020-12-keyword__name {\n margin: 0;\n }\n }\n\n &-property {\n margin: 7px 0;\n\n .json-schema-2020-12__title {\n @include text_code();\n font-size: 12px;\n vertical-align: middle;\n }\n }\n}\n",".json-schema-2020-12 {\n &-keyword--properties {\n & > ul {\n margin: 0;\n padding: 0;\n border: none;\n }\n }\n\n &-property {\n list-style-type: none;\n\n &--required {\n & > .json-schema-2020-12:first-of-type > .json-schema-2020-12-head .json-schema-2020-12__title:after {\n content: '*';\n color: red;\n font-weight: bold;\n }\n }\n }\n}\n",".json-schema-2020-12 {\n &-keyword--patternProperties {\n ul {\n margin: 0;\n padding: 0;\n border: none;\n }\n\n .json-schema-2020-12__title:first-of-type::before {\n color: $prop-type-font-color;\n content: \"/\";\n }\n\n .json-schema-2020-12__title:first-of-type::after {\n color: $prop-type-font-color;\n content: \"/\";\n }\n }\n}\n",".json-schema-2020-12-keyword--enum {\n & > ul {\n display: inline-block;\n padding: 0;\n margin: 0;\n\n li {\n display: inline;\n list-style-type: none;\n }\n }\n}\n",".json-schema-2020-12__constraint {\n @include text_code();\n margin-left: 10px;\n line-height: 1.5;\n padding: 1px 3px;\n color: white;\n background-color: #805AD5;\n border-radius: 4px;\n\n &--string {\n color: white;\n background-color: #D69E2E;\n }\n}\n",".json-schema-2020-12-keyword--dependentRequired {\n & > ul {\n display: inline-block;\n padding: 0;\n margin: 0;\n\n li {\n display: inline;\n list-style-type: none;\n }\n }\n}\n",".model-box {\n // inferred names of Schema Objects\n & .json-schema-2020-12:not(.json-schema-2020-12--embedded) > .json-schema-2020-12-head .json-schema-2020-12__title:first-of-type {\n font-size: 16px;\n }\n\n & > .json-schema-2020-12 {\n margin: 0;\n }\n\n .json-schema-2020-12 {\n padding: 0;\n background-color: transparent;\n }\n\n .json-schema-2020-12-accordion, .json-schema-2020-12-expand-deep-button {\n background-color: transparent;\n }\n}\n",".models .json-schema-2020-12:not(.json-schema-2020-12--embedded) > .json-schema-2020-12-head .json-schema-2020-12__title:first-of-type {\n font-size: 16px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/assets/img/data-architecture.png b/docs/assets/img/data-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..7767014852b27778e007b3b7286aac295cc69e29 GIT binary patch literal 74665 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 ac?^~Ir_B#3qgT)izjO264fJ)>7ylQn7Yp_P literal 0 HcmV?d00001 diff --git a/docs/assets/img/griptape-mark-square-light.svg b/docs/assets/img/griptape-mark-square-light.svg new file mode 100644 index 000000000..84df06e4f --- /dev/null +++ b/docs/assets/img/griptape-mark-square-light.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/assets/img/tools/output.png b/docs/assets/img/tools/output.png new file mode 100644 index 0000000000000000000000000000000000000000..a383f5d68eb02957b736da3d7bbb40d74a7ad2c2 GIT binary patch literal 151667 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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/tools/poetry_setup.png b/docs/assets/img/tools/poetry_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..04e3b7551cda2742ab35dca0b888f8efa705ca48 GIT binary patch literal 173909 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/tools/toml.png b/docs/assets/img/tools/toml.png new file mode 100644 index 0000000000000000000000000000000000000000..b166dd5b3fb6b7a340366d7d2ea860a34506dba1 GIT binary patch literal 899349 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≫ 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≪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ℜ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

Vw!K#7gJ*Q^8bS3cVq0A#} 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/,{relevance:10}),{begin://,relevance:10},u,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[M],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[M],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:s,relevance:0,starts:M}]},{className:"tag",begin:concat(/<\//,lookahead(concat(s,/>/))),contains:[{className:"name",begin:s,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},54587:i=>{i.exports=function yaml(i){var s="true false yes no null",u="[\\w#;/?:@&=+$,.~*'()[\\]]+",m={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[i.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},v=i.inherit(m,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),_={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},j={end:",",endsWithParent:!0,excludeEnd:!0,keywords:s,relevance:0},M={begin:/\{/,end:/\}/,contains:[j],illegal:"\\n",relevance:0},$={begin:"\\[",end:"\\]",contains:[j],illegal:"\\n",relevance:0},W=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+u},{className:"type",begin:"!<"+u+">"},{className:"type",begin:"!"+u},{className:"type",begin:"!!"+u},{className:"meta",begin:"&"+i.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+i.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},i.HASH_COMMENT_MODE,{beginKeywords:s,keywords:{literal:s}},_,{className:"number",begin:i.C_NUMBER_RE+"\\b",relevance:0},M,$,m],X=[...W];return X.pop(),X.push(v),j.contains=X,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:W}}},8679:(i,s,u)=>{"use strict";var m=u(59864),v={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},_={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},j={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},M={};function getStatics(i){return m.isMemo(i)?j:M[i.$$typeof]||v}M[m.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},M[m.Memo]=j;var $=Object.defineProperty,W=Object.getOwnPropertyNames,X=Object.getOwnPropertySymbols,Y=Object.getOwnPropertyDescriptor,Z=Object.getPrototypeOf,ee=Object.prototype;i.exports=function hoistNonReactStatics(i,s,u){if("string"!=typeof s){if(ee){var m=Z(s);m&&m!==ee&&hoistNonReactStatics(i,m,u)}var v=W(s);X&&(v=v.concat(X(s)));for(var j=getStatics(i),M=getStatics(s),ie=0;ie{s.read=function(i,s,u,m,v){var _,j,M=8*v-m-1,$=(1<>1,X=-7,Y=u?v-1:0,Z=u?-1:1,ee=i[s+Y];for(Y+=Z,_=ee&(1<<-X)-1,ee>>=-X,X+=M;X>0;_=256*_+i[s+Y],Y+=Z,X-=8);for(j=_&(1<<-X)-1,_>>=-X,X+=m;X>0;j=256*j+i[s+Y],Y+=Z,X-=8);if(0===_)_=1-W;else{if(_===$)return j?NaN:1/0*(ee?-1:1);j+=Math.pow(2,m),_-=W}return(ee?-1:1)*j*Math.pow(2,_-m)},s.write=function(i,s,u,m,v,_){var j,M,$,W=8*_-v-1,X=(1<>1,Z=23===v?Math.pow(2,-24)-Math.pow(2,-77):0,ee=m?0:_-1,ie=m?1:-1,ae=s<0||0===s&&1/s<0?1:0;for(s=Math.abs(s),isNaN(s)||s===1/0?(M=isNaN(s)?1:0,j=X):(j=Math.floor(Math.log(s)/Math.LN2),s*($=Math.pow(2,-j))<1&&(j--,$*=2),(s+=j+Y>=1?Z/$:Z*Math.pow(2,1-Y))*$>=2&&(j++,$/=2),j+Y>=X?(M=0,j=X):j+Y>=1?(M=(s*$-1)*Math.pow(2,v),j+=Y):(M=s*Math.pow(2,Y-1)*Math.pow(2,v),j=0));v>=8;i[u+ee]=255&M,ee+=ie,M/=256,v-=8);for(j=j<0;i[u+ee]=255&j,ee+=ie,j/=256,W-=8);i[u+ee-ie]|=128*ae}},43393:function(i){i.exports=function(){"use strict";var i=Array.prototype.slice;function createClass(i,s){s&&(i.prototype=Object.create(s.prototype)),i.prototype.constructor=i}function Iterable(i){return isIterable(i)?i:Seq(i)}function KeyedIterable(i){return isKeyed(i)?i:KeyedSeq(i)}function IndexedIterable(i){return isIndexed(i)?i:IndexedSeq(i)}function SetIterable(i){return isIterable(i)&&!isAssociative(i)?i:SetSeq(i)}function isIterable(i){return!(!i||!i[s])}function isKeyed(i){return!(!i||!i[u])}function isIndexed(i){return!(!i||!i[m])}function isAssociative(i){return isKeyed(i)||isIndexed(i)}function isOrdered(i){return!(!i||!i[v])}createClass(KeyedIterable,Iterable),createClass(IndexedIterable,Iterable),createClass(SetIterable,Iterable),Iterable.isIterable=isIterable,Iterable.isKeyed=isKeyed,Iterable.isIndexed=isIndexed,Iterable.isAssociative=isAssociative,Iterable.isOrdered=isOrdered,Iterable.Keyed=KeyedIterable,Iterable.Indexed=IndexedIterable,Iterable.Set=SetIterable;var s="@@__IMMUTABLE_ITERABLE__@@",u="@@__IMMUTABLE_KEYED__@@",m="@@__IMMUTABLE_INDEXED__@@",v="@@__IMMUTABLE_ORDERED__@@",_="delete",j=5,M=1<>>0;if(""+u!==s||4294967295===u)return NaN;s=u}return s<0?ensureSize(i)+s:s}function returnTrue(){return!0}function wholeSlice(i,s,u){return(0===i||void 0!==u&&i<=-u)&&(void 0===s||void 0!==u&&s>=u)}function resolveBegin(i,s){return resolveIndex(i,s,0)}function resolveEnd(i,s){return resolveIndex(i,s,s)}function resolveIndex(i,s,u){return void 0===i?u:i<0?Math.max(0,s+i):void 0===s?i:Math.min(s,i)}var Z=0,ee=1,ie=2,ae="function"==typeof Symbol&&Symbol.iterator,le="@@iterator",ce=ae||le;function Iterator(i){this.next=i}function iteratorValue(i,s,u,m){var v=0===i?s:1===i?u:[s,u];return m?m.value=v:m={value:v,done:!1},m}function iteratorDone(){return{value:void 0,done:!0}}function hasIterator(i){return!!getIteratorFn(i)}function isIterator(i){return i&&"function"==typeof i.next}function getIterator(i){var s=getIteratorFn(i);return s&&s.call(i)}function getIteratorFn(i){var s=i&&(ae&&i[ae]||i[le]);if("function"==typeof s)return s}function isArrayLike(i){return i&&"number"==typeof i.length}function Seq(i){return null==i?emptySequence():isIterable(i)?i.toSeq():seqFromValue(i)}function KeyedSeq(i){return null==i?emptySequence().toKeyedSeq():isIterable(i)?isKeyed(i)?i.toSeq():i.fromEntrySeq():keyedSeqFromValue(i)}function IndexedSeq(i){return null==i?emptySequence():isIterable(i)?isKeyed(i)?i.entrySeq():i.toIndexedSeq():indexedSeqFromValue(i)}function SetSeq(i){return(null==i?emptySequence():isIterable(i)?isKeyed(i)?i.entrySeq():i:indexedSeqFromValue(i)).toSetSeq()}Iterator.prototype.toString=function(){return"[Iterator]"},Iterator.KEYS=Z,Iterator.VALUES=ee,Iterator.ENTRIES=ie,Iterator.prototype.inspect=Iterator.prototype.toSource=function(){return this.toString()},Iterator.prototype[ce]=function(){return this},createClass(Seq,Iterable),Seq.of=function(){return Seq(arguments)},Seq.prototype.toSeq=function(){return this},Seq.prototype.toString=function(){return this.__toString("Seq {","}")},Seq.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},Seq.prototype.__iterate=function(i,s){return seqIterate(this,i,s,!0)},Seq.prototype.__iterator=function(i,s){return seqIterator(this,i,s,!0)},createClass(KeyedSeq,Seq),KeyedSeq.prototype.toKeyedSeq=function(){return this},createClass(IndexedSeq,Seq),IndexedSeq.of=function(){return IndexedSeq(arguments)},IndexedSeq.prototype.toIndexedSeq=function(){return this},IndexedSeq.prototype.toString=function(){return this.__toString("Seq [","]")},IndexedSeq.prototype.__iterate=function(i,s){return seqIterate(this,i,s,!1)},IndexedSeq.prototype.__iterator=function(i,s){return seqIterator(this,i,s,!1)},createClass(SetSeq,Seq),SetSeq.of=function(){return SetSeq(arguments)},SetSeq.prototype.toSetSeq=function(){return this},Seq.isSeq=isSeq,Seq.Keyed=KeyedSeq,Seq.Set=SetSeq,Seq.Indexed=IndexedSeq;var pe,de,fe,ye="@@__IMMUTABLE_SEQ__@@";function ArraySeq(i){this._array=i,this.size=i.length}function ObjectSeq(i){var s=Object.keys(i);this._object=i,this._keys=s,this.size=s.length}function IterableSeq(i){this._iterable=i,this.size=i.length||i.size}function IteratorSeq(i){this._iterator=i,this._iteratorCache=[]}function isSeq(i){return!(!i||!i[ye])}function emptySequence(){return pe||(pe=new ArraySeq([]))}function keyedSeqFromValue(i){var s=Array.isArray(i)?new ArraySeq(i).fromEntrySeq():isIterator(i)?new IteratorSeq(i).fromEntrySeq():hasIterator(i)?new IterableSeq(i).fromEntrySeq():"object"==typeof i?new ObjectSeq(i):void 0;if(!s)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+i);return s}function indexedSeqFromValue(i){var s=maybeIndexedSeqFromValue(i);if(!s)throw new TypeError("Expected Array or iterable object of values: "+i);return s}function seqFromValue(i){var s=maybeIndexedSeqFromValue(i)||"object"==typeof i&&new ObjectSeq(i);if(!s)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+i);return s}function maybeIndexedSeqFromValue(i){return isArrayLike(i)?new ArraySeq(i):isIterator(i)?new IteratorSeq(i):hasIterator(i)?new IterableSeq(i):void 0}function seqIterate(i,s,u,m){var v=i._cache;if(v){for(var _=v.length-1,j=0;j<=_;j++){var M=v[u?_-j:j];if(!1===s(M[1],m?M[0]:j,i))return j+1}return j}return i.__iterateUncached(s,u)}function seqIterator(i,s,u,m){var v=i._cache;if(v){var _=v.length-1,j=0;return new Iterator((function(){var i=v[u?_-j:j];return j++>_?iteratorDone():iteratorValue(s,m?i[0]:j-1,i[1])}))}return i.__iteratorUncached(s,u)}function fromJS(i,s){return s?fromJSWith(s,i,"",{"":i}):fromJSDefault(i)}function fromJSWith(i,s,u,m){return Array.isArray(s)?i.call(m,u,IndexedSeq(s).map((function(u,m){return fromJSWith(i,u,m,s)}))):isPlainObj(s)?i.call(m,u,KeyedSeq(s).map((function(u,m){return fromJSWith(i,u,m,s)}))):s}function fromJSDefault(i){return Array.isArray(i)?IndexedSeq(i).map(fromJSDefault).toList():isPlainObj(i)?KeyedSeq(i).map(fromJSDefault).toMap():i}function isPlainObj(i){return i&&(i.constructor===Object||void 0===i.constructor)}function is(i,s){if(i===s||i!=i&&s!=s)return!0;if(!i||!s)return!1;if("function"==typeof i.valueOf&&"function"==typeof s.valueOf){if((i=i.valueOf())===(s=s.valueOf())||i!=i&&s!=s)return!0;if(!i||!s)return!1}return!("function"!=typeof i.equals||"function"!=typeof s.equals||!i.equals(s))}function deepEqual(i,s){if(i===s)return!0;if(!isIterable(s)||void 0!==i.size&&void 0!==s.size&&i.size!==s.size||void 0!==i.__hash&&void 0!==s.__hash&&i.__hash!==s.__hash||isKeyed(i)!==isKeyed(s)||isIndexed(i)!==isIndexed(s)||isOrdered(i)!==isOrdered(s))return!1;if(0===i.size&&0===s.size)return!0;var u=!isAssociative(i);if(isOrdered(i)){var m=i.entries();return s.every((function(i,s){var v=m.next().value;return v&&is(v[1],i)&&(u||is(v[0],s))}))&&m.next().done}var v=!1;if(void 0===i.size)if(void 0===s.size)"function"==typeof i.cacheResult&&i.cacheResult();else{v=!0;var _=i;i=s,s=_}var j=!0,M=s.__iterate((function(s,m){if(u?!i.has(s):v?!is(s,i.get(m,W)):!is(i.get(m,W),s))return j=!1,!1}));return j&&i.size===M}function Repeat(i,s){if(!(this instanceof Repeat))return new Repeat(i,s);if(this._value=i,this.size=void 0===s?1/0:Math.max(0,s),0===this.size){if(de)return de;de=this}}function invariant(i,s){if(!i)throw new Error(s)}function Range(i,s,u){if(!(this instanceof Range))return new Range(i,s,u);if(invariant(0!==u,"Cannot step a Range by 0"),i=i||0,void 0===s&&(s=1/0),u=void 0===u?1:Math.abs(u),sm?iteratorDone():iteratorValue(i,v,u[s?m-v++:v++])}))},createClass(ObjectSeq,KeyedSeq),ObjectSeq.prototype.get=function(i,s){return void 0===s||this.has(i)?this._object[i]:s},ObjectSeq.prototype.has=function(i){return this._object.hasOwnProperty(i)},ObjectSeq.prototype.__iterate=function(i,s){for(var u=this._object,m=this._keys,v=m.length-1,_=0;_<=v;_++){var j=m[s?v-_:_];if(!1===i(u[j],j,this))return _+1}return _},ObjectSeq.prototype.__iterator=function(i,s){var u=this._object,m=this._keys,v=m.length-1,_=0;return new Iterator((function(){var j=m[s?v-_:_];return _++>v?iteratorDone():iteratorValue(i,j,u[j])}))},ObjectSeq.prototype[v]=!0,createClass(IterableSeq,IndexedSeq),IterableSeq.prototype.__iterateUncached=function(i,s){if(s)return this.cacheResult().__iterate(i,s);var u=getIterator(this._iterable),m=0;if(isIterator(u))for(var v;!(v=u.next()).done&&!1!==i(v.value,m++,this););return m},IterableSeq.prototype.__iteratorUncached=function(i,s){if(s)return this.cacheResult().__iterator(i,s);var u=getIterator(this._iterable);if(!isIterator(u))return new Iterator(iteratorDone);var m=0;return new Iterator((function(){var s=u.next();return s.done?s:iteratorValue(i,m++,s.value)}))},createClass(IteratorSeq,IndexedSeq),IteratorSeq.prototype.__iterateUncached=function(i,s){if(s)return this.cacheResult().__iterate(i,s);for(var u,m=this._iterator,v=this._iteratorCache,_=0;_=m.length){var s=u.next();if(s.done)return s;m[v]=s.value}return iteratorValue(i,v,m[v++])}))},createClass(Repeat,IndexedSeq),Repeat.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Repeat.prototype.get=function(i,s){return this.has(i)?this._value:s},Repeat.prototype.includes=function(i){return is(this._value,i)},Repeat.prototype.slice=function(i,s){var u=this.size;return wholeSlice(i,s,u)?this:new Repeat(this._value,resolveEnd(s,u)-resolveBegin(i,u))},Repeat.prototype.reverse=function(){return this},Repeat.prototype.indexOf=function(i){return is(this._value,i)?0:-1},Repeat.prototype.lastIndexOf=function(i){return is(this._value,i)?this.size:-1},Repeat.prototype.__iterate=function(i,s){for(var u=0;u=0&&s=0&&uu?iteratorDone():iteratorValue(i,_++,j)}))},Range.prototype.equals=function(i){return i instanceof Range?this._start===i._start&&this._end===i._end&&this._step===i._step:deepEqual(this,i)},createClass(Collection,Iterable),createClass(KeyedCollection,Collection),createClass(IndexedCollection,Collection),createClass(SetCollection,Collection),Collection.Keyed=KeyedCollection,Collection.Indexed=IndexedCollection,Collection.Set=SetCollection;var be="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function imul(i,s){var u=65535&(i|=0),m=65535&(s|=0);return u*m+((i>>>16)*m+u*(s>>>16)<<16>>>0)|0};function smi(i){return i>>>1&1073741824|3221225471&i}function hash(i){if(!1===i||null==i)return 0;if("function"==typeof i.valueOf&&(!1===(i=i.valueOf())||null==i))return 0;if(!0===i)return 1;var s=typeof i;if("number"===s){if(i!=i||i===1/0)return 0;var u=0|i;for(u!==i&&(u^=4294967295*i);i>4294967295;)u^=i/=4294967295;return smi(u)}if("string"===s)return i.length>Te?cachedHashString(i):hashString(i);if("function"==typeof i.hashCode)return i.hashCode();if("object"===s)return hashJSObj(i);if("function"==typeof i.toString)return hashString(i.toString());throw new Error("Value type "+s+" cannot be hashed.")}function cachedHashString(i){var s=ze[i];return void 0===s&&(s=hashString(i),qe===Re&&(qe=0,ze={}),qe++,ze[i]=s),s}function hashString(i){for(var s=0,u=0;u0)switch(i.nodeType){case 1:return i.uniqueID;case 9:return i.documentElement&&i.documentElement.uniqueID}}var Se,xe="function"==typeof WeakMap;xe&&(Se=new WeakMap);var Ie=0,Pe="__immutablehash__";"function"==typeof Symbol&&(Pe=Symbol(Pe));var Te=16,Re=255,qe=0,ze={};function assertNotInfinite(i){invariant(i!==1/0,"Cannot perform this action with an infinite size.")}function Map(i){return null==i?emptyMap():isMap(i)&&!isOrdered(i)?i:emptyMap().withMutations((function(s){var u=KeyedIterable(i);assertNotInfinite(u.size),u.forEach((function(i,u){return s.set(u,i)}))}))}function isMap(i){return!(!i||!i[We])}createClass(Map,KeyedCollection),Map.of=function(){var s=i.call(arguments,0);return emptyMap().withMutations((function(i){for(var u=0;u=s.length)throw new Error("Missing value for key: "+s[u]);i.set(s[u],s[u+1])}}))},Map.prototype.toString=function(){return this.__toString("Map {","}")},Map.prototype.get=function(i,s){return this._root?this._root.get(0,void 0,i,s):s},Map.prototype.set=function(i,s){return updateMap(this,i,s)},Map.prototype.setIn=function(i,s){return this.updateIn(i,W,(function(){return s}))},Map.prototype.remove=function(i){return updateMap(this,i,W)},Map.prototype.deleteIn=function(i){return this.updateIn(i,(function(){return W}))},Map.prototype.update=function(i,s,u){return 1===arguments.length?i(this):this.updateIn([i],s,u)},Map.prototype.updateIn=function(i,s,u){u||(u=s,s=void 0);var m=updateInDeepMap(this,forceIterator(i),s,u);return m===W?void 0:m},Map.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):emptyMap()},Map.prototype.merge=function(){return mergeIntoMapWith(this,void 0,arguments)},Map.prototype.mergeWith=function(s){return mergeIntoMapWith(this,s,i.call(arguments,1))},Map.prototype.mergeIn=function(s){var u=i.call(arguments,1);return this.updateIn(s,emptyMap(),(function(i){return"function"==typeof i.merge?i.merge.apply(i,u):u[u.length-1]}))},Map.prototype.mergeDeep=function(){return mergeIntoMapWith(this,deepMerger,arguments)},Map.prototype.mergeDeepWith=function(s){var u=i.call(arguments,1);return mergeIntoMapWith(this,deepMergerWith(s),u)},Map.prototype.mergeDeepIn=function(s){var u=i.call(arguments,1);return this.updateIn(s,emptyMap(),(function(i){return"function"==typeof i.mergeDeep?i.mergeDeep.apply(i,u):u[u.length-1]}))},Map.prototype.sort=function(i){return OrderedMap(sortFactory(this,i))},Map.prototype.sortBy=function(i,s){return OrderedMap(sortFactory(this,s,i))},Map.prototype.withMutations=function(i){var s=this.asMutable();return i(s),s.wasAltered()?s.__ensureOwner(this.__ownerID):this},Map.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new OwnerID)},Map.prototype.asImmutable=function(){return this.__ensureOwner()},Map.prototype.wasAltered=function(){return this.__altered},Map.prototype.__iterator=function(i,s){return new MapIterator(this,i,s)},Map.prototype.__iterate=function(i,s){var u=this,m=0;return this._root&&this._root.iterate((function(s){return m++,i(s[1],s[0],u)}),s),m},Map.prototype.__ensureOwner=function(i){return i===this.__ownerID?this:i?makeMap(this.size,this._root,i,this.__hash):(this.__ownerID=i,this.__altered=!1,this)},Map.isMap=isMap;var Ve,We="@@__IMMUTABLE_MAP__@@",He=Map.prototype;function ArrayMapNode(i,s){this.ownerID=i,this.entries=s}function BitmapIndexedNode(i,s,u){this.ownerID=i,this.bitmap=s,this.nodes=u}function HashArrayMapNode(i,s,u){this.ownerID=i,this.count=s,this.nodes=u}function HashCollisionNode(i,s,u){this.ownerID=i,this.keyHash=s,this.entries=u}function ValueNode(i,s,u){this.ownerID=i,this.keyHash=s,this.entry=u}function MapIterator(i,s,u){this._type=s,this._reverse=u,this._stack=i._root&&mapIteratorFrame(i._root)}function mapIteratorValue(i,s){return iteratorValue(i,s[0],s[1])}function mapIteratorFrame(i,s){return{node:i,index:0,__prev:s}}function makeMap(i,s,u,m){var v=Object.create(He);return v.size=i,v._root=s,v.__ownerID=u,v.__hash=m,v.__altered=!1,v}function emptyMap(){return Ve||(Ve=makeMap(0))}function updateMap(i,s,u){var m,v;if(i._root){var _=MakeRef(X),j=MakeRef(Y);if(m=updateNode(i._root,i.__ownerID,0,void 0,s,u,_,j),!j.value)return i;v=i.size+(_.value?u===W?-1:1:0)}else{if(u===W)return i;v=1,m=new ArrayMapNode(i.__ownerID,[[s,u]])}return i.__ownerID?(i.size=v,i._root=m,i.__hash=void 0,i.__altered=!0,i):m?makeMap(v,m):emptyMap()}function updateNode(i,s,u,m,v,_,j,M){return i?i.update(s,u,m,v,_,j,M):_===W?i:(SetRef(M),SetRef(j),new ValueNode(s,m,[v,_]))}function isLeafNode(i){return i.constructor===ValueNode||i.constructor===HashCollisionNode}function mergeIntoNode(i,s,u,m,v){if(i.keyHash===m)return new HashCollisionNode(s,m,[i.entry,v]);var _,M=(0===u?i.keyHash:i.keyHash>>>u)&$,W=(0===u?m:m>>>u)&$;return new BitmapIndexedNode(s,1<>>=1)j[$]=1&u?s[_++]:void 0;return j[m]=v,new HashArrayMapNode(i,_+1,j)}function mergeIntoMapWith(i,s,u){for(var m=[],v=0;v>1&1431655765))+(i>>2&858993459))+(i>>4)&252645135,i+=i>>8,127&(i+=i>>16)}function setIn(i,s,u,m){var v=m?i:arrCopy(i);return v[s]=u,v}function spliceIn(i,s,u,m){var v=i.length+1;if(m&&s+1===v)return i[s]=u,i;for(var _=new Array(v),j=0,M=0;M=Xe)return createNodes(i,$,m,v);var ee=i&&i===this.ownerID,ie=ee?$:arrCopy($);return Z?M?X===Y-1?ie.pop():ie[X]=ie.pop():ie[X]=[m,v]:ie.push([m,v]),ee?(this.entries=ie,this):new ArrayMapNode(i,ie)}},BitmapIndexedNode.prototype.get=function(i,s,u,m){void 0===s&&(s=hash(u));var v=1<<((0===i?s:s>>>i)&$),_=this.bitmap;return 0==(_&v)?m:this.nodes[popCount(_&v-1)].get(i+j,s,u,m)},BitmapIndexedNode.prototype.update=function(i,s,u,m,v,_,M){void 0===u&&(u=hash(m));var X=(0===s?u:u>>>s)&$,Y=1<=Ye)return expandNodes(i,ae,Z,X,ce);if(ee&&!ce&&2===ae.length&&isLeafNode(ae[1^ie]))return ae[1^ie];if(ee&&ce&&1===ae.length&&isLeafNode(ce))return ce;var pe=i&&i===this.ownerID,de=ee?ce?Z:Z^Y:Z|Y,fe=ee?ce?setIn(ae,ie,ce,pe):spliceOut(ae,ie,pe):spliceIn(ae,ie,ce,pe);return pe?(this.bitmap=de,this.nodes=fe,this):new BitmapIndexedNode(i,de,fe)},HashArrayMapNode.prototype.get=function(i,s,u,m){void 0===s&&(s=hash(u));var v=(0===i?s:s>>>i)&$,_=this.nodes[v];return _?_.get(i+j,s,u,m):m},HashArrayMapNode.prototype.update=function(i,s,u,m,v,_,M){void 0===u&&(u=hash(m));var X=(0===s?u:u>>>s)&$,Y=v===W,Z=this.nodes,ee=Z[X];if(Y&&!ee)return this;var ie=updateNode(ee,i,s+j,u,m,v,_,M);if(ie===ee)return this;var ae=this.count;if(ee){if(!ie&&--ae0&&m=0&&i>>s&$;if(m>=this.array.length)return new VNode([],i);var v,_=0===m;if(s>0){var M=this.array[m];if((v=M&&M.removeBefore(i,s-j,u))===M&&_)return this}if(_&&!v)return this;var W=editableVNode(this,i);if(!_)for(var X=0;X>>s&$;if(v>=this.array.length)return this;if(s>0){var _=this.array[v];if((m=_&&_.removeAfter(i,s-j,u))===_&&v===this.array.length-1)return this}var M=editableVNode(this,i);return M.array.splice(v+1),m&&(M.array[v]=m),M};var rt,nt,ot={};function iterateList(i,s){var u=i._origin,m=i._capacity,v=getTailOffset(m),_=i._tail;return iterateNodeOrLeaf(i._root,i._level,0);function iterateNodeOrLeaf(i,s,u){return 0===s?iterateLeaf(i,u):iterateNode(i,s,u)}function iterateLeaf(i,j){var $=j===v?_&&_.array:i&&i.array,W=j>u?0:u-j,X=m-j;return X>M&&(X=M),function(){if(W===X)return ot;var i=s?--X:W++;return $&&$[i]}}function iterateNode(i,v,_){var $,W=i&&i.array,X=_>u?0:u-_>>v,Y=1+(m-_>>v);return Y>M&&(Y=M),function(){for(;;){if($){var i=$();if(i!==ot)return i;$=null}if(X===Y)return ot;var u=s?--Y:X++;$=iterateNodeOrLeaf(W&&W[u],v-j,_+(u<=i.size||s<0)return i.withMutations((function(i){s<0?setListBounds(i,s).set(0,u):setListBounds(i,0,s+1).set(s,u)}));s+=i._origin;var m=i._tail,v=i._root,_=MakeRef(Y);return s>=getTailOffset(i._capacity)?m=updateVNode(m,i.__ownerID,0,s,u,_):v=updateVNode(v,i.__ownerID,i._level,s,u,_),_.value?i.__ownerID?(i._root=v,i._tail=m,i.__hash=void 0,i.__altered=!0,i):makeList(i._origin,i._capacity,i._level,v,m):i}function updateVNode(i,s,u,m,v,_){var M,W=m>>>u&$,X=i&&W0){var Y=i&&i.array[W],Z=updateVNode(Y,s,u-j,m,v,_);return Z===Y?i:((M=editableVNode(i,s)).array[W]=Z,M)}return X&&i.array[W]===v?i:(SetRef(_),M=editableVNode(i,s),void 0===v&&W===M.array.length-1?M.array.pop():M.array[W]=v,M)}function editableVNode(i,s){return s&&i&&s===i.ownerID?i:new VNode(i?i.array.slice():[],s)}function listNodeFor(i,s){if(s>=getTailOffset(i._capacity))return i._tail;if(s<1<0;)u=u.array[s>>>m&$],m-=j;return u}}function setListBounds(i,s,u){void 0!==s&&(s|=0),void 0!==u&&(u|=0);var m=i.__ownerID||new OwnerID,v=i._origin,_=i._capacity,M=v+s,W=void 0===u?_:u<0?_+u:v+u;if(M===v&&W===_)return i;if(M>=W)return i.clear();for(var X=i._level,Y=i._root,Z=0;M+Z<0;)Y=new VNode(Y&&Y.array.length?[void 0,Y]:[],m),Z+=1<<(X+=j);Z&&(M+=Z,v+=Z,W+=Z,_+=Z);for(var ee=getTailOffset(_),ie=getTailOffset(W);ie>=1<ee?new VNode([],m):ae;if(ae&&ie>ee&&M<_&&ae.array.length){for(var ce=Y=editableVNode(Y,m),pe=X;pe>j;pe-=j){var de=ee>>>pe&$;ce=ce.array[de]=editableVNode(ce.array[de],m)}ce.array[ee>>>j&$]=ae}if(W<_&&(le=le&&le.removeAfter(m,0,W)),M>=ie)M-=ie,W-=ie,X=j,Y=null,le=le&&le.removeBefore(m,0,M);else if(M>v||ie>>X&$;if(fe!==ie>>>X&$)break;fe&&(Z+=(1<v&&(Y=Y.removeBefore(m,X,M-Z)),Y&&iev&&(v=M.size),isIterable(j)||(M=M.map((function(i){return fromJS(i)}))),m.push(M)}return v>i.size&&(i=i.setSize(v)),mergeIntoCollectionWith(i,s,m)}function getTailOffset(i){return i>>j<=M&&j.size>=2*_.size?(m=(v=j.filter((function(i,s){return void 0!==i&&$!==s}))).toKeyedSeq().map((function(i){return i[0]})).flip().toMap(),i.__ownerID&&(m.__ownerID=v.__ownerID=i.__ownerID)):(m=_.remove(s),v=$===j.size-1?j.pop():j.set($,void 0))}else if(X){if(u===j.get($)[1])return i;m=_,v=j.set($,[s,u])}else m=_.set(s,j.size),v=j.set(j.size,[s,u]);return i.__ownerID?(i.size=m.size,i._map=m,i._list=v,i.__hash=void 0,i):makeOrderedMap(m,v)}function ToKeyedSequence(i,s){this._iter=i,this._useKeys=s,this.size=i.size}function ToIndexedSequence(i){this._iter=i,this.size=i.size}function ToSetSequence(i){this._iter=i,this.size=i.size}function FromEntriesSequence(i){this._iter=i,this.size=i.size}function flipFactory(i){var s=makeSequence(i);return s._iter=i,s.size=i.size,s.flip=function(){return i},s.reverse=function(){var s=i.reverse.apply(this);return s.flip=function(){return i.reverse()},s},s.has=function(s){return i.includes(s)},s.includes=function(s){return i.has(s)},s.cacheResult=cacheResultThrough,s.__iterateUncached=function(s,u){var m=this;return i.__iterate((function(i,u){return!1!==s(u,i,m)}),u)},s.__iteratorUncached=function(s,u){if(s===ie){var m=i.__iterator(s,u);return new Iterator((function(){var i=m.next();if(!i.done){var s=i.value[0];i.value[0]=i.value[1],i.value[1]=s}return i}))}return i.__iterator(s===ee?Z:ee,u)},s}function mapFactory(i,s,u){var m=makeSequence(i);return m.size=i.size,m.has=function(s){return i.has(s)},m.get=function(m,v){var _=i.get(m,W);return _===W?v:s.call(u,_,m,i)},m.__iterateUncached=function(m,v){var _=this;return i.__iterate((function(i,v,j){return!1!==m(s.call(u,i,v,j),v,_)}),v)},m.__iteratorUncached=function(m,v){var _=i.__iterator(ie,v);return new Iterator((function(){var v=_.next();if(v.done)return v;var j=v.value,M=j[0];return iteratorValue(m,M,s.call(u,j[1],M,i),v)}))},m}function reverseFactory(i,s){var u=makeSequence(i);return u._iter=i,u.size=i.size,u.reverse=function(){return i},i.flip&&(u.flip=function(){var s=flipFactory(i);return s.reverse=function(){return i.flip()},s}),u.get=function(u,m){return i.get(s?u:-1-u,m)},u.has=function(u){return i.has(s?u:-1-u)},u.includes=function(s){return i.includes(s)},u.cacheResult=cacheResultThrough,u.__iterate=function(s,u){var m=this;return i.__iterate((function(i,u){return s(i,u,m)}),!u)},u.__iterator=function(s,u){return i.__iterator(s,!u)},u}function filterFactory(i,s,u,m){var v=makeSequence(i);return m&&(v.has=function(m){var v=i.get(m,W);return v!==W&&!!s.call(u,v,m,i)},v.get=function(m,v){var _=i.get(m,W);return _!==W&&s.call(u,_,m,i)?_:v}),v.__iterateUncached=function(v,_){var j=this,M=0;return i.__iterate((function(i,_,$){if(s.call(u,i,_,$))return M++,v(i,m?_:M-1,j)}),_),M},v.__iteratorUncached=function(v,_){var j=i.__iterator(ie,_),M=0;return new Iterator((function(){for(;;){var _=j.next();if(_.done)return _;var $=_.value,W=$[0],X=$[1];if(s.call(u,X,W,i))return iteratorValue(v,m?W:M++,X,_)}}))},v}function countByFactory(i,s,u){var m=Map().asMutable();return i.__iterate((function(v,_){m.update(s.call(u,v,_,i),0,(function(i){return i+1}))})),m.asImmutable()}function groupByFactory(i,s,u){var m=isKeyed(i),v=(isOrdered(i)?OrderedMap():Map()).asMutable();i.__iterate((function(_,j){v.update(s.call(u,_,j,i),(function(i){return(i=i||[]).push(m?[j,_]:_),i}))}));var _=iterableClass(i);return v.map((function(s){return reify(i,_(s))}))}function sliceFactory(i,s,u,m){var v=i.size;if(void 0!==s&&(s|=0),void 0!==u&&(u===1/0?u=v:u|=0),wholeSlice(s,u,v))return i;var _=resolveBegin(s,v),j=resolveEnd(u,v);if(_!=_||j!=j)return sliceFactory(i.toSeq().cacheResult(),s,u,m);var M,$=j-_;$==$&&(M=$<0?0:$);var W=makeSequence(i);return W.size=0===M?M:i.size&&M||void 0,!m&&isSeq(i)&&M>=0&&(W.get=function(s,u){return(s=wrapIndex(this,s))>=0&&sM)return iteratorDone();var i=v.next();return m||s===ee?i:iteratorValue(s,$-1,s===Z?void 0:i.value[1],i)}))},W}function takeWhileFactory(i,s,u){var m=makeSequence(i);return m.__iterateUncached=function(m,v){var _=this;if(v)return this.cacheResult().__iterate(m,v);var j=0;return i.__iterate((function(i,v,M){return s.call(u,i,v,M)&&++j&&m(i,v,_)})),j},m.__iteratorUncached=function(m,v){var _=this;if(v)return this.cacheResult().__iterator(m,v);var j=i.__iterator(ie,v),M=!0;return new Iterator((function(){if(!M)return iteratorDone();var i=j.next();if(i.done)return i;var v=i.value,$=v[0],W=v[1];return s.call(u,W,$,_)?m===ie?i:iteratorValue(m,$,W,i):(M=!1,iteratorDone())}))},m}function skipWhileFactory(i,s,u,m){var v=makeSequence(i);return v.__iterateUncached=function(v,_){var j=this;if(_)return this.cacheResult().__iterate(v,_);var M=!0,$=0;return i.__iterate((function(i,_,W){if(!M||!(M=s.call(u,i,_,W)))return $++,v(i,m?_:$-1,j)})),$},v.__iteratorUncached=function(v,_){var j=this;if(_)return this.cacheResult().__iterator(v,_);var M=i.__iterator(ie,_),$=!0,W=0;return new Iterator((function(){var i,_,X;do{if((i=M.next()).done)return m||v===ee?i:iteratorValue(v,W++,v===Z?void 0:i.value[1],i);var Y=i.value;_=Y[0],X=Y[1],$&&($=s.call(u,X,_,j))}while($);return v===ie?i:iteratorValue(v,_,X,i)}))},v}function concatFactory(i,s){var u=isKeyed(i),m=[i].concat(s).map((function(i){return isIterable(i)?u&&(i=KeyedIterable(i)):i=u?keyedSeqFromValue(i):indexedSeqFromValue(Array.isArray(i)?i:[i]),i})).filter((function(i){return 0!==i.size}));if(0===m.length)return i;if(1===m.length){var v=m[0];if(v===i||u&&isKeyed(v)||isIndexed(i)&&isIndexed(v))return v}var _=new ArraySeq(m);return u?_=_.toKeyedSeq():isIndexed(i)||(_=_.toSetSeq()),(_=_.flatten(!0)).size=m.reduce((function(i,s){if(void 0!==i){var u=s.size;if(void 0!==u)return i+u}}),0),_}function flattenFactory(i,s,u){var m=makeSequence(i);return m.__iterateUncached=function(m,v){var _=0,j=!1;function flatDeep(i,M){var $=this;i.__iterate((function(i,v){return(!s||M0}function zipWithFactory(i,s,u){var m=makeSequence(i);return m.size=new ArraySeq(u).map((function(i){return i.size})).min(),m.__iterate=function(i,s){for(var u,m=this.__iterator(ee,s),v=0;!(u=m.next()).done&&!1!==i(u.value,v++,this););return v},m.__iteratorUncached=function(i,m){var v=u.map((function(i){return i=Iterable(i),getIterator(m?i.reverse():i)})),_=0,j=!1;return new Iterator((function(){var u;return j||(u=v.map((function(i){return i.next()})),j=u.some((function(i){return i.done}))),j?iteratorDone():iteratorValue(i,_++,s.apply(null,u.map((function(i){return i.value}))))}))},m}function reify(i,s){return isSeq(i)?s:i.constructor(s)}function validateEntry(i){if(i!==Object(i))throw new TypeError("Expected [K, V] tuple: "+i)}function resolveSize(i){return assertNotInfinite(i.size),ensureSize(i)}function iterableClass(i){return isKeyed(i)?KeyedIterable:isIndexed(i)?IndexedIterable:SetIterable}function makeSequence(i){return Object.create((isKeyed(i)?KeyedSeq:isIndexed(i)?IndexedSeq:SetSeq).prototype)}function cacheResultThrough(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):Seq.prototype.cacheResult.call(this)}function defaultComparator(i,s){return i>s?1:i=0;u--)s={value:arguments[u],next:s};return this.__ownerID?(this.size=i,this._head=s,this.__hash=void 0,this.__altered=!0,this):makeStack(i,s)},Stack.prototype.pushAll=function(i){if(0===(i=IndexedIterable(i)).size)return this;assertNotInfinite(i.size);var s=this.size,u=this._head;return i.reverse().forEach((function(i){s++,u={value:i,next:u}})),this.__ownerID?(this.size=s,this._head=u,this.__hash=void 0,this.__altered=!0,this):makeStack(s,u)},Stack.prototype.pop=function(){return this.slice(1)},Stack.prototype.unshift=function(){return this.push.apply(this,arguments)},Stack.prototype.unshiftAll=function(i){return this.pushAll(i)},Stack.prototype.shift=function(){return this.pop.apply(this,arguments)},Stack.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):emptyStack()},Stack.prototype.slice=function(i,s){if(wholeSlice(i,s,this.size))return this;var u=resolveBegin(i,this.size);if(resolveEnd(s,this.size)!==this.size)return IndexedCollection.prototype.slice.call(this,i,s);for(var m=this.size-u,v=this._head;u--;)v=v.next;return this.__ownerID?(this.size=m,this._head=v,this.__hash=void 0,this.__altered=!0,this):makeStack(m,v)},Stack.prototype.__ensureOwner=function(i){return i===this.__ownerID?this:i?makeStack(this.size,this._head,i,this.__hash):(this.__ownerID=i,this.__altered=!1,this)},Stack.prototype.__iterate=function(i,s){if(s)return this.reverse().__iterate(i);for(var u=0,m=this._head;m&&!1!==i(m.value,u++,this);)m=m.next;return u},Stack.prototype.__iterator=function(i,s){if(s)return this.reverse().__iterator(i);var u=0,m=this._head;return new Iterator((function(){if(m){var s=m.value;return m=m.next,iteratorValue(i,u++,s)}return iteratorDone()}))},Stack.isStack=isStack;var pt,ht="@@__IMMUTABLE_STACK__@@",dt=Stack.prototype;function makeStack(i,s,u,m){var v=Object.create(dt);return v.size=i,v._head=s,v.__ownerID=u,v.__hash=m,v.__altered=!1,v}function emptyStack(){return pt||(pt=makeStack(0))}function mixin(i,s){var keyCopier=function(u){i.prototype[u]=s[u]};return Object.keys(s).forEach(keyCopier),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(s).forEach(keyCopier),i}dt[ht]=!0,dt.withMutations=He.withMutations,dt.asMutable=He.asMutable,dt.asImmutable=He.asImmutable,dt.wasAltered=He.wasAltered,Iterable.Iterator=Iterator,mixin(Iterable,{toArray:function(){assertNotInfinite(this.size);var i=new Array(this.size||0);return this.valueSeq().__iterate((function(s,u){i[u]=s})),i},toIndexedSeq:function(){return new ToIndexedSequence(this)},toJS:function(){return this.toSeq().map((function(i){return i&&"function"==typeof i.toJS?i.toJS():i})).__toJS()},toJSON:function(){return this.toSeq().map((function(i){return i&&"function"==typeof i.toJSON?i.toJSON():i})).__toJS()},toKeyedSeq:function(){return new ToKeyedSequence(this,!0)},toMap:function(){return Map(this.toKeyedSeq())},toObject:function(){assertNotInfinite(this.size);var i={};return this.__iterate((function(s,u){i[u]=s})),i},toOrderedMap:function(){return OrderedMap(this.toKeyedSeq())},toOrderedSet:function(){return OrderedSet(isKeyed(this)?this.valueSeq():this)},toSet:function(){return Set(isKeyed(this)?this.valueSeq():this)},toSetSeq:function(){return new ToSetSequence(this)},toSeq:function(){return isIndexed(this)?this.toIndexedSeq():isKeyed(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Stack(isKeyed(this)?this.valueSeq():this)},toList:function(){return List(isKeyed(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(i,s){return 0===this.size?i+s:i+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+s},concat:function(){return reify(this,concatFactory(this,i.call(arguments,0)))},includes:function(i){return this.some((function(s){return is(s,i)}))},entries:function(){return this.__iterator(ie)},every:function(i,s){assertNotInfinite(this.size);var u=!0;return this.__iterate((function(m,v,_){if(!i.call(s,m,v,_))return u=!1,!1})),u},filter:function(i,s){return reify(this,filterFactory(this,i,s,!0))},find:function(i,s,u){var m=this.findEntry(i,s);return m?m[1]:u},forEach:function(i,s){return assertNotInfinite(this.size),this.__iterate(s?i.bind(s):i)},join:function(i){assertNotInfinite(this.size),i=void 0!==i?""+i:",";var s="",u=!0;return this.__iterate((function(m){u?u=!1:s+=i,s+=null!=m?m.toString():""})),s},keys:function(){return this.__iterator(Z)},map:function(i,s){return reify(this,mapFactory(this,i,s))},reduce:function(i,s,u){var m,v;return assertNotInfinite(this.size),arguments.length<2?v=!0:m=s,this.__iterate((function(s,_,j){v?(v=!1,m=s):m=i.call(u,m,s,_,j)})),m},reduceRight:function(i,s,u){var m=this.toKeyedSeq().reverse();return m.reduce.apply(m,arguments)},reverse:function(){return reify(this,reverseFactory(this,!0))},slice:function(i,s){return reify(this,sliceFactory(this,i,s,!0))},some:function(i,s){return!this.every(not(i),s)},sort:function(i){return reify(this,sortFactory(this,i))},values:function(){return this.__iterator(ee)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(i,s){return ensureSize(i?this.toSeq().filter(i,s):this)},countBy:function(i,s){return countByFactory(this,i,s)},equals:function(i){return deepEqual(this,i)},entrySeq:function(){var i=this;if(i._cache)return new ArraySeq(i._cache);var s=i.toSeq().map(entryMapper).toIndexedSeq();return s.fromEntrySeq=function(){return i.toSeq()},s},filterNot:function(i,s){return this.filter(not(i),s)},findEntry:function(i,s,u){var m=u;return this.__iterate((function(u,v,_){if(i.call(s,u,v,_))return m=[v,u],!1})),m},findKey:function(i,s){var u=this.findEntry(i,s);return u&&u[0]},findLast:function(i,s,u){return this.toKeyedSeq().reverse().find(i,s,u)},findLastEntry:function(i,s,u){return this.toKeyedSeq().reverse().findEntry(i,s,u)},findLastKey:function(i,s){return this.toKeyedSeq().reverse().findKey(i,s)},first:function(){return this.find(returnTrue)},flatMap:function(i,s){return reify(this,flatMapFactory(this,i,s))},flatten:function(i){return reify(this,flattenFactory(this,i,!0))},fromEntrySeq:function(){return new FromEntriesSequence(this)},get:function(i,s){return this.find((function(s,u){return is(u,i)}),void 0,s)},getIn:function(i,s){for(var u,m=this,v=forceIterator(i);!(u=v.next()).done;){var _=u.value;if((m=m&&m.get?m.get(_,W):W)===W)return s}return m},groupBy:function(i,s){return groupByFactory(this,i,s)},has:function(i){return this.get(i,W)!==W},hasIn:function(i){return this.getIn(i,W)!==W},isSubset:function(i){return i="function"==typeof i.includes?i:Iterable(i),this.every((function(s){return i.includes(s)}))},isSuperset:function(i){return(i="function"==typeof i.isSubset?i:Iterable(i)).isSubset(this)},keyOf:function(i){return this.findKey((function(s){return is(s,i)}))},keySeq:function(){return this.toSeq().map(keyMapper).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(i){return this.toKeyedSeq().reverse().keyOf(i)},max:function(i){return maxFactory(this,i)},maxBy:function(i,s){return maxFactory(this,s,i)},min:function(i){return maxFactory(this,i?neg(i):defaultNegComparator)},minBy:function(i,s){return maxFactory(this,s?neg(s):defaultNegComparator,i)},rest:function(){return this.slice(1)},skip:function(i){return this.slice(Math.max(0,i))},skipLast:function(i){return reify(this,this.toSeq().reverse().skip(i).reverse())},skipWhile:function(i,s){return reify(this,skipWhileFactory(this,i,s,!0))},skipUntil:function(i,s){return this.skipWhile(not(i),s)},sortBy:function(i,s){return reify(this,sortFactory(this,s,i))},take:function(i){return this.slice(0,Math.max(0,i))},takeLast:function(i){return reify(this,this.toSeq().reverse().take(i).reverse())},takeWhile:function(i,s){return reify(this,takeWhileFactory(this,i,s))},takeUntil:function(i,s){return this.takeWhile(not(i),s)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=hashIterable(this))}});var mt=Iterable.prototype;mt[s]=!0,mt[ce]=mt.values,mt.__toJS=mt.toArray,mt.__toStringMapper=quoteString,mt.inspect=mt.toSource=function(){return this.toString()},mt.chain=mt.flatMap,mt.contains=mt.includes,mixin(KeyedIterable,{flip:function(){return reify(this,flipFactory(this))},mapEntries:function(i,s){var u=this,m=0;return reify(this,this.toSeq().map((function(v,_){return i.call(s,[_,v],m++,u)})).fromEntrySeq())},mapKeys:function(i,s){var u=this;return reify(this,this.toSeq().flip().map((function(m,v){return i.call(s,m,v,u)})).flip())}});var gt=KeyedIterable.prototype;function keyMapper(i,s){return s}function entryMapper(i,s){return[s,i]}function not(i){return function(){return!i.apply(this,arguments)}}function neg(i){return function(){return-i.apply(this,arguments)}}function quoteString(i){return"string"==typeof i?JSON.stringify(i):String(i)}function defaultZipper(){return arrCopy(arguments)}function defaultNegComparator(i,s){return is?-1:0}function hashIterable(i){if(i.size===1/0)return 0;var s=isOrdered(i),u=isKeyed(i),m=s?1:0;return murmurHashOfSize(i.__iterate(u?s?function(i,s){m=31*m+hashMerge(hash(i),hash(s))|0}:function(i,s){m=m+hashMerge(hash(i),hash(s))|0}:s?function(i){m=31*m+hash(i)|0}:function(i){m=m+hash(i)|0}),m)}function murmurHashOfSize(i,s){return s=be(s,3432918353),s=be(s<<15|s>>>-15,461845907),s=be(s<<13|s>>>-13,5),s=be((s=(s+3864292196|0)^i)^s>>>16,2246822507),s=smi((s=be(s^s>>>13,3266489909))^s>>>16)}function hashMerge(i,s){return i^s+2654435769+(i<<6)+(i>>2)|0}return gt[u]=!0,gt[ce]=mt.entries,gt.__toJS=mt.toObject,gt.__toStringMapper=function(i,s){return JSON.stringify(s)+": "+quoteString(i)},mixin(IndexedIterable,{toKeyedSeq:function(){return new ToKeyedSequence(this,!1)},filter:function(i,s){return reify(this,filterFactory(this,i,s,!1))},findIndex:function(i,s){var u=this.findEntry(i,s);return u?u[0]:-1},indexOf:function(i){var s=this.keyOf(i);return void 0===s?-1:s},lastIndexOf:function(i){var s=this.lastKeyOf(i);return void 0===s?-1:s},reverse:function(){return reify(this,reverseFactory(this,!1))},slice:function(i,s){return reify(this,sliceFactory(this,i,s,!1))},splice:function(i,s){var u=arguments.length;if(s=Math.max(0|s,0),0===u||2===u&&!s)return this;i=resolveBegin(i,i<0?this.count():this.size);var m=this.slice(0,i);return reify(this,1===u?m:m.concat(arrCopy(arguments,2),this.slice(i+s)))},findLastIndex:function(i,s){var u=this.findLastEntry(i,s);return u?u[0]:-1},first:function(){return this.get(0)},flatten:function(i){return reify(this,flattenFactory(this,i,!1))},get:function(i,s){return(i=wrapIndex(this,i))<0||this.size===1/0||void 0!==this.size&&i>this.size?s:this.find((function(s,u){return u===i}),void 0,s)},has:function(i){return(i=wrapIndex(this,i))>=0&&(void 0!==this.size?this.size===1/0||i{"function"==typeof Object.create?i.exports=function inherits(i,s){s&&(i.super_=s,i.prototype=Object.create(s.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}))}:i.exports=function inherits(i,s){if(s){i.super_=s;var TempCtor=function(){};TempCtor.prototype=s.prototype,i.prototype=new TempCtor,i.prototype.constructor=i}}},35823:i=>{i.exports=function(i,s,u,m){var v=new Blob(void 0!==m?[m,i]:[i],{type:u||"application/octet-stream"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(v,s);else{var _=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(v):window.webkitURL.createObjectURL(v),j=document.createElement("a");j.style.display="none",j.href=_,j.setAttribute("download",s),void 0===j.download&&j.setAttribute("target","_blank"),document.body.appendChild(j),j.click(),setTimeout((function(){document.body.removeChild(j),window.URL.revokeObjectURL(_)}),200)}}},91296:(i,s,u)=>{var m=NaN,v="[object Symbol]",_=/^\s+|\s+$/g,j=/^[-+]0x[0-9a-f]+$/i,M=/^0b[01]+$/i,$=/^0o[0-7]+$/i,W=parseInt,X="object"==typeof u.g&&u.g&&u.g.Object===Object&&u.g,Y="object"==typeof self&&self&&self.Object===Object&&self,Z=X||Y||Function("return this")(),ee=Object.prototype.toString,ie=Math.max,ae=Math.min,now=function(){return Z.Date.now()};function isObject(i){var s=typeof i;return!!i&&("object"==s||"function"==s)}function toNumber(i){if("number"==typeof i)return i;if(function isSymbol(i){return"symbol"==typeof i||function isObjectLike(i){return!!i&&"object"==typeof i}(i)&&ee.call(i)==v}(i))return m;if(isObject(i)){var s="function"==typeof i.valueOf?i.valueOf():i;i=isObject(s)?s+"":s}if("string"!=typeof i)return 0===i?i:+i;i=i.replace(_,"");var u=M.test(i);return u||$.test(i)?W(i.slice(2),u?2:8):j.test(i)?m:+i}i.exports=function debounce(i,s,u){var m,v,_,j,M,$,W=0,X=!1,Y=!1,Z=!0;if("function"!=typeof i)throw new TypeError("Expected a function");function invokeFunc(s){var u=m,_=v;return m=v=void 0,W=s,j=i.apply(_,u)}function shouldInvoke(i){var u=i-$;return void 0===$||u>=s||u<0||Y&&i-W>=_}function timerExpired(){var i=now();if(shouldInvoke(i))return trailingEdge(i);M=setTimeout(timerExpired,function remainingWait(i){var u=s-(i-$);return Y?ae(u,_-(i-W)):u}(i))}function trailingEdge(i){return M=void 0,Z&&m?invokeFunc(i):(m=v=void 0,j)}function debounced(){var i=now(),u=shouldInvoke(i);if(m=arguments,v=this,$=i,u){if(void 0===M)return function leadingEdge(i){return W=i,M=setTimeout(timerExpired,s),X?invokeFunc(i):j}($);if(Y)return M=setTimeout(timerExpired,s),invokeFunc($)}return void 0===M&&(M=setTimeout(timerExpired,s)),j}return s=toNumber(s)||0,isObject(u)&&(X=!!u.leading,_=(Y="maxWait"in u)?ie(toNumber(u.maxWait)||0,s):_,Z="trailing"in u?!!u.trailing:Z),debounced.cancel=function cancel(){void 0!==M&&clearTimeout(M),W=0,m=$=v=M=void 0},debounced.flush=function flush(){return void 0===M?j:trailingEdge(now())},debounced}},18552:(i,s,u)=>{var m=u(10852)(u(55639),"DataView");i.exports=m},1989:(i,s,u)=>{var m=u(51789),v=u(80401),_=u(57667),j=u(21327),M=u(81866);function Hash(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(3118),v=u(9435);function LazyWrapper(i){this.__wrapped__=i,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}LazyWrapper.prototype=m(v.prototype),LazyWrapper.prototype.constructor=LazyWrapper,i.exports=LazyWrapper},38407:(i,s,u)=>{var m=u(27040),v=u(14125),_=u(82117),j=u(67518),M=u(54705);function ListCache(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(3118),v=u(9435);function LodashWrapper(i,s){this.__wrapped__=i,this.__actions__=[],this.__chain__=!!s,this.__index__=0,this.__values__=void 0}LodashWrapper.prototype=m(v.prototype),LodashWrapper.prototype.constructor=LodashWrapper,i.exports=LodashWrapper},57071:(i,s,u)=>{var m=u(10852)(u(55639),"Map");i.exports=m},83369:(i,s,u)=>{var m=u(24785),v=u(11285),_=u(96e3),j=u(49916),M=u(95265);function MapCache(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(10852)(u(55639),"Promise");i.exports=m},58525:(i,s,u)=>{var m=u(10852)(u(55639),"Set");i.exports=m},88668:(i,s,u)=>{var m=u(83369),v=u(90619),_=u(72385);function SetCache(i){var s=-1,u=null==i?0:i.length;for(this.__data__=new m;++s{var m=u(38407),v=u(37465),_=u(63779),j=u(67599),M=u(44758),$=u(34309);function Stack(i){var s=this.__data__=new m(i);this.size=s.size}Stack.prototype.clear=v,Stack.prototype.delete=_,Stack.prototype.get=j,Stack.prototype.has=M,Stack.prototype.set=$,i.exports=Stack},62705:(i,s,u)=>{var m=u(55639).Symbol;i.exports=m},11149:(i,s,u)=>{var m=u(55639).Uint8Array;i.exports=m},70577:(i,s,u)=>{var m=u(10852)(u(55639),"WeakMap");i.exports=m},96874:i=>{i.exports=function apply(i,s,u){switch(u.length){case 0:return i.call(s);case 1:return i.call(s,u[0]);case 2:return i.call(s,u[0],u[1]);case 3:return i.call(s,u[0],u[1],u[2])}return i.apply(s,u)}},77412:i=>{i.exports=function arrayEach(i,s){for(var u=-1,m=null==i?0:i.length;++u{i.exports=function arrayFilter(i,s){for(var u=-1,m=null==i?0:i.length,v=0,_=[];++u{var m=u(42118);i.exports=function arrayIncludes(i,s){return!!(null==i?0:i.length)&&m(i,s,0)>-1}},14636:(i,s,u)=>{var m=u(22545),v=u(35694),_=u(1469),j=u(44144),M=u(65776),$=u(36719),W=Object.prototype.hasOwnProperty;i.exports=function arrayLikeKeys(i,s){var u=_(i),X=!u&&v(i),Y=!u&&!X&&j(i),Z=!u&&!X&&!Y&&$(i),ee=u||X||Y||Z,ie=ee?m(i.length,String):[],ae=ie.length;for(var le in i)!s&&!W.call(i,le)||ee&&("length"==le||Y&&("offset"==le||"parent"==le)||Z&&("buffer"==le||"byteLength"==le||"byteOffset"==le)||M(le,ae))||ie.push(le);return ie}},29932:i=>{i.exports=function arrayMap(i,s){for(var u=-1,m=null==i?0:i.length,v=Array(m);++u{i.exports=function arrayPush(i,s){for(var u=-1,m=s.length,v=i.length;++u{i.exports=function arrayReduce(i,s,u,m){var v=-1,_=null==i?0:i.length;for(m&&_&&(u=i[++v]);++v<_;)u=s(u,i[v],v,i);return u}},82908:i=>{i.exports=function arraySome(i,s){for(var u=-1,m=null==i?0:i.length;++u{i.exports=function asciiToArray(i){return i.split("")}},49029:i=>{var s=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;i.exports=function asciiWords(i){return i.match(s)||[]}},86556:(i,s,u)=>{var m=u(89465),v=u(77813);i.exports=function assignMergeValue(i,s,u){(void 0!==u&&!v(i[s],u)||void 0===u&&!(s in i))&&m(i,s,u)}},34865:(i,s,u)=>{var m=u(89465),v=u(77813),_=Object.prototype.hasOwnProperty;i.exports=function assignValue(i,s,u){var j=i[s];_.call(i,s)&&v(j,u)&&(void 0!==u||s in i)||m(i,s,u)}},18470:(i,s,u)=>{var m=u(77813);i.exports=function assocIndexOf(i,s){for(var u=i.length;u--;)if(m(i[u][0],s))return u;return-1}},44037:(i,s,u)=>{var m=u(98363),v=u(3674);i.exports=function baseAssign(i,s){return i&&m(s,v(s),i)}},63886:(i,s,u)=>{var m=u(98363),v=u(81704);i.exports=function baseAssignIn(i,s){return i&&m(s,v(s),i)}},89465:(i,s,u)=>{var m=u(38777);i.exports=function baseAssignValue(i,s,u){"__proto__"==s&&m?m(i,s,{configurable:!0,enumerable:!0,value:u,writable:!0}):i[s]=u}},85990:(i,s,u)=>{var m=u(46384),v=u(77412),_=u(34865),j=u(44037),M=u(63886),$=u(64626),W=u(278),X=u(18805),Y=u(1911),Z=u(58234),ee=u(46904),ie=u(64160),ae=u(43824),le=u(29148),ce=u(38517),pe=u(1469),de=u(44144),fe=u(56688),ye=u(13218),be=u(72928),_e=u(3674),we=u(81704),Se="[object Arguments]",xe="[object Function]",Ie="[object Object]",Pe={};Pe[Se]=Pe["[object Array]"]=Pe["[object ArrayBuffer]"]=Pe["[object DataView]"]=Pe["[object Boolean]"]=Pe["[object Date]"]=Pe["[object Float32Array]"]=Pe["[object Float64Array]"]=Pe["[object Int8Array]"]=Pe["[object Int16Array]"]=Pe["[object Int32Array]"]=Pe["[object Map]"]=Pe["[object Number]"]=Pe[Ie]=Pe["[object RegExp]"]=Pe["[object Set]"]=Pe["[object String]"]=Pe["[object Symbol]"]=Pe["[object Uint8Array]"]=Pe["[object Uint8ClampedArray]"]=Pe["[object Uint16Array]"]=Pe["[object Uint32Array]"]=!0,Pe["[object Error]"]=Pe[xe]=Pe["[object WeakMap]"]=!1,i.exports=function baseClone(i,s,u,Te,Re,qe){var ze,Ve=1&s,We=2&s,He=4&s;if(u&&(ze=Re?u(i,Te,Re,qe):u(i)),void 0!==ze)return ze;if(!ye(i))return i;var Xe=pe(i);if(Xe){if(ze=ae(i),!Ve)return W(i,ze)}else{var Ye=ie(i),Qe=Ye==xe||"[object GeneratorFunction]"==Ye;if(de(i))return $(i,Ve);if(Ye==Ie||Ye==Se||Qe&&!Re){if(ze=We||Qe?{}:ce(i),!Ve)return We?Y(i,M(ze,i)):X(i,j(ze,i))}else{if(!Pe[Ye])return Re?i:{};ze=le(i,Ye,Ve)}}qe||(qe=new m);var et=qe.get(i);if(et)return et;qe.set(i,ze),be(i)?i.forEach((function(m){ze.add(baseClone(m,s,u,m,i,qe))})):fe(i)&&i.forEach((function(m,v){ze.set(v,baseClone(m,s,u,v,i,qe))}));var tt=Xe?void 0:(He?We?ee:Z:We?we:_e)(i);return v(tt||i,(function(m,v){tt&&(m=i[v=m]),_(ze,v,baseClone(m,s,u,v,i,qe))})),ze}},3118:(i,s,u)=>{var m=u(13218),v=Object.create,_=function(){function object(){}return function(i){if(!m(i))return{};if(v)return v(i);object.prototype=i;var s=new object;return object.prototype=void 0,s}}();i.exports=_},89881:(i,s,u)=>{var m=u(47816),v=u(99291)(m);i.exports=v},41848:i=>{i.exports=function baseFindIndex(i,s,u,m){for(var v=i.length,_=u+(m?1:-1);m?_--:++_{var m=u(62488),v=u(37285);i.exports=function baseFlatten(i,s,u,_,j){var M=-1,$=i.length;for(u||(u=v),j||(j=[]);++M<$;){var W=i[M];s>0&&u(W)?s>1?baseFlatten(W,s-1,u,_,j):m(j,W):_||(j[j.length]=W)}return j}},28483:(i,s,u)=>{var m=u(25063)();i.exports=m},47816:(i,s,u)=>{var m=u(28483),v=u(3674);i.exports=function baseForOwn(i,s){return i&&m(i,s,v)}},97786:(i,s,u)=>{var m=u(71811),v=u(40327);i.exports=function baseGet(i,s){for(var u=0,_=(s=m(s,i)).length;null!=i&&u<_;)i=i[v(s[u++])];return u&&u==_?i:void 0}},68866:(i,s,u)=>{var m=u(62488),v=u(1469);i.exports=function baseGetAllKeys(i,s,u){var _=s(i);return v(i)?_:m(_,u(i))}},44239:(i,s,u)=>{var m=u(62705),v=u(89607),_=u(2333),j=m?m.toStringTag:void 0;i.exports=function baseGetTag(i){return null==i?void 0===i?"[object Undefined]":"[object Null]":j&&j in Object(i)?v(i):_(i)}},13:i=>{i.exports=function baseHasIn(i,s){return null!=i&&s in Object(i)}},42118:(i,s,u)=>{var m=u(41848),v=u(62722),_=u(42351);i.exports=function baseIndexOf(i,s,u){return s==s?_(i,s,u):m(i,v,u)}},9454:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function baseIsArguments(i){return v(i)&&"[object Arguments]"==m(i)}},90939:(i,s,u)=>{var m=u(2492),v=u(37005);i.exports=function baseIsEqual(i,s,u,_,j){return i===s||(null==i||null==s||!v(i)&&!v(s)?i!=i&&s!=s:m(i,s,u,_,baseIsEqual,j))}},2492:(i,s,u)=>{var m=u(46384),v=u(67114),_=u(18351),j=u(16096),M=u(64160),$=u(1469),W=u(44144),X=u(36719),Y="[object Arguments]",Z="[object Array]",ee="[object Object]",ie=Object.prototype.hasOwnProperty;i.exports=function baseIsEqualDeep(i,s,u,ae,le,ce){var pe=$(i),de=$(s),fe=pe?Z:M(i),ye=de?Z:M(s),be=(fe=fe==Y?ee:fe)==ee,_e=(ye=ye==Y?ee:ye)==ee,we=fe==ye;if(we&&W(i)){if(!W(s))return!1;pe=!0,be=!1}if(we&&!be)return ce||(ce=new m),pe||X(i)?v(i,s,u,ae,le,ce):_(i,s,fe,u,ae,le,ce);if(!(1&u)){var Se=be&&ie.call(i,"__wrapped__"),xe=_e&&ie.call(s,"__wrapped__");if(Se||xe){var Ie=Se?i.value():i,Pe=xe?s.value():s;return ce||(ce=new m),le(Ie,Pe,u,ae,ce)}}return!!we&&(ce||(ce=new m),j(i,s,u,ae,le,ce))}},25588:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function baseIsMap(i){return v(i)&&"[object Map]"==m(i)}},2958:(i,s,u)=>{var m=u(46384),v=u(90939);i.exports=function baseIsMatch(i,s,u,_){var j=u.length,M=j,$=!_;if(null==i)return!M;for(i=Object(i);j--;){var W=u[j];if($&&W[2]?W[1]!==i[W[0]]:!(W[0]in i))return!1}for(;++j{i.exports=function baseIsNaN(i){return i!=i}},28458:(i,s,u)=>{var m=u(23560),v=u(15346),_=u(13218),j=u(80346),M=/^\[object .+?Constructor\]$/,$=Function.prototype,W=Object.prototype,X=$.toString,Y=W.hasOwnProperty,Z=RegExp("^"+X.call(Y).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");i.exports=function baseIsNative(i){return!(!_(i)||v(i))&&(m(i)?Z:M).test(j(i))}},29221:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function baseIsSet(i){return v(i)&&"[object Set]"==m(i)}},38749:(i,s,u)=>{var m=u(44239),v=u(41780),_=u(37005),j={};j["[object Float32Array]"]=j["[object Float64Array]"]=j["[object Int8Array]"]=j["[object Int16Array]"]=j["[object Int32Array]"]=j["[object Uint8Array]"]=j["[object Uint8ClampedArray]"]=j["[object Uint16Array]"]=j["[object Uint32Array]"]=!0,j["[object Arguments]"]=j["[object Array]"]=j["[object ArrayBuffer]"]=j["[object Boolean]"]=j["[object DataView]"]=j["[object Date]"]=j["[object Error]"]=j["[object Function]"]=j["[object Map]"]=j["[object Number]"]=j["[object Object]"]=j["[object RegExp]"]=j["[object Set]"]=j["[object String]"]=j["[object WeakMap]"]=!1,i.exports=function baseIsTypedArray(i){return _(i)&&v(i.length)&&!!j[m(i)]}},67206:(i,s,u)=>{var m=u(91573),v=u(16432),_=u(6557),j=u(1469),M=u(39601);i.exports=function baseIteratee(i){return"function"==typeof i?i:null==i?_:"object"==typeof i?j(i)?v(i[0],i[1]):m(i):M(i)}},280:(i,s,u)=>{var m=u(25726),v=u(86916),_=Object.prototype.hasOwnProperty;i.exports=function baseKeys(i){if(!m(i))return v(i);var s=[];for(var u in Object(i))_.call(i,u)&&"constructor"!=u&&s.push(u);return s}},10313:(i,s,u)=>{var m=u(13218),v=u(25726),_=u(33498),j=Object.prototype.hasOwnProperty;i.exports=function baseKeysIn(i){if(!m(i))return _(i);var s=v(i),u=[];for(var M in i)("constructor"!=M||!s&&j.call(i,M))&&u.push(M);return u}},9435:i=>{i.exports=function baseLodash(){}},91573:(i,s,u)=>{var m=u(2958),v=u(1499),_=u(42634);i.exports=function baseMatches(i){var s=v(i);return 1==s.length&&s[0][2]?_(s[0][0],s[0][1]):function(u){return u===i||m(u,i,s)}}},16432:(i,s,u)=>{var m=u(90939),v=u(27361),_=u(79095),j=u(15403),M=u(89162),$=u(42634),W=u(40327);i.exports=function baseMatchesProperty(i,s){return j(i)&&M(s)?$(W(i),s):function(u){var j=v(u,i);return void 0===j&&j===s?_(u,i):m(s,j,3)}}},42980:(i,s,u)=>{var m=u(46384),v=u(86556),_=u(28483),j=u(59783),M=u(13218),$=u(81704),W=u(36390);i.exports=function baseMerge(i,s,u,X,Y){i!==s&&_(s,(function(_,$){if(Y||(Y=new m),M(_))j(i,s,$,u,baseMerge,X,Y);else{var Z=X?X(W(i,$),_,$+"",i,s,Y):void 0;void 0===Z&&(Z=_),v(i,$,Z)}}),$)}},59783:(i,s,u)=>{var m=u(86556),v=u(64626),_=u(77133),j=u(278),M=u(38517),$=u(35694),W=u(1469),X=u(29246),Y=u(44144),Z=u(23560),ee=u(13218),ie=u(68630),ae=u(36719),le=u(36390),ce=u(59881);i.exports=function baseMergeDeep(i,s,u,pe,de,fe,ye){var be=le(i,u),_e=le(s,u),we=ye.get(_e);if(we)m(i,u,we);else{var Se=fe?fe(be,_e,u+"",i,s,ye):void 0,xe=void 0===Se;if(xe){var Ie=W(_e),Pe=!Ie&&Y(_e),Te=!Ie&&!Pe&&ae(_e);Se=_e,Ie||Pe||Te?W(be)?Se=be:X(be)?Se=j(be):Pe?(xe=!1,Se=v(_e,!0)):Te?(xe=!1,Se=_(_e,!0)):Se=[]:ie(_e)||$(_e)?(Se=be,$(be)?Se=ce(be):ee(be)&&!Z(be)||(Se=M(_e))):xe=!1}xe&&(ye.set(_e,Se),de(Se,_e,pe,fe,ye),ye.delete(_e)),m(i,u,Se)}}},40371:i=>{i.exports=function baseProperty(i){return function(s){return null==s?void 0:s[i]}}},79152:(i,s,u)=>{var m=u(97786);i.exports=function basePropertyDeep(i){return function(s){return m(s,i)}}},18674:i=>{i.exports=function basePropertyOf(i){return function(s){return null==i?void 0:i[s]}}},10107:i=>{i.exports=function baseReduce(i,s,u,m,v){return v(i,(function(i,v,_){u=m?(m=!1,i):s(u,i,v,_)})),u}},5976:(i,s,u)=>{var m=u(6557),v=u(45357),_=u(30061);i.exports=function baseRest(i,s){return _(v(i,s,m),i+"")}},10611:(i,s,u)=>{var m=u(34865),v=u(71811),_=u(65776),j=u(13218),M=u(40327);i.exports=function baseSet(i,s,u,$){if(!j(i))return i;for(var W=-1,X=(s=v(s,i)).length,Y=X-1,Z=i;null!=Z&&++W{var m=u(6557),v=u(89250),_=v?function(i,s){return v.set(i,s),i}:m;i.exports=_},56560:(i,s,u)=>{var m=u(75703),v=u(38777),_=u(6557),j=v?function(i,s){return v(i,"toString",{configurable:!0,enumerable:!1,value:m(s),writable:!0})}:_;i.exports=j},14259:i=>{i.exports=function baseSlice(i,s,u){var m=-1,v=i.length;s<0&&(s=-s>v?0:v+s),(u=u>v?v:u)<0&&(u+=v),v=s>u?0:u-s>>>0,s>>>=0;for(var _=Array(v);++m{var m=u(89881);i.exports=function baseSome(i,s){var u;return m(i,(function(i,m,v){return!(u=s(i,m,v))})),!!u}},22545:i=>{i.exports=function baseTimes(i,s){for(var u=-1,m=Array(i);++u{var m=u(62705),v=u(29932),_=u(1469),j=u(33448),M=m?m.prototype:void 0,$=M?M.toString:void 0;i.exports=function baseToString(i){if("string"==typeof i)return i;if(_(i))return v(i,baseToString)+"";if(j(i))return $?$.call(i):"";var s=i+"";return"0"==s&&1/i==-Infinity?"-0":s}},27561:(i,s,u)=>{var m=u(67990),v=/^\s+/;i.exports=function baseTrim(i){return i?i.slice(0,m(i)+1).replace(v,""):i}},7518:i=>{i.exports=function baseUnary(i){return function(s){return i(s)}}},57406:(i,s,u)=>{var m=u(71811),v=u(10928),_=u(40292),j=u(40327);i.exports=function baseUnset(i,s){return s=m(s,i),null==(i=_(i,s))||delete i[j(v(s))]}},1757:i=>{i.exports=function baseZipObject(i,s,u){for(var m=-1,v=i.length,_=s.length,j={};++m{i.exports=function cacheHas(i,s){return i.has(s)}},71811:(i,s,u)=>{var m=u(1469),v=u(15403),_=u(55514),j=u(79833);i.exports=function castPath(i,s){return m(i)?i:v(i,s)?[i]:_(j(i))}},40180:(i,s,u)=>{var m=u(14259);i.exports=function castSlice(i,s,u){var v=i.length;return u=void 0===u?v:u,!s&&u>=v?i:m(i,s,u)}},74318:(i,s,u)=>{var m=u(11149);i.exports=function cloneArrayBuffer(i){var s=new i.constructor(i.byteLength);return new m(s).set(new m(i)),s}},64626:(i,s,u)=>{i=u.nmd(i);var m=u(55639),v=s&&!s.nodeType&&s,_=v&&i&&!i.nodeType&&i,j=_&&_.exports===v?m.Buffer:void 0,M=j?j.allocUnsafe:void 0;i.exports=function cloneBuffer(i,s){if(s)return i.slice();var u=i.length,m=M?M(u):new i.constructor(u);return i.copy(m),m}},57157:(i,s,u)=>{var m=u(74318);i.exports=function cloneDataView(i,s){var u=s?m(i.buffer):i.buffer;return new i.constructor(u,i.byteOffset,i.byteLength)}},93147:i=>{var s=/\w*$/;i.exports=function cloneRegExp(i){var u=new i.constructor(i.source,s.exec(i));return u.lastIndex=i.lastIndex,u}},40419:(i,s,u)=>{var m=u(62705),v=m?m.prototype:void 0,_=v?v.valueOf:void 0;i.exports=function cloneSymbol(i){return _?Object(_.call(i)):{}}},77133:(i,s,u)=>{var m=u(74318);i.exports=function cloneTypedArray(i,s){var u=s?m(i.buffer):i.buffer;return new i.constructor(u,i.byteOffset,i.length)}},52157:i=>{var s=Math.max;i.exports=function composeArgs(i,u,m,v){for(var _=-1,j=i.length,M=m.length,$=-1,W=u.length,X=s(j-M,0),Y=Array(W+X),Z=!v;++${var s=Math.max;i.exports=function composeArgsRight(i,u,m,v){for(var _=-1,j=i.length,M=-1,$=m.length,W=-1,X=u.length,Y=s(j-$,0),Z=Array(Y+X),ee=!v;++_{i.exports=function copyArray(i,s){var u=-1,m=i.length;for(s||(s=Array(m));++u{var m=u(34865),v=u(89465);i.exports=function copyObject(i,s,u,_){var j=!u;u||(u={});for(var M=-1,$=s.length;++M<$;){var W=s[M],X=_?_(u[W],i[W],W,u,i):void 0;void 0===X&&(X=i[W]),j?v(u,W,X):m(u,W,X)}return u}},18805:(i,s,u)=>{var m=u(98363),v=u(99551);i.exports=function copySymbols(i,s){return m(i,v(i),s)}},1911:(i,s,u)=>{var m=u(98363),v=u(51442);i.exports=function copySymbolsIn(i,s){return m(i,v(i),s)}},14429:(i,s,u)=>{var m=u(55639)["__core-js_shared__"];i.exports=m},97991:i=>{i.exports=function countHolders(i,s){for(var u=i.length,m=0;u--;)i[u]===s&&++m;return m}},21463:(i,s,u)=>{var m=u(5976),v=u(16612);i.exports=function createAssigner(i){return m((function(s,u){var m=-1,_=u.length,j=_>1?u[_-1]:void 0,M=_>2?u[2]:void 0;for(j=i.length>3&&"function"==typeof j?(_--,j):void 0,M&&v(u[0],u[1],M)&&(j=_<3?void 0:j,_=1),s=Object(s);++m<_;){var $=u[m];$&&i(s,$,m,j)}return s}))}},99291:(i,s,u)=>{var m=u(98612);i.exports=function createBaseEach(i,s){return function(u,v){if(null==u)return u;if(!m(u))return i(u,v);for(var _=u.length,j=s?_:-1,M=Object(u);(s?j--:++j<_)&&!1!==v(M[j],j,M););return u}}},25063:i=>{i.exports=function createBaseFor(i){return function(s,u,m){for(var v=-1,_=Object(s),j=m(s),M=j.length;M--;){var $=j[i?M:++v];if(!1===u(_[$],$,_))break}return s}}},22402:(i,s,u)=>{var m=u(71774),v=u(55639);i.exports=function createBind(i,s,u){var _=1&s,j=m(i);return function wrapper(){return(this&&this!==v&&this instanceof wrapper?j:i).apply(_?u:this,arguments)}}},98805:(i,s,u)=>{var m=u(40180),v=u(62689),_=u(83140),j=u(79833);i.exports=function createCaseFirst(i){return function(s){s=j(s);var u=v(s)?_(s):void 0,M=u?u[0]:s.charAt(0),$=u?m(u,1).join(""):s.slice(1);return M[i]()+$}}},35393:(i,s,u)=>{var m=u(62663),v=u(53816),_=u(58748),j=RegExp("['’]","g");i.exports=function createCompounder(i){return function(s){return m(_(v(s).replace(j,"")),i,"")}}},71774:(i,s,u)=>{var m=u(3118),v=u(13218);i.exports=function createCtor(i){return function(){var s=arguments;switch(s.length){case 0:return new i;case 1:return new i(s[0]);case 2:return new i(s[0],s[1]);case 3:return new i(s[0],s[1],s[2]);case 4:return new i(s[0],s[1],s[2],s[3]);case 5:return new i(s[0],s[1],s[2],s[3],s[4]);case 6:return new i(s[0],s[1],s[2],s[3],s[4],s[5]);case 7:return new i(s[0],s[1],s[2],s[3],s[4],s[5],s[6])}var u=m(i.prototype),_=i.apply(u,s);return v(_)?_:u}}},46347:(i,s,u)=>{var m=u(96874),v=u(71774),_=u(86935),j=u(94487),M=u(20893),$=u(46460),W=u(55639);i.exports=function createCurry(i,s,u){var X=v(i);return function wrapper(){for(var v=arguments.length,Y=Array(v),Z=v,ee=M(wrapper);Z--;)Y[Z]=arguments[Z];var ie=v<3&&Y[0]!==ee&&Y[v-1]!==ee?[]:$(Y,ee);return(v-=ie.length){var m=u(67206),v=u(98612),_=u(3674);i.exports=function createFind(i){return function(s,u,j){var M=Object(s);if(!v(s)){var $=m(u,3);s=_(s),u=function(i){return $(M[i],i,M)}}var W=i(s,u,j);return W>-1?M[$?s[W]:W]:void 0}}},86935:(i,s,u)=>{var m=u(52157),v=u(14054),_=u(97991),j=u(71774),M=u(94487),$=u(20893),W=u(90451),X=u(46460),Y=u(55639);i.exports=function createHybrid(i,s,u,Z,ee,ie,ae,le,ce,pe){var de=128&s,fe=1&s,ye=2&s,be=24&s,_e=512&s,we=ye?void 0:j(i);return function wrapper(){for(var Se=arguments.length,xe=Array(Se),Ie=Se;Ie--;)xe[Ie]=arguments[Ie];if(be)var Pe=$(wrapper),Te=_(xe,Pe);if(Z&&(xe=m(xe,Z,ee,be)),ie&&(xe=v(xe,ie,ae,be)),Se-=Te,be&&Se1&&xe.reverse(),de&&ce{var m=u(96874),v=u(71774),_=u(55639);i.exports=function createPartial(i,s,u,j){var M=1&s,$=v(i);return function wrapper(){for(var s=-1,v=arguments.length,W=-1,X=j.length,Y=Array(X+v),Z=this&&this!==_&&this instanceof wrapper?$:i;++W{var m=u(86528),v=u(258),_=u(69255);i.exports=function createRecurry(i,s,u,j,M,$,W,X,Y,Z){var ee=8&s;s|=ee?32:64,4&(s&=~(ee?64:32))||(s&=-4);var ie=[i,s,M,ee?$:void 0,ee?W:void 0,ee?void 0:$,ee?void 0:W,X,Y,Z],ae=u.apply(void 0,ie);return m(i)&&v(ae,ie),ae.placeholder=j,_(ae,i,s)}},97727:(i,s,u)=>{var m=u(28045),v=u(22402),_=u(46347),j=u(86935),M=u(84375),$=u(66833),W=u(63833),X=u(258),Y=u(69255),Z=u(40554),ee=Math.max;i.exports=function createWrap(i,s,u,ie,ae,le,ce,pe){var de=2&s;if(!de&&"function"!=typeof i)throw new TypeError("Expected a function");var fe=ie?ie.length:0;if(fe||(s&=-97,ie=ae=void 0),ce=void 0===ce?ce:ee(Z(ce),0),pe=void 0===pe?pe:Z(pe),fe-=ae?ae.length:0,64&s){var ye=ie,be=ae;ie=ae=void 0}var _e=de?void 0:$(i),we=[i,s,u,ie,ae,ye,be,le,ce,pe];if(_e&&W(we,_e),i=we[0],s=we[1],u=we[2],ie=we[3],ae=we[4],!(pe=we[9]=void 0===we[9]?de?0:i.length:ee(we[9]-fe,0))&&24&s&&(s&=-25),s&&1!=s)Se=8==s||16==s?_(i,s,pe):32!=s&&33!=s||ae.length?j.apply(void 0,we):M(i,s,u,ie);else var Se=v(i,s,u);return Y((_e?m:X)(Se,we),i,s)}},60696:(i,s,u)=>{var m=u(68630);i.exports=function customOmitClone(i){return m(i)?void 0:i}},69389:(i,s,u)=>{var m=u(18674)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});i.exports=m},38777:(i,s,u)=>{var m=u(10852),v=function(){try{var i=m(Object,"defineProperty");return i({},"",{}),i}catch(i){}}();i.exports=v},67114:(i,s,u)=>{var m=u(88668),v=u(82908),_=u(74757);i.exports=function equalArrays(i,s,u,j,M,$){var W=1&u,X=i.length,Y=s.length;if(X!=Y&&!(W&&Y>X))return!1;var Z=$.get(i),ee=$.get(s);if(Z&&ee)return Z==s&&ee==i;var ie=-1,ae=!0,le=2&u?new m:void 0;for($.set(i,s),$.set(s,i);++ie{var m=u(62705),v=u(11149),_=u(77813),j=u(67114),M=u(68776),$=u(21814),W=m?m.prototype:void 0,X=W?W.valueOf:void 0;i.exports=function equalByTag(i,s,u,m,W,Y,Z){switch(u){case"[object DataView]":if(i.byteLength!=s.byteLength||i.byteOffset!=s.byteOffset)return!1;i=i.buffer,s=s.buffer;case"[object ArrayBuffer]":return!(i.byteLength!=s.byteLength||!Y(new v(i),new v(s)));case"[object Boolean]":case"[object Date]":case"[object Number]":return _(+i,+s);case"[object Error]":return i.name==s.name&&i.message==s.message;case"[object RegExp]":case"[object String]":return i==s+"";case"[object Map]":var ee=M;case"[object Set]":var ie=1&m;if(ee||(ee=$),i.size!=s.size&&!ie)return!1;var ae=Z.get(i);if(ae)return ae==s;m|=2,Z.set(i,s);var le=j(ee(i),ee(s),m,W,Y,Z);return Z.delete(i),le;case"[object Symbol]":if(X)return X.call(i)==X.call(s)}return!1}},16096:(i,s,u)=>{var m=u(58234),v=Object.prototype.hasOwnProperty;i.exports=function equalObjects(i,s,u,_,j,M){var $=1&u,W=m(i),X=W.length;if(X!=m(s).length&&!$)return!1;for(var Y=X;Y--;){var Z=W[Y];if(!($?Z in s:v.call(s,Z)))return!1}var ee=M.get(i),ie=M.get(s);if(ee&&ie)return ee==s&&ie==i;var ae=!0;M.set(i,s),M.set(s,i);for(var le=$;++Y{var m=u(85564),v=u(45357),_=u(30061);i.exports=function flatRest(i){return _(v(i,void 0,m),i+"")}},31957:(i,s,u)=>{var m="object"==typeof u.g&&u.g&&u.g.Object===Object&&u.g;i.exports=m},58234:(i,s,u)=>{var m=u(68866),v=u(99551),_=u(3674);i.exports=function getAllKeys(i){return m(i,_,v)}},46904:(i,s,u)=>{var m=u(68866),v=u(51442),_=u(81704);i.exports=function getAllKeysIn(i){return m(i,_,v)}},66833:(i,s,u)=>{var m=u(89250),v=u(50308),_=m?function(i){return m.get(i)}:v;i.exports=_},97658:(i,s,u)=>{var m=u(52060),v=Object.prototype.hasOwnProperty;i.exports=function getFuncName(i){for(var s=i.name+"",u=m[s],_=v.call(m,s)?u.length:0;_--;){var j=u[_],M=j.func;if(null==M||M==i)return j.name}return s}},20893:i=>{i.exports=function getHolder(i){return i.placeholder}},45050:(i,s,u)=>{var m=u(37019);i.exports=function getMapData(i,s){var u=i.__data__;return m(s)?u["string"==typeof s?"string":"hash"]:u.map}},1499:(i,s,u)=>{var m=u(89162),v=u(3674);i.exports=function getMatchData(i){for(var s=v(i),u=s.length;u--;){var _=s[u],j=i[_];s[u]=[_,j,m(j)]}return s}},10852:(i,s,u)=>{var m=u(28458),v=u(47801);i.exports=function getNative(i,s){var u=v(i,s);return m(u)?u:void 0}},85924:(i,s,u)=>{var m=u(5569)(Object.getPrototypeOf,Object);i.exports=m},89607:(i,s,u)=>{var m=u(62705),v=Object.prototype,_=v.hasOwnProperty,j=v.toString,M=m?m.toStringTag:void 0;i.exports=function getRawTag(i){var s=_.call(i,M),u=i[M];try{i[M]=void 0;var m=!0}catch(i){}var v=j.call(i);return m&&(s?i[M]=u:delete i[M]),v}},99551:(i,s,u)=>{var m=u(34963),v=u(70479),_=Object.prototype.propertyIsEnumerable,j=Object.getOwnPropertySymbols,M=j?function(i){return null==i?[]:(i=Object(i),m(j(i),(function(s){return _.call(i,s)})))}:v;i.exports=M},51442:(i,s,u)=>{var m=u(62488),v=u(85924),_=u(99551),j=u(70479),M=Object.getOwnPropertySymbols?function(i){for(var s=[];i;)m(s,_(i)),i=v(i);return s}:j;i.exports=M},64160:(i,s,u)=>{var m=u(18552),v=u(57071),_=u(53818),j=u(58525),M=u(70577),$=u(44239),W=u(80346),X="[object Map]",Y="[object Promise]",Z="[object Set]",ee="[object WeakMap]",ie="[object DataView]",ae=W(m),le=W(v),ce=W(_),pe=W(j),de=W(M),fe=$;(m&&fe(new m(new ArrayBuffer(1)))!=ie||v&&fe(new v)!=X||_&&fe(_.resolve())!=Y||j&&fe(new j)!=Z||M&&fe(new M)!=ee)&&(fe=function(i){var s=$(i),u="[object Object]"==s?i.constructor:void 0,m=u?W(u):"";if(m)switch(m){case ae:return ie;case le:return X;case ce:return Y;case pe:return Z;case de:return ee}return s}),i.exports=fe},47801:i=>{i.exports=function getValue(i,s){return null==i?void 0:i[s]}},58775:i=>{var s=/\{\n\/\* \[wrapped with (.+)\] \*/,u=/,? & /;i.exports=function getWrapDetails(i){var m=i.match(s);return m?m[1].split(u):[]}},222:(i,s,u)=>{var m=u(71811),v=u(35694),_=u(1469),j=u(65776),M=u(41780),$=u(40327);i.exports=function hasPath(i,s,u){for(var W=-1,X=(s=m(s,i)).length,Y=!1;++W{var s=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");i.exports=function hasUnicode(i){return s.test(i)}},93157:i=>{var s=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;i.exports=function hasUnicodeWord(i){return s.test(i)}},51789:(i,s,u)=>{var m=u(94536);i.exports=function hashClear(){this.__data__=m?m(null):{},this.size=0}},80401:i=>{i.exports=function hashDelete(i){var s=this.has(i)&&delete this.__data__[i];return this.size-=s?1:0,s}},57667:(i,s,u)=>{var m=u(94536),v=Object.prototype.hasOwnProperty;i.exports=function hashGet(i){var s=this.__data__;if(m){var u=s[i];return"__lodash_hash_undefined__"===u?void 0:u}return v.call(s,i)?s[i]:void 0}},21327:(i,s,u)=>{var m=u(94536),v=Object.prototype.hasOwnProperty;i.exports=function hashHas(i){var s=this.__data__;return m?void 0!==s[i]:v.call(s,i)}},81866:(i,s,u)=>{var m=u(94536);i.exports=function hashSet(i,s){var u=this.__data__;return this.size+=this.has(i)?0:1,u[i]=m&&void 0===s?"__lodash_hash_undefined__":s,this}},43824:i=>{var s=Object.prototype.hasOwnProperty;i.exports=function initCloneArray(i){var u=i.length,m=new i.constructor(u);return u&&"string"==typeof i[0]&&s.call(i,"index")&&(m.index=i.index,m.input=i.input),m}},29148:(i,s,u)=>{var m=u(74318),v=u(57157),_=u(93147),j=u(40419),M=u(77133);i.exports=function initCloneByTag(i,s,u){var $=i.constructor;switch(s){case"[object ArrayBuffer]":return m(i);case"[object Boolean]":case"[object Date]":return new $(+i);case"[object DataView]":return v(i,u);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return M(i,u);case"[object Map]":case"[object Set]":return new $;case"[object Number]":case"[object String]":return new $(i);case"[object RegExp]":return _(i);case"[object Symbol]":return j(i)}}},38517:(i,s,u)=>{var m=u(3118),v=u(85924),_=u(25726);i.exports=function initCloneObject(i){return"function"!=typeof i.constructor||_(i)?{}:m(v(i))}},83112:i=>{var s=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;i.exports=function insertWrapDetails(i,u){var m=u.length;if(!m)return i;var v=m-1;return u[v]=(m>1?"& ":"")+u[v],u=u.join(m>2?", ":" "),i.replace(s,"{\n/* [wrapped with "+u+"] */\n")}},37285:(i,s,u)=>{var m=u(62705),v=u(35694),_=u(1469),j=m?m.isConcatSpreadable:void 0;i.exports=function isFlattenable(i){return _(i)||v(i)||!!(j&&i&&i[j])}},65776:i=>{var s=/^(?:0|[1-9]\d*)$/;i.exports=function isIndex(i,u){var m=typeof i;return!!(u=null==u?9007199254740991:u)&&("number"==m||"symbol"!=m&&s.test(i))&&i>-1&&i%1==0&&i{var m=u(77813),v=u(98612),_=u(65776),j=u(13218);i.exports=function isIterateeCall(i,s,u){if(!j(u))return!1;var M=typeof s;return!!("number"==M?v(u)&&_(s,u.length):"string"==M&&s in u)&&m(u[s],i)}},15403:(i,s,u)=>{var m=u(1469),v=u(33448),_=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,j=/^\w*$/;i.exports=function isKey(i,s){if(m(i))return!1;var u=typeof i;return!("number"!=u&&"symbol"!=u&&"boolean"!=u&&null!=i&&!v(i))||(j.test(i)||!_.test(i)||null!=s&&i in Object(s))}},37019:i=>{i.exports=function isKeyable(i){var s=typeof i;return"string"==s||"number"==s||"symbol"==s||"boolean"==s?"__proto__"!==i:null===i}},86528:(i,s,u)=>{var m=u(96425),v=u(66833),_=u(97658),j=u(8111);i.exports=function isLaziable(i){var s=_(i),u=j[s];if("function"!=typeof u||!(s in m.prototype))return!1;if(i===u)return!0;var M=v(u);return!!M&&i===M[0]}},15346:(i,s,u)=>{var m,v=u(14429),_=(m=/[^.]+$/.exec(v&&v.keys&&v.keys.IE_PROTO||""))?"Symbol(src)_1."+m:"";i.exports=function isMasked(i){return!!_&&_ in i}},25726:i=>{var s=Object.prototype;i.exports=function isPrototype(i){var u=i&&i.constructor;return i===("function"==typeof u&&u.prototype||s)}},89162:(i,s,u)=>{var m=u(13218);i.exports=function isStrictComparable(i){return i==i&&!m(i)}},27040:i=>{i.exports=function listCacheClear(){this.__data__=[],this.size=0}},14125:(i,s,u)=>{var m=u(18470),v=Array.prototype.splice;i.exports=function listCacheDelete(i){var s=this.__data__,u=m(s,i);return!(u<0)&&(u==s.length-1?s.pop():v.call(s,u,1),--this.size,!0)}},82117:(i,s,u)=>{var m=u(18470);i.exports=function listCacheGet(i){var s=this.__data__,u=m(s,i);return u<0?void 0:s[u][1]}},67518:(i,s,u)=>{var m=u(18470);i.exports=function listCacheHas(i){return m(this.__data__,i)>-1}},54705:(i,s,u)=>{var m=u(18470);i.exports=function listCacheSet(i,s){var u=this.__data__,v=m(u,i);return v<0?(++this.size,u.push([i,s])):u[v][1]=s,this}},24785:(i,s,u)=>{var m=u(1989),v=u(38407),_=u(57071);i.exports=function mapCacheClear(){this.size=0,this.__data__={hash:new m,map:new(_||v),string:new m}}},11285:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheDelete(i){var s=m(this,i).delete(i);return this.size-=s?1:0,s}},96e3:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheGet(i){return m(this,i).get(i)}},49916:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheHas(i){return m(this,i).has(i)}},95265:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheSet(i,s){var u=m(this,i),v=u.size;return u.set(i,s),this.size+=u.size==v?0:1,this}},68776:i=>{i.exports=function mapToArray(i){var s=-1,u=Array(i.size);return i.forEach((function(i,m){u[++s]=[m,i]})),u}},42634:i=>{i.exports=function matchesStrictComparable(i,s){return function(u){return null!=u&&(u[i]===s&&(void 0!==s||i in Object(u)))}}},24523:(i,s,u)=>{var m=u(88306);i.exports=function memoizeCapped(i){var s=m(i,(function(i){return 500===u.size&&u.clear(),i})),u=s.cache;return s}},63833:(i,s,u)=>{var m=u(52157),v=u(14054),_=u(46460),j="__lodash_placeholder__",M=128,$=Math.min;i.exports=function mergeData(i,s){var u=i[1],W=s[1],X=u|W,Y=X<131,Z=W==M&&8==u||W==M&&256==u&&i[7].length<=s[8]||384==W&&s[7].length<=s[8]&&8==u;if(!Y&&!Z)return i;1&W&&(i[2]=s[2],X|=1&u?0:4);var ee=s[3];if(ee){var ie=i[3];i[3]=ie?m(ie,ee,s[4]):ee,i[4]=ie?_(i[3],j):s[4]}return(ee=s[5])&&(ie=i[5],i[5]=ie?v(ie,ee,s[6]):ee,i[6]=ie?_(i[5],j):s[6]),(ee=s[7])&&(i[7]=ee),W&M&&(i[8]=null==i[8]?s[8]:$(i[8],s[8])),null==i[9]&&(i[9]=s[9]),i[0]=s[0],i[1]=X,i}},89250:(i,s,u)=>{var m=u(70577),v=m&&new m;i.exports=v},94536:(i,s,u)=>{var m=u(10852)(Object,"create");i.exports=m},86916:(i,s,u)=>{var m=u(5569)(Object.keys,Object);i.exports=m},33498:i=>{i.exports=function nativeKeysIn(i){var s=[];if(null!=i)for(var u in Object(i))s.push(u);return s}},31167:(i,s,u)=>{i=u.nmd(i);var m=u(31957),v=s&&!s.nodeType&&s,_=v&&i&&!i.nodeType&&i,j=_&&_.exports===v&&m.process,M=function(){try{var i=_&&_.require&&_.require("util").types;return i||j&&j.binding&&j.binding("util")}catch(i){}}();i.exports=M},2333:i=>{var s=Object.prototype.toString;i.exports=function objectToString(i){return s.call(i)}},5569:i=>{i.exports=function overArg(i,s){return function(u){return i(s(u))}}},45357:(i,s,u)=>{var m=u(96874),v=Math.max;i.exports=function overRest(i,s,u){return s=v(void 0===s?i.length-1:s,0),function(){for(var _=arguments,j=-1,M=v(_.length-s,0),$=Array(M);++j{var m=u(97786),v=u(14259);i.exports=function parent(i,s){return s.length<2?i:m(i,v(s,0,-1))}},52060:i=>{i.exports={}},90451:(i,s,u)=>{var m=u(278),v=u(65776),_=Math.min;i.exports=function reorder(i,s){for(var u=i.length,j=_(s.length,u),M=m(i);j--;){var $=s[j];i[j]=v($,u)?M[$]:void 0}return i}},46460:i=>{var s="__lodash_placeholder__";i.exports=function replaceHolders(i,u){for(var m=-1,v=i.length,_=0,j=[];++m{var m=u(31957),v="object"==typeof self&&self&&self.Object===Object&&self,_=m||v||Function("return this")();i.exports=_},36390:i=>{i.exports=function safeGet(i,s){if(("constructor"!==s||"function"!=typeof i[s])&&"__proto__"!=s)return i[s]}},90619:i=>{i.exports=function setCacheAdd(i){return this.__data__.set(i,"__lodash_hash_undefined__"),this}},72385:i=>{i.exports=function setCacheHas(i){return this.__data__.has(i)}},258:(i,s,u)=>{var m=u(28045),v=u(21275)(m);i.exports=v},21814:i=>{i.exports=function setToArray(i){var s=-1,u=Array(i.size);return i.forEach((function(i){u[++s]=i})),u}},30061:(i,s,u)=>{var m=u(56560),v=u(21275)(m);i.exports=v},69255:(i,s,u)=>{var m=u(58775),v=u(83112),_=u(30061),j=u(87241);i.exports=function setWrapToString(i,s,u){var M=s+"";return _(i,v(M,j(m(M),u)))}},21275:i=>{var s=Date.now;i.exports=function shortOut(i){var u=0,m=0;return function(){var v=s(),_=16-(v-m);if(m=v,_>0){if(++u>=800)return arguments[0]}else u=0;return i.apply(void 0,arguments)}}},37465:(i,s,u)=>{var m=u(38407);i.exports=function stackClear(){this.__data__=new m,this.size=0}},63779:i=>{i.exports=function stackDelete(i){var s=this.__data__,u=s.delete(i);return this.size=s.size,u}},67599:i=>{i.exports=function stackGet(i){return this.__data__.get(i)}},44758:i=>{i.exports=function stackHas(i){return this.__data__.has(i)}},34309:(i,s,u)=>{var m=u(38407),v=u(57071),_=u(83369);i.exports=function stackSet(i,s){var u=this.__data__;if(u instanceof m){var j=u.__data__;if(!v||j.length<199)return j.push([i,s]),this.size=++u.size,this;u=this.__data__=new _(j)}return u.set(i,s),this.size=u.size,this}},42351:i=>{i.exports=function strictIndexOf(i,s,u){for(var m=u-1,v=i.length;++m{var m=u(44286),v=u(62689),_=u(676);i.exports=function stringToArray(i){return v(i)?_(i):m(i)}},55514:(i,s,u)=>{var m=u(24523),v=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,_=/\\(\\)?/g,j=m((function(i){var s=[];return 46===i.charCodeAt(0)&&s.push(""),i.replace(v,(function(i,u,m,v){s.push(m?v.replace(_,"$1"):u||i)})),s}));i.exports=j},40327:(i,s,u)=>{var m=u(33448);i.exports=function toKey(i){if("string"==typeof i||m(i))return i;var s=i+"";return"0"==s&&1/i==-Infinity?"-0":s}},80346:i=>{var s=Function.prototype.toString;i.exports=function toSource(i){if(null!=i){try{return s.call(i)}catch(i){}try{return i+""}catch(i){}}return""}},67990:i=>{var s=/\s/;i.exports=function trimmedEndIndex(i){for(var u=i.length;u--&&s.test(i.charAt(u)););return u}},676:i=>{var s="\\ud800-\\udfff",u="["+s+"]",m="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",v="\\ud83c[\\udffb-\\udfff]",_="[^"+s+"]",j="(?:\\ud83c[\\udde6-\\uddff]){2}",M="[\\ud800-\\udbff][\\udc00-\\udfff]",$="(?:"+m+"|"+v+")"+"?",W="[\\ufe0e\\ufe0f]?",X=W+$+("(?:\\u200d(?:"+[_,j,M].join("|")+")"+W+$+")*"),Y="(?:"+[_+m+"?",m,j,M,u].join("|")+")",Z=RegExp(v+"(?="+v+")|"+Y+X,"g");i.exports=function unicodeToArray(i){return i.match(Z)||[]}},2757:i=>{var s="\\ud800-\\udfff",u="\\u2700-\\u27bf",m="a-z\\xdf-\\xf6\\xf8-\\xff",v="A-Z\\xc0-\\xd6\\xd8-\\xde",_="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",j="["+_+"]",M="\\d+",$="["+u+"]",W="["+m+"]",X="[^"+s+_+M+u+m+v+"]",Y="(?:\\ud83c[\\udde6-\\uddff]){2}",Z="[\\ud800-\\udbff][\\udc00-\\udfff]",ee="["+v+"]",ie="(?:"+W+"|"+X+")",ae="(?:"+ee+"|"+X+")",le="(?:['’](?:d|ll|m|re|s|t|ve))?",ce="(?:['’](?:D|LL|M|RE|S|T|VE))?",pe="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",de="[\\ufe0e\\ufe0f]?",fe=de+pe+("(?:\\u200d(?:"+["[^"+s+"]",Y,Z].join("|")+")"+de+pe+")*"),ye="(?:"+[$,Y,Z].join("|")+")"+fe,be=RegExp([ee+"?"+W+"+"+le+"(?="+[j,ee,"$"].join("|")+")",ae+"+"+ce+"(?="+[j,ee+ie,"$"].join("|")+")",ee+"?"+ie+"+"+le,ee+"+"+ce,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",M,ye].join("|"),"g");i.exports=function unicodeWords(i){return i.match(be)||[]}},87241:(i,s,u)=>{var m=u(77412),v=u(47443),_=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];i.exports=function updateWrapDetails(i,s){return m(_,(function(u){var m="_."+u[0];s&u[1]&&!v(i,m)&&i.push(m)})),i.sort()}},21913:(i,s,u)=>{var m=u(96425),v=u(7548),_=u(278);i.exports=function wrapperClone(i){if(i instanceof m)return i.clone();var s=new v(i.__wrapped__,i.__chain__);return s.__actions__=_(i.__actions__),s.__index__=i.__index__,s.__values__=i.__values__,s}},39514:(i,s,u)=>{var m=u(97727);i.exports=function ary(i,s,u){return s=u?void 0:s,s=i&&null==s?i.length:s,m(i,128,void 0,void 0,void 0,void 0,s)}},68929:(i,s,u)=>{var m=u(48403),v=u(35393)((function(i,s,u){return s=s.toLowerCase(),i+(u?m(s):s)}));i.exports=v},48403:(i,s,u)=>{var m=u(79833),v=u(11700);i.exports=function capitalize(i){return v(m(i).toLowerCase())}},66678:(i,s,u)=>{var m=u(85990);i.exports=function clone(i){return m(i,4)}},75703:i=>{i.exports=function constant(i){return function(){return i}}},40087:(i,s,u)=>{var m=u(97727);function curry(i,s,u){var v=m(i,8,void 0,void 0,void 0,void 0,void 0,s=u?void 0:s);return v.placeholder=curry.placeholder,v}curry.placeholder={},i.exports=curry},23279:(i,s,u)=>{var m=u(13218),v=u(7771),_=u(14841),j=Math.max,M=Math.min;i.exports=function debounce(i,s,u){var $,W,X,Y,Z,ee,ie=0,ae=!1,le=!1,ce=!0;if("function"!=typeof i)throw new TypeError("Expected a function");function invokeFunc(s){var u=$,m=W;return $=W=void 0,ie=s,Y=i.apply(m,u)}function shouldInvoke(i){var u=i-ee;return void 0===ee||u>=s||u<0||le&&i-ie>=X}function timerExpired(){var i=v();if(shouldInvoke(i))return trailingEdge(i);Z=setTimeout(timerExpired,function remainingWait(i){var u=s-(i-ee);return le?M(u,X-(i-ie)):u}(i))}function trailingEdge(i){return Z=void 0,ce&&$?invokeFunc(i):($=W=void 0,Y)}function debounced(){var i=v(),u=shouldInvoke(i);if($=arguments,W=this,ee=i,u){if(void 0===Z)return function leadingEdge(i){return ie=i,Z=setTimeout(timerExpired,s),ae?invokeFunc(i):Y}(ee);if(le)return clearTimeout(Z),Z=setTimeout(timerExpired,s),invokeFunc(ee)}return void 0===Z&&(Z=setTimeout(timerExpired,s)),Y}return s=_(s)||0,m(u)&&(ae=!!u.leading,X=(le="maxWait"in u)?j(_(u.maxWait)||0,s):X,ce="trailing"in u?!!u.trailing:ce),debounced.cancel=function cancel(){void 0!==Z&&clearTimeout(Z),ie=0,$=ee=W=Z=void 0},debounced.flush=function flush(){return void 0===Z?Y:trailingEdge(v())},debounced}},53816:(i,s,u)=>{var m=u(69389),v=u(79833),_=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,j=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");i.exports=function deburr(i){return(i=v(i))&&i.replace(_,m).replace(j,"")}},77813:i=>{i.exports=function eq(i,s){return i===s||i!=i&&s!=s}},13311:(i,s,u)=>{var m=u(67740)(u(30998));i.exports=m},30998:(i,s,u)=>{var m=u(41848),v=u(67206),_=u(40554),j=Math.max;i.exports=function findIndex(i,s,u){var M=null==i?0:i.length;if(!M)return-1;var $=null==u?0:_(u);return $<0&&($=j(M+$,0)),m(i,v(s,3),$)}},85564:(i,s,u)=>{var m=u(21078);i.exports=function flatten(i){return(null==i?0:i.length)?m(i,1):[]}},84599:(i,s,u)=>{var m=u(68836),v=u(69306),_=Array.prototype.push;function baseAry(i,s){return 2==s?function(s,u){return i(s,u)}:function(s){return i(s)}}function cloneArray(i){for(var s=i?i.length:0,u=Array(s);s--;)u[s]=i[s];return u}function wrapImmutable(i,s){return function(){var u=arguments.length;if(u){for(var m=Array(u);u--;)m[u]=arguments[u];var v=m[0]=s.apply(void 0,m);return i.apply(void 0,m),v}}}i.exports=function baseConvert(i,s,u,j){var M="function"==typeof s,$=s===Object(s);if($&&(j=u,u=s,s=void 0),null==u)throw new TypeError;j||(j={});var W={cap:!("cap"in j)||j.cap,curry:!("curry"in j)||j.curry,fixed:!("fixed"in j)||j.fixed,immutable:!("immutable"in j)||j.immutable,rearg:!("rearg"in j)||j.rearg},X=M?u:v,Y="curry"in j&&j.curry,Z="fixed"in j&&j.fixed,ee="rearg"in j&&j.rearg,ie=M?u.runInContext():void 0,ae=M?u:{ary:i.ary,assign:i.assign,clone:i.clone,curry:i.curry,forEach:i.forEach,isArray:i.isArray,isError:i.isError,isFunction:i.isFunction,isWeakMap:i.isWeakMap,iteratee:i.iteratee,keys:i.keys,rearg:i.rearg,toInteger:i.toInteger,toPath:i.toPath},le=ae.ary,ce=ae.assign,pe=ae.clone,de=ae.curry,fe=ae.forEach,ye=ae.isArray,be=ae.isError,_e=ae.isFunction,we=ae.isWeakMap,Se=ae.keys,xe=ae.rearg,Ie=ae.toInteger,Pe=ae.toPath,Te=Se(m.aryMethod),Re={castArray:function(i){return function(){var s=arguments[0];return ye(s)?i(cloneArray(s)):i.apply(void 0,arguments)}},iteratee:function(i){return function(){var s=arguments[1],u=i(arguments[0],s),m=u.length;return W.cap&&"number"==typeof s?(s=s>2?s-2:1,m&&m<=s?u:baseAry(u,s)):u}},mixin:function(i){return function(s){var u=this;if(!_e(u))return i(u,Object(s));var m=[];return fe(Se(s),(function(i){_e(s[i])&&m.push([i,u.prototype[i]])})),i(u,Object(s)),fe(m,(function(i){var s=i[1];_e(s)?u.prototype[i[0]]=s:delete u.prototype[i[0]]})),u}},nthArg:function(i){return function(s){var u=s<0?1:Ie(s)+1;return de(i(s),u)}},rearg:function(i){return function(s,u){var m=u?u.length:0;return de(i(s,u),m)}},runInContext:function(s){return function(u){return baseConvert(i,s(u),j)}}};function castCap(i,s){if(W.cap){var u=m.iterateeRearg[i];if(u)return function iterateeRearg(i,s){return overArg(i,(function(i){var u=s.length;return function baseArity(i,s){return 2==s?function(s,u){return i.apply(void 0,arguments)}:function(s){return i.apply(void 0,arguments)}}(xe(baseAry(i,u),s),u)}))}(s,u);var v=!M&&m.iterateeAry[i];if(v)return function iterateeAry(i,s){return overArg(i,(function(i){return"function"==typeof i?baseAry(i,s):i}))}(s,v)}return s}function castFixed(i,s,u){if(W.fixed&&(Z||!m.skipFixed[i])){var v=m.methodSpread[i],j=v&&v.start;return void 0===j?le(s,u):function flatSpread(i,s){return function(){for(var u=arguments.length,m=u-1,v=Array(u);u--;)v[u]=arguments[u];var j=v[s],M=v.slice(0,s);return j&&_.apply(M,j),s!=m&&_.apply(M,v.slice(s+1)),i.apply(this,M)}}(s,j)}return s}function castRearg(i,s,u){return W.rearg&&u>1&&(ee||!m.skipRearg[i])?xe(s,m.methodRearg[i]||m.aryRearg[u]):s}function cloneByPath(i,s){for(var u=-1,m=(s=Pe(s)).length,v=m-1,_=pe(Object(i)),j=_;null!=j&&++u1?de(s,u):s}(0,v=castCap(_,v),i),!1}})),!v})),v||(v=j),v==s&&(v=Y?de(v,1):function(){return s.apply(this,arguments)}),v.convert=createConverter(_,s),v.placeholder=s.placeholder=u,v}if(!$)return wrap(s,u,X);var qe=u,ze=[];return fe(Te,(function(i){fe(m.aryMethod[i],(function(i){var s=qe[m.remap[i]||i];s&&ze.push([i,wrap(i,s,qe)])}))})),fe(Se(qe),(function(i){var s=qe[i];if("function"==typeof s){for(var u=ze.length;u--;)if(ze[u][0]==i)return;s.convert=createConverter(i,s),ze.push([i,s])}})),fe(ze,(function(i){qe[i[0]]=i[1]})),qe.convert=function convertLib(i){return qe.runInContext.convert(i)(void 0)},qe.placeholder=qe,fe(Se(qe),(function(i){fe(m.realToAlias[i]||[],(function(s){qe[s]=qe[i]}))})),qe}},68836:(i,s)=>{s.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"},s.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]},s.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},s.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},s.iterateeRearg={mapKeys:[1],reduceRight:[1,0]},s.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]},s.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}},s.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}},s.realToAlias=function(){var i=Object.prototype.hasOwnProperty,u=s.aliasToReal,m={};for(var v in u){var _=u[v];i.call(m,_)?m[_].push(v):m[_]=[v]}return m}(),s.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"},s.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0},s.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}},4269:(i,s,u)=>{i.exports={ary:u(39514),assign:u(44037),clone:u(66678),curry:u(40087),forEach:u(77412),isArray:u(1469),isError:u(64647),isFunction:u(23560),isWeakMap:u(81018),iteratee:u(72594),keys:u(280),rearg:u(4963),toInteger:u(40554),toPath:u(30084)}},72700:(i,s,u)=>{i.exports=u(28252)},92822:(i,s,u)=>{var m=u(84599),v=u(4269);i.exports=function convert(i,s,u){return m(v,i,s,u)}},69306:i=>{i.exports={}},28252:(i,s,u)=>{var m=u(92822)("set",u(36968));m.placeholder=u(69306),i.exports=m},27361:(i,s,u)=>{var m=u(97786);i.exports=function get(i,s,u){var v=null==i?void 0:m(i,s);return void 0===v?u:v}},79095:(i,s,u)=>{var m=u(13),v=u(222);i.exports=function hasIn(i,s){return null!=i&&v(i,s,m)}},6557:i=>{i.exports=function identity(i){return i}},35694:(i,s,u)=>{var m=u(9454),v=u(37005),_=Object.prototype,j=_.hasOwnProperty,M=_.propertyIsEnumerable,$=m(function(){return arguments}())?m:function(i){return v(i)&&j.call(i,"callee")&&!M.call(i,"callee")};i.exports=$},1469:i=>{var s=Array.isArray;i.exports=s},98612:(i,s,u)=>{var m=u(23560),v=u(41780);i.exports=function isArrayLike(i){return null!=i&&v(i.length)&&!m(i)}},29246:(i,s,u)=>{var m=u(98612),v=u(37005);i.exports=function isArrayLikeObject(i){return v(i)&&m(i)}},51584:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isBoolean(i){return!0===i||!1===i||v(i)&&"[object Boolean]"==m(i)}},44144:(i,s,u)=>{i=u.nmd(i);var m=u(55639),v=u(95062),_=s&&!s.nodeType&&s,j=_&&i&&!i.nodeType&&i,M=j&&j.exports===_?m.Buffer:void 0,$=(M?M.isBuffer:void 0)||v;i.exports=$},41609:(i,s,u)=>{var m=u(280),v=u(64160),_=u(35694),j=u(1469),M=u(98612),$=u(44144),W=u(25726),X=u(36719),Y=Object.prototype.hasOwnProperty;i.exports=function isEmpty(i){if(null==i)return!0;if(M(i)&&(j(i)||"string"==typeof i||"function"==typeof i.splice||$(i)||X(i)||_(i)))return!i.length;var s=v(i);if("[object Map]"==s||"[object Set]"==s)return!i.size;if(W(i))return!m(i).length;for(var u in i)if(Y.call(i,u))return!1;return!0}},18446:(i,s,u)=>{var m=u(90939);i.exports=function isEqual(i,s){return m(i,s)}},64647:(i,s,u)=>{var m=u(44239),v=u(37005),_=u(68630);i.exports=function isError(i){if(!v(i))return!1;var s=m(i);return"[object Error]"==s||"[object DOMException]"==s||"string"==typeof i.message&&"string"==typeof i.name&&!_(i)}},23560:(i,s,u)=>{var m=u(44239),v=u(13218);i.exports=function isFunction(i){if(!v(i))return!1;var s=m(i);return"[object Function]"==s||"[object GeneratorFunction]"==s||"[object AsyncFunction]"==s||"[object Proxy]"==s}},41780:i=>{i.exports=function isLength(i){return"number"==typeof i&&i>-1&&i%1==0&&i<=9007199254740991}},56688:(i,s,u)=>{var m=u(25588),v=u(7518),_=u(31167),j=_&&_.isMap,M=j?v(j):m;i.exports=M},45220:i=>{i.exports=function isNull(i){return null===i}},81763:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isNumber(i){return"number"==typeof i||v(i)&&"[object Number]"==m(i)}},13218:i=>{i.exports=function isObject(i){var s=typeof i;return null!=i&&("object"==s||"function"==s)}},37005:i=>{i.exports=function isObjectLike(i){return null!=i&&"object"==typeof i}},68630:(i,s,u)=>{var m=u(44239),v=u(85924),_=u(37005),j=Function.prototype,M=Object.prototype,$=j.toString,W=M.hasOwnProperty,X=$.call(Object);i.exports=function isPlainObject(i){if(!_(i)||"[object Object]"!=m(i))return!1;var s=v(i);if(null===s)return!0;var u=W.call(s,"constructor")&&s.constructor;return"function"==typeof u&&u instanceof u&&$.call(u)==X}},72928:(i,s,u)=>{var m=u(29221),v=u(7518),_=u(31167),j=_&&_.isSet,M=j?v(j):m;i.exports=M},47037:(i,s,u)=>{var m=u(44239),v=u(1469),_=u(37005);i.exports=function isString(i){return"string"==typeof i||!v(i)&&_(i)&&"[object String]"==m(i)}},33448:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isSymbol(i){return"symbol"==typeof i||v(i)&&"[object Symbol]"==m(i)}},36719:(i,s,u)=>{var m=u(38749),v=u(7518),_=u(31167),j=_&&_.isTypedArray,M=j?v(j):m;i.exports=M},81018:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function isWeakMap(i){return v(i)&&"[object WeakMap]"==m(i)}},72594:(i,s,u)=>{var m=u(85990),v=u(67206);i.exports=function iteratee(i){return v("function"==typeof i?i:m(i,1))}},3674:(i,s,u)=>{var m=u(14636),v=u(280),_=u(98612);i.exports=function keys(i){return _(i)?m(i):v(i)}},81704:(i,s,u)=>{var m=u(14636),v=u(10313),_=u(98612);i.exports=function keysIn(i){return _(i)?m(i,!0):v(i)}},10928:i=>{i.exports=function last(i){var s=null==i?0:i.length;return s?i[s-1]:void 0}},88306:(i,s,u)=>{var m=u(83369);function memoize(i,s){if("function"!=typeof i||null!=s&&"function"!=typeof s)throw new TypeError("Expected a function");var memoized=function(){var u=arguments,m=s?s.apply(this,u):u[0],v=memoized.cache;if(v.has(m))return v.get(m);var _=i.apply(this,u);return memoized.cache=v.set(m,_)||v,_};return memoized.cache=new(memoize.Cache||m),memoized}memoize.Cache=m,i.exports=memoize},82492:(i,s,u)=>{var m=u(42980),v=u(21463)((function(i,s,u){m(i,s,u)}));i.exports=v},94885:i=>{i.exports=function negate(i){if("function"!=typeof i)throw new TypeError("Expected a function");return function(){var s=arguments;switch(s.length){case 0:return!i.call(this);case 1:return!i.call(this,s[0]);case 2:return!i.call(this,s[0],s[1]);case 3:return!i.call(this,s[0],s[1],s[2])}return!i.apply(this,s)}}},50308:i=>{i.exports=function noop(){}},7771:(i,s,u)=>{var m=u(55639);i.exports=function(){return m.Date.now()}},57557:(i,s,u)=>{var m=u(29932),v=u(85990),_=u(57406),j=u(71811),M=u(98363),$=u(60696),W=u(99021),X=u(46904),Y=W((function(i,s){var u={};if(null==i)return u;var W=!1;s=m(s,(function(s){return s=j(s,i),W||(W=s.length>1),s})),M(i,X(i),u),W&&(u=v(u,7,$));for(var Y=s.length;Y--;)_(u,s[Y]);return u}));i.exports=Y},39601:(i,s,u)=>{var m=u(40371),v=u(79152),_=u(15403),j=u(40327);i.exports=function property(i){return _(i)?m(j(i)):v(i)}},4963:(i,s,u)=>{var m=u(97727),v=u(99021),_=v((function(i,s){return m(i,256,void 0,void 0,void 0,s)}));i.exports=_},54061:(i,s,u)=>{var m=u(62663),v=u(89881),_=u(67206),j=u(10107),M=u(1469);i.exports=function reduce(i,s,u){var $=M(i)?m:j,W=arguments.length<3;return $(i,_(s,4),u,W,v)}},36968:(i,s,u)=>{var m=u(10611);i.exports=function set(i,s,u){return null==i?i:m(i,s,u)}},59704:(i,s,u)=>{var m=u(82908),v=u(67206),_=u(5076),j=u(1469),M=u(16612);i.exports=function some(i,s,u){var $=j(i)?m:_;return u&&M(i,s,u)&&(s=void 0),$(i,v(s,3))}},70479:i=>{i.exports=function stubArray(){return[]}},95062:i=>{i.exports=function stubFalse(){return!1}},18601:(i,s,u)=>{var m=u(14841),v=1/0;i.exports=function toFinite(i){return i?(i=m(i))===v||i===-1/0?17976931348623157e292*(i<0?-1:1):i==i?i:0:0===i?i:0}},40554:(i,s,u)=>{var m=u(18601);i.exports=function toInteger(i){var s=m(i),u=s%1;return s==s?u?s-u:s:0}},7334:(i,s,u)=>{var m=u(79833);i.exports=function toLower(i){return m(i).toLowerCase()}},14841:(i,s,u)=>{var m=u(27561),v=u(13218),_=u(33448),j=/^[-+]0x[0-9a-f]+$/i,M=/^0b[01]+$/i,$=/^0o[0-7]+$/i,W=parseInt;i.exports=function toNumber(i){if("number"==typeof i)return i;if(_(i))return NaN;if(v(i)){var s="function"==typeof i.valueOf?i.valueOf():i;i=v(s)?s+"":s}if("string"!=typeof i)return 0===i?i:+i;i=m(i);var u=M.test(i);return u||$.test(i)?W(i.slice(2),u?2:8):j.test(i)?NaN:+i}},30084:(i,s,u)=>{var m=u(29932),v=u(278),_=u(1469),j=u(33448),M=u(55514),$=u(40327),W=u(79833);i.exports=function toPath(i){return _(i)?m(i,$):j(i)?[i]:v(M(W(i)))}},59881:(i,s,u)=>{var m=u(98363),v=u(81704);i.exports=function toPlainObject(i){return m(i,v(i))}},79833:(i,s,u)=>{var m=u(80531);i.exports=function toString(i){return null==i?"":m(i)}},11700:(i,s,u)=>{var m=u(98805)("toUpperCase");i.exports=m},58748:(i,s,u)=>{var m=u(49029),v=u(93157),_=u(79833),j=u(2757);i.exports=function words(i,s,u){return i=_(i),void 0===(s=u?void 0:s)?v(i)?j(i):m(i):i.match(s)||[]}},8111:(i,s,u)=>{var m=u(96425),v=u(7548),_=u(9435),j=u(1469),M=u(37005),$=u(21913),W=Object.prototype.hasOwnProperty;function lodash(i){if(M(i)&&!j(i)&&!(i instanceof m)){if(i instanceof v)return i;if(W.call(i,"__wrapped__"))return $(i)}return new v(i)}lodash.prototype=_.prototype,lodash.prototype.constructor=lodash,i.exports=lodash},7287:(i,s,u)=>{var m=u(34865),v=u(1757);i.exports=function zipObject(i,s){return v(i||[],s||[],m)}},96470:(i,s,u)=>{"use strict";var m=u(47802),v=u(21102);s.highlight=highlight,s.highlightAuto=function highlightAuto(i,s){var u,j,M,$,W=s||{},X=W.subset||m.listLanguages(),Y=W.prefix,Z=X.length,ee=-1;null==Y&&(Y=_);if("string"!=typeof i)throw v("Expected `string` for value, got `%s`",i);j={relevance:0,language:null,value:[]},u={relevance:0,language:null,value:[]};for(;++eej.relevance&&(j=M),M.relevance>u.relevance&&(j=u,u=M));j.language&&(u.secondBest=j);return u},s.registerLanguage=function registerLanguage(i,s){m.registerLanguage(i,s)},s.listLanguages=function listLanguages(){return m.listLanguages()},s.registerAlias=function registerAlias(i,s){var u,v=i;s&&((v={})[i]=s);for(u in v)m.registerAliases(v[u],{languageName:u})},Emitter.prototype.addText=function text(i){var s,u,m=this.stack;if(""===i)return;s=m[m.length-1],(u=s.children[s.children.length-1])&&"text"===u.type?u.value+=i:s.children.push({type:"text",value:i})},Emitter.prototype.addKeyword=function addKeyword(i,s){this.openNode(s),this.addText(i),this.closeNode()},Emitter.prototype.addSublanguage=function addSublanguage(i,s){var u=this.stack,m=u[u.length-1],v=i.rootNode.children,_=s?{type:"element",tagName:"span",properties:{className:[s]},children:v}:v;m.children=m.children.concat(_)},Emitter.prototype.openNode=function open(i){var s=this.stack,u=this.options.classPrefix+i,m=s[s.length-1],v={type:"element",tagName:"span",properties:{className:[u]},children:[]};m.children.push(v),s.push(v)},Emitter.prototype.closeNode=function close(){this.stack.pop()},Emitter.prototype.closeAllNodes=noop,Emitter.prototype.finalize=noop,Emitter.prototype.toHTML=function toHtmlNoop(){return""};var _="hljs-";function highlight(i,s,u){var j,M=m.configure({}),$=(u||{}).prefix;if("string"!=typeof i)throw v("Expected `string` for name, got `%s`",i);if(!m.getLanguage(i))throw v("Unknown language: `%s` is not registered",i);if("string"!=typeof s)throw v("Expected `string` for value, got `%s`",s);if(null==$&&($=_),m.configure({__emitter:Emitter,classPrefix:$}),j=m.highlight(s,{language:i,ignoreIllegals:!0}),m.configure(M||{}),j.errorRaised)throw j.errorRaised;return{relevance:j.relevance,language:j.language,value:j.emitter.rootNode.children}}function Emitter(i){this.options=i,this.rootNode={children:[]},this.stack=[this.rootNode]}function noop(){}},42566:(i,s,u)=>{const m=u(94885);function coerceElementMatchingCallback(i){return"string"==typeof i?s=>s.element===i:i.constructor&&i.extend?s=>s instanceof i:i}class ArraySlice{constructor(i){this.elements=i||[]}toValue(){return this.elements.map((i=>i.toValue()))}map(i,s){return this.elements.map(i,s)}flatMap(i,s){return this.map(i,s).reduce(((i,s)=>i.concat(s)),[])}compactMap(i,s){const u=[];return this.forEach((m=>{const v=i.bind(s)(m);v&&u.push(v)})),u}filter(i,s){return i=coerceElementMatchingCallback(i),new ArraySlice(this.elements.filter(i,s))}reject(i,s){return i=coerceElementMatchingCallback(i),new ArraySlice(this.elements.filter(m(i),s))}find(i,s){return i=coerceElementMatchingCallback(i),this.elements.find(i,s)}forEach(i,s){this.elements.forEach(i,s)}reduce(i,s){return this.elements.reduce(i,s)}includes(i){return this.elements.some((s=>s.equals(i)))}shift(){return this.elements.shift()}unshift(i){this.elements.unshift(this.refract(i))}push(i){return this.elements.push(this.refract(i)),this}add(i){this.push(i)}get(i){return this.elements[i]}getValue(i){const s=this.elements[i];if(s)return s.toValue()}get length(){return this.elements.length}get isEmpty(){return 0===this.elements.length}get first(){return this.elements[0]}}"undefined"!=typeof Symbol&&(ArraySlice.prototype[Symbol.iterator]=function symbol(){return this.elements[Symbol.iterator]()}),i.exports=ArraySlice},17645:i=>{class KeyValuePair{constructor(i,s){this.key=i,this.value=s}clone(){const i=new KeyValuePair;return this.key&&(i.key=this.key.clone()),this.value&&(i.value=this.value.clone()),i}}i.exports=KeyValuePair},78520:(i,s,u)=>{const m=u(45220),v=u(47037),_=u(81763),j=u(51584),M=u(13218),$=u(28219),W=u(99829);class Namespace{constructor(i){this.elementMap={},this.elementDetection=[],this.Element=W.Element,this.KeyValuePair=W.KeyValuePair,i&&i.noDefault||this.useDefault(),this._attributeElementKeys=[],this._attributeElementArrayKeys=[]}use(i){return i.namespace&&i.namespace({base:this}),i.load&&i.load({base:this}),this}useDefault(){return this.register("null",W.NullElement).register("string",W.StringElement).register("number",W.NumberElement).register("boolean",W.BooleanElement).register("array",W.ArrayElement).register("object",W.ObjectElement).register("member",W.MemberElement).register("ref",W.RefElement).register("link",W.LinkElement),this.detect(m,W.NullElement,!1).detect(v,W.StringElement,!1).detect(_,W.NumberElement,!1).detect(j,W.BooleanElement,!1).detect(Array.isArray,W.ArrayElement,!1).detect(M,W.ObjectElement,!1),this}register(i,s){return this._elements=void 0,this.elementMap[i]=s,this}unregister(i){return this._elements=void 0,delete this.elementMap[i],this}detect(i,s,u){return void 0===u||u?this.elementDetection.unshift([i,s]):this.elementDetection.push([i,s]),this}toElement(i){if(i instanceof this.Element)return i;let s;for(let u=0;u{const s=i[0].toUpperCase()+i.substr(1);this._elements[s]=this.elementMap[i]}))),this._elements}get serialiser(){return new $(this)}}$.prototype.Namespace=Namespace,i.exports=Namespace},87526:(i,s,u)=>{const m=u(94885),v=u(42566);class ObjectSlice extends v{map(i,s){return this.elements.map((u=>i.bind(s)(u.value,u.key,u)))}filter(i,s){return new ObjectSlice(this.elements.filter((u=>i.bind(s)(u.value,u.key,u))))}reject(i,s){return this.filter(m(i.bind(s)))}forEach(i,s){return this.elements.forEach(((u,m)=>{i.bind(s)(u.value,u.key,u,m)}))}keys(){return this.map(((i,s)=>s.toValue()))}values(){return this.map((i=>i.toValue()))}}i.exports=ObjectSlice},99829:(i,s,u)=>{const m=u(3079),v=u(96295),_=u(16036),j=u(91090),M=u(18866),$=u(35804),W=u(5946),X=u(76735),Y=u(59964),Z=u(38588),ee=u(42566),ie=u(87526),ae=u(17645);function refract(i){if(i instanceof m)return i;if("string"==typeof i)return new _(i);if("number"==typeof i)return new j(i);if("boolean"==typeof i)return new M(i);if(null===i)return new v;if(Array.isArray(i))return new $(i.map(refract));if("object"==typeof i){return new X(i)}return i}m.prototype.ObjectElement=X,m.prototype.RefElement=Z,m.prototype.MemberElement=W,m.prototype.refract=refract,ee.prototype.refract=refract,i.exports={Element:m,NullElement:v,StringElement:_,NumberElement:j,BooleanElement:M,ArrayElement:$,MemberElement:W,ObjectElement:X,LinkElement:Y,RefElement:Z,refract,ArraySlice:ee,ObjectSlice:ie,KeyValuePair:ae}},59964:(i,s,u)=>{const m=u(3079);i.exports=class LinkElement extends m{constructor(i,s,u){super(i||[],s,u),this.element="link"}get relation(){return this.attributes.get("relation")}set relation(i){this.attributes.set("relation",i)}get href(){return this.attributes.get("href")}set href(i){this.attributes.set("href",i)}}},38588:(i,s,u)=>{const m=u(3079);i.exports=class RefElement extends m{constructor(i,s,u){super(i||[],s,u),this.element="ref",this.path||(this.path="element")}get path(){return this.attributes.get("path")}set path(i){this.attributes.set("path",i)}}},43500:(i,s,u)=>{const m=u(78520),v=u(99829);s.lS=m,s.KeyValuePair=u(17645),s.O4=v.ArraySlice,s.rm=v.ObjectSlice,s.W_=v.Element,s.RP=v.StringElement,s.VL=v.NumberElement,s.hh=v.BooleanElement,s.zr=v.NullElement,s.ON=v.ArrayElement,s.Sb=v.ObjectElement,s.c6=v.MemberElement,s.tK=v.RefElement,s.EA=v.LinkElement,s.Qc=v.refract,u(28219),u(3414)},35804:(i,s,u)=>{const m=u(94885),v=u(3079),_=u(42566);class ArrayElement extends v{constructor(i,s,u){super(i||[],s,u),this.element="array"}primitive(){return"array"}get(i){return this.content[i]}getValue(i){const s=this.get(i);if(s)return s.toValue()}getIndex(i){return this.content[i]}set(i,s){return this.content[i]=this.refract(s),this}remove(i){const s=this.content.splice(i,1);return s.length?s[0]:null}map(i,s){return this.content.map(i,s)}flatMap(i,s){return this.map(i,s).reduce(((i,s)=>i.concat(s)),[])}compactMap(i,s){const u=[];return this.forEach((m=>{const v=i.bind(s)(m);v&&u.push(v)})),u}filter(i,s){return new _(this.content.filter(i,s))}reject(i,s){return this.filter(m(i),s)}reduce(i,s){let u,m;void 0!==s?(u=0,m=this.refract(s)):(u=1,m="object"===this.primitive()?this.first.value:this.first);for(let s=u;s{i.bind(s)(u,this.refract(m))}))}shift(){return this.content.shift()}unshift(i){this.content.unshift(this.refract(i))}push(i){return this.content.push(this.refract(i)),this}add(i){this.push(i)}findElements(i,s){const u=s||{},m=!!u.recursive,v=void 0===u.results?[]:u.results;return this.forEach(((s,u,_)=>{m&&void 0!==s.findElements&&s.findElements(i,{results:v,recursive:m}),i(s,u,_)&&v.push(s)})),v}find(i){return new _(this.findElements(i,{recursive:!0}))}findByElement(i){return this.find((s=>s.element===i))}findByClass(i){return this.find((s=>s.classes.includes(i)))}getById(i){return this.find((s=>s.id.toValue()===i)).first}includes(i){return this.content.some((s=>s.equals(i)))}contains(i){return this.includes(i)}empty(){return new this.constructor([])}"fantasy-land/empty"(){return this.empty()}concat(i){return new this.constructor(this.content.concat(i.content))}"fantasy-land/concat"(i){return this.concat(i)}"fantasy-land/map"(i){return new this.constructor(this.map(i))}"fantasy-land/chain"(i){return this.map((s=>i(s)),this).reduce(((i,s)=>i.concat(s)),this.empty())}"fantasy-land/filter"(i){return new this.constructor(this.content.filter(i))}"fantasy-land/reduce"(i,s){return this.content.reduce(i,s)}get length(){return this.content.length}get isEmpty(){return 0===this.content.length}get first(){return this.getIndex(0)}get second(){return this.getIndex(1)}get last(){return this.getIndex(this.length-1)}}ArrayElement.empty=function empty(){return new this},ArrayElement["fantasy-land/empty"]=ArrayElement.empty,"undefined"!=typeof Symbol&&(ArrayElement.prototype[Symbol.iterator]=function symbol(){return this.content[Symbol.iterator]()}),i.exports=ArrayElement},18866:(i,s,u)=>{const m=u(3079);i.exports=class BooleanElement extends m{constructor(i,s,u){super(i,s,u),this.element="boolean"}primitive(){return"boolean"}}},3079:(i,s,u)=>{const m=u(18446),v=u(17645),_=u(42566);class Element{constructor(i,s,u){s&&(this.meta=s),u&&(this.attributes=u),this.content=i}freeze(){Object.isFrozen(this)||(this._meta&&(this.meta.parent=this,this.meta.freeze()),this._attributes&&(this.attributes.parent=this,this.attributes.freeze()),this.children.forEach((i=>{i.parent=this,i.freeze()}),this),this.content&&Array.isArray(this.content)&&Object.freeze(this.content),Object.freeze(this))}primitive(){}clone(){const i=new this.constructor;return i.element=this.element,this.meta.length&&(i._meta=this.meta.clone()),this.attributes.length&&(i._attributes=this.attributes.clone()),this.content?this.content.clone?i.content=this.content.clone():Array.isArray(this.content)?i.content=this.content.map((i=>i.clone())):i.content=this.content:i.content=this.content,i}toValue(){return this.content instanceof Element?this.content.toValue():this.content instanceof v?{key:this.content.key.toValue(),value:this.content.value?this.content.value.toValue():void 0}:this.content&&this.content.map?this.content.map((i=>i.toValue()),this):this.content}toRef(i){if(""===this.id.toValue())throw Error("Cannot create user-guide to an element that does not contain an ID");const s=new this.RefElement(this.id.toValue());return i&&(s.path=i),s}findRecursive(...i){if(arguments.length>1&&!this.isFrozen)throw new Error("Cannot find recursive with multiple element names without first freezing the element. Call `element.freeze()`");const s=i.pop();let u=new _;const append=(i,s)=>(i.push(s),i),checkElement=(i,u)=>{u.element===s&&i.push(u);const m=u.findRecursive(s);return m&&m.reduce(append,i),u.content instanceof v&&(u.content.key&&checkElement(i,u.content.key),u.content.value&&checkElement(i,u.content.value)),i};return this.content&&(this.content.element&&checkElement(u,this.content),Array.isArray(this.content)&&this.content.reduce(checkElement,u)),i.isEmpty||(u=u.filter((s=>{let u=s.parents.map((i=>i.element));for(const s in i){const m=i[s],v=u.indexOf(m);if(-1===v)return!1;u=u.splice(0,v)}return!0}))),u}set(i){return this.content=i,this}equals(i){return m(this.toValue(),i)}getMetaProperty(i,s){if(!this.meta.hasKey(i)){if(this.isFrozen){const i=this.refract(s);return i.freeze(),i}this.meta.set(i,s)}return this.meta.get(i)}setMetaProperty(i,s){this.meta.set(i,s)}get element(){return this._storedElement||"element"}set element(i){this._storedElement=i}get content(){return this._content}set content(i){if(i instanceof Element)this._content=i;else if(i instanceof _)this.content=i.elements;else if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||"null"===i||null==i)this._content=i;else if(i instanceof v)this._content=i;else if(Array.isArray(i))this._content=i.map(this.refract);else{if("object"!=typeof i)throw new Error("Cannot set content to given value");this._content=Object.keys(i).map((s=>new this.MemberElement(s,i[s])))}}get meta(){if(!this._meta){if(this.isFrozen){const i=new this.ObjectElement;return i.freeze(),i}this._meta=new this.ObjectElement}return this._meta}set meta(i){i instanceof this.ObjectElement?this._meta=i:this.meta.set(i||{})}get attributes(){if(!this._attributes){if(this.isFrozen){const i=new this.ObjectElement;return i.freeze(),i}this._attributes=new this.ObjectElement}return this._attributes}set attributes(i){i instanceof this.ObjectElement?this._attributes=i:this.attributes.set(i||{})}get id(){return this.getMetaProperty("id","")}set id(i){this.setMetaProperty("id",i)}get classes(){return this.getMetaProperty("classes",[])}set classes(i){this.setMetaProperty("classes",i)}get title(){return this.getMetaProperty("title","")}set title(i){this.setMetaProperty("title",i)}get description(){return this.getMetaProperty("description","")}set description(i){this.setMetaProperty("description",i)}get links(){return this.getMetaProperty("links",[])}set links(i){this.setMetaProperty("links",i)}get isFrozen(){return Object.isFrozen(this)}get parents(){let{parent:i}=this;const s=new _;for(;i;)s.push(i),i=i.parent;return s}get children(){if(Array.isArray(this.content))return new _(this.content);if(this.content instanceof v){const i=new _([this.content.key]);return this.content.value&&i.push(this.content.value),i}return this.content instanceof Element?new _([this.content]):new _}get recursiveChildren(){const i=new _;return this.children.forEach((s=>{i.push(s),s.recursiveChildren.forEach((s=>{i.push(s)}))})),i}}i.exports=Element},5946:(i,s,u)=>{const m=u(17645),v=u(3079);i.exports=class MemberElement extends v{constructor(i,s,u,v){super(new m,u,v),this.element="member",this.key=i,this.value=s}get key(){return this.content.key}set key(i){this.content.key=this.refract(i)}get value(){return this.content.value}set value(i){this.content.value=this.refract(i)}}},96295:(i,s,u)=>{const m=u(3079);i.exports=class NullElement extends m{constructor(i,s,u){super(i||null,s,u),this.element="null"}primitive(){return"null"}set(){return new Error("Cannot set the value of null")}}},91090:(i,s,u)=>{const m=u(3079);i.exports=class NumberElement extends m{constructor(i,s,u){super(i,s,u),this.element="number"}primitive(){return"number"}}},76735:(i,s,u)=>{const m=u(94885),v=u(13218),_=u(35804),j=u(5946),M=u(87526);i.exports=class ObjectElement extends _{constructor(i,s,u){super(i||[],s,u),this.element="object"}primitive(){return"object"}toValue(){return this.content.reduce(((i,s)=>(i[s.key.toValue()]=s.value?s.value.toValue():void 0,i)),{})}get(i){const s=this.getMember(i);if(s)return s.value}getMember(i){if(void 0!==i)return this.content.find((s=>s.key.toValue()===i))}remove(i){let s=null;return this.content=this.content.filter((u=>u.key.toValue()!==i||(s=u,!1))),s}getKey(i){const s=this.getMember(i);if(s)return s.key}set(i,s){if(v(i))return Object.keys(i).forEach((s=>{this.set(s,i[s])})),this;const u=i,m=this.getMember(u);return m?m.value=s:this.content.push(new j(u,s)),this}keys(){return this.content.map((i=>i.key.toValue()))}values(){return this.content.map((i=>i.value.toValue()))}hasKey(i){return this.content.some((s=>s.key.equals(i)))}items(){return this.content.map((i=>[i.key.toValue(),i.value.toValue()]))}map(i,s){return this.content.map((u=>i.bind(s)(u.value,u.key,u)))}compactMap(i,s){const u=[];return this.forEach(((m,v,_)=>{const j=i.bind(s)(m,v,_);j&&u.push(j)})),u}filter(i,s){return new M(this.content).filter(i,s)}reject(i,s){return this.filter(m(i),s)}forEach(i,s){return this.content.forEach((u=>i.bind(s)(u.value,u.key,u)))}}},16036:(i,s,u)=>{const m=u(3079);i.exports=class StringElement extends m{constructor(i,s,u){super(i,s,u),this.element="string"}primitive(){return"string"}get length(){return this.content.length}}},3414:(i,s,u)=>{const m=u(28219);i.exports=class JSON06Serialiser extends m{serialise(i){if(!(i instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${i}\` is not an Element instance`);let s;i._attributes&&i.attributes.get("variable")&&(s=i.attributes.get("variable"));const u={element:i.element};i._meta&&i._meta.length>0&&(u.meta=this.serialiseObject(i.meta));const m="enum"===i.element||-1!==i.attributes.keys().indexOf("enumerations");if(m){const s=this.enumSerialiseAttributes(i);s&&(u.attributes=s)}else if(i._attributes&&i._attributes.length>0){let{attributes:m}=i;m.get("metadata")&&(m=m.clone(),m.set("meta",m.get("metadata")),m.remove("metadata")),"member"===i.element&&s&&(m=m.clone(),m.remove("variable")),m.length>0&&(u.attributes=this.serialiseObject(m))}if(m)u.content=this.enumSerialiseContent(i,u);else if(this[`${i.element}SerialiseContent`])u.content=this[`${i.element}SerialiseContent`](i,u);else if(void 0!==i.content){let m;s&&i.content.key?(m=i.content.clone(),m.key.attributes.set("variable",s),m=this.serialiseContent(m)):m=this.serialiseContent(i.content),this.shouldSerialiseContent(i,m)&&(u.content=m)}else this.shouldSerialiseContent(i,i.content)&&i instanceof this.namespace.elements.Array&&(u.content=[]);return u}shouldSerialiseContent(i,s){return"parseResult"===i.element||"httpRequest"===i.element||"httpResponse"===i.element||"category"===i.element||"link"===i.element||void 0!==s&&(!Array.isArray(s)||0!==s.length)}refSerialiseContent(i,s){return delete s.attributes,{href:i.toValue(),path:i.path.toValue()}}sourceMapSerialiseContent(i){return i.toValue()}dataStructureSerialiseContent(i){return[this.serialiseContent(i.content)]}enumSerialiseAttributes(i){const s=i.attributes.clone(),u=s.remove("enumerations")||new this.namespace.elements.Array([]),m=s.get("default");let v=s.get("samples")||new this.namespace.elements.Array([]);if(m&&m.content&&(m.content.attributes&&m.content.attributes.remove("typeAttributes"),s.set("default",new this.namespace.elements.Array([m.content]))),v.forEach((i=>{i.content&&i.content.element&&i.content.attributes.remove("typeAttributes")})),i.content&&0!==u.length&&v.unshift(i.content),v=v.map((i=>i instanceof this.namespace.elements.Array?[i]:new this.namespace.elements.Array([i.content]))),v.length&&s.set("samples",v),s.length>0)return this.serialiseObject(s)}enumSerialiseContent(i){if(i._attributes){const s=i.attributes.get("enumerations");if(s&&s.length>0)return s.content.map((i=>{const s=i.clone();return s.attributes.remove("typeAttributes"),this.serialise(s)}))}if(i.content){const s=i.content.clone();return s.attributes.remove("typeAttributes"),[this.serialise(s)]}return[]}deserialise(i){if("string"==typeof i)return new this.namespace.elements.String(i);if("number"==typeof i)return new this.namespace.elements.Number(i);if("boolean"==typeof i)return new this.namespace.elements.Boolean(i);if(null===i)return new this.namespace.elements.Null;if(Array.isArray(i))return new this.namespace.elements.Array(i.map(this.deserialise,this));const s=this.namespace.getElementClass(i.element),u=new s;u.element!==i.element&&(u.element=i.element),i.meta&&this.deserialiseObject(i.meta,u.meta),i.attributes&&this.deserialiseObject(i.attributes,u.attributes);const m=this.deserialiseContent(i.content);if(void 0===m&&null!==u.content||(u.content=m),"enum"===u.element){u.content&&u.attributes.set("enumerations",u.content);let i=u.attributes.get("samples");if(u.attributes.remove("samples"),i){const m=i;i=new this.namespace.elements.Array,m.forEach((m=>{m.forEach((m=>{const v=new s(m);v.element=u.element,i.push(v)}))}));const v=i.shift();u.content=v?v.content:void 0,u.attributes.set("samples",i)}else u.content=void 0;let m=u.attributes.get("default");if(m&&m.length>0){m=m.get(0);const i=new s(m);i.element=u.element,u.attributes.set("default",i)}}else if("dataStructure"===u.element&&Array.isArray(u.content))[u.content]=u.content;else if("category"===u.element){const i=u.attributes.get("meta");i&&(u.attributes.set("metadata",i),u.attributes.remove("meta"))}else"member"===u.element&&u.key&&u.key._attributes&&u.key._attributes.getValue("variable")&&(u.attributes.set("variable",u.key.attributes.get("variable")),u.key.attributes.remove("variable"));return u}serialiseContent(i){if(i instanceof this.namespace.elements.Element)return this.serialise(i);if(i instanceof this.namespace.KeyValuePair){const s={key:this.serialise(i.key)};return i.value&&(s.value=this.serialise(i.value)),s}return i&&i.map?i.map(this.serialise,this):i}deserialiseContent(i){if(i){if(i.element)return this.deserialise(i);if(i.key){const s=new this.namespace.KeyValuePair(this.deserialise(i.key));return i.value&&(s.value=this.deserialise(i.value)),s}if(i.map)return i.map(this.deserialise,this)}return i}shouldRefract(i){return!!(i._attributes&&i.attributes.keys().length||i._meta&&i.meta.keys().length)||"enum"!==i.element&&(i.element!==i.primitive()||"member"===i.element)}convertKeyToRefract(i,s){return this.shouldRefract(s)?this.serialise(s):"enum"===s.element?this.serialiseEnum(s):"array"===s.element?s.map((s=>this.shouldRefract(s)||"default"===i?this.serialise(s):"array"===s.element||"object"===s.element||"enum"===s.element?s.children.map((i=>this.serialise(i))):s.toValue())):"object"===s.element?(s.content||[]).map(this.serialise,this):s.toValue()}serialiseEnum(i){return i.children.map((i=>this.serialise(i)))}serialiseObject(i){const s={};return i.forEach(((i,u)=>{if(i){const m=u.toValue();s[m]=this.convertKeyToRefract(m,i)}})),s}deserialiseObject(i,s){Object.keys(i).forEach((u=>{s.set(u,this.deserialise(i[u]))}))}}},28219:i=>{i.exports=class JSONSerialiser{constructor(i){this.namespace=i||new this.Namespace}serialise(i){if(!(i instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${i}\` is not an Element instance`);const s={element:i.element};i._meta&&i._meta.length>0&&(s.meta=this.serialiseObject(i.meta)),i._attributes&&i._attributes.length>0&&(s.attributes=this.serialiseObject(i.attributes));const u=this.serialiseContent(i.content);return void 0!==u&&(s.content=u),s}deserialise(i){if(!i.element)throw new Error("Given value is not an object containing an element name");const s=new(this.namespace.getElementClass(i.element));s.element!==i.element&&(s.element=i.element),i.meta&&this.deserialiseObject(i.meta,s.meta),i.attributes&&this.deserialiseObject(i.attributes,s.attributes);const u=this.deserialiseContent(i.content);return void 0===u&&null!==s.content||(s.content=u),s}serialiseContent(i){if(i instanceof this.namespace.elements.Element)return this.serialise(i);if(i instanceof this.namespace.KeyValuePair){const s={key:this.serialise(i.key)};return i.value&&(s.value=this.serialise(i.value)),s}if(i&&i.map){if(0===i.length)return;return i.map(this.serialise,this)}return i}deserialiseContent(i){if(i){if(i.element)return this.deserialise(i);if(i.key){const s=new this.namespace.KeyValuePair(this.deserialise(i.key));return i.value&&(s.value=this.deserialise(i.value)),s}if(i.map)return i.map(this.deserialise,this)}return i}serialiseObject(i){const s={};if(i.forEach(((i,u)=>{i&&(s[u.toValue()]=this.serialise(i))})),0!==Object.keys(s).length)return s}deserialiseObject(i,s){Object.keys(i).forEach((u=>{s.set(u,this.deserialise(i[u]))}))}}},27418:i=>{"use strict";var s=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,m=Object.prototype.propertyIsEnumerable;i.exports=function shouldUseNative(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de","5"===Object.getOwnPropertyNames(i)[0])return!1;for(var s={},u=0;u<10;u++)s["_"+String.fromCharCode(u)]=u;if("0123456789"!==Object.getOwnPropertyNames(s).map((function(i){return s[i]})).join(""))return!1;var m={};return"abcdefghijklmnopqrst".split("").forEach((function(i){m[i]=i})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},m)).join("")}catch(i){return!1}}()?Object.assign:function(i,v){for(var _,j,M=function toObject(i){if(null==i)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}(i),$=1;${var m="function"==typeof Map&&Map.prototype,v=Object.getOwnPropertyDescriptor&&m?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,_=m&&v&&"function"==typeof v.get?v.get:null,j=m&&Map.prototype.forEach,M="function"==typeof Set&&Set.prototype,$=Object.getOwnPropertyDescriptor&&M?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,W=M&&$&&"function"==typeof $.get?$.get:null,X=M&&Set.prototype.forEach,Y="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,Z="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,ee="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,ie=Boolean.prototype.valueOf,ae=Object.prototype.toString,le=Function.prototype.toString,ce=String.prototype.match,pe=String.prototype.slice,de=String.prototype.replace,fe=String.prototype.toUpperCase,ye=String.prototype.toLowerCase,be=RegExp.prototype.test,_e=Array.prototype.concat,we=Array.prototype.join,Se=Array.prototype.slice,xe=Math.floor,Ie="function"==typeof BigInt?BigInt.prototype.valueOf:null,Pe=Object.getOwnPropertySymbols,Te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Re="function"==typeof Symbol&&"object"==typeof Symbol.iterator,qe="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Re||"symbol")?Symbol.toStringTag:null,ze=Object.prototype.propertyIsEnumerable,Ve=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(i){return i.__proto__}:null);function addNumericSeparator(i,s){if(i===1/0||i===-1/0||i!=i||i&&i>-1e3&&i<1e3||be.call(/e/,s))return s;var u=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof i){var m=i<0?-xe(-i):xe(i);if(m!==i){var v=String(m),_=pe.call(s,v.length+1);return de.call(v,u,"$&_")+"."+de.call(de.call(_,/([0-9]{3})/g,"$&_"),/_$/,"")}}return de.call(s,u,"$&_")}var We=u(24654),He=We.custom,Xe=isSymbol(He)?He:null;function wrapQuotes(i,s,u){var m="double"===(u.quoteStyle||s)?'"':"'";return m+i+m}function quote(i){return de.call(String(i),/"/g,""")}function isArray(i){return!("[object Array]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}function isRegExp(i){return!("[object RegExp]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}function isSymbol(i){if(Re)return i&&"object"==typeof i&&i instanceof Symbol;if("symbol"==typeof i)return!0;if(!i||"object"!=typeof i||!Te)return!1;try{return Te.call(i),!0}catch(i){}return!1}i.exports=function inspect_(i,s,u,m){var v=s||{};if(has(v,"quoteStyle")&&"single"!==v.quoteStyle&&"double"!==v.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has(v,"maxStringLength")&&("number"==typeof v.maxStringLength?v.maxStringLength<0&&v.maxStringLength!==1/0:null!==v.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var M=!has(v,"customInspect")||v.customInspect;if("boolean"!=typeof M&&"symbol"!==M)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has(v,"indent")&&null!==v.indent&&"\t"!==v.indent&&!(parseInt(v.indent,10)===v.indent&&v.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has(v,"numericSeparator")&&"boolean"!=typeof v.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var $=v.numericSeparator;if(void 0===i)return"undefined";if(null===i)return"null";if("boolean"==typeof i)return i?"true":"false";if("string"==typeof i)return inspectString(i,v);if("number"==typeof i){if(0===i)return 1/0/i>0?"0":"-0";var ae=String(i);return $?addNumericSeparator(i,ae):ae}if("bigint"==typeof i){var fe=String(i)+"n";return $?addNumericSeparator(i,fe):fe}var be=void 0===v.depth?5:v.depth;if(void 0===u&&(u=0),u>=be&&be>0&&"object"==typeof i)return isArray(i)?"[Array]":"[Object]";var xe=function getIndent(i,s){var u;if("\t"===i.indent)u="\t";else{if(!("number"==typeof i.indent&&i.indent>0))return null;u=we.call(Array(i.indent+1)," ")}return{base:u,prev:we.call(Array(s+1),u)}}(v,u);if(void 0===m)m=[];else if(indexOf(m,i)>=0)return"[Circular]";function inspect(i,s,_){if(s&&(m=Se.call(m)).push(s),_){var j={depth:v.depth};return has(v,"quoteStyle")&&(j.quoteStyle=v.quoteStyle),inspect_(i,j,u+1,m)}return inspect_(i,v,u+1,m)}if("function"==typeof i&&!isRegExp(i)){var Pe=function nameOf(i){if(i.name)return i.name;var s=ce.call(le.call(i),/^function\s*([\w$]+)/);if(s)return s[1];return null}(i),He=arrObjKeys(i,inspect);return"[Function"+(Pe?": "+Pe:" (anonymous)")+"]"+(He.length>0?" { "+we.call(He,", ")+" }":"")}if(isSymbol(i)){var Ye=Re?de.call(String(i),/^(Symbol\(.*\))_[^)]*$/,"$1"):Te.call(i);return"object"!=typeof i||Re?Ye:markBoxed(Ye)}if(function isElement(i){if(!i||"object"!=typeof i)return!1;if("undefined"!=typeof HTMLElement&&i instanceof HTMLElement)return!0;return"string"==typeof i.nodeName&&"function"==typeof i.getAttribute}(i)){for(var Qe="<"+ye.call(String(i.nodeName)),et=i.attributes||[],tt=0;tt"}if(isArray(i)){if(0===i.length)return"[]";var rt=arrObjKeys(i,inspect);return xe&&!function singleLineValues(i){for(var s=0;s=0)return!1;return!0}(rt)?"["+indentedJoin(rt,xe)+"]":"[ "+we.call(rt,", ")+" ]"}if(function isError(i){return!("[object Error]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i)){var nt=arrObjKeys(i,inspect);return"cause"in Error.prototype||!("cause"in i)||ze.call(i,"cause")?0===nt.length?"["+String(i)+"]":"{ ["+String(i)+"] "+we.call(nt,", ")+" }":"{ ["+String(i)+"] "+we.call(_e.call("[cause]: "+inspect(i.cause),nt),", ")+" }"}if("object"==typeof i&&M){if(Xe&&"function"==typeof i[Xe]&&We)return We(i,{depth:be-u});if("symbol"!==M&&"function"==typeof i.inspect)return i.inspect()}if(function isMap(i){if(!_||!i||"object"!=typeof i)return!1;try{_.call(i);try{W.call(i)}catch(i){return!0}return i instanceof Map}catch(i){}return!1}(i)){var ot=[];return j&&j.call(i,(function(s,u){ot.push(inspect(u,i,!0)+" => "+inspect(s,i))})),collectionOf("Map",_.call(i),ot,xe)}if(function isSet(i){if(!W||!i||"object"!=typeof i)return!1;try{W.call(i);try{_.call(i)}catch(i){return!0}return i instanceof Set}catch(i){}return!1}(i)){var it=[];return X&&X.call(i,(function(s){it.push(inspect(s,i))})),collectionOf("Set",W.call(i),it,xe)}if(function isWeakMap(i){if(!Y||!i||"object"!=typeof i)return!1;try{Y.call(i,Y);try{Z.call(i,Z)}catch(i){return!0}return i instanceof WeakMap}catch(i){}return!1}(i))return weakCollectionOf("WeakMap");if(function isWeakSet(i){if(!Z||!i||"object"!=typeof i)return!1;try{Z.call(i,Z);try{Y.call(i,Y)}catch(i){return!0}return i instanceof WeakSet}catch(i){}return!1}(i))return weakCollectionOf("WeakSet");if(function isWeakRef(i){if(!ee||!i||"object"!=typeof i)return!1;try{return ee.call(i),!0}catch(i){}return!1}(i))return weakCollectionOf("WeakRef");if(function isNumber(i){return!("[object Number]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(inspect(Number(i)));if(function isBigInt(i){if(!i||"object"!=typeof i||!Ie)return!1;try{return Ie.call(i),!0}catch(i){}return!1}(i))return markBoxed(inspect(Ie.call(i)));if(function isBoolean(i){return!("[object Boolean]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(ie.call(i));if(function isString(i){return!("[object String]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(inspect(String(i)));if(!function isDate(i){return!("[object Date]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i)&&!isRegExp(i)){var at=arrObjKeys(i,inspect),st=Ve?Ve(i)===Object.prototype:i instanceof Object||i.constructor===Object,lt=i instanceof Object?"":"null prototype",ct=!st&&qe&&Object(i)===i&&qe in i?pe.call(toStr(i),8,-1):lt?"Object":"",ut=(st||"function"!=typeof i.constructor?"":i.constructor.name?i.constructor.name+" ":"")+(ct||lt?"["+we.call(_e.call([],ct||[],lt||[]),": ")+"] ":"");return 0===at.length?ut+"{}":xe?ut+"{"+indentedJoin(at,xe)+"}":ut+"{ "+we.call(at,", ")+" }"}return String(i)};var Ye=Object.prototype.hasOwnProperty||function(i){return i in this};function has(i,s){return Ye.call(i,s)}function toStr(i){return ae.call(i)}function indexOf(i,s){if(i.indexOf)return i.indexOf(s);for(var u=0,m=i.length;us.maxStringLength){var u=i.length-s.maxStringLength,m="... "+u+" more character"+(u>1?"s":"");return inspectString(pe.call(i,0,s.maxStringLength),s)+m}return wrapQuotes(de.call(de.call(i,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte),"single",s)}function lowbyte(i){var s=i.charCodeAt(0),u={8:"b",9:"t",10:"n",12:"f",13:"r"}[s];return u?"\\"+u:"\\x"+(s<16?"0":"")+fe.call(s.toString(16))}function markBoxed(i){return"Object("+i+")"}function weakCollectionOf(i){return i+" { ? }"}function collectionOf(i,s,u,m){return i+" ("+s+") {"+(m?indentedJoin(u,m):we.call(u,", "))+"}"}function indentedJoin(i,s){if(0===i.length)return"";var u="\n"+s.prev+s.base;return u+we.call(i,","+u)+"\n"+s.prev}function arrObjKeys(i,s){var u=isArray(i),m=[];if(u){m.length=i.length;for(var v=0;v{var s,u,m=i.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(i){if(s===setTimeout)return setTimeout(i,0);if((s===defaultSetTimout||!s)&&setTimeout)return s=setTimeout,setTimeout(i,0);try{return s(i,0)}catch(u){try{return s.call(null,i,0)}catch(u){return s.call(this,i,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(i){s=defaultSetTimout}try{u="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(i){u=defaultClearTimeout}}();var v,_=[],j=!1,M=-1;function cleanUpNextTick(){j&&v&&(j=!1,v.length?_=v.concat(_):M=-1,_.length&&drainQueue())}function drainQueue(){if(!j){var i=runTimeout(cleanUpNextTick);j=!0;for(var s=_.length;s;){for(v=_,_=[];++M1)for(var u=1;u{"use strict";var m=u(50414);function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,i.exports=function(){function shim(i,s,u,v,_,j){if(j!==m){var M=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw M.name="Invariant Violation",M}}function getShim(){return shim}shim.isRequired=shim;var i={array:shim,bigint:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return i.PropTypes=i,i}},45697:(i,s,u)=>{i.exports=u(92703)()},50414:i=>{"use strict";i.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},55798:i=>{"use strict";var s=String.prototype.replace,u=/%20/g,m="RFC1738",v="RFC3986";i.exports={default:v,formatters:{RFC1738:function(i){return s.call(i,u,"+")},RFC3986:function(i){return String(i)}},RFC1738:m,RFC3986:v}},80129:(i,s,u)=>{"use strict";var m=u(58261),v=u(55235),_=u(55798);i.exports={formats:_,parse:v,stringify:m}},55235:(i,s,u)=>{"use strict";var m=u(12769),v=Object.prototype.hasOwnProperty,_=Array.isArray,j={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:m.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(i){return i.replace(/&#(\d+);/g,(function(i,s){return String.fromCharCode(parseInt(s,10))}))},parseArrayValue=function(i,s){return i&&"string"==typeof i&&s.comma&&i.indexOf(",")>-1?i.split(","):i},M=function parseQueryStringKeys(i,s,u,m){if(i){var _=u.allowDots?i.replace(/\.([^.[]+)/g,"[$1]"):i,j=/(\[[^[\]]*])/g,M=u.depth>0&&/(\[[^[\]]*])/.exec(_),$=M?_.slice(0,M.index):_,W=[];if($){if(!u.plainObjects&&v.call(Object.prototype,$)&&!u.allowPrototypes)return;W.push($)}for(var X=0;u.depth>0&&null!==(M=j.exec(_))&&X=0;--_){var j,M=i[_];if("[]"===M&&u.parseArrays)j=[].concat(v);else{j=u.plainObjects?Object.create(null):{};var $="["===M.charAt(0)&&"]"===M.charAt(M.length-1)?M.slice(1,-1):M,W=parseInt($,10);u.parseArrays||""!==$?!isNaN(W)&&M!==$&&String(W)===$&&W>=0&&u.parseArrays&&W<=u.arrayLimit?(j=[])[W]=v:"__proto__"!==$&&(j[$]=v):j={0:v}}v=j}return v}(W,s,u,m)}};i.exports=function(i,s){var u=function normalizeParseOptions(i){if(!i)return j;if(null!==i.decoder&&void 0!==i.decoder&&"function"!=typeof i.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==i.charset&&"utf-8"!==i.charset&&"iso-8859-1"!==i.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var s=void 0===i.charset?j.charset:i.charset;return{allowDots:void 0===i.allowDots?j.allowDots:!!i.allowDots,allowPrototypes:"boolean"==typeof i.allowPrototypes?i.allowPrototypes:j.allowPrototypes,allowSparse:"boolean"==typeof i.allowSparse?i.allowSparse:j.allowSparse,arrayLimit:"number"==typeof i.arrayLimit?i.arrayLimit:j.arrayLimit,charset:s,charsetSentinel:"boolean"==typeof i.charsetSentinel?i.charsetSentinel:j.charsetSentinel,comma:"boolean"==typeof i.comma?i.comma:j.comma,decoder:"function"==typeof i.decoder?i.decoder:j.decoder,delimiter:"string"==typeof i.delimiter||m.isRegExp(i.delimiter)?i.delimiter:j.delimiter,depth:"number"==typeof i.depth||!1===i.depth?+i.depth:j.depth,ignoreQueryPrefix:!0===i.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof i.interpretNumericEntities?i.interpretNumericEntities:j.interpretNumericEntities,parameterLimit:"number"==typeof i.parameterLimit?i.parameterLimit:j.parameterLimit,parseArrays:!1!==i.parseArrays,plainObjects:"boolean"==typeof i.plainObjects?i.plainObjects:j.plainObjects,strictNullHandling:"boolean"==typeof i.strictNullHandling?i.strictNullHandling:j.strictNullHandling}}(s);if(""===i||null==i)return u.plainObjects?Object.create(null):{};for(var $="string"==typeof i?function parseQueryStringValues(i,s){var u,M={},$=s.ignoreQueryPrefix?i.replace(/^\?/,""):i,W=s.parameterLimit===1/0?void 0:s.parameterLimit,X=$.split(s.delimiter,W),Y=-1,Z=s.charset;if(s.charsetSentinel)for(u=0;u-1&&(ie=_(ie)?[ie]:ie),v.call(M,ee)?M[ee]=m.combine(M[ee],ie):M[ee]=ie}return M}(i,u):i,W=u.plainObjects?Object.create(null):{},X=Object.keys($),Y=0;Y{"use strict";var m=u(37478),v=u(12769),_=u(55798),j=Object.prototype.hasOwnProperty,M={brackets:function brackets(i){return i+"[]"},comma:"comma",indices:function indices(i,s){return i+"["+s+"]"},repeat:function repeat(i){return i}},$=Array.isArray,W=String.prototype.split,X=Array.prototype.push,pushToArray=function(i,s){X.apply(i,$(s)?s:[s])},Y=Date.prototype.toISOString,Z=_.default,ee={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:v.encode,encodeValuesOnly:!1,format:Z,formatter:_.formatters[Z],indices:!1,serializeDate:function serializeDate(i){return Y.call(i)},skipNulls:!1,strictNullHandling:!1},ie={},ae=function stringify(i,s,u,_,j,M,X,Y,Z,ae,le,ce,pe,de,fe,ye){for(var be=i,_e=ye,we=0,Se=!1;void 0!==(_e=_e.get(ie))&&!Se;){var xe=_e.get(i);if(we+=1,void 0!==xe){if(xe===we)throw new RangeError("Cyclic object value");Se=!0}void 0===_e.get(ie)&&(we=0)}if("function"==typeof Y?be=Y(s,be):be instanceof Date?be=le(be):"comma"===u&&$(be)&&(be=v.maybeMap(be,(function(i){return i instanceof Date?le(i):i}))),null===be){if(j)return X&&!de?X(s,ee.encoder,fe,"key",ce):s;be=""}if(function isNonNullishPrimitive(i){return"string"==typeof i||"number"==typeof i||"boolean"==typeof i||"symbol"==typeof i||"bigint"==typeof i}(be)||v.isBuffer(be)){if(X){var Ie=de?s:X(s,ee.encoder,fe,"key",ce);if("comma"===u&&de){for(var Pe=W.call(String(be),","),Te="",Re=0;Re0?be.join(",")||null:void 0}];else if($(Y))qe=Y;else{var Ve=Object.keys(be);qe=Z?Ve.sort(Z):Ve}for(var We=_&&$(be)&&1===be.length?s+"[]":s,He=0;He0?fe+de:""}},12769:(i,s,u)=>{"use strict";var m=u(55798),v=Object.prototype.hasOwnProperty,_=Array.isArray,j=function(){for(var i=[],s=0;s<256;++s)i.push("%"+((s<16?"0":"")+s.toString(16)).toUpperCase());return i}(),M=function arrayToObject(i,s){for(var u=s&&s.plainObjects?Object.create(null):{},m=0;m1;){var s=i.pop(),u=s.obj[s.prop];if(_(u)){for(var m=[],v=0;v=48&&X<=57||X>=65&&X<=90||X>=97&&X<=122||_===m.RFC1738&&(40===X||41===X)?$+=M.charAt(W):X<128?$+=j[X]:X<2048?$+=j[192|X>>6]+j[128|63&X]:X<55296||X>=57344?$+=j[224|X>>12]+j[128|X>>6&63]+j[128|63&X]:(W+=1,X=65536+((1023&X)<<10|1023&M.charCodeAt(W)),$+=j[240|X>>18]+j[128|X>>12&63]+j[128|X>>6&63]+j[128|63&X])}return $},isBuffer:function isBuffer(i){return!(!i||"object"!=typeof i)&&!!(i.constructor&&i.constructor.isBuffer&&i.constructor.isBuffer(i))},isRegExp:function isRegExp(i){return"[object RegExp]"===Object.prototype.toString.call(i)},maybeMap:function maybeMap(i,s){if(_(i)){for(var u=[],m=0;m{"use strict";var u=Object.prototype.hasOwnProperty;function decode(i){try{return decodeURIComponent(i.replace(/\+/g," "))}catch(i){return null}}function encode(i){try{return encodeURIComponent(i)}catch(i){return null}}s.stringify=function querystringify(i,s){s=s||"";var m,v,_=[];for(v in"string"!=typeof s&&(s="?"),i)if(u.call(i,v)){if((m=i[v])||null!=m&&!isNaN(m)||(m=""),v=encode(v),m=encode(m),null===v||null===m)continue;_.push(v+"="+m)}return _.length?s+_.join("&"):""},s.parse=function querystring(i){for(var s,u=/([^=?#&]+)=?([^&]*)/g,m={};s=u.exec(i);){var v=decode(s[1]),_=decode(s[2]);null===v||null===_||v in m||(m[v]=_)}return m}},14419:(i,s,u)=>{const m=u(60697),v=u(69450),_=m.types;i.exports=class RandExp{constructor(i,s){if(this._setDefaults(i),i instanceof RegExp)this.ignoreCase=i.ignoreCase,this.multiline=i.multiline,i=i.source;else{if("string"!=typeof i)throw new Error("Expected a regexp or string");this.ignoreCase=s&&-1!==s.indexOf("i"),this.multiline=s&&-1!==s.indexOf("m")}this.tokens=m(i)}_setDefaults(i){this.max=null!=i.max?i.max:null!=RandExp.prototype.max?RandExp.prototype.max:100,this.defaultRange=i.defaultRange?i.defaultRange:this.defaultRange.clone(),i.randInt&&(this.randInt=i.randInt)}gen(){return this._gen(this.tokens,[])}_gen(i,s){var u,m,v,j,M;switch(i.type){case _.ROOT:case _.GROUP:if(i.followedBy||i.notFollowedBy)return"";for(i.remember&&void 0===i.groupNumber&&(i.groupNumber=s.push(null)-1),m="",j=0,M=(u=i.options?this._randSelect(i.options):i.stack).length;j{"use strict";var m=u(34155),v=65536,_=4294967295;var j=u(89509).Buffer,M=u.g.crypto||u.g.msCrypto;M&&M.getRandomValues?i.exports=function randomBytes(i,s){if(i>_)throw new RangeError("requested too many random bytes");var u=j.allocUnsafe(i);if(i>0)if(i>v)for(var $=0;${"use strict";function _typeof(i){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},_typeof(i)}Object.defineProperty(s,"__esModule",{value:!0}),s.CopyToClipboard=void 0;var m=_interopRequireDefault(u(67294)),v=_interopRequireDefault(u(20640)),_=["text","onCopy","options","children"];function _interopRequireDefault(i){return i&&i.__esModule?i:{default:i}}function ownKeys(i,s){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(i);s&&(m=m.filter((function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable}))),u.push.apply(u,m)}return u}function _objectSpread(i){for(var s=1;s=0||(v[u]=i[u]);return v}(i,s);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||Object.prototype.propertyIsEnumerable.call(i,u)&&(v[u]=i[u])}return v}function _defineProperties(i,s){for(var u=0;u{"use strict";var m=u(74300).CopyToClipboard;m.CopyToClipboard=m,i.exports=m},53441:(i,s,u)=>{"use strict";function _typeof(i){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},_typeof(i)}Object.defineProperty(s,"__esModule",{value:!0}),s.DebounceInput=void 0;var m=_interopRequireDefault(u(67294)),v=_interopRequireDefault(u(91296)),_=["element","onChange","value","minLength","debounceTimeout","forceNotifyByEnter","forceNotifyOnBlur","onKeyDown","onBlur","inputRef"];function _interopRequireDefault(i){return i&&i.__esModule?i:{default:i}}function _objectWithoutProperties(i,s){if(null==i)return{};var u,m,v=function _objectWithoutPropertiesLoose(i,s){if(null==i)return{};var u,m,v={},_=Object.keys(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||(v[u]=i[u]);return v}(i,s);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||Object.prototype.propertyIsEnumerable.call(i,u)&&(v[u]=i[u])}return v}function ownKeys(i,s){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(i);s&&(m=m.filter((function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable}))),u.push.apply(u,m)}return u}function _objectSpread(i){for(var s=1;s=m?u.notify(i):s.length>v.length&&u.notify(_objectSpread(_objectSpread({},i),{},{target:_objectSpread(_objectSpread({},i.target),{},{value:""})}))}))})),_defineProperty(_assertThisInitialized(u),"onKeyDown",(function(i){"Enter"===i.key&&u.forceNotify(i);var s=u.props.onKeyDown;s&&(i.persist(),s(i))})),_defineProperty(_assertThisInitialized(u),"onBlur",(function(i){u.forceNotify(i);var s=u.props.onBlur;s&&(i.persist(),s(i))})),_defineProperty(_assertThisInitialized(u),"createNotifier",(function(i){if(i<0)u.notify=function(){return null};else if(0===i)u.notify=u.doNotify;else{var s=(0,v.default)((function(i){u.isDebouncing=!1,u.doNotify(i)}),i);u.notify=function(i){u.isDebouncing=!0,s(i)},u.flush=function(){return s.flush()},u.cancel=function(){u.isDebouncing=!1,s.cancel()}}})),_defineProperty(_assertThisInitialized(u),"doNotify",(function(){u.props.onChange.apply(void 0,arguments)})),_defineProperty(_assertThisInitialized(u),"forceNotify",(function(i){var s=u.props.debounceTimeout;if(u.isDebouncing||!(s>0)){u.cancel&&u.cancel();var m=u.state.value,v=u.props.minLength;m.length>=v?u.doNotify(i):u.doNotify(_objectSpread(_objectSpread({},i),{},{target:_objectSpread(_objectSpread({},i.target),{},{value:m})}))}})),u.isDebouncing=!1,u.state={value:void 0===i.value||null===i.value?"":i.value};var m=u.props.debounceTimeout;return u.createNotifier(m),u}return function _createClass(i,s,u){return s&&_defineProperties(i.prototype,s),u&&_defineProperties(i,u),Object.defineProperty(i,"prototype",{writable:!1}),i}(DebounceInput,[{key:"componentDidUpdate",value:function componentDidUpdate(i){if(!this.isDebouncing){var s=this.props,u=s.value,m=s.debounceTimeout,v=i.debounceTimeout,_=i.value,j=this.state.value;void 0!==u&&_!==u&&j!==u&&this.setState({value:u}),m!==v&&this.createNotifier(m)}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.flush&&this.flush()}},{key:"render",value:function render(){var i,s,u=this.props,v=u.element,j=(u.onChange,u.value,u.minLength,u.debounceTimeout,u.forceNotifyByEnter),M=u.forceNotifyOnBlur,$=u.onKeyDown,W=u.onBlur,X=u.inputRef,Y=_objectWithoutProperties(u,_),Z=this.state.value;i=j?{onKeyDown:this.onKeyDown}:$?{onKeyDown:$}:{},s=M?{onBlur:this.onBlur}:W?{onBlur:W}:{};var ee=X?{ref:X}:{};return m.default.createElement(v,_objectSpread(_objectSpread(_objectSpread(_objectSpread({},Y),{},{onChange:this.onChange,value:Z},i),s),ee))}}]),DebounceInput}(m.default.PureComponent);s.DebounceInput=j,_defineProperty(j,"defaultProps",{element:"input",type:"text",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},775:(i,s,u)=>{"use strict";var m=u(53441).DebounceInput;m.DebounceInput=m,i.exports=m},64448:(i,s,u)=>{"use strict";var m=u(67294),v=u(27418),_=u(63840);function y(i){for(var s="https://reactjs.org/docs/error-decoder.html?invariant="+i,u=1;u

\n"},RC.blockquote_close=function(i,s){return"
"+DC(i,s)},RC.code=function(i,s){return i[s].block?"
"+escapeHtml(i[s].content)+"
"+DC(i,s):""+escapeHtml(i[s].content)+""},RC.fence=function(i,s,u,m,v){var _,j,M=i[s],$="",W=u.langPrefix;if(M.params){if(j=(_=M.params.split(/\s+/g)).join(" "),index_browser_has(v.rules.fence_custom,_[0]))return v.rules.fence_custom[_[0]](i,s,u,m,v);$=' class="'+W+escapeHtml(replaceEntities(unescapeMd(j)))+'"'}return"
"+(u.highlight&&u.highlight.apply(u.highlight,[M.content].concat(_))||escapeHtml(M.content))+"
"+DC(i,s)},RC.fence_custom={},RC.heading_open=function(i,s){return""},RC.heading_close=function(i,s){return"\n"},RC.hr=function(i,s,u){return(u.xhtmlOut?"
":"
")+DC(i,s)},RC.bullet_list_open=function(){return"
    \n"},RC.bullet_list_close=function(i,s){return"
"+DC(i,s)},RC.list_item_open=function(){return"
  • "},RC.list_item_close=function(){return"
  • \n"},RC.ordered_list_open=function(i,s){var u=i[s];return"1?' start="'+u.order+'"':"")+">\n"},RC.ordered_list_close=function(i,s){return""+DC(i,s)},RC.paragraph_open=function(i,s){return i[s].tight?"":"

    "},RC.paragraph_close=function(i,s){var u=!(i[s].tight&&s&&"inline"===i[s-1].type&&!i[s-1].content);return(i[s].tight?"":"

    ")+(u?DC(i,s):"")},RC.link_open=function(i,s,u){var m=i[s].title?' title="'+escapeHtml(replaceEntities(i[s].title))+'"':"",v=u.linkTarget?' target="'+u.linkTarget+'"':"";return'
    "},RC.link_close=function(){return""},RC.image=function(i,s,u){var m=' src="'+escapeHtml(i[s].src)+'"',v=i[s].title?' title="'+escapeHtml(replaceEntities(i[s].title))+'"':"";return""},RC.table_open=function(){return"\n"},RC.table_close=function(){return"
    \n"},RC.thead_open=function(){return"\n"},RC.thead_close=function(){return"\n"},RC.tbody_open=function(){return"\n"},RC.tbody_close=function(){return"\n"},RC.tr_open=function(){return""},RC.tr_close=function(){return"\n"},RC.th_open=function(i,s){var u=i[s];return""},RC.th_close=function(){return""},RC.td_open=function(i,s){var u=i[s];return""},RC.td_close=function(){return""},RC.strong_open=function(){return""},RC.strong_close=function(){return""},RC.em_open=function(){return""},RC.em_close=function(){return""},RC.del_open=function(){return""},RC.del_close=function(){return""},RC.ins_open=function(){return""},RC.ins_close=function(){return""},RC.mark_open=function(){return""},RC.mark_close=function(){return""},RC.sub=function(i,s){return""+escapeHtml(i[s].content)+""},RC.sup=function(i,s){return""+escapeHtml(i[s].content)+""},RC.hardbreak=function(i,s,u){return u.xhtmlOut?"
    \n":"
    \n"},RC.softbreak=function(i,s,u){return u.breaks?u.xhtmlOut?"
    \n":"
    \n":"\n"},RC.text=function(i,s){return escapeHtml(i[s].content)},RC.htmlblock=function(i,s){return i[s].content},RC.htmltag=function(i,s){return i[s].content},RC.abbr_open=function(i,s){return''},RC.abbr_close=function(){return""},RC.footnote_ref=function(i,s){var u=Number(i[s].id+1).toString(),m="fnref"+u;return i[s].subId>0&&(m+=":"+i[s].subId),'['+u+"]"},RC.footnote_block_open=function(i,s,u){return(u.xhtmlOut?'
    \n':'
    \n')+'
    \n
      \n'},RC.footnote_block_close=function(){return"
    \n
    \n"},RC.footnote_open=function(i,s){return'
  • '},RC.footnote_close=function(){return"
  • \n"},RC.footnote_anchor=function(i,s){var u="fnref"+Number(i[s].id+1).toString();return i[s].subId>0&&(u+=":"+i[s].subId),' '},RC.dl_open=function(){return"
    \n"},RC.dt_open=function(){return"
    "},RC.dd_open=function(){return"
    "},RC.dl_close=function(){return"
    \n"},RC.dt_close=function(){return"\n"},RC.dd_close=function(){return"\n"};var DC=RC.getBreak=function getBreak(i,s){return(s=nextToken(i,s))1)break;if(41===u&&--m<0)break;s++}return _!==s&&(v=unescapeMd(i.src.slice(_,s)),!!i.parser.validateLink(v)&&(i.linkContent=v,i.pos=s,!0))}function parseLinkTitle(i,s){var u,m=s,v=i.posMax,_=i.src.charCodeAt(s);if(34!==_&&39!==_&&40!==_)return!1;for(s++,40===_&&(_=41);s=i.length)&&!zC.test(i[s])}function replaceAt(i,s,u){return i.substr(0,s)+u+i.substr(s+1)}var VC=[["block",function block(i){i.inlineMode?i.tokens.push({type:"inline",content:i.src.replace(/\n/g," ").trim(),level:0,lines:[0,1],children:[]}):i.block.parse(i.src,i.options,i.env,i.tokens)}],["abbr",function abbr(i){var s,u,m,v,_=i.tokens;if(!i.inlineMode)for(s=1,u=_.length-1;s0?j[s].count:1,m=0;m=0;s--)if("text"===(_=v[s]).type){for($=0,j=_.content,X.lastIndex=0,W=_.level,M=[];Y=X.exec(j);)X.lastIndex>$&&M.push({type:"text",content:j.slice($,Y.index+Y[1].length),level:W}),M.push({type:"abbr_open",title:i.env.abbreviations[":"+Y[2]],level:W++}),M.push({type:"text",content:Y[2],level:W}),M.push({type:"abbr_close",level:--W}),$=X.lastIndex-Y[3].length;M.length&&($=0;_--)if("inline"===i.tokens[_].type)for(s=(v=i.tokens[_].children).length-1;s>=0;s--)"text"===(u=v[s]).type&&(m=replaceScopedAbbr(m=u.content),LC.test(m)&&(m=m.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1—$2").replace(/(^|\s)--(\s|$)/gm,"$1–$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1–$2")),u.content=m)}],["smartquotes",function smartquotes(i){var s,u,m,v,_,j,M,$,W,X,Y,Z,ee,ie,ae,le,ce;if(i.options.typographer)for(ce=[],ae=i.tokens.length-1;ae>=0;ae--)if("inline"===i.tokens[ae].type)for(le=i.tokens[ae].children,ce.length=0,s=0;s=0&&!(ce[ee].level<=M);ee--);ce.length=ee+1,_=0,j=(m=u.content).length;e:for(;_=0&&(X=ce[ee],!(ce[ee].level=(v=i.eMarks[s])||42!==(u=i.src.charCodeAt(m++))&&45!==u&&43!==u||m=v)return-1;if((u=i.src.charCodeAt(m++))<48||u>57)return-1;for(;;){if(m>=v)return-1;if(!((u=i.src.charCodeAt(m++))>=48&&u<=57)){if(41===u||46===u)break;return-1}}return m=this.eMarks[i]},StateBlock.prototype.skipEmptyLines=function skipEmptyLines(i){for(var s=this.lineMax;iu;)if(s!==this.src.charCodeAt(--i))return i+1;return i},StateBlock.prototype.getLines=function getLines(i,s,u,m){var v,_,j,M,$,W=i;if(i>=s)return"";if(W+1===s)return _=this.bMarks[W]+Math.min(this.tShift[W],u),j=m?this.eMarks[W]+1:this.eMarks[W],this.src.slice(_,j);for(M=new Array(s-i),v=0;Wu&&($=u),$<0&&($=0),_=this.bMarks[W]+$,j=W+1]/,HC=/^<\/([a-zA-Z]{1,15})[\s>]/;function index_browser_getLine(i,s){var u=i.bMarks[s]+i.blkIndent,m=i.eMarks[s];return i.src.substr(u,m-u)}function skipMarker(i,s){var u,m,v=i.bMarks[s]+i.tShift[s],_=i.eMarks[s];return v>=_||126!==(m=i.src.charCodeAt(v++))&&58!==m||v===(u=i.skipSpaces(v))||u>=_?-1:u}var JC=[["code",function code(i,s,u){var m,v;if(i.tShift[s]-i.blkIndent<4)return!1;for(v=m=s+1;m=4))break;v=++m}return i.line=m,i.tokens.push({type:"code",content:i.getLines(s,v,4+i.blkIndent,!0),block:!0,lines:[s,i.line],level:i.level}),!0}],["fences",function fences(i,s,u,m){var v,_,j,M,$,W=!1,X=i.bMarks[s]+i.tShift[s],Y=i.eMarks[s];if(X+3>Y)return!1;if(126!==(v=i.src.charCodeAt(X))&&96!==v)return!1;if($=X,(_=(X=i.skipChars(X,v))-$)<3)return!1;if((j=i.src.slice(X,Y).trim()).indexOf("`")>=0)return!1;if(m)return!0;for(M=s;!(++M>=u)&&!((X=$=i.bMarks[M]+i.tShift[M])<(Y=i.eMarks[M])&&i.tShift[M]=4||(X=i.skipChars(X,v))-$<_||(X=i.skipSpaces(X))le)return!1;if(62!==i.src.charCodeAt(ae++))return!1;if(i.level>=i.options.maxNesting)return!1;if(m)return!0;for(32===i.src.charCodeAt(ae)&&ae++,$=i.blkIndent,i.blkIndent=0,M=[i.bMarks[s]],i.bMarks[s]=ae,_=(ae=ae=le,j=[i.tShift[s]],i.tShift[s]=ae-i.bMarks[s],Y=i.parser.ruler.getRules("blockquote"),v=s+1;v=(le=i.eMarks[v]));v++)if(62!==i.src.charCodeAt(ae++)){if(_)break;for(ie=!1,Z=0,ee=Y.length;Z=le,j.push(i.tShift[v]),i.tShift[v]=ae-i.bMarks[v];for(W=i.parentType,i.parentType="blockquote",i.tokens.push({type:"blockquote_open",lines:X=[s,0],level:i.level++}),i.parser.tokenize(i,s,v),i.tokens.push({type:"blockquote_close",level:--i.level}),i.parentType=W,X[1]=i.line,Z=0;Z$)return!1;if(42!==(v=i.src.charCodeAt(M++))&&45!==v&&95!==v)return!1;for(_=1;M<$;){if((j=i.src.charCodeAt(M++))!==v&&32!==j)return!1;j===v&&_++}return!(_<3)&&(m||(i.line=s+1,i.tokens.push({type:"hr",lines:[s,i.line],level:i.level})),!0)},["paragraph","blockquote","list"]],["list",function index_browser_list(i,s,u,m){var v,_,j,M,$,W,X,Y,Z,ee,ie,ae,le,ce,pe,de,fe,ye,be,_e,we,Se=!0;if((Y=skipOrderedListMarker(i,s))>=0)ae=!0;else{if(!((Y=skipBulletListMarker(i,s))>=0))return!1;ae=!1}if(i.level>=i.options.maxNesting)return!1;if(ie=i.src.charCodeAt(Y-1),m)return!0;for(ce=i.tokens.length,ae?(X=i.bMarks[s]+i.tShift[s],ee=Number(i.src.substr(X,Y-X-1)),i.tokens.push({type:"ordered_list_open",order:ee,lines:de=[s,0],level:i.level++})):i.tokens.push({type:"bullet_list_open",lines:de=[s,0],level:i.level++}),v=s,pe=!1,ye=i.parser.ruler.getRules("list");!(!(v=i.eMarks[v]?1:le-Y)>4&&(Z=1),Z<1&&(Z=1),_=Y-i.bMarks[v]+Z,i.tokens.push({type:"list_item_open",lines:fe=[s,0],level:i.level++}),M=i.blkIndent,$=i.tight,j=i.tShift[s],W=i.parentType,i.tShift[s]=le-i.bMarks[s],i.blkIndent=_,i.tight=!0,i.parentType="list",i.parser.tokenize(i,s,u,!0),i.tight&&!pe||(Se=!1),pe=i.line-s>1&&i.isEmpty(i.line-1),i.blkIndent=M,i.tShift[s]=j,i.tight=$,i.parentType=W,i.tokens.push({type:"list_item_close",level:--i.level}),v=s=i.line,fe[1]=v,le=i.bMarks[s],v>=u)||i.isEmpty(v)||i.tShift[v]X)return!1;if(91!==i.src.charCodeAt(W))return!1;if(94!==i.src.charCodeAt(W+1))return!1;if(i.level>=i.options.maxNesting)return!1;for(M=W+2;M=X||58!==i.src.charCodeAt(++M))&&(m||(M++,i.env.footnotes||(i.env.footnotes={}),i.env.footnotes.refs||(i.env.footnotes.refs={}),$=i.src.slice(W+2,M-2),i.env.footnotes.refs[":"+$]=-1,i.tokens.push({type:"footnote_reference_open",label:$,level:i.level++}),v=i.bMarks[s],_=i.tShift[s],j=i.parentType,i.tShift[s]=i.skipSpaces(M)-M,i.bMarks[s]=M,i.blkIndent+=4,i.parentType="footnote",i.tShift[s]=$)return!1;if(35!==(v=i.src.charCodeAt(M))||M>=$)return!1;for(_=1,v=i.src.charCodeAt(++M);35===v&&M<$&&_<=6;)_++,v=i.src.charCodeAt(++M);return!(_>6||M<$&&32!==v)&&(m||($=i.skipCharsBack($,32,M),(j=i.skipCharsBack($,35,M))>M&&32===i.src.charCodeAt(j-1)&&($=j),i.line=s+1,i.tokens.push({type:"heading_open",hLevel:_,lines:[s,i.line],level:i.level}),M<$&&i.tokens.push({type:"inline",content:i.src.slice(M,$).trim(),level:i.level+1,lines:[s,i.line],children:[]}),i.tokens.push({type:"heading_close",hLevel:_,level:i.level})),!0)},["paragraph","blockquote"]],["lheading",function lheading(i,s,u){var m,v,_,j=s+1;return!(j>=u)&&(!(i.tShift[j]3)&&(!((v=i.bMarks[j]+i.tShift[j])>=(_=i.eMarks[j]))&&((45===(m=i.src.charCodeAt(v))||61===m)&&(v=i.skipChars(v,m),!((v=i.skipSpaces(v))<_)&&(v=i.bMarks[s]+i.tShift[s],i.line=j+1,i.tokens.push({type:"heading_open",hLevel:61===m?1:2,lines:[s,i.line],level:i.level}),i.tokens.push({type:"inline",content:i.src.slice(v,i.eMarks[s]).trim(),level:i.level+1,lines:[s,i.line-1],children:[]}),i.tokens.push({type:"heading_close",hLevel:61===m?1:2,level:i.level}),!0))))))}],["htmlblock",function htmlblock(i,s,u,m){var v,_,j,M=i.bMarks[s],$=i.eMarks[s],W=i.tShift[s];if(M+=W,!i.options.html)return!1;if(W>3||M+2>=$)return!1;if(60!==i.src.charCodeAt(M))return!1;if(33===(v=i.src.charCodeAt(M+1))||63===v){if(m)return!0}else{if(47!==v&&!function isLetter$1(i){var s=32|i;return s>=97&&s<=122}(v))return!1;if(47===v){if(!(_=i.src.slice(M,$).match(HC)))return!1}else if(!(_=i.src.slice(M,$).match(KC)))return!1;if(!0!==WC[_[1].toLowerCase()])return!1;if(m)return!0}for(j=s+1;ju)return!1;if($=s+1,i.tShift[$]=i.eMarks[$])return!1;if(124!==(v=i.src.charCodeAt(j))&&45!==v&&58!==v)return!1;if(_=index_browser_getLine(i,s+1),!/^[-:| ]+$/.test(_))return!1;if((W=_.split("|"))<=2)return!1;for(Y=[],M=0;M=0;if(X=s+1,i.isEmpty(X)&&++X>u)return!1;if(i.tShift[X]=i.options.maxNesting)return!1;W=i.tokens.length,i.tokens.push({type:"dl_open",lines:$=[s,0],level:i.level++}),j=s,_=X;e:for(;;){for(ce=!0,le=!1,i.tokens.push({type:"dt_open",lines:[j,j],level:i.level++}),i.tokens.push({type:"inline",content:i.getLines(j,j+1,i.blkIndent,!1).trim(),level:i.level+1,lines:[j,j],children:[]}),i.tokens.push({type:"dt_close",level:--i.level});;){if(i.tokens.push({type:"dd_open",lines:M=[X,0],level:i.level++}),ae=i.tight,Z=i.ddIndent,Y=i.blkIndent,ie=i.tShift[_],ee=i.parentType,i.blkIndent=i.ddIndent=i.tShift[_]+2,i.tShift[_]=v-i.bMarks[_],i.tight=!0,i.parentType="deflist",i.parser.tokenize(i,_,u,!0),i.tight&&!le||(ce=!1),le=i.line-_>1&&i.isEmpty(i.line-1),i.tShift[_]=ie,i.tight=ae,i.parentType=ee,i.blkIndent=Y,i.ddIndent=Z,i.tokens.push({type:"dd_close",level:--i.level}),M[1]=X=i.line,X>=u)break e;if(i.tShift[X]=u)break;if(j=X,i.isEmpty(j))break;if(i.tShift[j]=u)break;if(i.isEmpty(_)&&_++,_>=u)break;if(i.tShift[_]3)){for(v=!1,_=0,j=M.length;_=u))&&!(i.tShift[j]=0&&(i=i.replace(GC,(function(s,u){var m;return 10===i.charCodeAt(u)?(_=u+1,j=0,s):(m=" ".slice((u-_-j)%4),j=u-_+1,m)}))),v=new StateBlock(i,this,s,u,m),this.tokenize(v,v.line,v.lineMax)};for(var QC=[],ZC=0;ZC<256;ZC++)QC.push(0);function isAlphaNum(i){return i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122}function scanDelims(i,s){var u,m,v,_=s,j=!0,M=!0,$=i.posMax,W=i.src.charCodeAt(s);for(u=s>0?i.src.charCodeAt(s-1):-1;_<$&&i.src.charCodeAt(_)===W;)_++;return _>=$&&(j=!1),(v=_-s)>=4?j=M=!1:(32!==(m=_<$?i.src.charCodeAt(_):-1)&&10!==m||(j=!1),32!==u&&10!==u||(M=!1),95===W&&(isAlphaNum(u)&&(j=!1),isAlphaNum(m)&&(M=!1))),{can_open:j,can_close:M,delims:v}}"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach((function(i){QC[i.charCodeAt(0)]=1}));var tj=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;var rj=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;var nj=["coap","doi","javascript","aaa","aaas","about","acap","cap","cid","crid","data","dav","dict","dns","file","ftp","geo","go","gopher","h323","http","https","iax","icap","im","imap","info","ipp","iris","iris.beep","iris.xpc","iris.xpcs","iris.lwz","ldap","mailto","mid","msrp","msrps","mtqp","mupdate","news","nfs","ni","nih","nntp","opaquelocktoken","pop","pres","rtsp","service","session","shttp","sieve","sip","sips","sms","snmp","soap.beep","soap.beeps","tag","tel","telnet","tftp","thismessage","tn3270","tip","tv","urn","vemmi","ws","wss","xcon","xcon-userid","xmlrpc.beep","xmlrpc.beeps","xmpp","z39.50r","z39.50s","adiumxtra","afp","afs","aim","apt","attachment","aw","beshare","bitcoin","bolo","callto","chrome","chrome-extension","com-eventbrite-attendee","content","cvs","dlna-playsingle","dlna-playcontainer","dtn","dvb","ed2k","facetime","feed","finger","fish","gg","git","gizmoproject","gtalk","hcp","icon","ipn","irc","irc6","ircs","itms","jar","jms","keyparc","lastfm","ldaps","magnet","maps","market","message","mms","ms-help","msnim","mumble","mvn","notes","oid","palm","paparazzi","platform","proxy","psyc","query","res","resource","rmi","rsync","rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify","ssh","steam","svn","teamspeak","things","udp","unreal","ut2004","ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri","ymsgr"],oj=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,sj=/^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;function replace$1(i,s){return i=i.source,s=s||"",function self(u,m){return u?(m=m.source||m,i=i.replace(u,m),self):new RegExp(i,s)}}var uj=replace$1(/(?:unquoted|single_quoted|double_quoted)/)("unquoted",/[^"'=<>`\x00-\x20]+/)("single_quoted",/'[^']*'/)("double_quoted",/"[^"]*"/)(),pj=replace$1(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)("attr_name",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)("attr_value",uj)(),yj=replace$1(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)("attribute",pj)(),vj=replace$1(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)("open_tag",yj)("close_tag",/<\/[A-Za-z][A-Za-z0-9]*\s*>/)("comment",/|/)("processing",/<[?].*?[?]>/)("declaration",/]*>/)("cdata",//)();var _j=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,Ej=/^&([a-z][a-z0-9]{1,31});/i;var xj=[["text",function index_browser_text(i,s){for(var u=i.pos;u=0&&32===i.pending.charCodeAt(u))if(u>=1&&32===i.pending.charCodeAt(u-1)){for(var _=u-2;_>=0;_--)if(32!==i.pending.charCodeAt(_)){i.pending=i.pending.substring(0,_+1);break}i.push({type:"hardbreak",level:i.level})}else i.pending=i.pending.slice(0,-1),i.push({type:"softbreak",level:i.level});else i.push({type:"softbreak",level:i.level});for(v++;v=M)return!1;if(126!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),126===_)return!1;if(126===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m$+3)return i.pos+=m-$,s||(i.pending+=i.src.slice($,m)),!0;for(i.pos=$+2,v=1;i.pos+1=M)return!1;if(43!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),43===_)return!1;if(43===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m=M)return!1;if(61!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),61===_)return!1;if(61===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m=i.options.maxNesting)return!1;for(i.pos=X+u,M=[u];i.pos=v)return!1;if(i.level>=i.options.maxNesting)return!1;for(i.pos=_+1;i.pos=v)return!1;if(i.level>=i.options.maxNesting)return!1;for(i.pos=_+1;i.pos=i.options.maxNesting)return!1;if(u=ee+1,(m=parseLinkLabel(i,ee))<0)return!1;if((M=m+1)=Z)return!1;for(ee=M,parseLinkDestination(i,M)?(_=i.linkContent,M=i.pos):_="",ee=M;M=Z||41!==i.src.charCodeAt(M))return i.pos=Y,!1;M++}else{if(i.linkLevel>0)return!1;for(;M=0?v=i.src.slice(ee,M++):M=ee-1),v||(void 0===v&&(M=m+1),v=i.src.slice(u,m)),!($=i.env.references[normalizeReference(v)]))return i.pos=Y,!1;_=$.href,j=$.title}return s||(i.pos=u,i.posMax=m,X?i.push({type:"image",src:_,title:j,alt:i.src.substr(u,m-u),level:i.level}):(i.push({type:"link_open",href:_,title:j,level:i.level++}),i.linkLevel++,i.parser.tokenize(i),i.linkLevel--,i.push({type:"link_close",level:--i.level}))),i.pos=M,i.posMax=Z,!0}],["footnote_inline",function footnote_inline(i,s){var u,m,v,_,j=i.posMax,M=i.pos;return!(M+2>=j)&&(94===i.src.charCodeAt(M)&&(91===i.src.charCodeAt(M+1)&&(!(i.level>=i.options.maxNesting)&&(u=M+2,!((m=parseLinkLabel(i,M+1))<0)&&(s||(i.env.footnotes||(i.env.footnotes={}),i.env.footnotes.list||(i.env.footnotes.list=[]),v=i.env.footnotes.list.length,i.pos=u,i.posMax=m,i.push({type:"footnote_ref",id:v,level:i.level}),i.linkLevel++,_=i.tokens.length,i.parser.tokenize(i),i.env.footnotes.list[v]={tokens:i.tokens.splice(_)},i.linkLevel--),i.pos=m+1,i.posMax=j,!0)))))}],["footnote_ref",function footnote_ref(i,s){var u,m,v,_,j=i.posMax,M=i.pos;if(M+3>j)return!1;if(!i.env.footnotes||!i.env.footnotes.refs)return!1;if(91!==i.src.charCodeAt(M))return!1;if(94!==i.src.charCodeAt(M+1))return!1;if(i.level>=i.options.maxNesting)return!1;for(m=M+2;m=j)&&(m++,u=i.src.slice(M+2,m-1),void 0!==i.env.footnotes.refs[":"+u]&&(s||(i.env.footnotes.list||(i.env.footnotes.list=[]),i.env.footnotes.refs[":"+u]<0?(v=i.env.footnotes.list.length,i.env.footnotes.list[v]={label:u,count:0},i.env.footnotes.refs[":"+u]=v):v=i.env.footnotes.refs[":"+u],_=i.env.footnotes.list[v].count,i.env.footnotes.list[v].count++,i.push({type:"footnote_ref",id:v,subId:_,level:i.level})),i.pos=m,i.posMax=j,!0)))}],["autolink",function autolink(i,s){var u,m,v,_,j,M=i.pos;return 60===i.src.charCodeAt(M)&&(!((u=i.src.slice(M)).indexOf(">")<0)&&((m=u.match(sj))?!(nj.indexOf(m[1].toLowerCase())<0)&&(j=normalizeLink(_=m[0].slice(1,-1)),!!i.parser.validateLink(_)&&(s||(i.push({type:"link_open",href:j,level:i.level}),i.push({type:"text",content:_,level:i.level+1}),i.push({type:"link_close",level:i.level})),i.pos+=m[0].length,!0)):!!(v=u.match(oj))&&(j=normalizeLink("mailto:"+(_=v[0].slice(1,-1))),!!i.parser.validateLink(j)&&(s||(i.push({type:"link_open",href:j,level:i.level}),i.push({type:"text",content:_,level:i.level+1}),i.push({type:"link_close",level:i.level})),i.pos+=v[0].length,!0))))}],["htmltag",function htmltag(i,s){var u,m,v,_=i.pos;return!!i.options.html&&(v=i.posMax,!(60!==i.src.charCodeAt(_)||_+2>=v)&&(!(33!==(u=i.src.charCodeAt(_+1))&&63!==u&&47!==u&&!function isLetter$2(i){var s=32|i;return s>=97&&s<=122}(u))&&(!!(m=i.src.slice(_).match(vj))&&(s||i.push({type:"htmltag",content:i.src.slice(_,_+m[0].length),level:i.level}),i.pos+=m[0].length,!0))))}],["entity",function entity(i,s){var u,m,v=i.pos,_=i.posMax;if(38!==i.src.charCodeAt(v))return!1;if(v+1<_)if(35===i.src.charCodeAt(v+1)){if(m=i.src.slice(v).match(_j))return s||(u="x"===m[1][0].toLowerCase()?parseInt(m[1].slice(1),16):parseInt(m[1],10),i.pending+=isValidEntityCode(u)?fromCodePoint(u):fromCodePoint(65533)),i.pos+=m[0].length,!0}else if(m=i.src.slice(v).match(Ej)){var j=decodeEntity(m[1]);if(m[1]!==j)return s||(i.pending+=j),i.pos+=m[0].length,!0}return s||(i.pending+="&"),i.pos++,!0}]];function ParserInline(){this.ruler=new Ruler;for(var i=0;i0)i.pos=u;else{for(s=0;s=_)break}else i.pending+=i.src[i.pos++]}i.pending&&i.pushPending()},ParserInline.prototype.parse=function(i,s,u,m){var v=new StateInline(i,this,s,u,m);this.tokenize(v)};var Aj={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","replacements","smartquotes","references","abbr2","footnote_tail"]},block:{rules:["blockquote","code","fences","footnote","heading","hr","htmlblock","lheading","list","paragraph","table"]},inline:{rules:["autolink","backticks","del","emphasis","entity","escape","footnote_ref","htmltag","links","newline","text"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","abbr2"]},block:{rules:["blockquote","code","fences","heading","hr","htmlblock","lheading","list","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","htmltag","links","newline","text"]}}}};function StateCore(i,s,u){this.src=s,this.env=u,this.options=i.options,this.tokens=[],this.inlineMode=!1,this.inline=i.inline,this.block=i.block,this.renderer=i.renderer,this.typographer=i.typographer}function Remarkable(i,s){"string"!=typeof i&&(s=i,i="default"),s&&null!=s.linkify&&console.warn("linkify option is removed. Use linkify plugin instead:\n\nimport Remarkable from 'remarkable';\nimport linkify from 'remarkable/linkify';\nnew Remarkable().use(linkify)\n"),this.inline=new ParserInline,this.block=new ParserBlock,this.core=new Core,this.renderer=new Renderer,this.ruler=new Ruler,this.options={},this.configure(Aj[i]),this.set(s||{})}Remarkable.prototype.set=function(i){index_browser_assign(this.options,i)},Remarkable.prototype.configure=function(i){var s=this;if(!i)throw new Error("Wrong `remarkable` preset, check name/content");i.options&&s.set(i.options),i.components&&Object.keys(i.components).forEach((function(u){i.components[u].rules&&s[u].ruler.enable(i.components[u].rules,!0)}))},Remarkable.prototype.use=function(i,s){return i(this,s),this},Remarkable.prototype.parse=function(i,s){var u=new StateCore(this,i,s);return this.core.process(u),u.tokens},Remarkable.prototype.render=function(i,s){return s=s||{},this.renderer.render(this.parse(i,s),this.options,s)},Remarkable.prototype.parseInline=function(i,s){var u=new StateCore(this,i,s);return u.inlineMode=!0,this.core.process(u),u.tokens},Remarkable.prototype.renderInline=function(i,s){return s=s||{},this.renderer.render(this.parseInline(i,s),this.options,s)};function indexOf(i,s){if(Array.prototype.indexOf)return i.indexOf(s);for(var u=0,m=i.length;u=0;u--)!0===s(i[u])&&i.splice(u,1)}function throwUnhandledCaseError(i){throw new Error("Unhandled case for value: '".concat(i,"'"))}var Cj=function(){function HtmlTag(i){void 0===i&&(i={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=i.tagName||"",this.attrs=i.attrs||{},this.innerHTML=i.innerHtml||i.innerHTML||""}return HtmlTag.prototype.setTagName=function(i){return this.tagName=i,this},HtmlTag.prototype.getTagName=function(){return this.tagName||""},HtmlTag.prototype.setAttr=function(i,s){return this.getAttrs()[i]=s,this},HtmlTag.prototype.getAttr=function(i){return this.getAttrs()[i]},HtmlTag.prototype.setAttrs=function(i){return Object.assign(this.getAttrs(),i),this},HtmlTag.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},HtmlTag.prototype.setClass=function(i){return this.setAttr("class",i)},HtmlTag.prototype.addClass=function(i){for(var s,u=this.getClass(),m=this.whitespaceRegex,v=u?u.split(m):[],_=i.split(m);s=_.shift();)-1===indexOf(v,s)&&v.push(s);return this.getAttrs().class=v.join(" "),this},HtmlTag.prototype.removeClass=function(i){for(var s,u=this.getClass(),m=this.whitespaceRegex,v=u?u.split(m):[],_=i.split(m);v.length&&(s=_.shift());){var j=indexOf(v,s);-1!==j&&v.splice(j,1)}return this.getAttrs().class=v.join(" "),this},HtmlTag.prototype.getClass=function(){return this.getAttrs().class||""},HtmlTag.prototype.hasClass=function(i){return-1!==(" "+this.getClass()+" ").indexOf(" "+i+" ")},HtmlTag.prototype.setInnerHTML=function(i){return this.innerHTML=i,this},HtmlTag.prototype.setInnerHtml=function(i){return this.setInnerHTML(i)},HtmlTag.prototype.getInnerHTML=function(){return this.innerHTML||""},HtmlTag.prototype.getInnerHtml=function(){return this.getInnerHTML()},HtmlTag.prototype.toAnchorString=function(){var i=this.getTagName(),s=this.buildAttrsStr();return["<",i,s=s?" "+s:"",">",this.getInnerHtml(),""].join("")},HtmlTag.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var i=this.getAttrs(),s=[];for(var u in i)i.hasOwnProperty(u)&&s.push(u+'="'+i[u]+'"');return s.join(" ")},HtmlTag}();var jj=function(){function AnchorTagBuilder(i){void 0===i&&(i={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=i.newWindow||!1,this.truncate=i.truncate||{},this.className=i.className||""}return AnchorTagBuilder.prototype.build=function(i){return new Cj({tagName:"a",attrs:this.createAttrs(i),innerHtml:this.processAnchorText(i.getAnchorText())})},AnchorTagBuilder.prototype.createAttrs=function(i){var s={href:i.getAnchorHref()},u=this.createCssClass(i);return u&&(s.class=u),this.newWindow&&(s.target="_blank",s.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=_)return j.host.length==s?(j.host.substr(0,s-v)+u).substr(0,_+m):buildSegment($,_).substr(0,_+m);var W="";if(j.path&&(W+="/"+j.path),j.query&&(W+="?"+j.query),W){if(($+W).length>=_)return($+W).length==s?($+W).substr(0,s):($+buildSegment(W,_-$.length)).substr(0,_+m);$+=W}if(j.fragment){var X="#"+j.fragment;if(($+X).length>=_)return($+X).length==s?($+X).substr(0,s):($+buildSegment(X,_-$.length)).substr(0,_+m);$+=X}if(j.scheme&&j.host){var Y=j.scheme+"://";if(($+Y).length<_)return(Y+$).substr(0,s)}if($.length<=s)return $;var Z="";return _>0&&(Z=$.substr(-1*Math.floor(_/2))),($.substr(0,Math.ceil(_/2))+u+Z).substr(0,_+m)}(i,u):"middle"===m?function truncateMiddle(i,s,u){if(i.length<=s)return i;var m,v;null==u?(u="…",m=8,v=3):(m=u.length,v=u.length);var _=s-v,j="";return _>0&&(j=i.substr(-1*Math.floor(_/2))),(i.substr(0,Math.ceil(_/2))+u+j).substr(0,_+m)}(i,u):function truncateEnd(i,s,u){return function ellipsis(i,s,u){var m;return i.length>s&&(null==u?(u="…",m=3):m=u.length,i=i.substring(0,s-m)+u),i}(i,s,u)}(i,u)},AnchorTagBuilder}(),Ij=function(){function Match(i){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=i.tagBuilder,this.matchedText=i.matchedText,this.offset=i.offset}return Match.prototype.getMatchedText=function(){return this.matchedText},Match.prototype.setOffset=function(i){this.offset=i},Match.prototype.getOffset=function(){return this.offset},Match.prototype.getCssClassSuffixes=function(){return[this.getType()]},Match.prototype.buildTag=function(){return this.tagBuilder.build(this)},Match}(),extendStatics=function(i,s){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,s){i.__proto__=s}||function(i,s){for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&(i[u]=s[u])},extendStatics(i,s)};function tslib_es6_extends(i,s){if("function"!=typeof s&&null!==s)throw new TypeError("Class extends value "+String(s)+" is not a constructor or null");function __(){this.constructor=i}extendStatics(i,s),i.prototype=null===s?Object.create(s):(__.prototype=s.prototype,new __)}var __assign=function(){return __assign=Object.assign||function __assign(i){for(var s,u=1,m=arguments.length;u-1},UrlMatchValidator.isValidUriScheme=function(i){var s=i.match(this.uriSchemeRegex),u=s&&s[0].toLowerCase();return"javascript:"!==u&&"vbscript:"!==u},UrlMatchValidator.urlMatchDoesNotHaveProtocolOrDot=function(i,s){return!(!i||s&&this.hasFullProtocolRegex.test(s)||-1!==i.indexOf("."))},UrlMatchValidator.urlMatchDoesNotHaveAtLeastOneWordChar=function(i,s){return!(!i||!s)&&(!this.hasFullProtocolRegex.test(s)&&!this.hasWordCharAfterProtocolRegex.test(i))},UrlMatchValidator.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,UrlMatchValidator.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,UrlMatchValidator.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+oI+"]"),UrlMatchValidator.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,UrlMatchValidator}(),bI=(Dj=new RegExp("[/?#](?:["+lI+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+lI+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,getDomainNameStr(2),")","|","(","(//)?",/(?:www\.)/.source,getDomainNameStr(6),")","|","(","(//)?",getDomainNameStr(10)+"\\.",dI.source,"(?![-"+sI+"])",")",")","(?::[0-9]+)?","(?:"+Dj.source+")?"].join(""),"gi")),_I=new RegExp("["+lI+"]"),wI=function(i){function UrlMatcher(s){var u=i.call(this,s)||this;return u.stripPrefix={scheme:!0,www:!0},u.stripTrailingSlash=!0,u.decodePercentEncoding=!0,u.matcherRegex=bI,u.wordCharRegExp=_I,u.stripPrefix=s.stripPrefix,u.stripTrailingSlash=s.stripTrailingSlash,u.decodePercentEncoding=s.decodePercentEncoding,u}return tslib_es6_extends(UrlMatcher,i),UrlMatcher.prototype.parseMatches=function(i){for(var s,u=this.matcherRegex,m=this.stripPrefix,v=this.stripTrailingSlash,_=this.decodePercentEncoding,j=this.tagBuilder,M=[],_loop_1=function(){var u=s[0],W=s[1],X=s[4],Y=s[5],Z=s[9],ee=s.index,ie=Y||Z,ae=i.charAt(ee-1);if(!vI.isValid(u,W))return"continue";if(ee>0&&"@"===ae)return"continue";if(ee>0&&ie&&$.wordCharRegExp.test(ae))return"continue";if(/\?$/.test(u)&&(u=u.substr(0,u.length-1)),$.matchHasUnbalancedClosingParen(u))u=u.substr(0,u.length-1);else{var le=$.matchHasInvalidCharAfterTld(u,W);le>-1&&(u=u.substr(0,le))}var ce=["http://","https://"].find((function(i){return!!W&&-1!==W.indexOf(i)}));if(ce){var pe=u.indexOf(ce);u=u.substr(pe),W=W.substr(pe),ee+=pe}var de=W?"scheme":X?"www":"tld",fe=!!W;M.push(new zj({tagBuilder:j,matchedText:u,offset:ee,urlMatchType:de,url:u,protocolUrlMatch:fe,protocolRelativeMatch:!!ie,stripPrefix:m,stripTrailingSlash:v,decodePercentEncoding:_}))},$=this;null!==(s=u.exec(i));)_loop_1();return M},UrlMatcher.prototype.matchHasUnbalancedClosingParen=function(i){var s,u=i.charAt(i.length-1);if(")"===u)s="(";else if("]"===u)s="[";else{if("}"!==u)return!1;s="{"}for(var m=0,v=0,_=i.length-1;v<_;v++){var j=i.charAt(v);j===s?m++:j===u&&(m=Math.max(m-1,0))}return 0===m},UrlMatcher.prototype.matchHasInvalidCharAfterTld=function(i,s){if(!i)return-1;var u=0;s&&(u=i.indexOf(":"),i=i.slice(u));var m=new RegExp("^((.?//)?[-."+lI+"]*[-"+lI+"]\\.[-"+lI+"]+)").exec(i);return null===m?-1:(u+=m[1].length,i=i.slice(m[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(i)?u:-1)},UrlMatcher}(Hj),EI=new RegExp("[_".concat(lI,"]")),SI=function(i){function HashtagMatcher(s){var u=i.call(this,s)||this;return u.serviceName="twitter",u.serviceName=s.serviceName,u}return tslib_es6_extends(HashtagMatcher,i),HashtagMatcher.prototype.parseMatches=function(i){for(var s=this.tagBuilder,u=this.serviceName,m=[],v=i.length,_=0,j=-1,M=0;_-1&&_-j<=140){var v=i.slice(j,_),M=new Fj({tagBuilder:s,matchedText:v,offset:j,serviceName:u,hashtag:v.slice(1)});m.push(M)}}},HashtagMatcher}(Hj),xI=["twitter","facebook","instagram","tiktok"],kI=new RegExp("".concat(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source,"|").concat(/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source),"g"),OI=function(i){function PhoneMatcher(){var s=null!==i&&i.apply(this,arguments)||this;return s.matcherRegex=kI,s}return tslib_es6_extends(PhoneMatcher,i),PhoneMatcher.prototype.parseMatches=function(i){for(var s,u=this.matcherRegex,m=this.tagBuilder,v=[];null!==(s=u.exec(i));){var _=s[0],j=_.replace(/[^0-9,;#]/g,""),M=!(!s[1]&&!s[2]),$=0==s.index?"":i.substr(s.index-1,1),W=i.substr(s.index+_.length,1),X=!$.match(/\d/)&&!W.match(/\d/);this.testMatch(s[3])&&this.testMatch(_)&&X&&v.push(new $j({tagBuilder:m,matchedText:_,offset:s.index,number:j,plusSign:M}))}return v},PhoneMatcher.prototype.testMatch=function(i){return eI.test(i)},PhoneMatcher}(Hj),AI=new RegExp("@[_".concat(lI,"]{1,50}(?![_").concat(lI,"])"),"g"),CI=new RegExp("@[_.".concat(lI,"]{1,30}(?![_").concat(lI,"])"),"g"),jI=new RegExp("@[-_.".concat(lI,"]{1,50}(?![-_").concat(lI,"])"),"g"),II=new RegExp("@[_.".concat(lI,"]{1,23}[_").concat(lI,"](?![_").concat(lI,"])"),"g"),PI=new RegExp("[^"+lI+"]"),NI=function(i){function MentionMatcher(s){var u=i.call(this,s)||this;return u.serviceName="twitter",u.matcherRegexes={twitter:AI,instagram:CI,soundcloud:jI,tiktok:II},u.nonWordCharRegex=PI,u.serviceName=s.serviceName,u}return tslib_es6_extends(MentionMatcher,i),MentionMatcher.prototype.parseMatches=function(i){var s,u=this.serviceName,m=this.matcherRegexes[this.serviceName],v=this.nonWordCharRegex,_=this.tagBuilder,j=[];if(!m)return j;for(;null!==(s=m.exec(i));){var M=s.index,$=i.charAt(M-1);if(0===M||v.test($)){var W=s[0].replace(/\.+$/g,""),X=W.slice(1);j.push(new qj({tagBuilder:_,matchedText:W,offset:M,serviceName:u,mention:X}))}}return j},MentionMatcher}(Hj);function parseHtml(i,s){for(var u=s.onOpenTag,m=s.onCloseTag,v=s.onText,_=s.onComment,j=s.onDoctype,M=new TI,$=0,W=i.length,X=0,Y=0,Z=M;$"===i?(Z=new TI(__assign(__assign({},Z),{name:captureTagName()})),emitTagAndPreviousTextNode()):Jj.test(i)||Gj.test(i)||":"===i||resetToDataState()}function stateEndTagOpen(i){">"===i?resetToDataState():Jj.test(i)?X=3:resetToDataState()}function stateBeforeAttributeName(i){tI.test(i)||("/"===i?X=12:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():"="===i||rI.test(i)||nI.test(i)?resetToDataState():X=5)}function stateAttributeName(i){tI.test(i)?X=6:"/"===i?X=12:"="===i?X=7:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():rI.test(i)&&resetToDataState()}function stateAfterAttributeName(i){tI.test(i)||("/"===i?X=12:"="===i?X=7:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():rI.test(i)?resetToDataState():X=5)}function stateBeforeAttributeValue(i){tI.test(i)||('"'===i?X=8:"'"===i?X=9:/[>=`]/.test(i)?resetToDataState():"<"===i?startNewTag():X=10)}function stateAttributeValueDoubleQuoted(i){'"'===i&&(X=11)}function stateAttributeValueSingleQuoted(i){"'"===i&&(X=11)}function stateAttributeValueUnquoted(i){tI.test(i)?X=4:">"===i?emitTagAndPreviousTextNode():"<"===i&&startNewTag()}function stateAfterAttributeValueQuoted(i){tI.test(i)?X=4:"/"===i?X=12:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():(X=4,function reconsumeCurrentCharacter(){$--}())}function stateSelfClosingStartTag(i){">"===i?(Z=new TI(__assign(__assign({},Z),{isClosing:!0})),emitTagAndPreviousTextNode()):X=4}function stateMarkupDeclarationOpen(s){"--"===i.substr($,2)?($+=2,Z=new TI(__assign(__assign({},Z),{type:"comment"})),X=14):"DOCTYPE"===i.substr($,7).toUpperCase()?($+=7,Z=new TI(__assign(__assign({},Z),{type:"doctype"})),X=20):resetToDataState()}function stateCommentStart(i){"-"===i?X=15:">"===i?resetToDataState():X=16}function stateCommentStartDash(i){"-"===i?X=18:">"===i?resetToDataState():X=16}function stateComment(i){"-"===i&&(X=17)}function stateCommentEndDash(i){X="-"===i?18:16}function stateCommentEnd(i){">"===i?emitTagAndPreviousTextNode():"!"===i?X=19:"-"===i||(X=16)}function stateCommentEndBang(i){"-"===i?X=17:">"===i?emitTagAndPreviousTextNode():X=16}function stateDoctype(i){">"===i?emitTagAndPreviousTextNode():"<"===i&&startNewTag()}function resetToDataState(){X=0,Z=M}function startNewTag(){X=1,Z=new TI({idx:$})}function emitTagAndPreviousTextNode(){var s=i.slice(Y,Z.idx);s&&v(s,Y),"comment"===Z.type?_(Z.idx):"doctype"===Z.type?j(Z.idx):(Z.isOpening&&u(Z.name,Z.idx),Z.isClosing&&m(Z.name,Z.idx)),resetToDataState(),Y=$+1}function captureTagName(){var s=Z.idx+(Z.isClosing?2:1);return i.slice(s,$).toLowerCase()}Y<$&&function emitText(){var s=i.slice(Y,$);v(s,Y),Y=$+1}()}var TI=function TI(i){void 0===i&&(i={}),this.idx=void 0!==i.idx?i.idx:-1,this.type=i.type||"tag",this.name=i.name||"",this.isOpening=!!i.isOpening,this.isClosing=!!i.isClosing},MI=function(){function Autolinker(i){void 0===i&&(i={}),this.version=Autolinker.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(i.urls),this.email="boolean"==typeof i.email?i.email:this.email,this.phone="boolean"==typeof i.phone?i.phone:this.phone,this.hashtag=i.hashtag||this.hashtag,this.mention=i.mention||this.mention,this.newWindow="boolean"==typeof i.newWindow?i.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(i.stripPrefix),this.stripTrailingSlash="boolean"==typeof i.stripTrailingSlash?i.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"==typeof i.decodePercentEncoding?i.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=i.sanitizeHtml||!1;var s=this.mention;if(!1!==s&&-1===["twitter","instagram","soundcloud","tiktok"].indexOf(s))throw new Error("invalid `mention` cfg '".concat(s,"' - see docs"));var u=this.hashtag;if(!1!==u&&-1===xI.indexOf(u))throw new Error("invalid `hashtag` cfg '".concat(u,"' - see docs"));this.truncate=this.normalizeTruncateCfg(i.truncate),this.className=i.className||this.className,this.replaceFn=i.replaceFn||this.replaceFn,this.context=i.context||this}return Autolinker.link=function(i,s){return new Autolinker(s).link(i)},Autolinker.parse=function(i,s){return new Autolinker(s).parse(i)},Autolinker.prototype.normalizeUrlsCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{schemeMatches:i,wwwMatches:i,tldMatches:i}:{schemeMatches:"boolean"!=typeof i.schemeMatches||i.schemeMatches,wwwMatches:"boolean"!=typeof i.wwwMatches||i.wwwMatches,tldMatches:"boolean"!=typeof i.tldMatches||i.tldMatches}},Autolinker.prototype.normalizeStripPrefixCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{scheme:i,www:i}:{scheme:"boolean"!=typeof i.scheme||i.scheme,www:"boolean"!=typeof i.www||i.www}},Autolinker.prototype.normalizeTruncateCfg=function(i){return"number"==typeof i?{length:i,location:"end"}:function defaults(i,s){for(var u in s)s.hasOwnProperty(u)&&void 0===i[u]&&(i[u]=s[u]);return i}(i||{},{length:Number.POSITIVE_INFINITY,location:"end"})},Autolinker.prototype.parse=function(i){var s=this,u=["a","style","script"],m=0,v=[];return parseHtml(i,{onOpenTag:function(i){u.indexOf(i)>=0&&m++},onText:function(i,u){if(0===m){var _=function splitAndCapture(i,s){if(!s.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var u,m=[],v=0;u=s.exec(i);)m.push(i.substring(v,u.index)),m.push(u[0]),v=u.index+u[0].length;return m.push(i.substring(v)),m}(i,/( | |<|<|>|>|"|"|')/gi),j=u;_.forEach((function(i,u){if(u%2==0){var m=s.parseText(i,j);v.push.apply(v,m)}j+=i.length}))}},onCloseTag:function(i){u.indexOf(i)>=0&&(m=Math.max(m-1,0))},onComment:function(i){},onDoctype:function(i){}}),v=this.compactMatches(v),v=this.removeUnwantedMatches(v)},Autolinker.prototype.compactMatches=function(i){i.sort((function(i,s){return i.getOffset()-s.getOffset()}));for(var s=0;sv?s:s+1;i.splice(j,1);continue}if(i[s+1].getOffset()<_){i.splice(s+1,1);continue}}s++}return i},Autolinker.prototype.removeUnwantedMatches=function(i){return this.hashtag||utils_remove(i,(function(i){return"hashtag"===i.getType()})),this.email||utils_remove(i,(function(i){return"email"===i.getType()})),this.phone||utils_remove(i,(function(i){return"phone"===i.getType()})),this.mention||utils_remove(i,(function(i){return"mention"===i.getType()})),this.urls.schemeMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"scheme"===i.getUrlMatchType()})),this.urls.wwwMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"www"===i.getUrlMatchType()})),this.urls.tldMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"tld"===i.getUrlMatchType()})),i},Autolinker.prototype.parseText=function(i,s){void 0===s&&(s=0),s=s||0;for(var u=this.getMatchers(),m=[],v=0,_=u.length;v<_;v++){for(var j=u[v].parseMatches(i),M=0,$=j.length;M<$;M++)j[M].setOffset(s+j[M].getOffset());m.push.apply(m,j)}return m},Autolinker.prototype.link=function(i){if(!i)return"";this.sanitizeHtml&&(i=i.replace(//g,">"));for(var s=this.parse(i),u=[],m=0,v=0,_=s.length;v<_;v++){var j=s[v];u.push(i.substring(m,j.getOffset())),u.push(this.createMatchReturnVal(j)),m=j.getOffset()+j.getMatchedText().length}return u.push(i.substring(m)),u.join("")},Autolinker.prototype.createMatchReturnVal=function(i){var s;return this.replaceFn&&(s=this.replaceFn.call(this.context,i)),"string"==typeof s?s:!1===s?i.getMatchedText():s instanceof Cj?s.toAnchorString():i.buildTag().toAnchorString()},Autolinker.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var i=this.getTagBuilder(),s=[new SI({tagBuilder:i,serviceName:this.hashtag}),new gI({tagBuilder:i}),new OI({tagBuilder:i}),new NI({tagBuilder:i,serviceName:this.mention}),new wI({tagBuilder:i,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=s},Autolinker.prototype.getTagBuilder=function(){var i=this.tagBuilder;return i||(i=this.tagBuilder=new jj({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),i},Autolinker.version="3.16.2",Autolinker.AnchorTagBuilder=jj,Autolinker.HtmlTag=Cj,Autolinker.matcher={Email:gI,Hashtag:SI,Matcher:Hj,Mention:NI,Phone:OI,Url:wI},Autolinker.match={Email:Bj,Hashtag:Fj,Match:Ij,Mention:qj,Phone:$j,Url:zj},Autolinker}();const RI=MI;var DI=/www|@|\:\/\//;function isLinkOpen(i){return/^\s]/i.test(i)}function isLinkClose(i){return/^<\/a\s*>/i.test(i)}function createLinkifier(){var i=[],s=new RI({stripPrefix:!1,url:!0,email:!0,replaceFn:function(s){switch(s.getType()){case"url":i.push({text:s.matchedText,url:s.getUrl()});break;case"email":i.push({text:s.matchedText,url:"mailto:"+s.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:i,autolinker:s}}function parseTokens(i){var s,u,m,v,_,j,M,$,W,X,Y,Z,ee,ie=i.tokens,ae=null;for(u=0,m=ie.length;u=0;s--)if("link_close"!==(_=v[s]).type){if("htmltag"===_.type&&(isLinkOpen(_.content)&&Y>0&&Y--,isLinkClose(_.content)&&Y++),!(Y>0)&&"text"===_.type&&DI.test(_.content)){if(ae||(Z=(ae=createLinkifier()).links,ee=ae.autolinker),j=_.content,Z.length=0,ee.link(j),!Z.length)continue;for(M=[],X=_.level,$=0;$({useUnsafeMarkdown:!1})};const FI=Markdown;function sanitizer(i){let{useUnsafeMarkdown:s=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const u=s,m=s?[]:["style","class"];return s&&!sanitizer.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),sanitizer.hasWarnedAboutDeprecation=!0),LI().sanitize(i,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:u,FORBID_ATTR:m})}sanitizer.hasWarnedAboutDeprecation=!1;class BaseLayout extends He.Component{render(){const{errSelectors:i,specSelectors:s,getComponent:u}=this.props,m=u("SvgAssets"),v=u("InfoContainer",!0),_=u("VersionPragmaFilter"),j=u("operations",!0),M=u("Models",!0),$=u("Webhooks",!0),W=u("Row"),X=u("Col"),Y=u("errors",!0),Z=u("ServersContainer",!0),ee=u("SchemesContainer",!0),ie=u("AuthorizeBtnContainer",!0),ae=u("FilterContainer",!0),le=s.isSwagger2(),ce=s.isOAS3(),pe=s.isOAS31(),de=!s.specStr(),fe=s.loadingStatus();let ye=null;if("loading"===fe&&(ye=He.createElement("div",{className:"info"},He.createElement("div",{className:"loading-container"},He.createElement("div",{className:"loading"})))),"failed"===fe&&(ye=He.createElement("div",{className:"info"},He.createElement("div",{className:"loading-container"},He.createElement("h4",{className:"title"},"Failed to load API definition."),He.createElement(Y,null)))),"failedConfig"===fe){const s=i.lastError(),u=s?s.get("message"):"";ye=He.createElement("div",{className:"info failed-config"},He.createElement("div",{className:"loading-container"},He.createElement("h4",{className:"title"},"Failed to load remote configuration."),He.createElement("p",null,u)))}if(!ye&&de&&(ye=He.createElement("h4",null,"No API definition provided.")),ye)return He.createElement("div",{className:"swagger-ui"},He.createElement("div",{className:"loading-container"},ye));const be=s.servers(),_e=s.schemes(),we=be&&be.size,Se=_e&&_e.size,xe=!!s.securityDefinitions();return He.createElement("div",{className:"swagger-ui"},He.createElement(m,null),He.createElement(_,{isSwagger2:le,isOAS3:ce,alsoShow:He.createElement(Y,null)},He.createElement(Y,null),He.createElement(W,{className:"information-container"},He.createElement(X,{mobile:12},He.createElement(v,null))),we||Se||xe?He.createElement("div",{className:"scheme-container"},He.createElement(X,{className:"schemes wrapper",mobile:12},we?He.createElement(Z,null):null,Se?He.createElement(ee,null):null,xe?He.createElement(ie,null):null)):null,He.createElement(ae,null),He.createElement(W,null,He.createElement(X,{mobile:12,desktop:12},He.createElement(j,null))),pe&&He.createElement(W,{className:"webhooks-container"},He.createElement(X,{mobile:12,desktop:12},He.createElement($,null))),He.createElement(W,null,He.createElement(X,{mobile:12,desktop:12},He.createElement(M,null)))))}}const core_components=()=>({components:{App,authorizationPopup:AuthorizationPopup,authorizeBtn:AuthorizeBtn,AuthorizeBtnContainer,authorizeOperationBtn:AuthorizeOperationBtn,auths:Auths,AuthItem:auth_item_Auths,authError:AuthError,oauth2:Oauth2,apiKeyAuth:ApiKeyAuth,basicAuth:BasicAuth,clear:Clear,liveResponse:LiveResponse,InitializedInput,info:vC,InfoContainer,InfoUrl,InfoBasePath,Contact:bC,License:_C,JumpToPath,CopyToClipboardBtn,onlineValidatorBadge:OnlineValidatorBadge,operations:Operations,operation:operation_Operation,OperationSummary,OperationSummaryMethod,OperationSummaryPath,highlightCode:pC,responses:responses_Responses,response:response_Response,ResponseExtension:response_extension,responseBody:ResponseBody,parameters:Parameters,parameterRow:ParameterRow,execute:Execute,headers:headers_Headers,errors:Errors,contentType:ContentType,overview:Overview,footer:Footer,FilterContainer,ParamBody,curl:Curl,schemes:Schemes,SchemesContainer,modelExample:ModelExample,ModelWrapper,ModelCollapse,Model,Models,EnumModel:enum_model,ObjectModel,ArrayModel,PrimitiveModel:Primitive,Property:property,TryItOutButton,Markdown:FI,BaseLayout,VersionPragmaFilter,VersionStamp:version_stamp,OperationExt:operation_extensions,OperationExtRow:operation_extension_row,ParameterExt:parameter_extension,ParameterIncludeEmpty,OperationTag,OperationContainer,OpenAPIVersion:openapi_version,DeepLink:deep_link,SvgAssets:svg_assets,Example:example_Example,ExamplesSelect,ExamplesSelectValueRetainer}}),form_components=()=>({components:{...xe}});var qI=__webpack_require__(775),$I=__webpack_require__.n(qI);const UI={value:"",onChange:()=>{},schema:{},keyName:"",required:!1,errors:(0,et.List)()};class JsonSchemaForm extends He.Component{static defaultProps=UI;componentDidMount(){const{dispatchInitialValue:i,value:s,onChange:u}=this.props;i?u(s):!1===i&&u("")}render(){let{schema:i,errors:s,value:u,onChange:m,getComponent:v,fn:_,disabled:j}=this.props;const M=i&&i.get?i.get("format"):null,$=i&&i.get?i.get("type"):null;let getComponentSilently=i=>v(i,!1,{failSilently:!0}),W=$?getComponentSilently(M?`JsonSchema_${$}_${M}`:`JsonSchema_${$}`):v("JsonSchema_string");return W||(W=v("JsonSchema_string")),He.createElement(W,Ao()({},this.props,{errors:s,fn:_,getComponent:v,value:u,onChange:m,schema:i,disabled:j}))}}class JsonSchema_string extends He.Component{static defaultProps=UI;onChange=i=>{const s=this.props.schema&&"file"===this.props.schema.get("type")?i.target.files[0]:i.target.value;this.props.onChange(s,this.props.keyName)};onEnumChange=i=>this.props.onChange(i);render(){let{getComponent:i,value:s,schema:u,errors:m,required:v,description:_,disabled:j}=this.props;const M=u&&u.get?u.get("enum"):null,$=u&&u.get?u.get("format"):null,W=u&&u.get?u.get("type"):null,X=u&&u.get?u.get("in"):null;if(s||(s=""),m=m.toJS?m.toJS():[],M){const u=i("Select");return He.createElement(u,{className:m.length?"invalid":"",title:m.length?m:"",allowedValues:[...M],value:s,allowEmptyValue:!v,disabled:j,onChange:this.onEnumChange})}const Y=j||X&&"formData"===X&&!("FormData"in window),Z=i("Input");return W&&"file"===W?He.createElement(Z,{type:"file",className:m.length?"invalid":"",title:m.length?m:"",onChange:this.onChange,disabled:Y}):He.createElement($I(),{type:$&&"password"===$?"password":"text",className:m.length?"invalid":"",title:m.length?m:"",value:s,minLength:0,debounceTimeout:350,placeholder:_,onChange:this.onChange,disabled:Y})}}class JsonSchema_array extends He.PureComponent{static defaultProps=UI;constructor(i,s){super(i,s),this.state={value:valueOrEmptyList(i.value),schema:i.schema}}UNSAFE_componentWillReceiveProps(i){const s=valueOrEmptyList(i.value);s!==this.state.value&&this.setState({value:s}),i.schema!==this.state.schema&&this.setState({schema:i.schema})}onChange=()=>{this.props.onChange(this.state.value)};onItemChange=(i,s)=>{this.setState((u=>{let{value:m}=u;return{value:m.set(s,i)}}),this.onChange)};removeItem=i=>{this.setState((s=>{let{value:u}=s;return{value:u.delete(i)}}),this.onChange)};addItem=()=>{const{fn:i}=this.props;let s=valueOrEmptyList(this.state.value);this.setState((()=>({value:s.push(i.getSampleSchema(this.state.schema.get("items"),!1,{includeWriteOnly:!0}))})),this.onChange)};onEnumChange=i=>{this.setState((()=>({value:i})),this.onChange)};render(){let{getComponent:i,required:s,schema:u,errors:m,fn:v,disabled:_}=this.props;m=m.toJS?m.toJS():Array.isArray(m)?m:[];const j=m.filter((i=>"string"==typeof i)),M=m.filter((i=>void 0!==i.needRemove)).map((i=>i.error)),$=this.state.value,W=!!($&&$.count&&$.count()>0),X=u.getIn(["items","enum"]),Y=u.getIn(["items","type"]),Z=u.getIn(["items","format"]),ee=u.get("items");let ie,ae=!1,le="file"===Y||"string"===Y&&"binary"===Z;if(Y&&Z?ie=i(`JsonSchema_${Y}_${Z}`):"boolean"!==Y&&"array"!==Y&&"object"!==Y||(ie=i(`JsonSchema_${Y}`)),ie||le||(ae=!0),X){const u=i("Select");return He.createElement(u,{className:m.length?"invalid":"",title:m.length?m:"",multiple:!0,value:$,disabled:_,allowedValues:X,allowEmptyValue:!s,onChange:this.onEnumChange})}const ce=i("Button");return He.createElement("div",{className:"json-schema-array"},W?$.map(((s,u)=>{const j=(0,et.fromJS)([...m.filter((i=>i.index===u)).map((i=>i.error))]);return He.createElement("div",{key:u,className:"json-schema-form-item"},le?He.createElement(JsonSchemaArrayItemFile,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j,getComponent:i}):ae?He.createElement(JsonSchemaArrayItemText,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j}):He.createElement(ie,Ao()({},this.props,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j,schema:ee,getComponent:i,fn:v})),_?null:He.createElement(ce,{className:`btn btn-sm json-schema-form-item-remove ${M.length?"invalid":null}`,title:M.length?M:"",onClick:()=>this.removeItem(u)}," - "))})):null,_?null:He.createElement(ce,{className:`btn btn-sm json-schema-form-item-add ${j.length?"invalid":null}`,title:j.length?j:"",onClick:this.addItem},"Add ",Y?`${Y} `:"","item"))}}class JsonSchemaArrayItemText extends He.Component{static defaultProps=UI;onChange=i=>{const s=i.target.value;this.props.onChange(s,this.props.keyName)};render(){let{value:i,errors:s,description:u,disabled:m}=this.props;return i||(i=""),s=s.toJS?s.toJS():[],He.createElement($I(),{type:"text",className:s.length?"invalid":"",title:s.length?s:"",value:i,minLength:0,debounceTimeout:350,placeholder:u,onChange:this.onChange,disabled:m})}}class JsonSchemaArrayItemFile extends He.Component{static defaultProps=UI;onFileChange=i=>{const s=i.target.files[0];this.props.onChange(s,this.props.keyName)};render(){let{getComponent:i,errors:s,disabled:u}=this.props;const m=i("Input"),v=u||!("FormData"in window);return He.createElement(m,{type:"file",className:s.length?"invalid":"",title:s.length?s:"",onChange:this.onFileChange,disabled:v})}}class JsonSchema_boolean extends He.Component{static defaultProps=UI;onEnumChange=i=>this.props.onChange(i);render(){let{getComponent:i,value:s,errors:u,schema:m,required:v,disabled:_}=this.props;u=u.toJS?u.toJS():[];let j=m&&m.get?m.get("enum"):null,M=!j||!v,$=!j&&["true","false"];const W=i("Select");return He.createElement(W,{className:u.length?"invalid":"",title:u.length?u:"",value:String(s),disabled:_,allowedValues:j?[...j]:$,allowEmptyValue:M,onChange:this.onEnumChange})}}const stringifyObjectErrors=i=>i.map((i=>{const s=void 0!==i.propKey?i.propKey:i.index;let u="string"==typeof i?i:"string"==typeof i.error?i.error:null;if(!s&&u)return u;let m=i.error,v=`/${i.propKey}`;for(;"object"==typeof m;){const i=void 0!==m.propKey?m.propKey:m.index;if(void 0===i)break;if(v+=`/${i}`,!m.error)break;m=m.error}return`${v}: ${m}`}));class JsonSchema_object extends He.PureComponent{constructor(){super()}static defaultProps=UI;onChange=i=>{this.props.onChange(i)};handleOnChange=i=>{const s=i.target.value;this.onChange(s)};render(){let{getComponent:i,value:s,errors:u,disabled:m}=this.props;const v=i("TextArea");return u=u.toJS?u.toJS():Array.isArray(u)?u:[],He.createElement("div",null,He.createElement(v,{className:lC()({invalid:u.length}),title:u.length?stringifyObjectErrors(u).join(", "):"",value:stringify(s),disabled:m,onChange:this.handleOnChange}))}}function valueOrEmptyList(i){return et.List.isList(i)?i:Array.isArray(i)?(0,et.fromJS)(i):(0,et.List)()}const json_schema_components=()=>({components:{...Ie}}),base=()=>[configsPlugin,util,logs,view,plugins_spec,err,icons,plugins_layout,json_schema_5_samples,core_components,form_components,swagger_client,json_schema_components,auth,downloadUrlPlugin,deep_linking,filter,on_complete,plugins_request_snippets,safe_render()],zI=(0,et.Map)();function onlyOAS3(i){return(s,u)=>function(){if(u.getSystem().specSelectors.isOAS3()){const s=i(...arguments);return"function"==typeof s?s(u):s}return s(...arguments)}}const VI=onlyOAS3(Xt((()=>null))),WI=onlyOAS3((()=>i=>{const s=i.getSystem().specSelectors.specJson().getIn(["components","schemas"]);return et.Map.isMap(s)?s:zI})),KI=onlyOAS3((()=>i=>i.getSystem().specSelectors.specJson().hasIn(["servers",0]))),HI=onlyOAS3(Xt(Ba,(i=>i.getIn(["components","securitySchemes"])||null))),wrap_selectors_validOperationMethods=(i,s)=>function(u){if(s.specSelectors.isOAS3())return s.oas3Selectors.validOperationMethods();for(var m=arguments.length,v=new Array(m>1?m-1:0),_=1;_function(){for(var m=arguments.length,v=new Array(m),_=0;_i),(i=>{let{specSelectors:s}=i;return s.securityDefinitions()}),((i,s)=>{let u=(0,et.List)();return s?(s.entrySeq().forEach((i=>{let[s,m]=i;const v=m.get("type");if("oauth2"===v&&m.get("flows").entrySeq().forEach((i=>{let[v,_]=i,j=(0,et.fromJS)({flow:v,authorizationUrl:_.get("authorizationUrl"),tokenUrl:_.get("tokenUrl"),scopes:_.get("scopes"),type:m.get("type"),description:m.get("description")});u=u.push(new et.Map({[s]:j.filter((i=>void 0!==i))}))})),"http"!==v&&"apiKey"!==v||(u=u.push(new et.Map({[s]:m}))),"openIdConnect"===v&&m.get("openIdConnectData")){let i=m.get("openIdConnectData");(i.get("grant_types_supported")||["authorization_code","implicit"]).forEach((v=>{let _=i.get("scopes_supported")&&i.get("scopes_supported").reduce(((i,s)=>i.set(s,"")),new et.Map),j=(0,et.fromJS)({flow:v,authorizationUrl:i.get("authorization_endpoint"),tokenUrl:i.get("token_endpoint"),scopes:_,type:"oauth2",openIdConnectUrl:m.get("openIdConnectUrl")});u=u.push(new et.Map({[s]:j.filter((i=>void 0!==i))}))}))}})),u):u})));function OAS3ComponentWrapFactory(i){return(s,u)=>m=>"function"==typeof u.specSelectors?.isOAS3?u.specSelectors.isOAS3()?He.createElement(i,Ao()({},m,u,{Ori:s})):He.createElement(s,m):(console.warn("OAS3 wrapper: couldn't get spec"),null)}const eP=(0,et.Map)(),selectors_isSwagger2=()=>i=>function isSwagger2(i){const s=i.get("swagger");return"string"==typeof s&&"2.0"===s}(i.getSystem().specSelectors.specJson()),selectors_isOAS30=()=>i=>function isOAS30(i){const s=i.get("openapi");return"string"==typeof s&&/^3\.0\.([0123])(?:-rc[012])?$/.test(s)}(i.getSystem().specSelectors.specJson()),selectors_isOAS3=()=>i=>i.getSystem().specSelectors.isOAS30();function selectors_onlyOAS3(i){return function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.specSelectors.isOAS3()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}}}const tP=selectors_onlyOAS3((()=>i=>i.specSelectors.specJson().get("servers",eP))),rP=selectors_onlyOAS3(((i,s)=>{let{callbacks:u,specPath:m}=s;return i=>{const s=i.specSelectors.validOperationMethods();return et.Map.isMap(u)?u.reduce(((i,u,v)=>{if(!et.Map.isMap(u))return i;const _=u.reduce(((i,u,_)=>{if(!et.Map.isMap(u))return i;const j=u.entrySeq().filter((i=>{let[u]=i;return s.includes(u)})).map((i=>{let[s,u]=i;return{operation:(0,et.Map)({operation:u}),method:s,path:_,callbackName:v,specPath:m.concat([v,_,s])}}));return i.concat(j)}),(0,et.List)());return i.concat(_)}),(0,et.List)()).groupBy((i=>i.callbackName)).map((i=>i.toArray())).toObject():{}}})),callbacks=i=>{let{callbacks:s,specPath:u,specSelectors:m,getComponent:v}=i;const _=m.callbacksOperations({callbacks:s,specPath:u}),j=Object.keys(_),M=v("OperationContainer",!0);return 0===j.length?He.createElement("span",null,"No callbacks"):He.createElement("div",null,j.map((i=>He.createElement("div",{key:`${i}`},He.createElement("h2",null,i),_[i].map((s=>He.createElement(M,{key:`${i}-${s.path}-${s.method}`,op:s.operation,tag:"callbacks",method:s.method,path:s.path,specPath:s.specPath,allowTryItOut:!1})))))))},getDefaultRequestBodyValue=(i,s,u,m)=>{const v=i.getIn(["content",s])??(0,et.OrderedMap)(),_=v.get("schema",(0,et.OrderedMap)()).toJS(),j=void 0!==v.get("examples"),M=v.get("example"),$=j?v.getIn(["examples",u,"value"]):M;return stringify(m.getSampleSchema(_,s,{includeWriteOnly:!0},$))},components_request_body=i=>{let{userHasEditedBody:s,requestBody:u,requestBodyValue:m,requestBodyInclusionSetting:v,requestBodyErrors:_,getComponent:j,getConfigs:M,specSelectors:$,fn:W,contentType:X,isExecute:Y,specPath:Z,onChange:ee,onChangeIncludeEmpty:ie,activeExamplesKey:ae,updateActiveExamplesKey:le,setRetainRequestBodyValueFlag:ce}=i;const handleFile=i=>{ee(i.target.files[0])},setIsIncludedOptions=i=>{let s={key:i,shouldDispatchInit:!1,defaultValue:!0};return"no value"===v.get(i,"no value")&&(s.shouldDispatchInit=!0),s},pe=j("Markdown",!0),de=j("modelExample"),fe=j("RequestBodyEditor"),ye=j("highlightCode"),be=j("ExamplesSelectValueRetainer"),_e=j("Example"),we=j("ParameterIncludeEmpty"),{showCommonExtensions:Se}=M(),xe=u?.get("description")??null,Ie=u?.get("content")??new et.OrderedMap;X=X||Ie.keySeq().first()||"";const Pe=Ie.get(X)??(0,et.OrderedMap)(),Te=Pe.get("schema",(0,et.OrderedMap)()),Re=Pe.get("examples",null),qe=Re?.map(((i,s)=>{const m=i?.get("value",null);return m&&(i=i.set("value",getDefaultRequestBodyValue(u,X,s,W),m)),i}));if(_=et.List.isList(_)?_:(0,et.List)(),!Pe.size)return null;const ze="object"===Pe.getIn(["schema","type"]),Ve="binary"===Pe.getIn(["schema","format"]),We="base64"===Pe.getIn(["schema","format"]);if("application/octet-stream"===X||0===X.indexOf("image/")||0===X.indexOf("audio/")||0===X.indexOf("video/")||Ve||We){const i=j("Input");return Y?He.createElement(i,{type:"file",onChange:handleFile}):He.createElement("i",null,"Example values are not available for ",He.createElement("code",null,X)," media types.")}if(ze&&("application/x-www-form-urlencoded"===X||0===X.indexOf("multipart/"))&&Te.get("properties",(0,et.OrderedMap)()).size>0){const i=j("JsonSchemaForm"),s=j("ParameterExt"),u=Te.get("properties",(0,et.OrderedMap)());return m=et.Map.isMap(m)?m:(0,et.OrderedMap)(),He.createElement("div",{className:"table-container"},xe&&He.createElement(pe,{source:xe}),He.createElement("table",null,He.createElement("tbody",null,et.Map.isMap(u)&&u.entrySeq().map((u=>{let[M,$]=u;if($.get("readOnly"))return;let X=Se?getCommonExtensions($):null;const Z=Te.get("required",(0,et.List)()).includes(M),ae=$.get("type"),le=$.get("format"),ce=$.get("description"),de=m.getIn([M,"value"]),fe=m.getIn([M,"errors"])||_,ye=v.get(M)||!1,be=$.has("default")||$.has("example")||$.hasIn(["items","example"])||$.hasIn(["items","default"]),_e=$.has("enum")&&(1===$.get("enum").size||Z),xe=be||_e;let Ie="";"array"!==ae||xe||(Ie=[]),("object"===ae||xe)&&(Ie=W.getSampleSchema($,!1,{includeWriteOnly:!0})),"string"!=typeof Ie&&"object"===ae&&(Ie=stringify(Ie)),"string"==typeof Ie&&"array"===ae&&(Ie=JSON.parse(Ie));const Pe="string"===ae&&("binary"===le||"base64"===le);return He.createElement("tr",{key:M,className:"parameters","data-property-name":M},He.createElement("td",{className:"parameters-col_name"},He.createElement("div",{className:Z?"parameter__name required":"parameter__name"},M,Z?He.createElement("span",null," *"):null),He.createElement("div",{className:"parameter__type"},ae,le&&He.createElement("span",{className:"prop-format"},"($",le,")"),Se&&X.size?X.entrySeq().map((i=>{let[u,m]=i;return He.createElement(s,{key:`${u}-${m}`,xKey:u,xVal:m})})):null),He.createElement("div",{className:"parameter__deprecated"},$.get("deprecated")?"deprecated":null)),He.createElement("td",{className:"parameters-col_description"},He.createElement(pe,{source:ce}),Y?He.createElement("div",null,He.createElement(i,{fn:W,dispatchInitialValue:!Pe,schema:$,description:M,getComponent:j,value:void 0===de?Ie:de,required:Z,errors:fe,onChange:i=>{ee(i,[M])}}),Z?null:He.createElement(we,{onChange:i=>ie(M,i),isIncluded:ye,isIncludedOptions:setIsIncludedOptions(M),isDisabled:Array.isArray(de)?0!==de.length:!isEmptyValue(de)})):null))})))))}const Xe=getDefaultRequestBodyValue(u,X,ae,W);let Ye=null;return getKnownSyntaxHighlighterLanguage(Xe)&&(Ye="json"),He.createElement("div",null,xe&&He.createElement(pe,{source:xe}),qe?He.createElement(be,{userHasEditedBody:s,examples:qe,currentKey:ae,currentUserInputValue:m,onSelect:i=>{le(i)},updateValue:ee,defaultToFirstExample:!0,getComponent:j,setRetainRequestBodyValueFlag:ce}):null,Y?He.createElement("div",null,He.createElement(fe,{value:m,errors:_,defaultValue:Xe,onChange:ee,getComponent:j})):He.createElement(de,{getComponent:j,getConfigs:M,specSelectors:$,expandDepth:1,isExecute:Y,schema:Pe.get("schema"),specPath:Z.push("content",X),example:He.createElement(ye,{className:"body-param__example",getConfigs:M,language:Ye,value:stringify(m)||Xe}),includeWriteOnly:!0}),qe?He.createElement(_e,{example:qe.get(ae),getComponent:j,getConfigs:M}):null)};class operation_link_OperationLink extends He.Component{render(){const{link:i,name:s,getComponent:u}=this.props,m=u("Markdown",!0);let v=i.get("operationId")||i.get("operationRef"),_=i.get("parameters")&&i.get("parameters").toJS(),j=i.get("description");return He.createElement("div",{className:"operation-link"},He.createElement("div",{className:"description"},He.createElement("b",null,He.createElement("code",null,s)),j?He.createElement(m,{source:j}):null),He.createElement("pre",null,"Operation `",v,"`",He.createElement("br",null),He.createElement("br",null),"Parameters ",function padString(i,s){if("string"!=typeof s)return"";return s.split("\n").map(((s,u)=>u>0?Array(i+1).join(" ")+s:s)).join("\n")}(0,JSON.stringify(_,null,2))||"{}",He.createElement("br",null)))}}const nP=operation_link_OperationLink;class servers_Servers extends He.Component{componentDidMount(){let{servers:i,currentServer:s}=this.props;s||this.setServer(i.first()?.get("url"))}UNSAFE_componentWillReceiveProps(i){let{servers:s,setServerVariableValue:u,getServerVariable:m}=i;if(this.props.currentServer!==i.currentServer||this.props.servers!==i.servers){let v=s.find((s=>s.get("url")===i.currentServer)),_=this.props.servers.find((i=>i.get("url")===this.props.currentServer))||(0,et.OrderedMap)();if(!v)return this.setServer(s.first().get("url"));let j=((_.get("variables")||(0,et.OrderedMap)()).find((i=>i.get("default")))||(0,et.OrderedMap)()).get("default"),M=v.get("variables")||(0,et.OrderedMap)(),$=(M.find((i=>i.get("default")))||(0,et.OrderedMap)()).get("default");M.map(((s,v)=>{m(i.currentServer,v)&&j===$||u({server:i.currentServer,key:v,val:s.get("default")||""})}))}}onServerChange=i=>{this.setServer(i.target.value)};onServerVariableValueChange=i=>{let{setServerVariableValue:s,currentServer:u}=this.props,m=i.target.getAttribute("data-variable"),v=i.target.value;"function"==typeof s&&s({server:u,key:m,val:v})};setServer=i=>{let{setSelectedServer:s}=this.props;s(i)};render(){let{servers:i,currentServer:s,getServerVariable:u,getEffectiveServerValue:m}=this.props,v=(i.find((i=>i.get("url")===s))||(0,et.OrderedMap)()).get("variables")||(0,et.OrderedMap)(),_=0!==v.size;return He.createElement("div",{className:"servers"},He.createElement("label",{htmlFor:"servers"},He.createElement("select",{onChange:this.onServerChange,value:s},i.valueSeq().map((i=>He.createElement("option",{value:i.get("url"),key:i.get("url")},i.get("url"),i.get("description")&&` - ${i.get("description")}`))).toArray())),_?He.createElement("div",null,He.createElement("div",{className:"computed-url"},"Computed URL:",He.createElement("code",null,m(s))),He.createElement("h4",null,"Server variables"),He.createElement("table",null,He.createElement("tbody",null,v.entrySeq().map((i=>{let[m,v]=i;return He.createElement("tr",{key:m},He.createElement("td",null,m),He.createElement("td",null,v.get("enum")?He.createElement("select",{"data-variable":m,onChange:this.onServerVariableValueChange},v.get("enum").map((i=>He.createElement("option",{selected:i===u(s,m),key:i,value:i},i)))):He.createElement("input",{type:"text",value:u(s,m)||"",onChange:this.onServerVariableValueChange,"data-variable":m})))}))))):null)}}class ServersContainer extends He.Component{render(){const{specSelectors:i,oas3Selectors:s,oas3Actions:u,getComponent:m}=this.props,v=i.servers(),_=m("Servers");return v&&v.size?He.createElement("div",null,He.createElement("span",{className:"servers-title"},"Servers"),He.createElement(_,{servers:v,currentServer:s.selectedServer(),setSelectedServer:u.setSelectedServer,setServerVariableValue:u.setServerVariableValue,getServerVariable:s.serverVariableValue,getEffectiveServerValue:s.serverEffectiveValue})):null}}const oP=Function.prototype;class RequestBodyEditor extends He.PureComponent{static defaultProps={onChange:oP,userHasEditedBody:!1};constructor(i,s){super(i,s),this.state={value:stringify(i.value)||i.defaultValue},i.onChange(i.value)}applyDefaultValue=i=>{const{onChange:s,defaultValue:u}=i||this.props;return this.setState({value:u}),s(u)};onChange=i=>{this.props.onChange(stringify(i))};onDomChange=i=>{const s=i.target.value;this.setState({value:s},(()=>this.onChange(s)))};UNSAFE_componentWillReceiveProps(i){this.props.value!==i.value&&i.value!==this.state.value&&this.setState({value:stringify(i.value)}),!i.value&&i.defaultValue&&this.state.value&&this.applyDefaultValue(i)}render(){let{getComponent:i,errors:s}=this.props,{value:u}=this.state,m=s.size>0;const v=i("TextArea");return He.createElement("div",{className:"body-param"},He.createElement(v,{className:lC()("body-param__text",{invalid:m}),title:s.size?s.join(", "):"",value:u,onChange:this.onDomChange}))}}class HttpAuth extends He.Component{constructor(i,s){super(i,s);let{name:u,schema:m}=this.props,v=this.getValue();this.state={name:u,schema:m,value:v}}getValue(){let{name:i,authorized:s}=this.props;return s&&s.getIn([i,"value"])}onChange=i=>{let{onChange:s}=this.props,{value:u,name:m}=i.target,v=Object.assign({},this.state.value);m?v[m]=u:v=u,this.setState({value:v},(()=>s(this.state)))};render(){let{schema:i,getComponent:s,errSelectors:u,name:m}=this.props;const v=s("Input"),_=s("Row"),j=s("Col"),M=s("authError"),$=s("Markdown",!0),W=s("JumpToPath",!0),X=(i.get("scheme")||"").toLowerCase();let Y=this.getValue(),Z=u.allErrors().filter((i=>i.get("authId")===m));if("basic"===X){let s=Y?Y.get("username"):null;return He.createElement("div",null,He.createElement("h4",null,He.createElement("code",null,m||i.get("name")),"  (http, Basic)",He.createElement(W,{path:["securityDefinitions",m]})),s&&He.createElement("h6",null,"Authorized"),He.createElement(_,null,He.createElement($,{source:i.get("description")})),He.createElement(_,null,He.createElement("label",null,"Username:"),s?He.createElement("code",null," ",s," "):He.createElement(j,null,He.createElement(v,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),He.createElement(_,null,He.createElement("label",null,"Password:"),s?He.createElement("code",null," ****** "):He.createElement(j,null,He.createElement(v,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),Z.valueSeq().map(((i,s)=>He.createElement(M,{error:i,key:s}))))}return"bearer"===X?He.createElement("div",null,He.createElement("h4",null,He.createElement("code",null,m||i.get("name")),"  (http, Bearer)",He.createElement(W,{path:["securityDefinitions",m]})),Y&&He.createElement("h6",null,"Authorized"),He.createElement(_,null,He.createElement($,{source:i.get("description")})),He.createElement(_,null,He.createElement("label",null,"Value:"),Y?He.createElement("code",null," ****** "):He.createElement(j,null,He.createElement(v,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),Z.valueSeq().map(((i,s)=>He.createElement(M,{error:i,key:s})))):He.createElement("div",null,He.createElement("em",null,He.createElement("b",null,m)," HTTP authentication: unsupported scheme ",`'${X}'`))}}class operation_servers_OperationServers extends He.Component{setSelectedServer=i=>{const{path:s,method:u}=this.props;return this.forceUpdate(),this.props.setSelectedServer(i,`${s}:${u}`)};setServerVariableValue=i=>{const{path:s,method:u}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...i,namespace:`${s}:${u}`})};getSelectedServer=()=>{const{path:i,method:s}=this.props;return this.props.getSelectedServer(`${i}:${s}`)};getServerVariable=(i,s)=>{const{path:u,method:m}=this.props;return this.props.getServerVariable({namespace:`${u}:${m}`,server:i},s)};getEffectiveServerValue=i=>{const{path:s,method:u}=this.props;return this.props.getEffectiveServerValue({server:i,namespace:`${s}:${u}`})};render(){const{operationServers:i,pathServers:s,getComponent:u}=this.props;if(!i&&!s)return null;const m=u("Servers"),v=i||s,_=i?"operation":"path";return He.createElement("div",{className:"opblock-section operation-servers"},He.createElement("div",{className:"opblock-section-header"},He.createElement("div",{className:"tab-header"},He.createElement("h4",{className:"opblock-title"},"Servers"))),He.createElement("div",{className:"opblock-description-wrapper"},He.createElement("h4",{className:"message"},"These ",_,"-level options override the global server options."),He.createElement(m,{servers:v,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}const iP={Callbacks:callbacks,HttpAuth,RequestBody:components_request_body,Servers:servers_Servers,ServersContainer,RequestBodyEditor,OperationServers:operation_servers_OperationServers,operationLink:nP},aP=new Remarkable("commonmark");aP.block.ruler.enable(["table"]),aP.set({linkTarget:"_blank"});const markdown_Markdown=i=>{let{source:s,className:u="",getConfigs:m}=i;if("string"!=typeof s)return null;if(s){const{useUnsafeMarkdown:i}=m(),v=sanitizer(aP.render(s),{useUnsafeMarkdown:i});let _;return"string"==typeof v&&(_=v.trim()),He.createElement("div",{dangerouslySetInnerHTML:{__html:_},className:lC()(u,"renderedMarkdown")})}return null};markdown_Markdown.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const sP=OAS3ComponentWrapFactory(markdown_Markdown),lP=OAS3ComponentWrapFactory((i=>{let{Ori:s,...u}=i;const{schema:m,getComponent:v,errSelectors:_,authorized:j,onAuthChange:M,name:$}=u,W=v("HttpAuth");return"http"===m.get("type")?He.createElement(W,{key:$,schema:m,name:$,errSelectors:_,authorized:j,getComponent:v,onChange:M}):He.createElement(s,u)})),cP=OAS3ComponentWrapFactory(OnlineValidatorBadge);class ModelComponent extends He.Component{render(){let{getConfigs:i,schema:s}=this.props,u=["model-box"],m=null;return!0===s.get("deprecated")&&(u.push("deprecated"),m=He.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),He.createElement("div",{className:u.join(" ")},m,He.createElement(Model,Ao()({},this.props,{getConfigs:i,depth:1,expandDepth:this.props.expandDepth||0})))}}const uP=OAS3ComponentWrapFactory(ModelComponent),pP=OAS3ComponentWrapFactory((i=>{let{Ori:s,...u}=i;const{schema:m,getComponent:v,errors:_,onChange:j}=u,M=m&&m.get?m.get("format"):null,$=m&&m.get?m.get("type"):null,W=v("Input");return $&&"string"===$&&M&&("binary"===M||"base64"===M)?He.createElement(W,{type:"file",className:_.length?"invalid":"",title:_.length?_:"",onChange:i=>{j(i.target.files[0])},disabled:s.isDisabled}):He.createElement(s,u)})),hP={Markdown:sP,AuthItem:lP,OpenAPIVersion:function OAS30ComponentWrapFactory(i){return(s,u)=>m=>"function"==typeof u.specSelectors?.isOAS30?u.specSelectors.isOAS30()?He.createElement(i,Ao()({},m,u,{Ori:s})):He.createElement(s,m):(console.warn("OAS30 wrapper: couldn't get spec"),null)}((i=>{const{Ori:s}=i;return He.createElement(s,{oasVersion:"3.0"})})),JsonSchema_string:pP,model:uP,onlineValidatorBadge:cP},dP="oas3_set_servers",fP="oas3_set_request_body_value",mP="oas3_set_request_body_retain_flag",gP="oas3_set_request_body_inclusion",yP="oas3_set_active_examples_member",vP="oas3_set_request_content_type",bP="oas3_set_response_content_type",_P="oas3_set_server_variable_value",wP="oas3_set_request_body_validate_error",EP="oas3_clear_request_body_validate_error",SP="oas3_clear_request_body_value";function setSelectedServer(i,s){return{type:dP,payload:{selectedServerUrl:i,namespace:s}}}function setRequestBodyValue(i){let{value:s,pathMethod:u}=i;return{type:fP,payload:{value:s,pathMethod:u}}}const setRetainRequestBodyValueFlag=i=>{let{value:s,pathMethod:u}=i;return{type:mP,payload:{value:s,pathMethod:u}}};function setRequestBodyInclusion(i){let{value:s,pathMethod:u,name:m}=i;return{type:gP,payload:{value:s,pathMethod:u,name:m}}}function setActiveExamplesMember(i){let{name:s,pathMethod:u,contextType:m,contextName:v}=i;return{type:yP,payload:{name:s,pathMethod:u,contextType:m,contextName:v}}}function setRequestContentType(i){let{value:s,pathMethod:u}=i;return{type:vP,payload:{value:s,pathMethod:u}}}function setResponseContentType(i){let{value:s,path:u,method:m}=i;return{type:bP,payload:{value:s,path:u,method:m}}}function setServerVariableValue(i){let{server:s,namespace:u,key:m,val:v}=i;return{type:_P,payload:{server:s,namespace:u,key:m,val:v}}}const setRequestBodyValidateError=i=>{let{path:s,method:u,validationErrors:m}=i;return{type:wP,payload:{path:s,method:u,validationErrors:m}}},clearRequestBodyValidateError=i=>{let{path:s,method:u}=i;return{type:EP,payload:{path:s,method:u}}},initRequestBodyValidateError=i=>{let{pathMethod:s}=i;return{type:EP,payload:{path:s[0],method:s[1]}}},clearRequestBodyValue=i=>{let{pathMethod:s}=i;return{type:SP,payload:{pathMethod:s}}},oas3_selectors_onlyOAS3=i=>function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.getSystem().specSelectors.isOAS3()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}};const xP=oas3_selectors_onlyOAS3(((i,s)=>{const u=s?[s,"selectedServer"]:["selectedServer"];return i.getIn(u)||""})),kP=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"bodyValue"])||null)),OP=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"retainBodyValue"])||!1)),selectDefaultRequestBodyValue=(i,s,u)=>i=>{const{oas3Selectors:m,specSelectors:v,fn:_}=i.getSystem();if(v.isOAS3()){const i=m.requestContentType(s,u);if(i)return getDefaultRequestBodyValue(v.specResolvedSubtree(["paths",s,u,"requestBody"]),i,m.activeExamplesMember(s,u,"requestBody","requestBody"),_)}return null},AP=oas3_selectors_onlyOAS3(((i,s,u)=>i=>{const{oas3Selectors:m,specSelectors:v,fn:_}=i;let j=!1;const M=m.requestContentType(s,u);let $=m.requestBodyValue(s,u);const W=v.specResolvedSubtree(["paths",s,u,"requestBody"]);if(!W)return!1;if(et.Map.isMap($)&&($=stringify($.mapEntries((i=>et.Map.isMap(i[1])?[i[0],i[1].get("value")]:i)).toJS())),et.List.isList($)&&($=stringify($)),M){const i=getDefaultRequestBodyValue(W,M,m.activeExamplesMember(s,u,"requestBody","requestBody"),_);j=!!$&&$!==i}return j})),CP=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"bodyInclusion"])||(0,et.Map)())),jP=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"errors"])||null)),IP=oas3_selectors_onlyOAS3(((i,s,u,m,v)=>i.getIn(["examples",s,u,m,v,"activeExample"])||null)),PP=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"requestContentType"])||null)),NP=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"responseContentType"])||null)),TP=oas3_selectors_onlyOAS3(((i,s,u)=>{let m;if("string"!=typeof s){const{server:i,namespace:v}=s;m=v?[v,"serverVariableValues",i,u]:["serverVariableValues",i,u]}else{m=["serverVariableValues",s,u]}return i.getIn(m)||null})),MP=oas3_selectors_onlyOAS3(((i,s)=>{let u;if("string"!=typeof s){const{server:i,namespace:m}=s;u=m?[m,"serverVariableValues",i]:["serverVariableValues",i]}else{u=["serverVariableValues",s]}return i.getIn(u)||(0,et.OrderedMap)()})),RP=oas3_selectors_onlyOAS3(((i,s)=>{var u,m;if("string"!=typeof s){const{server:v,namespace:_}=s;m=v,u=_?i.getIn([_,"serverVariableValues",m]):i.getIn(["serverVariableValues",m])}else m=s,u=i.getIn(["serverVariableValues",m]);u=u||(0,et.OrderedMap)();let v=m;return u.map(((i,s)=>{v=v.replace(new RegExp(`{${s}}`,"g"),i)})),v})),DP=function validateRequestBodyIsRequired(i){return function(){for(var s=arguments.length,u=new Array(s),m=0;m{const m=s.getSystem().specSelectors.specJson();let v=[...u][1]||[];return!m.getIn(["paths",...v,"requestBody","required"])||i(...u)}}}(((i,s)=>((i,s)=>(s=s||[],!!i.getIn(["requestData",...s,"bodyValue"])))(i,s))),validateShallowRequired=(i,s)=>{let{oas3RequiredRequestBodyContentType:u,oas3RequestContentType:m,oas3RequestBodyValue:v}=s,_=[];if(!et.Map.isMap(v))return _;let j=[];return Object.keys(u.requestContentType).forEach((i=>{if(i===m){u.requestContentType[i].forEach((i=>{j.indexOf(i)<0&&j.push(i)}))}})),j.forEach((i=>{v.getIn([i,"value"])||_.push(i)})),_},BP=Xt((()=>["get","put","post","delete","options","head","patch","trace"])),LP={[dP]:(i,s)=>{let{payload:{selectedServerUrl:u,namespace:m}}=s;const v=m?[m,"selectedServer"]:["selectedServer"];return i.setIn(v,u)},[fP]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;if(!et.Map.isMap(u))return i.setIn(["requestData",v,_,"bodyValue"],u);let j,M=i.getIn(["requestData",v,_,"bodyValue"])||(0,et.Map)();et.Map.isMap(M)||(M=(0,et.Map)());const[...$]=u.keys();return $.forEach((i=>{let s=u.getIn([i]);M.has(i)&&et.Map.isMap(s)||(j=M.setIn([i,"value"],s))})),i.setIn(["requestData",v,_,"bodyValue"],j)},[mP]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;return i.setIn(["requestData",v,_,"retainBodyValue"],u)},[gP]:(i,s)=>{let{payload:{value:u,pathMethod:m,name:v}}=s,[_,j]=m;return i.setIn(["requestData",_,j,"bodyInclusion",v],u)},[yP]:(i,s)=>{let{payload:{name:u,pathMethod:m,contextType:v,contextName:_}}=s,[j,M]=m;return i.setIn(["examples",j,M,v,_,"activeExample"],u)},[vP]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;return i.setIn(["requestData",v,_,"requestContentType"],u)},[bP]:(i,s)=>{let{payload:{value:u,path:m,method:v}}=s;return i.setIn(["requestData",m,v,"responseContentType"],u)},[_P]:(i,s)=>{let{payload:{server:u,namespace:m,key:v,val:_}}=s;const j=m?[m,"serverVariableValues",u,v]:["serverVariableValues",u,v];return i.setIn(j,_)},[wP]:(i,s)=>{let{payload:{path:u,method:m,validationErrors:v}}=s,_=[];if(_.push("Required field is not provided"),v.missingBodyValue)return i.setIn(["requestData",u,m,"errors"],(0,et.fromJS)(_));if(v.missingRequiredKeys&&v.missingRequiredKeys.length>0){const{missingRequiredKeys:s}=v;return i.updateIn(["requestData",u,m,"bodyValue"],(0,et.fromJS)({}),(i=>s.reduce(((i,s)=>i.setIn([s,"errors"],(0,et.fromJS)(_))),i)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),i},[EP]:(i,s)=>{let{payload:{path:u,method:m}}=s;const v=i.getIn(["requestData",u,m,"bodyValue"]);if(!et.Map.isMap(v))return i.setIn(["requestData",u,m,"errors"],(0,et.fromJS)([]));const[..._]=v.keys();return _?i.updateIn(["requestData",u,m,"bodyValue"],(0,et.fromJS)({}),(i=>_.reduce(((i,s)=>i.setIn([s,"errors"],(0,et.fromJS)([]))),i))):i},[SP]:(i,s)=>{let{payload:{pathMethod:u}}=s,[m,v]=u;const _=i.getIn(["requestData",m,v,"bodyValue"]);return _?et.Map.isMap(_)?i.setIn(["requestData",m,v,"bodyValue"],(0,et.Map)()):i.setIn(["requestData",m,v,"bodyValue"],""):i}};function oas3(){return{components:iP,wrapComponents:hP,statePlugins:{spec:{wrapSelectors:Pe,selectors:Re},auth:{wrapSelectors:Te},oas3:{actions:{...qe},reducers:LP,selectors:{...ze}}}}}const webhooks=i=>{let{specSelectors:s,getComponent:u}=i;const m=s.selectWebhooksOperations(),v=Object.keys(m),_=u("OperationContainer",!0);return 0===v.length?null:He.createElement("div",{className:"webhooks"},He.createElement("h2",null,"Webhooks"),v.map((i=>He.createElement("div",{key:`${i}-webhook`},m[i].map((s=>He.createElement(_,{key:`${i}-${s.method}-webhook`,op:s.operation,tag:"webhooks",method:s.method,path:i,specPath:s.specPath,allowTryItOut:!1})))))))},oas31_components_license=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectLicenseNameField(),v=u.selectLicenseUrl(),_=s("Link");return He.createElement("div",{className:"info__license"},v?He.createElement("div",{className:"info__license__url"},He.createElement(_,{target:"_blank",href:sanitizeUrl(v)},m)):He.createElement("span",null,m))},oas31_components_contact=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectContactNameField(),v=u.selectContactUrl(),_=u.selectContactEmailField(),j=s("Link");return He.createElement("div",{className:"info__contact"},v&&He.createElement("div",null,He.createElement(j,{href:sanitizeUrl(v),target:"_blank"},m," - Website")),_&&He.createElement(j,{href:sanitizeUrl(`mailto:${_}`)},v?`Send email to ${m}`:`Contact ${m}`))},oas31_components_info=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.version(),v=u.url(),_=u.basePath(),j=u.host(),M=u.selectInfoSummaryField(),$=u.selectInfoDescriptionField(),W=u.selectInfoTitleField(),X=u.selectInfoTermsOfServiceUrl(),Y=u.selectExternalDocsUrl(),Z=u.selectExternalDocsDescriptionField(),ee=u.contact(),ie=u.license(),ae=s("Markdown",!0),le=s("Link"),ce=s("VersionStamp"),pe=s("OpenAPIVersion"),de=s("InfoUrl"),fe=s("InfoBasePath"),ye=s("License",!0),be=s("Contact",!0),_e=s("JsonSchemaDialect",!0);return He.createElement("div",{className:"info"},He.createElement("hgroup",{className:"main"},He.createElement("h2",{className:"title"},W,He.createElement("span",null,m&&He.createElement(ce,{version:m}),He.createElement(pe,{oasVersion:"3.1"}))),(j||_)&&He.createElement(fe,{host:j,basePath:_}),v&&He.createElement(de,{getComponent:s,url:v})),M&&He.createElement("p",{className:"info__summary"},M),He.createElement("div",{className:"info__description description"},He.createElement(ae,{source:$})),X&&He.createElement("div",{className:"info__tos"},He.createElement(le,{target:"_blank",href:sanitizeUrl(X)},"Terms of service")),ee.size>0&&He.createElement(be,null),ie.size>0&&He.createElement(ye,null),Y&&He.createElement(le,{className:"info__extdocs",target:"_blank",href:sanitizeUrl(Y)},Z||Y),He.createElement(_e,null))},json_schema_dialect=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectJsonSchemaDialectField(),v=u.selectJsonSchemaDialectDefault(),_=s("Link");return He.createElement(He.Fragment,null,m&&m===v&&He.createElement("p",{className:"info__jsonschemadialect"},"JSON Schema dialect:"," ",He.createElement(_,{target:"_blank",href:sanitizeUrl(m)},m)),m&&m!==v&&He.createElement("div",{className:"error-wrapper"},He.createElement("div",{className:"no-margin"},He.createElement("div",{className:"errors"},He.createElement("div",{className:"errors-wrapper"},He.createElement("h4",{className:"center"},"Warning"),He.createElement("p",{className:"message"},He.createElement("strong",null,"OpenAPI.jsonSchemaDialect")," field contains a value different from the default value of"," ",He.createElement(_,{target:"_blank",href:v},v),". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value."))))))},version_pragma_filter=i=>{let{bypass:s,isSwagger2:u,isOAS3:m,isOAS31:v,alsoShow:_,children:j}=i;return s?He.createElement("div",null,j):u&&(m||v)?He.createElement("div",{className:"version-pragma"},_,He.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},He.createElement("div",null,He.createElement("h3",null,"Unable to render this definition"),He.createElement("p",null,He.createElement("code",null,"swagger")," and ",He.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),He.createElement("p",null,"Supported version fields are ",He.createElement("code",null,'swagger: "2.0"')," and those that match ",He.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",He.createElement("code",null,"openapi: 3.1.0"),").")))):u||m||v?He.createElement("div",null,j):He.createElement("div",{className:"version-pragma"},_,He.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},He.createElement("div",null,He.createElement("h3",null,"Unable to render this definition"),He.createElement("p",null,"The provided definition does not specify a valid version field."),He.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",He.createElement("code",null,'swagger: "2.0"')," and those that match ",He.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",He.createElement("code",null,"openapi: 3.1.0"),")."))))},getModelName=i=>"string"==typeof i&&i.includes("#/components/schemas/")?(i=>{const s=i.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(s)}catch{return s}})(i.replace(/^.*#\/components\/schemas\//,"")):null,FP=(0,He.forwardRef)(((i,s)=>{let{schema:u,getComponent:m,onToggle:v}=i;const _=m("JSONSchema202012"),j=getModelName(u.get("$$ref")),M=(0,He.useCallback)(((i,s)=>{v(j,s)}),[j,v]);return He.createElement(_,{name:j,schema:u.toJS(),ref:s,onExpand:M})}));FP.defaultProps={name:"",displayName:"",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};const qP=FP,models=i=>{let{specActions:s,specSelectors:u,layoutSelectors:m,layoutActions:v,getComponent:_,getConfigs:j}=i;const M=u.selectSchemas(),$=Object.keys(M).length>0,W=["components","schemas"],{docExpansion:X,defaultModelsExpandDepth:Y}=j(),Z=Y>0&&"none"!==X,ee=m.isShown(W,Z),ie=_("Collapse"),ae=_("JSONSchema202012"),le=_("ArrowUpIcon"),ce=_("ArrowDownIcon");(0,He.useEffect)((()=>{const i=ee&&Y>1,m=null!=u.specResolvedSubtree(W);i&&!m&&s.requestResolvedSubtree(W)}),[ee,Y]);const pe=(0,He.useCallback)((()=>{v.show(W,!ee)}),[ee]),de=(0,He.useCallback)((i=>{null!==i&&v.readyToScroll(W,i)}),[]),handleJSONSchema202012Ref=i=>s=>{null!==s&&v.readyToScroll([...W,i],s)},handleJSONSchema202012Expand=i=>(m,v)=>{if(v){const m=[...W,i];null!=u.specResolvedSubtree(m)||s.requestResolvedSubtree([...W,i])}};return!$||Y<0?null:He.createElement("section",{className:lC()("models",{"is-open":ee}),ref:de},He.createElement("h4",null,He.createElement("button",{"aria-expanded":ee,className:"models-control",onClick:pe},He.createElement("span",null,"Schemas"),ee?He.createElement(le,null):He.createElement(ce,null))),He.createElement(ie,{isOpened:ee},Object.entries(M).map((i=>{let[s,u]=i;return He.createElement(ae,{key:s,ref:handleJSONSchema202012Ref(s),schema:u,name:s,onExpand:handleJSONSchema202012Expand(s)})}))))},mutual_tls_auth=i=>{let{schema:s,getComponent:u}=i;const m=u("JumpToPath",!0);return He.createElement("div",null,He.createElement("h4",null,s.get("name")," (mutualTLS)"," ",He.createElement(m,{path:["securityDefinitions",s.get("name")]})),He.createElement("p",null,"Mutual TLS is required by this API/Operation. Certificates are managed via your Operating System and/or your browser."),He.createElement("p",null,s.get("description")))};class auths_Auths extends He.Component{constructor(i,s){super(i,s),this.state={}}onAuthChange=i=>{let{name:s}=i;this.setState({[s]:i})};submitAuth=i=>{i.preventDefault();let{authActions:s}=this.props;s.authorizeWithPersistOption(this.state)};logoutClick=i=>{i.preventDefault();let{authActions:s,definitions:u}=this.props,m=u.map(((i,s)=>s)).toArray();this.setState(m.reduce(((i,s)=>(i[s]="",i)),{})),s.logoutWithPersistOption(m)};close=i=>{i.preventDefault();let{authActions:s}=this.props;s.showDefinitions(!1)};render(){let{definitions:i,getComponent:s,authSelectors:u,errSelectors:m}=this.props;const v=s("AuthItem"),_=s("oauth2",!0),j=s("Button"),M=u.authorized(),$=i.filter(((i,s)=>!!M.get(s))),W=i.filter((i=>"oauth2"!==i.get("type")&&"mutualTLS"!==i.get("type"))),X=i.filter((i=>"oauth2"===i.get("type"))),Y=i.filter((i=>"mutualTLS"===i.get("type")));return He.createElement("div",{className:"auth-container"},W.size>0&&He.createElement("form",{onSubmit:this.submitAuth},W.map(((i,u)=>He.createElement(v,{key:u,schema:i,name:u,getComponent:s,onAuthChange:this.onAuthChange,authorized:M,errSelectors:m}))).toArray(),He.createElement("div",{className:"auth-btn-wrapper"},W.size===$.size?He.createElement(j,{className:"btn modal-btn auth",onClick:this.logoutClick,"aria-label":"Remove authorization"},"Logout"):He.createElement(j,{type:"submit",className:"btn modal-btn auth authorize","aria-label":"Apply credentials"},"Authorize"),He.createElement(j,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),X.size>0?He.createElement("div",null,He.createElement("div",{className:"scope-def"},He.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),He.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),i.filter((i=>"oauth2"===i.get("type"))).map(((i,s)=>He.createElement("div",{key:s},He.createElement(_,{authorized:M,schema:i,name:s})))).toArray()):null,Y.size>0&&He.createElement("div",null,Y.map(((i,u)=>He.createElement(v,{key:u,schema:i,name:u,getComponent:s,onAuthChange:this.onAuthChange,authorized:M,errSelectors:m}))).toArray()))}}const $P=auths_Auths,isOAS31=i=>{const s=i.get("openapi");return"string"==typeof s&&/^3\.1\.(?:[1-9]\d*|0)$/.test(s)},fn_createOnlyOAS31Selector=i=>function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.getSystem().specSelectors.isOAS31()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}},createOnlyOAS31SelectorWrapper=i=>(s,u)=>function(m){for(var v=arguments.length,_=new Array(v>1?v-1:0),j=1;jfunction(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{const v=i(s,u,...m);return"function"==typeof v?v(u):v}},createOnlyOAS31ComponentWrapper=i=>(s,u)=>m=>u.specSelectors.isOAS31()?He.createElement(i,Ao()({},m,{originalComponent:s,getSystem:u.getSystem})):He.createElement(s,m),UP=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31License",!0);return He.createElement(u,null)})),zP=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31Contact",!0);return He.createElement(u,null)})),VP=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31Info",!0);return He.createElement(u,null)})),makeIsExpandable=(i,s)=>{const{fn:u}=s();if("function"!=typeof i)return null;const{hasKeyword:m}=u.jsonSchema202012;return s=>i(s)||m(s,"example")||s?.xml||s?.discriminator||s?.externalDocs},getProperties=(i,s)=>{let{includeReadOnly:u,includeWriteOnly:m}=s;if(!i?.properties)return{};const v=Object.entries(i.properties).filter((i=>{let[,s]=i;return(!(!0===s?.readOnly)||u)&&(!(!0===s?.writeOnly)||m)}));return Object.fromEntries(v)},WP=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s,...u}=i;const m=s(),{getComponent:v,fn:_,getConfigs:j}=m,M=j(),$=v("OAS31Model"),W=v("JSONSchema202012"),X=v("JSONSchema202012Keyword$schema"),Y=v("JSONSchema202012Keyword$vocabulary"),Z=v("JSONSchema202012Keyword$id"),ee=v("JSONSchema202012Keyword$anchor"),ie=v("JSONSchema202012Keyword$dynamicAnchor"),ae=v("JSONSchema202012Keyword$ref"),le=v("JSONSchema202012Keyword$dynamicRef"),ce=v("JSONSchema202012Keyword$defs"),pe=v("JSONSchema202012Keyword$comment"),de=v("JSONSchema202012KeywordAllOf"),fe=v("JSONSchema202012KeywordAnyOf"),ye=v("JSONSchema202012KeywordOneOf"),be=v("JSONSchema202012KeywordNot"),_e=v("JSONSchema202012KeywordIf"),we=v("JSONSchema202012KeywordThen"),Se=v("JSONSchema202012KeywordElse"),xe=v("JSONSchema202012KeywordDependentSchemas"),Ie=v("JSONSchema202012KeywordPrefixItems"),Pe=v("JSONSchema202012KeywordItems"),Te=v("JSONSchema202012KeywordContains"),Re=v("JSONSchema202012KeywordProperties"),qe=v("JSONSchema202012KeywordPatternProperties"),ze=v("JSONSchema202012KeywordAdditionalProperties"),Ve=v("JSONSchema202012KeywordPropertyNames"),We=v("JSONSchema202012KeywordUnevaluatedItems"),Xe=v("JSONSchema202012KeywordUnevaluatedProperties"),Ye=v("JSONSchema202012KeywordType"),Qe=v("JSONSchema202012KeywordEnum"),et=v("JSONSchema202012KeywordConst"),tt=v("JSONSchema202012KeywordConstraint"),rt=v("JSONSchema202012KeywordDependentRequired"),nt=v("JSONSchema202012KeywordContentSchema"),ot=v("JSONSchema202012KeywordTitle"),it=v("JSONSchema202012KeywordDescription"),at=v("JSONSchema202012KeywordDefault"),st=v("JSONSchema202012KeywordDeprecated"),lt=v("JSONSchema202012KeywordReadOnly"),ct=v("JSONSchema202012KeywordWriteOnly"),ut=v("JSONSchema202012Accordion"),pt=v("JSONSchema202012ExpandDeepButton"),ht=v("JSONSchema202012ChevronRightIcon"),dt=v("withJSONSchema202012Context")($,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:M.defaultModelExpandDepth,includeReadOnly:Boolean(u.includeReadOnly),includeWriteOnly:Boolean(u.includeWriteOnly)},components:{JSONSchema:W,Keyword$schema:X,Keyword$vocabulary:Y,Keyword$id:Z,Keyword$anchor:ee,Keyword$dynamicAnchor:ie,Keyword$ref:ae,Keyword$dynamicRef:le,Keyword$defs:ce,Keyword$comment:pe,KeywordAllOf:de,KeywordAnyOf:fe,KeywordOneOf:ye,KeywordNot:be,KeywordIf:_e,KeywordThen:we,KeywordElse:Se,KeywordDependentSchemas:xe,KeywordPrefixItems:Ie,KeywordItems:Pe,KeywordContains:Te,KeywordProperties:Re,KeywordPatternProperties:qe,KeywordAdditionalProperties:ze,KeywordPropertyNames:Ve,KeywordUnevaluatedItems:We,KeywordUnevaluatedProperties:Xe,KeywordType:Ye,KeywordEnum:Qe,KeywordConst:et,KeywordConstraint:tt,KeywordDependentRequired:rt,KeywordContentSchema:nt,KeywordTitle:ot,KeywordDescription:it,KeywordDefault:at,KeywordDeprecated:st,KeywordReadOnly:lt,KeywordWriteOnly:ct,Accordion:ut,ExpandDeepButton:pt,ChevronRightIcon:ht},fn:{upperFirst:_.upperFirst,isExpandable:makeIsExpandable(_.jsonSchema202012.isExpandable,s),getProperties}});return He.createElement(dt,u)})),KP=WP,HP=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const{getComponent:u,fn:m,getConfigs:v}=s(),_=v();if(HP.ModelsWithJSONSchemaContext)return He.createElement(HP.ModelsWithJSONSchemaContext,null);const j=u("OAS31Models",!0),M=u("JSONSchema202012"),$=u("JSONSchema202012Keyword$schema"),W=u("JSONSchema202012Keyword$vocabulary"),X=u("JSONSchema202012Keyword$id"),Y=u("JSONSchema202012Keyword$anchor"),Z=u("JSONSchema202012Keyword$dynamicAnchor"),ee=u("JSONSchema202012Keyword$ref"),ie=u("JSONSchema202012Keyword$dynamicRef"),ae=u("JSONSchema202012Keyword$defs"),le=u("JSONSchema202012Keyword$comment"),ce=u("JSONSchema202012KeywordAllOf"),pe=u("JSONSchema202012KeywordAnyOf"),de=u("JSONSchema202012KeywordOneOf"),fe=u("JSONSchema202012KeywordNot"),ye=u("JSONSchema202012KeywordIf"),be=u("JSONSchema202012KeywordThen"),_e=u("JSONSchema202012KeywordElse"),we=u("JSONSchema202012KeywordDependentSchemas"),Se=u("JSONSchema202012KeywordPrefixItems"),xe=u("JSONSchema202012KeywordItems"),Ie=u("JSONSchema202012KeywordContains"),Pe=u("JSONSchema202012KeywordProperties"),Te=u("JSONSchema202012KeywordPatternProperties"),Re=u("JSONSchema202012KeywordAdditionalProperties"),qe=u("JSONSchema202012KeywordPropertyNames"),ze=u("JSONSchema202012KeywordUnevaluatedItems"),Ve=u("JSONSchema202012KeywordUnevaluatedProperties"),We=u("JSONSchema202012KeywordType"),Xe=u("JSONSchema202012KeywordEnum"),Ye=u("JSONSchema202012KeywordConst"),Qe=u("JSONSchema202012KeywordConstraint"),et=u("JSONSchema202012KeywordDependentRequired"),tt=u("JSONSchema202012KeywordContentSchema"),rt=u("JSONSchema202012KeywordTitle"),nt=u("JSONSchema202012KeywordDescription"),ot=u("JSONSchema202012KeywordDefault"),it=u("JSONSchema202012KeywordDeprecated"),at=u("JSONSchema202012KeywordReadOnly"),st=u("JSONSchema202012KeywordWriteOnly"),lt=u("JSONSchema202012Accordion"),ct=u("JSONSchema202012ExpandDeepButton"),ut=u("JSONSchema202012ChevronRightIcon"),pt=u("withJSONSchema202012Context");return HP.ModelsWithJSONSchemaContext=pt(j,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:_.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:M,Keyword$schema:$,Keyword$vocabulary:W,Keyword$id:X,Keyword$anchor:Y,Keyword$dynamicAnchor:Z,Keyword$ref:ee,Keyword$dynamicRef:ie,Keyword$defs:ae,Keyword$comment:le,KeywordAllOf:ce,KeywordAnyOf:pe,KeywordOneOf:de,KeywordNot:fe,KeywordIf:ye,KeywordThen:be,KeywordElse:_e,KeywordDependentSchemas:we,KeywordPrefixItems:Se,KeywordItems:xe,KeywordContains:Ie,KeywordProperties:Pe,KeywordPatternProperties:Te,KeywordAdditionalProperties:Re,KeywordPropertyNames:qe,KeywordUnevaluatedItems:ze,KeywordUnevaluatedProperties:Ve,KeywordType:We,KeywordEnum:Xe,KeywordConst:Ye,KeywordConstraint:Qe,KeywordDependentRequired:et,KeywordContentSchema:tt,KeywordTitle:rt,KeywordDescription:nt,KeywordDefault:ot,KeywordDeprecated:it,KeywordReadOnly:at,KeywordWriteOnly:st,Accordion:lt,ExpandDeepButton:ct,ChevronRightIcon:ut},fn:{upperFirst:m.upperFirst,isExpandable:m.jsonSchema202012.isExpandable,getProperties:m.jsonSchema202012.getProperties}}),He.createElement(HP.ModelsWithJSONSchemaContext,null)}));HP.ModelsWithJSONSchemaContext=null;const JP=HP,wrap_components_version_pragma_filter=(i,s)=>i=>{const u=s.specSelectors.isOAS31(),m=s.getComponent("OAS31VersionPragmaFilter");return He.createElement(m,Ao()({isOAS31:u},i))},GP=createOnlyOAS31ComponentWrapper((i=>{let{originalComponent:s,...u}=i;const{getComponent:m,schema:v}=u,_=m("MutualTLSAuth",!0);return"mutualTLS"===v.get("type")?He.createElement(_,{schema:v}):He.createElement(s,u)})),XP=GP,YP=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s,...u}=i;const m=s().getComponent("OAS31Auths",!0);return He.createElement(m,u)})),QP=(0,et.Map)(),ZP=Xt(((i,s)=>s.specSelectors.specJson()),isOAS31),selectors_webhooks=()=>i=>i.specSelectors.specJson().get("webhooks",QP),eN=Xt(((i,s)=>s.specSelectors.webhooks()),((i,s)=>s.specSelectors.validOperationMethods()),((i,s)=>s.specSelectors.specResolvedSubtree(["webhooks"])),((i,s)=>et.Map.isMap(i)?i.reduce(((i,u,m)=>{if(!et.Map.isMap(u))return i;const v=u.entrySeq().filter((i=>{let[u]=i;return s.includes(u)})).map((i=>{let[s,u]=i;return{operation:(0,et.Map)({operation:u}),method:s,path:m,specPath:(0,et.List)(["webhooks",m,s])}}));return i.concat(v)}),(0,et.List)()).groupBy((i=>i.path)).map((i=>i.toArray())).toObject():{})),selectors_license=()=>i=>i.specSelectors.info().get("license",QP),selectLicenseNameField=()=>i=>i.specSelectors.license().get("name","License"),selectLicenseUrlField=()=>i=>i.specSelectors.license().get("url"),tN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectLicenseUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectLicenseIdentifierField=()=>i=>i.specSelectors.license().get("identifier"),selectors_contact=()=>i=>i.specSelectors.info().get("contact",QP),selectContactNameField=()=>i=>i.specSelectors.contact().get("name","the developer"),selectContactEmailField=()=>i=>i.specSelectors.contact().get("email"),selectContactUrlField=()=>i=>i.specSelectors.contact().get("url"),rN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectContactUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectInfoTitleField=()=>i=>i.specSelectors.info().get("title"),selectInfoSummaryField=()=>i=>i.specSelectors.info().get("summary"),selectInfoDescriptionField=()=>i=>i.specSelectors.info().get("description"),selectInfoTermsOfServiceField=()=>i=>i.specSelectors.info().get("termsOfService"),nN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectInfoTermsOfServiceField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectExternalDocsDescriptionField=()=>i=>i.specSelectors.externalDocs().get("description"),selectExternalDocsUrlField=()=>i=>i.specSelectors.externalDocs().get("url"),oN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectExternalDocsUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectJsonSchemaDialectField=()=>i=>i.specSelectors.specJson().get("jsonSchemaDialect"),selectJsonSchemaDialectDefault=()=>"https://spec.openapis.org/oas/3.1/dialect/base",iN=Xt(((i,s)=>s.specSelectors.definitions()),((i,s)=>s.specSelectors.specResolvedSubtree(["components","schemas"])),((i,s)=>et.Map.isMap(i)?et.Map.isMap(s)?Object.entries(i.toJS()).reduce(((i,u)=>{let[m,v]=u;const _=s.get(m);return i[m]=_?.toJS()||v,i}),{}):i.toJS():{})),wrap_selectors_isOAS3=(i,s)=>function(u){const m=s.specSelectors.isOAS31();for(var v=arguments.length,_=new Array(v>1?v-1:0),j=1;j(i,s)=>s.oas31Selectors.selectLicenseUrl())),sN=createOnlyOAS31SelectorWrapper((()=>(i,s)=>{const u=s.specSelectors.securityDefinitions();let m=i();return u?(u.entrySeq().forEach((i=>{let[s,u]=i;"mutualTLS"===u.get("type")&&(m=m.push(new et.Map({[s]:u})))})),m):m})),lN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectLicenseUrlField()),((i,s)=>s.specSelectors.selectLicenseIdentifierField()),((i,s,u,m)=>u?safeBuildUrl(u,i,{selectedServer:s}):m?`https://spdx.org/licenses/${m}.html`:void 0)),keywords_Example=i=>{let{schema:s,getSystem:u}=i;const{fn:m}=u(),{hasKeyword:v,stringify:_}=m.jsonSchema202012.useFn();return v(s,"example")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--example"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Example"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},_(s.example))):null},keywords_Xml=i=>{let{schema:s,getSystem:u}=i;const m=s?.xml||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!!(m.name||m.namespace||m.prefix),[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ie=M("Accordion"),ae=M("ExpandDeepButton"),le=_("JSONSchema202012DeepExpansionContext")(),ce=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),pe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(le.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml"},W?He.createElement(He.Fragment,null,He.createElement(ie,{expanded:X,onChange:ce},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML")),He.createElement(ae,{expanded:X,onClick:pe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML"),!0===m.attribute&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"attribute"),!0===m.wrapped&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"wrapped"),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement(He.Fragment,null,m.name&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"name"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.name))),m.namespace&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"namespace"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.namespace))),m.prefix&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"prefix"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.prefix)))))))},DiscriminatorMapping_DiscriminatorMapping=i=>{let{discriminator:s}=i;const u=s?.mapping||{};return 0===Object.keys(u).length?null:Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("div",{key:`${s}-${u}`,className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},s),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},u))}))};DiscriminatorMapping_DiscriminatorMapping.defaultProps={mapping:void 0};const cN=DiscriminatorMapping_DiscriminatorMapping,keywords_Discriminator_Discriminator=i=>{let{schema:s,getSystem:u}=i;const m=s?.discriminator||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!!m.mapping,[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ie=M("Accordion"),ae=M("ExpandDeepButton"),le=_("JSONSchema202012DeepExpansionContext")(),ce=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),pe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(le.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator"},W?He.createElement(He.Fragment,null,He.createElement(ie,{expanded:X,onChange:ce},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator")),He.createElement(ae,{expanded:X,onClick:pe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator"),m.propertyName&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},m.propertyName),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement(cN,{discriminator:m})))))},keywords_ExternalDocs=i=>{let{schema:s,getSystem:u}=i;const m=s?.externalDocs||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!(!m.description&&!m.url),[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ie=M("Accordion"),ae=M("ExpandDeepButton"),le=_("JSONSchema202012KeywordDescription"),ce=_("Link"),pe=_("JSONSchema202012DeepExpansionContext")(),de=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),fe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(pe.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs"},W?He.createElement(He.Fragment,null,He.createElement(ie,{expanded:X,onChange:de},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation")),He.createElement(ae,{expanded:X,onClick:fe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation"),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement(He.Fragment,null,m.description&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement(le,{schema:m,getSystem:u})),m.url&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"url"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},He.createElement(ce,{target:"_blank",href:sanitizeUrl(m.url)},m.url))))))))},keywords_Description=i=>{let{schema:s,getSystem:u}=i;if(!s?.description)return null;const{getComponent:m}=u(),v=m("Markdown");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},He.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},He.createElement(v,{source:s.description})))},uN=createOnlyOAS31ComponentWrapper(keywords_Description),pN=createOnlyOAS31ComponentWrapper((i=>{let{schema:s,getSystem:u,originalComponent:m}=i;const{getComponent:v}=u(),_=v("JSONSchema202012KeywordDiscriminator"),j=v("JSONSchema202012KeywordXml"),M=v("JSONSchema202012KeywordExample"),$=v("JSONSchema202012KeywordExternalDocs");return He.createElement(He.Fragment,null,He.createElement(m,{schema:s}),He.createElement(_,{schema:s,getSystem:u}),He.createElement(j,{schema:s,getSystem:u}),He.createElement($,{schema:s,getSystem:u}),He.createElement(M,{schema:s,getSystem:u}))})),hN=pN,keywords_Properties=i=>{let{schema:s,getSystem:u}=i;const{fn:m}=u(),{useComponent:v}=m.jsonSchema202012,{getDependentRequired:_,getProperties:j}=m.jsonSchema202012.useFn(),M=m.jsonSchema202012.useConfig(),$=Array.isArray(s?.required)?s.required:[],W=v("JSONSchema"),X=j(s,M);return 0===Object.keys(X).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},He.createElement("ul",null,Object.entries(X).map((i=>{let[u,m]=i;const v=$.includes(u),j=_(u,s);return He.createElement("li",{key:u,className:lC()("json-schema-2020-12-property",{"json-schema-2020-12-property--required":v})},He.createElement(W,{name:u,schema:m,dependentRequired:j}))}))))},dN=createOnlyOAS31ComponentWrapper(keywords_Properties);const fN=function afterLoad(i){let{fn:s,getSystem:u}=i;if(s.jsonSchema202012){const i=makeIsExpandable(s.jsonSchema202012.isExpandable,u);Object.assign(this.fn.jsonSchema202012,{isExpandable:i,getProperties})}if("function"==typeof s.sampleFromSchema&&s.jsonSchema202012){const i=((i,s)=>{const{fn:u,specSelectors:m}=s;return Object.fromEntries(Object.entries(i).map((i=>{let[s,v]=i;const _=u[s];return[s,function(){return m.isOAS31()?v(...arguments):"function"==typeof _?_(...arguments):void 0}]})))})({sampleFromSchema:s.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:s.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:s.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:s.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:s.jsonSchema202012.memoizedCreateXMLExample},u());Object.assign(this.fn,i)}},oas31=i=>{let{fn:s}=i;const u=s.createSystemSelector||fn_createSystemSelector,m=s.createOnlyOAS31Selector||fn_createOnlyOAS31Selector;return{afterLoad:fN,fn:{isOAS31,createSystemSelector:fn_createSystemSelector,createOnlyOAS31Selector:fn_createOnlyOAS31Selector},components:{Webhooks:webhooks,JsonSchemaDialect:json_schema_dialect,MutualTLSAuth:mutual_tls_auth,OAS31Info:oas31_components_info,OAS31License:oas31_components_license,OAS31Contact:oas31_components_contact,OAS31VersionPragmaFilter:version_pragma_filter,OAS31Model:qP,OAS31Models:models,OAS31Auths:$P,JSONSchema202012KeywordExample:keywords_Example,JSONSchema202012KeywordXml:keywords_Xml,JSONSchema202012KeywordDiscriminator:keywords_Discriminator_Discriminator,JSONSchema202012KeywordExternalDocs:keywords_ExternalDocs},wrapComponents:{InfoContainer:VP,License:UP,Contact:zP,VersionPragmaFilter:wrap_components_version_pragma_filter,Model:KP,Models:JP,AuthItem:XP,auths:YP,JSONSchema202012KeywordDescription:uN,JSONSchema202012KeywordDefault:hN,JSONSchema202012KeywordProperties:dN},statePlugins:{auth:{wrapSelectors:{definitionsToAuthorize:sN}},spec:{selectors:{isOAS31:u(ZP),license:selectors_license,selectLicenseNameField,selectLicenseUrlField,selectLicenseIdentifierField:m(selectLicenseIdentifierField),selectLicenseUrl:u(tN),contact:selectors_contact,selectContactNameField,selectContactEmailField,selectContactUrlField,selectContactUrl:u(rN),selectInfoTitleField,selectInfoSummaryField:m(selectInfoSummaryField),selectInfoDescriptionField,selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:u(nN),selectExternalDocsDescriptionField,selectExternalDocsUrlField,selectExternalDocsUrl:u(oN),webhooks:m(selectors_webhooks),selectWebhooksOperations:m(u(eN)),selectJsonSchemaDialectField,selectJsonSchemaDialectDefault,selectSchemas:u(iN)},wrapSelectors:{isOAS3:wrap_selectors_isOAS3,selectLicenseUrl:aN}},oas31:{selectors:{selectLicenseUrl:m(u(lN))}}}}},mN=kC().object,gN=kC().bool,yN=(kC().oneOfType([mN,gN]),(0,He.createContext)(null));yN.displayName="JSONSchemaContext";const vN=(0,He.createContext)(0);vN.displayName="JSONSchemaLevelContext";const bN=(0,He.createContext)(!1);bN.displayName="JSONSchemaDeepExpansionContext";const _N=(0,He.createContext)(new Set),useConfig=()=>{const{config:i}=(0,He.useContext)(yN);return i},useComponent=i=>{const{components:s}=(0,He.useContext)(yN);return s[i]||null},useFn=function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:s}=(0,He.useContext)(yN);return void 0!==i?s[i]:s},useLevel=()=>{const i=(0,He.useContext)(vN);return[i,i+1]},useIsExpandedDeeply=()=>(0,He.useContext)(bN),useRenderedSchemas=function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===i)return(0,He.useContext)(_N);const s=(0,He.useContext)(_N);return new Set([...s,i])},wN=(0,He.forwardRef)(((i,s)=>{let{schema:u,name:m,dependentRequired:v,onExpand:_}=i;const j=useFn(),M=(()=>{const[i]=useLevel(),{defaultExpandedLevels:s}=useConfig();return s-i>0})(),$=useIsExpandedDeeply(),[W,X]=(0,He.useState)(M||$),[Y,Z]=(0,He.useState)($),[ee,ie]=useLevel(),ae=(()=>{const[i]=useLevel();return i>0})(),le=j.isExpandable(u)||v.length>0,ce=(i=>useRenderedSchemas().has(i))(u),pe=useRenderedSchemas(u),de=j.stringifyConstraints(u),fe=useComponent("Accordion"),ye=useComponent("Keyword$schema"),be=useComponent("Keyword$vocabulary"),_e=useComponent("Keyword$id"),we=useComponent("Keyword$anchor"),Se=useComponent("Keyword$dynamicAnchor"),xe=useComponent("Keyword$ref"),Ie=useComponent("Keyword$dynamicRef"),Pe=useComponent("Keyword$defs"),Te=useComponent("Keyword$comment"),Re=useComponent("KeywordAllOf"),qe=useComponent("KeywordAnyOf"),ze=useComponent("KeywordOneOf"),Ve=useComponent("KeywordNot"),We=useComponent("KeywordIf"),Xe=useComponent("KeywordThen"),Ye=useComponent("KeywordElse"),Qe=useComponent("KeywordDependentSchemas"),et=useComponent("KeywordPrefixItems"),tt=useComponent("KeywordItems"),rt=useComponent("KeywordContains"),nt=useComponent("KeywordProperties"),ot=useComponent("KeywordPatternProperties"),it=useComponent("KeywordAdditionalProperties"),at=useComponent("KeywordPropertyNames"),st=useComponent("KeywordUnevaluatedItems"),lt=useComponent("KeywordUnevaluatedProperties"),ct=useComponent("KeywordType"),ut=useComponent("KeywordEnum"),pt=useComponent("KeywordConst"),ht=useComponent("KeywordConstraint"),dt=useComponent("KeywordDependentRequired"),mt=useComponent("KeywordContentSchema"),gt=useComponent("KeywordTitle"),yt=useComponent("KeywordDescription"),vt=useComponent("KeywordDefault"),bt=useComponent("KeywordDeprecated"),_t=useComponent("KeywordReadOnly"),wt=useComponent("KeywordWriteOnly"),Et=useComponent("ExpandDeepButton");(0,He.useEffect)((()=>{Z($)}),[$]),(0,He.useEffect)((()=>{Z(Y)}),[Y]);const St=(0,He.useCallback)(((i,s)=>{X(s),!s&&Z(!1),_(i,s,!1)}),[_]),xt=(0,He.useCallback)(((i,s)=>{X(s),Z(s),_(i,s,!0)}),[_]);return He.createElement(vN.Provider,{value:ie},He.createElement(bN.Provider,{value:Y},He.createElement(_N.Provider,{value:pe},He.createElement("article",{ref:s,"data-json-schema-level":ee,className:lC()("json-schema-2020-12",{"json-schema-2020-12--embedded":ae,"json-schema-2020-12--circular":ce})},He.createElement("div",{className:"json-schema-2020-12-head"},le&&!ce?He.createElement(He.Fragment,null,He.createElement(fe,{expanded:W,onChange:St},He.createElement(gt,{title:m,schema:u})),He.createElement(Et,{expanded:W,onClick:xt})):He.createElement(gt,{title:m,schema:u}),He.createElement(bt,{schema:u}),He.createElement(_t,{schema:u}),He.createElement(wt,{schema:u}),He.createElement(ct,{schema:u,isCircular:ce}),de.length>0&&de.map((i=>He.createElement(ht,{key:`${i.scope}-${i.value}`,constraint:i})))),He.createElement("div",{className:lC()("json-schema-2020-12-body",{"json-schema-2020-12-body--collapsed":!W})},W&&He.createElement(He.Fragment,null,He.createElement(yt,{schema:u}),!ce&&le&&He.createElement(He.Fragment,null,He.createElement(nt,{schema:u}),He.createElement(ot,{schema:u}),He.createElement(it,{schema:u}),He.createElement(lt,{schema:u}),He.createElement(at,{schema:u}),He.createElement(Re,{schema:u}),He.createElement(qe,{schema:u}),He.createElement(ze,{schema:u}),He.createElement(Ve,{schema:u}),He.createElement(We,{schema:u}),He.createElement(Xe,{schema:u}),He.createElement(Ye,{schema:u}),He.createElement(Qe,{schema:u}),He.createElement(et,{schema:u}),He.createElement(tt,{schema:u}),He.createElement(st,{schema:u}),He.createElement(rt,{schema:u}),He.createElement(mt,{schema:u})),He.createElement(ut,{schema:u}),He.createElement(pt,{schema:u}),He.createElement(dt,{schema:u,dependentRequired:v}),He.createElement(vt,{schema:u}),He.createElement(ye,{schema:u}),He.createElement(be,{schema:u}),He.createElement(_e,{schema:u}),He.createElement(we,{schema:u}),He.createElement(Se,{schema:u}),He.createElement(xe,{schema:u}),!ce&&le&&He.createElement(Pe,{schema:u}),He.createElement(Ie,{schema:u}),He.createElement(Te,{schema:u})))))))}));wN.defaultProps={name:"",dependentRequired:[],onExpand:()=>{}};const EN=wN,keywords_$schema=i=>{let{schema:s}=i;return s?.$schema?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$schema"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$schema)):null},$vocabulary_$vocabulary=i=>{let{schema:s}=i;const u=useIsExpandedDeeply(),[m,v]=(0,He.useState)(u),_=useComponent("Accordion"),j=(0,He.useCallback)((()=>{v((i=>!i))}),[]);return s?.$vocabulary?"object"!=typeof s.$vocabulary?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary"},He.createElement(_,{expanded:m,onChange:j},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$vocabulary")),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",null,m&&Object.entries(s.$vocabulary).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:lC()("json-schema-2020-12-$vocabulary-uri",{"json-schema-2020-12-$vocabulary-uri--disabled":!u})},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s))})))):null},keywords_$id=i=>{let{schema:s}=i;return s?.$id?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$id"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$id)):null},keywords_$anchor=i=>{let{schema:s}=i;return s?.$anchor?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$anchor"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$anchor)):null},keywords_$dynamicAnchor=i=>{let{schema:s}=i;return s?.$dynamicAnchor?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicAnchor"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$dynamicAnchor)):null},keywords_$ref=i=>{let{schema:s}=i;return s?.$ref?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$ref"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$ref)):null},keywords_$dynamicRef=i=>{let{schema:s}=i;return s?.$dynamicRef?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicRef"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$dynamicRef)):null},keywords_$defs=i=>{let{schema:s}=i;const u=s?.$defs||{},m=useIsExpandedDeeply(),[v,_]=(0,He.useState)(m),[j,M]=(0,He.useState)(!1),$=useComponent("Accordion"),W=useComponent("ExpandDeepButton"),X=useComponent("JSONSchema"),Y=(0,He.useCallback)((()=>{_((i=>!i))}),[]),Z=(0,He.useCallback)(((i,s)=>{_(s),M(s)}),[]);return 0===Object.keys(u).length?null:He.createElement(bN.Provider,{value:j},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs"},He.createElement($,{expanded:v,onChange:Y},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$defs")),He.createElement(W,{expanded:v,onClick:Z}),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!v})},v&&He.createElement(He.Fragment,null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(X,{name:s,schema:u}))}))))))},keywords_$comment=i=>{let{schema:s}=i;return s?.$comment?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$comment"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$comment)):null},keywords_AllOf=i=>{let{schema:s}=i;const u=s?.allOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ie=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(bN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"All of")),He.createElement(X,{expanded:_,onClick:ie}),He.createElement(Z,{schema:{allOf:u}}),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_AnyOf=i=>{let{schema:s}=i;const u=s?.anyOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ie=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(bN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Any of")),He.createElement(X,{expanded:_,onClick:ie}),He.createElement(Z,{schema:{anyOf:u}}),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_OneOf=i=>{let{schema:s}=i;const u=s?.oneOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ie=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(bN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"One of")),He.createElement(X,{expanded:_,onClick:ie}),He.createElement(Z,{schema:{oneOf:u}}),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_Not=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"not"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Not");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--not"},He.createElement(m,{name:v,schema:s.not}))},keywords_If=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"if"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"If");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},He.createElement(m,{name:v,schema:s.if}))},keywords_Then=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"then"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Then");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--then"},He.createElement(m,{name:v,schema:s.then}))},keywords_Else=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"else"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Else");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},He.createElement(m,{name:v,schema:s.else}))},keywords_DependentSchemas=i=>{let{schema:s}=i;const u=s?.dependentSchemas||[],m=useIsExpandedDeeply(),[v,_]=(0,He.useState)(m),[j,M]=(0,He.useState)(!1),$=useComponent("Accordion"),W=useComponent("ExpandDeepButton"),X=useComponent("JSONSchema"),Y=(0,He.useCallback)((()=>{_((i=>!i))}),[]),Z=(0,He.useCallback)(((i,s)=>{_(s),M(s)}),[]);return"object"!=typeof u||0===Object.keys(u).length?null:He.createElement(bN.Provider,{value:j},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas"},He.createElement($,{expanded:v,onChange:Y},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Dependent schemas")),He.createElement(W,{expanded:v,onClick:Z}),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!v})},v&&He.createElement(He.Fragment,null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(X,{name:s,schema:u}))}))))))},keywords_PrefixItems=i=>{let{schema:s}=i;const u=s?.prefixItems||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ie=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(bN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Prefix items")),He.createElement(X,{expanded:_,onClick:ie}),He.createElement(Z,{schema:{prefixItems:u}}),He.createElement("ul",{className:lC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_Items=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"items"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Items");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--items"},He.createElement(m,{name:v,schema:s.items}))},keywords_Contains=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"contains"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Contains");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains"},He.createElement(m,{name:v,schema:s.contains}))},keywords_Properties_Properties=i=>{let{schema:s}=i;const u=useFn(),m=s?.properties||{},v=Array.isArray(s?.required)?s.required:[],_=useComponent("JSONSchema");return 0===Object.keys(m).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},He.createElement("ul",null,Object.entries(m).map((i=>{let[m,j]=i;const M=v.includes(m),$=u.getDependentRequired(m,s);return He.createElement("li",{key:m,className:lC()("json-schema-2020-12-property",{"json-schema-2020-12-property--required":M})},He.createElement(_,{name:m,schema:j,dependentRequired:$}))}))))},keywords_PatternProperties_PatternProperties=i=>{let{schema:s}=i;const u=s?.patternProperties||{},m=useComponent("JSONSchema");return 0===Object.keys(u).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties"},He.createElement("ul",null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(m,{name:s,schema:u}))}))))},keywords_AdditionalProperties=i=>{let{schema:s}=i;const u=useFn(),{additionalProperties:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"additionalProperties"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Additional properties");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties"},!0===m?He.createElement(He.Fragment,null,_,He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"allowed")):!1===m?He.createElement(He.Fragment,null,_,He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"forbidden")):He.createElement(v,{name:_,schema:m}))},keywords_PropertyNames=i=>{let{schema:s}=i;const u=useFn(),{propertyNames:m}=s,v=useComponent("JSONSchema"),_=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Property names");return u.hasKeyword(s,"propertyNames")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames"},He.createElement(v,{name:_,schema:m})):null},keywords_UnevaluatedItems=i=>{let{schema:s}=i;const u=useFn(),{unevaluatedItems:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"unevaluatedItems"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated items");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems"},He.createElement(v,{name:_,schema:m}))},keywords_UnevaluatedProperties=i=>{let{schema:s}=i;const u=useFn(),{unevaluatedProperties:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"unevaluatedProperties"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated properties");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties"},He.createElement(v,{name:_,schema:m}))},Type_Type=i=>{let{schema:s,isCircular:u}=i;const m=useFn().getType(s),v=u?" [circular]":"";return He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},`${m}${v}`)};Type_Type.defaultProps={isCircular:!1};const SN=Type_Type,Enum_Enum=i=>{let{schema:s}=i;const u=useFn();return Array.isArray(s?.enum)?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Allowed values"),He.createElement("ul",null,s.enum.map((i=>{const s=u.stringify(i);return He.createElement("li",{key:s},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},s))})))):null},keywords_Const=i=>{let{schema:s}=i;const u=useFn();return u.hasKeyword(s,"const")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--const"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Const"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},u.stringify(s.const))):null},Constraint=i=>{let{constraint:s}=i;return He.createElement("span",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${s.scope}`},s.value)},xN=He.memo(Constraint),DependentRequired_DependentRequired=i=>{let{dependentRequired:s}=i;return 0===s.length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Required when defined"),He.createElement("ul",null,s.map((i=>He.createElement("li",{key:i},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning"},i))))))},keywords_ContentSchema=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"contentSchema"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Content schema");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema"},He.createElement(m,{name:v,schema:s.contentSchema}))},Title=i=>{let{title:s,schema:u}=i;const m=useFn();return s||m.getTitle(u)?He.createElement("div",{className:"json-schema-2020-12__title"},s||m.getTitle(u)):null};Title.defaultProps={title:""};const kN=Title,keywords_Description_Description=i=>{let{schema:s}=i;return s?.description?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},He.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},s.description)):null},keywords_Default=i=>{let{schema:s}=i;const u=useFn();return u.hasKeyword(s,"default")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--default"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Default"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},u.stringify(s.default))):null},keywords_Deprecated=i=>{let{schema:s}=i;return!0!==s?.deprecated?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning"},"deprecated")},keywords_ReadOnly=i=>{let{schema:s}=i;return!0!==s?.readOnly?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"read-only")},keywords_WriteOnly=i=>{let{schema:s}=i;return!0!==s?.writeOnly?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"write-only")},Accordion=i=>{let{expanded:s,children:u,onChange:m}=i;const v=useComponent("ChevronRightIcon"),_=(0,He.useCallback)((i=>{m(i,!s)}),[s,m]);return He.createElement("button",{type:"button",className:"json-schema-2020-12-accordion",onClick:_},He.createElement("div",{className:"json-schema-2020-12-accordion__children"},u),He.createElement("span",{className:lC()("json-schema-2020-12-accordion__icon",{"json-schema-2020-12-accordion__icon--expanded":s,"json-schema-2020-12-accordion__icon--collapsed":!s})},He.createElement(v,null)))};Accordion.defaultProps={expanded:!1};const ON=Accordion,ExpandDeepButton_ExpandDeepButton=i=>{let{expanded:s,onClick:u}=i;const m=(0,He.useCallback)((i=>{u(i,!s)}),[s,u]);return He.createElement("button",{type:"button",className:"json-schema-2020-12-expand-deep-button",onClick:m},s?"Collapse all":"Expand all")},icons_ChevronRight=()=>He.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},He.createElement("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})),fn_upperFirst=i=>"string"==typeof i?`${i.charAt(0).toUpperCase()}${i.slice(1)}`:i,getTitle=i=>{const s=useFn();return i?.title?s.upperFirst(i.title):i?.$anchor?s.upperFirst(i.$anchor):i?.$id?i.$id:""},getType=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;const u=useFn();if(null==i)return"any";if(u.isBooleanJSONSchema(i))return i?"any":"never";if("object"!=typeof i)return"any";if(s.has(i))return"any";s.add(i);const{type:m,prefixItems:v,items:_}=i,getArrayType=()=>{if(Array.isArray(v)){const i=v.map((i=>getType(i,s))),u=_?getType(_,s):"any";return`array<[${i.join(", ")}], ${u}>`}if(_){return`array<${getType(_,s)}>`}return"array"};if(i.not&&"any"===getType(i.not))return"never";const handleCombiningKeywords=(u,m)=>{if(Array.isArray(i[u])){return`(${i[u].map((i=>getType(i,s))).join(m)})`}return null},j=[Array.isArray(m)?m.map((i=>"array"===i?getArrayType():i)).join(" | "):"array"===m?getArrayType():["null","boolean","object","array","number","integer","string"].includes(m)?m:(()=>{if(Object.hasOwn(i,"prefixItems")||Object.hasOwn(i,"items")||Object.hasOwn(i,"contains"))return getArrayType();if(Object.hasOwn(i,"properties")||Object.hasOwn(i,"additionalProperties")||Object.hasOwn(i,"patternProperties"))return"object";if(["int32","int64"].includes(i.format))return"integer";if(["float","double"].includes(i.format))return"number";if(Object.hasOwn(i,"minimum")||Object.hasOwn(i,"maximum")||Object.hasOwn(i,"exclusiveMinimum")||Object.hasOwn(i,"exclusiveMaximum")||Object.hasOwn(i,"multipleOf"))return"number | integer";if(Object.hasOwn(i,"pattern")||Object.hasOwn(i,"format")||Object.hasOwn(i,"minLength")||Object.hasOwn(i,"maxLength"))return"string";if(void 0!==i.const){if(null===i.const)return"null";if("boolean"==typeof i.const)return"boolean";if("number"==typeof i.const)return Number.isInteger(i.const)?"integer":"number";if("string"==typeof i.const)return"string";if(Array.isArray(i.const))return"array";if("object"==typeof i.const)return"object"}return null})(),handleCombiningKeywords("oneOf"," | "),handleCombiningKeywords("anyOf"," | "),handleCombiningKeywords("allOf"," & ")].filter(Boolean).join(" | ");return s.delete(i),j||"any"},isBooleanJSONSchema=i=>"boolean"==typeof i,hasKeyword=(i,s)=>null!==i&&"object"==typeof i&&Object.hasOwn(i,s),isExpandable=i=>{const s=useFn();return i?.$schema||i?.$vocabulary||i?.$id||i?.$anchor||i?.$dynamicAnchor||i?.$ref||i?.$dynamicRef||i?.$defs||i?.$comment||i?.allOf||i?.anyOf||i?.oneOf||s.hasKeyword(i,"not")||s.hasKeyword(i,"if")||s.hasKeyword(i,"then")||s.hasKeyword(i,"else")||i?.dependentSchemas||i?.prefixItems||s.hasKeyword(i,"items")||s.hasKeyword(i,"contains")||i?.properties||i?.patternProperties||s.hasKeyword(i,"additionalProperties")||s.hasKeyword(i,"propertyNames")||s.hasKeyword(i,"unevaluatedItems")||s.hasKeyword(i,"unevaluatedProperties")||i?.description||i?.enum||s.hasKeyword(i,"const")||s.hasKeyword(i,"contentSchema")||s.hasKeyword(i,"default")},fn_stringify=i=>null===i||["number","bigint","boolean"].includes(typeof i)?String(i):Array.isArray(i)?`[${i.map(fn_stringify).join(", ")}]`:JSON.stringify(i),stringifyConstraintRange=(i,s,u)=>{const m="number"==typeof s,v="number"==typeof u;return m&&v?s===u?`${s} ${i}`:`[${s}, ${u}] ${i}`:m?`>= ${s} ${i}`:v?`<= ${u} ${i}`:null},stringifyConstraints=i=>{const s=[],u=(i=>{if("number"!=typeof i?.multipleOf)return null;if(i.multipleOf<=0)return null;if(1===i.multipleOf)return null;const{multipleOf:s}=i;if(Number.isInteger(s))return`multiple of ${s}`;const u=10**s.toString().split(".")[1].length;return`multiple of ${s*u}/${u}`})(i);null!==u&&s.push({scope:"number",value:u});const m=(i=>{const s=i?.minimum,u=i?.maximum,m=i?.exclusiveMinimum,v=i?.exclusiveMaximum,_="number"==typeof s,j="number"==typeof u,M="number"==typeof m,$="number"==typeof v,W=M&&(!_||sv);if((_||M)&&(j||$))return`${W?"(":"["}${W?m:s}, ${X?v:u}${X?")":"]"}`;if(_||M)return`${W?">":"≥"} ${W?m:s}`;if(j||$)return`${X?"<":"≤"} ${X?v:u}`;return null})(i);null!==m&&s.push({scope:"number",value:m}),i?.format&&s.push({scope:"string",value:i.format});const v=stringifyConstraintRange("characters",i?.minLength,i?.maxLength);null!==v&&s.push({scope:"string",value:v}),i?.pattern&&s.push({scope:"string",value:`matches ${i?.pattern}`}),i?.contentMediaType&&s.push({scope:"string",value:`media type: ${i.contentMediaType}`}),i?.contentEncoding&&s.push({scope:"string",value:`encoding: ${i.contentEncoding}`});const _=stringifyConstraintRange(i?.hasUniqueItems?"unique items":"items",i?.minItems,i?.maxItems);null!==_&&s.push({scope:"array",value:_});const j=stringifyConstraintRange("contained items",i?.minContains,i?.maxContains);null!==j&&s.push({scope:"array",value:j});const M=stringifyConstraintRange("properties",i?.minProperties,i?.maxProperties);return null!==M&&s.push({scope:"object",value:M}),s},getDependentRequired=(i,s)=>s?.dependentRequired?Array.from(Object.entries(s.dependentRequired).reduce(((s,u)=>{let[m,v]=u;return Array.isArray(v)&&v.includes(i)?(s.add(m),s):s}),new Set)):[],withJSONSchemaContext=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const u={components:{JSONSchema:EN,Keyword$schema:keywords_$schema,Keyword$vocabulary:$vocabulary_$vocabulary,Keyword$id:keywords_$id,Keyword$anchor:keywords_$anchor,Keyword$dynamicAnchor:keywords_$dynamicAnchor,Keyword$ref:keywords_$ref,Keyword$dynamicRef:keywords_$dynamicRef,Keyword$defs:keywords_$defs,Keyword$comment:keywords_$comment,KeywordAllOf:keywords_AllOf,KeywordAnyOf:keywords_AnyOf,KeywordOneOf:keywords_OneOf,KeywordNot:keywords_Not,KeywordIf:keywords_If,KeywordThen:keywords_Then,KeywordElse:keywords_Else,KeywordDependentSchemas:keywords_DependentSchemas,KeywordPrefixItems:keywords_PrefixItems,KeywordItems:keywords_Items,KeywordContains:keywords_Contains,KeywordProperties:keywords_Properties_Properties,KeywordPatternProperties:keywords_PatternProperties_PatternProperties,KeywordAdditionalProperties:keywords_AdditionalProperties,KeywordPropertyNames:keywords_PropertyNames,KeywordUnevaluatedItems:keywords_UnevaluatedItems,KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,KeywordType:SN,KeywordEnum:Enum_Enum,KeywordConst:keywords_Const,KeywordConstraint:xN,KeywordDependentRequired:DependentRequired_DependentRequired,KeywordContentSchema:keywords_ContentSchema,KeywordTitle:kN,KeywordDescription:keywords_Description_Description,KeywordDefault:keywords_Default,KeywordDeprecated:keywords_Deprecated,KeywordReadOnly:keywords_ReadOnly,KeywordWriteOnly:keywords_WriteOnly,Accordion:ON,ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,ChevronRightIcon:icons_ChevronRight,...s.components},config:{default$schema:"https://json-schema.org/draft/2020-12/schema",defaultExpandedLevels:0,...s.config},fn:{upperFirst:fn_upperFirst,getTitle,getType,isBooleanJSONSchema,hasKeyword,isExpandable,stringify:fn_stringify,stringifyConstraints,getDependentRequired,...s.fn}},HOC=s=>He.createElement(yN.Provider,{value:u},He.createElement(i,s));return HOC.contexts={JSONSchemaContext:yN},HOC.displayName=i.displayName,HOC},json_schema_2020_12=()=>({components:{JSONSchema202012:EN,JSONSchema202012Keyword$schema:keywords_$schema,JSONSchema202012Keyword$vocabulary:$vocabulary_$vocabulary,JSONSchema202012Keyword$id:keywords_$id,JSONSchema202012Keyword$anchor:keywords_$anchor,JSONSchema202012Keyword$dynamicAnchor:keywords_$dynamicAnchor,JSONSchema202012Keyword$ref:keywords_$ref,JSONSchema202012Keyword$dynamicRef:keywords_$dynamicRef,JSONSchema202012Keyword$defs:keywords_$defs,JSONSchema202012Keyword$comment:keywords_$comment,JSONSchema202012KeywordAllOf:keywords_AllOf,JSONSchema202012KeywordAnyOf:keywords_AnyOf,JSONSchema202012KeywordOneOf:keywords_OneOf,JSONSchema202012KeywordNot:keywords_Not,JSONSchema202012KeywordIf:keywords_If,JSONSchema202012KeywordThen:keywords_Then,JSONSchema202012KeywordElse:keywords_Else,JSONSchema202012KeywordDependentSchemas:keywords_DependentSchemas,JSONSchema202012KeywordPrefixItems:keywords_PrefixItems,JSONSchema202012KeywordItems:keywords_Items,JSONSchema202012KeywordContains:keywords_Contains,JSONSchema202012KeywordProperties:keywords_Properties_Properties,JSONSchema202012KeywordPatternProperties:keywords_PatternProperties_PatternProperties,JSONSchema202012KeywordAdditionalProperties:keywords_AdditionalProperties,JSONSchema202012KeywordPropertyNames:keywords_PropertyNames,JSONSchema202012KeywordUnevaluatedItems:keywords_UnevaluatedItems,JSONSchema202012KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,JSONSchema202012KeywordType:SN,JSONSchema202012KeywordEnum:Enum_Enum,JSONSchema202012KeywordConst:keywords_Const,JSONSchema202012KeywordConstraint:xN,JSONSchema202012KeywordDependentRequired:DependentRequired_DependentRequired,JSONSchema202012KeywordContentSchema:keywords_ContentSchema,JSONSchema202012KeywordTitle:kN,JSONSchema202012KeywordDescription:keywords_Description_Description,JSONSchema202012KeywordDefault:keywords_Default,JSONSchema202012KeywordDeprecated:keywords_Deprecated,JSONSchema202012KeywordReadOnly:keywords_ReadOnly,JSONSchema202012KeywordWriteOnly:keywords_WriteOnly,JSONSchema202012Accordion:ON,JSONSchema202012ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,JSONSchema202012ChevronRightIcon:icons_ChevronRight,withJSONSchema202012Context:withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>bN},fn:{upperFirst:fn_upperFirst,jsonSchema202012:{isExpandable,hasKeyword,useFn,useConfig,useComponent,useIsExpandedDeeply}}});var AN=__webpack_require__(68630),CN=__webpack_require__.n(AN);const array=(i,s)=>{let{sample:u}=s;return function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:u,maxItems:m,uniqueItems:v}=s,{contains:_,minContains:j,maxContains:M}=s;let $=[...i];if(null!=_&&"object"==typeof _){if(Number.isInteger(j)&&j>1){const i=$.at(0);for(let s=1;s0&&($=i.slice(0,m)),Number.isInteger(u)&&u>0)for(let i=0;$.length{throw new Error("Not implemented")},bytes=i=>jt()(i),random_pick=i=>i.at(0),predicates_isBooleanJSONSchema=i=>"boolean"==typeof i,isJSONSchemaObject=i=>CN()(i),isJSONSchema=i=>predicates_isBooleanJSONSchema(i)||isJSONSchemaObject(i),email=()=>"user@example.com",idn_email=()=>"실례@example.com",hostname=()=>"example.com",idn_hostname=()=>"실례.com",ipv4=()=>"198.51.100.42",ipv6=()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",uri=()=>"https://example.com/",uri_reference=()=>"path/index.html",iri=()=>"https://실례.com/",iri_reference=()=>"path/실례.html",uuid=()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",uri_template=()=>"https://example.com/dictionary/{term:1}/{term}",json_pointer=()=>"/a/b/c",relative_json_pointer=()=>"1/0",date_time=()=>(new Date).toISOString(),date=()=>(new Date).toISOString().substring(0,10),time=()=>(new Date).toISOString().substring(11),duration=()=>"P3D",generators_password=()=>"********",regex=()=>"^[a-z]+$";const jN=class Registry{data={};register(i,s){this.data[i]=s}unregister(i){void 0===i?this.data={}:delete this.data[i]}get(i){return this.data[i]}},IN=new jN,api_formatAPI=(i,s)=>"function"==typeof s?IN.register(i,s):null===s?IN.unregister(i):IN.get(i);var PN=__webpack_require__(48764).Buffer;const _7bit=i=>PN.from(i).toString("ascii");var NN=__webpack_require__(48764).Buffer;const _8bit=i=>NN.from(i).toString("utf8");var TN=__webpack_require__(48764).Buffer;const encoders_binary=i=>TN.from(i).toString("binary"),quoted_printable=i=>{let s="";for(let u=0;u=33&&m<=60||m>=62&&m<=126||9===m||32===m)s+=i.charAt(u);else if(13===m||10===m)s+="\r\n";else if(m>126){const m=unescape(encodeURIComponent(i.charAt(u)));for(let i=0;iMN.from(i).toString("hex");var RN=__webpack_require__(48764).Buffer;const base32=i=>{const s=RN.from(i).toString("utf8"),u="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let m=0,v="",_=0,j=0;for(let i=0;i=5;)v+=u.charAt(_>>>j-5&31),j-=5;j>0&&(v+=u.charAt(_<<5-j&31),m=(8-8*s.length%5)%5);for(let i=0;iDN.from(i).toString("base64");const BN=new class EncoderRegistry extends jN{#e={"7bit":_7bit,"8bit":_8bit,binary:encoders_binary,"quoted-printable":quoted_printable,base16,base32,base64};data={...this.#e};get defaults(){return{...this.#e}}},encoderAPI=(i,s)=>"function"==typeof s?BN.register(i,s):null===s?BN.unregister(i):BN.get(i);encoderAPI.getDefaults=()=>BN.defaults;const LN=encoderAPI,FN={"text/plain":()=>"string","text/css":()=>".selector { border: 1px solid red }","text/csv":()=>"value1,value2,value3","text/html":()=>"

    content

    ","text/calendar":()=>"BEGIN:VCALENDAR","text/javascript":()=>"console.dir('Hello world!');","text/xml":()=>'John Doe',"text/*":()=>"string"},qN={"image/*":()=>bytes(25).toString("binary")},$N={"audio/*":()=>bytes(25).toString("binary")},UN={"video/*":()=>bytes(25).toString("binary")},zN={"application/json":()=>'{"key":"value"}',"application/ld+json":()=>'{"name": "John Doe"}',"application/x-httpd-php":()=>"Hello World!

    '; ?>","application/rtf":()=>String.raw`{\rtf1\adeflang1025\ansi\ansicpg1252\uc1`,"application/x-sh":()=>'echo "Hello World!"',"application/xhtml+xml":()=>"

    content

    ","application/*":()=>bytes(25).toString("binary")};const VN=new class MediaTypeRegistry extends jN{#e={...FN,...qN,...$N,...UN,...zN};data={...this.#e};get defaults(){return{...this.#e}}},mediaTypeAPI=(i,s)=>{if("function"==typeof s)return VN.register(i,s);if(null===s)return VN.unregister(i);const u=i.split(";").at(0),m=`${u.split("/").at(0)}/*`;return VN.get(i)||VN.get(u)||VN.get(m)};mediaTypeAPI.getDefaults=()=>VN.defaults;const WN=mediaTypeAPI,types_string=function(i){let{sample:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:u,contentMediaType:m,contentSchema:v}=i,{pattern:_,format:j}=i,M=LN(u)||ZA();let $;if("string"==typeof _)$=(i=>{try{return new(ca())(i).gen()}catch{return"string"}})(_);else if("string"==typeof j)$=(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"email":return email();case"idn-email":return idn_email();case"hostname":return hostname();case"idn-hostname":return idn_hostname();case"ipv4":return ipv4();case"ipv6":return ipv6();case"uri":return uri();case"uri-user-guide":return uri_reference();case"iri":return iri();case"iri-user-guide":return iri_reference();case"uuid":return uuid();case"uri-template":return uri_template();case"json-pointer":return json_pointer();case"relative-json-pointer":return relative_json_pointer();case"date-time":return date_time();case"date":return date();case"time":return time();case"duration":return duration();case"password":return generators_password();case"regex":return regex()}return"string"})(i);else if(isJSONSchema(v)&&"string"==typeof m&&void 0!==s)$=Array.isArray(s)||"object"==typeof s?JSON.stringify(s):String(s);else if("string"==typeof m){const s=WN(m);"function"==typeof s&&($=s(i))}else $="string";return M(function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:u,minLength:m}=s;let v=i;if(Number.isInteger(u)&&u>0&&(v=v.slice(0,u)),Number.isInteger(m)&&m>0){let i=0;for(;v.length.1,generators_double=()=>.1,types_number=i=>{const{format:s}=i;let u;return u="string"==typeof s?(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"float":return generators_float();case"double":return generators_double()}return 0})(i):0,function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:u,maximum:m,exclusiveMinimum:v,exclusiveMaximum:_}=s,{multipleOf:j}=s,M=Number.isInteger(i)?1:Number.EPSILON;let $="number"==typeof u?u:null,W="number"==typeof m?m:null,X=i;if("number"==typeof v&&($=null!==$?Math.max($,v+M):v+M),"number"==typeof _&&(W=null!==W?Math.min(W,_-M):_-M),X=$>W&&i||$||W||X,"number"==typeof j&&j>0){const i=X%j;X=0===i?X:X+j-i}return X}(u,i)},int32=()=>2**30>>>0,int64=()=>2**53-1,types_integer=i=>{const{format:s}=i;return"string"==typeof s?(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"int32":return int32();case"int64":return int64()}return 0})(i):0},types_boolean=i=>"boolean"!=typeof i.default||i.default,KN=new Proxy({array,object,string:types_string,number:types_number,integer:types_integer,boolean:types_boolean,null:()=>null},{get:(i,s)=>"string"==typeof s&&Object.hasOwn(i,s)?i[s]:()=>`Unknown Type: ${s}`}),HN=["array","object","number","integer","string","boolean","null"],hasExample=i=>{if(!isJSONSchemaObject(i))return!1;const{examples:s,example:u,default:m}=i;return!!(Array.isArray(s)&&s.length>=1)||(void 0!==m||void 0!==u)},extractExample=i=>{if(!isJSONSchemaObject(i))return null;const{examples:s,example:u,default:m}=i;return Array.isArray(s)&&s.length>=1?s.at(0):void 0!==m?m:void 0!==u?u:void 0},JN={array:["items","prefixItems","contains","maxContains","minContains","maxItems","minItems","uniqueItems","unevaluatedItems"],object:["properties","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","required","dependentSchemas","dependentRequired","unevaluatedProperties"],string:["pattern","format","minLength","maxLength","contentEncoding","contentMediaType","contentSchema"],integer:["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"]};JN.number=JN.integer;const GN="string",inferTypeFromValue=i=>void 0===i?null:null===i?"null":Array.isArray(i)?"array":Number.isInteger(i)?"integer":typeof i,foldType=i=>{if(Array.isArray(i)&&i.length>=1){if(i.includes("array"))return"array";if(i.includes("object"))return"object";{const s=random_pick(i);if(HN.includes(s))return s}}return HN.includes(i)?i:null},inferType=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;if(!isJSONSchemaObject(i))return GN;if(s.has(i))return GN;s.add(i);let{type:u,const:m}=i;if(u=foldType(u),"string"!=typeof u){const s=Object.keys(JN);e:for(let m=0;m{if(Array.isArray(i[u])){const m=i[u].map((i=>inferType(i,s)));return foldType(m)}return null},m=combineTypes("allOf"),v=combineTypes("anyOf"),_=combineTypes("oneOf"),j=i.not?inferType(i.not,s):null;(m||v||_||j)&&(u=foldType([m,v,_,j].filter(Boolean)))}if("string"!=typeof u&&hasExample(i)){const s=extractExample(i),m=inferTypeFromValue(s);u="string"==typeof m?m:u}return s.delete(i),u||GN},type_getType=i=>inferType(i),typeCast=i=>predicates_isBooleanJSONSchema(i)?(i=>!1===i?{not:{}}:{})(i):isJSONSchemaObject(i)?i:{},merge_merge=function(i,s){let u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(predicates_isBooleanJSONSchema(i)&&!0===i)return!0;if(predicates_isBooleanJSONSchema(i)&&!1===i)return!1;if(predicates_isBooleanJSONSchema(s)&&!0===s)return!0;if(predicates_isBooleanJSONSchema(s)&&!1===s)return!1;if(!isJSONSchema(i))return s;if(!isJSONSchema(s))return i;const m={...s,...i};if(s.type&&i.type&&Array.isArray(s.type)&&"string"==typeof s.type){const u=normalizeArray(s.type).concat(i.type);m.type=Array.from(new Set(u))}if(Array.isArray(s.required)&&Array.isArray(i.required)&&(m.required=[...new Set([...i.required,...s.required])]),s.properties&&i.properties){const v=new Set([...Object.keys(s.properties),...Object.keys(i.properties)]);m.properties={};for(const _ of v){const v=s.properties[_]||{},j=i.properties[_]||{};v.readOnly&&!u.includeReadOnly||v.writeOnly&&!u.includeWriteOnly?m.required=(m.required||[]).filter((i=>i!==_)):m.properties[_]=merge_merge(j,v,u)}}return isJSONSchema(s.items)&&isJSONSchema(i.items)&&(m.items=merge_merge(i.items,s.items,u)),isJSONSchema(s.contains)&&isJSONSchema(i.contains)&&(m.contains=merge_merge(i.contains,s.contains,u)),isJSONSchema(s.contentSchema)&&isJSONSchema(i.contentSchema)&&(m.contentSchema=merge_merge(i.contentSchema,s.contentSchema,u)),m},XN=merge_merge,main_sampleFromSchemaGeneric=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,m=arguments.length>3&&void 0!==arguments[3]&&arguments[3];"function"==typeof i?.toJS&&(i=i.toJS()),i=typeCast(i);let v=void 0!==u||hasExample(i);const _=!v&&Array.isArray(i.oneOf)&&i.oneOf.length>0,j=!v&&Array.isArray(i.anyOf)&&i.anyOf.length>0;if(!v&&(_||j)){const u=typeCast(random_pick(_?i.oneOf:i.anyOf));!(i=XN(i,u,s)).xml&&u.xml&&(i.xml=u.xml),hasExample(i)&&hasExample(u)&&(v=!0)}const M={};let{xml:$,properties:W,additionalProperties:X,items:Y,contains:Z}=i||{},ee=type_getType(i),{includeReadOnly:ie,includeWriteOnly:ae}=s;$=$||{};let le,{name:ce,prefix:pe,namespace:de}=$,fe={};if(Object.hasOwn(i,"type")||(i.type=ee),m&&(ce=ce||"notagname",le=(pe?`${pe}:`:"")+ce,de)){M[pe?`xmlns:${pe}`:"xmlns"]=de}m&&(fe[le]=[]);const ye=objectify(W);let be,_e=0;const hasExceededMaxProperties=()=>Number.isInteger(i.maxProperties)&&i.maxProperties>0&&_e>=i.maxProperties,canAddProperty=s=>!(Number.isInteger(i.maxProperties)&&i.maxProperties>0)||!hasExceededMaxProperties()&&(!(s=>!Array.isArray(i.required)||0===i.required.length||!i.required.includes(s))(s)||i.maxProperties-_e-(()=>{if(!Array.isArray(i.required)||0===i.required.length)return 0;let s=0;return m?i.required.forEach((i=>s+=void 0===fe[i]?0:1)):i.required.forEach((i=>{s+=void 0===fe[le]?.find((s=>void 0!==s[i]))?0:1})),i.required.length-s})()>0);if(be=m?function(u){let v=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(i&&ye[u]){if(ye[u].xml=ye[u].xml||{},ye[u].xml.attribute){const i=Array.isArray(ye[u].enum)?random_pick(ye[u].enum):void 0;if(hasExample(ye[u]))M[ye[u].xml.name||u]=extractExample(ye[u]);else if(void 0!==i)M[ye[u].xml.name||u]=i;else{const i=typeCast(ye[u]),s=type_getType(i),m=ye[u].xml.name||u;M[m]=KN[s](i)}return}ye[u].xml.name=ye[u].xml.name||u}else ye[u]||!1===X||(ye[u]={xml:{name:u}});let _=main_sampleFromSchemaGeneric(ye[u],s,v,m);canAddProperty(u)&&(_e++,Array.isArray(_)?fe[le]=fe[le].concat(_):fe[le].push(_))}:(u,v)=>{if(canAddProperty(u)){if(CN()(i.discriminator?.mapping)&&i.discriminator.propertyName===u&&"string"==typeof i.$$ref){for(const s in i.discriminator.mapping)if(-1!==i.$$ref.search(i.discriminator.mapping[s])){fe[u]=s;break}}else fe[u]=main_sampleFromSchemaGeneric(ye[u],s,v,m);_e++}},v){let v;if(v=void 0!==u?u:extractExample(i),!m){if("number"==typeof v&&"string"===ee)return`${v}`;if("string"!=typeof v||"string"===ee)return v;try{return JSON.parse(v)}catch{return v}}if("array"===ee){if(!Array.isArray(v)){if("string"==typeof v)return v;v=[v]}let u=[];return isJSONSchemaObject(Y)&&(Y.xml=Y.xml||$||{},Y.xml.name=Y.xml.name||$.name,u=v.map((i=>main_sampleFromSchemaGeneric(Y,s,i,m)))),isJSONSchemaObject(Z)&&(Z.xml=Z.xml||$||{},Z.xml.name=Z.xml.name||$.name,u=[main_sampleFromSchemaGeneric(Z,s,void 0,m),...u]),u=KN.array(i,{sample:u}),$.wrapped?(fe[le]=u,ha()(M)||fe[le].push({_attr:M})):fe=u,fe}if("object"===ee){if("string"==typeof v)return v;for(const i in v)Object.hasOwn(v,i)&&(ye[i]?.readOnly&&!ie||ye[i]?.writeOnly&&!ae||(ye[i]?.xml?.attribute?M[ye[i].xml.name||i]=v[i]:be(i,v[i])));return ha()(M)||fe[le].push({_attr:M}),fe}return fe[le]=ha()(M)?v:[{_attr:M},v],fe}if("array"===ee){let u=[];if(isJSONSchemaObject(Z))if(m&&(Z.xml=Z.xml||i.xml||{},Z.xml.name=Z.xml.name||$.name),Array.isArray(Z.anyOf))u.push(...Z.anyOf.map((i=>main_sampleFromSchemaGeneric(XN(i,Z,s),s,void 0,m))));else if(Array.isArray(Z.oneOf))u.push(...Z.oneOf.map((i=>main_sampleFromSchemaGeneric(XN(i,Z,s),s,void 0,m))));else{if(!(!m||m&&$.wrapped))return main_sampleFromSchemaGeneric(Z,s,void 0,m);u.push(main_sampleFromSchemaGeneric(Z,s,void 0,m))}if(isJSONSchemaObject(Y))if(m&&(Y.xml=Y.xml||i.xml||{},Y.xml.name=Y.xml.name||$.name),Array.isArray(Y.anyOf))u.push(...Y.anyOf.map((i=>main_sampleFromSchemaGeneric(XN(i,Y,s),s,void 0,m))));else if(Array.isArray(Y.oneOf))u.push(...Y.oneOf.map((i=>main_sampleFromSchemaGeneric(XN(i,Y,s),s,void 0,m))));else{if(!(!m||m&&$.wrapped))return main_sampleFromSchemaGeneric(Y,s,void 0,m);u.push(main_sampleFromSchemaGeneric(Y,s,void 0,m))}return u=KN.array(i,{sample:u}),m&&$.wrapped?(fe[le]=u,ha()(M)||fe[le].push({_attr:M}),fe):u}if("object"===ee){for(let i in ye)Object.hasOwn(ye,i)&&(ye[i]?.deprecated||ye[i]?.readOnly&&!ie||ye[i]?.writeOnly&&!ae||be(i));if(m&&M&&fe[le].push({_attr:M}),hasExceededMaxProperties())return fe;if(predicates_isBooleanJSONSchema(X)&&X)m?fe[le].push({additionalProp:"Anything can be here"}):fe.additionalProp1={},_e++;else if(isJSONSchemaObject(X)){const u=X,v=main_sampleFromSchemaGeneric(u,s,void 0,m);if(m&&"string"==typeof u?.xml?.name&&"notagname"!==u?.xml?.name)fe[le].push(v);else{const s=Number.isInteger(i.minProperties)&&i.minProperties>0&&_e{const m=main_sampleFromSchemaGeneric(i,s,u,!0);if(m)return"string"==typeof m?m:aa()(m,{declaration:!0,indent:"\t"})},main_sampleFromSchema=(i,s,u)=>main_sampleFromSchemaGeneric(i,s,u,!1),main_resolver=(i,s,u)=>[i,JSON.stringify(s),JSON.stringify(u)],YN=utils_memoizeN(main_createXMLExample,main_resolver),QN=utils_memoizeN(main_sampleFromSchema,main_resolver),ZN=[{when:/json/,shouldStringifyTypes:["string"]}],eT=["object"],fn_get_json_sample_schema=i=>(s,u,m,v)=>{const{fn:_}=i(),j=_.jsonSchema202012.memoizedSampleFromSchema(s,u,v),M=typeof j,$=ZN.reduce(((i,s)=>s.when.test(m)?[...i,...s.shouldStringifyTypes]:i),eT);return wt()($,(i=>i===M))?JSON.stringify(j,null,2):j},fn_get_yaml_sample_schema=i=>(s,u,m,v)=>{const{fn:_}=i(),j=_.jsonSchema202012.getJsonSampleSchema(s,u,m,v);let M;try{M=io.dump(io.load(j),{lineWidth:-1},{schema:Jn}),"\n"===M[M.length-1]&&(M=M.slice(0,M.length-1))}catch(i){return console.error(i),"error: could not generate yaml example"}return M.replace(/\t/g," ")},fn_get_xml_sample_schema=i=>(s,u,m)=>{const{fn:v}=i();if(s&&!s.xml&&(s.xml={}),s&&!s.xml.name){if(!s.$$ref&&(s.type||s.items||s.properties||s.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(s.$$ref){let i=s.$$ref.match(/\S*\/(\S+)$/);s.xml.name=i[1]}}return v.jsonSchema202012.memoizedCreateXMLExample(s,u,m)},fn_get_sample_schema=i=>function(s){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",m=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},v=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:_}=i();return"function"==typeof s?.toJS&&(s=s.toJS()),"function"==typeof v?.toJS&&(v=v.toJS()),/xml/.test(u)?_.jsonSchema202012.getXmlSampleSchema(s,m,v):/(yaml|yml)/.test(u)?_.jsonSchema202012.getYamlSampleSchema(s,m,u,v):_.jsonSchema202012.getJsonSampleSchema(s,m,u,v)},json_schema_2020_12_samples=i=>{let{getSystem:s}=i;const u=fn_get_json_sample_schema(s),m=fn_get_yaml_sample_schema(s),v=fn_get_xml_sample_schema(s),_=fn_get_sample_schema(s);return{fn:{jsonSchema202012:{sampleFromSchema:main_sampleFromSchema,sampleFromSchemaGeneric:main_sampleFromSchemaGeneric,sampleEncoderAPI:LN,sampleFormatAPI:api_formatAPI,sampleMediaTypeAPI:WN,createXMLExample:main_createXMLExample,memoizedSampleFromSchema:QN,memoizedCreateXMLExample:YN,getJsonSampleSchema:u,getYamlSampleSchema:m,getXmlSampleSchema:v,getSampleSchema:_}}}};function PresetApis(){return[base,oas3,json_schema_2020_12,json_schema_2020_12_samples,oas31]}const{GIT_DIRTY:tT,GIT_COMMIT:rT,PACKAGE_VERSION:nT,BUILD_TIME:oT}={PACKAGE_VERSION:"5.9.4",GIT_COMMIT:"ge34d8fb8",GIT_DIRTY:!0,BUILD_TIME:"Mon, 13 Nov 2023 09:31:40 GMT"};function SwaggerUI(i){dt.versions=dt.versions||{},dt.versions.swaggerUi={version:nT,gitRevision:rT,gitDirty:tT,buildTimestamp:oT};const s={dom_id:null,domNode:null,spec:{},url:"",urls:null,layout:"BaseLayout",docExpansion:"list",maxDisplayedTags:null,filter:null,validatorUrl:"https://validator.swagger.io/validator",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:i=>i,responseInterceptor:i=>i,showMutatedRequest:!0,defaultModelRendering:"example",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:"cURL (bash)",syntax:"bash"},curl_powershell:{title:"cURL (PowerShell)",syntax:"powershell"},curl_cmd:{title:"cURL (CMD)",syntax:"bash"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:["get","put","post","delete","options","head","patch","trace"],queryConfigEnabled:!1,presets:[PresetApis],plugins:[],pluginsOptions:{pluginLoadType:"legacy"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:"agate"}};let u=i.queryConfigEnabled?(()=>{let i={},s=dt.location.search;if(!s)return{};if(""!=s){let u=s.substr(1).split("&");for(let s in u)Object.prototype.hasOwnProperty.call(u,s)&&(s=u[s].split("="),i[decodeURIComponent(s[0])]=s[1]&&decodeURIComponent(s[1])||"")}return i})():{};const m=i.domNode;delete i.domNode;const v=We()({},s,i,u),_={system:{configs:v.configs},plugins:v.presets,pluginsOptions:v.pluginsOptions,state:We()({layout:{layout:v.layout,filter:v.filter},spec:{spec:"",url:v.url},requestSnippets:v.requestSnippets},v.initialState)};if(v.initialState)for(var j in v.initialState)Object.prototype.hasOwnProperty.call(v.initialState,j)&&void 0===v.initialState[j]&&delete _.state[j];var M=new Store(_);M.register([v.plugins,()=>({fn:v.fn,components:v.components,state:v.state})]);var $=M.getSystem();const downloadSpec=i=>{let s=$.specSelectors.getLocalConfig?$.specSelectors.getLocalConfig():{},_=We()({},s,v,i||{},u);if(m&&(_.domNode=m),M.setConfigs(_),$.configsActions.loaded(),null!==i&&(!u.url&&"object"==typeof _.spec&&Object.keys(_.spec).length?($.specActions.updateUrl(""),$.specActions.updateLoadingStatus("success"),$.specActions.updateSpec(JSON.stringify(_.spec))):$.specActions.download&&_.url&&!_.urls&&($.specActions.updateUrl(_.url),$.specActions.download(_.url))),_.domNode)$.render(_.domNode,"App");else if(_.dom_id){let i=document.querySelector(_.dom_id);$.render(i,"App")}else null===_.dom_id||null===_.domNode||console.error("Skipped rendering: no `dom_id` or `domNode` was specified");return $},W=u.config||v.configUrl;return W&&$.specActions&&$.specActions.getConfigByUrl?($.specActions.getConfigByUrl({url:W,loadRemoteConfig:!0,requestInterceptor:v.requestInterceptor,responseInterceptor:v.responseInterceptor},downloadSpec),$):downloadSpec()}SwaggerUI.System=Store,SwaggerUI.presets={base,apis:PresetApis},SwaggerUI.plugins={Auth:auth,Configs:configsPlugin,DeepLining:deep_linking,Err:err,Filter:filter,Icons:icons,JSONSchema5Samples:json_schema_5_samples,JSONSchema202012:json_schema_2020_12,JSONSchema202012Samples:json_schema_2020_12_samples,Layout:plugins_layout,Logs:logs,OpenAPI30:oas3,OpenAPI31:oas3,OnComplete:on_complete,RequestSnippets:plugins_request_snippets,Spec:plugins_spec,SwaggerClient:swagger_client,Util:util,View:view,DownloadUrl:downloadUrlPlugin,SafeRender:safe_render};const iT=SwaggerUI})(),u=u.default})())); +//# sourceMappingURL=swagger-ui-bundle.js.map \ No newline at end of file diff --git a/docs/assets/scripts/swagger-ui-bundle.js.map b/docs/assets/scripts/swagger-ui-bundle.js.map new file mode 100644 index 000000000..90ef0607c --- /dev/null +++ b/docs/assets/scripts/swagger-ui-bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"swagger-ui-bundle.js","mappings":"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R,EAAmB,CACvBD,EACA,CACE1R,MAAO,SACPyG,OAAQ,CAAEqE,YAAa,GAAI9E,gBAAgB,KAI/C,MAAO,CACLjnC,KAAM,OACNyqC,QAAS,CAAC,SACVrJ,QAAS,KACTC,SAAU,CAER,CACEJ,MAAO,OAASyR,EAAU,WAC1B3iD,IAAK,IACLsxC,SAAU,CACR,CACE9B,UAAW,OACX0B,MAAOyR,GAET,CACEnT,UAAW,SAAU0B,MAAO,iBAGhCyG,OAAQ,CACN33C,IAAK,OACLqxC,QAAS,KACTC,SAAUuR,IAId,CACE3R,MAAO,oBAAsByR,EAAU,KACvC3iD,IAAK,IACLsxC,SAAU,CACR,CACE9B,UAAW,SACX0B,MAAO,IACPlxC,IAAK,IACLq9C,cAAc,EACdM,YAAY,GAEd,CACEnO,UAAW,OACX0B,MAAOyR,GAET,CACEnT,UAAW,UACX0B,MAAO,WAGXyG,OAAQ,CACN33C,IAAK,OACLqxC,QAAS,KACTC,SAAUuR,IAId5K,EAAKnJ,QAAQ8T,EAAQ,CACnBzR,UAAW,KAInB,aCtHA,MAAMP,EAAW,2BACXkS,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,WAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAoFIC,EAAY,GAAGn6C,OAlCI,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGyB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,SACA,UA9EY,CACZ,OACA,WACA,SACA,OACA,OACA,SACA,SACA,SACA,WACA,UACA,QACA,SACA,MACA,MACA,UACA,UACA,QACA,UACA,OACA,UACA,eACA,aACA,aACA,YACA,cACA,cACA,eACA,QACA,aACA,oBACA,cACA,gBACA,iBACA,UAGkB,CACl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pK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAO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B,OACA,MACA,aACA,MACA,OACA,QACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,KACA,SACA,OACA,OACA,QACA,MACA,OACA,KACA,OACA,OACA,MACA,OACA,YACA,WACA,YACA,WACA,OACA,SACA,MACA,OACA,QACA,OACA,UACA,OACA,MACA,KACA,MACA,OACA,kBACA,MACA,OACA,OACA,UACA,UACA,QACA,QACA,MACA,OACA,MACA,OACA,YACA,aACA,MACA,MACA,SACA,OACA,cACA,SACA,MACA,KACA,MACA,QACA,KACA,MACA,OACA,cACA,cACA,eACA,OACA,UACA,UACA,YACA,MACA,MACA,MACA,MACA,aACA,KACA,UACA,UACA,OACA,SACA,SACA,mBACA,0BACA,UACA,MACA,kBACA,qBACA,MACA,MACA,OACA,WACA,OACA,SACA,OACA,KACA,MACA,eACA,QACA,MACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,MACA,UACA,SACA,QACA,SACA,OACA,SACA,UACA,MACA,UACA,QACA,SACA,MACA,QACA,MACA,OACA,YACA,WACA,QACA,OACA,QACA,MACA,WACA,MACA,QACA,OACA,aACA,OACA,MACA,QACA,MACA,SACA,UACA,MACA,QACA,MACA,YACA,SACA,MACA,SACA,SACA,WACA,cACA,SACA,OACA,UACA,QACA,MACA,SAOEC,GAAc,2IACdC,GAAc,2CAuElB,SAASC,UAAU/nO,EAAOniC,GAIxB,OAHAmiC,EAAQA,EAAMl7B,OACdjH,EAAUA,GAAW,GAEd,SAAS8O,KAAKlS,EAAMtL,GACzB,OAAKsL,GAGLtL,EAAMA,EAAI2V,QAAU3V,EACpB6wC,EAAQA,EAAMn4C,QAAQ4S,EAAMtL,GACrBwd,MAJE,IAAIqP,OAAOgkB,EAAOniC,EAK7B,CACF,CAGA,IAOImqQ,GAAcD,UAAU,2CAAVA,CACG,WAND,sBAKFA,CAEG,gBAND,UAIFA,CAGG,gBAND,UAGFA,GAMdh/O,GAAcg/O,UAAU,yCAAVA,CACG,YAdD,6BAaFA,CA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","sources":["webpack://SwaggerUIBundle/webpack/universalModuleDefinition","webpack://SwaggerUIBundle/./node_modules/@braintree/sanitize-url/dist/index.js","webpack://SwaggerUIBundle/./node_modules/base64-js/index.js","webpack://SwaggerUIBundle/./node_modules/buffer/index.js","webpack://SwaggerUIBundle/./node_modules/call-bind/callBound.js","webpack://SwaggerUIBundle/./node_modules/call-bind/index.js","webpack://SwaggerUIBundle/./node_modules/classnames/index.js","webpack://SwaggerUIBundle/./node_modules/cookie/index.js","webpack://SwaggerUIBundle/./node_modules/copy-to-clipboard/index.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/function/virtual/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/a-callable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/a-possible-prototype.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/add-to-unscopables.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/an-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/array-includes.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/array-slice.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/classof-raw.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/classof.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/copy-constructor-properties.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/correct-prototype-getter.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-iter-result-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-non-enumerable-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-property-descriptor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/define-built-in.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/define-global-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/descriptors.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/document-all.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/document-create-element.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/dom-iterables.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/engine-user-agent.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/engine-v8-version.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/entry-virtual.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/enum-bug-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-clear.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-install.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-installable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/export.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/fails.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-apply.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind-context.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind-native.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-call.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-name.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this-clause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-built-in.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-iterator-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/global.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/has-own-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/hidden-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/html.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/ie8-dom-define.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/indexed-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/inherit-if-required.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/install-error-cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/internal-state.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-array-iterator-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-callable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-forced.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-null-or-undefined.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-pure.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-symbol.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterate.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-close.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-create-constructor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-define.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterators-core.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterators.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/length-of-array-like.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/math-trunc.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/normalize-string-argument.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-create.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-define-properties.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-define-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-names.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-symbols.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-is-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-keys-internal.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-property-is-enumerable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-set-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/ordinary-to-primitive.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/own-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/path.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/proxy-accessor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/require-object-coercible.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/set-to-string-tag.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared-key.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared-store.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/string-multibyte.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/symbol-constructor-detection.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-absolute-index.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-indexed-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-integer-or-infinity.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-length.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-primitive.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-property-key.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-string-tag-support.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/try-to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/uid.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/use-symbol-as-uid.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/v8-prototype-define-bug.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/weak-map-basic-detection.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/well-known-symbol.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/wrap-error-constructor-with-cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.array.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.error.cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.function.bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.object.assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.string.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/esnext.aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/web.dom-collections.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/object/assign.js","webpack://SwaggerUIBundle/./node_modules/css.escape/css.escape.js","webpack://SwaggerUIBundle/./node_modules/deep-extend/lib/deep-extend.js","webpack://SwaggerUIBundle/./node_modules/deepmerge/dist/cjs.js","webpack://SwaggerUIBundle/./node_modules/dompurify/dist/purify.js","webpack://SwaggerUIBundle/./node_modules/drange/lib/index.js","webpack://SwaggerUIBundle/./node_modules/events/events.js","webpack://SwaggerUIBundle/./node_modules/fault/index.js","webpack://SwaggerUIBundle/./node_modules/format/format.js","webpack://SwaggerUIBundle/./node_modules/function-bind/implementation.js","webpack://SwaggerUIBundle/./node_modules/function-bind/index.js","webpack://SwaggerUIBundle/./node_modules/get-intrinsic/index.js","webpack://SwaggerUIBundle/./node_modules/has-proto/index.js","webpack://SwaggerUIBundle/./node_modules/has-symbols/index.js","webpack://SwaggerUIBundle/./node_modules/has-symbols/shams.js","webpack://SwaggerUIBundle/./node_modules/has/src/index.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/core.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/bash.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/http.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/javascript.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/json.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/powershell.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/xml.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/yaml.js","webpack://SwaggerUIBundle/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://SwaggerUIBundle/./node_modules/ieee754/index.js","webpack://SwaggerUIBundle/./node_modules/immutable/dist/immutable.js","webpack://SwaggerUIBundle/./node_modules/inherits/inherits_browser.js","webpack://SwaggerUIBundle/./node_modules/js-file-download/file-download.js","webpack://SwaggerUIBundle/./node_modules/lodash.debounce/index.js","webpack://SwaggerUIBundle/./node_modules/lodash/_DataView.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Hash.js","webpack://SwaggerUIBundle/./node_modules/lodash/_LazyWrapper.js","webpack://SwaggerUIBundle/./node_modules/lodash/_ListCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_LodashWrapper.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Map.js","webpack://SwaggerUIBundle/./node_modules/lodash/_MapCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Promise.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Set.js","webpack://SwaggerUIBundle/./node_modules/lodash/_SetCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Stack.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Symbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Uint8Array.js","webpack://SwaggerUIBundle/./node_modules/lodash/_WeakMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_apply.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayFilter.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayIncludes.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayLikeKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayPush.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayReduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arraySome.js","webpack://SwaggerUIBundle/./node_modules/lodash/_asciiToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_asciiWords.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assignMergeValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assignValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assocIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssign.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssignIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssignValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseCreate.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFindIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFlatten.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseForOwn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGetAllKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGetTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseHasIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsArguments.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsEqual.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsEqualDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsMatch.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsNaN.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsNative.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIteratee.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseLodash.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMatches.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMatchesProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMerge.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMergeDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_basePropertyDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_basePropertyOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseReduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSetData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSetToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSlice.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSome.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseTimes.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseTrim.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseUnary.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseUnset.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseZipObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_castPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_castSlice.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneArrayBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneDataView.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneRegExp.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneSymbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_composeArgs.js","webpack://SwaggerUIBundle/./node_modules/lodash/_composeArgsRight.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copyArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copyObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copySymbols.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copySymbolsIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_coreJsData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_countHolders.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createAssigner.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBaseEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBaseFor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBind.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCaseFirst.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCompounder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCtor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCurry.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createFind.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createHybrid.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createPartial.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createRecurry.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createWrap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_customOmitClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/_deburrLetter.js","webpack://SwaggerUIBundle/./node_modules/lodash/_defineProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalArrays.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalByTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalObjects.js","webpack://SwaggerUIBundle/./node_modules/lodash/_flatRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_freeGlobal.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getAllKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getAllKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getFuncName.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getHolder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getMapData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getMatchData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getNative.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getPrototype.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getRawTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getSymbols.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getSymbolsIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasUnicode.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasUnicodeWord.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneByTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_insertWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isFlattenable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isIterateeCall.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isKey.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isKeyable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isLaziable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isMasked.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isPrototype.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isStrictComparable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_matchesStrictComparable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_memoizeCapped.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mergeData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_metaMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeCreate.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nodeUtil.js","webpack://SwaggerUIBundle/./node_modules/lodash/_objectToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_overArg.js","webpack://SwaggerUIBundle/./node_modules/lodash/_overRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_parent.js","webpack://SwaggerUIBundle/./node_modules/lodash/_realNames.js","webpack://SwaggerUIBundle/./node_modules/lodash/_reorder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_replaceHolders.js","webpack://SwaggerUIBundle/./node_modules/lodash/_root.js","webpack://SwaggerUIBundle/./node_modules/lodash/_safeGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setCacheAdd.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setWrapToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_shortOut.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_strictIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stringToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stringToPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_toKey.js","webpack://SwaggerUIBundle/./node_modules/lodash/_toSource.js","webpack://SwaggerUIBundle/./node_modules/lodash/_trimmedEndIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_unicodeToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_unicodeWords.js","webpack://SwaggerUIBundle/./node_modules/lodash/_updateWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_wrapperClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/ary.js","webpack://SwaggerUIBundle/./node_modules/lodash/camelCase.js","webpack://SwaggerUIBundle/./node_modules/lodash/capitalize.js","webpack://SwaggerUIBundle/./node_modules/lodash/clone.js","webpack://SwaggerUIBundle/./node_modules/lodash/constant.js","webpack://SwaggerUIBundle/./node_modules/lodash/curry.js","webpack://SwaggerUIBundle/./node_modules/lodash/debounce.js","webpack://SwaggerUIBundle/./node_modules/lodash/deburr.js","webpack://SwaggerUIBundle/./node_modules/lodash/eq.js","webpack://SwaggerUIBundle/./node_modules/lodash/find.js","webpack://SwaggerUIBundle/./node_modules/lodash/findIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/flatten.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_baseConvert.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_mapping.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_util.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/assocPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/convert.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/placeholder.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/set.js","webpack://SwaggerUIBundle/./node_modules/lodash/get.js","webpack://SwaggerUIBundle/./node_modules/lodash/hasIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/identity.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArguments.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArrayLike.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArrayLikeObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isBoolean.js","webpack://SwaggerUIBundle/./node_modules/lodash/isBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/isEmpty.js","webpack://SwaggerUIBundle/./node_modules/lodash/isEqual.js","webpack://SwaggerUIBundle/./node_modules/lodash/isError.js","webpack://SwaggerUIBundle/./node_modules/lodash/isFunction.js","webpack://SwaggerUIBundle/./node_modules/lodash/isLength.js","webpack://SwaggerUIBundle/./node_modules/lodash/isMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/isNull.js","webpack://SwaggerUIBundle/./node_modules/lodash/isNumber.js","webpack://SwaggerUIBundle/./node_modules/lodash/isObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isObjectLike.js","webpack://SwaggerUIBundle/./node_modules/lodash/isPlainObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/isString.js","webpack://SwaggerUIBundle/./node_modules/lodash/isSymbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/isTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/isWeakMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/iteratee.js","webpack://SwaggerUIBundle/./node_modules/lodash/keys.js","webpack://SwaggerUIBundle/./node_modules/lodash/keysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/last.js","webpack://SwaggerUIBundle/./node_modules/lodash/memoize.js","webpack://SwaggerUIBundle/./node_modules/lodash/merge.js","webpack://SwaggerUIBundle/./node_modules/lodash/negate.js","webpack://SwaggerUIBundle/./node_modules/lodash/noop.js","webpack://SwaggerUIBundle/./node_modules/lodash/now.js","webpack://SwaggerUIBundle/./node_modules/lodash/omit.js","webpack://SwaggerUIBundle/./node_modules/lodash/property.js","webpack://SwaggerUIBundle/./node_modules/lodash/rearg.js","webpack://SwaggerUIBundle/./node_modules/lodash/reduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/set.js","webpack://SwaggerUIBundle/./node_modules/lodash/some.js","webpack://SwaggerUIBundle/./node_modules/lodash/stubArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/stubFalse.js","webpack://SwaggerUIBundle/./node_modules/lodash/toFinite.js","webpack://SwaggerUIBundle/./node_modules/lodash/toInteger.js","webpack://SwaggerUIBundle/./node_modules/lodash/toLower.js","webpack://SwaggerUIBundle/./node_modules/lodash/toNumber.js","webpack://SwaggerUIBundle/./node_modules/lodash/toPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/toPlainObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/toString.js","webpack://SwaggerUIBundle/./node_modules/lodash/upperFirst.js","webpack://SwaggerUIBundle/./node_modules/lodash/words.js","webpack://SwaggerUIBundle/./node_modules/lodash/wrapperLodash.js","webpack://SwaggerUIBundle/./node_modules/lodash/zipObject.js","webpack://SwaggerUIBundle/./node_modules/lowlight/lib/core.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/ArraySlice.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/KeyValuePair.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/Namespace.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/ObjectSlice.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements/LinkElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements/RefElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/minim.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/ArrayElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/BooleanElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/Element.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/MemberElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/NullElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/NumberElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/ObjectElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/StringElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/serialisers/JSON06Serialiser.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/serialisers/JSONSerialiser.js","webpack://SwaggerUIBundle/./node_modules/object-assign/index.js","webpack://SwaggerUIBundle/./node_modules/object-inspect/index.js","webpack://SwaggerUIBundle/./node_modules/process/browser.js","webpack://SwaggerUIBundle/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://SwaggerUIBundle/./node_modules/prop-types/index.js","webpack://SwaggerUIBundle/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/formats.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/index.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/parse.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/stringify.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/utils.js","webpack://SwaggerUIBundle/./node_modules/querystringify/index.js","webpack://SwaggerUIBundle/./node_modules/randexp/lib/randexp.js","webpack://SwaggerUIBundle/./node_modules/randombytes/browser.js","webpack://SwaggerUIBundle/./node_modules/react-copy-to-clipboard/lib/Component.js","webpack://SwaggerUIBundle/./node_modules/react-copy-to-clipboard/lib/index.js","webpack://SwaggerUIBundle/./node_modules/react-debounce-input/lib/Component.js","webpack://SwaggerUIBundle/./node_modules/react-debounce-input/lib/index.js","webpack://SwaggerUIBundle/./node_modules/react-dom/cjs/react-dom.production.min.js","webpack://SwaggerUIBundle/./node_modules/react-dom/index.js","webpack://SwaggerUIBundle/./node_modules/react-immutable-proptypes/dist/ImmutablePropTypes.js","webpack://SwaggerUIBundle/./node_modules/react-is/cjs/react-is.production.min.js","webpack://SwaggerUIBundle/./node_modules/react-is/index.js","webpack://SwaggerUIBundle/./node_modules/react/cjs/react.production.min.js","webpack://SwaggerUIBundle/./node_modules/react/index.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/errors-browser.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_readable.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_transform.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_writable.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/combineReducers.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/index.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/getStateName.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/getUnexpectedInvocationParameterMessage.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/index.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/validateNextState.js","webpack://SwaggerUIBundle/./node_modules/repeat-string/index.js","webpack://SwaggerUIBundle/./node_modules/requires-port/index.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/index.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/positions.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/sets.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/types.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/util.js","webpack://SwaggerUIBundle/./node_modules/safe-buffer/index.js","webpack://SwaggerUIBundle/./node_modules/scheduler/cjs/scheduler.production.min.js","webpack://SwaggerUIBundle/./node_modules/scheduler/index.js","webpack://SwaggerUIBundle/./node_modules/serialize-error/index.js","webpack://SwaggerUIBundle/./node_modules/sha.js/hash.js","webpack://SwaggerUIBundle/./node_modules/sha.js/index.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha1.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha224.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha256.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha384.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha512.js","webpack://SwaggerUIBundle/./node_modules/short-unique-id/dist/short-unique-id.js","webpack://SwaggerUIBundle/./node_modules/side-channel/index.js","webpack://SwaggerUIBundle/./node_modules/stampit/dist/stampit.min.js","webpack://SwaggerUIBundle/./node_modules/stream-browserify/index.js","webpack://SwaggerUIBundle/./node_modules/string_decoder/lib/string_decoder.js","webpack://SwaggerUIBundle/./node_modules/toggle-selection/index.js","webpack://SwaggerUIBundle/./node_modules/traverse/index.js","webpack://SwaggerUIBundle/./node_modules/url-parse/index.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/shim/index.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/shim/with-selector.js","webpack://SwaggerUIBundle/./node_modules/util-deprecate/browser.js","webpack://SwaggerUIBundle/./node_modules/xml-but-prettier/dist/index.js","webpack://SwaggerUIBundle/./node_modules/xml/lib/escapeForXML.js","webpack://SwaggerUIBundle/./node_modules/xml/lib/xml.js","webpack://SwaggerUIBundle/./node_modules/zenscroll/zenscroll.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime-corejs3/core-js/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime-corejs3/helpers/extends.js","webpack://SwaggerUIBundle/webpack/bootstrap","webpack://SwaggerUIBundle/webpack/runtime/compat get default export","webpack://SwaggerUIBundle/webpack/runtime/define property getters","webpack://SwaggerUIBundle/webpack/runtime/global","webpack://SwaggerUIBundle/webpack/runtime/hasOwnProperty shorthand","webpack://SwaggerUIBundle/webpack/runtime/make namespace object","webpack://SwaggerUIBundle/webpack/runtime/node module decorator","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://SwaggerUIBundle/./node_modules/redux/es/redux.js","webpack://SwaggerUIBundle/./src/core/plugins/err/actions.js","webpack://SwaggerUIBundle/./src/core/window.js","webpack://SwaggerUIBundle/./src/core/utils/get-parameter-schema.js","webpack://SwaggerUIBundle/./src/core/utils/index.js","webpack://SwaggerUIBundle/./src/core/system.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/reducers.js","webpack://SwaggerUIBundle/./node_modules/reselect/es/defaultMemoize.js","webpack://SwaggerUIBundle/./node_modules/reselect/es/index.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/spec-extensions/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/configs-extensions/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/components/lock-auth-icon.jsx","webpack://SwaggerUIBundle/./src/core/plugins/auth/components/unlock-auth-icon.jsx","webpack://SwaggerUIBundle/./src/core/plugins/auth/index.js","webpack://SwaggerUIBundle/./node_modules/js-yaml/dist/js-yaml.mjs","webpack://SwaggerUIBundle/./src/core/plugins/configs/helpers.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/spec-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/index.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/helpers.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/layout.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/operation-wrapper.jsx","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/operation-tag-wrapper.jsx","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/index.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/transformers/not-of-type.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/transformers/parameter-oneof.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/hook.js","webpack://SwaggerUIBundle/./src/core/plugins/err/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/err/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/err/index.js","webpack://SwaggerUIBundle/./src/core/plugins/filter/opsFilter.js","webpack://SwaggerUIBundle/./src/core/plugins/filter/index.js","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow-up.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow-down.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/close.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/copy.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/lock.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/unlock.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/index.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/spec-extensions/wrap-selector.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/index.js","webpack://SwaggerUIBundle/./src/core/plugins/logs/index.js","webpack://SwaggerUIBundle/./src/core/plugins/on-complete/index.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/selectors.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/create-element.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/checkForListedLanguage.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/highlight.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/light.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/javascript.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/json.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/xml.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/bash.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/yaml.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/http.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/powershell.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/agate.js","webpack://SwaggerUIBundle/./src/core/syntax-highlighting.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/arta.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/monokai.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/nord.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/obsidian.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/idea.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/request-snippets.jsx","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/index.js","webpack://SwaggerUIBundle/./src/core/utils/memoizeN.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-json-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-yaml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-xml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/index.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/index.js","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/helpers.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/core.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/duplex.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/index.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isPlaceholder.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry1.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry2.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry3.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/nth.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/paths.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/path.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pathSatisfies.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_cloneRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arrayFromIterator.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_includesWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_has.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_objectIs.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArguments.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/keys.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/type.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_equals.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_functionName.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/equals.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_includes.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_indexOf.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_map.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_quote.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_toISOString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_complement.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arrayReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArray.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_dispatchable.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isTransformer.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isObject.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xfBase.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xfilter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/filter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_filter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reject.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_toString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/toString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/test.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_pipe.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArrayLike.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_createReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xArrayReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/bind.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xwrap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_checkForMethod.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/slice.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/tail.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pipe.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/defaultTo.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/prop.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propOr.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/last.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curryN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/curryN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/curry.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/invoker.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/split.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_dropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xdropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/dropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/join.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/flip.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/included.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/includes.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/trimCharsEnd.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_reduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xmap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/map.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/ap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_concat.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/liftN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/lift.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/complement.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/not.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/always.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/stubUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/max.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pluck.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/anyPass.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/identical.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isGeneratorFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isAsyncFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/replace.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/when.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isString.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/escapeRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/String.replaceAll.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/replaceAll.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/url.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/fetch-ponyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/create-error.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/fetch-polyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/constants.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/helpers.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/refs.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/all-of.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/parameters.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/properties.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/context-tree.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/replace-special-chars-with-underscore.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/op-id.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/id-from-path-method/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/normalize.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/utils/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/style-serializer.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/http/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/utils/options.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/resolve.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/openapi-predicates.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-2/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-2/resolve.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-0/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-0/resolve.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/Annotation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/Comment.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/ParseResult.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/SourceMap.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/init.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/apply.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/and.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/both.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/empty.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isTypedArray.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/isEmpty.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isEmptyArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/invokeArgs.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_reduced.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xall.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/all.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/predicates/helpers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/predicates/index.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNull.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotNull.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/isOfTypeObject.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isObjLike.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isPlainObj.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/F.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMAggregateError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMStructuredError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ast/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/clone/errors/CloneError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/clone/errors/DeepCloneError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/clone/errors/ShallowCloneError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/clone/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/plugins/utils/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transcluder/Transcluder.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/T.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transformers/serializers/value/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transformers/serializers/value/ast/ephemeral-array.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transformers/serializers/value/ast/ephemeral-object.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transformers/serializers/value/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/escape.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/JsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/CompilationJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/compile.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/converge.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_identity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/identity.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/Number.isFinite.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNumber.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isFinite.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/Number.isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xtake.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/take.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/startsWith.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isEmptyString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xdropWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/dropWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/trimCharsStart.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/unescape.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/InvalidJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/parse.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/EvaluationJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/evaluate.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Callback.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Components.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Contact.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Discriminator.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Encoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Example.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/ExternalDocumentation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Header.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Info.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/License.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Link.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/MediaType.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OAuthFlow.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OAuthFlows.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Openapi.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OpenApi3-0.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Operation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Parameter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/PathItem.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Paths.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/RequestBody.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Response.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Responses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/UnsupportedOperationError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/JSONSchema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/JSONReference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/Media.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/LinkDescription.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/mapObjIndexed.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/isNil.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/hasPath.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/has.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propSatisfies.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/Visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/FallbackVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/noop.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pick.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/SpecificationVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/FixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/IdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/$schemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MultipleOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ExclusiveMaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ExclusiveMinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PatternVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ParentSchemaAwareVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/UniqueItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/allPass.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/or.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotObj.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isObj.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/either.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotEmpty.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNonEmptyString.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/PatternedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/MapVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PatternPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DependenciesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DefinitionsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/FormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/BaseVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ReadOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/json-reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/json-reference/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/ifElse.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/comparator.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/sort.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/head.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduced.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotNil.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNonEmptyArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/dispatch.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/AlternatingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/JSONSchemaOrJSONReferenceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/BinaryEncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/HrefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/RelVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/MediaTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/MethodVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/EncTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Schema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/SecurityRequirement.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/SecurityScheme.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Server.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/ServerVariable.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Tag.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Xml.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/Visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/SpecificationVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/FixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/FallbackVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/OpenapiVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/SpecificationExtensionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/TermsOfServiceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/VersionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/EmailVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/OperationRefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/OperationIdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/PatternedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/MapVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/LinkParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/RequestBodyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Servers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ServerVariables.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/VariablesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/AlternatingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/MediaTypeExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/MediaTypeEncoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/EncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-requirement/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Security.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/SecurityVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/reference/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/InVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/AllowEmptyValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/AllowEmptyValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/HeaderExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/HeaderContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/ItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/NullableVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/WriteOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/SchemaOrReferenceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/PropertyNameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/DiscriminatorMapping.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/MappingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/NamespaceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/PrefixVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/AttributeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/WrappedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ParameterExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ParameterContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsSchemas.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/SchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsResponses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ResponsesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsRequestBodies.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/RequestBodiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsSecuritySchemes.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/SecuritySchemesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsLinks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsCallbacks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/CallbacksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/ValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/ExternalValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/ContentTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/EncodingHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/paths/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/RequestBodyContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/callback/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseLinks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isNumber.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/range.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_Set.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/difference.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/MixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/responses/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/responses/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationTags.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/TagsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/OperationIdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/RequestBodyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationCallbacks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/CallbacksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationSecurity.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/SecurityVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationServers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/PathItemServers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/PathItemParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/InVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/SchemeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/BearerFormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/OpenIdConnectUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flows/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/AuthorizationUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/TokenUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/RefreshUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OAuthFlowScopes.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/ScopesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Tags.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/TagsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Callback.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Components.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Contact.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Discriminator.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Encoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Example.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/ExternalDocumentation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Header.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Info.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/JsonSchemaDialect.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/License.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Link.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/MediaType.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OAuthFlow.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OAuthFlows.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Openapi.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OpenApi3-1.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Operation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Parameter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/PathItem.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Paths.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/RequestBody.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Response.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Responses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Schema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/SecurityRequirement.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/SecurityScheme.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Server.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/ServerVariable.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Tag.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Xml.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/info/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/info/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/contact/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/license/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/license/IdentifierVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/link/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/server/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/server-variable/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/media-type/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/security-requirement/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/tag/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/parameter/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/header/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ParentSchemaAwareVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$schemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$vocabularyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$idVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$anchorVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$dynamicAnchorVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$dynamicRefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$refVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$defsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$commentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PatternProperties.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ConstVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MultipleOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExclusiveMaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExclusiveMinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PatternVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/UniqueItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxContainsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinContainsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ReadOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/WriteOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/FormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ContentEncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ContentMediaTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/distriminator/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/xml/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/SchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/nces/ComponentsPathItems.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/PathItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/example/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/external-documentation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/encoding/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/paths/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/request-body/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/callback/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/response/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/responses/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/operation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/path-item/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/security-scheme/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/oauth-flows/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/oauth-flow/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/nces/Webhooks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/WebhooksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/NotImplementedError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/media-types.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/media-types.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/propEq.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/ReferenceSet.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/options/index.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/lens.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/assocPath.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_assoc.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeWithKey.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeDeepWithKey.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeDeepRight.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/over.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/options/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/File.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/PluginError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/plugins.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/ParserError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/UnmatchedDereferenceStrategyError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/DereferenceError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/parsers/Parser.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/parsers/binary/index-browser.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/ResolveStrategy.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/none.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/values.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/allP.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/MaximumDereferenceDepthError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/ResolverError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/MaximumResolverDepthError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/JsonSchemaUriError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/EvaluationJsonSchemaUriError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/UnmatchedResolverError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/filter.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/pathOr.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/find.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/JsonSchema$anchorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/EvaluationJsonSchema$anchorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/errors/InvalidJsonSchema$anchorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/$anchor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/uri.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_clone.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xreduceBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduceBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/groupBy.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-operation-ids.mjs","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xuniqWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/uniqWith.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-parameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-security-requirements.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-servers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-parameter-examples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-header-examples.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/normalize.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/resolvers/Resolver.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/resolvers/HttpResolver.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/abortcontroller-ponyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/abortcontroller-polyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/resolve/resolvers/http-swagger-client/index.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transformers/from.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/json/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/yaml-1-2/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/openapi-json-3-1/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/openapi-yaml-3-1/index.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/DereferenceStrategy.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/identity/errors/ElementIdentityError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/identity/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/to-path.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/get-root-cause.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/errors/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/dereference.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/compose.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/parameters.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/properties.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/deepmerge.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/all-of.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/resolve.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transcluder/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/node_modules/is-plain-object/dist/is-plain-object.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/swagger2/parameter-builders.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/content-serializer.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/parameter-builders.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/btoa.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/build-request.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/swagger2/build-request.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/id-from-path-method/legacy.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/get-operation-raw.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/find-operation.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/each-operation.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/subtree-resolver/index.js","webpack://SwaggerUIBundle/./src/core/plugins/swagger-client/configs-wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/swagger-client/index.js","webpack://SwaggerUIBundle/./src/core/plugins/util/index.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/batch.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/Context.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/hooks/useSelector.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/selectorFactory.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/invalidArgFactory.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mergeProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/Subscription.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/shallowEqual.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/useSyncExternalStore.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/connect.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mapStateToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/bindActionCreators.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/Provider.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/index.js","webpack://SwaggerUIBundle/./src/core/plugins/view/root-injects.jsx","webpack://SwaggerUIBundle/./src/core/plugins/view/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/view/index.js","webpack://SwaggerUIBundle/./src/core/plugins/download-url/index.js","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/fn.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/components/fallback.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/components/error-boundary.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/index.js","webpack://SwaggerUIBundle/./src/core/components/app.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorization-popup.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorize-btn.jsx","webpack://SwaggerUIBundle/./src/core/containers/authorize-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorize-operation-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/auths.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/error.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/api-key-auth.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/basic-auth.jsx","webpack://SwaggerUIBundle/./src/core/components/example.jsx","webpack://SwaggerUIBundle/./src/core/components/examples-select.jsx","webpack://SwaggerUIBundle/./src/core/components/examples-select-value-retainer.jsx","webpack://SwaggerUIBundle/./src/core/oauth2-authorize.js","webpack://SwaggerUIBundle/./src/core/components/auth/oauth2.jsx","webpack://SwaggerUIBundle/./src/core/components/clear.jsx","webpack://SwaggerUIBundle/./src/core/components/live-response.jsx","webpack://SwaggerUIBundle/./src/core/components/online-validator-badge.jsx","webpack://SwaggerUIBundle/./src/core/components/operations.jsx","webpack://SwaggerUIBundle/./src/core/utils/url.js","webpack://SwaggerUIBundle/./src/core/components/operation-tag.jsx","webpack://SwaggerUIBundle/./src/core/assets/rolling-load.svg","webpack://SwaggerUIBundle/./src/core/components/operation.jsx","webpack://SwaggerUIBundle/./src/core/containers/OperationContainer.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary-method.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary-path.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-extensions.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-extension-row.jsx","webpack://SwaggerUIBundle/./src/core/components/highlight-code.jsx","webpack://SwaggerUIBundle/./src/core/components/responses.jsx","webpack://SwaggerUIBundle/./src/core/utils/create-html-ready-id.js","webpack://SwaggerUIBundle/./src/core/utils/jsonParse.js","webpack://SwaggerUIBundle/./src/core/components/response.jsx","webpack://SwaggerUIBundle/./src/core/components/response-extension.jsx","webpack://SwaggerUIBundle/./src/core/components/response-body.jsx","webpack://SwaggerUIBundle/./src/core/components/parameters/parameters.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-extension.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-include-empty.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-row.jsx","webpack://SwaggerUIBundle/./src/core/components/execute.jsx","webpack://SwaggerUIBundle/./src/core/components/headers.jsx","webpack://SwaggerUIBundle/./src/core/components/errors.jsx","webpack://SwaggerUIBundle/./src/core/components/content-type.jsx","webpack://SwaggerUIBundle/./src/core/components/layout-utils.jsx","webpack://SwaggerUIBundle/./src/core/components/overview.jsx","webpack://SwaggerUIBundle/./src/core/components/initialized-input.jsx","webpack://SwaggerUIBundle/./src/core/components/info.jsx","webpack://SwaggerUIBundle/./src/core/containers/info.jsx","webpack://SwaggerUIBundle/./src/core/components/contact.jsx","webpack://SwaggerUIBundle/./src/core/components/license.jsx","webpack://SwaggerUIBundle/./src/core/components/jump-to-path.jsx","webpack://SwaggerUIBundle/./src/core/components/copy-to-clipboard-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/footer.jsx","webpack://SwaggerUIBundle/./src/core/containers/filter.jsx","webpack://SwaggerUIBundle/./src/core/components/param-body.jsx","webpack://SwaggerUIBundle/./src/core/components/curl.jsx","webpack://SwaggerUIBundle/./src/core/components/schemes.jsx","webpack://SwaggerUIBundle/./src/core/containers/schemes.jsx","webpack://SwaggerUIBundle/./src/core/components/model-collapse.jsx","webpack://SwaggerUIBundle/./src/core/components/model-example.jsx","webpack://SwaggerUIBundle/./src/core/components/model-wrapper.jsx","webpack://SwaggerUIBundle/./node_modules/react-immutable-pure-component/lib/react-immutable-pure-component.es.js","webpack://SwaggerUIBundle/./src/core/components/model.jsx","webpack://SwaggerUIBundle/./src/core/components/models.jsx","webpack://SwaggerUIBundle/./src/core/components/enum-model.jsx","webpack://SwaggerUIBundle/./src/core/components/object-model.jsx","webpack://SwaggerUIBundle/./src/core/components/array-model.jsx","webpack://SwaggerUIBundle/./src/core/components/primitive-model.jsx","webpack://SwaggerUIBundle/./src/core/components/property.jsx","webpack://SwaggerUIBundle/./src/core/components/try-it-out-button.jsx","webpack://SwaggerUIBundle/./src/core/components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/components/version-stamp.jsx","webpack://SwaggerUIBundle/./src/core/components/openapi-version.jsx","webpack://SwaggerUIBundle/./src/core/components/deep-link.jsx","webpack://SwaggerUIBundle/./src/core/components/svg-assets.jsx","webpack://SwaggerUIBundle/./node_modules/remarkable/dist/esm/index.browser.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/utils.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/html-tag.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/anchor-tag-builder.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-smart.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-middle.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-end.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/match.js","webpack://SwaggerUIBundle/./node_modules/tslib/tslib.es6.mjs","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/email-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/url-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/hashtag-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/mention-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/phone-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/url-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/regex-lib.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/tld-regex.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/email-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/url-match-validator.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/hashtag-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/phone-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/mention-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/htmlParser/parse-html.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/autolinker.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/version.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/index.js","webpack://SwaggerUIBundle/./node_modules/remarkable/dist/esm/linkify.js","webpack://SwaggerUIBundle/./src/core/components/providers/markdown.jsx","webpack://SwaggerUIBundle/./src/core/components/layouts/base.jsx","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/core-components/index.js","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/form-components/index.js","webpack://SwaggerUIBundle/./src/core/components/json-schema-components.jsx","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/json-schema-components/index.js","webpack://SwaggerUIBundle/./src/core/presets/base/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/spec-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/auth-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/helpers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/spec-extensions/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/callbacks.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/request-body.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/operation-link.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/servers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/servers-container.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/request-body-editor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/auth/http-auth.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/operation-servers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/markdown.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/online-validator-badge.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/json-schema-string.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/openapi-version.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/webhooks.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/license.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/contact.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/info.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/json-schema-dialect.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/model/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/models/models.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/auth/mutual-tls-auth.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/auth/auths.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/license.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/contact.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/info.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/models.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/auths.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/spec-extensions/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/spec-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/auth-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/after-load.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/prop-types.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/context.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/hooks.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$schema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$id.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$ref.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$defs.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$comment.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Not.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/If.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Then.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Else.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Items.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Type.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Const.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Default.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/hoc.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/array.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/object.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/random.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/predicates.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/email.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-email.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/hostname.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-hostname.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv4.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv6.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-reference.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri-reference.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uuid.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-template.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/json-pointer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/relative-json-pointer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date-time.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/time.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/duration.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/password.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/regex.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/Registry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/formatAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/7bit.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/8bit.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/binary.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/quoted-printable.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base16.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base32.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base64.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/EncoderRegistry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/encoderAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/text.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/image.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/audio.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/video.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/application.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/MediaTypeRegistry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/mediaTypeAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/string.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/float.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/double.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/number.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int32.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int64.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/integer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/boolean.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/null.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/constants.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/example.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/type.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/utils.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/merge.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/main.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-json-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-yaml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-xml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/index.js","webpack://SwaggerUIBundle/./src/core/presets/apis/index.js","webpack://SwaggerUIBundle/./src/core/index.js","webpack://SwaggerUIBundle/./src/index.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","this","invalidProtocolRegex","htmlEntitiesRegex","htmlCtrlEntityRegex","ctrlCharactersRegex","urlSchemeRegex","relativeFirstCharacters","sanitizeUrl","url","sanitizedUrl","decodeHtmlCharacters","str","replace","match","dec","String","fromCharCode","trim","isRelativeUrlWithoutProtocol","indexOf","urlSchemeParseResults","urlScheme","test","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","start","end","num","output","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","fromString","string","encoding","isEncoding","actual","write","slice","ArrayBuffer","isView","fromArrayView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","SharedArrayBuffer","valueOf","b","fromObject","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","byteArray","base64Write","ucs2Write","utf16leToBytes","units","c","hi","lo","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","apply","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","proto","foo","e","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","NodeError","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","split","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","applyBind","hasOwn","hasOwnProperty","classNames","classes","argType","inner","key","default","parse","options","decode","index","eqIdx","endIdx","tryDecode","serialize","opt","enc","encode","fieldContentRegExp","maxAge","isNaN","domain","path","expires","isDate","__toString","Date","toUTCString","httpOnly","secure","priority","sameSite","decodeURIComponent","encodeURIComponent","deselectCurrent","clipboardToIE11Formatting","text","debug","reselectPrevious","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","preventDefault","clipboardData","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","err","copyKey","navigator","userAgent","prompt","removeRange","removeAllRanges","removeChild","parent","AggregateError","entryVirtual","isPrototypeOf","method","FunctionPrototype","Function","it","own","assign","isCallable","tryToString","$TypeError","argument","$String","isObject","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","uncurryThis","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","wellKnownSymbol","$Object","CORRECT_ARGUMENTS","tag","result","tryGet","callee","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","source","exceptions","keys","f","getOwnPropertyDescriptor","fails","F","getPrototypeOf","done","DESCRIPTORS","createPropertyDescriptor","object","bitmap","createNonEnumerableProperty","global","documentAll","IS_HTMLDDA","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","version","process","Deno","versions","v8","CONSTRUCTOR","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","dropEntries","prepareStackTrace","clearErrorStack","ERROR_STACK_INSTALLABLE","captureStackTrace","C","isForced","wrapConstructor","NativeConstructor","Wrapper","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","descriptor","TARGET","GLOBAL","STATIC","stat","PROTO","nativeSource","targetPrototype","forced","dontCallGetSet","wrap","sham","real","exec","NATIVE_BIND","Reflect","aCallable","that","arraySlice","$Function","factories","Prototype","partArgs","boundFunction","bound","args","argsLength","construct","getDescriptor","PROPER","something","CONFIGURABLE","uncurryThisWithBind","aFunction","variable","namespace","classof","getMethod","isNullOrUndefined","Iterators","ITERATOR","anObject","getIteratorMethod","usingIterator","iteratorMethod","V","P","check","globalThis","self","g","toObject","getBuiltIn","propertyIsEnumerable","dummy","NewTarget","NewTargetPrototype","cause","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","state","store","metadata","facade","STATE","enforce","getterFor","TYPE","ArrayPrototype","$documentAll","replacement","feature","detection","normalize","POLYFILL","NATIVE","USE_SYMBOL_AS_UID","$Symbol","isArrayIteratorMethod","getIterator","iteratorClose","Result","stopped","ResultPrototype","iterable","unboundFunction","iterator","iterFn","next","step","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","kind","innerResult","innerError","IteratorPrototype","create","setToStringTag","returnThis","IteratorConstructor","NAME","ENUMERABLE_NEXT","$","IS_PURE","FunctionName","createIteratorConstructor","defineBuiltIn","IteratorsCore","PROPER_FUNCTION_NAME","CONFIGURABLE_FUNCTION_NAME","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","values","entries","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","PrototypeOfArrayIteratorPrototype","arrayIterator","toLength","ceil","trunc","$default","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","IndexedObject","$assign","A","B","symbol","forEach","chr","T","argumentsLength","getOwnPropertySymbols","S","activeXDocument","definePropertiesModule","enumBugKeys","html","documentCreateElement","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","JS","display","contentWindow","open","Properties","V8_PROTOTYPE_DEFINE_BUG","defineProperties","props","IE8_DOM_DEFINE","toPropertyKey","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","internalObjectKeys","getOwnPropertyNames","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","uncurryThisAccessor","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","pref","getOwnPropertyNamesModule","Target","Source","TAG","SET_METHOD","uid","defineGlobalProperty","SHARED","mode","copyright","license","toIntegerOrInfinity","requireObjectCoercible","charAt","CONVERT_TO_STRING","second","codeAt","V8_VERSION","integer","number","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","id","postfix","random","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","copyConstructorProperties","proxyAccessor","inheritIfRequired","normalizeStringArgument","installErrorCause","installErrorStack","FULL_NAME","wrapper","IS_AGGREGATE_ERROR","STACK_TRACE_LIMIT","OPTIONS_POSITION","ERROR_NAME","OriginalError","OriginalErrorPrototype","BaseError","WrappedError","wrapErrorConstructorWithCause","AGGREGATE_ERROR","$AggregateError","arity","init","iterate","AggregateErrorPrototype","errorsArray","addToUnscopables","InternalStateModule","defineIterator","createIterResultObject","ARRAY_ITERATOR","setInternalState","getInternalState","iterated","Arguments","WEB_ASSEMBLY","WebAssembly","exportGlobalErrorCauseWrapper","exportWebAssemblyErrorCauseWrapper","EvalError","ReferenceError","SyntaxError","URIError","CompileError","LinkError","RuntimeError","STRING_ITERATOR","point","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","CSS","escape","cssEscape","codeUnit","firstCodeUnit","isSpecificValue","RegExp","cloneSpecificValue","getTime","deepCloneArray","clone","item","deepExtend","safeGetProperty","property","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","$$typeof","REACT_ELEMENT_TYPE","for","cloneUnlessOtherwiseSpecified","deepmerge","emptyTarget","defaultArrayMerge","map","element","getKeys","getEnumerableOwnPropertySymbols","filter","propertyIsOnObject","_","mergeObject","destination","propertyIsUnsafe","getMergeFunction","customMerge","arrayMerge","sourceIsArray","deepmergeAll","reduce","prev","deepmerge_1","isFrozen","freeze","seal","fun","thisValue","Func","arrayForEach","unapply","arrayPop","pop","arrayPush","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","unconstruct","thisArg","_len","_key","_len2","_key2","addToSet","transformCaseFunc","l","lcElement","newObject","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","EXPRESSIONS","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","createPolicy","suffix","ATTR_NAME","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","createDOMPurify","DOMPurify","removed","nodeType","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","MozNamedAttrMap","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","ownerDocument","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","tbody","TRUSTED_TYPES_POLICY","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","parentNode","remove","_removeAttribute","attribute","getAttributeNode","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","insertBefore","createTextNode","childNodes","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isClobbered","elm","nodeName","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","allowedTags","firstElementChild","_isBasicCustomElement","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","firstChild","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","SubRange","low","high","overlaps","touches","add","subtract","DRange","ranges","_update_length","previous","_add","subrange","newRanges","_subtract","intersect","_intersect","numbers","subranges","ReflectOwnKeys","R","ReflectApply","receiver","NumberIsNaN","EventEmitter","once","emitter","Promise","resolve","reject","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","handler","flags","on","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","newListener","emit","unshift","warned","w","count","ProcessEmitWarning","warning","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","originalListener","shift","spliceOne","off","removeAllListeners","rawListeners","eventNames","formatter","fault","EConstructor","FormattedError","displayName","eval","reference","syntax","uri","fmt","precision","argIndex","escaped","leadingZero","nextArg","slurpNumber","digits","parseFloat","toFixed","JSON","stringify","toUpperCase","vsprintf","replacements","log","printf","toStr","concatty","slicy","arrLike","boundLength","boundArgs","joiner","joiny","Empty","$SyntaxError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","hasProto","getProto","needsEval","TypedArray","INTRINSICS","Atomics","BigInt64Array","BigUint64Array","DataView","decodeURI","encodeURI","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Map","Proxy","Set","Uint8ClampedArray","Uint16Array","Uint32Array","WeakRef","WeakSet","errorProto","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","splice","$replace","$strSlice","$exec","rePropName","reEscapeChar","getBaseIntrinsic","alias","intrinsicName","stringToPath","quote","subString","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","origSymbol","hasSymbolSham","hasNativeSymbols","symObj","syms","deepFreeze","clear","delete","deepFreezeEs6","_default","Response","isMatchIgnored","ignoreMatch","escapeHTML","inherit","original","objects","emitsWrappingTags","HTMLRenderer","parseTree","classPrefix","walk","addText","openNode","className","sublanguage","span","closeNode","TokenTree","rootNode","children","closeAllNodes","builder","_walk","child","_collapse","every","TokenTreeEmitter","addKeyword","addSublanguage","toHTML","finalize","re","BACKREF_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","BACKSLASH_ESCAPE","begin","relevance","APOS_STRING_MODE","illegal","contains","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","MATCH_NOTHING_RE","RE_STARTERS_RE","SHEBANG","opts","beginShebang","binary","resp","END_SAME_AS_BEGIN","_beginMatch","skipIfhasPrecedingDot","response","beginKeywords","__beforeBegin","keywords","compileIllegal","_parent","either","compileMatch","compileRelevance","COMMON_KEYWORDS","DEFAULT_KEYWORD_CLASSNAME","compileKeywords","rawKeywords","caseInsensitive","compiledKeywords","compileList","keywordList","keyword","pair","scoreForKeyword","providedScore","commonKeyword","compileLanguage","language","plugins","langRe","case_insensitive","MultiRegex","matchIndexes","regexes","matchAt","addRule","countMatchGroups","compile","terminators","matcherRe","regexps","separator","numCaptures","regex","substring","lastIndex","s","findIndex","matchData","ResumableMultiRegex","rules","multiRegexes","regexIndex","getMatcher","matcher","resumingScanAtSamePosition","considerAll","m2","compilerExtensions","classNameAliases","compileMode","cmode","isCompiled","keywordPattern","$pattern","lexemes","keywordPatternRe","beginRe","endSameAsBegin","endsWithParent","endRe","terminatorEnd","illegalRe","expandOrCloneMode","variants","cachedVariants","variant","dependencyOnParent","starts","buildModeRegex","mm","term","rule","BuildVuePlugin","hljs","Component","detectedLanguage","unknownLanguage","computed","highlighted","autoDetect","getLanguage","highlightAuto","highlight","ignoreIllegals","hasValueOrEmptyAttribute","autodetect","render","class","domProps","VuePlugin","install","Vue","component","mergeHTMLPlugin","originalStream","nodeStream","resultNode","mergeStreams","processed","nodeStack","selectStream","event","attributeString","stream","reverse","_nodeStream","nextSibling","nodeValue","seenDeprecations","deprecated","escape$1","inherit$1","NO_MATCH","languages","aliases","SAFE_MODE","fixMarkupRe","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","noHighlightRe","languageDetectRe","tabReplace","useBR","__emitter","shouldNotHighlight","languageName","codeOrlanguageName","optionsOrCode","continuation","fire","_highlight","codeToHighlight","keywordData","matchText","processBuffer","subLanguage","processSubLanguage","modeBuffer","continuations","processKeywords","keywordRelevance","startsWith","cssClass","startNewMode","endOfMode","matchPlusRemainder","matched","lexeme","endsParent","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","cb","skip","excludeBegin","returnBegin","doEndMatch","endMode","origin","returnEnd","excludeEnd","lastMatch","processLexeme","textBeforeMatch","badRule","iterations","md","processContinuations","processedCount","illegalBy","sofar","errorRaised","languageSubset","plaintext","justTextHighlightResult","results","autoDetection","sorted","sort","supersetOf","best","secondBest","second_best","brPlugin","TAB_REPLACE_RE","tabReplacePlugin","highlightElement","blockLanguage","block","find","_class","updateClassName","currentLang","resultLang","classList","relavance","initHighlighting","called","querySelectorAll","wantsHighlight","highlightAll","readyState","registerAliases","aliasList","lang","plugin","boot","fixMarkup","deprecateFixMarkup","highlightBlock","deprecateHighlightBlock","configure","userOptions","initHighlightingOnLoad","registerLanguage","languageDefinition","error$1","rawDefinition","unregisterLanguage","listLanguages","requireLanguage","addPlugin","upgradePluginAPI","vuePlugin","debugMode","safeMode","versionString","HLJS","bash","VAR","BRACED_VAR","SUBST","HERE_DOC","QUOTE_STRING","ARITHMETIC","KNOWN_SHEBANG","FUNCTION","literal","built_in","http","VERSION","HEADER","HEADERS_AND_BODY","KEYWORDS","LITERALS","BUILT_INS","lookahead","javascript","IDENT_RE$1","FRAGMENT","XML_TAG","isTrulyOpeningTag","afterMatchIndex","nextChar","after","hasClosingTag","KEYWORDS$1","decimalDigits","frac","decimalInteger","NUMBER","HTML_TEMPLATE","CSS_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","PARAMS","label","json","ALLOWED_COMMENTS","TYPES","VALUE_CONTAINER","OBJECT","ARRAY","powershell","BACKTICK_ESCAPE","APOS_STRING","PS_COMMENT","CMDLETS","PS_CLASS","PS_FUNCTION","PS_USING","PS_ARGUMENTS","PS_METHODS","GENTLEMANS_SET","PS_TYPE","TAG_NAME_RE","optional","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","yaml","URI_CHARACTERS","STRING","CONTAINER_STRING","TIMESTAMP","VALUE_MODES","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","NaN","rt","LN2","SLICE$0","createClass","ctor","superClass","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","Keyed","Indexed","DELETE","SHIFT","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","newArr","ii","ensureSize","iter","__iterate","returnTrue","wrapIndex","uint32Index","wholeSlice","resolveBegin","resolveIndex","resolveEnd","defaultIndex","ITERATE_KEYS","ITERATE_VALUES","ITERATE_ENTRIES","REAL_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","iteratorValue","k","v","iteratorResult","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","iteratorFn","isArrayLike","emptySequence","toSeq","seqFromValue","toKeyedSeq","fromEntrySeq","keyedSeqFromValue","entrySeq","toIndexedSeq","indexedSeqFromValue","toSetSeq","toSource","of","cacheResult","_cache","__iterateUncached","toArray","seqIterate","__iterator","seqIterator","isSeq","EMPTY_SEQ","EMPTY_REPEAT","EMPTY_RANGE","IS_SEQ_SENTINEL","ArraySeq","_array","ObjectSeq","_object","_keys","IterableSeq","_iterable","IteratorSeq","_iterator","_iteratorCache","maybeSeq","seq","maybeIndexedSeqFromValue","useKeys","cache","maxIndex","entry","__iteratorUncached","fromJS","converter","fromJSWith","fromJSDefault","parentJSON","isPlainObj","toList","toMap","is","valueA","valueB","deepEqual","__hash","notAssociative","flipped","allEqual","bSize","Repeat","times","_value","invariant","Range","_start","_end","_step","KeyedCollection","IndexedCollection","SetCollection","notSetValue","searchValue","this$0","other","possibleIndex","offsetValue","imul","smi","i32","hash","o","h","STRING_HASH_CACHE_MIN_STRLEN","cachedHashString","hashString","hashCode","hashJSObj","stringHashCache","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","getIENodeHash","objHashUID","isExtensible","uniqueID","assertNotInfinite","emptyMap","isMap","withMutations","maybeMap","IS_MAP_SENTINEL","keyValues","_root","updateMap","setIn","keyPath","updateIn","deleteIn","update","updater","updatedValue","updateInDeepMap","forceIterator","__ownerID","__altered","merge","mergeIntoMapWith","mergeWith","merger","mergeIn","iters","mergeDeep","deepMerger","mergeDeepWith","deepMergerWith","mergeDeepIn","comparator","OrderedMap","sortFactory","sortBy","mapper","mutable","asMutable","wasAltered","__ensureOwner","asImmutable","MapIterator","ownerID","makeMap","EMPTY_MAP","MapPrototype","ArrayMapNode","BitmapIndexedNode","nodes","HashArrayMapNode","HashCollisionNode","keyHash","ValueNode","_type","_reverse","_stack","mapIteratorFrame","mapIteratorValue","__prev","newRoot","newSize","didChangeSize","didAlter","updateNode","isLeafNode","mergeIntoNode","newNode","idx1","idx2","createNodes","packNodes","excluding","packedII","packedNodes","bit","expandNodes","including","expandedNodes","iterables","mergeIntoCollectionWith","nextValue","collection","mergeIntoMap","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","popCount","idx","canEdit","newArray","spliceIn","newLen","spliceOut","removeIn","exists","MAX_ARRAY_MAP_SIZE","isEditable","newEntries","keyHashFrag","MAX_BITMAP_INDEXED_SIZE","newBitmap","newNodes","newCount","MIN_HASH_ARRAY_MAP_SIZE","keyMatch","subNode","List","empty","emptyList","isList","makeList","VNode","setSize","maybeList","IS_LIST_SENTINEL","listNodeFor","_origin","updateList","insert","_capacity","_level","_tail","oldSize","setListBounds","mergeIntoListWith","iterateList","DONE","ListPrototype","removeBefore","level","originIndex","newChild","removingFirst","oldChild","editable","editableVNode","removeAfter","sizeIndex","EMPTY_LIST","EMPTY_ORDERED_MAP","left","right","tailPos","getTailOffset","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","to","capacity","newTail","updateVNode","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","maybeOrderedMap","makeOrderedMap","omap","_map","_list","updateOrderedMap","newMap","newList","flip","ToKeyedSequence","indexed","_iter","_useKeys","ToIndexedSequence","ToSetSequence","FromEntriesSequence","flipFactory","flipSequence","makeSequence","reversedSequence","cacheResultThrough","mapFactory","mappedSequence","reverseFactory","filterFactory","predicate","filterSequence","countByFactory","grouper","groups","groupByFactory","isKeyedIter","coerce","iterableClass","reify","sliceFactory","originalSize","resolvedBegin","resolvedEnd","sliceSize","resolvedSize","sliceSeq","skipped","isSkipping","takeWhileFactory","takeSequence","iterating","skipWhileFactory","skipSequence","skipping","concatFactory","isKeyedIterable","singleton","concatSeq","flatten","sum","flattenFactory","depth","flatSequence","flatDeep","currentDepth","flatMapFactory","interposeFactory","interposedSequence","defaultComparator","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","some","validateEntry","resolveSize","Record","defaultValues","hasInitialized","RecordType","setProps","RecordTypePrototype","_name","_defaultValues","RecordPrototype","valueSeq","indexedIterable","recordName","defaultVal","_empty","makeRecord","likeRecord","record","setProp","emptySet","isSet","maybeSet","IS_SET_SENTINEL","fromKeys","keySeq","updateSet","union","originalSet","OrderedSet","__make","EMPTY_SET","SetPrototype","__empty","makeSet","emptyOrderedSet","isOrderedSet","maybeOrderedSet","EMPTY_ORDERED_SET","OrderedSetPrototype","makeOrderedSet","Stack","emptyStack","isStack","unshiftAll","maybeStack","IS_STACK_SENTINEL","head","_head","peek","makeStack","pushAll","EMPTY_STACK","StackPrototype","mixin","keyCopier","toJS","__toJS","toOrderedMap","toOrderedSet","toSet","toStack","__toStringMapper","returnValue","findEntry","sideEffect","joined","isFirst","reducer","initialReduction","reduction","useFirst","reduceRight","reversed","not","butLast","isEmpty","countBy","entriesSequence","entryMapper","filterNot","findKey","findLast","findLastEntry","findLastKey","flatMap","searchKey","getIn","searchKeyPath","nested","groupBy","hasIn","isSubset","isSuperset","keyOf","keyMapper","lastKeyOf","maxBy","neg","defaultNegComparator","minBy","rest","amount","skipLast","skipWhile","skipUntil","take","takeLast","takeWhile","takeUntil","hashIterable","quoteString","chain","mapEntries","mapKeys","KeyedIterablePrototype","defaultZipper","ordered","keyed","murmurHashOfSize","hashMerge","removeNum","numArgs","spliced","findLastIndex","interpose","interleave","zipped","interleaved","zip","zipWith","inherits","superCtor","super_","TempCtor","filename","mime","bom","blob","Blob","msSaveBlob","blobURL","URL","createObjectURL","webkitURL","tempLink","href","download","click","setTimeout","revokeObjectURL","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","objectToString","nativeMax","nativeMin","now","toNumber","isObjectLike","isBinary","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","debounced","isInvoking","leadingEdge","cancel","clearTimeout","flush","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","baseCreate","baseLodash","LazyWrapper","__wrapped__","__actions__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","LodashWrapper","chainAll","__chain__","__index__","__values__","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","arrayEach","iteratee","arrayFilter","resIndex","baseIndexOf","arrayIncludes","baseTimes","isArguments","isIndex","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","arrayMap","arrayReduce","accumulator","initAccum","arraySome","asciiToArray","reAsciiWord","asciiWords","baseAssignValue","eq","assignMergeValue","assignValue","objValue","assocIndexOf","copyObject","baseAssign","keysIn","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","isDeep","isFlat","isFull","isFunc","stacked","subValue","objectCreate","baseForOwn","baseEach","createBaseEach","baseFindIndex","fromRight","isFlattenable","baseFlatten","isStrict","baseFor","createBaseFor","castPath","toKey","baseGet","baseGetAllKeys","keysFunc","symbolsFunc","getRawTag","symToStringTag","toStringTag","baseGetTag","baseHasIn","baseIsNaN","strictIndexOf","baseIsArguments","baseIsEqualDeep","baseIsEqual","equalArrays","equalByTag","equalObjects","arrayTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsMap","baseIsMatch","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isFunction","isMasked","reIsHostCtor","funcProto","objectProto","funcToString","reIsNative","baseIsNative","baseIsSet","isLength","typedArrayTags","baseIsTypedArray","baseMatches","baseMatchesProperty","identity","baseIteratee","isPrototype","nativeKeys","baseKeys","nativeKeysIn","baseKeysIn","isProto","getMatchData","matchesStrictComparable","isKey","isStrictComparable","baseMergeDeep","safeGet","baseMerge","srcIndex","cloneTypedArray","isArrayLikeObject","isPlainObject","toPlainObject","mergeFunc","isCommon","isTyped","baseProperty","basePropertyDeep","basePropertyOf","baseReduce","eachFunc","overRest","setToString","baseRest","baseSet","metaMap","baseSetData","constant","baseSetToString","baseSlice","baseSome","symbolProto","symbolToString","baseToString","trimmedEndIndex","reTrimStart","baseTrim","baseUnary","baseUnset","baseZipObject","assignFunc","valsLength","cacheHas","castSlice","cloneArrayBuffer","arrayBuffer","freeExports","freeModule","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","typedArray","composeArgs","partials","holders","isCurried","argsIndex","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbols","getSymbolsIn","coreJsData","countHolders","placeholder","isIterateeCall","createAssigner","assigner","sources","guard","createCtor","createBind","isBind","Ctor","hasUnicode","stringToArray","createCaseFirst","methodName","strSymbols","deburr","words","reApos","createCompounder","callback","thisBinding","createHybrid","createRecurry","getHolder","replaceHolders","createCurry","createFind","findIndexFunc","reorder","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","createPartial","isLaziable","setWrapToString","wrapFunc","isCurry","newData","getData","mergeData","toInteger","createWrap","customOmitClone","deburrLetter","isPartial","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","convert","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","flatRest","noop","realNames","getFuncName","otherFunc","isKeyable","getMapData","getValue","getPrototype","overArg","nativeObjectToString","unmasked","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ctorString","reWrapDetails","reSplitDetails","getWrapDetails","hasPath","hasFunc","reHasUnicode","reHasUnicodeWord","hasUnicodeWord","nativeCreate","reWrapComment","insertWrapDetails","details","spreadableSymbol","isConcatSpreadable","reIsUint","reIsDeepProp","reIsPlainProp","lodash","funcName","maskSrcKey","memoize","memoizeCapped","PLACEHOLDER","WRAP_ARY_FLAG","srcBitmask","newBitmask","isCombo","freeProcess","nodeUtil","types","require","binding","transform","otherArgs","indexes","oldArray","shortOut","updateWrapDetails","nativeNow","lastCalled","stamp","pairs","LARGE_ARRAY_SIZE","unicodeToArray","reWhitespace","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsModifier","rsEmoji","reUnicodeWord","unicodeWords","wrapFlags","wrapperClone","capitalize","camelCase","word","upperFirst","curry","timeWaiting","reLatin","reComboMark","mapping","fallbackHolder","baseAry","cloneArray","wrapImmutable","cloner","baseConvert","util","isLib","isObj","config","cap","fixed","immutable","rearg","defaultHolder","forceCurry","forceFixed","forceRearg","pristine","runInContext","helpers","isError","isWeakMap","toPath","each","aryMethodKeys","aryMethod","wrappers","castArray","nthArg","castCap","iterateeRearg","baseArity","iterateeAry","castFixed","skipFixed","methodSpread","flatSpread","castRearg","skipRearg","methodRearg","aryRearg","cloneByPath","createConverter","realName","aliasToReal","remap","oldOptions","newUtil","newFunc","newOptions","mutate","createCloner","aryKey","otherName","afterRearg","castCurry","convertLib","realToAlias","defaultValue","isBoolean","stubFalse","isEqual","nodeIsMap","isNull","isNumber","objectCtorString","nodeIsSet","isString","nodeIsTypedArray","memoized","Cache","negate","omit","paths","CLONE_DEEP_FLAG","INFINITY","toFinite","remainder","toLower","pattern","zipObject","settings","subset","prefix","defaultPrefix","registerAlias","Emitter","properties","toHtmlNoop","before","coerceElementMatchingCallback","extend","ArraySlice","elements","toValue","compactMap","initialValue","refract","KeyValuePair","JSONSerialiser","Namespace","elementMap","elementDetection","noDefault","useDefault","_attributeElementKeys","_attributeElementArrayKeys","use","base","load","register","NullElement","StringElement","NumberElement","BooleanElement","ArrayElement","ObjectElement","MemberElement","RefElement","LinkElement","detect","ElementClass","_elements","unregister","givenPrepend","toElement","getElementClass","fromRefract","serialiser","deserialise","toRefract","serialise","pascal","ObjectSlice","member","meta","relation","primitive","indexOrKey","getIndex","startIndex","memo","findElements","givenOptions","recursive","keyOrIndex","findByElement","findByClass","getById","_meta","_attributes","toRef","findRecursive","elementNames","elementName","append","checkElement","items","parentElements","parents","namesIndex","getMetaProperty","hasKey","setMetaProperty","_storedElement","_content","title","description","links","recursiveChildren","getMember","getKey","keyOrObject","objectKey","JSON06Serialiser","payload","serialiseObject","isEnum","enumSerialiseAttributes","enumSerialiseContent","serialiseContent","shouldSerialiseContent","refSerialiseContent","sourceMapSerialiseContent","dataStructureSerialiseContent","enumerations","samples","sample","enumeration","Null","deserialiseObject","deserialiseContent","existingSamples","existingSample","enumElement","defaultElement","shouldRefract","convertKeyToRefract","serialiseEnum","subItem","subSubItem","keyValue","propIsEnumerable","shouldUseNative","test1","test2","test3","letter","symbols","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setForEach","weakMapHas","weakSetHas","weakRefDeref","deref","booleanValueOf","functionToString","$match","$slice","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","bigIntValueOf","gOPS","symToString","hasShammedSymbols","isEnumerable","gPO","addNumericSeparator","sepRegex","int","intStr","utilInspect","inspectCustom","custom","inspectSymbol","wrapQuotes","defaultStyle","quoteChar","quoteStyle","isRegExp","inspect_","maxStringLength","customInspect","indent","numericSeparator","inspectString","bigIntStr","maxDepth","getIndent","baseIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","HTMLElement","attrs","xs","singleLineValues","indentedJoin","mapParts","collectionOf","setParts","weakCollectionOf","isWeakSet","isWeakRef","isBigInt","ys","protoTag","stringTag","trailer","lowbyte","lineJoiner","symMap","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","runClearTimeout","marker","Item","nextTick","browser","env","argv","cwd","chdir","umask","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","percentTwenties","Format","formatters","RFC1738","RFC3986","formats","utils","defaults","allowDots","allowPrototypes","allowSparse","arrayLimit","charset","charsetSentinel","comma","decoder","delimiter","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","strictNullHandling","$0","numberStr","parseArrayValue","parseKeys","parseQueryStringKeys","givenKey","valuesParsed","segment","leaf","cleanRoot","parseObject","normalizeParseOptions","tempObj","parseQueryStringValues","cleanStr","skipIndex","bracketEqualsPos","encodedVal","combine","parseValues","newObj","compact","getSideChannel","arrayPrefixGenerators","brackets","indices","repeat","pushToArray","valueOrArray","toISO","toISOString","defaultFormat","addQueryPrefix","encoder","encodeValuesOnly","serializeDate","date","skipNulls","sentinel","generateArrayPrefix","commaRoundTrip","sideChannel","tmpSc","findFlag","isNonNullishPrimitive","valuesArray","valuesJoined","objKeys","adjustedPrefix","keyPrefix","valueSideChannel","normalizeStringifyOptions","arrayFormat","hexTable","arrayToObject","assignSingleSource","acc","refs","compactQueue","compacted","strWithoutPlus","unescape","defaultEncoder","mapped","mergeTarget","targetItem","querystringify","querystring","query","parser","RandExp","_setDefaults","ignoreCase","multiline","tokens","defaultRange","randInt","_gen","token","ROOT","GROUP","followedBy","notFollowedBy","remember","groupNumber","_randSelect","POSITION","SET","expandedSet","_expand","REPETITION","REFERENCE","CHAR","_randBool","_toOtherCase","RANGE","drange","otherCaseCode","_range","randexp","_randexp","sugar","MAX_BYTES","MAX_UINT32","crypto","msCrypto","getRandomValues","randomBytes","generated","oldBrowser","_typeof","CopyToClipboard","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","enumerableOnly","_objectSpread","_defineProperty","getOwnPropertyDescriptors","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceKeys","sourceSymbolKeys","_defineProperties","_setPrototypeOf","p","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","_React$PureComponent","_inherits","subClass","_super","_this","_classCallCheck","instance","Constructor","_this$props","elem","Children","only","onClick","_createClass","protoProps","staticProps","_this$props2","cloneElement","PureComponent","DebounceInput","_lodash","persist","oldValue","minLength","setState","notify","forceNotify","onKeyDown","onBlur","debounceTimeout","doNotify","debouncedChangeFunc","isDebouncing","onChange","_debounceTimeout2","createNotifier","componentDidUpdate","prevProps","oldTimeout","stateValue","componentWillUnmount","maybeOnKeyDown","maybeOnBlur","forceNotifyByEnter","forceNotifyOnBlur","inputRef","maybeRef","aa","r","ba","ca","da","ea","fa","ha","ia","ja","ka","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","D","oa","pa","qa","na","ma","la","xlinkHref","ra","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","sa","ta","ua","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ma","Ka","La","Na","Oa","Pa","Qa","_render","Ra","_context","_payload","_init","Sa","Ta","Va","_valueTracker","Ua","setValue","stopTracking","Wa","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","controlled","$a","ab","bb","eb","db","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","hb","ib","jb","kb","mathml","lb","mb","nb","ob","MSApp","execUnsafeLocalFunction","pb","lastChild","qb","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","rb","sb","tb","setProperty","ub","menuitem","area","br","col","embed","hr","img","keygen","link","param","track","wbr","vb","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","Rb","onError","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","return","$b","memoizedState","dehydrated","ac","cc","bc","sibling","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","nc","oc","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","pointerId","tc","vc","wc","lanePriority","unstable_runWithPriority","hydrate","containerInfo","xc","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","animation","transition","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","clz32","ad","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","uc","jd","kd","ld","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","cancelBubble","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","locale","which","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","datetime","email","month","password","search","tel","week","me","ne","oe","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ge","Ie","Je","Ke","Le","Me","compareDocumentPosition","Ne","HTMLIFrameElement","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","defaultView","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","G","$e","af","bf","cf","df","capture","passive","Nb","z","u","q","t","ef","ff","gf","hf","J","K","Q","L","je","ke","char","jf","kf","lf","mf","autoFocus","nf","__html","pf","qf","rf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","H","I","Cf","M","N","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","getChildContext","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","ReactCurrentBatchConfig","lg","mg","ng","og","pg","qg","rg","_currentValue","sg","childLanes","tg","dependencies","firstContext","lanes","ug","vg","observedBits","responders","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","pending","effects","yg","zg","eventTime","lane","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Kg","isMounted","_reactInternals","enqueueSetState","Hg","Ig","Jg","enqueueReplaceState","enqueueForceUpdate","Lg","shouldComponentUpdate","isPureReactComponent","Mg","Ng","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Og","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Pg","Qg","_owner","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","memoizedProps","revealOrder","jh","kh","lh","mh","nh","oh","pendingProps","ph","qh","rh","sh","th","uh","_workInProgressVersionPrimary","vh","ReactCurrentDispatcher","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","baseQueue","Ih","Jh","Kh","lastRenderedReducer","action","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","U","useState","getSnapshot","subscribe","useEffect","setSnapshot","Oh","Ph","Qh","Rh","destroy","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","readContext","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","ReactCurrentOwner","fi","gi","ji","ki","li","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","qi","ri","pendingContext","Bi","Ci","Di","Ei","si","retryLane","ti","fallback","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","wi","xi","yi","zi","isBackwards","rendering","renderingStartTime","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onclick","createElementNS","Hi","Ii","W","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","Vi","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","Zi","$i","focus","aj","bj","onCommitFiberUnmount","cj","dj","ej","fj","gj","hj","_reactRootContainer","ij","jj","kj","lj","then","mj","nj","oj","pj","X","Y","qj","rj","sj","tj","uj","vj","wj","ck","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","va","ak","bk","dk","rangeCount","focusedElem","selectionRange","ek","setStart","setEnd","scrollLeft","scrollTop","onCommitFiberRoot","fk","gk","ik","isReactComponent","pendingChildren","jk","mutableSourceEagerHydrationData","lk","mk","nk","ok","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","sk","uk","kk","hk","_calculateChangedBits","unstable_observedBits","unmount","form","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","pk","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","__REACT_DEVTOOLS_GLOBAL_HOOK__","yk","isDisabled","supportsFiber","inject","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","ImmutablePropTypes","Immutable","ANONYMOUS","productionTypeChecker","getProductionTypeChecker","getPropType","propValue","propType","createChainableTypeChecker","validate","checkType","chainedCheckType","createIterableSubclassTypeChecker","subclassName","validator","createImmutableTypeChecker","immutableClassName","immutableClassTypeValidator","listOf","mapOf","orderedMapOf","setOf","orderedSetOf","stackOf","iterableOf","recordOf","mapContains","orderedMapContains","orderedMap","orderedSet","ContextConsumer","ContextProvider","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","forceUpdate","__self","__source","_status","_result","IsSomeRendererActing","createContext","_currentValue2","_threadCount","Provider","Consumer","createFactory","createRef","forwardRef","isValidElement","lazy","codes","createErrorType","_Base","arg1","arg2","arg3","_inheritsLoose","expected","thing","determiner","endsWith","this_len","Duplex","Readable","Writable","allowHalfOpen","readable","onend","_writableState","ended","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","PassThrough","Transform","_transform","chunk","ReadableState","EElistenerCount","Stream","OurUint8Array","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","onEofChunk","emitReadable","emitReadable_","chunkInvalid","_isUint8Array","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","nOrig","doRead","pipe","dest","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanup","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","pipeOnDrain","pipeOnDrainFunctionResult","pause","dests","ev","methodWrap","methodWrapReturnFunction","asyncIterator","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","_write","err2","CorkedRequest","finish","onCorkedFinish","corkReq","pendingcb","corkedRequestsFree","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","onwriteStateUpdate","writelen","onwriteError","finishMaybe","errorEmitted","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","writableStateBufferGetter","hasInstance","writeAfterEnd","validChunk","writeOrBuffer","newChunk","decodeChunk","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_toPropertyKey","_toPrimitive","hint","prim","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","promise","lastPromise","wrapForNext","_return","_this2","_Object$create","hasStrings","_getString","_getBuffer","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","req","isRequest","setHeader","abort","ERR_MISSING_ARGS","pipeline","streams","popCallback","destroys","destroyer","closed","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","_immutable2","_utilities","reducers","getDefaultState","reducerKeys","inputState","temporaryState","reducerName","nextDomainState","validateNextState","_combineReducers3","_getStateName2","reducerNames","stateName","isImmutable","unexpectedStatePropertyNames","getUnexpectedInvocationParameterMessage","getStateName","_getStateName3","_getUnexpectedInvocationParameterMessage3","_validateNextState3","nextState","required","port","protocol","sets","positions","regexpStr","lastGroup","groupStack","repeatErr","strToChars","wordBoundary","nonWordBoundary","notWords","ints","notInts","whitespace","notWhitespace","classTokens","tokenizeClass","anyChar","group","INTS","WORDS","WHITESPACE","SLSH","lbs","a16","b16","c8","dctrl","eslsh","copyProps","SafeBuffer","performance","MessageChannel","unstable_forceFrameRate","cancelAnimationFrame","requestAnimationFrame","port2","port1","onmessage","postMessage","sortIndex","startTime","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","NonError","_prepareSuperMessage","commonProperties","isCalled","destroyCircular","to_","forceEnumerable","serializeError","POSITIVE_INFINITY","deserializeError","newError","blockSize","finalSize","_block","_finalSize","_blockSize","accum","assigned","_update","digest","rem","bits","lowBits","highBits","_hash","SHA","algorithm","Algorithm","sha","sha1","sha224","sha256","sha384","sha512","Sha","_w","rotl30","ft","_a","_b","_c","_d","_e","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","T1","T2","SHA512","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","al","bl","cl","dl","fl","gl","hl","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","ShortUniqueId","__defProp","__getOwnPropDesc","__getOwnPropNames","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__publicField","src_exports","__export","DEFAULT_OPTIONS","DEFAULT_UUID_LENGTH","dictionary","shuffle","counter","_ShortUniqueId","argOptions","_digit_first_ascii","_digit_last_ascii","lowerCase","_alpha_lower_first_ascii","_alpha_lower_last_ascii","upperCase","_alpha_upper_first_ascii","_alpha_upper_last_ascii","decDigits","alphaDigits","_hex_last_ascii","_number_dict_ranges","_alpha_dict_ranges","_alpha_lower_dict_ranges","_alpha_upper_dict_ranges","_alphanum_dict_ranges","_alphanum_lower_dict_ranges","_alphanum_upper_dict_ranges","_hex_dict_ranges","finalArgs","finalDict","dictIndex","rangesName","_dict_ranges","rangeType","rangeTypeKey","dictRange","lowerBound","upperBound","PROBABILITY","dict","dictLength","setCounter","sequentialUUID","counterDiv","counterRem","uuidLength","randomUUID","randomPartIdx","formattedUUID","fnMap","padStart","rounds","availableUUIDs","sqrt","PI","approxMaxBeforeCollision","score","finalLength","hexStamp","idLength","rndIdx","round","suid","_m","p1","p2","setDictionary","rnd","collisionProbability","uniqueness","getVersion","parseStamp","mod","except","__copyProps","callBound","$WeakMap","$Map","$weakMapGet","$weakMapSet","$weakMapHas","$mapGet","$mapSet","$mapHas","listGetNode","curr","$wm","$m","$o","channel","assert","listGet","listHas","listSet","statics","conf","composables","stampit","EE","_isStdio","didOnEnd","normalizeEncoding","nenc","_normalizeEncoding","retried","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8End","utf8Text","total","utf8CheckIncomplete","active","getRangeAt","blur","toS","alive","walker","node_","modifiers","keepGoing","isRoot","circular","stopHere","pre","post","updateState","isLeaf","notLeaf","notRoot","isLast","Traverse","traverse","ps","qs","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","address","ignore","lolcation","loc","finaldestination","Url","pathname","scheme","extractProtocol","forwardSlashes","otherSlashes","slashesCount","relative","extracted","instruction","instructions","up","host","hostname","username","auth","ins","inst","useSyncExternalStore","useSyncExternalStoreWithSelector","hasValue","localStorage","trace","isClosingTag","isSelfClosingTag","isOpeningTag","isTag","getType","indentor","textNodesOnSameLine","indicesToRemove","rawResult","lexer","xmlStr","splitOnTags","line","indentation","oneBefore","twoBefore","XML_CHARACTER_MAP","escapeForXML","indent_count","indent_spaces","create_indent","character","_elem","icount","indents","interrupt","isStringContent","get_attributes","_attr","_cdata","proceed","interrupted","instant","declaration","addXmlDeclaration","standalone","isNativeSmoothScrollEnabledOn","getComputedStyle","makeScroller","container","defaultDuration","edgeOffset","scrollTimeoutId","setScrollTimeoutId","stopScroll","getTopWithEdgeOffset","getTopOf","scrollToY","targetY","duration","onDone","toY","startY","getY","distance","loopScroll","getHeight","scrollHeight","scrollToElem","scrollIntoView","elemHeight","getBoundingClientRect","elemBottom","containerHeight","containerBottom","scrollToCenterOf","setup","newDefaultDuration","newEdgeOffset","intoView","center","moving","docElem","getDocY","scrollY","zenscroll","scrollingElement","scrollTo","innerHeight","clientHeight","offsetTop","createScroller","scrollContainer","noZensmooth","isHistorySupported","history","isScrollRestorationSupported","scrollRestoration","zenscrollY","targetElem","getElementById","diff","RE_noZensmooth","anchor","historyState","replaceState","pushState","_Object$assign","_bindInstanceProperty","_extends","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","definition","nmd","_objectSpread2","formatProdErrorMessage","$$observable","observable","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","getState","isSubscribed","unsubscribe","replaceReducer","nextReducer","_ref","outerSubscribe","observer","observeState","bindActionCreator","actionCreator","compose","funcs","NEW_THROWN_ERR","NEW_THROWN_ERR_BATCH","NEW_SPEC_ERR","NEW_SPEC_ERR_BATCH","NEW_AUTH_ERR","CLEAR","CLEAR_BY","newThrownErr","newThrownErrBatch","newSpecErr","newSpecErrBatch","errArray","newAuthErr","clearBy","makeWindow","win","File","FormData","swagger2SchemaKeys","Im","getParameterSchema","parameter","isOAS3","schema","parameterContentMediaType","DEFAULT_RESPONSE_KEY","maybe","objectify","fromJSOrdered","js","objWithHashedKeys","createObjWithHashedKeys","fdObj","hashIdx","trackKeys","containsMultiple","normalizeArray","isFn","_memoize","objMap","objReduce","systemThunkMiddleware","getSystem","validateValueBySchema","requiredByParam","bypassRequiredCheck","nullable","requiredBySchema","maximum","minimum","maxLength","uniqueItems","maxItems","minItems","schemaRequiresValue","stringCheck","arrayCheck","arrayListCheck","passedAnyCheck","objectVal","propKey","errs","validatePattern","rxPattern","validateMinItems","validateMaxItems","needRemove","errorPerItem","validateUniqueItems","errorsPerIndex","validateMaxLength","validateMinLength","validateMaximum","validateMinimum","validateDateTime","validateGuid","validateString","validateBoolean","validateInteger","validateFile","btoa","sorters","operationsSorter","alpha","localeCompare","tagsSorter","buildFormData","formArr","shallowEqualKeys","braintreeSanitizeUrl","requiresValidationURL","createDeepLinkPath","escapeDeepLinkPath","getExtensions","defObj","getCommonExtensions","deeplyStripKey","keyToStrip","paramToIdentifier","returnAll","allowHashes","paramName","paramIn","generatedIdentifiers","paramToValue","paramValues","b64toB64UrlEncoded","isEmptyValue","idFn","createStoreWithMiddleware","rootReducer","initialState","middlwares","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","applyMiddleware","middlewares","_dispatch","middlewareAPI","middleware","Store","pluginsOptions","system","configs","components","rootInjects","statePlugins","boundSystem","toolbox","_getSystem","configureStore","buildSystem","getStore","rebuild","pluginSystem","combinePlugins","systemExtend","callAfterLoad","buildReducer","getRootInjects","getWrappedAndBoundActions","getWrappedAndBoundSelectors","getStateThunks","getFn","getConfigs","rebuildReducer","getComponents","_getConfigs","React","setConfigs","states","allReducers","reducerSystem","makeReducer","reducerObj","redFn","wrapWithTryCatch","combineReducers","upName","getSelectors","getActions","actions","actionName","getBoundActions","actionGroupName","wrapActions","newAction","getBoundSelectors","selectors","selectorGroupName","wrapSelectors","selector","selectorName","wrappedSelector","getStates","ori","creator","bindActionCreators","actionCreators","boundActionCreators","getMapStateToProps","getMapDispatchToProps","extras","pluginOptions","pluginLoadType","hasLoaded","calledSomething","afterLoad","wrapComponents","wrapperFn","namespaceObj","logErrors","_len3","_key3","SHOW_AUTH_POPUP","AUTHORIZE","LOGOUT","PRE_AUTHORIZE_OAUTH2","AUTHORIZE_OAUTH2","VALIDATE","CONFIGURE_AUTH","RESTORE_AUTHORIZATION","showDefinitions","authorize","authorizeWithPersistOption","authActions","persistAuthorizationIfNeeded","logout","logoutWithPersistOption","preAuthorizeImplicit","_ref3","errActions","isValid","swaggerUIRedirectOauth2","authId","authorizeOauth2WithPersistOption","authorizeOauth2","_ref4","authorizePassword","_ref5","passwordType","clientId","clientSecret","grant_type","scope","scopes","headers","setClientIdAndSecret","client_id","client_secret","Authorization","authorizeRequest","authorizeApplication","_ref6","authorizeAccessCodeWithFormParams","_ref7","redirectUrl","_ref8","codeVerifier","redirect_uri","code_verifier","authorizeAccessCodeWithBasicAuthentication","_ref9","_ref10","_ref11","parsedUrl","oas3Selectors","specSelectors","authSelectors","additionalQueryStringParams","finalServerUrl","serverEffectiveValue","selectedServer","parseUrl","fetchUrl","_headers","fetch","requestInterceptor","responseInterceptor","parseError","statusText","catch","errData","jsonResponse","error_description","jsonError","configureAuth","restoreAuthorization","_ref12","persistAuthorization","authorized","setItem","authPopup","securities","security","header","parsedAuth","NOT_FOUND","defaultEqualityCheck","defaultMemoize","equalityCheckOrOptions","providedOptions","equalityCheck","_providedOptions$equa","_providedOptions$maxS","resultEqualityCheck","createCacheKeyComparator","areArgumentsShallowlyEqual","createSingletonCache","put","getEntries","createLruCache","cacheIndex","matchingEntry","clearCache","createSelectorCreator","memoizeOptionsFromArgs","createSelector","_lastResult","_recomputations","directlyPassedOptions","memoizeOptions","resultFunc","_directlyPassedOption2","finalMemoizeOptions","getDependencies","dep","dependencyTypes","memoizedResultFunc","recomputationWrapper","dependenciesChecker","params","lastResult","recomputations","resetRecomputations","shownDefinitions","definitionsToAuthorize","definitions","securityDefinitions","getDefinitionsByNames","allowedScopes","definitionsForRequirements","allDefinitions","sec","securityScopes","definitionScopes","isAuthorized","execute","oriAction","operation","specSecurity","getItem","isApiKeyAuth","isInCookie","cookie","authorizedName","cookieName","LockAuthIcon","mapStateToProps","ownProps","getComponent","LockIcon","UnlockAuthIcon","UnlockIcon","initOAuth","preauthorizeApiKey","preauthorizeBasic","LockAuthOperationIcon","UnlockAuthOperationIcon","wrappedAuthorizeAction","wrappedLogoutAction","spec","specJson","definitionBase","isNothing","subject","repeat_1","cycle","isNegativeZero_1","isNegativeZero","NEGATIVE_INFINITY","common","sequence","formatError","exception","where","reason","column","snippet","YAMLException$1","getLine","lineStart","lineEnd","maxLineLength","maxHalfLength","makeSnippet","linesBefore","linesAfter","lineStarts","lineEnds","foundLineNo","lineNoLength","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","Type$1","represent","representName","multi","styleAliases","compileStyleAliases","currentType","newIndex","previousType","previousIndex","Schema$1","implicit","explicit","type$1","loadKind","compiledImplicit","compiledExplicit","compiledTypeMap","compileMap","scalar","collectType","failsafe","_null","resolveYamlNull","constructYamlNull","canonical","lowercase","uppercase","camelcase","resolveYamlBoolean","constructYamlBoolean","isOctCode","isDecCode","resolveYamlInteger","hasDigits","constructYamlInteger","sign","octal","decimal","hexadecimal","YAML_FLOAT_PATTERN","SCIENTIFIC_WITHOUT_DOT","resolveYamlFloat","constructYamlFloat","isFloat","representYamlFloat","core","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","timestamp","resolveYamlTimestamp","constructYamlTimestamp","year","day","hour","minute","fraction","delta","UTC","setTime","representYamlTimestamp","resolveYamlMerge","BASE64_MAP","resolveYamlBinary","bitlen","constructYamlBinary","tailbits","representYamlBinary","_hasOwnProperty$3","_toString$2","resolveYamlOmap","pairKey","pairHasKey","constructYamlOmap","_toString$1","resolveYamlPairs","constructYamlPairs","_hasOwnProperty$2","resolveYamlSet","constructYamlSet","_hasOwnProperty$1","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","simpleEscapeSequence","charFromCodepoint","simpleEscapeCheck","simpleEscapeMap","State$1","onWarning","legacy","implicitTypes","typeMap","lineIndent","firstTabInLine","documents","generateError","throwError","throwWarning","directiveHandlers","YAML","handleYamlDirective","major","minor","checkLineBreaks","handleTagDirective","handle","tagMap","captureSegment","checkJson","_position","_length","_character","mergeMappings","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startLineStart","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readBlockSequence","nodeIndent","_line","_tag","_anchor","detected","anchorMap","composeNode","readTagProperty","tagHandle","isVerbatim","isNamed","readAnchorProperty","parentIndent","nodeContext","allowToSeek","allowCompact","allowBlockStyles","allowBlockScalars","allowBlockCollections","typeIndex","typeQuantity","typeList","flowIndent","blockIndent","indentStatus","atNewLine","hasContent","readBlockMapping","following","_keyLine","_keyLineStart","_keyPos","atExplicitKey","readFlowCollection","_lineStart","_pos","terminator","isPair","isExplicitPair","isMapping","readNext","readBlockScalar","captureStart","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readSingleQuotedScalar","captureEnd","readDoubleQuotedScalar","hexLength","hexResult","readAlias","readPlainScalar","withinFlowCollection","hasPendingContent","_lineIndent","_kind","readDocument","directiveName","directiveArgs","documentStart","hasDirectives","loadDocuments","nullpos","loader","loadAll","loadAll$1","load$1","_toString","_hasOwnProperty","CHAR_BOM","CHAR_TAB","CHAR_LINE_FEED","CHAR_CARRIAGE_RETURN","CHAR_SPACE","CHAR_EXCLAMATION","CHAR_DOUBLE_QUOTE","CHAR_SHARP","CHAR_PERCENT","CHAR_AMPERSAND","CHAR_SINGLE_QUOTE","CHAR_ASTERISK","CHAR_COMMA","CHAR_MINUS","CHAR_COLON","CHAR_EQUALS","CHAR_GREATER_THAN","CHAR_QUESTION","CHAR_COMMERCIAL_AT","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","CHAR_GRAVE_ACCENT","CHAR_LEFT_CURLY_BRACKET","CHAR_VERTICAL_LINE","CHAR_RIGHT_CURLY_BRACKET","ESCAPE_SEQUENCES","DEPRECATED_BOOLEANS_SYNTAX","DEPRECATED_BASE60_SYNTAX","encodeHex","QUOTING_TYPE_SINGLE","QUOTING_TYPE_DOUBLE","State","noArrayIndent","skipInvalid","flowLevel","styleMap","compileStyleMap","sortKeys","lineWidth","noRefs","noCompatMode","condenseFlow","quotingType","forceQuotes","replacer","explicitTypes","duplicates","usedDuplicates","indentString","spaces","ind","generateNextLine","isWhitespace","isPrintable","isNsCharOrWhitespace","isPlainSafe","inblock","cIsNsCharOrWhitespace","cIsNsChar","codePointAt","needIndentIndicator","STYLE_PLAIN","STYLE_SINGLE","STYLE_LITERAL","STYLE_FOLDED","STYLE_DOUBLE","chooseScalarStyle","singleLineOnly","indentPerLevel","testAmbiguousType","prevChar","hasLineBreak","hasFoldableLine","shouldTrackWidth","previousLineBreak","plain","isPlainSafeFirst","isPlainSafeLast","writeScalar","iskey","dump","testAmbiguity","testImplicitResolving","blockHeader","dropEndingNewline","foldString","moreIndented","lineRe","nextLF","foldLine","prevMoreIndented","escapeString","escapeSeq","indentIndicator","breakRe","writeBlockSequence","writeNode","detectType","isblockseq","tagStr","duplicateIndex","duplicate","objectOrArray","writeBlockMapping","objectValue","explicitPair","pairBuffer","objectKeyList","writeFlowMapping","writeFlowSequence","getDuplicateReferences","duplicatesIndexes","inspectNode","dump_1","dump$1","renamed","Type","Schema","FAILSAFE_SCHEMA","JSON_SCHEMA","CORE_SCHEMA","DEFAULT_SCHEMA","YAMLException","float","null","safeLoad","safeLoadAll","safeDump","parseYamlConfig","UPDATE_CONFIGS","TOGGLE_CONFIGS","configName","configValue","toggle","downloadConfig","getConfigByUrl","specActions","status","updateLoadingStatus","updateUrl","oriVal","getLocalConfig","configsPlugin","setHash","SCROLL_TO","CLEAR_SCROLL_TO","getScrollParent","includeHidden","LAST_RESORT","excludeStaticParent","overflowRegex","parentElement","overflow","overflowY","overflowX","layout","scrollToElement","clearScrollTo","readyToScroll","isShownKey","scrollToKey","layoutSelectors","getScrollToKey","layoutActions","parseDeepLinkHash","rawHash","deepLinking","hashArray","isShownKeyFromUrlHashArray","tagId","maybeOperationId","tagIsShownKey","show","urlHashArray","operationId","urlHashArrayFromIsShownKey","tokenArray","shown","assetName","Ori","OperationWrapper","onLoad","OperationTagWrapper","OperationTag","seekStr","makeNewMessage","jsSpec","errorTransformers","NotOfType","ParameterOneOf","transformErrors","inputs","transformedErrors","transformer","DEFAULT_ERROR_STRUCTURE","allErrors","lastError","newErrors","errValue","filterValue","taggedOps","phrase","tagObj","opsFilter","ArrowUp","xmlns","viewBox","focusable","ArrowDown","Arrow","Close","Copy","fillRule","Lock","Unlock","IconsPlugin","ArrowUpIcon","ArrowDownIcon","ArrowIcon","CloseIcon","CopyIcon","UPDATE_LAYOUT","UPDATE_FILTER","UPDATE_MODE","SHOW","updateLayout","updateFilter","changeMode","isShown","thingToShow","currentFilter","def","whatMode","showSummary","taggedOperations","oriSelector","maxDisplayedTags","levels","getLevel","logLevel","logLevelInt","info","engaged","updateSpec","updateJsonSpec","onComplete","extractKey","escapeShell","escapeCMD","escapePowershell","curlify","request","newLine","isMultipartFormDataRequest","curlified","addWords","addWordsWithoutLeadingSpace","addNewLine","addIndent","extractedKey","reqBody","getStringBodyOfMap","curlifyToJoin","requestSnippetGenerator_curl_powershell","requestSnippetGenerator_curl_bash","requestSnippetGenerator_curl_cmd","getGenerators","languageKeys","generators","getSnippetGenerators","genFn","getGenFn","getActiveLanguage","getDefaultExpanded","_arrayLikeToArray","arr2","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","minLen","_nonIterableSpread","classNameCombinations","createStyleObject","elementStyle","stylesheet","getClassNameCombinations","powerSetPermutations","styleObject","createClassNameString","_ref$style","useInlineStyles","TagName","childrenCreator","createChildren","childrenCount","allStylesheetSelectors","startingClassName","astGenerator","newLineRegex","AllLineNumbers","codeString","codeStyle","_ref2$containerStyle","containerStyle","paddingRight","_ref2$numberStyle","numberStyle","startingLineNumber","getAllLineNumbers","lines","getInlineLineNumber","lineNumber","inlineLineNumberStyle","assembleLineNumberStyles","lineNumberStyle","largestLineNumber","defaultLineNumberStyle","minWidth","textAlign","customLineNumberStyle","createLineElement","showInlineLineNumbers","_ref3$lineProps","lineProps","_ref3$className","showLineNumbers","wrapLongLines","flattenCodeTree","tree","newTree","processLines","codeTree","wrapLines","lastLineBreakIndex","createLine","createWrappedLine","createUnwrappedLine","_loop","newLines","getNewLines","splitValue","stringChild","lastLineInPreviousSpan","newElem","_line2","_line3","defaultRenderer","rows","isHighlightJs","SyntaxHighlighter","defaultAstGenerator","_ref7$style","_ref7$customStyle","customStyle","_ref7$codeTagProps","codeTagProps","_ref7$useInlineStyles","_ref7$showLineNumbers","_ref7$showInlineLineN","_ref7$startingLineNum","lineNumberContainerStyle","_ref7$lineNumberStyle","_ref7$wrapLongLines","_ref7$lineProps","renderer","_ref7$PreTag","PreTag","_ref7$CodeTag","CodeTag","_ref7$code","allLineNumbers","defaultPreStyle","backgroundColor","generatorClassName","preProps","defaultCodeValue","getCodeTree","hasLanguage","checkForListedLanguage","styles","agate","arta","monokai","nord","obsidian","idea","availableStyles","getStyle","cursor","paddingBottom","paddingTop","border","borderRadius","boxShadow","borderBottom","activeStyle","marginTop","marginRight","marginLeft","requestSnippetsSelectors","canSyntaxHighlight","rootRef","activeLanguage","setActiveLanguage","isExpanded","setIsExpanded","handlePreventYScrollingBeyondElement","snippetGenerators","activeGenerator","handleSetIsExpanded","handleGetBtnStyle","contentHeight","offsetHeight","visibleHeight","SnippetComponent","readOnly","justifyContent","alignItems","marginBottom","background","paddingLeft","handleGenChange","RequestSnippets","requestSnippets","shallowArrayEquals","foundKey","OriginalCache","primitives","generateStringFromRegex","string_email","string_date-time","string_date","string_uuid","string_hostname","string_ipv4","string_ipv6","number_float","sanitizeRef","objectContracts","arrayContracts","numberContracts","stringContracts","liftSampleHelper","oldSchema","setIfNotDefinedInTarget","includeReadOnly","writeOnly","includeWriteOnly","sampleFromSchemaGeneric","exampleOverride","respectXML","usePlainValue","example","hasOneOf","hasAnyOf","anyOf","schemaToAdd","additionalProperties","schemaHasAny","enum","handleMinMaxItems","sampleArray","addPropertyToResult","propertyAddedCounter","hasExceededMaxProperties","maxProperties","canAddProperty","isOptionalProperty","requiredPropertiesToAdd","addedCount","overrideE","enumAttrVal","attrExample","attrDefault","discriminator","$$ref","itemSchema","itemSamples","additionalProp","additionalProp1","additionalProps","additionalPropSample","toGenerateCount","minProperties","exclusiveMinimum","exclusiveMaximum","inferSchema","createXMLExample","XML","sampleFromSchema","memoizedCreateXMLExample","memoizeN","memoizedSampleFromSchema","shouldStringifyTypesConfig","when","shouldStringifyTypes","defaultStringifyTypes","contentType","resType","typesToStringify","nextConfig","jsonExample","getJsonSampleSchema","yamlString","getXmlSampleSchema","getYamlSampleSchema","makeGetJsonSampleSchema","makeGetYamlSampleSchema","makeGetXmlSampleSchema","getSampleSchema","makeGetSampleSchema","jsonSchema5","OPERATION_METHODS","specStr","specSource","specJS","specResolved","specResolvedSubtree","mergerFn","oldVal","newVal","specJsonWithResolvedSubtrees","returnSelfOrNewMap","externalDocs","semver","validOperationMethods","operations","pathName","consumes","produces","findDefinition","resolvedRes","unresolvedRes","basePath","schemes","operationsWithRootInherited","ops","op","tags","tagDetails","operationsWithTags","taggedMap","ar","tagA","tagB","sortFn","responses","requests","mutatedRequests","responseFor","requestFor","mutatedRequestFor","allowTryItOutFor","parameterWithMetaByIdentity","pathMethod","opParams","metaParams","currentParam","inNameKeyedMeta","hashKeyedMeta","parameterInclusionSettingFor","paramKey","parameterWithMeta","operationWithMeta","mergedParams","getParameter","inType","hasHost","parameterValues","isXml","parametersIncludeIn","parameters","inValue","parametersIncludeType","typeValue","contentTypeValues","producesValue","currentProducesFor","requestContentType","responseContentType","currentProducesValue","firstProducesArrayItem","producesOptionsFor","operationProduces","pathItemProduces","globalProduces","consumesOptionsFor","operationConsumes","pathItemConsumes","globalConsumes","operationScheme","matchResult","canExecuteScheme","validationErrors","validateBeforeExecute","getOAS3RequiredRequestBodyContentType","requiredObj","requestBody","isMediaTypeSchemaPropertiesEqual","currentMediaType","targetMediaType","requestBodyContent","currentMediaTypeSchemaProperties","targetMediaTypeSchemaProperties","UPDATE_SPEC","UPDATE_URL","UPDATE_JSON","UPDATE_PARAM","UPDATE_EMPTY_PARAM_INCLUSION","VALIDATE_PARAMS","SET_RESPONSE","SET_REQUEST","SET_MUTATED_REQUEST","LOG_REQUEST","CLEAR_RESPONSE","CLEAR_REQUEST","CLEAR_VALIDATE_PARAMS","UPDATE_OPERATION_META_VALUE","UPDATE_RESOLVED","UPDATE_RESOLVED_SUBTREE","SET_SCHEME","cleanSpec","updateResolved","parseToJson","hasWarnedAboutResolveSpecDeprecation","resolveSpec","AST","modelPropertyMacro","parameterMacro","getLineNumberForPath","baseDoc","baseURI","preparedErrors","fullPath","requestBatch","debResolveSubtrees","systemPartitionedBatches","async","systemRequestBatch","resolveSubtree","errSelectors","batchResult","resultMap","specWithCurrentSubtrees","oidcScheme","openIdConnectUrl","openIdConnectData","assocPath","ImmutableMap","updateResolvedSubtree","requestResolvedSubtree","batchedPath","batchedSystem","changeParam","changeParamByIdentity","invalidateResolvedSubtreeCache","validateParams","updateEmptyParamInclusion","includeEmptyValue","clearValidateParams","changeConsumesValue","changeProducesValue","setResponse","setRequest","setMutatedRequest","logRequest","executeRequest","paramValue","contextUrl","opId","server","namespaceVariables","serverVariables","globalVariables","requestBodyValue","requestBodyInclusionSetting","parsedRequest","buildRequest","mutatedRequest","parsedMutatedRequest","clearResponse","clearRequest","setScheme","valueKey","paramMeta","isEmptyValueIncluded","paramRequired","paramDetails","validateParam","statusCode","newState","operationPath","metaPath","pathItems","$ref","SpecPlugin","__extends","extendStatics","__","_objectKeys","keys_1","_deepClone","escapePathComponent","unescapePathComponent","hasUndefined","i_1","objKeysLength","patchErrorMessageFormatter","messageParts","PatchError","_newTarget","JsonPatchError","deepClone","objOps","newDocument","move","getValueByPointer","originalValue","applyOperation","valueToCopy","_areEquals","_get","arrOps","pointer","getOriginalDestination","validateOperation","mutateDocument","banPrototypeModifications","existingPathFragment","validateFunction","applyPatch","patch","length_1","applyReducer","operationResult","pathLen","existingPathLen","externalValidator","arrA","arrB","beforeDict","Mirror","observers","ObserverInfo","unobserve","observe","mirror","getMirror","observerInfo","getObserverFromMirror","dirtyCheck","generate","fastCheck","patches","removeObserverFromMirror","invertible","_generate","newKeys","oldKeys","deleted","tree1","tree2","normalizeJSONPath","getInByJsonPath","currentValue","allowMetaPatches","isAdditiveMutation","parentPathMatch","fullyNormalizeArray","cleanArray","isPromise","forEachNew","mutations","forEachNewPatch","forEachNewPrimitive","forEachPrimitive","isJsonPatch","isContextPatch","isPatch","isMutation","isGenerator","mutation","newResults","arrayResults","moreResults","jsonPath","_isPlaceholder","_curry1","f1","_curry2","f2","_curry3","f3","_isInteger","_isString","nth","pathsArray","pathAr","pathSatisfies","pred","propPath","_cloneRegExp","sticky","unicode","dotAll","_arrayFromIterator","_includesWith","_has","_objectIs","_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","nIdx","ks","checkArgsLength","_uniqContentEquals","aIterator","bIterator","stackA","stackB","_equals","aItem","typeA","_functionName","keysA","extendedStackA","extendedStackB","_includes","_indexOf","inf","functor","_quote","pad","_toISOString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","_complement","_arrayReduce","_isArray","_dispatchable","methodNames","transducerCreator","_isTransformer","transducer","_isObject","XFilter","_xfBase","_xfilter","filterable","_filter","recur","mapPairs","repr","_isRegExp","_arity","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","_pipe","symIterator","_createReduce","methodReduce","iterableReduce","_reduce","_xArrayReduce","thisObj","_xIterableReduce","_xMethodReduce","XWrap","_xwrap","_checkForMethod","methodname","toIndex","defaultTo","propOr","_curryN","combined","argsIdx","combinedIdx","hasPlaceholder","curryN","_isFunction","invoker","dropLastWhile","XDropLastWhile","retained","retain","_xdropLastWhile","chars","_iterableReduce","_methodReduce","XMap","_xmap","ap","applyF","applyX","_concat","set1","set2","len1","liftN","lifted","lift","always","safeMax","maxByValue","maxByType","stringA","maxByStringValue","pluck","anyPass","preds","identical","unaryIdentical","whenTrueFn","checkValue","valueName","replaceAll","replaceValue","checkArguments","checkSearchValue","replaceAllPonyfill","replaceAllInvoker","isWindows","getProtocol","isFileSystemPath","isHttpUrl","toFileSystemPath","urlDecodePatterns","keepFileProtocol","isWindowsPredicate","isFileUrl","getHash","hashIndex","stripHash","hashStrippedUri","resolvedUrl","urlEncodePatterns","fromFileSystemPath","unsanitize","Headers","Request","ACCEPT_HEADER_VALUE_FOR_DOCUMENTS","DEFAULT_BASE_URL","DEFAULT_OPENAPI_3_SERVER","freelyNamedKeyParents","nonFreelyNamedKeyGrandparents","freelyNamedPaths","freelyNamedAncestors","isFreelyNamed","parentPath","parentKey","grandparentKey","parentStr","absolutifyPointer","baseUrl","urlPart","fragmentPart","safeBaseUrl","safeUrlPart","newRefUrlPart","absoluteBaseUrl","rawRefUrlPart","ABSOLUTE_URL_REGEXP","JSONRefError","extra","oriError","originalError","docCache","specmapRefs","skipResolutionTestFns","specmap","specmapInstance","getInstance","shouldSkipResolution","getContext","splitString","refPath","promOrVal","absoluteify","wrapError","pointerAlreadyInPath","parentPointer","arrayToJsonPointer","escapeJsonPointerToken","fullyQualifiedPointer","safeParentPointer","rootDoc","contextTree","pointerIsAParent","currPath","hasIndirectCycle","useCircularStructures","absolutifiedRef","jsonPointerToArray","extractFromDoc","__value","patchValueAlreadyInPath","ancestors","pointToAncestor","getDoc","fetchJSON","docPath","Accept","loadSpec","extract","unescapeJsonPointerToken","_doc","URLSearchParams","pointerBoundaryChar","lastParentChar","alreadyAddError","originalDefinitionObj","allOf","toMerge","absoluteRefPatches","generateAbsoluteRefPatches","getBaseUrlForNodePath","targetKeys","nodePath","absolutifiedRefValue","opPath","ContextTree","createNode","getParent","branch","protoValue","ensureExists","SpecMap","getPluginName","pluginName","getPatchesOfType","debugLevel","pluginHistory","promisedPatches","showDebug","allPatches","pluginProp","libMethods","_getContext","hasRun","_hasRun","wrappedPlugins","wrapPlugin","updatePatches","verbose","pathDiscriminator","ctx","createKeyBasedPlugin","pluginObj","isSubPath","tested","generator","refCache","parentIndex","indexOfFirstProperties","isRootProperties","traversed","updatedPath","objRef","isWithinPathDiscriminator","nextPlugin","getMutationsForPlugin","nextPromisedPatch","race","getPluginHistory","getPluginRunCount","getPluginHistoryTip","getPluginMutationIndex","mutationIndex","updatePluginHistory","promisedPatchThen","setContext","updateMutations","removePromisedPatch","promisedPatch","getMutations","getCurrentMutations","getCurrentPlugin","tip","currentPlugin","getLib","nextPromise","pluginCount","promises","executePlugin","lastMutationIndex","yieldedPatches","v2OperationIdCompatibilityMode","idFromPathMethod","parsedSpec","$$normalized","pathParameters","oid","opList","__originalOperationId","inheritsList","toBeInherit","inheritName","opParam","makeFetchJSON","credentials","withCredentials","isRfc3986Reserved","isRrc3986Unreserved","encodeDisallowedCharacters","TextEncoder","encodedByte","stylize","encodeArray","explode","valueEncoder","encodeObject","valueKeys","encodePrimitive","serializeRes","mergeInQueryOrForm","headerName","userFetch","resError","responseError","shouldDownloadAsText","oriRes","serializeHeaders","useText","parseBody","serializeHeaderValue","isFile","navigatorObj","product","isArrayOfFile","STYLE_SEPARATORS","spaceDelimited","pipeDelimited","SEPARATORS","csv","ssv","tsv","FileWithData","formatKeyValue","skipEncoding","collectionFormat","allowEmptyValue","serializationOption","encodeFn","encodedKey","formatKeyValueBySerializationOption","allowReserved","encodedJson","encodedData","encodeKeyFn","encodeFormOrQuery","encodedQuery","parameterName","hasFile","formdata","reqForm","formData","oriSearch","newStr","oriQuery","finalStr","strs","joinSearch","_globalThis$document","retrievalURL","resolveGenericStrategy","skipNormalization","retrievalURI","httpClient","doResolve","_spec","plugs","mapSpec","genericStrategy","normalized","isOpenAPI30","openapi","isOpenAPI31","isOpenAPI3","openApi2Strategy","swagger","isOpenAPI2","resolveOpenAPI2Strategy","openApi30Strategy","resolveOpenAPI30Strategy","Annotation","Comment","ParseResult","api","annotations","warnings","replaceResult","searchIndex","SourceMap","positionStart","positionEnd","row","and","both","_both","_isTypedArray","invokeArgs","mpath","boundMethod","_reduced","XAll","_xall","hasMethod","hasBasicElementProps","primitiveEq","hasClass","cls","isElementType","predicateCreator","isStringElement","isNumberElement","isNullElement","isBooleanElement","isObjectElement","isArrayElement","isMemberElement","isLinkElement","isRefElement","isAnnotationElement","isCommentElement","isParseResultElement","isSourceMapElement","isPrimitiveElement","hasElementSourceMap","includesSymbols","elementSymbols","includesClasses","isOfTypeObject","isObjectConstructor","hasObjectConstructor","createNamespace","namespacePlugin","namespaceInstance","predicates","ApiDOMAggregateError","ApiDOMError","ApiDOMStructuredError","structuredOptions","causelessOptions","getVisitFn","visitor","isLeaving","typeVisitor","typeSpecificVisitor","leave","enter","specificVisitor","specificTypeVisitor","BREAK","getNodeType","isNode","mergeAll","visitors","visitFnGetter","nodeTypeGetter","visit","keyMap","breakSymbol","deleteNodeSymbol","skipVisitingNodeSymbol","nodePredicate","nodeCloneFn","detectCycles","visitorKeys","inArray","edits","isEdited","editOffset","editKey","editValue","arrayKey","visitFn","stateKey","_visitorKeys$nodeType","_visitorKeys$nodeType2","CloneError","DeepCloneError","ShallowCloneError","cloneDeep","visited","passThroughOptions","keyCopy","valueCopy","cloneShallow","safe","cloneShallowKeyValuePair","keyValuePair","cloneShallowElement","objectSlice","cloneShallowObjectSlice","cloneShallowArraySlice","keyMapDefault","ParseResultElement","PredicateVisitor","returnOnTrue","returnOnFalse","dispatchPlugins","toolboxCreator","visitorOptions","pluginsSpecs","pluginsVisitor","newElement","createRefractor","computeEdges","edges","childElement","TranscluderConstructor","transclude","_edges","objectElement","transcludeChildOfObjectElement","arrayElement","transcludeChildOfArrayElement","memberElement","transcludeChildOfMemberElement","EphemeralObject","EphemeralArray","toReference","fromEntries","Visitor","_Visitor","references","_BooleanElement","_NumberElement","_StringElement","_NullElement","ephemeral","JsonPointerError","CompilationJsonPointerError","converge","fns","_identity","isFinitePonyfill","isIntegerPonyfill","XTake","_xtake","XDropWhile","_xdropWhile","dropWhile","encodedURIComponent","InvalidJsonPointerError","uriToPointer","EvaluationJsonPointerError","failedToken","failedTokenPosition","tokenPosition","Callback","Components","schemas","examples","requestBodies","securitySchemes","callbacks","Contact","Discriminator","Encoding","allowedReserved","Example","summary","externalValue","ExternalDocumentation","Header","contentProp","Info","termsOfService","tos","contact","contactElement","licenseElement","License","Link","operationRef","_this$operationRef","_this$operationId","MediaType","OAuthFlow","authorizationUrl","tokenUrl","refreshUrl","OAuthFlows","clientCredentials","authorizationCode","Openapi","OpenApi3_0","servers","Operation","Parameter","PathItem","GET","PUT","POST","OPTIONS","HEAD","PATCH","TRACE","Paths","Reference","RequestBody","Responses","UnsupportedOperationError","JSONSchema","idProp","$schema","multipleOf","additionalItems","patternProperties","enumValue","media","JSONReference","Media","binaryEncoding","LinkDescription","rel","targetSchema","mediaType","encType","mapObjIndexed","isNil","_path","propSatisfies","dereference","rootObject","copyMetaAndAttributes","pick","JSONSchemaDraft4Element","JSONReferenceElement","MediaElement","LinkDescriptionElement","specObj","passingOptionsNames","retrievePassingOptions","retrieveFixedFields","specPath","fixedFields","retrieveVisitor","retrieveVisitorInstance","passingOpts","toRefractedElement","visitorPrototype","fallbackVisitorPrototype","ignoredFields","fields","fixedFieldElement","newMemberElement","isJSONReferenceLikeElement","allPass","or","_either","PatternedFieldsJsonObjectVisitor","fieldPatternPredicate","patternedFieldElement","stringElement","linkDescriptionElement","ifElse","onTrue","onFalse","_ifElse","getMaxArity","dispatchImpl","functions","AlternatingVisitor","alternator","JSONSchemaOrJSONReferenceVisitor","$visitor","isJSONSchemaElement","isJSONReferenceElement","isMediaElement","isLinkDescriptionElement","jsonSchemaDraft4","specificationObj","resolvedSpec","rootVisitor","idProps","SecurityRequirement","SecurityScheme","inVal","bearerFormat","flows","Server","variables","ServerVariable","Tag","Xml","CallbackElement","ComponentsElement","ContactElement","DiscriminatorElement","ExternalDocumentationElement","HeaderElement","InfoElement","LicenseElement","MediaTypeElement","OAuthFlowElement","OAuthFlowsElement","OpenApi3_0Element","OperationElement","ParameterElement","PathItemElement","PathsElement","ReferenceElement","RequestBodyElement","ResponseElement","ResponsesElement","SchemaElement","SecurityRequirementElement","SecuritySchemeElement","ServerElement","ServerVariableElement","TagElement","openApiGenericElement","openApiSemanticElement","isOpenApi3_0LikeElement","isParameterLikeElement","isReferenceLikeElement","isRequestBodyLikeElement","isResponseLikeElement","isServerLikeElement","isTagLikeElement","isOpenApiExtension","canSupportSpecificationExtensions","specificationExtensionPredicate","extensionElement","unrefractedElement","openapiElement","LinkParameters","static","primaryClass","Servers","ServerVariables","isCallbackElement","isComponentsElement","isContactElement","isExampleElement","isExternalDocumentationElement","isHeaderElement","isInfoElement","isLicenseElement","isLinkElementExternal","isOpenapiElement","isOpenApi3_0Element","isOperationElement","isParameterElement","isPathItemElement","isPathItemElementExternal","isPathsElement","isReferenceElement","isReferenceElementExternal","isRequestBodyElement","isResponseElement","isResponsesElement","isSchemaElement","isBooleanJsonSchemaElement","isSecurityRequirementElement","isServerElement","isServerVariableElement","isMediaTypeElement","isServersElement","referenceElement","MediaTypeExamples","MediaTypeEncoding","Security","mediaTypeElement","HeaderExamples","HeaderContent","JSONSchemaAllOfVisitor","JSONSchemaAnyOfVisitor","JSONSchemaOneOfVisitor","JSONSchemaItemsVisitor","JSONSchemaPropertiesVisitor","JSONSchemaTypeVisitor","DiscriminatorMapping","ParameterExamples","ParameterContent","ComponentsSchemas","ComponentsResponses","ComponentsParameters","ComponentsExamples","ComponentsRequestBodies","ComponentsHeaders","ComponentsSecuritySchemes","ComponentsLinks","ComponentsCallbacks","headerElement","EncodingHeaders","pathItemElement","RequestBodyContent","ResponseHeaders","ResponseContent","ResponseLinks","_isNumber","hasOrAdd","shouldAdd","prevSize","_items","_nativeSet","bIdx","_Set","difference","firstLen","secondLen","toFilterOut","specPathFixedFields","specPathPatternedFields","httpStatusCode","OperationTags","OperationParameters","OperationCallbacks","OperationSecurity","OperationServers","operationElement","httpMethodElementCI","httpMethodElementCS","PathItemServers","PathItemParameters","OAuthFlowScopes","Tags","jsonSchemaFixedFields","OpenApi","in","extension","openApi3_0","JsonSchemaDialect","identifier","OpenApi3_1","jsonSchemaDialect","webhooks","$vocabulary","$id","$anchor","$dynamicAnchor","$dynamicRef","$defs","$comment","ifSchema","thenSchema","elseSchema","dependentSchemas","prefixItems","containsProp","propertyNames","unevaluatedItems","unevaluatedProperties","enumVal","constVal","maxContains","minContains","dependentRequired","contentEncoding","contentMediaType","contentSchema","BaseInfoVisitor","BaseContactVisitor","BaseLicenseVisitor","BaseLinkVisitor","jsonSchemaDialectElement","BaseServerVisitor","BaseServerVariableVisitor","BaseMediaTypeVisitor","BaseSecurityRequirementVisitor","BaseComponentsVisitor","BaseTagVisitor","BaseReferenceVisitor","BaseParameterVisitor","BaseHeaderVisitor","isJsonSchemaDialectElement","isOpenApi3_1Element","getJsonSchemaDialect","handle$schema","inherited$schema","handle$id","inherited$id","_ObjectElement","booleanElement","schemaElement","BaseDiscriminatorVisitor","BaseXMLVisitor","ComponentsPathItems","BaseExampleVisitor","BaseExternalDocumentationVisitor","BaseEncodingVisitor","BasePathsVisitor","BaseRequestBodyVisitor","BaseCallbackVisitor","BaseResponseVisitor","BaseResponsesVisitor","BaseOperationVisitor","BasePathItemVisitor","BaseSecuritySchemeVisitor","BaseOAuthFlowsVisitor","BaseOAuthFlowVisitor","Webhooks","if","else","const","OpenApi3_1Element","openApi3_1","NotImplementedError","MediaTypes","unknownMediaType","filterByFormat","findBy","latest","OpenAPIMediaTypes","effectiveFormat","refSet","propEq","ReferenceSet","anotherRefSet","clean","parsers","parserOpts","resolvers","resolverOpts","strategies","external","toFunctorFn","nextObj","_assoc","mergeWithKey","mergeDeepWithKey","lObj","rObj","lVal","rVal","mergeDeepRight","Identity","over","baseURILens","baseURIDefault","parseResult","lastDotPosition","TextDecoder","PluginError","file","pluginResults","ParserError","UnmatchedDereferenceStrategyError","DereferenceError","dereferenceApiDOM","surrogateWrapping","elementClone","dereferenceStrategies","mergedOptions","withoutDefaults","Parser","allowEmpty","sourceMap","fileExtensions","mediaTypes","canParse","binaryString","base64String","parseResultElement","base64StringElement","canResolve","none","vals","MaximumDereferenceDepthError","ResolverError","MaximumResolverDepthError","JsonSchemaUriError","EvaluationJsonSchemaUriError","UnmatchedResolverError","optsBoundResolvers","clonedResolver","optsBoundParsers","clonedParser","parseFile","pathOr","JsonSchema$anchorError","EvaluationJsonSchema$anchorError","InvalidJsonSchema$anchorError","isAnchor","uriToAnchor","resolveSchema$refField","$refBaseURI","refractToSchemaElement","refracted","maybeRefractToSchemaElement","uriStrippedHash","isSchemaElementWith$id","schemaObjectElements","$idBaseURI","resolveSchema$idField","fragmentEvaluate","visitAsync","OpenApi3_1ResolveVisitor","indirections","crawledElements","crawlingMap","toBaseURI","linkElement","ExampleElement","exampleElement","$refBaseURIStrippedHash","isUnknownURI","canRead","isURL","isExternal","crawlReferenceElement","jsonPointer","referencedElementType","crawl","crawlPathItemElement","referencedElement","crawlSchemaElement","referencingElement","OpenApi3_1ResolveStrategy","_file$parseResult","_clone","deep","_ObjectMap","_isPrimitive","copiedValue","cachedCopy","hashedKey","bucket","XReduceBy","valueFn","valueAcc","keyFn","_xreduceBy","reduceBy","elt","removeSpaces","normalizeOperationId","withoutSpaces","createNormalizedOperationId","operationIdNormalizer","normalizedOperations","normalizedOperationGroups","normalizedOperationId","operationElements","indexedNormalizedOperationId","linkOperationId","normalizedOperationElement","originalOperationId","XUniqWith","_xuniqWith","uniqWith","parameterEquals","parameter1","parameter2","pathItemParameters","parentPathItemParameters","operationParameters","mergedParameters","topLevelSecurity","_topLevelSecurity","isServersUndefined","isServersArrayElement","isServersEmpty","defaultServer","parentOpenapiElement","_parentOpenapiElement","openapiServersContent","openapiServers","parentPathItemElement","_parentPathItemElemen","pathItemServersContent","pathItemServers","parameterElement","_parameterElement$sch","_parameterElement$sch2","_headerElement$schema","_headerElement$schema2","pojoAdapter","normalizeFn","openApiElement","Resolver","redirects","getHttpClient","AbortController","AbortSignal","swaggerHTTPClient","swaggerHTTPClientConfig","client","controller","signal","timeoutID","redirect","follow","resource","hasSupportedFileExtension","hasSupportedMediaType","pojo","detectionRegExp","refractorOpts","canDereference","ElementIdentityError","IdentityManager","uuid","identityMap","identify","generateId","forget","AncestorLineage","includesCycle","searchElement","findItem","identityManager","wasReferencedBy","OpenApi3_1DereferenceVisitor","toAncestorLineage","directAncestors","ancestorsLineage","mergeAndAnnotateReferencedElement","refedElement","_ancestorsLineage$fin","replaceWith","mergedElement","keyElement","_ancestorsLineage$fin2","_linkElementCopy$oper","linkElementCopy","_linkElementCopy$oper2","valueElement","exampleElementCopy","booleanJsonSchemaElement","_ancestorsLineage$fin3","OpenApi3_1DereferenceStrategy","dereferencedElement","elementPath","elementPathSanitized","trimParseResult","SchemaRefError","OpenApi3_1SwaggerClientDereferenceVisitor","_this$basePath","cycledReferenceElement","_this$basePath2","_this$options$derefer","_this$options$derefer2","rootCause","wrappedError","dereferenceOpts","_this$basePath3","cycledPathItemElement","_this$basePath4","_this$options$derefer3","_this$options$derefer4","_this$basePath5","cycledSchemaElement","mergeVisitor","_this$basePath6","_this$options$derefer5","_this$options$derefer6","_this$basePath7","_this$options$derefer7","_this$options$derefer8","macroOperation","pojoOperation","pojoParameter","macroValue","macroError","ModelPropertyMacroVisitor","emptyElement","isMergeableElement","mergeArrayElement","targetElement","sourceElement","mergeObjectElement","clonedMember","targetValue","_mergedOptions$isMerg","_mergedOptions$arrayE","_mergedOptions$object","defaultOptions","arrayElementMerge","objectElementMerge","sourceIsArrayElement","mergedSchemaElement","OpenApi3_1SwaggerClientDereferenceStrategy","_options$dereference$","dereferenceVisitor","parameterMacroVisitor","modelPropertyMacroVisitor","allOfVisitor","resolveOpenAPI31Strategy","openApiParseResultElement","jsonPointerURI","fragmentElement","openApiElementReference","transcluded","openApi31ApiDOMStrategy","makeResolve","retrievedSpec","strategyOptions","strg","generic","prot","bodyBuilder","headerBuilder","queryBuilder","pathBuilder","formDataBuilder","effectiveMediaType","styledValue","serializedValue","PARAMETER_HEADER_BLACKLIST","Cookie","globalObject","attachContentTypeForEmptyPayload","applySecurities","_spec$components","securityDef","securityObj","cookies","encoded","tokenValue","tokenType","token_type","requestBodyDef","requestBodyMediaTypes","isExplicitContentTypeValid","firstMediaType","accept","_requestBodyDef$conte","_requestBodyDef$conte2","tokenName","oauthToken","authorization","isBodyParamPresent","isFormDataParamPresent","idFromPathMethodLegacy","arrayOrEmpty","parseURIReference","uriReference","parsedURL","searchParams","OperationNotFoundError","findParametersWithName","deduplicateParameters","paramsMap","dedupedParameters","userHttp","parameterBuilders","specIsOAS3","operationRaw","getOperationRaw","findOperation","eachOperation","operationObj","cbValue","rawOperationId","oas3BaseUrl","_spec$paths","_spec$paths2","selectedServerObj","selectedServerUrl","operationLevelServers","pathItemLevelServers","rootLevelServers","isNonEmptyServerList","srv","varNames","getVariableTemplateNames","variableDefinition","variableValue","buildOas3UrlWithContext","ourUrl","parsedContextUrl","computedScheme","stripNonAlpha","computedHost","computedPath","swagger2BaseUrl","firstSchemeInSpec","combinedParameters","versionSpecificOptions","cookieString","cookieValue","makeResolveSubtree","returnEntireTree","resolveOptions","pathSegment","httpFn","Http","preFetch","postFetch","openApi31ApiDOMResolveStrategy","openApi30ResolveStrategy","openApi2ResolveStrategy","genericResolveStrategy","freshConfigs","batch","defaultNoopBatch","getBatch","ContextKey","gT","_gT$ContextKey","contextMap","realContext","pureFinalPropsSelectorFactory","mapDispatchToProps","mergeProps","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","stateProps","dispatchProps","mergedProps","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","handleNewPropsAndNewState","dependsOnOwnProps","handleNewProps","handleNewState","nextStateProps","statePropsChanged","pureFinalPropsSelector","handleFirstCall","firstState","firstOwnProps","wrapMapToPropsConstant","getConstant","initConstantSelector","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","initProxySelector","proxy","mapToPropsProxy","stateOrDispatch","detectFactoryAndVerify","createInvalidArgFactory","wrappedComponentName","defaultMergeProps","nullListeners","createSubscription","parentSub","subscriptionsAmount","selfSubscribed","handleChangeWrapper","subscription","onStateChange","trySubscribe","addNestedSub","createListenerCollection","tryUnsubscribe","cleanupListener","notifyNestedSubs","trySubscribeSelf","tryUnsubscribeSelf","getListeners","useIsomorphicLayoutEffect","shallowEqual","objA","objB","keysB","NO_SUBSCRIPTION_ARRAY","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","strictEqual","connect","pure","areMergedPropsEqual","Context","initMapStateToProps","mapStateToPropsFactory","initMapDispatchToProps","mapDispatchToPropsFactory","initMergeProps","mergePropsFactory","wrapMergePropsFunc","initMergePropsProxy","hasRunOnce","mergePropsProxy","nextMergedProps","shouldHandleStateChanges","WrappedComponent","selectorFactoryOptions","ConnectFunction","propsContext","reactReduxForwardedRef","ContextToUse","contextValue","didStoreComeFromProps","didStoreComeFromContext","getServerState","childPropsSelector","finalPropsSelectorFactory","overriddenContextValue","latestSubscriptionCallbackError","actualChildPropsSelector","subscribeForReact","reactListener","subscribeUpdates","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","actualChildProps","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","renderedWrappedComponent","Connect","forwarded","forwardConnectRef","serverState","stabilityCheck","noopCheck","previousState","newBatch","initializeConnect","withSystem","WithSystem","getDisplayName","withRoot","reduxStore","WithRoot","withConnect","customMapStateToProps","handleProps","oldProps","withMappedContainer","memGetComponent","WithMappedContainer","nextProps","cleanProps","domNode","App","ReactDOM","failSilently","memoizeForGetComponent","memMakeMappedContainer","memoizeForWithMappedContainer","makeMappedContainer","downloadUrlPlugin","checkPossibleFailReasons","specUrl","enums","loadingStatus","spec_update_loading_status","withErrorBoundary","ErrorBoundary","targetName","WithErrorBoundary","isClassComponent","hasError","errorInfo","FallbackComponent","Fallback","componentList","fullOverride","mergedComponentList","wrapFactory","Original","getLayout","layoutName","Layout","AuthorizationPopup","Auths","AuthorizeBtn","showPopup","AuthorizeBtnContainer","authorizableDefinitions","AuthorizeOperationBtn","onAuthChange","submitAuth","logoutClick","auths","AuthItem","Oauth2","Button","authorizedAuth","nonOauthDefinitions","oauthDefinitions","onSubmit","ApiKeyAuth","BasicAuth","authEl","AuthError","Input","Row","Col","Markdown","JumpToPath","autoComplete","showValue","HighlightCode","ExamplesSelect","onSelect","currentExampleKey","showLabels","_onSelect","isSyntheticChange","_onDomSelect","selectedOptions","getCurrentExample","currentExamplePerProps","firstExamplesKey","firstExample","firstExampleKey","isValueModified","isModifiedValueAvailable","exampleName","stringifyUnlessList","ExamplesSelectValueRetainer","userHasEditedBody","currentNamespace","setRetainRequestBodyValueFlag","updateValue","valueFromExample","_getCurrentExampleValue","lastUserEditedValue","currentUserInputValue","lastDownstreamValue","isModifiedValueSelected","_getStateForCurrentNamespace","_setStateForCurrentNamespace","_setStateForNamespace","newStateForNamespace","_isCurrentUserInputSameAsExampleValue","_getValueForExample","exampleKey","currentKey","_onExamplesSelect","valueFromCurrentExample","examplesMatchingNewValue","authConfigs","currentServer","oauth2RedirectUrl","scopesArray","scopeSeparator","realm","usePkceWithAuthorizationCodeGrant","generateCodeVerifier","codeChallenge","createCodeChallenge","shaJs","sanitizedAuthorizationUrl","useBasicAuthenticationWithAccessCodeGrant","errCb","appName","oauth2Authorize","onScopeChange","dataset","newScopes","onInputChange","selectScopes","InitializedInput","oidcUrl","AUTH_FLOW_IMPLICIT","AUTH_FLOW_PASSWORD","AUTH_FLOW_ACCESS_CODE","AUTH_FLOW_APPLICATION","isPkceCodeGrant","flowToDisplay","htmlFor","tablet","desktop","Clear","Duration","LiveResponse","displayRequestDuration","showMutatedRequest","requestSnippetsEnabled","curlRequest","notDocumented","headersKeys","ResponseBody","returnObject","joinedHeaders","hasHeaders","Curl","OnlineValidatorBadge","validatorUrl","getDefinitionUrl","sanitizedValidatorUrl","ValidatorImage","alt","Image","onload","Operations","renderOperationTag","OperationContainer","isAbsoluteUrl","buildBaseUrl","addProtocol","safeBuildUrl","buildUrl","docExpansion","isDeepLinkingEnabled","Collapse","DeepLink","tagExternalDocsUrl","tagDescription","tagExternalDocsDescription","rawTagExternalDocsUrl","showTag","enabled","isOpened","_circle","preserveAspectRatio","backgroundImage","backgroundPosition","backgroundRepeat","cx","cy","stroke","calcMode","dur","keyTimes","repeatCount","toggleShown","onTryoutClick","onResetClick","onCancelClick","onExecute","oas3Actions","operationProps","allowTryItOut","tryItOutEnabled","executeInProgress","externalDocsUrl","getList","extensions","Parameters","Execute","Schemes","OperationExt","OperationSummary","showExtensions","onChangeKey","RollingLoadSVG","operationServers","pathServers","getSelectedServer","setSelectedServer","setServerVariableValue","getServerVariable","serverVariableValue","getEffectiveServerValue","currentScheme","tryItOutResponse","displayOperationId","supportedSubmitMethods","jumpToKey","resolvedSubtree","getResolvedSubtree","defaultRequestBodyValue","selectDefaultRequestBodyValue","setRequestBodyValue","unresolvedOp","resolvedSummary","OperationSummaryMethod","OperationSummaryPath","CopyToClipboardBtn","hasSecurity","securityIsOptional","allowAnonymous","textToCopy","applicableDefinitions","tabIndex","pathParts","OperationExtRow","xKey","xVal","xNormalizedValue","fileName","downloadable","canCopy","handleDownload","saveAs","onChangeProducesWrapper","onResponseContentTypeChange","controlsAcceptHeader","setResponseContentType","defaultCode","defaultStatusCode","ContentType","acceptControllingResponse","getAcceptControllingResponse","suitable2xxResponse","defaultResponse","suitableDefaultResponse","regionId","createHtmlReadyId","controlId","ariaControls","ariaLabel","contentTypes","role","isDefault","onContentTypeChange","activeExamplesKey","activeExamplesMember","getKnownSyntaxHighlighterLanguage","isValidJson","canJsonParse","_onContentTypeChange","getTargetExamplesKey","activeContentType","ResponseExtension","ModelExample","OperationLink","specPathWithPossibleSchema","activeMediaType","examplesForMediaType","oas3SchemaForContentType","mediaTypeExample","sampleSchema","shouldOverrideSchemaExample","sampleGenConfig","targetExamplesKey","getMediaTypeExample","targetExample","oldOASMediaTypeExample","getExampleComponent","sampleResponse","setActiveExamplesMember","contextName","omitValue","parsedContent","updateParsedContent","prevContent","reader","FileReader","readAsText","downloadName","bodyEl","disposition","responseFilename","extractFileNameFromContentDispositionHeader","msSaveOrOpenBlob","formatXml","controls","callbackVisible","parametersVisible","onChangeConsumesWrapper","toggleTab","tab","onChangeMediaType","hasUserEditedBody","shouldRetainRequestBodyValue","setRequestContentType","initRequestBodyValidateError","ParameterRow","TryItOutButton","Callbacks","isExecute","groupedParametersArr","rawParam","onChangeConsumes","requestBodyErrors","updateActiveExamplesKey","lastValue","usableValue","onChangeIncludeEmpty","setRequestBodyInclusion","ParameterIncludeEmptyDefaultProps","isIncludedOptions","ParameterIncludeEmpty","shouldDispatchInit","onCheckboxChange","isIncluded","setDefaultValue","onChangeWrapper","numberToString","valueForUpstream","_onExampleSelect","getParamKey","paramWithMeta","parameterMediaType","generatedSampleValue","isSwagger2","showCommonExtensions","JsonSchemaForm","ParamBody","bodyParam","consumesValue","ParameterExt","paramItems","paramEnum","paramDefaultValue","paramExample","itemType","isFormData","isFormDataSupported","commonExt","isDisplayParamEnum","defaultToFirstExample","handleValidateParameters","handleValidateRequestBody","missingBodyValue","missingRequiredKeys","clearRequestBodyValidateError","oas3RequiredRequestBodyContentType","oas3RequestBodyValue","oas3ValidateBeforeExecuteSuccess","oas3RequestContentType","setRequestBodyValidateError","validateShallowRequired","missingKey","handleValidationResultPass","handleValidationResultFail","handleValidationResult","isPass","paramsResult","requestBodyResult","Property","schemaExample","propVal","propClass","Errors","editorActions","jumpToLine","allErrorsToDisplay","isVisible","sortedJSErrors","toggleVisibility","animated","ThrownErrorItem","SpecErrorItem","errorLine","toTitleCase","locationMessage","xclass","Container","fullscreen","full","containerClass","DEVICES","hide","keepContents","mobile","large","classesAr","device","deviceClass","TextArea","Select","option","allowedValues","NoMargin","renderNotAnimated","Overview","setTagShown","_setTagShown","showTagId","showOp","toggleShow","showOpIdPrefix","showOpId","_onClick","otherProps","InfoBasePath","InfoUrl","termsOfServiceUrl","contactData","licenseData","externalDocsDescription","VersionStamp","OpenAPIVersion","oasVersion","InfoContainer","Footer","FilterContainer","onFilterChange","isLoading","isFailed","NOOP","isEditBox","updateValues","isJson","_onChange","handleOnChange","inputValue","toggleIsEditBox","defaultProp","curl","curlBlock","SchemesContainer","ModelCollapse","collapsedContent","expanded","onToggle","hideSelfOnExpand","modelName","toggleCollapsed","defaultModelRendering","activeTab","defaultModelExpandDepth","ModelWrapper","exampleTabId","examplePanelId","modelTabId","modelPanelId","inactive","expandDepth","Model","isInvalid","isMapLike","checkItem","createChecker","checklist","_React$Component","ImmutablePureComponent","updateOnProps","updateOnStates","decodeRefName","unescaped","ImPropTypes","isRef","getModelName","getRefSchema","model","ObjectModel","ArrayModel","PrimitiveModel","Models","getSchemaBasePath","getCollapsedContent","handleToggle","onLoadModels","onLoadModel","defaultModelsExpandDepth","specPathBase","showModels","schemaValue","rawSchemaValue","rawSchema","requiredProperties","infoProperties","JumpToPathSection","titleEl","isDeprecated","normalizedValue","Primitive","enumArray","EnumModel","showReset","VersionPragmaFilter","alsoShow","bypass","SvgAssets","xmlnsXlink","decodeEntity","UNESCAPE_MD_RE","unescapeMd","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","NAMED_ENTITY_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","decoded","replaceEntities","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","nextToken","tight","blockquote_open","blockquote_close","getBreak","fence","fences","fenceName","langClass","langPrefix","fence_custom","heading_open","hLevel","heading_close","xhtmlOut","bullet_list_open","bullet_list_close","list_item_open","list_item_close","ordered_list_open","ordered_list_close","paragraph_open","paragraph_close","addBreak","link_open","linkTarget","link_close","image","table_open","table_close","thead_open","thead_close","tbody_open","tbody_close","tr_open","tr_close","th_open","align","th_close","td_open","td_close","strong_open","strong_close","em_open","em_close","del_open","del_close","ins_open","ins_close","mark_open","mark_close","sup","hardbreak","softbreak","breaks","htmlblock","htmltag","abbr_open","abbr_close","footnote_ref","subId","footnote_block_open","footnote_block_close","footnote_open","footnote_close","footnote_anchor","dl_open","dt_open","dd_open","dl_close","dt_close","dd_close","Renderer","Ruler","__rules__","__cache__","StateInline","parserInline","outTokens","posMax","pendingLevel","isInLabel","linkLevel","linkContent","labelUnmatchedScopes","parseLinkLabel","labelEnd","oldPos","oldFlag","skipToken","parseAbbr","abbreviations","normalizeLink","parseLinkDestination","validateLink","parseLinkTitle","normalizeReference","parseReference","renderInline","_rules","__find__","__compile__","chains","altName","at","beforeName","ruleName","afterName","enable","strict","disable","getRules","chainName","pushPending","cacheSet","cacheGet","PUNCT_CHARS","regEscape","RARE_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceScopedAbbr","QUOTE_TEST_RE","QUOTE_RE","PUNCT_RE","isLetter","replaceAt","inlineMode","abbr","inline","tok","footnote_block","lastParagraph","currentLabel","insideRef","refTokens","footnotes","abbr2","reg","regText","blockTokens","abbrRegExp","inlineTokens","blkIdx","typographer","smartquotes","thisLevel","lastSpace","nextSpace","canOpen","canClose","isSingle","OUTER","single","quotes","Core","ruler","StateBlock","indent_found","bMarks","eMarks","tShift","blkIndent","lineMax","parentType","ddIndent","skipBulletListMarker","skipOrderedListMarker","skipEmptyLines","skipSpaces","skipChars","skipCharsBack","getLines","keepLastLF","html_blocks","HTML_TAG_OPEN_RE","HTML_TAG_CLOSE_RE","skipMarker","_rules$1","endLine","nextLine","silent","mem","haveEndMarker","blockquote","lastLineEmpty","oldTShift","oldBMarks","oldIndent","oldParentType","terminatorRules","terminate","maxNesting","tokenize","cnt","oldTight","posAfterMarker","indentAfterMarker","markerValue","markerCharCode","contentStart","listTokIdx","prevEmptyEnd","listLines","itemLines","markTightParagraphs","footnote","oldBMark","heading","lheading","isLetter$1","lineText","cell","aligns","tableLines","tbodyLines","deflist","ddLine","dtLine","oldDDIndent","markTightParagraphs$1","paragraph","ParserBlock","hasEmptyLines","TABS_SCAN_RE","NEWLINES_RE","SPACES_RE","isTerminatorChar","lastTabPos","ESCAPED","isAlphaNum","scanDelims","can_open","can_close","delims","UNESCAPE_RE","UNESCAPE_RE$1","url_schemas","EMAIL_RE","AUTOLINK_RE","replace$1","attr_value","open_tag","HTML_TAG_RE","DIGITAL_RE","NAMED_RE","_rules$2","newline","pmax","backticks","matchStart","matchEnd","del","emphasis","startCount","oldCount","labelStart","isImage","footnote_inline","footnoteId","oldLength","footnoteSubId","autolink","linkMatch","emailMatch","fullUrl","isLetter$2","entity","ParserInline","cached_pos","StateCore","Remarkable","preset","linkify","presets","parseInline","throwUnhandledCaseError","theValue","HtmlTag","whitespaceRegex","innerHtml","setTagName","getTagName","setAttr","getAttrs","getAttr","setAttrs","setClass","addClass","newClass","classAttr","getClass","newClasses","removeClass","removeClasses","setInnerHTML","setInnerHtml","getInnerHTML","getInnerHtml","toAnchorString","attrsStr","buildAttrsStr","attrsArr","AnchorTagBuilder","newWindow","truncate","build","createAttrs","processAnchorText","getAnchorText","getAnchorHref","createCssClass","returnClasses","cssClassSuffixes","getCssClassSuffixes","anchorText","doTruncate","truncateLength","truncateLocation","truncateSmart","truncateLen","ellipsisChars","ellipsisLengthBeforeParsing","ellipsisLength","urlObj","buildSegment","remainingAvailableLength","remainingAvailableLengthHalf","startOffset","endOffset","availableLength","urlSub","parse_url","matchQuery","pathAndQuery","truncateMiddle","truncateEnd","ellipsis","Match","__jsduckDummyDocProp","matchedText","tagBuilder","getMatchedText","setOffset","getOffset","buildTag","__assign","SuppressedError","urlSuffixRegex","EmailMatch","getEmail","HashtagMatch","serviceName","hashtag","getServiceName","getHashtag","MentionMatch","mention","getMention","PhoneMatch","plusSign","getPhoneNumber","getNumber","UrlMatch","urlMatchType","protocolUrlMatch","protocolRelativeMatch","stripPrefix","www","stripTrailingSlash","decodePercentEncoding","schemePrefixRegex","wwwPrefixRegex","protocolRelativeRegex","protocolPrepended","getUrlMatchType","getUrl","stripProtocolRelativePrefix","stripSchemePrefix","stripWwwPrefix","removeTrailingSlash","removePercentEncoding","preProcessedEntityAnchorText","Matcher","letterRe","digitRe","nonDigitRe","whitespaceRe","quoteRe","controlCharsRe","alphaCharsStr","alphaCharsAndMarksStr","decimalNumbersStr","alphaNumericCharsStr","alphaNumericAndMarksCharsStr","alphaNumericAndMarksCharRe","ipStr","domainLabelStr","getDomainLabelStr","getDomainNameStr","domainNameCharRegex","tldRegex","localPartCharRegex","strictTldRegex","EmailMatcher","parseMatches","noCurrentEmailMatch","CurrentEmailMatch","mailtoTransitions","charIdx","currentEmailMatch","stateNonEmailAddress","stateMailTo","stateLocalPart","stateLocalPartDot","stateAtSign","stateDomainChar","stateDomainHyphen","stateDomainDot","captureMatchIfValidAndReset","beginEmailMatch","hasMailtoPrefix","resetToNonEmailMatchState","hasDomainDot","emailAddress","doesEmailHaveValidTld","emailAddressTld","emailAddressNormalized","UrlMatchValidator","urlMatch","isValidUriScheme","urlMatchDoesNotHaveProtocolOrDot","urlMatchDoesNotHaveAtLeastOneWordChar","isValidIpAddress","containsMultipleDots","uriSchemeMatch","newRegex","hasFullProtocolRegex","ipRegex","stringBeforeSlash","uriSchemeMatchArr","uriSchemeRegex","uriScheme","hasWordCharAfterProtocolRegex","matcherRegex","wordCharRegExp","UrlMatcher","_loop_1","matchStr","schemeUrlMatch","wwwUrlMatch","wwwProtocolRelativeMatch","tldProtocolRelativeMatch","this_1","matchHasUnbalancedClosingParen","matchHasInvalidCharAfterTld","foundCommonScheme","commonScheme","indexOfSchemeStart","startChar","endChar","numOpenBraces","hashtagTextCharRe","HashtagMatcher","hashCharIdx","stateNone","stateNonHashtagWordChar","stateHashtagHashChar","stateHashtagTextChar","captureMatchIfValid","hashtagServices","phoneMatcherRegex","PhoneMatcher","cleanNumber","contextClear","testMatch","twitterRegex","instagramRegex","soundcloudRegex","tiktokRegex","nonWordCharRegex","MentionMatcher","matcherRegexes","twitter","instagram","soundcloud","tiktok","parseHtml","onOpenTag","onCloseTag","onText","onComment","onDoctype","noCurrentTag","CurrentTag","currentDataIdx","currentTag","stateData","stateTagOpen","stateEndTagOpen","stateTagName","stateBeforeAttributeName","stateAttributeName","stateAfterAttributeName","stateBeforeAttributeValue","stateAttributeValueDoubleQuoted","stateAttributeValueSingleQuoted","stateAttributeValueUnquoted","stateAfterAttributeValueQuoted","stateSelfClosingStartTag","stateMarkupDeclarationOpen","stateCommentStart","stateCommentStartDash","stateComment","stateCommentEndDash","stateCommentEnd","stateCommentEndBang","stateDoctype","startNewTag","isClosing","isOpening","captureTagName","emitTagAndPreviousTextNode","resetToDataState","reconsumeCurrentCharacter","textBeforeTag","startIdx","emitText","Autolinker","urls","phone","replaceFn","sanitizeHtml","matchers","normalizeUrlsCfg","normalizeStripPrefixCfg","normalizeTruncateCfg","textOrHtml","schemeMatches","wwwMatches","tldMatches","skipTagNames","skipTagsStackCount","textSplit","splitAndCapture","splitRegex","lastIdx","currentOffset_1","splitText","textNodeMatches","parseText","compactMatches","removeUnwantedMatches","matchedTextLength","removeIdx","getMatchers","numMatchers","textMatches","numTextMatches","newHtml","createMatchReturnVal","replaceFnResult","getTagBuilder","Email","Hashtag","Mention","Phone","LINK_SCAN_RE","isLinkOpen","isLinkClose","createLinkifier","autolinker","parseTokens","ln","htmlLinkLevel","linkifier","useUnsafeMarkdown","sanitized","sanitizer","DomPurify","hasWarnedAboutDeprecation","BaseLayout","ServersContainer","isOAS31","isSpecEmpty","loadingMessage","lastErr","lastErrMsg","hasServers","hasSchemes","hasSecurityDefinitions","CoreComponentsPlugin","authorizationPopup","authorizeBtn","authorizeOperationBtn","authError","oauth2","apiKeyAuth","basicAuth","liveResponse","onlineValidatorBadge","highlightCode","responseBody","parameterRow","overview","footer","modelExample","FormComponentsPlugin","LayoutUtils","JsonSchemaDefaultProps","keyName","dispatchInitialValue","getComponentSilently","Comp","JsonSchema_string","files","onEnumChange","schemaIn","JsonSchema_array","valueOrEmptyList","onItemChange","itemVal","removeItem","addItem","arrayErrors","needsRemoveError","shouldRenderValue","schemaItemsEnum","schemaItemsType","schemaItemsFormat","schemaItemsSchema","ArrayItemsComponent","isArrayItemText","isArrayItemFile","itemErrors","JsonSchemaArrayItemFile","JsonSchemaArrayItemText","onFileChange","JsonSchema_boolean","booleanValue","stringifyObjectErrors","stringError","currentError","JsonSchema_object","invalid","JSONSchemaComponentsPlugin","JSONSchemaComponents","BasePreset","ConfigsPlugin","UtilPlugin","LogsPlugin","ViewPlugin","ErrPlugin","LayoutPlugin","JSONSchema5SamplesPlugin","SwaggerClientPlugin","AuthPlugin","DownloadUrlPlugin","DeepLinkingPlugin","FilterPlugin","OnCompletePlugin","RequestSnippetsPlugin","SafeRenderPlugin","onlyOAS3","OAS3NullSelector","resolvedSchemes","defName","flowKey","flowVal","translatedDef","oidcData","grant","translatedScopes","cur","OAS3ComponentWrapFactory","swaggerVersion","isSwagger2Helper","isOAS30","isOAS30Helper","selectedValue","callbacksOperations","allOperations","callbackName","callbackOperations","callbackOps","pathItem","expression","pathItemOperations","operationDTO","operationDTOs","callbackNames","getDefaultRequestBodyValue","mediaTypeValue","hasExamplesKey","exampleSchema","handleFile","setIsIncludedOptions","RequestBodyEditor","requestBodyDescription","schemaForMediaType","rawExamplesOfMediaType","sampleForMediaType","isObjectContent","isBinaryFormat","isBase64Format","bodyProperties","currentErrors","included","useInitialValFromSchemaSamples","useInitialValFromEnum","useInitialValue","sampleRequestBody","targetOp","padString","setServer","currentServerDefinition","prevServerDefinition","prevServerVariableDefaultValue","currentServerVariableDefs","currentServerVariableDefaultValue","onServerChange","onServerVariableValueChange","variableName","newVariableValue","shouldShowVariableUI","applyDefaultValue","onDomChange","HttpAuth","serversToDisplay","displaying","operationLink","trimmed","ModelComponent","OAS30ComponentWrapFactory","UPDATE_SELECTED_SERVER","UPDATE_REQUEST_BODY_VALUE","UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG","UPDATE_REQUEST_BODY_INCLUSION","UPDATE_ACTIVE_EXAMPLES_MEMBER","UPDATE_REQUEST_CONTENT_TYPE","UPDATE_RESPONSE_CONTENT_TYPE","UPDATE_SERVER_VARIABLE_VALUE","SET_REQUEST_BODY_VALIDATE_ERROR","CLEAR_REQUEST_BODY_VALIDATE_ERROR","CLEAR_REQUEST_BODY_VALUE","clearRequestBodyValue","userEditedRequestBody","kv","currentMediaTypeDefaultBodyValue","locationData","varValues","serverValue","validateRequestBodyIsRequired","validateRequestBodyValueExists","requiredKeys","requiredKey","currentVal","valueKeyVal","missingKeyValues","bodyValue","currentMissingKey","bodyValues","specWrapSelectors","authWrapSelectors","oas3","selectWebhooksOperations","pathItemNames","pathItemName","selectLicenseNameField","selectLicenseUrl","selectContactNameField","selectContactUrl","selectContactEmailField","selectInfoSummaryField","selectInfoDescriptionField","selectInfoTitleField","selectInfoTermsOfServiceUrl","selectExternalDocsUrl","externalDocsDesc","selectExternalDocsDescriptionField","selectJsonSchemaDialectField","jsonSchemaDialectDefault","selectJsonSchemaDialectDefault","JSONSchema202012","handleExpand","onExpand","selectSchemas","hasSchemas","schemasPath","isOpenDefault","isOpen","isOpenAndExpanded","isResolved","handleModelsExpand","handleModelsRef","handleJSONSchema202012Ref","schemaName","handleJSONSchema202012Expand","schemaPath","mutualTLSDefinitions","createOnlyOAS31Selector","createOnlyOAS31SelectorWrapper","createSystemSelector","createOnlyOAS31ComponentWrapper","originalComponent","OAS31License","OAS31Contact","OAS31Info","makeIsExpandable","hasKeyword","jsonSchema202012","getProperties","filteredProperties","Keyword$schema","Keyword$vocabulary","Keyword$id","Keyword$anchor","Keyword$dynamicAnchor","Keyword$ref","Keyword$dynamicRef","Keyword$defs","Keyword$comment","KeywordAllOf","KeywordAnyOf","KeywordOneOf","KeywordNot","KeywordIf","KeywordThen","KeywordElse","KeywordDependentSchemas","KeywordPrefixItems","KeywordItems","KeywordContains","KeywordProperties","KeywordPatternProperties","KeywordAdditionalProperties","KeywordPropertyNames","KeywordUnevaluatedItems","KeywordUnevaluatedProperties","KeywordType","KeywordEnum","KeywordConst","KeywordConstraint","KeywordDependentRequired","KeywordContentSchema","KeywordTitle","KeywordDescription","KeywordDefault","KeywordDeprecated","KeywordReadOnly","KeywordWriteOnly","Accordion","ExpandDeepButton","ChevronRightIcon","ModelWithJSONSchemaContext","withSchemaContext","default$schema","defaultExpandedLevels","isExpandable","ModelsWrapper","ModelsWithJSONSchemaContext","VersionPragmaFilterWrapper","OAS31VersionPragmaFilter","MutualTLSAuth","OAS31Auths","isOAS31Fn","selectLicenseUrlField","selectLicenseIdentifierField","selectContactUrlField","selectInfoTermsOfServiceField","selectExternalDocsUrlField","rawSchemas","resolvedSchemas","resolvedSchema","oas31Selectors","useFn","useIsExpandedDeeply","useComponent","isExpandedDeeply","setExpanded","expandedDeeply","setExpandedDeeply","JSONSchemaDeepExpansionContext","handleExpansion","handleExpansionDeep","expandedDeepNew","MarkDown","DescriptionKeyword","DefaultWrapper","KeywordDiscriminator","KeywordXml","KeywordExample","KeywordExternalDocs","getDependentRequired","useConfig","propertySchema","PropertiesKeyword","wrappedFns","wrapOAS31Fn","systemFn","newImpl","oriImpl","createSystemSelectorFn","createOnlyOAS31SelectorFn","OAS31Model","OAS31Models","JSONSchema202012KeywordExample","JSONSchema202012KeywordXml","JSONSchema202012KeywordDiscriminator","JSONSchema202012KeywordExternalDocs","InfoWrapper","LicenseWrapper","ContactWrapper","AuthItemWrapper","AuthsWrapper","JSONSchema202012KeywordDescription","JSONSchema202012KeywordDescriptionWrapper","JSONSchema202012KeywordDefault","JSONSchema202012KeywordDefaultWrapper","JSONSchema202012KeywordProperties","JSONSchema202012KeywordPropertiesWrapper","definitionsToAuthorizeWrapper","selectIsOAS31","selectLicense","selectContact","selectWebhooks","isOAS3SelectorWrapper","selectLicenseUrlWrapper","oas31","selectOAS31LicenseUrl","objectSchema","booleanSchema","JSONSchemaContext","JSONSchemaLevelContext","JSONSchemaCyclesContext","fnName","useLevel","useRenderedSchemas","renderedSchemas","useIsExpanded","nextLevel","isEmbedded","useIsEmbedded","isCircular","useIsCircular","constraints","stringifyConstraints","expandedNew","constraint","getTitle","circularSuffix","strigifiedElement","Constraint","Title","ChevronRight","processedSchemas","isBooleanJSONSchema","getArrayType","prefixItemsTypes","itemsType","handleCombiningKeywords","subSchema","combinedStrings","inferType","stringifyConstraintRange","hasMin","hasMax","stringifyConstraintMultipleOf","factor","numberRange","stringifyConstraintNumberRange","hasMinimum","hasMaximum","hasExclusiveMinimum","hasExclusiveMaximum","isMinExclusive","isMaxExclusive","stringRange","arrayRange","hasUniqueItems","containsRange","objectRange","withJSONSchemaContext","overrides","HOC","contexts","JSONSchema202012Plugin","JSONSchema202012Keyword$schema","JSONSchema202012Keyword$vocabulary","JSONSchema202012Keyword$id","JSONSchema202012Keyword$anchor","JSONSchema202012Keyword$dynamicAnchor","JSONSchema202012Keyword$ref","JSONSchema202012Keyword$dynamicRef","JSONSchema202012Keyword$defs","JSONSchema202012Keyword$comment","JSONSchema202012KeywordAllOf","JSONSchema202012KeywordAnyOf","JSONSchema202012KeywordOneOf","JSONSchema202012KeywordNot","JSONSchema202012KeywordIf","JSONSchema202012KeywordThen","JSONSchema202012KeywordElse","JSONSchema202012KeywordDependentSchemas","JSONSchema202012KeywordPrefixItems","JSONSchema202012KeywordItems","JSONSchema202012KeywordContains","JSONSchema202012KeywordPatternProperties","JSONSchema202012KeywordAdditionalProperties","JSONSchema202012KeywordPropertyNames","JSONSchema202012KeywordUnevaluatedItems","JSONSchema202012KeywordUnevaluatedProperties","JSONSchema202012KeywordType","JSONSchema202012KeywordEnum","JSONSchema202012KeywordConst","JSONSchema202012KeywordConstraint","JSONSchema202012KeywordDependentRequired","JSONSchema202012KeywordContentSchema","JSONSchema202012KeywordTitle","JSONSchema202012KeywordDeprecated","JSONSchema202012KeywordReadOnly","JSONSchema202012KeywordWriteOnly","JSONSchema202012Accordion","JSONSchema202012ExpandDeepButton","JSONSchema202012ChevronRightIcon","withJSONSchema202012Context","JSONSchema202012DeepExpansionContext","arrayType","constrainedArray","containsItem","applyArrayConstraints","objectType","isJSONSchemaObject","isJSONSchema","emailGenerator","idnEmailGenerator","hostnameGenerator","idnHostnameGenerator","ipv4Generator","ipv6Generator","uriGenerator","uriReferenceGenerator","iriGenerator","iriReferenceGenerator","uuidGenerator","uriTemplateGenerator","jsonPointerGenerator","relativeJsonPointerGenerator","dateTimeGenerator","dateGenerator","timeGenerator","durationGenerator","passwordGenerator","regexGenerator","Registry","registry","formatAPI","quotedPrintable","utf8","utf8Value","base32Alphabet","paddingCount","base32Str","bufferLength","EncoderRegistry","encode7bit","encode8bit","encodeBinary","encodeQuotedPrintable","base16","base32","encoderAPI","encodingName","getDefaults","text/plain","text/css","text/csv","text/html","text/calendar","text/javascript","text/xml","text/*","image/*","audio/*","video/*","application/json","application/ld+json","application/x-httpd-php","application/rtf","raw","application/x-sh","application/xhtml+xml","application/*","MediaTypeRegistry","textMediaTypesGenerators","imageMediaTypesGenerators","audioMediaTypesGenerators","videoMediaTypesGenerators","applicationMediaTypesGenerators","mediaTypeAPI","mediaTypeNoParams","topLevelMediaType","generatedString","generateFormat","formatGenerator","mediaTypeGenerator","constrainedString","applyStringConstraints","floatGenerator","doubleGenerator","generatedNumber","epsilon","EPSILON","minValue","maxValue","constrainedNumber","applyNumberConstraints","int32Generator","int64Generator","stringType","numberType","integerType","boolean","booleanType","nullType","ALL_TYPES","hasExample","extractExample","inferringKeywords","fallbackType","inferTypeFromValue","foldType","pickedType","randomPick","inferringTypes","inferringType","inferringTypeKeywords","inferringKeyword","constType","combineTypes","combinedTypes","exampleType","typeCast","fromJSONBooleanSchema","merged","mergedType","ensureArray","allPropertyNames","propSchema","propSchemaType","anyOfSchema","oneOfSchema","contentSample","sampleEncoderAPI","sampleFormatAPI","sampleMediaTypeAPI","PresetApis","OpenAPI30Plugin","JSONSchema202012SamplesPlugin","OpenAPI31Plugin","GIT_DIRTY","GIT_COMMIT","PACKAGE_VERSION","BUILD_TIME","buildInfo","SwaggerUI","swaggerUi","gitRevision","gitDirty","buildTimestamp","dom_id","defaultExpanded","queryConfigEnabled","ApisPreset","syntaxHighlight","activated","theme","queryConfig","parseSearch","constructorConfig","storeConfigs","System","inlinePlugin","downloadSpec","fetchedConfig","localConfig","mergedConfig","configsActions","querySelector","configUrl","loadRemoteConfig","apis","Auth","Configs","DeepLining","Err","Filter","Icons","JSONSchema5Samples","JSONSchema202012Samples","Logs","OpenAPI30","OpenAPI31","OnComplete","Spec","SwaggerClient","Util","View","DownloadUrl","SafeRender"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/assets/scripts/swagger-ui-standalone-preset.js b/docs/assets/scripts/swagger-ui-standalone-preset.js new file mode 100644 index 000000000..2ede1a834 --- /dev/null +++ b/docs/assets/scripts/swagger-ui-standalone-preset.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-standalone-preset.js.LICENSE.txt */ +!function webpackUniversalModuleDefinition(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIStandalonePreset=t():e.SwaggerUIStandalonePreset=t()}(this,(()=>(()=>{var e={7967:(e,t)=>{"use strict";t.Rq=void 0;var r=/^([^\w]*)(javascript|data|vbscript)/im,n=/&#(\w+)(^\w|;)?/g,i=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];t.Rq="about:blank"},9742:(e,t)=>{"use strict";t.byteLength=function byteLength(e){var t=getLens(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function toByteArray(e){var t,r,o=getLens(e),a=o[0],s=o[1],u=new i(function _byteLength(e,t,r){return 3*(t+r)/4-r}(0,a,s)),c=0,f=s>0?a-4:a;for(r=0;r>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===s&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[c++]=255&t);1===s&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function fromByteArray(e){for(var t,n=e.length,i=n%3,o=[],a=16383,s=0,u=n-i;su?u:s+a));1===i?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===i&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"="));return o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=o[a],n[o.charCodeAt(a)]=a;function getLens(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function encodeChunk(e,t,n){for(var i,o,a=[],s=t;s>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return a.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},8764:(e,t,r)=>{"use strict";const n=r(9742),i=r(645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=Buffer,t.SlowBuffer=function SlowBuffer(e){+e!=e&&(e=0);return Buffer.alloc(+e)},t.INSPECT_MAX_BYTES=50;const a=2147483647;function createBuffer(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,Buffer.prototype),t}function Buffer(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return allocUnsafe(e)}return from(e,t,r)}function from(e,t,r){if("string"==typeof e)return function fromString(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!Buffer.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|byteLength(e,t);let n=createBuffer(r);const i=n.write(e,t);i!==r&&(n=n.slice(0,i));return n}(e,t);if(ArrayBuffer.isView(e))return function fromArrayView(e){if(isInstance(e,Uint8Array)){const t=new Uint8Array(e);return fromArrayBuffer(t.buffer,t.byteOffset,t.byteLength)}return fromArrayLike(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(isInstance(e,ArrayBuffer)||e&&isInstance(e.buffer,ArrayBuffer))return fromArrayBuffer(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(isInstance(e,SharedArrayBuffer)||e&&isInstance(e.buffer,SharedArrayBuffer)))return fromArrayBuffer(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return Buffer.from(n,t,r);const i=function fromObject(e){if(Buffer.isBuffer(e)){const t=0|checked(e.length),r=createBuffer(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||numberIsNaN(e.length)?createBuffer(0):fromArrayLike(e);if("Buffer"===e.type&&Array.isArray(e.data))return fromArrayLike(e.data)}(e);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return Buffer.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function assertSize(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function allocUnsafe(e){return assertSize(e),createBuffer(e<0?0:0|checked(e))}function fromArrayLike(e){const t=e.length<0?0:0|checked(e.length),r=createBuffer(t);for(let n=0;n=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function byteLength(e,t){if(Buffer.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||isInstance(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return utf8ToBytes(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(e).length;default:if(i)return n?-1:utf8ToBytes(e).length;t=(""+t).toLowerCase(),i=!0}}function slowToString(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return hexSlice(this,t,r);case"utf8":case"utf-8":return utf8Slice(this,t,r);case"ascii":return asciiSlice(this,t,r);case"latin1":case"binary":return latin1Slice(this,t,r);case"base64":return base64Slice(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function swap(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function bidirectionalIndexOf(e,t,r,n,i){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),numberIsNaN(r=+r)&&(r=i?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(i)return-1;r=e.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof t&&(t=Buffer.from(t,n)),Buffer.isBuffer(t))return 0===t.length?-1:arrayIndexOf(e,t,r,n,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):arrayIndexOf(e,[t],r,n,i);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(e,t,r,n,i){let o,a=1,s=e.length,u=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,r/=2}function read(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(i){let n=-1;for(o=r;os&&(r=s-u),o=r;o>=0;o--){let r=!0;for(let n=0;ni&&(n=i):n=i;const o=t.length;let a;for(n>o/2&&(n=o/2),a=0;a>8,i=r%256,o.push(i),o.push(n);return o}(t,e.length-r),e,r,n)}function base64Slice(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function utf8Slice(e,t,r){r=Math.min(e.length,r);const n=[];let i=t;for(;i239?4:t>223?3:t>191?2:1;if(i+a<=r){let r,n,s,u;switch(a){case 1:t<128&&(o=t);break;case 2:r=e[i+1],128==(192&r)&&(u=(31&t)<<6|63&r,u>127&&(o=u));break;case 3:r=e[i+1],n=e[i+2],128==(192&r)&&128==(192&n)&&(u=(15&t)<<12|(63&r)<<6|63&n,u>2047&&(u<55296||u>57343)&&(o=u));break;case 4:r=e[i+1],n=e[i+2],s=e[i+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(u=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,u>65535&&u<1114112&&(o=u))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=a}return function decodeCodePointsArray(e){const t=e.length;if(t<=s)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(Buffer.isBuffer(t)||(t=Buffer.from(t)),t.copy(n,i)):Uint8Array.prototype.set.call(n,t,i);else{if(!Buffer.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,i)}i+=t.length}return n},Buffer.byteLength=byteLength,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function swap16(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},o&&(Buffer.prototype[o]=Buffer.prototype.inspect),Buffer.prototype.compare=function compare(e,t,r,n,i){if(isInstance(e,Uint8Array)&&(e=Buffer.from(e,e.offset,e.byteLength)),!Buffer.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),t<0||r>e.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&t>=r)return 0;if(n>=i)return-1;if(t>=r)return 1;if(this===e)return 0;let o=(i>>>=0)-(n>>>=0),a=(r>>>=0)-(t>>>=0);const s=Math.min(o,a),u=this.slice(n,i),c=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const i=this.length-t;if((void 0===r||r>i)&&(r=i),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return hexWrite(this,e,t,r);case"utf8":case"utf-8":return utf8Write(this,e,t,r);case"ascii":case"latin1":case"binary":return asciiWrite(this,e,t,r);case"base64":return base64Write(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const s=4096;function asciiSlice(e,t,r){let n="";r=Math.min(e.length,r);for(let i=t;in)&&(r=n);let i="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function checkInt(e,t,r,n,i,o){if(!Buffer.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function wrtBigUInt64LE(e,t,r,n,i){checkIntBI(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,a>>=8,e[r++]=a,r}function wrtBigUInt64BE(e,t,r,n,i){checkIntBI(t,n,i,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o>>=8,e[r+6]=o,o>>=8,e[r+5]=o,o>>=8,e[r+4]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=a,a>>=8,e[r+2]=a,a>>=8,e[r+1]=a,a>>=8,e[r]=a,r+8}function checkIEEE754(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(e,t,r,n,o){return t=+t,r>>>=0,o||checkIEEE754(e,0,r,4),i.write(e,t,r,n,23,4),r+4}function writeDouble(e,t,r,n,o){return t=+t,r>>>=0,o||checkIEEE754(e,0,r,8),i.write(e,t,r,n,52,8),r+8}Buffer.prototype.slice=function slice(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e],i=1,o=0;for(;++o>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e+--t],i=1;for(;t>0&&(i*=256);)n+=this[e+--t]*i;return n},Buffer.prototype.readUint8=Buffer.prototype.readUInt8=function readUInt8(e,t){return e>>>=0,t||checkOffset(e,1,this.length),this[e]},Buffer.prototype.readUint16LE=Buffer.prototype.readUInt16LE=function readUInt16LE(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]|this[e+1]<<8},Buffer.prototype.readUint16BE=Buffer.prototype.readUInt16BE=function readUInt16BE(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]<<8|this[e+1]},Buffer.prototype.readUint32LE=Buffer.prototype.readUInt32LE=function readUInt32LE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Buffer.prototype.readUint32BE=Buffer.prototype.readUInt32BE=function readUInt32BE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Buffer.prototype.readBigUInt64LE=defineBigIntMethod((function readBigUInt64LE(e){validateNumber(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,i=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(i)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],i=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e],i=1,o=0;for(;++o=i&&(n-=Math.pow(2,8*t)),n},Buffer.prototype.readIntBE=function readIntBE(e,t,r){e>>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=t,i=1,o=this[e+--n];for(;n>0&&(i*=256);)o+=this[e+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},Buffer.prototype.readInt8=function readInt8(e,t){return e>>>=0,t||checkOffset(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Buffer.prototype.readInt16LE=function readInt16LE(e,t){e>>>=0,t||checkOffset(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function readInt16BE(e,t){e>>>=0,t||checkOffset(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function readInt32LE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Buffer.prototype.readBigInt64LE=defineBigIntMethod((function readBigInt64LE(e){validateNumber(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||checkOffset(e,4,this.length),i.read(this,e,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),i.read(this,e,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(e,t){return e>>>=0,t||checkOffset(e,8,this.length),i.read(this,e,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(e,t){return e>>>=0,t||checkOffset(e,8,this.length),i.read(this,e,!1,52,8)},Buffer.prototype.writeUintLE=Buffer.prototype.writeUIntLE=function writeUIntLE(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){checkInt(this,e,t,r,Math.pow(2,8*r)-1,0)}let i=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,!n){checkInt(this,e,t,r,Math.pow(2,8*r)-1,0)}let i=r-1,o=1;for(this[t+i]=255&e;--i>=0&&(o*=256);)this[t+i]=e/o&255;return t+r},Buffer.prototype.writeUint8=Buffer.prototype.writeUInt8=function writeUInt8(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,255,0),this[t]=255&e,t+1},Buffer.prototype.writeUint16LE=Buffer.prototype.writeUInt16LE=function writeUInt16LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeUint16BE=Buffer.prototype.writeUInt16BE=function writeUInt16BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeUint32LE=Buffer.prototype.writeUInt32LE=function writeUInt32LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},Buffer.prototype.writeUint32BE=Buffer.prototype.writeUInt32BE=function writeUInt32BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeBigUInt64LE=defineBigIntMethod((function writeBigUInt64LE(e,t=0){return wrtBigUInt64LE(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeBigUInt64BE=defineBigIntMethod((function writeBigUInt64BE(e,t=0){return wrtBigUInt64BE(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeIntLE=function writeIntLE(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);checkInt(this,e,t,r,n-1,-n)}let i=0,o=1,a=0;for(this[t]=255&e;++i>0)-a&255;return t+r},Buffer.prototype.writeIntBE=function writeIntBE(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);checkInt(this,e,t,r,n-1,-n)}let i=r-1,o=1,a=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===a&&0!==this[t+i+1]&&(a=1),this[t+i]=(e/o>>0)-a&255;return t+r},Buffer.prototype.writeInt8=function writeInt8(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},Buffer.prototype.writeInt16LE=function writeInt16LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeInt16BE=function writeInt16BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeInt32LE=function writeInt32LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},Buffer.prototype.writeInt32BE=function writeInt32BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeBigInt64LE=defineBigIntMethod((function writeBigInt64LE(e,t=0){return wrtBigUInt64LE(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeBigInt64BE=defineBigIntMethod((function writeBigInt64BE(e,t=0){return wrtBigUInt64BE(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeFloatLE=function writeFloatLE(e,t,r){return writeFloat(this,e,t,!0,r)},Buffer.prototype.writeFloatBE=function writeFloatBE(e,t,r){return writeFloat(this,e,t,!1,r)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(e,t,r){return writeDouble(this,e,t,!0,r)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(e,t,r){return writeDouble(this,e,t,!1,r)},Buffer.prototype.copy=function copy(e,t,r,n){if(!Buffer.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function checkIntBI(e,t,r,n,i,o){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new u.ERR_OUT_OF_RANGE("value",i,e)}!function checkBounds(e,t,r){validateNumber(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||boundsError(t,e.length-(r+1))}(n,i,o)}function validateNumber(e,t){if("number"!=typeof e)throw new u.ERR_INVALID_ARG_TYPE(t,"number",e)}function boundsError(e,t,r){if(Math.floor(e)!==e)throw validateNumber(e,r),new u.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new u.ERR_BUFFER_OUT_OF_BOUNDS;throw new u.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}E("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),E("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),E("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=addNumericalSeparator(String(r)):"bigint"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=addNumericalSeparator(i)),i+="n"),n+=` It must be ${t}. Received ${i}`,n}),RangeError);const c=/[^+/0-9A-Za-z-_]/g;function utf8ToBytes(e,t){let r;t=t||1/0;const n=e.length;let i=null;const o=[];for(let a=0;a55295&&r<57344){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function base64ToBytes(e){return n.toByteArray(function base64clean(e){if((e=(e=e.split("=")[0]).trim().replace(c,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function blitBuffer(e,t,r,n){let i;for(i=0;i=t.length||i>=e.length);++i)t[i+r]=e[i];return i}function isInstance(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function numberIsNaN(e){return e!=e}const f=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)t[n+i]=e[r]+e[i]}return t}();function defineBigIntMethod(e){return"undefined"==typeof BigInt?BufferBigIntNotDefined:e}function BufferBigIntNotDefined(){throw new Error("BigInt not supported")}},93:(e,t,r)=>{var n=r(8196);e.exports=n},5362:(e,t,r)=>{var n=r(3383);e.exports=n},7700:(e,t,r)=>{r(3381);var n=r(5703);e.exports=n("Function").bind},6246:(e,t,r)=>{var n=r(7046),i=r(7700),o=Function.prototype;e.exports=function(e){var t=e.bind;return e===o||n(o,e)&&t===o.bind?i:t}},5999:(e,t,r)=>{r(9221);var n=r(4058);e.exports=n.Object.assign},4122:(e,t,r)=>{e.exports=r(9097)},269:(e,t,r)=>{e.exports=r(6936)},9097:(e,t,r)=>{var n=r(93);e.exports=n},6936:(e,t,r)=>{var n=r(5362);e.exports=n},4883:(e,t,r)=>{var n=r(7475),i=r(9826),o=TypeError;e.exports=function(e){if(n(e))return e;throw o(i(e)+" is not a function")}},6059:(e,t,r)=>{var n=r(941),i=String,o=TypeError;e.exports=function(e){if(n(e))return e;throw o(i(e)+" is not an object")}},1692:(e,t,r)=>{var n=r(4529),i=r(9413),o=r(623),createMethod=function(e){return function(t,r,a){var s,u=n(t),c=o(u),f=i(a,c);if(e&&r!=r){for(;c>f;)if((s=u[f++])!=s)return!0}else for(;c>f;f++)if((e||f in u)&&u[f]===r)return e||f||0;return!e&&-1}};e.exports={includes:createMethod(!0),indexOf:createMethod(!1)}},3765:(e,t,r)=>{var n=r(5329);e.exports=n([].slice)},2532:(e,t,r)=>{var n=r(5329),i=n({}.toString),o=n("".slice);e.exports=function(e){return o(i(e),8,-1)}},2029:(e,t,r)=>{var n=r(5746),i=r(5988),o=r(1887);e.exports=n?function(e,t,r){return i.f(e,t,o(1,r))}:function(e,t,r){return e[t]=r,e}},1887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},5609:(e,t,r)=>{var n=r(1899),i=Object.defineProperty;e.exports=function(e,t){try{i(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},5746:(e,t,r)=>{var n=r(5981);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},6616:e=>{var t="object"==typeof document&&document.all,r=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:r}},1333:(e,t,r)=>{var n=r(1899),i=r(941),o=n.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},2861:e=>{e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},3385:(e,t,r)=>{var n,i,o=r(1899),a=r(2861),s=o.process,u=o.Deno,c=s&&s.versions||u&&u.version,f=c&&c.v8;f&&(i=(n=f.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&a&&(!(n=a.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=a.match(/Chrome\/(\d+)/))&&(i=+n[1]),e.exports=i},5703:(e,t,r)=>{var n=r(4058);e.exports=function(e){return n[e+"Prototype"]}},6759:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},6887:(e,t,r)=>{"use strict";var n=r(1899),i=r(9730),o=r(7484),a=r(7475),s=r(9677).f,u=r(7252),c=r(4058),f=r(6843),l=r(2029),h=r(953),wrapConstructor=function(e){var Wrapper=function(t,r,n){if(this instanceof Wrapper){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,r)}return new e(t,r,n)}return i(e,this,arguments)};return Wrapper.prototype=e.prototype,Wrapper};e.exports=function(e,t){var r,i,p,d,_,g,v,m,b,w=e.target,I=e.global,x=e.stat,B=e.proto,k=I?n:x?n[w]:(n[w]||{}).prototype,A=I?c:c[w]||l(c,w,{})[w],M=A.prototype;for(d in t)i=!(r=u(I?d:w+(x?".":"#")+d,e.forced))&&k&&h(k,d),g=A[d],i&&(v=e.dontCallGetSet?(b=s(k,d))&&b.value:k[d]),_=i&&v?v:t[d],i&&typeof g==typeof _||(m=e.bind&&i?f(_,n):e.wrap&&i?wrapConstructor(_):B&&a(_)?o(_):_,(e.sham||_&&_.sham||g&&g.sham)&&l(m,"sham",!0),l(A,d,m),B&&(h(c,p=w+"Prototype")||l(c,p,{}),l(c[p],d,_),e.real&&M&&(r||!M[d])&&l(M,d,_)))}},5981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},9730:(e,t,r)=>{var n=r(8285),i=Function.prototype,o=i.apply,a=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?a.bind(o):function(){return a.apply(o,arguments)})},6843:(e,t,r)=>{var n=r(7484),i=r(4883),o=r(8285),a=n(n.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?a(e,t):function(){return e.apply(t,arguments)}}},8285:(e,t,r)=>{var n=r(5981);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},8308:(e,t,r)=>{"use strict";var n=r(5329),i=r(4883),o=r(941),a=r(953),s=r(3765),u=r(8285),c=Function,f=n([].concat),l=n([].join),h={};e.exports=u?c.bind:function bind(e){var t=i(this),r=t.prototype,n=s(arguments,1),u=function bound(){var r=f(n,s(arguments));return this instanceof u?function(e,t,r){if(!a(h,t)){for(var n=[],i=0;i{var n=r(8285),i=Function.prototype.call;e.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},7484:(e,t,r)=>{var n=r(2532),i=r(5329);e.exports=function(e){if("Function"===n(e))return i(e)}},5329:(e,t,r)=>{var n=r(8285),i=Function.prototype,o=i.call,a=n&&i.bind.bind(o,o);e.exports=n?a:function(e){return function(){return o.apply(e,arguments)}}},626:(e,t,r)=>{var n=r(4058),i=r(1899),o=r(7475),aFunction=function(e){return o(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?aFunction(n[e])||aFunction(i[e]):n[e]&&n[e][t]||i[e]&&i[e][t]}},4229:(e,t,r)=>{var n=r(4883),i=r(2119);e.exports=function(e,t){var r=e[t];return i(r)?void 0:n(r)}},1899:function(e,t,r){var check=function(e){return e&&e.Math==Math&&e};e.exports=check("object"==typeof globalThis&&globalThis)||check("object"==typeof window&&window)||check("object"==typeof self&&self)||check("object"==typeof r.g&&r.g)||function(){return this}()||this||Function("return this")()},953:(e,t,r)=>{var n=r(5329),i=r(9678),o=n({}.hasOwnProperty);e.exports=Object.hasOwn||function hasOwn(e,t){return o(i(e),t)}},7748:e=>{e.exports={}},2840:(e,t,r)=>{var n=r(5746),i=r(5981),o=r(1333);e.exports=!n&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},7026:(e,t,r)=>{var n=r(5329),i=r(5981),o=r(2532),a=Object,s=n("".split);e.exports=i((function(){return!a("z").propertyIsEnumerable(0)}))?function(e){return"String"==o(e)?s(e,""):a(e)}:a},7475:(e,t,r)=>{var n=r(6616),i=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===i}:function(e){return"function"==typeof e}},7252:(e,t,r)=>{var n=r(5981),i=r(7475),o=/#|\.prototype\./,isForced=function(e,t){var r=s[a(e)];return r==c||r!=u&&(i(t)?n(t):!!t)},a=isForced.normalize=function(e){return String(e).replace(o,".").toLowerCase()},s=isForced.data={},u=isForced.NATIVE="N",c=isForced.POLYFILL="P";e.exports=isForced},2119:e=>{e.exports=function(e){return null==e}},941:(e,t,r)=>{var n=r(7475),i=r(6616),o=i.all;e.exports=i.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===o}:function(e){return"object"==typeof e?null!==e:n(e)}},2529:e=>{e.exports=!0},6664:(e,t,r)=>{var n=r(626),i=r(7475),o=r(7046),a=r(2302),s=Object;e.exports=a?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return i(t)&&o(t.prototype,s(e))}},623:(e,t,r)=>{var n=r(3057);e.exports=function(e){return n(e.length)}},5331:e=>{var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function trunc(e){var n=+e;return(n>0?r:t)(n)}},4420:(e,t,r)=>{"use strict";var n=r(5746),i=r(5329),o=r(8834),a=r(5981),s=r(4771),u=r(7857),c=r(6760),f=r(9678),l=r(7026),h=Object.assign,p=Object.defineProperty,d=i([].concat);e.exports=!h||a((function(){if(n&&1!==h({b:1},h(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),i="abcdefghijklmnopqrst";return e[r]=7,i.split("").forEach((function(e){t[e]=e})),7!=h({},e)[r]||s(h({},t)).join("")!=i}))?function assign(e,t){for(var r=f(e),i=arguments.length,a=1,h=u.f,p=c.f;i>a;)for(var _,g=l(arguments[a++]),v=h?d(s(g),h(g)):s(g),m=v.length,b=0;m>b;)_=v[b++],n&&!o(p,g,_)||(r[_]=g[_]);return r}:h},5988:(e,t,r)=>{var n=r(5746),i=r(2840),o=r(3937),a=r(6059),s=r(3894),u=TypeError,c=Object.defineProperty,f=Object.getOwnPropertyDescriptor,l="enumerable",h="configurable",p="writable";t.f=n?o?function defineProperty(e,t,r){if(a(e),t=s(t),a(r),"function"==typeof e&&"prototype"===t&&"value"in r&&p in r&&!r[p]){var n=f(e,t);n&&n[p]&&(e[t]=r.value,r={configurable:h in r?r[h]:n[h],enumerable:l in r?r[l]:n[l],writable:!1})}return c(e,t,r)}:c:function defineProperty(e,t,r){if(a(e),t=s(t),a(r),i)try{return c(e,t,r)}catch(e){}if("get"in r||"set"in r)throw u("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},9677:(e,t,r)=>{var n=r(5746),i=r(8834),o=r(6760),a=r(1887),s=r(4529),u=r(3894),c=r(953),f=r(2840),l=Object.getOwnPropertyDescriptor;t.f=n?l:function getOwnPropertyDescriptor(e,t){if(e=s(e),t=u(t),f)try{return l(e,t)}catch(e){}if(c(e,t))return a(!i(o.f,e,t),e[t])}},7857:(e,t)=>{t.f=Object.getOwnPropertySymbols},7046:(e,t,r)=>{var n=r(5329);e.exports=n({}.isPrototypeOf)},5629:(e,t,r)=>{var n=r(5329),i=r(953),o=r(4529),a=r(1692).indexOf,s=r(7748),u=n([].push);e.exports=function(e,t){var r,n=o(e),c=0,f=[];for(r in n)!i(s,r)&&i(n,r)&&u(f,r);for(;t.length>c;)i(n,r=t[c++])&&(~a(f,r)||u(f,r));return f}},4771:(e,t,r)=>{var n=r(5629),i=r(6759);e.exports=Object.keys||function keys(e){return n(e,i)}},6760:(e,t)=>{"use strict";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,i=n&&!r.call({1:2},1);t.f=i?function propertyIsEnumerable(e){var t=n(this,e);return!!t&&t.enumerable}:r},9811:(e,t,r)=>{var n=r(8834),i=r(7475),o=r(941),a=TypeError;e.exports=function(e,t){var r,s;if("string"===t&&i(r=e.toString)&&!o(s=n(r,e)))return s;if(i(r=e.valueOf)&&!o(s=n(r,e)))return s;if("string"!==t&&i(r=e.toString)&&!o(s=n(r,e)))return s;throw a("Can't convert object to primitive value")}},4058:e=>{e.exports={}},8219:(e,t,r)=>{var n=r(2119),i=TypeError;e.exports=function(e){if(n(e))throw i("Can't call method on "+e);return e}},3030:(e,t,r)=>{var n=r(1899),i=r(5609),o="__core-js_shared__",a=n[o]||i(o,{});e.exports=a},8726:(e,t,r)=>{var n=r(2529),i=r(3030);(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.31.1",mode:n?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.31.1/LICENSE",source:"https://github.com/zloirock/core-js"})},3405:(e,t,r)=>{var n=r(3385),i=r(5981),o=r(1899).String;e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol();return!o(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},9413:(e,t,r)=>{var n=r(2435),i=Math.max,o=Math.min;e.exports=function(e,t){var r=n(e);return r<0?i(r+t,0):o(r,t)}},4529:(e,t,r)=>{var n=r(7026),i=r(8219);e.exports=function(e){return n(i(e))}},2435:(e,t,r)=>{var n=r(5331);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},3057:(e,t,r)=>{var n=r(2435),i=Math.min;e.exports=function(e){return e>0?i(n(e),9007199254740991):0}},9678:(e,t,r)=>{var n=r(8219),i=Object;e.exports=function(e){return i(n(e))}},6935:(e,t,r)=>{var n=r(8834),i=r(941),o=r(6664),a=r(4229),s=r(9811),u=r(9813),c=TypeError,f=u("toPrimitive");e.exports=function(e,t){if(!i(e)||o(e))return e;var r,u=a(e,f);if(u){if(void 0===t&&(t="default"),r=n(u,e,t),!i(r)||o(r))return r;throw c("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},3894:(e,t,r)=>{var n=r(6935),i=r(6664);e.exports=function(e){var t=n(e,"string");return i(t)?t:t+""}},9826:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},9418:(e,t,r)=>{var n=r(5329),i=0,o=Math.random(),a=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++i+o,36)}},2302:(e,t,r)=>{var n=r(3405);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3937:(e,t,r)=>{var n=r(5746),i=r(5981);e.exports=n&&i((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},9813:(e,t,r)=>{var n=r(1899),i=r(8726),o=r(953),a=r(9418),s=r(3405),u=r(2302),c=n.Symbol,f=i("wks"),l=u?c.for||c:c&&c.withoutSetter||a;e.exports=function(e){return o(f,e)||(f[e]=s&&o(c,e)?c[e]:l("Symbol."+e)),f[e]}},3381:(e,t,r)=>{var n=r(6887),i=r(8308);n({target:"Function",proto:!0,forced:Function.bind!==i},{bind:i})},9221:(e,t,r)=>{var n=r(6887),i=r(4420);n({target:"Object",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},8196:(e,t,r)=>{var n=r(6246);e.exports=n},3383:(e,t,r)=>{var n=r(5999);e.exports=n},8269:function(e,t,r){var n;n=void 0!==r.g?r.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var cssEscape=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var t,r=String(e),n=r.length,i=-1,o="",a=r.charCodeAt(0);++i=1&&t<=31||127==t||0==i&&t>=48&&t<=57||1==i&&t>=48&&t<=57&&45==a?"\\"+t.toString(16)+" ":0==i&&1==n&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?"\\"+r.charAt(i):r.charAt(i):o+="�";return o};return e.CSS||(e.CSS={}),e.CSS.escape=cssEscape,cssEscape}(n)},645:(e,t)=>{t.read=function(e,t,r,n,i){var o,a,s=8*i-n-1,u=(1<>1,f=-7,l=r?i-1:0,h=r?-1:1,p=e[t+l];for(l+=h,o=p&(1<<-f)-1,p>>=-f,f+=s;f>0;o=256*o+e[t+l],l+=h,f-=8);for(a=o&(1<<-f)-1,o>>=-f,f+=n;f>0;a=256*a+e[t+l],l+=h,f-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,n),o-=c}return(p?-1:1)*a*Math.pow(2,o-n)},t.write=function(e,t,r,n,i,o){var a,s,u,c=8*o-i-1,f=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,_=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=f):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),(t+=a+l>=1?h/u:h*Math.pow(2,1-l))*u>=2&&(a++,u/=2),a+l>=f?(s=0,a=f):a+l>=1?(s=(t*u-1)*Math.pow(2,i),a+=l):(s=t*Math.pow(2,l-1)*Math.pow(2,i),a=0));i>=8;e[r+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;e[r+p]=255&a,p+=d,a/=256,c-=8);e[r+p-d]|=128*_}},3393:function(e){e.exports=function(){"use strict";var e=Array.prototype.slice;function createClass(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function Iterable(e){return isIterable(e)?e:Seq(e)}function KeyedIterable(e){return isKeyed(e)?e:KeyedSeq(e)}function IndexedIterable(e){return isIndexed(e)?e:IndexedSeq(e)}function SetIterable(e){return isIterable(e)&&!isAssociative(e)?e:SetSeq(e)}function isIterable(e){return!(!e||!e[t])}function isKeyed(e){return!(!e||!e[r])}function isIndexed(e){return!(!e||!e[n])}function isAssociative(e){return isKeyed(e)||isIndexed(e)}function isOrdered(e){return!(!e||!e[i])}createClass(KeyedIterable,Iterable),createClass(IndexedIterable,Iterable),createClass(SetIterable,Iterable),Iterable.isIterable=isIterable,Iterable.isKeyed=isKeyed,Iterable.isIndexed=isIndexed,Iterable.isAssociative=isAssociative,Iterable.isOrdered=isOrdered,Iterable.Keyed=KeyedIterable,Iterable.Indexed=IndexedIterable,Iterable.Set=SetIterable;var t="@@__IMMUTABLE_ITERABLE__@@",r="@@__IMMUTABLE_KEYED__@@",n="@@__IMMUTABLE_INDEXED__@@",i="@@__IMMUTABLE_ORDERED__@@",o="delete",a=5,s=1<>>0;if(""+r!==t||4294967295===r)return NaN;t=r}return t<0?ensureSize(e)+t:t}function returnTrue(){return!0}function wholeSlice(e,t,r){return(0===e||void 0!==r&&e<=-r)&&(void 0===t||void 0!==r&&t>=r)}function resolveBegin(e,t){return resolveIndex(e,t,0)}function resolveEnd(e,t){return resolveIndex(e,t,t)}function resolveIndex(e,t,r){return void 0===e?r:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var h=0,p=1,d=2,_="function"==typeof Symbol&&Symbol.iterator,g="@@iterator",v=_||g;function Iterator(e){this.next=e}function iteratorValue(e,t,r,n){var i=0===e?t:1===e?r:[t,r];return n?n.value=i:n={value:i,done:!1},n}function iteratorDone(){return{value:void 0,done:!0}}function hasIterator(e){return!!getIteratorFn(e)}function isIterator(e){return e&&"function"==typeof e.next}function getIterator(e){var t=getIteratorFn(e);return t&&t.call(e)}function getIteratorFn(e){var t=e&&(_&&e[_]||e[g]);if("function"==typeof t)return t}function isArrayLike(e){return e&&"number"==typeof e.length}function Seq(e){return null==e?emptySequence():isIterable(e)?e.toSeq():seqFromValue(e)}function KeyedSeq(e){return null==e?emptySequence().toKeyedSeq():isIterable(e)?isKeyed(e)?e.toSeq():e.fromEntrySeq():keyedSeqFromValue(e)}function IndexedSeq(e){return null==e?emptySequence():isIterable(e)?isKeyed(e)?e.entrySeq():e.toIndexedSeq():indexedSeqFromValue(e)}function SetSeq(e){return(null==e?emptySequence():isIterable(e)?isKeyed(e)?e.entrySeq():e:indexedSeqFromValue(e)).toSetSeq()}Iterator.prototype.toString=function(){return"[Iterator]"},Iterator.KEYS=h,Iterator.VALUES=p,Iterator.ENTRIES=d,Iterator.prototype.inspect=Iterator.prototype.toSource=function(){return this.toString()},Iterator.prototype[v]=function(){return this},createClass(Seq,Iterable),Seq.of=function(){return Seq(arguments)},Seq.prototype.toSeq=function(){return this},Seq.prototype.toString=function(){return this.__toString("Seq {","}")},Seq.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},Seq.prototype.__iterate=function(e,t){return seqIterate(this,e,t,!0)},Seq.prototype.__iterator=function(e,t){return seqIterator(this,e,t,!0)},createClass(KeyedSeq,Seq),KeyedSeq.prototype.toKeyedSeq=function(){return this},createClass(IndexedSeq,Seq),IndexedSeq.of=function(){return IndexedSeq(arguments)},IndexedSeq.prototype.toIndexedSeq=function(){return this},IndexedSeq.prototype.toString=function(){return this.__toString("Seq [","]")},IndexedSeq.prototype.__iterate=function(e,t){return seqIterate(this,e,t,!1)},IndexedSeq.prototype.__iterator=function(e,t){return seqIterator(this,e,t,!1)},createClass(SetSeq,Seq),SetSeq.of=function(){return SetSeq(arguments)},SetSeq.prototype.toSetSeq=function(){return this},Seq.isSeq=isSeq,Seq.Keyed=KeyedSeq,Seq.Set=SetSeq,Seq.Indexed=IndexedSeq;var m,b,w,I="@@__IMMUTABLE_SEQ__@@";function ArraySeq(e){this._array=e,this.size=e.length}function ObjectSeq(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function IterableSeq(e){this._iterable=e,this.size=e.length||e.size}function IteratorSeq(e){this._iterator=e,this._iteratorCache=[]}function isSeq(e){return!(!e||!e[I])}function emptySequence(){return m||(m=new ArraySeq([]))}function keyedSeqFromValue(e){var t=Array.isArray(e)?new ArraySeq(e).fromEntrySeq():isIterator(e)?new IteratorSeq(e).fromEntrySeq():hasIterator(e)?new IterableSeq(e).fromEntrySeq():"object"==typeof e?new ObjectSeq(e):void 0;if(!t)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+e);return t}function indexedSeqFromValue(e){var t=maybeIndexedSeqFromValue(e);if(!t)throw new TypeError("Expected Array or iterable object of values: "+e);return t}function seqFromValue(e){var t=maybeIndexedSeqFromValue(e)||"object"==typeof e&&new ObjectSeq(e);if(!t)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+e);return t}function maybeIndexedSeqFromValue(e){return isArrayLike(e)?new ArraySeq(e):isIterator(e)?new IteratorSeq(e):hasIterator(e)?new IterableSeq(e):void 0}function seqIterate(e,t,r,n){var i=e._cache;if(i){for(var o=i.length-1,a=0;a<=o;a++){var s=i[r?o-a:a];if(!1===t(s[1],n?s[0]:a,e))return a+1}return a}return e.__iterateUncached(t,r)}function seqIterator(e,t,r,n){var i=e._cache;if(i){var o=i.length-1,a=0;return new Iterator((function(){var e=i[r?o-a:a];return a++>o?iteratorDone():iteratorValue(t,n?e[0]:a-1,e[1])}))}return e.__iteratorUncached(t,r)}function fromJS(e,t){return t?fromJSWith(t,e,"",{"":e}):fromJSDefault(e)}function fromJSWith(e,t,r,n){return Array.isArray(t)?e.call(n,r,IndexedSeq(t).map((function(r,n){return fromJSWith(e,r,n,t)}))):isPlainObj(t)?e.call(n,r,KeyedSeq(t).map((function(r,n){return fromJSWith(e,r,n,t)}))):t}function fromJSDefault(e){return Array.isArray(e)?IndexedSeq(e).map(fromJSDefault).toList():isPlainObj(e)?KeyedSeq(e).map(fromJSDefault).toMap():e}function isPlainObj(e){return e&&(e.constructor===Object||void 0===e.constructor)}function is(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if("function"==typeof e.valueOf&&"function"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!("function"!=typeof e.equals||"function"!=typeof t.equals||!e.equals(t))}function deepEqual(e,t){if(e===t)return!0;if(!isIterable(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||isKeyed(e)!==isKeyed(t)||isIndexed(e)!==isIndexed(t)||isOrdered(e)!==isOrdered(t))return!1;if(0===e.size&&0===t.size)return!0;var r=!isAssociative(e);if(isOrdered(e)){var n=e.entries();return t.every((function(e,t){var i=n.next().value;return i&&is(i[1],e)&&(r||is(i[0],t))}))&&n.next().done}var i=!1;if(void 0===e.size)if(void 0===t.size)"function"==typeof e.cacheResult&&e.cacheResult();else{i=!0;var o=e;e=t,t=o}var a=!0,s=t.__iterate((function(t,n){if(r?!e.has(t):i?!is(t,e.get(n,c)):!is(e.get(n,c),t))return a=!1,!1}));return a&&e.size===s}function Repeat(e,t){if(!(this instanceof Repeat))return new Repeat(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(b)return b;b=this}}function invariant(e,t){if(!e)throw new Error(t)}function Range(e,t,r){if(!(this instanceof Range))return new Range(e,t,r);if(invariant(0!==r,"Cannot step a Range by 0"),e=e||0,void 0===t&&(t=1/0),r=void 0===r?1:Math.abs(r),tn?iteratorDone():iteratorValue(e,i,r[t?n-i++:i++])}))},createClass(ObjectSeq,KeyedSeq),ObjectSeq.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ObjectSeq.prototype.has=function(e){return this._object.hasOwnProperty(e)},ObjectSeq.prototype.__iterate=function(e,t){for(var r=this._object,n=this._keys,i=n.length-1,o=0;o<=i;o++){var a=n[t?i-o:o];if(!1===e(r[a],a,this))return o+1}return o},ObjectSeq.prototype.__iterator=function(e,t){var r=this._object,n=this._keys,i=n.length-1,o=0;return new Iterator((function(){var a=n[t?i-o:o];return o++>i?iteratorDone():iteratorValue(e,a,r[a])}))},ObjectSeq.prototype[i]=!0,createClass(IterableSeq,IndexedSeq),IterableSeq.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var r=getIterator(this._iterable),n=0;if(isIterator(r))for(var i;!(i=r.next()).done&&!1!==e(i.value,n++,this););return n},IterableSeq.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var r=getIterator(this._iterable);if(!isIterator(r))return new Iterator(iteratorDone);var n=0;return new Iterator((function(){var t=r.next();return t.done?t:iteratorValue(e,n++,t.value)}))},createClass(IteratorSeq,IndexedSeq),IteratorSeq.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var r,n=this._iterator,i=this._iteratorCache,o=0;o=n.length){var t=r.next();if(t.done)return t;n[i]=t.value}return iteratorValue(e,i,n[i++])}))},createClass(Repeat,IndexedSeq),Repeat.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Repeat.prototype.get=function(e,t){return this.has(e)?this._value:t},Repeat.prototype.includes=function(e){return is(this._value,e)},Repeat.prototype.slice=function(e,t){var r=this.size;return wholeSlice(e,t,r)?this:new Repeat(this._value,resolveEnd(t,r)-resolveBegin(e,r))},Repeat.prototype.reverse=function(){return this},Repeat.prototype.indexOf=function(e){return is(this._value,e)?0:-1},Repeat.prototype.lastIndexOf=function(e){return is(this._value,e)?this.size:-1},Repeat.prototype.__iterate=function(e,t){for(var r=0;r=0&&t=0&&rr?iteratorDone():iteratorValue(e,o++,a)}))},Range.prototype.equals=function(e){return e instanceof Range?this._start===e._start&&this._end===e._end&&this._step===e._step:deepEqual(this,e)},createClass(Collection,Iterable),createClass(KeyedCollection,Collection),createClass(IndexedCollection,Collection),createClass(SetCollection,Collection),Collection.Keyed=KeyedCollection,Collection.Indexed=IndexedCollection,Collection.Set=SetCollection;var x="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function imul(e,t){var r=65535&(e|=0),n=65535&(t|=0);return r*n+((e>>>16)*n+r*(t>>>16)<<16>>>0)|0};function smi(e){return e>>>1&1073741824|3221225471&e}function hash(e){if(!1===e||null==e)return 0;if("function"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if("number"===t){if(e!=e||e===1/0)return 0;var r=0|e;for(r!==e&&(r^=4294967295*e);e>4294967295;)r^=e/=4294967295;return smi(r)}if("string"===t)return e.length>T?cachedHashString(e):hashString(e);if("function"==typeof e.hashCode)return e.hashCode();if("object"===t)return hashJSObj(e);if("function"==typeof e.toString)return hashString(e.toString());throw new Error("Value type "+t+" cannot be hashed.")}function cachedHashString(e){var t=U[e];return void 0===t&&(t=hashString(e),F===R&&(F=0,U={}),F++,U[e]=t),t}function hashString(e){for(var t=0,r=0;r0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var A,M="function"==typeof WeakMap;M&&(A=new WeakMap);var q=0,j="__immutablehash__";"function"==typeof Symbol&&(j=Symbol(j));var T=16,R=255,F=0,U={};function assertNotInfinite(e){invariant(e!==1/0,"Cannot perform this action with an infinite size.")}function Map(e){return null==e?emptyMap():isMap(e)&&!isOrdered(e)?e:emptyMap().withMutations((function(t){var r=KeyedIterable(e);assertNotInfinite(r.size),r.forEach((function(e,r){return t.set(r,e)}))}))}function isMap(e){return!(!e||!e[V])}createClass(Map,KeyedCollection),Map.of=function(){var t=e.call(arguments,0);return emptyMap().withMutations((function(e){for(var r=0;r=t.length)throw new Error("Missing value for key: "+t[r]);e.set(t[r],t[r+1])}}))},Map.prototype.toString=function(){return this.__toString("Map {","}")},Map.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},Map.prototype.set=function(e,t){return updateMap(this,e,t)},Map.prototype.setIn=function(e,t){return this.updateIn(e,c,(function(){return t}))},Map.prototype.remove=function(e){return updateMap(this,e,c)},Map.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return c}))},Map.prototype.update=function(e,t,r){return 1===arguments.length?e(this):this.updateIn([e],t,r)},Map.prototype.updateIn=function(e,t,r){r||(r=t,t=void 0);var n=updateInDeepMap(this,forceIterator(e),t,r);return n===c?void 0:n},Map.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):emptyMap()},Map.prototype.merge=function(){return mergeIntoMapWith(this,void 0,arguments)},Map.prototype.mergeWith=function(t){return mergeIntoMapWith(this,t,e.call(arguments,1))},Map.prototype.mergeIn=function(t){var r=e.call(arguments,1);return this.updateIn(t,emptyMap(),(function(e){return"function"==typeof e.merge?e.merge.apply(e,r):r[r.length-1]}))},Map.prototype.mergeDeep=function(){return mergeIntoMapWith(this,deepMerger,arguments)},Map.prototype.mergeDeepWith=function(t){var r=e.call(arguments,1);return mergeIntoMapWith(this,deepMergerWith(t),r)},Map.prototype.mergeDeepIn=function(t){var r=e.call(arguments,1);return this.updateIn(t,emptyMap(),(function(e){return"function"==typeof e.mergeDeep?e.mergeDeep.apply(e,r):r[r.length-1]}))},Map.prototype.sort=function(e){return OrderedMap(sortFactory(this,e))},Map.prototype.sortBy=function(e,t){return OrderedMap(sortFactory(this,t,e))},Map.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},Map.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new OwnerID)},Map.prototype.asImmutable=function(){return this.__ensureOwner()},Map.prototype.wasAltered=function(){return this.__altered},Map.prototype.__iterator=function(e,t){return new MapIterator(this,e,t)},Map.prototype.__iterate=function(e,t){var r=this,n=0;return this._root&&this._root.iterate((function(t){return n++,e(t[1],t[0],r)}),t),n},Map.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?makeMap(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Map.isMap=isMap;var W,V="@@__IMMUTABLE_MAP__@@",$=Map.prototype;function ArrayMapNode(e,t){this.ownerID=e,this.entries=t}function BitmapIndexedNode(e,t,r){this.ownerID=e,this.bitmap=t,this.nodes=r}function HashArrayMapNode(e,t,r){this.ownerID=e,this.count=t,this.nodes=r}function HashCollisionNode(e,t,r){this.ownerID=e,this.keyHash=t,this.entries=r}function ValueNode(e,t,r){this.ownerID=e,this.keyHash=t,this.entry=r}function MapIterator(e,t,r){this._type=t,this._reverse=r,this._stack=e._root&&mapIteratorFrame(e._root)}function mapIteratorValue(e,t){return iteratorValue(e,t[0],t[1])}function mapIteratorFrame(e,t){return{node:e,index:0,__prev:t}}function makeMap(e,t,r,n){var i=Object.create($);return i.size=e,i._root=t,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function emptyMap(){return W||(W=makeMap(0))}function updateMap(e,t,r){var n,i;if(e._root){var o=MakeRef(f),a=MakeRef(l);if(n=updateNode(e._root,e.__ownerID,0,void 0,t,r,o,a),!a.value)return e;i=e.size+(o.value?r===c?-1:1:0)}else{if(r===c)return e;i=1,n=new ArrayMapNode(e.__ownerID,[[t,r]])}return e.__ownerID?(e.size=i,e._root=n,e.__hash=void 0,e.__altered=!0,e):n?makeMap(i,n):emptyMap()}function updateNode(e,t,r,n,i,o,a,s){return e?e.update(t,r,n,i,o,a,s):o===c?e:(SetRef(s),SetRef(a),new ValueNode(t,n,[i,o]))}function isLeafNode(e){return e.constructor===ValueNode||e.constructor===HashCollisionNode}function mergeIntoNode(e,t,r,n,i){if(e.keyHash===n)return new HashCollisionNode(t,n,[e.entry,i]);var o,s=(0===r?e.keyHash:e.keyHash>>>r)&u,c=(0===r?n:n>>>r)&u;return new BitmapIndexedNode(t,1<>>=1)a[u]=1&r?t[o++]:void 0;return a[n]=i,new HashArrayMapNode(e,o+1,a)}function mergeIntoMapWith(e,t,r){for(var n=[],i=0;i>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function setIn(e,t,r,n){var i=n?e:arrCopy(e);return i[t]=r,i}function spliceIn(e,t,r,n){var i=e.length+1;if(n&&t+1===i)return e[t]=r,e;for(var o=new Array(i),a=0,s=0;s=H)return createNodes(e,u,n,i);var p=e&&e===this.ownerID,d=p?u:arrCopy(u);return h?s?f===l-1?d.pop():d[f]=d.pop():d[f]=[n,i]:d.push([n,i]),p?(this.entries=d,this):new ArrayMapNode(e,d)}},BitmapIndexedNode.prototype.get=function(e,t,r,n){void 0===t&&(t=hash(r));var i=1<<((0===e?t:t>>>e)&u),o=this.bitmap;return 0==(o&i)?n:this.nodes[popCount(o&i-1)].get(e+a,t,r,n)},BitmapIndexedNode.prototype.update=function(e,t,r,n,i,o,s){void 0===r&&(r=hash(n));var f=(0===t?r:r>>>t)&u,l=1<=Z)return expandNodes(e,_,h,f,v);if(p&&!v&&2===_.length&&isLeafNode(_[1^d]))return _[1^d];if(p&&v&&1===_.length&&isLeafNode(v))return v;var m=e&&e===this.ownerID,b=p?v?h:h^l:h|l,w=p?v?setIn(_,d,v,m):spliceOut(_,d,m):spliceIn(_,d,v,m);return m?(this.bitmap=b,this.nodes=w,this):new BitmapIndexedNode(e,b,w)},HashArrayMapNode.prototype.get=function(e,t,r,n){void 0===t&&(t=hash(r));var i=(0===e?t:t>>>e)&u,o=this.nodes[i];return o?o.get(e+a,t,r,n):n},HashArrayMapNode.prototype.update=function(e,t,r,n,i,o,s){void 0===r&&(r=hash(n));var f=(0===t?r:r>>>t)&u,l=i===c,h=this.nodes,p=h[f];if(l&&!p)return this;var d=updateNode(p,e,t+a,r,n,i,o,s);if(d===p)return this;var _=this.count;if(p){if(!d&&--_0&&n=0&&e>>t&u;if(n>=this.array.length)return new VNode([],e);var i,o=0===n;if(t>0){var s=this.array[n];if((i=s&&s.removeBefore(e,t-a,r))===s&&o)return this}if(o&&!i)return this;var c=editableVNode(this,e);if(!o)for(var f=0;f>>t&u;if(i>=this.array.length)return this;if(t>0){var o=this.array[i];if((n=o&&o.removeAfter(e,t-a,r))===o&&i===this.array.length-1)return this}var s=editableVNode(this,e);return s.array.splice(i+1),n&&(s.array[i]=n),s};var ee,te,re={};function iterateList(e,t){var r=e._origin,n=e._capacity,i=getTailOffset(n),o=e._tail;return iterateNodeOrLeaf(e._root,e._level,0);function iterateNodeOrLeaf(e,t,r){return 0===t?iterateLeaf(e,r):iterateNode(e,t,r)}function iterateLeaf(e,a){var u=a===i?o&&o.array:e&&e.array,c=a>r?0:r-a,f=n-a;return f>s&&(f=s),function(){if(c===f)return re;var e=t?--f:c++;return u&&u[e]}}function iterateNode(e,i,o){var u,c=e&&e.array,f=o>r?0:r-o>>i,l=1+(n-o>>i);return l>s&&(l=s),function(){for(;;){if(u){var e=u();if(e!==re)return e;u=null}if(f===l)return re;var r=t?--l:f++;u=iterateNodeOrLeaf(c&&c[r],i-a,o+(r<=e.size||t<0)return e.withMutations((function(e){t<0?setListBounds(e,t).set(0,r):setListBounds(e,0,t+1).set(t,r)}));t+=e._origin;var n=e._tail,i=e._root,o=MakeRef(l);return t>=getTailOffset(e._capacity)?n=updateVNode(n,e.__ownerID,0,t,r,o):i=updateVNode(i,e.__ownerID,e._level,t,r,o),o.value?e.__ownerID?(e._root=i,e._tail=n,e.__hash=void 0,e.__altered=!0,e):makeList(e._origin,e._capacity,e._level,i,n):e}function updateVNode(e,t,r,n,i,o){var s,c=n>>>r&u,f=e&&c0){var l=e&&e.array[c],h=updateVNode(l,t,r-a,n,i,o);return h===l?e:((s=editableVNode(e,t)).array[c]=h,s)}return f&&e.array[c]===i?e:(SetRef(o),s=editableVNode(e,t),void 0===i&&c===s.array.length-1?s.array.pop():s.array[c]=i,s)}function editableVNode(e,t){return t&&e&&t===e.ownerID?e:new VNode(e?e.array.slice():[],t)}function listNodeFor(e,t){if(t>=getTailOffset(e._capacity))return e._tail;if(t<1<0;)r=r.array[t>>>n&u],n-=a;return r}}function setListBounds(e,t,r){void 0!==t&&(t|=0),void 0!==r&&(r|=0);var n=e.__ownerID||new OwnerID,i=e._origin,o=e._capacity,s=i+t,c=void 0===r?o:r<0?o+r:i+r;if(s===i&&c===o)return e;if(s>=c)return e.clear();for(var f=e._level,l=e._root,h=0;s+h<0;)l=new VNode(l&&l.array.length?[void 0,l]:[],n),h+=1<<(f+=a);h&&(s+=h,i+=h,c+=h,o+=h);for(var p=getTailOffset(o),d=getTailOffset(c);d>=1<p?new VNode([],n):_;if(_&&d>p&&sa;m-=a){var b=p>>>m&u;v=v.array[b]=editableVNode(v.array[b],n)}v.array[p>>>a&u]=_}if(c=d)s-=d,c-=d,f=a,l=null,g=g&&g.removeBefore(n,0,s);else if(s>i||d>>f&u;if(w!==d>>>f&u)break;w&&(h+=(1<i&&(l=l.removeBefore(n,f,s-h)),l&&di&&(i=s.size),isIterable(a)||(s=s.map((function(e){return fromJS(e)}))),n.push(s)}return i>e.size&&(e=e.setSize(i)),mergeIntoCollectionWith(e,t,n)}function getTailOffset(e){return e>>a<=s&&a.size>=2*o.size?(n=(i=a.filter((function(e,t){return void 0!==e&&u!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(n.__ownerID=i.__ownerID=e.__ownerID)):(n=o.remove(t),i=u===a.size-1?a.pop():a.set(u,void 0))}else if(f){if(r===a.get(u)[1])return e;n=o,i=a.set(u,[t,r])}else n=o.set(t,a.size),i=a.set(a.size,[t,r]);return e.__ownerID?(e.size=n.size,e._map=n,e._list=i,e.__hash=void 0,e):makeOrderedMap(n,i)}function ToKeyedSequence(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function ToIndexedSequence(e){this._iter=e,this.size=e.size}function ToSetSequence(e){this._iter=e,this.size=e.size}function FromEntriesSequence(e){this._iter=e,this.size=e.size}function flipFactory(e){var t=makeSequence(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=cacheResultThrough,t.__iterateUncached=function(t,r){var n=this;return e.__iterate((function(e,r){return!1!==t(r,e,n)}),r)},t.__iteratorUncached=function(t,r){if(t===d){var n=e.__iterator(t,r);return new Iterator((function(){var e=n.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===p?h:p,r)},t}function mapFactory(e,t,r){var n=makeSequence(e);return n.size=e.size,n.has=function(t){return e.has(t)},n.get=function(n,i){var o=e.get(n,c);return o===c?i:t.call(r,o,n,e)},n.__iterateUncached=function(n,i){var o=this;return e.__iterate((function(e,i,a){return!1!==n(t.call(r,e,i,a),i,o)}),i)},n.__iteratorUncached=function(n,i){var o=e.__iterator(d,i);return new Iterator((function(){var i=o.next();if(i.done)return i;var a=i.value,s=a[0];return iteratorValue(n,s,t.call(r,a[1],s,e),i)}))},n}function reverseFactory(e,t){var r=makeSequence(e);return r._iter=e,r.size=e.size,r.reverse=function(){return e},e.flip&&(r.flip=function(){var t=flipFactory(e);return t.reverse=function(){return e.flip()},t}),r.get=function(r,n){return e.get(t?r:-1-r,n)},r.has=function(r){return e.has(t?r:-1-r)},r.includes=function(t){return e.includes(t)},r.cacheResult=cacheResultThrough,r.__iterate=function(t,r){var n=this;return e.__iterate((function(e,r){return t(e,r,n)}),!r)},r.__iterator=function(t,r){return e.__iterator(t,!r)},r}function filterFactory(e,t,r,n){var i=makeSequence(e);return n&&(i.has=function(n){var i=e.get(n,c);return i!==c&&!!t.call(r,i,n,e)},i.get=function(n,i){var o=e.get(n,c);return o!==c&&t.call(r,o,n,e)?o:i}),i.__iterateUncached=function(i,o){var a=this,s=0;return e.__iterate((function(e,o,u){if(t.call(r,e,o,u))return s++,i(e,n?o:s-1,a)}),o),s},i.__iteratorUncached=function(i,o){var a=e.__iterator(d,o),s=0;return new Iterator((function(){for(;;){var o=a.next();if(o.done)return o;var u=o.value,c=u[0],f=u[1];if(t.call(r,f,c,e))return iteratorValue(i,n?c:s++,f,o)}}))},i}function countByFactory(e,t,r){var n=Map().asMutable();return e.__iterate((function(i,o){n.update(t.call(r,i,o,e),0,(function(e){return e+1}))})),n.asImmutable()}function groupByFactory(e,t,r){var n=isKeyed(e),i=(isOrdered(e)?OrderedMap():Map()).asMutable();e.__iterate((function(o,a){i.update(t.call(r,o,a,e),(function(e){return(e=e||[]).push(n?[a,o]:o),e}))}));var o=iterableClass(e);return i.map((function(t){return reify(e,o(t))}))}function sliceFactory(e,t,r,n){var i=e.size;if(void 0!==t&&(t|=0),void 0!==r&&(r===1/0?r=i:r|=0),wholeSlice(t,r,i))return e;var o=resolveBegin(t,i),a=resolveEnd(r,i);if(o!=o||a!=a)return sliceFactory(e.toSeq().cacheResult(),t,r,n);var s,u=a-o;u==u&&(s=u<0?0:u);var c=makeSequence(e);return c.size=0===s?s:e.size&&s||void 0,!n&&isSeq(e)&&s>=0&&(c.get=function(t,r){return(t=wrapIndex(this,t))>=0&&ts)return iteratorDone();var e=i.next();return n||t===p?e:iteratorValue(t,u-1,t===h?void 0:e.value[1],e)}))},c}function takeWhileFactory(e,t,r){var n=makeSequence(e);return n.__iterateUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterate(n,i);var a=0;return e.__iterate((function(e,i,s){return t.call(r,e,i,s)&&++a&&n(e,i,o)})),a},n.__iteratorUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterator(n,i);var a=e.__iterator(d,i),s=!0;return new Iterator((function(){if(!s)return iteratorDone();var e=a.next();if(e.done)return e;var i=e.value,u=i[0],c=i[1];return t.call(r,c,u,o)?n===d?e:iteratorValue(n,u,c,e):(s=!1,iteratorDone())}))},n}function skipWhileFactory(e,t,r,n){var i=makeSequence(e);return i.__iterateUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,u=0;return e.__iterate((function(e,o,c){if(!s||!(s=t.call(r,e,o,c)))return u++,i(e,n?o:u-1,a)})),u},i.__iteratorUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterator(i,o);var s=e.__iterator(d,o),u=!0,c=0;return new Iterator((function(){var e,o,f;do{if((e=s.next()).done)return n||i===p?e:iteratorValue(i,c++,i===h?void 0:e.value[1],e);var l=e.value;o=l[0],f=l[1],u&&(u=t.call(r,f,o,a))}while(u);return i===d?e:iteratorValue(i,o,f,e)}))},i}function concatFactory(e,t){var r=isKeyed(e),n=[e].concat(t).map((function(e){return isIterable(e)?r&&(e=KeyedIterable(e)):e=r?keyedSeqFromValue(e):indexedSeqFromValue(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===n.length)return e;if(1===n.length){var i=n[0];if(i===e||r&&isKeyed(i)||isIndexed(e)&&isIndexed(i))return i}var o=new ArraySeq(n);return r?o=o.toKeyedSeq():isIndexed(e)||(o=o.toSetSeq()),(o=o.flatten(!0)).size=n.reduce((function(e,t){if(void 0!==e){var r=t.size;if(void 0!==r)return e+r}}),0),o}function flattenFactory(e,t,r){var n=makeSequence(e);return n.__iterateUncached=function(n,i){var o=0,a=!1;function flatDeep(e,s){var u=this;e.__iterate((function(e,i){return(!t||s0}function zipWithFactory(e,t,r){var n=makeSequence(e);return n.size=new ArraySeq(r).map((function(e){return e.size})).min(),n.__iterate=function(e,t){for(var r,n=this.__iterator(p,t),i=0;!(r=n.next()).done&&!1!==e(r.value,i++,this););return i},n.__iteratorUncached=function(e,n){var i=r.map((function(e){return e=Iterable(e),getIterator(n?e.reverse():e)})),o=0,a=!1;return new Iterator((function(){var r;return a||(r=i.map((function(e){return e.next()})),a=r.some((function(e){return e.done}))),a?iteratorDone():iteratorValue(e,o++,t.apply(null,r.map((function(e){return e.value}))))}))},n}function reify(e,t){return isSeq(e)?t:e.constructor(t)}function validateEntry(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function resolveSize(e){return assertNotInfinite(e.size),ensureSize(e)}function iterableClass(e){return isKeyed(e)?KeyedIterable:isIndexed(e)?IndexedIterable:SetIterable}function makeSequence(e){return Object.create((isKeyed(e)?KeyedSeq:isIndexed(e)?IndexedSeq:SetSeq).prototype)}function cacheResultThrough(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):Seq.prototype.cacheResult.call(this)}function defaultComparator(e,t){return e>t?1:e=0;r--)t={value:arguments[r],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):makeStack(e,t)},Stack.prototype.pushAll=function(e){if(0===(e=IndexedIterable(e)).size)return this;assertNotInfinite(e.size);var t=this.size,r=this._head;return e.reverse().forEach((function(e){t++,r={value:e,next:r}})),this.__ownerID?(this.size=t,this._head=r,this.__hash=void 0,this.__altered=!0,this):makeStack(t,r)},Stack.prototype.pop=function(){return this.slice(1)},Stack.prototype.unshift=function(){return this.push.apply(this,arguments)},Stack.prototype.unshiftAll=function(e){return this.pushAll(e)},Stack.prototype.shift=function(){return this.pop.apply(this,arguments)},Stack.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):emptyStack()},Stack.prototype.slice=function(e,t){if(wholeSlice(e,t,this.size))return this;var r=resolveBegin(e,this.size);if(resolveEnd(t,this.size)!==this.size)return IndexedCollection.prototype.slice.call(this,e,t);for(var n=this.size-r,i=this._head;r--;)i=i.next;return this.__ownerID?(this.size=n,this._head=i,this.__hash=void 0,this.__altered=!0,this):makeStack(n,i)},Stack.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?makeStack(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Stack.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var r=0,n=this._head;n&&!1!==e(n.value,r++,this);)n=n.next;return r},Stack.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var r=0,n=this._head;return new Iterator((function(){if(n){var t=n.value;return n=n.next,iteratorValue(e,r++,t)}return iteratorDone()}))},Stack.isStack=isStack;var ce,fe="@@__IMMUTABLE_STACK__@@",le=Stack.prototype;function makeStack(e,t,r,n){var i=Object.create(le);return i.size=e,i._head=t,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function emptyStack(){return ce||(ce=makeStack(0))}function mixin(e,t){var keyCopier=function(r){e.prototype[r]=t[r]};return Object.keys(t).forEach(keyCopier),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(keyCopier),e}le[fe]=!0,le.withMutations=$.withMutations,le.asMutable=$.asMutable,le.asImmutable=$.asImmutable,le.wasAltered=$.wasAltered,Iterable.Iterator=Iterator,mixin(Iterable,{toArray:function(){assertNotInfinite(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,r){e[r]=t})),e},toIndexedSeq:function(){return new ToIndexedSequence(this)},toJS:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new ToKeyedSequence(this,!0)},toMap:function(){return Map(this.toKeyedSeq())},toObject:function(){assertNotInfinite(this.size);var e={};return this.__iterate((function(t,r){e[r]=t})),e},toOrderedMap:function(){return OrderedMap(this.toKeyedSeq())},toOrderedSet:function(){return OrderedSet(isKeyed(this)?this.valueSeq():this)},toSet:function(){return Set(isKeyed(this)?this.valueSeq():this)},toSetSeq:function(){return new ToSetSequence(this)},toSeq:function(){return isIndexed(this)?this.toIndexedSeq():isKeyed(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Stack(isKeyed(this)?this.valueSeq():this)},toList:function(){return List(isKeyed(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(e,t){return 0===this.size?e+t:e+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+t},concat:function(){return reify(this,concatFactory(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return is(t,e)}))},entries:function(){return this.__iterator(d)},every:function(e,t){assertNotInfinite(this.size);var r=!0;return this.__iterate((function(n,i,o){if(!e.call(t,n,i,o))return r=!1,!1})),r},filter:function(e,t){return reify(this,filterFactory(this,e,t,!0))},find:function(e,t,r){var n=this.findEntry(e,t);return n?n[1]:r},forEach:function(e,t){return assertNotInfinite(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){assertNotInfinite(this.size),e=void 0!==e?""+e:",";var t="",r=!0;return this.__iterate((function(n){r?r=!1:t+=e,t+=null!=n?n.toString():""})),t},keys:function(){return this.__iterator(h)},map:function(e,t){return reify(this,mapFactory(this,e,t))},reduce:function(e,t,r){var n,i;return assertNotInfinite(this.size),arguments.length<2?i=!0:n=t,this.__iterate((function(t,o,a){i?(i=!1,n=t):n=e.call(r,n,t,o,a)})),n},reduceRight:function(e,t,r){var n=this.toKeyedSeq().reverse();return n.reduce.apply(n,arguments)},reverse:function(){return reify(this,reverseFactory(this,!0))},slice:function(e,t){return reify(this,sliceFactory(this,e,t,!0))},some:function(e,t){return!this.every(not(e),t)},sort:function(e){return reify(this,sortFactory(this,e))},values:function(){return this.__iterator(p)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return ensureSize(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return countByFactory(this,e,t)},equals:function(e){return deepEqual(this,e)},entrySeq:function(){var e=this;if(e._cache)return new ArraySeq(e._cache);var t=e.toSeq().map(entryMapper).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(not(e),t)},findEntry:function(e,t,r){var n=r;return this.__iterate((function(r,i,o){if(e.call(t,r,i,o))return n=[i,r],!1})),n},findKey:function(e,t){var r=this.findEntry(e,t);return r&&r[0]},findLast:function(e,t,r){return this.toKeyedSeq().reverse().find(e,t,r)},findLastEntry:function(e,t,r){return this.toKeyedSeq().reverse().findEntry(e,t,r)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(returnTrue)},flatMap:function(e,t){return reify(this,flatMapFactory(this,e,t))},flatten:function(e){return reify(this,flattenFactory(this,e,!0))},fromEntrySeq:function(){return new FromEntriesSequence(this)},get:function(e,t){return this.find((function(t,r){return is(r,e)}),void 0,t)},getIn:function(e,t){for(var r,n=this,i=forceIterator(e);!(r=i.next()).done;){var o=r.value;if((n=n&&n.get?n.get(o,c):c)===c)return t}return n},groupBy:function(e,t){return groupByFactory(this,e,t)},has:function(e){return this.get(e,c)!==c},hasIn:function(e){return this.getIn(e,c)!==c},isSubset:function(e){return e="function"==typeof e.includes?e:Iterable(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e="function"==typeof e.isSubset?e:Iterable(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return is(t,e)}))},keySeq:function(){return this.toSeq().map(keyMapper).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return maxFactory(this,e)},maxBy:function(e,t){return maxFactory(this,t,e)},min:function(e){return maxFactory(this,e?neg(e):defaultNegComparator)},minBy:function(e,t){return maxFactory(this,t?neg(t):defaultNegComparator,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return reify(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return reify(this,skipWhileFactory(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(not(e),t)},sortBy:function(e,t){return reify(this,sortFactory(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return reify(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return reify(this,takeWhileFactory(this,e,t))},takeUntil:function(e,t){return this.takeWhile(not(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=hashIterable(this))}});var he=Iterable.prototype;he[t]=!0,he[v]=he.values,he.__toJS=he.toArray,he.__toStringMapper=quoteString,he.inspect=he.toSource=function(){return this.toString()},he.chain=he.flatMap,he.contains=he.includes,mixin(KeyedIterable,{flip:function(){return reify(this,flipFactory(this))},mapEntries:function(e,t){var r=this,n=0;return reify(this,this.toSeq().map((function(i,o){return e.call(t,[o,i],n++,r)})).fromEntrySeq())},mapKeys:function(e,t){var r=this;return reify(this,this.toSeq().flip().map((function(n,i){return e.call(t,n,i,r)})).flip())}});var pe=KeyedIterable.prototype;function keyMapper(e,t){return t}function entryMapper(e,t){return[t,e]}function not(e){return function(){return!e.apply(this,arguments)}}function neg(e){return function(){return-e.apply(this,arguments)}}function quoteString(e){return"string"==typeof e?JSON.stringify(e):String(e)}function defaultZipper(){return arrCopy(arguments)}function defaultNegComparator(e,t){return et?-1:0}function hashIterable(e){if(e.size===1/0)return 0;var t=isOrdered(e),r=isKeyed(e),n=t?1:0;return murmurHashOfSize(e.__iterate(r?t?function(e,t){n=31*n+hashMerge(hash(e),hash(t))|0}:function(e,t){n=n+hashMerge(hash(e),hash(t))|0}:t?function(e){n=31*n+hash(e)|0}:function(e){n=n+hash(e)|0}),n)}function murmurHashOfSize(e,t){return t=x(t,3432918353),t=x(t<<15|t>>>-15,461845907),t=x(t<<13|t>>>-13,5),t=x((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=smi((t=x(t^t>>>13,3266489909))^t>>>16)}function hashMerge(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return pe[r]=!0,pe[v]=he.entries,pe.__toJS=he.toObject,pe.__toStringMapper=function(e,t){return JSON.stringify(t)+": "+quoteString(e)},mixin(IndexedIterable,{toKeyedSeq:function(){return new ToKeyedSequence(this,!1)},filter:function(e,t){return reify(this,filterFactory(this,e,t,!1))},findIndex:function(e,t){var r=this.findEntry(e,t);return r?r[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return reify(this,reverseFactory(this,!1))},slice:function(e,t){return reify(this,sliceFactory(this,e,t,!1))},splice:function(e,t){var r=arguments.length;if(t=Math.max(0|t,0),0===r||2===r&&!t)return this;e=resolveBegin(e,e<0?this.count():this.size);var n=this.slice(0,e);return reify(this,1===r?n:n.concat(arrCopy(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var r=this.findLastEntry(e,t);return r?r[0]:-1},first:function(){return this.get(0)},flatten:function(e){return reify(this,flattenFactory(this,e,!1))},get:function(e,t){return(e=wrapIndex(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,r){return r===e}),void 0,t)},has:function(e){return(e=wrapIndex(this,e))>=0&&(void 0!==this.size?this.size===1/0||e{"function"==typeof Object.create?e.exports=function inherits(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function inherits(e,t){if(t){e.super_=t;var TempCtor=function(){};TempCtor.prototype=t.prototype,e.prototype=new TempCtor,e.prototype.constructor=e}}},8552:(e,t,r)=>{var n=r(852)(r(5639),"DataView");e.exports=n},1989:(e,t,r)=>{var n=r(1789),i=r(401),o=r(7667),a=r(1327),s=r(1866);function Hash(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t{var n=r(7040),i=r(4125),o=r(2117),a=r(7518),s=r(4705);function ListCache(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t{var n=r(852)(r(5639),"Map");e.exports=n},3369:(e,t,r)=>{var n=r(4785),i=r(1285),o=r(6e3),a=r(9916),s=r(5265);function MapCache(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t{var n=r(852)(r(5639),"Promise");e.exports=n},8525:(e,t,r)=>{var n=r(852)(r(5639),"Set");e.exports=n},8668:(e,t,r)=>{var n=r(3369),i=r(619),o=r(2385);function SetCache(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new n;++t{var n=r(8407),i=r(7465),o=r(3779),a=r(7599),s=r(4758),u=r(4309);function Stack(e){var t=this.__data__=new n(e);this.size=t.size}Stack.prototype.clear=i,Stack.prototype.delete=o,Stack.prototype.get=a,Stack.prototype.has=s,Stack.prototype.set=u,e.exports=Stack},2705:(e,t,r)=>{var n=r(5639).Symbol;e.exports=n},1149:(e,t,r)=>{var n=r(5639).Uint8Array;e.exports=n},577:(e,t,r)=>{var n=r(852)(r(5639),"WeakMap");e.exports=n},4963:e=>{e.exports=function arrayFilter(e,t){for(var r=-1,n=null==e?0:e.length,i=0,o=[];++r{var n=r(2545),i=r(5694),o=r(1469),a=r(4144),s=r(5776),u=r(6719),c=Object.prototype.hasOwnProperty;e.exports=function arrayLikeKeys(e,t){var r=o(e),f=!r&&i(e),l=!r&&!f&&a(e),h=!r&&!f&&!l&&u(e),p=r||f||l||h,d=p?n(e.length,String):[],_=d.length;for(var g in e)!t&&!c.call(e,g)||p&&("length"==g||l&&("offset"==g||"parent"==g)||h&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,_))||d.push(g);return d}},9932:e=>{e.exports=function arrayMap(e,t){for(var r=-1,n=null==e?0:e.length,i=Array(n);++r{e.exports=function arrayPush(e,t){for(var r=-1,n=t.length,i=e.length;++r{e.exports=function arrayReduce(e,t,r,n){var i=-1,o=null==e?0:e.length;for(n&&o&&(r=e[++i]);++i{e.exports=function arraySome(e,t){for(var r=-1,n=null==e?0:e.length;++r{e.exports=function asciiToArray(e){return e.split("")}},9029:e=>{var t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;e.exports=function asciiWords(e){return e.match(t)||[]}},4865:(e,t,r)=>{var n=r(9465),i=r(7813),o=Object.prototype.hasOwnProperty;e.exports=function assignValue(e,t,r){var a=e[t];o.call(e,t)&&i(a,r)&&(void 0!==r||t in e)||n(e,t,r)}},8470:(e,t,r)=>{var n=r(7813);e.exports=function assocIndexOf(e,t){for(var r=e.length;r--;)if(n(e[r][0],t))return r;return-1}},9465:(e,t,r)=>{var n=r(8777);e.exports=function baseAssignValue(e,t,r){"__proto__"==t&&n?n(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}},9881:(e,t,r)=>{var n=r(7816),i=r(9291)(n);e.exports=i},1848:e=>{e.exports=function baseFindIndex(e,t,r,n){for(var i=e.length,o=r+(n?1:-1);n?o--:++o{var n=r(5063)();e.exports=n},7816:(e,t,r)=>{var n=r(8483),i=r(3674);e.exports=function baseForOwn(e,t){return e&&n(e,t,i)}},7786:(e,t,r)=>{var n=r(1811),i=r(327);e.exports=function baseGet(e,t){for(var r=0,o=(t=n(t,e)).length;null!=e&&r{var n=r(2488),i=r(1469);e.exports=function baseGetAllKeys(e,t,r){var o=t(e);return i(e)?o:n(o,r(e))}},4239:(e,t,r)=>{var n=r(2705),i=r(9607),o=r(2333),a=n?n.toStringTag:void 0;e.exports=function baseGetTag(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?i(e):o(e)}},13:e=>{e.exports=function baseHasIn(e,t){return null!=e&&t in Object(e)}},9454:(e,t,r)=>{var n=r(4239),i=r(7005);e.exports=function baseIsArguments(e){return i(e)&&"[object Arguments]"==n(e)}},939:(e,t,r)=>{var n=r(2492),i=r(7005);e.exports=function baseIsEqual(e,t,r,o,a){return e===t||(null==e||null==t||!i(e)&&!i(t)?e!=e&&t!=t:n(e,t,r,o,baseIsEqual,a))}},2492:(e,t,r)=>{var n=r(6384),i=r(7114),o=r(8351),a=r(6096),s=r(4160),u=r(1469),c=r(4144),f=r(6719),l="[object Arguments]",h="[object Array]",p="[object Object]",d=Object.prototype.hasOwnProperty;e.exports=function baseIsEqualDeep(e,t,r,_,g,v){var m=u(e),b=u(t),w=m?h:s(e),I=b?h:s(t),x=(w=w==l?p:w)==p,B=(I=I==l?p:I)==p,k=w==I;if(k&&c(e)){if(!c(t))return!1;m=!0,x=!1}if(k&&!x)return v||(v=new n),m||f(e)?i(e,t,r,_,g,v):o(e,t,w,r,_,g,v);if(!(1&r)){var A=x&&d.call(e,"__wrapped__"),M=B&&d.call(t,"__wrapped__");if(A||M){var q=A?e.value():e,j=M?t.value():t;return v||(v=new n),g(q,j,r,_,v)}}return!!k&&(v||(v=new n),a(e,t,r,_,g,v))}},2958:(e,t,r)=>{var n=r(6384),i=r(939);e.exports=function baseIsMatch(e,t,r,o){var a=r.length,s=a,u=!o;if(null==e)return!s;for(e=Object(e);a--;){var c=r[a];if(u&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++a{var n=r(3560),i=r(5346),o=r(3218),a=r(346),s=/^\[object .+?Constructor\]$/,u=Function.prototype,c=Object.prototype,f=u.toString,l=c.hasOwnProperty,h=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function baseIsNative(e){return!(!o(e)||i(e))&&(n(e)?h:s).test(a(e))}},8749:(e,t,r)=>{var n=r(4239),i=r(1780),o=r(7005),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function baseIsTypedArray(e){return o(e)&&i(e.length)&&!!a[n(e)]}},7206:(e,t,r)=>{var n=r(1573),i=r(6432),o=r(6557),a=r(1469),s=r(9601);e.exports=function baseIteratee(e){return"function"==typeof e?e:null==e?o:"object"==typeof e?a(e)?i(e[0],e[1]):n(e):s(e)}},280:(e,t,r)=>{var n=r(5726),i=r(6916),o=Object.prototype.hasOwnProperty;e.exports=function baseKeys(e){if(!n(e))return i(e);var t=[];for(var r in Object(e))o.call(e,r)&&"constructor"!=r&&t.push(r);return t}},1573:(e,t,r)=>{var n=r(2958),i=r(1499),o=r(2634);e.exports=function baseMatches(e){var t=i(e);return 1==t.length&&t[0][2]?o(t[0][0],t[0][1]):function(r){return r===e||n(r,e,t)}}},6432:(e,t,r)=>{var n=r(939),i=r(7361),o=r(9095),a=r(5403),s=r(9162),u=r(2634),c=r(327);e.exports=function baseMatchesProperty(e,t){return a(e)&&s(t)?u(c(e),t):function(r){var a=i(r,e);return void 0===a&&a===t?o(r,e):n(t,a,3)}}},371:e=>{e.exports=function baseProperty(e){return function(t){return null==t?void 0:t[e]}}},9152:(e,t,r)=>{var n=r(7786);e.exports=function basePropertyDeep(e){return function(t){return n(t,e)}}},8674:e=>{e.exports=function basePropertyOf(e){return function(t){return null==e?void 0:e[t]}}},4259:e=>{e.exports=function baseSlice(e,t,r){var n=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(r=r>i?i:r)<0&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(i);++n{var n=r(9881);e.exports=function baseSome(e,t){var r;return n(e,(function(e,n,i){return!(r=t(e,n,i))})),!!r}},2545:e=>{e.exports=function baseTimes(e,t){for(var r=-1,n=Array(e);++r{var n=r(2705),i=r(9932),o=r(1469),a=r(3448),s=n?n.prototype:void 0,u=s?s.toString:void 0;e.exports=function baseToString(e){if("string"==typeof e)return e;if(o(e))return i(e,baseToString)+"";if(a(e))return u?u.call(e):"";var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},7561:(e,t,r)=>{var n=r(7990),i=/^\s+/;e.exports=function baseTrim(e){return e?e.slice(0,n(e)+1).replace(i,""):e}},1717:e=>{e.exports=function baseUnary(e){return function(t){return e(t)}}},1757:e=>{e.exports=function baseZipObject(e,t,r){for(var n=-1,i=e.length,o=t.length,a={};++n{e.exports=function cacheHas(e,t){return e.has(t)}},1811:(e,t,r)=>{var n=r(1469),i=r(5403),o=r(5514),a=r(9833);e.exports=function castPath(e,t){return n(e)?e:i(e,t)?[e]:o(a(e))}},180:(e,t,r)=>{var n=r(4259);e.exports=function castSlice(e,t,r){var i=e.length;return r=void 0===r?i:r,!t&&r>=i?e:n(e,t,r)}},4429:(e,t,r)=>{var n=r(5639)["__core-js_shared__"];e.exports=n},9291:(e,t,r)=>{var n=r(8612);e.exports=function createBaseEach(e,t){return function(r,i){if(null==r)return r;if(!n(r))return e(r,i);for(var o=r.length,a=t?o:-1,s=Object(r);(t?a--:++a{e.exports=function createBaseFor(e){return function(t,r,n){for(var i=-1,o=Object(t),a=n(t),s=a.length;s--;){var u=a[e?s:++i];if(!1===r(o[u],u,o))break}return t}}},8805:(e,t,r)=>{var n=r(180),i=r(2689),o=r(3140),a=r(9833);e.exports=function createCaseFirst(e){return function(t){t=a(t);var r=i(t)?o(t):void 0,s=r?r[0]:t.charAt(0),u=r?n(r,1).join(""):t.slice(1);return s[e]()+u}}},5393:(e,t,r)=>{var n=r(2663),i=r(3816),o=r(8748),a=RegExp("['’]","g");e.exports=function createCompounder(e){return function(t){return n(o(i(t).replace(a,"")),e,"")}}},7740:(e,t,r)=>{var n=r(7206),i=r(8612),o=r(3674);e.exports=function createFind(e){return function(t,r,a){var s=Object(t);if(!i(t)){var u=n(r,3);t=o(t),r=function(e){return u(s[e],e,s)}}var c=e(t,r,a);return c>-1?s[u?t[c]:c]:void 0}}},9389:(e,t,r)=>{var n=r(8674)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});e.exports=n},8777:(e,t,r)=>{var n=r(852),i=function(){try{var e=n(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=i},7114:(e,t,r)=>{var n=r(8668),i=r(2908),o=r(4757);e.exports=function equalArrays(e,t,r,a,s,u){var c=1&r,f=e.length,l=t.length;if(f!=l&&!(c&&l>f))return!1;var h=u.get(e),p=u.get(t);if(h&&p)return h==t&&p==e;var d=-1,_=!0,g=2&r?new n:void 0;for(u.set(e,t),u.set(t,e);++d{var n=r(2705),i=r(1149),o=r(7813),a=r(7114),s=r(8776),u=r(1814),c=n?n.prototype:void 0,f=c?c.valueOf:void 0;e.exports=function equalByTag(e,t,r,n,c,l,h){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!l(new i(e),new i(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return o(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var p=s;case"[object Set]":var d=1&n;if(p||(p=u),e.size!=t.size&&!d)return!1;var _=h.get(e);if(_)return _==t;n|=2,h.set(e,t);var g=a(p(e),p(t),n,c,l,h);return h.delete(e),g;case"[object Symbol]":if(f)return f.call(e)==f.call(t)}return!1}},6096:(e,t,r)=>{var n=r(8234),i=Object.prototype.hasOwnProperty;e.exports=function equalObjects(e,t,r,o,a,s){var u=1&r,c=n(e),f=c.length;if(f!=n(t).length&&!u)return!1;for(var l=f;l--;){var h=c[l];if(!(u?h in t:i.call(t,h)))return!1}var p=s.get(e),d=s.get(t);if(p&&d)return p==t&&d==e;var _=!0;s.set(e,t),s.set(t,e);for(var g=u;++l{var n="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;e.exports=n},8234:(e,t,r)=>{var n=r(8866),i=r(9551),o=r(3674);e.exports=function getAllKeys(e){return n(e,o,i)}},5050:(e,t,r)=>{var n=r(7019);e.exports=function getMapData(e,t){var r=e.__data__;return n(t)?r["string"==typeof t?"string":"hash"]:r.map}},1499:(e,t,r)=>{var n=r(9162),i=r(3674);e.exports=function getMatchData(e){for(var t=i(e),r=t.length;r--;){var o=t[r],a=e[o];t[r]=[o,a,n(a)]}return t}},852:(e,t,r)=>{var n=r(8458),i=r(7801);e.exports=function getNative(e,t){var r=i(e,t);return n(r)?r:void 0}},9607:(e,t,r)=>{var n=r(2705),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=n?n.toStringTag:void 0;e.exports=function getRawTag(e){var t=o.call(e,s),r=e[s];try{e[s]=void 0;var n=!0}catch(e){}var i=a.call(e);return n&&(t?e[s]=r:delete e[s]),i}},9551:(e,t,r)=>{var n=r(4963),i=r(479),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(e){return null==e?[]:(e=Object(e),n(a(e),(function(t){return o.call(e,t)})))}:i;e.exports=s},4160:(e,t,r)=>{var n=r(8552),i=r(7071),o=r(3818),a=r(8525),s=r(577),u=r(4239),c=r(346),f="[object Map]",l="[object Promise]",h="[object Set]",p="[object WeakMap]",d="[object DataView]",_=c(n),g=c(i),v=c(o),m=c(a),b=c(s),w=u;(n&&w(new n(new ArrayBuffer(1)))!=d||i&&w(new i)!=f||o&&w(o.resolve())!=l||a&&w(new a)!=h||s&&w(new s)!=p)&&(w=function(e){var t=u(e),r="[object Object]"==t?e.constructor:void 0,n=r?c(r):"";if(n)switch(n){case _:return d;case g:return f;case v:return l;case m:return h;case b:return p}return t}),e.exports=w},7801:e=>{e.exports=function getValue(e,t){return null==e?void 0:e[t]}},222:(e,t,r)=>{var n=r(1811),i=r(5694),o=r(1469),a=r(5776),s=r(1780),u=r(327);e.exports=function hasPath(e,t,r){for(var c=-1,f=(t=n(t,e)).length,l=!1;++c{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function hasUnicode(e){return t.test(e)}},3157:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function hasUnicodeWord(e){return t.test(e)}},1789:(e,t,r)=>{var n=r(4536);e.exports=function hashClear(){this.__data__=n?n(null):{},this.size=0}},401:e=>{e.exports=function hashDelete(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},7667:(e,t,r)=>{var n=r(4536),i=Object.prototype.hasOwnProperty;e.exports=function hashGet(e){var t=this.__data__;if(n){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return i.call(t,e)?t[e]:void 0}},1327:(e,t,r)=>{var n=r(4536),i=Object.prototype.hasOwnProperty;e.exports=function hashHas(e){var t=this.__data__;return n?void 0!==t[e]:i.call(t,e)}},1866:(e,t,r)=>{var n=r(4536);e.exports=function hashSet(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=n&&void 0===t?"__lodash_hash_undefined__":t,this}},5776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function isIndex(e,r){var n=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&t.test(e))&&e>-1&&e%1==0&&e{var n=r(7813),i=r(8612),o=r(5776),a=r(3218);e.exports=function isIterateeCall(e,t,r){if(!a(r))return!1;var s=typeof t;return!!("number"==s?i(r)&&o(t,r.length):"string"==s&&t in r)&&n(r[t],e)}},5403:(e,t,r)=>{var n=r(1469),i=r(3448),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function isKey(e,t){if(n(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!i(e))||(a.test(e)||!o.test(e)||null!=t&&e in Object(t))}},7019:e=>{e.exports=function isKeyable(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},5346:(e,t,r)=>{var n,i=r(4429),o=(n=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";e.exports=function isMasked(e){return!!o&&o in e}},5726:e=>{var t=Object.prototype;e.exports=function isPrototype(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||t)}},9162:(e,t,r)=>{var n=r(3218);e.exports=function isStrictComparable(e){return e==e&&!n(e)}},7040:e=>{e.exports=function listCacheClear(){this.__data__=[],this.size=0}},4125:(e,t,r)=>{var n=r(8470),i=Array.prototype.splice;e.exports=function listCacheDelete(e){var t=this.__data__,r=n(t,e);return!(r<0)&&(r==t.length-1?t.pop():i.call(t,r,1),--this.size,!0)}},2117:(e,t,r)=>{var n=r(8470);e.exports=function listCacheGet(e){var t=this.__data__,r=n(t,e);return r<0?void 0:t[r][1]}},7518:(e,t,r)=>{var n=r(8470);e.exports=function listCacheHas(e){return n(this.__data__,e)>-1}},4705:(e,t,r)=>{var n=r(8470);e.exports=function listCacheSet(e,t){var r=this.__data__,i=n(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this}},4785:(e,t,r)=>{var n=r(1989),i=r(8407),o=r(7071);e.exports=function mapCacheClear(){this.size=0,this.__data__={hash:new n,map:new(o||i),string:new n}}},1285:(e,t,r)=>{var n=r(5050);e.exports=function mapCacheDelete(e){var t=n(this,e).delete(e);return this.size-=t?1:0,t}},6e3:(e,t,r)=>{var n=r(5050);e.exports=function mapCacheGet(e){return n(this,e).get(e)}},9916:(e,t,r)=>{var n=r(5050);e.exports=function mapCacheHas(e){return n(this,e).has(e)}},5265:(e,t,r)=>{var n=r(5050);e.exports=function mapCacheSet(e,t){var r=n(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this}},8776:e=>{e.exports=function mapToArray(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r}},2634:e=>{e.exports=function matchesStrictComparable(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}}},4523:(e,t,r)=>{var n=r(8306);e.exports=function memoizeCapped(e){var t=n(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}},4536:(e,t,r)=>{var n=r(852)(Object,"create");e.exports=n},6916:(e,t,r)=>{var n=r(5569)(Object.keys,Object);e.exports=n},1167:(e,t,r)=>{e=r.nmd(e);var n=r(1957),i=t&&!t.nodeType&&t,o=i&&e&&!e.nodeType&&e,a=o&&o.exports===i&&n.process,s=function(){try{var e=o&&o.require&&o.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=s},2333:e=>{var t=Object.prototype.toString;e.exports=function objectToString(e){return t.call(e)}},5569:e=>{e.exports=function overArg(e,t){return function(r){return e(t(r))}}},5639:(e,t,r)=>{var n=r(1957),i="object"==typeof self&&self&&self.Object===Object&&self,o=n||i||Function("return this")();e.exports=o},619:e=>{e.exports=function setCacheAdd(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},2385:e=>{e.exports=function setCacheHas(e){return this.__data__.has(e)}},1814:e=>{e.exports=function setToArray(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r}},7465:(e,t,r)=>{var n=r(8407);e.exports=function stackClear(){this.__data__=new n,this.size=0}},3779:e=>{e.exports=function stackDelete(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}},7599:e=>{e.exports=function stackGet(e){return this.__data__.get(e)}},4758:e=>{e.exports=function stackHas(e){return this.__data__.has(e)}},4309:(e,t,r)=>{var n=r(8407),i=r(7071),o=r(3369);e.exports=function stackSet(e,t){var r=this.__data__;if(r instanceof n){var a=r.__data__;if(!i||a.length<199)return a.push([e,t]),this.size=++r.size,this;r=this.__data__=new o(a)}return r.set(e,t),this.size=r.size,this}},3140:(e,t,r)=>{var n=r(4286),i=r(2689),o=r(676);e.exports=function stringToArray(e){return i(e)?o(e):n(e)}},5514:(e,t,r)=>{var n=r(4523),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=n((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,(function(e,r,n,i){t.push(n?i.replace(o,"$1"):r||e)})),t}));e.exports=a},327:(e,t,r)=>{var n=r(3448);e.exports=function toKey(e){if("string"==typeof e||n(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},346:e=>{var t=Function.prototype.toString;e.exports=function toSource(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},7990:e=>{var t=/\s/;e.exports=function trimmedEndIndex(e){for(var r=e.length;r--&&t.test(e.charAt(r)););return r}},676:e=>{var t="\\ud800-\\udfff",r="["+t+"]",n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",o="[^"+t+"]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",u="(?:"+n+"|"+i+")"+"?",c="[\\ufe0e\\ufe0f]?",f=c+u+("(?:\\u200d(?:"+[o,a,s].join("|")+")"+c+u+")*"),l="(?:"+[o+n+"?",n,a,s,r].join("|")+")",h=RegExp(i+"(?="+i+")|"+l+f,"g");e.exports=function unicodeToArray(e){return e.match(h)||[]}},2757:e=>{var t="\\ud800-\\udfff",r="\\u2700-\\u27bf",n="a-z\\xdf-\\xf6\\xf8-\\xff",i="A-Z\\xc0-\\xd6\\xd8-\\xde",o="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",a="["+o+"]",s="\\d+",u="["+r+"]",c="["+n+"]",f="[^"+t+o+s+r+n+i+"]",l="(?:\\ud83c[\\udde6-\\uddff]){2}",h="[\\ud800-\\udbff][\\udc00-\\udfff]",p="["+i+"]",d="(?:"+c+"|"+f+")",_="(?:"+p+"|"+f+")",g="(?:['’](?:d|ll|m|re|s|t|ve))?",v="(?:['’](?:D|LL|M|RE|S|T|VE))?",m="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",b="[\\ufe0e\\ufe0f]?",w=b+m+("(?:\\u200d(?:"+["[^"+t+"]",l,h].join("|")+")"+b+m+")*"),I="(?:"+[u,l,h].join("|")+")"+w,x=RegExp([p+"?"+c+"+"+g+"(?="+[a,p,"$"].join("|")+")",_+"+"+v+"(?="+[a,p+d,"$"].join("|")+")",p+"?"+d+"+"+g,p+"+"+v,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",s,I].join("|"),"g");e.exports=function unicodeWords(e){return e.match(x)||[]}},8929:(e,t,r)=>{var n=r(8403),i=r(5393)((function(e,t,r){return t=t.toLowerCase(),e+(r?n(t):t)}));e.exports=i},8403:(e,t,r)=>{var n=r(9833),i=r(1700);e.exports=function capitalize(e){return i(n(e).toLowerCase())}},3816:(e,t,r)=>{var n=r(9389),i=r(9833),o=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,a=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");e.exports=function deburr(e){return(e=i(e))&&e.replace(o,n).replace(a,"")}},7813:e=>{e.exports=function eq(e,t){return e===t||e!=e&&t!=t}},3311:(e,t,r)=>{var n=r(7740)(r(998));e.exports=n},998:(e,t,r)=>{var n=r(1848),i=r(7206),o=r(554),a=Math.max;e.exports=function findIndex(e,t,r){var s=null==e?0:e.length;if(!s)return-1;var u=null==r?0:o(r);return u<0&&(u=a(s+u,0)),n(e,i(t,3),u)}},7361:(e,t,r)=>{var n=r(7786);e.exports=function get(e,t,r){var i=null==e?void 0:n(e,t);return void 0===i?r:i}},9095:(e,t,r)=>{var n=r(13),i=r(222);e.exports=function hasIn(e,t){return null!=e&&i(e,t,n)}},6557:e=>{e.exports=function identity(e){return e}},5694:(e,t,r)=>{var n=r(9454),i=r(7005),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,u=n(function(){return arguments}())?n:function(e){return i(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=u},1469:e=>{var t=Array.isArray;e.exports=t},8612:(e,t,r)=>{var n=r(3560),i=r(1780);e.exports=function isArrayLike(e){return null!=e&&i(e.length)&&!n(e)}},4144:(e,t,r)=>{e=r.nmd(e);var n=r(5639),i=r(5062),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,s=a&&a.exports===o?n.Buffer:void 0,u=(s?s.isBuffer:void 0)||i;e.exports=u},3560:(e,t,r)=>{var n=r(4239),i=r(3218);e.exports=function isFunction(e){if(!i(e))return!1;var t=n(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},1780:e=>{e.exports=function isLength(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},3218:e=>{e.exports=function isObject(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},7005:e=>{e.exports=function isObjectLike(e){return null!=e&&"object"==typeof e}},3448:(e,t,r)=>{var n=r(4239),i=r(7005);e.exports=function isSymbol(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==n(e)}},6719:(e,t,r)=>{var n=r(8749),i=r(1717),o=r(1167),a=o&&o.isTypedArray,s=a?i(a):n;e.exports=s},3674:(e,t,r)=>{var n=r(4636),i=r(280),o=r(8612);e.exports=function keys(e){return o(e)?n(e):i(e)}},8306:(e,t,r)=>{var n=r(3369);function memoize(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var memoized=function(){var r=arguments,n=t?t.apply(this,r):r[0],i=memoized.cache;if(i.has(n))return i.get(n);var o=e.apply(this,r);return memoized.cache=i.set(n,o)||i,o};return memoized.cache=new(memoize.Cache||n),memoized}memoize.Cache=n,e.exports=memoize},9601:(e,t,r)=>{var n=r(371),i=r(9152),o=r(5403),a=r(327);e.exports=function property(e){return o(e)?n(a(e)):i(e)}},9704:(e,t,r)=>{var n=r(2908),i=r(7206),o=r(5076),a=r(1469),s=r(6612);e.exports=function some(e,t,r){var u=a(e)?n:o;return r&&s(e,t,r)&&(t=void 0),u(e,i(t,3))}},479:e=>{e.exports=function stubArray(){return[]}},5062:e=>{e.exports=function stubFalse(){return!1}},8601:(e,t,r)=>{var n=r(4841),i=1/0;e.exports=function toFinite(e){return e?(e=n(e))===i||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},554:(e,t,r)=>{var n=r(8601);e.exports=function toInteger(e){var t=n(e),r=t%1;return t==t?r?t-r:t:0}},4841:(e,t,r)=>{var n=r(7561),i=r(3218),o=r(3448),a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,u=/^0o[0-7]+$/i,c=parseInt;e.exports=function toNumber(e){if("number"==typeof e)return e;if(o(e))return NaN;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=n(e);var r=s.test(e);return r||u.test(e)?c(e.slice(2),r?2:8):a.test(e)?NaN:+e}},9833:(e,t,r)=>{var n=r(531);e.exports=function toString(e){return null==e?"":n(e)}},1700:(e,t,r)=>{var n=r(8805)("toUpperCase");e.exports=n},8748:(e,t,r)=>{var n=r(9029),i=r(3157),o=r(9833),a=r(2757);e.exports=function words(e,t,r){return e=o(e),void 0===(t=r?void 0:t)?i(e)?a(e):n(e):e.match(t)||[]}},7287:(e,t,r)=>{var n=r(4865),i=r(1757);e.exports=function zipObject(e,t){return i(e||[],t||[],n)}},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;e.exports=function shouldUseNative(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},r=0;r<10;r++)t["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach((function(e){n[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(e){return!1}}()?Object.assign:function(e,i){for(var o,a,s=function toObject(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),u=1;u{var t,r,n=e.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(e){if(t===setTimeout)return setTimeout(e,0);if((t===defaultSetTimout||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){t=defaultSetTimout}try{r="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){r=defaultClearTimeout}}();var i,o=[],a=!1,s=-1;function cleanUpNextTick(){a&&i&&(a=!1,i.length?o=i.concat(o):s=-1,o.length&&drainQueue())}function drainQueue(){if(!a){var e=runTimeout(cleanUpNextTick);a=!0;for(var t=o.length;t;){for(i=o,o=[];++s1)for(var r=1;r{"use strict";var n=r(4155),i=65536,o=4294967295;var a=r(9509).Buffer,s=r.g.crypto||r.g.msCrypto;s&&s.getRandomValues?e.exports=function randomBytes(e,t){if(e>o)throw new RangeError("requested too many random bytes");var r=a.allocUnsafe(e);if(e>0)if(e>i)for(var u=0;u{"use strict";var n=r(7418),i=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,s=60110,u=60112;t.Suspense=60113;var c=60115,f=60116;if("function"==typeof Symbol&&Symbol.for){var l=Symbol.for;i=l("react.element"),o=l("react.portal"),t.Fragment=l("react.fragment"),t.StrictMode=l("react.strict_mode"),t.Profiler=l("react.profiler"),a=l("react.provider"),s=l("react.context"),u=l("react.forward_ref"),t.Suspense=l("react.suspense"),c=l("react.memo"),f=l("react.lazy")}var h="function"==typeof Symbol&&Symbol.iterator;function z(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r{"use strict";e.exports=r(2408)},9509:(e,t,r)=>{var n=r(8764),i=n.Buffer;function copyProps(e,t){for(var r in e)t[r]=e[r]}function SafeBuffer(e,t,r){return i(e,t,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=n:(copyProps(n,t),t.Buffer=SafeBuffer),SafeBuffer.prototype=Object.create(i.prototype),copyProps(i,SafeBuffer),SafeBuffer.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,r)},SafeBuffer.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=i(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},SafeBuffer.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},SafeBuffer.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},4189:(e,t,r)=>{var n=r(9509).Buffer;function Hash(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}Hash.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=n.from(e,t));for(var r=this._block,i=this._blockSize,o=e.length,a=this._len,s=0;s=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},Hash.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=Hash},9072:(e,t,r)=>{var n=e.exports=function SHA(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};n.sha=r(4448),n.sha1=r(8336),n.sha224=r(8432),n.sha256=r(7499),n.sha384=r(1686),n.sha512=r(8862)},4448:(e,t,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function Sha(){this.init(),this._w=s,i.call(this,64,56)}function rotl30(e){return e<<30|e>>>2}function ft(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(Sha,i),Sha.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,u=0|this._e,c=0;c<16;++c)r[c]=e.readInt32BE(4*c);for(;c<80;++c)r[c]=r[c-3]^r[c-8]^r[c-14]^r[c-16];for(var f=0;f<80;++f){var l=~~(f/20),h=0|((t=n)<<5|t>>>27)+ft(l,i,o,s)+u+r[f]+a[l];u=s,s=o,o=rotl30(i),i=n,n=h}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},Sha.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=Sha},8336:(e,t,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function Sha1(){this.init(),this._w=s,i.call(this,64,56)}function rotl5(e){return e<<5|e>>>27}function rotl30(e){return e<<30|e>>>2}function ft(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(Sha1,i),Sha1.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha1.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,u=0|this._e,c=0;c<16;++c)r[c]=e.readInt32BE(4*c);for(;c<80;++c)r[c]=(t=r[c-3]^r[c-8]^r[c-14]^r[c-16])<<1|t>>>31;for(var f=0;f<80;++f){var l=~~(f/20),h=rotl5(n)+ft(l,i,o,s)+u+r[f]+a[l]|0;u=s,s=o,o=rotl30(i),i=n,n=h}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},Sha1.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=Sha1},8432:(e,t,r)=>{var n=r(5717),i=r(7499),o=r(4189),a=r(9509).Buffer,s=new Array(64);function Sha224(){this.init(),this._w=s,o.call(this,64,56)}n(Sha224,i),Sha224.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},Sha224.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=Sha224},7499:(e,t,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function Sha256(){this.init(),this._w=s,i.call(this,64,56)}function ch(e,t,r){return r^e&(t^r)}function maj(e,t,r){return e&t|r&(e|t)}function sigma0(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function sigma1(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function gamma0(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(Sha256,i),Sha256.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},Sha256.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,u=0|this._e,c=0|this._f,f=0|this._g,l=0|this._h,h=0;h<16;++h)r[h]=e.readInt32BE(4*h);for(;h<64;++h)r[h]=0|(((t=r[h-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[h-7]+gamma0(r[h-15])+r[h-16];for(var p=0;p<64;++p){var d=l+sigma1(u)+ch(u,c,f)+a[p]+r[p]|0,_=sigma0(n)+maj(n,i,o)|0;l=f,f=c,c=u,u=s+d|0,s=o,o=i,i=n,n=d+_|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0,this._f=c+this._f|0,this._g=f+this._g|0,this._h=l+this._h|0},Sha256.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=Sha256},1686:(e,t,r)=>{var n=r(5717),i=r(8862),o=r(4189),a=r(9509).Buffer,s=new Array(160);function Sha384(){this.init(),this._w=s,o.call(this,128,112)}n(Sha384,i),Sha384.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},Sha384.prototype._hash=function(){var e=a.allocUnsafe(48);function writeInt64BE(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return writeInt64BE(this._ah,this._al,0),writeInt64BE(this._bh,this._bl,8),writeInt64BE(this._ch,this._cl,16),writeInt64BE(this._dh,this._dl,24),writeInt64BE(this._eh,this._el,32),writeInt64BE(this._fh,this._fl,40),e},e.exports=Sha384},8862:(e,t,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function Sha512(){this.init(),this._w=s,i.call(this,128,112)}function Ch(e,t,r){return r^e&(t^r)}function maj(e,t,r){return e&t|r&(e|t)}function sigma0(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function sigma1(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function Gamma0(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function Gamma0l(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function Gamma1(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function Gamma1l(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function getCarry(e,t){return e>>>0>>0?1:0}n(Sha512,i),Sha512.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},Sha512.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,s=0|this._eh,u=0|this._fh,c=0|this._gh,f=0|this._hh,l=0|this._al,h=0|this._bl,p=0|this._cl,d=0|this._dl,_=0|this._el,g=0|this._fl,v=0|this._gl,m=0|this._hl,b=0;b<32;b+=2)t[b]=e.readInt32BE(4*b),t[b+1]=e.readInt32BE(4*b+4);for(;b<160;b+=2){var w=t[b-30],I=t[b-30+1],x=Gamma0(w,I),B=Gamma0l(I,w),k=Gamma1(w=t[b-4],I=t[b-4+1]),A=Gamma1l(I,w),M=t[b-14],q=t[b-14+1],j=t[b-32],T=t[b-32+1],R=B+q|0,F=x+M+getCarry(R,B)|0;F=(F=F+k+getCarry(R=R+A|0,A)|0)+j+getCarry(R=R+T|0,T)|0,t[b]=F,t[b+1]=R}for(var U=0;U<160;U+=2){F=t[U],R=t[U+1];var W=maj(r,n,i),V=maj(l,h,p),$=sigma0(r,l),H=sigma0(l,r),Z=sigma1(s,_),Y=sigma1(_,s),G=a[U],X=a[U+1],ee=Ch(s,u,c),te=Ch(_,g,v),re=m+Y|0,ne=f+Z+getCarry(re,m)|0;ne=(ne=(ne=ne+ee+getCarry(re=re+te|0,te)|0)+G+getCarry(re=re+X|0,X)|0)+F+getCarry(re=re+R|0,R)|0;var ie=H+V|0,oe=$+W+getCarry(ie,H)|0;f=c,m=v,c=u,v=g,u=s,g=_,s=o+ne+getCarry(_=d+re|0,d)|0,o=i,d=p,i=n,p=h,n=r,h=l,r=ne+oe+getCarry(l=re+ie|0,re)|0}this._al=this._al+l|0,this._bl=this._bl+h|0,this._cl=this._cl+p|0,this._dl=this._dl+d|0,this._el=this._el+_|0,this._fl=this._fl+g|0,this._gl=this._gl+v|0,this._hl=this._hl+m|0,this._ah=this._ah+r+getCarry(this._al,l)|0,this._bh=this._bh+n+getCarry(this._bl,h)|0,this._ch=this._ch+i+getCarry(this._cl,p)|0,this._dh=this._dh+o+getCarry(this._dl,d)|0,this._eh=this._eh+s+getCarry(this._el,_)|0,this._fh=this._fh+u+getCarry(this._fl,g)|0,this._gh=this._gh+c+getCarry(this._gl,v)|0,this._hh=this._hh+f+getCarry(this._hl,m)|0},Sha512.prototype._hash=function(){var e=o.allocUnsafe(64);function writeInt64BE(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return writeInt64BE(this._ah,this._al,0),writeInt64BE(this._bh,this._bl,8),writeInt64BE(this._ch,this._cl,16),writeInt64BE(this._dh,this._dl,24),writeInt64BE(this._eh,this._el,32),writeInt64BE(this._fh,this._fl,40),writeInt64BE(this._gh,this._gl,48),writeInt64BE(this._hh,this._hl,56),e},e.exports=Sha512},3101:(e,t,r)=>{var n=r(269),i=r(4122);function _extends(){var t;return e.exports=_extends=n?i(t=n).call(t):function(e){for(var t=1;t{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};return(()=>{"use strict";__webpack_require__.d(r,{default:()=>Ht});var e={};__webpack_require__.r(e),__webpack_require__.d(e,{TOGGLE_CONFIGS:()=>zt,UPDATE_CONFIGS:()=>Rt,loaded:()=>loaded,toggle:()=>toggle,update:()=>update});var t={};__webpack_require__.r(t),__webpack_require__.d(t,{downloadConfig:()=>downloadConfig,getConfigByUrl:()=>getConfigByUrl});var n={};__webpack_require__.r(n),__webpack_require__.d(n,{get:()=>get});var i=__webpack_require__(7294);class StandaloneLayout extends i.Component{render(){const{getComponent:e}=this.props,t=e("Container"),r=e("Row"),n=e("Col"),o=e("Topbar",!0),a=e("BaseLayout",!0),s=e("onlineValidatorBadge",!0);return i.createElement(t,{className:"swagger-ui"},o?i.createElement(o,null):null,i.createElement(a,null),i.createElement(r,null,i.createElement(n,null,i.createElement(s,null))))}}const o=StandaloneLayout,stadalone_layout=()=>({components:{StandaloneLayout:o}});var a=__webpack_require__(3393),s=__webpack_require__.n(a);__webpack_require__(7967),__webpack_require__(8929),__webpack_require__(1700),__webpack_require__(8306),__webpack_require__(3311),__webpack_require__(9704),__webpack_require__(7813),__webpack_require__(3560),__webpack_require__(8269),__webpack_require__(1798),__webpack_require__(9072);const u=function makeWindow(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){},FormData:function(){}};if("undefined"==typeof window)return e;try{e=window;for(var t of["File","Blob","FormData"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}();s().Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");__webpack_require__(8764).Buffer;const parseSearch=()=>{let e={},t=u.location.search;if(!t)return{};if(""!=t){let r=t.substr(1).split("&");for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(t=r[t].split("="),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||"")}return e};class TopBar extends i.Component{constructor(e,t){super(e,t),this.state={url:e.specSelectors.url(),selectedIndex:0}}UNSAFE_componentWillReceiveProps(e){this.setState({url:e.specSelectors.url()})}onUrlChange=e=>{let{target:{value:t}}=e;this.setState({url:t})};flushAuthData(){const{persistAuthorization:e}=this.props.getConfigs();e||this.props.authActions.restoreAuthorization({authorized:{}})}loadSpec=e=>{this.flushAuthData(),this.props.specActions.updateUrl(e),this.props.specActions.download(e)};onUrlSelect=e=>{let t=e.target.value||e.target.href;this.loadSpec(t),this.setSelectedUrl(t),e.preventDefault()};downloadUrl=e=>{this.loadSpec(this.state.url),e.preventDefault()};setSearch=e=>{let t=parseSearch();t["urls.primaryName"]=e.name;const r=`${window.location.protocol}//${window.location.host}${window.location.pathname}`;var n;window&&window.history&&window.history.pushState&&window.history.replaceState(null,"",`${r}?${n=t,Object.keys(n).map((e=>encodeURIComponent(e)+"="+encodeURIComponent(n[e]))).join("&")}`)};setSelectedUrl=e=>{const t=this.props.getConfigs().urls||[];t&&t.length&&e&&t.forEach(((t,r)=>{t.url===e&&(this.setState({selectedIndex:r}),this.setSearch(t))}))};componentDidMount(){const e=this.props.getConfigs(),t=e.urls||[];if(t&&t.length){var r=this.state.selectedIndex;let n=parseSearch()["urls.primaryName"]||e["urls.primaryName"];n&&t.forEach(((e,t)=>{e.name===n&&(this.setState({selectedIndex:t}),r=t)})),this.loadSpec(t[r].url)}}onFilterChange=e=>{let{target:{value:t}}=e;this.props.layoutActions.updateFilter(t)};render(){let{getComponent:e,specSelectors:t,getConfigs:r}=this.props;const n=e("Button"),o=e("Link"),a=e("Logo");let s="loading"===t.loadingStatus();const u=["download-url-input"];"failed"===t.loadingStatus()&&u.push("failed"),s&&u.push("loading");const{urls:c}=r();let f=[],l=null;if(c){let e=[];c.forEach(((t,r)=>{e.push(i.createElement("option",{key:r,value:t.url},t.name))})),f.push(i.createElement("label",{className:"select-label",htmlFor:"select"},i.createElement("span",null,"Select a definition"),i.createElement("select",{id:"select",disabled:s,onChange:this.onUrlSelect,value:c[this.state.selectedIndex].url},e)))}else l=this.downloadUrl,f.push(i.createElement("input",{className:u.join(" "),type:"text",onChange:this.onUrlChange,value:this.state.url,disabled:s})),f.push(i.createElement(n,{className:"download-url-button",onClick:this.downloadUrl},"Explore"));return i.createElement("div",{className:"topbar"},i.createElement("div",{className:"wrapper"},i.createElement("div",{className:"topbar-wrapper"},i.createElement(o,null,i.createElement(a,null)),i.createElement("form",{className:"download-url-wrapper",onSubmit:l},f.map(((e,t)=>(0,i.cloneElement)(e,{key:t})))))))}}const c=TopBar;var f,l,h,p,d,_,g,v,m,b,w,I,x,B,k,A,M,q,j,T,R,F,U,W,V,$,H,Z,Y,G,X,ee;function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;ti.createElement("svg",_extends({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 407 116"},e),f||(f=i.createElement("defs",null,i.createElement("clipPath",{id:"logo_small_svg__clip-SW_TM-logo-on-dark"},i.createElement("path",{d:"M0 0h407v116H0z"})),i.createElement("style",null,".logo_small_svg__cls-2{fill:#fff}.logo_small_svg__cls-3{fill:#85ea2d}"))),i.createElement("g",{id:"logo_small_svg__SW_TM-logo-on-dark",style:{clipPath:"url(#logo_small_svg__clip-SW_TM-logo-on-dark)"}},i.createElement("g",{id:"logo_small_svg__SW_In-Product",transform:"translate(-.301)"},l||(l=i.createElement("path",{id:"logo_small_svg__Path_2936",d:"M359.15 70.674h-.7v-3.682h-1.26v-.6h3.219v.6h-1.259Z",className:"logo_small_svg__cls-2","data-name":"Path 2936"})),h||(h=i.createElement("path",{id:"logo_small_svg__Path_2937",d:"m363.217 70.674-1.242-3.574h-.023q.05.8.05 1.494v2.083h-.636v-4.286h.987l1.19 3.407h.017l1.225-3.407h.99v4.283h-.675v-2.118a30.29 30.29 0 0 1 .044-1.453h-.023l-1.286 3.571Z",className:"logo_small_svg__cls-2","data-name":"Path 2937"})),p||(p=i.createElement("path",{id:"logo_small_svg__Path_2938",d:"M50.328 97.669a47.642 47.642 0 1 1 47.643-47.642 47.642 47.642 0 0 1-47.643 47.642Z",className:"logo_small_svg__cls-3","data-name":"Path 2938"})),d||(d=i.createElement("path",{id:"logo_small_svg__Path_2939",d:"M50.328 4.769A45.258 45.258 0 1 1 5.07 50.027 45.258 45.258 0 0 1 50.328 4.769m0-4.769a50.027 50.027 0 1 0 50.027 50.027A50.027 50.027 0 0 0 50.328 0Z",className:"logo_small_svg__cls-3","data-name":"Path 2939"})),i.createElement("path",{id:"logo_small_svg__Path_2940",d:"M31.8 33.854c-.154 1.712.058 3.482-.057 5.213a42.665 42.665 0 0 1-.693 5.156 9.53 9.53 0 0 1-4.1 5.829c4.079 2.654 4.54 6.771 4.81 10.946.135 2.25.077 4.52.308 6.752.173 1.731.846 2.174 2.636 2.231.73.02 1.48 0 2.327 0v5.349c-5.29.9-9.657-.6-10.734-5.079a30.76 30.76 0 0 1-.654-5c-.117-1.789.076-3.578-.058-5.367-.386-4.906-1.02-6.56-5.713-6.791v-6.1a9.191 9.191 0 0 1 1.028-.173c2.577-.135 3.674-.924 4.231-3.463a29.3 29.3 0 0 0 .481-4.329 82.1 82.1 0 0 1 .6-8.406c.673-3.982 3.136-5.906 7.234-6.137 1.154-.057 2.327 0 3.655 0v5.464c-.558.038-1.039.115-1.539.115-3.336-.115-3.51 1.02-3.762 3.79Zm6.406 12.658h-.077a3.515 3.515 0 1 0-.346 7.021h.231a3.461 3.461 0 0 0 3.655-3.251v-.192a3.523 3.523 0 0 0-3.461-3.578Zm12.062 0a3.373 3.373 0 0 0-3.482 3.251 1.79 1.79 0 0 0 .02.327 3.3 3.3 0 0 0 3.578 3.443 3.263 3.263 0 0 0 3.443-3.558 3.308 3.308 0 0 0-3.557-3.463Zm12.351 0a3.592 3.592 0 0 0-3.655 3.482 3.529 3.529 0 0 0 3.536 3.539h.039c1.769.309 3.559-1.4 3.674-3.462a3.571 3.571 0 0 0-3.6-3.559Zm16.948.288c-2.232-.1-3.348-.846-3.9-2.962a21.447 21.447 0 0 1-.635-4.136c-.154-2.578-.135-5.175-.308-7.753-.4-6.117-4.828-8.252-11.254-7.195v5.31c1.019 0 1.808 0 2.6.019 1.366.019 2.4.539 2.539 2.059.135 1.385.135 2.789.27 4.193.269 2.79.422 5.618.9 8.369a8.715 8.715 0 0 0 3.921 5.348c-3.4 2.289-4.406 5.559-4.578 9.234-.1 2.52-.154 5.059-.289 7.6-.115 2.308-.923 3.058-3.251 3.116-.654.019-1.289.077-2.019.115v5.445c1.365 0 2.616.077 3.866 0 3.886-.231 6.233-2.117 7-5.887A49.079 49.079 0 0 0 75 63.4c.135-1.923.116-3.866.308-5.771.289-2.982 1.655-4.213 4.636-4.4a4.037 4.037 0 0 0 .828-.192v-6.1c-.5-.058-.843-.115-1.208-.135Z","data-name":"Path 2940",style:{fill:"#173647"}}),_||(_=i.createElement("path",{id:"logo_small_svg__Path_2941",d:"M152.273 58.122a11.228 11.228 0 0 1-4.384 9.424q-4.383 3.382-11.9 3.382-8.14 0-12.524-2.1V63.7a32.9 32.9 0 0 0 6.137 1.879 32.3 32.3 0 0 0 6.575.689q5.322 0 8.015-2.02a6.626 6.626 0 0 0 2.692-5.62 7.222 7.222 0 0 0-.954-3.9 8.885 8.885 0 0 0-3.194-2.8 44.634 44.634 0 0 0-6.81-2.911q-6.387-2.286-9.126-5.417a11.955 11.955 0 0 1-2.74-8.172A10.164 10.164 0 0 1 128.039 27q3.977-3.131 10.52-3.131a31 31 0 0 1 12.555 2.5L149.455 31a28.382 28.382 0 0 0-11.021-2.38 10.668 10.668 0 0 0-6.606 1.816 5.984 5.984 0 0 0-2.38 5.041 7.722 7.722 0 0 0 .877 3.9 8.242 8.242 0 0 0 2.959 2.786 36.7 36.7 0 0 0 6.371 2.8q7.2 2.566 9.91 5.51a10.84 10.84 0 0 1 2.708 7.649Z",className:"logo_small_svg__cls-2","data-name":"Path 2941"})),g||(g=i.createElement("path",{id:"logo_small_svg__Path_2942",d:"M185.288 70.3 179 50.17q-.594-1.848-2.222-8.391h-.251q-1.252 5.479-2.192 8.453L167.849 70.3h-6.011l-9.361-34.315h5.447q3.318 12.931 5.057 19.693a80.112 80.112 0 0 1 1.988 9.111h.25q.345-1.785 1.112-4.618t1.33-4.493l6.294-19.693h5.635l6.137 19.693a66.369 66.369 0 0 1 2.379 9.048h.251a33.163 33.163 0 0 1 .673-3.475q.548-2.347 6.528-25.266h5.385L191.456 70.3Z",className:"logo_small_svg__cls-2","data-name":"Path 2942"})),v||(v=i.createElement("path",{id:"logo_small_svg__Path_2943",d:"m225.115 70.3-1.033-4.885h-.25a14.446 14.446 0 0 1-5.119 4.368 15.608 15.608 0 0 1-6.372 1.143q-5.1 0-8-2.63t-2.9-7.483q0-10.4 16.626-10.9l5.823-.188V47.6q0-4.038-1.738-5.964t-5.552-1.923a22.633 22.633 0 0 0-9.706 2.63l-1.6-3.977a24.437 24.437 0 0 1 5.557-2.16 24.056 24.056 0 0 1 6.058-.783q6.136 0 9.1 2.724t2.959 8.735V70.3Zm-11.741-3.663a10.549 10.549 0 0 0 7.626-2.66 9.845 9.845 0 0 0 2.771-7.451v-3.1l-5.2.219q-6.2.219-8.939 1.926a5.8 5.8 0 0 0-2.74 5.306 5.354 5.354 0 0 0 1.707 4.29 7.081 7.081 0 0 0 4.775 1.472Z",className:"logo_small_svg__cls-2","data-name":"Path 2943"})),m||(m=i.createElement("path",{id:"logo_small_svg__Path_2944",d:"M264.6 35.987v3.287l-6.356.752a11.16 11.16 0 0 1 2.255 6.856 10.148 10.148 0 0 1-3.444 8.047q-3.444 3-9.456 3a15.734 15.734 0 0 1-2.88-.25Q241.4 59.438 241.4 62.1a2.242 2.242 0 0 0 1.159 2.082 8.456 8.456 0 0 0 3.976.673h6.074q5.573 0 8.563 2.348a8.158 8.158 0 0 1 2.99 6.825 9.743 9.743 0 0 1-4.571 8.688q-4.572 2.989-13.338 2.99-6.732 0-10.379-2.5a8.087 8.087 0 0 1-3.647-7.076 7.946 7.946 0 0 1 2-5.417 10.211 10.211 0 0 1 5.636-3.1 5.429 5.429 0 0 1-2.207-1.847 4.89 4.89 0 0 1-.893-2.912 5.53 5.53 0 0 1 1-3.288 10.529 10.529 0 0 1 3.162-2.723 9.275 9.275 0 0 1-4.336-3.726 10.945 10.945 0 0 1-1.675-6.012q0-5.634 3.382-8.688t9.58-3.052a17.439 17.439 0 0 1 4.853.626Zm-27.367 40.075a4.66 4.66 0 0 0 2.348 4.227 12.973 12.973 0 0 0 6.732 1.44q6.543 0 9.69-1.956a5.992 5.992 0 0 0 3.147-5.307q0-2.787-1.723-3.867t-6.481-1.08h-6.23a8.205 8.205 0 0 0-5.51 1.69 6.043 6.043 0 0 0-1.973 4.853Zm2.818-29.086a6.984 6.984 0 0 0 2.035 5.448 8.123 8.123 0 0 0 5.667 1.847q7.608 0 7.608-7.389 0-7.733-7.7-7.733a7.628 7.628 0 0 0-5.635 1.972q-1.976 1.973-1.975 5.855Z",className:"logo_small_svg__cls-2","data-name":"Path 2944"})),b||(b=i.createElement("path",{id:"logo_small_svg__Path_2945",d:"M299.136 35.987v3.287l-6.356.752a11.168 11.168 0 0 1 2.254 6.856 10.145 10.145 0 0 1-3.444 8.047q-3.444 3-9.455 3a15.734 15.734 0 0 1-2.88-.25q-3.32 1.754-3.319 4.415a2.243 2.243 0 0 0 1.158 2.082 8.459 8.459 0 0 0 3.976.673h6.074q5.574 0 8.563 2.348a8.158 8.158 0 0 1 2.99 6.825 9.743 9.743 0 0 1-4.571 8.688q-4.57 2.989-13.337 2.99-6.732 0-10.379-2.5a8.088 8.088 0 0 1-3.648-7.076 7.947 7.947 0 0 1 2-5.417 10.207 10.207 0 0 1 5.636-3.1 5.432 5.432 0 0 1-2.208-1.847 4.889 4.889 0 0 1-.892-2.912 5.53 5.53 0 0 1 1-3.288 10.529 10.529 0 0 1 3.162-2.723 9.271 9.271 0 0 1-4.336-3.726 10.945 10.945 0 0 1-1.675-6.012q0-5.634 3.381-8.688t9.581-3.052a17.444 17.444 0 0 1 4.853.626Zm-27.364 40.075a4.658 4.658 0 0 0 2.348 4.227 12.969 12.969 0 0 0 6.731 1.44q6.544 0 9.691-1.956a5.993 5.993 0 0 0 3.146-5.307q0-2.787-1.722-3.867t-6.481-1.08h-6.23a8.208 8.208 0 0 0-5.511 1.69 6.042 6.042 0 0 0-1.972 4.853Zm2.818-29.086a6.984 6.984 0 0 0 2.035 5.448 8.121 8.121 0 0 0 5.667 1.847q7.607 0 7.608-7.389 0-7.733-7.7-7.733a7.629 7.629 0 0 0-5.635 1.972q-1.975 1.973-1.975 5.855Z",className:"logo_small_svg__cls-2","data-name":"Path 2945"})),w||(w=i.createElement("path",{id:"logo_small_svg__Path_2946",d:"M316.778 70.928q-7.608 0-12.007-4.634t-4.4-12.868q0-8.3 4.086-13.181a13.573 13.573 0 0 1 10.974-4.884 12.938 12.938 0 0 1 10.207 4.239q3.762 4.247 3.762 11.2v3.287h-23.643q.156 6.044 3.053 9.174t8.156 3.131a27.633 27.633 0 0 0 10.958-2.317v4.634a27.5 27.5 0 0 1-5.213 1.706 29.251 29.251 0 0 1-5.933.513Zm-1.409-31.215a8.489 8.489 0 0 0-6.591 2.692 12.416 12.416 0 0 0-2.9 7.452h17.94q0-4.916-2.191-7.53a7.714 7.714 0 0 0-6.258-2.614Z",className:"logo_small_svg__cls-2","data-name":"Path 2946"})),I||(I=i.createElement("path",{id:"logo_small_svg__Path_2947",d:"M350.9 35.361a20.38 20.38 0 0 1 4.1.375l-.721 4.822a17.712 17.712 0 0 0-3.757-.47 9.142 9.142 0 0 0-7.122 3.382 12.327 12.327 0 0 0-2.959 8.422V70.3h-5.2V35.987h4.29l.6 6.356h.25a15.072 15.072 0 0 1 4.6-5.166 10.356 10.356 0 0 1 5.919-1.816Z",className:"logo_small_svg__cls-2","data-name":"Path 2947"})),x||(x=i.createElement("path",{id:"logo_small_svg__Path_2948",d:"M255.857 96.638s-3.43-.391-4.85-.391c-2.058 0-3.111.735-3.111 2.18 0 1.568.882 1.935 3.748 2.719 3.527.98 4.8 1.911 4.8 4.777 0 3.675-2.3 5.267-5.61 5.267a35.687 35.687 0 0 1-5.487-.662l.27-2.18s3.306.441 5.046.441c2.082 0 3.037-.931 3.037-2.7 0-1.421-.759-1.91-3.331-2.523-3.626-.93-5.193-2.033-5.193-4.948 0-3.381 2.229-4.776 5.585-4.776a37.2 37.2 0 0 1 5.315.587Z",className:"logo_small_svg__cls-2","data-name":"Path 2948"})),B||(B=i.createElement("path",{id:"logo_small_svg__Path_2949",d:"M262.967 94.14h4.733l3.748 13.106L275.2 94.14h4.752v16.78H277.2v-14.5h-.145l-4.191 13.816h-2.842l-4.191-13.816h-.145v14.5h-2.719Z",className:"logo_small_svg__cls-2","data-name":"Path 2949"})),k||(k=i.createElement("path",{id:"logo_small_svg__Path_2950",d:"M322.057 94.14H334.3v2.425h-4.728v14.355h-2.743V96.565h-4.777Z",className:"logo_small_svg__cls-2","data-name":"Path 2950"})),A||(A=i.createElement("path",{id:"logo_small_svg__Path_2951",d:"M346.137 94.14c3.332 0 5.12 1.249 5.12 4.361 0 2.033-.637 3.037-1.984 3.772 1.445.563 2.4 1.592 2.4 3.9 0 3.43-2.081 4.752-5.339 4.752h-6.566V94.14Zm-3.65 2.352v4.8h3.6c1.666 0 2.4-.832 2.4-2.474 0-1.617-.833-2.327-2.5-2.327Zm0 7.1v4.973h3.7c1.689 0 2.694-.539 2.694-2.548 0-1.911-1.421-2.425-2.744-2.425Z",className:"logo_small_svg__cls-2","data-name":"Path 2951"})),M||(M=i.createElement("path",{id:"logo_small_svg__Path_2952",d:"M358.414 94.14H369v2.377h-7.864v4.751h6.394v2.332h-6.394v4.924H369v2.4h-10.586Z",className:"logo_small_svg__cls-2","data-name":"Path 2952"})),q||(q=i.createElement("path",{id:"logo_small_svg__Path_2953",d:"M378.747 94.14h5.414l4.164 16.78h-2.744l-1.239-4.92h-5.777l-1.239 4.923h-2.719Zm.361 9.456h4.708l-1.737-7.178h-1.225Z",className:"logo_small_svg__cls-2","data-name":"Path 2953"})),j||(j=i.createElement("path",{id:"logo_small_svg__Path_2954",d:"M397.1 105.947v4.973h-2.719V94.14h6.37c3.7 0 5.683 2.12 5.683 5.843 0 2.376-.956 4.519-2.744 5.352l2.769 5.585h-2.989l-2.426-4.973Zm3.651-9.455H397.1v7.1h3.7c2.057 0 2.841-1.85 2.841-3.589 0-1.9-.934-3.511-2.894-3.511Z",className:"logo_small_svg__cls-2","data-name":"Path 2954"})),T||(T=i.createElement("path",{id:"logo_small_svg__Path_2955",d:"M290.013 94.14h5.413l4.164 16.78h-2.743l-1.239-4.92h-5.777l-1.239 4.923h-2.719Zm.361 9.456h4.707l-1.737-7.178h-1.225Z",className:"logo_small_svg__cls-2","data-name":"Path 2955"})),R||(R=i.createElement("path",{id:"logo_small_svg__Path_2956",d:"M308.362 105.947v4.973h-2.719V94.14h6.369c3.7 0 5.683 2.12 5.683 5.843 0 2.376-.955 4.519-2.743 5.352l2.768 5.585h-2.989l-2.425-4.973Zm3.65-9.455h-3.65v7.1h3.7c2.058 0 2.841-1.85 2.841-3.589-.003-1.903-.931-3.511-2.891-3.511Z",className:"logo_small_svg__cls-2","data-name":"Path 2956"})),F||(F=i.createElement("path",{id:"logo_small_svg__Path_2957",d:"M130.606 107.643a3.02 3.02 0 0 1-1.18 2.537 5.113 5.113 0 0 1-3.2.91 8.03 8.03 0 0 1-3.371-.564v-1.383a8.793 8.793 0 0 0 1.652.506 8.672 8.672 0 0 0 1.77.186 3.565 3.565 0 0 0 2.157-.544 1.783 1.783 0 0 0 .725-1.512 1.947 1.947 0 0 0-.257-1.05 2.393 2.393 0 0 0-.86-.754 12.171 12.171 0 0 0-1.833-.784 5.842 5.842 0 0 1-2.456-1.458 3.213 3.213 0 0 1-.738-2.2 2.736 2.736 0 0 1 1.071-2.267 4.444 4.444 0 0 1 2.831-.843 8.341 8.341 0 0 1 3.38.675l-.447 1.247a7.639 7.639 0 0 0-2.966-.641 2.878 2.878 0 0 0-1.779.489 1.612 1.612 0 0 0-.64 1.357 2.081 2.081 0 0 0 .236 1.049 2.231 2.231 0 0 0 .8.75 9.878 9.878 0 0 0 1.715.754 6.8 6.8 0 0 1 2.667 1.483 2.919 2.919 0 0 1 .723 2.057Z",className:"logo_small_svg__cls-2","data-name":"Path 2957"})),U||(U=i.createElement("path",{id:"logo_small_svg__Path_2958",d:"M134.447 101.686v5.991a2.411 2.411 0 0 0 .515 1.686 2.09 2.09 0 0 0 1.609.556 2.629 2.629 0 0 0 2.12-.792 4 4 0 0 0 .67-2.587v-4.854h1.4v9.236H139.6l-.2-1.239h-.075a2.793 2.793 0 0 1-1.193 1.045 4 4 0 0 1-1.74.362 3.529 3.529 0 0 1-2.524-.8 3.409 3.409 0 0 1-.839-2.562v-6.042Z",className:"logo_small_svg__cls-2","data-name":"Path 2958"})),W||(W=i.createElement("path",{id:"logo_small_svg__Path_2959",d:"M148.206 111.09a3.993 3.993 0 0 1-1.647-.333 3.1 3.1 0 0 1-1.252-1.023h-.1a12.265 12.265 0 0 1 .1 1.533v3.8h-1.4v-13.381h1.137l.194 1.264h.067a3.257 3.257 0 0 1 1.256-1.1 3.831 3.831 0 0 1 1.643-.337 3.413 3.413 0 0 1 2.836 1.256 6.683 6.683 0 0 1-.017 7.057 3.42 3.42 0 0 1-2.817 1.264Zm-.2-8.385a2.482 2.482 0 0 0-2.048.784 4.041 4.041 0 0 0-.649 2.494v.312a4.625 4.625 0 0 0 .649 2.785 2.467 2.467 0 0 0 2.082.839 2.164 2.164 0 0 0 1.875-.969 4.6 4.6 0 0 0 .678-2.671 4.428 4.428 0 0 0-.678-2.651 2.232 2.232 0 0 0-1.915-.923Z",className:"logo_small_svg__cls-2","data-name":"Path 2959"})),V||(V=i.createElement("path",{id:"logo_small_svg__Path_2960",d:"M159.039 111.09a3.993 3.993 0 0 1-1.647-.333 3.1 3.1 0 0 1-1.252-1.023h-.1a12.265 12.265 0 0 1 .1 1.533v3.8h-1.4v-13.381h1.137l.194 1.264h.067a3.257 3.257 0 0 1 1.256-1.1 3.831 3.831 0 0 1 1.643-.337 3.413 3.413 0 0 1 2.836 1.256 6.683 6.683 0 0 1-.017 7.057 3.42 3.42 0 0 1-2.817 1.264Zm-.2-8.385a2.482 2.482 0 0 0-2.048.784 4.041 4.041 0 0 0-.649 2.494v.312a4.625 4.625 0 0 0 .649 2.785 2.467 2.467 0 0 0 2.082.839 2.164 2.164 0 0 0 1.875-.969 4.6 4.6 0 0 0 .678-2.671 4.428 4.428 0 0 0-.678-2.651 2.232 2.232 0 0 0-1.911-.923Z",className:"logo_small_svg__cls-2","data-name":"Path 2960"})),$||($=i.createElement("path",{id:"logo_small_svg__Path_2961",d:"M173.612 106.3a5.093 5.093 0 0 1-1.137 3.527 4.005 4.005 0 0 1-3.143 1.268 4.172 4.172 0 0 1-2.2-.581 3.84 3.84 0 0 1-1.483-1.669 5.8 5.8 0 0 1-.522-2.545 5.087 5.087 0 0 1 1.129-3.518 3.991 3.991 0 0 1 3.135-1.26 3.907 3.907 0 0 1 3.08 1.29 5.071 5.071 0 0 1 1.141 3.488Zm-7.036 0a4.384 4.384 0 0 0 .708 2.7 2.809 2.809 0 0 0 4.167 0 4.365 4.365 0 0 0 .712-2.7 4.293 4.293 0 0 0-.712-2.675 2.5 2.5 0 0 0-2.1-.915 2.461 2.461 0 0 0-2.072.9 4.334 4.334 0 0 0-.7 2.69Z",className:"logo_small_svg__cls-2","data-name":"Path 2961"})),H||(H=i.createElement("path",{id:"logo_small_svg__Path_2962",d:"M180.525 101.517a5.506 5.506 0 0 1 1.1.1l-.194 1.3a4.786 4.786 0 0 0-1.011-.127 2.46 2.46 0 0 0-1.917.911 3.318 3.318 0 0 0-.8 2.267v4.955h-1.4v-9.236h1.154l.16 1.71h.068a4.054 4.054 0 0 1 1.238-1.39 2.787 2.787 0 0 1 1.6-.49Z",className:"logo_small_svg__cls-2","data-name":"Path 2962"})),Z||(Z=i.createElement("path",{id:"logo_small_svg__Path_2963",d:"M187.363 109.936a4.506 4.506 0 0 0 .716-.055 4.387 4.387 0 0 0 .548-.114v1.07a2.5 2.5 0 0 1-.67.181 5 5 0 0 1-.8.072q-2.68 0-2.68-2.823v-5.494h-1.323v-.673l1.323-.582.59-1.972h.809v2.141h2.68v1.087h-2.68v5.435a1.869 1.869 0 0 0 .4 1.281 1.377 1.377 0 0 0 1.087.446Z",className:"logo_small_svg__cls-2","data-name":"Path 2963"})),Y||(Y=i.createElement("path",{id:"logo_small_svg__Path_2964",d:"M194.538 111.09a4.239 4.239 0 0 1-3.231-1.247 4.824 4.824 0 0 1-1.184-3.463 5.355 5.355 0 0 1 1.1-3.548 3.652 3.652 0 0 1 2.954-1.315 3.484 3.484 0 0 1 2.747 1.142 4.378 4.378 0 0 1 1.011 3.013v.885h-6.362a3.66 3.66 0 0 0 .822 2.469 2.843 2.843 0 0 0 2.2.843 7.431 7.431 0 0 0 2.949-.624v1.247a7.377 7.377 0 0 1-1.4.459 7.863 7.863 0 0 1-1.6.139Zm-.379-8.4a2.286 2.286 0 0 0-1.774.725 3.337 3.337 0 0 0-.779 2.006h4.828a3.072 3.072 0 0 0-.59-2.027 2.076 2.076 0 0 0-1.685-.706Z",className:"logo_small_svg__cls-2","data-name":"Path 2964"})),G||(G=i.createElement("path",{id:"logo_small_svg__Path_2965",d:"M206.951 109.683h-.076a3.287 3.287 0 0 1-2.9 1.407 3.427 3.427 0 0 1-2.819-1.239 5.452 5.452 0 0 1-1.006-3.522 5.542 5.542 0 0 1 1.011-3.548 3.4 3.4 0 0 1 2.814-1.264 3.361 3.361 0 0 1 2.883 1.365h.109l-.059-.665-.034-.649v-3.759h1.4v13.113h-1.138Zm-2.8.236a2.551 2.551 0 0 0 2.078-.779 3.947 3.947 0 0 0 .644-2.516v-.3a4.638 4.638 0 0 0-.653-2.8 2.481 2.481 0 0 0-2.086-.839 2.14 2.14 0 0 0-1.883.957 4.76 4.76 0 0 0-.653 2.7 4.554 4.554 0 0 0 .649 2.671 2.194 2.194 0 0 0 1.906.906Z",className:"logo_small_svg__cls-2","data-name":"Path 2965"})),X||(X=i.createElement("path",{id:"logo_small_svg__Path_2966",d:"M220.712 101.534a3.435 3.435 0 0 1 2.827 1.243 6.653 6.653 0 0 1-.009 7.053 3.417 3.417 0 0 1-2.818 1.26 4 4 0 0 1-1.648-.333 3.094 3.094 0 0 1-1.251-1.023h-.1l-.295 1.188h-1V97.809h1.4V101q0 1.069-.068 1.921h.068a3.322 3.322 0 0 1 2.894-1.387Zm-.2 1.171a2.44 2.44 0 0 0-2.064.822 6.338 6.338 0 0 0 .017 5.553 2.464 2.464 0 0 0 2.081.839 2.158 2.158 0 0 0 1.922-.94 4.828 4.828 0 0 0 .632-2.7 4.645 4.645 0 0 0-.632-2.689 2.242 2.242 0 0 0-1.959-.885Z",className:"logo_small_svg__cls-2","data-name":"Path 2966"})),ee||(ee=i.createElement("path",{id:"logo_small_svg__Path_2967",d:"M225.758 101.686h1.5l2.023 5.267a20.188 20.188 0 0 1 .826 2.6h.067q.109-.431.459-1.471t2.288-6.4h1.5l-3.969 10.518a5.253 5.253 0 0 1-1.378 2.212 2.932 2.932 0 0 1-1.934.653 5.659 5.659 0 0 1-1.264-.143V113.8a4.9 4.9 0 0 0 1.037.1 2.136 2.136 0 0 0 2.056-1.618l.514-1.314Z",className:"logo_small_svg__cls-2","data-name":"Path 2967"}))))),components_Logo=()=>i.createElement(logo_small,{height:"40"}),top_bar=()=>({components:{Topbar:c,Logo:components_Logo}});function isNothing(e){return null==e}var te={isNothing,isObject:function js_yaml_isObject(e){return"object"==typeof e&&null!==e},toArray:function toArray(e){return Array.isArray(e)?e:isNothing(e)?[]:[e]},repeat:function repeat(e,t){var r,n="";for(r=0;rs&&(t=n-s+(o=" ... ").length),r-n>s&&(r=n+s-(a=" ...").length),{str:o+e.slice(t,r).replace(/\t/g,"→")+a,pos:n-t+o.length}}function padStart(e,t){return te.repeat(" ",t-e.length)+e}var ne=function makeSnippet(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var r,n=/\r?\n|\r|\0/g,i=[0],o=[],a=-1;r=n.exec(e.buffer);)o.push(r.index),i.push(r.index+r[0].length),e.position<=r.index&&a<0&&(a=i.length-2);a<0&&(a=i.length-1);var s,u,c="",f=Math.min(e.line+t.linesAfter,o.length).toString().length,l=t.maxLength-(t.indent+f+3);for(s=1;s<=t.linesBefore&&!(a-s<0);s++)u=getLine(e.buffer,i[a-s],o[a-s],e.position-(i[a]-i[a-s]),l),c=te.repeat(" ",t.indent)+padStart((e.line-s+1).toString(),f)+" | "+u.str+"\n"+c;for(u=getLine(e.buffer,i[a],o[a],e.position,l),c+=te.repeat(" ",t.indent)+padStart((e.line+1).toString(),f)+" | "+u.str+"\n",c+=te.repeat("-",t.indent+f+3+u.pos)+"^\n",s=1;s<=t.linesAfter&&!(a+s>=o.length);s++)u=getLine(e.buffer,i[a+s],o[a+s],e.position-(i[a]-i[a+s]),l),c+=te.repeat(" ",t.indent)+padStart((e.line+s+1).toString(),f)+" | "+u.str+"\n";return c.replace(/\n$/,"")},ie=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],oe=["scalar","sequence","mapping"];var ae=function Type$1(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===ie.indexOf(t))throw new re('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function compileStyleAliases(e){var t={};return null!==e&&Object.keys(e).forEach((function(r){e[r].forEach((function(e){t[String(e)]=r}))})),t}(t.styleAliases||null),-1===oe.indexOf(this.kind))throw new re('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function compileList(e,t){var r=[];return e[t].forEach((function(e){var t=r.length;r.forEach((function(r,n){r.tag===e.tag&&r.kind===e.kind&&r.multi===e.multi&&(t=n)})),r[t]=e})),r}function Schema$1(e){return this.extend(e)}Schema$1.prototype.extend=function extend(e){var t=[],r=[];if(e instanceof ae)r.push(e);else if(Array.isArray(e))r=r.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new re("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(r=r.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof ae))throw new re("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new re("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new re("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),r.forEach((function(e){if(!(e instanceof ae))throw new re("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var n=Object.create(Schema$1.prototype);return n.implicit=(this.implicit||[]).concat(t),n.explicit=(this.explicit||[]).concat(r),n.compiledImplicit=compileList(n,"implicit"),n.compiledExplicit=compileList(n,"explicit"),n.compiledTypeMap=function compileMap(){var e,t,r={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function collectType(e){e.multi?(r.multi[e.kind].push(e),r.multi.fallback.push(e)):r[e.kind][e.tag]=r.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),_e=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var ye=/^[-+]?[0-9]+e/;var ge=new ae("tag:yaml.org,2002:float",{kind:"scalar",resolve:function resolveYamlFloat(e){return null!==e&&!(!_e.test(e)||"_"===e[e.length-1])},construct:function constructYamlFloat(e){var t,r;return r="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:r*parseFloat(t,10)},predicate:function isFloat(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||te.isNegativeZero(e))},represent:function representYamlFloat(e,t){var r;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(te.isNegativeZero(e))return"-0.0";return r=e.toString(10),ye.test(r)?r.replace("e",".e"):r},defaultStyle:"lowercase"}),ve=le.extend({implicit:[he,pe,de,ge]}),me=ve,be=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Se=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var we=new ae("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function resolveYamlTimestamp(e){return null!==e&&(null!==be.exec(e)||null!==Se.exec(e))},construct:function constructYamlTimestamp(e){var t,r,n,i,o,a,s,u,c=0,f=null;if(null===(t=be.exec(e))&&(t=Se.exec(e)),null===t)throw new Error("Date resolve error");if(r=+t[1],n=+t[2]-1,i=+t[3],!t[4])return new Date(Date.UTC(r,n,i));if(o=+t[4],a=+t[5],s=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(f=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(f=-f)),u=new Date(Date.UTC(r,n,i,o,a,s,c)),f&&u.setTime(u.getTime()-f),u},instanceOf:Date,represent:function representYamlTimestamp(e){return e.toISOString()}});var Ie=new ae("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function resolveYamlMerge(e){return"<<"===e||null===e}}),xe="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Ee=new ae("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function resolveYamlBinary(e){if(null===e)return!1;var t,r,n=0,i=e.length,o=xe;for(r=0;r64)){if(t<0)return!1;n+=6}return n%8==0},construct:function constructYamlBinary(e){var t,r,n=e.replace(/[\r\n=]/g,""),i=n.length,o=xe,a=0,s=[];for(t=0;t>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(n.charAt(t));return 0===(r=i%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===r?(s.push(a>>10&255),s.push(a>>2&255)):12===r&&s.push(a>>4&255),new Uint8Array(s)},predicate:function isBinary(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function representYamlBinary(e){var t,r,n="",i=0,o=e.length,a=xe;for(t=0;t>18&63],n+=a[i>>12&63],n+=a[i>>6&63],n+=a[63&i]),i=(i<<8)+e[t];return 0===(r=o%3)?(n+=a[i>>18&63],n+=a[i>>12&63],n+=a[i>>6&63],n+=a[63&i]):2===r?(n+=a[i>>10&63],n+=a[i>>4&63],n+=a[i<<2&63],n+=a[64]):1===r&&(n+=a[i>>2&63],n+=a[i<<4&63],n+=a[64],n+=a[64]),n}}),Oe=Object.prototype.hasOwnProperty,Be=Object.prototype.toString;var ke=new ae("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function resolveYamlOmap(e){if(null===e)return!0;var t,r,n,i,o,a=[],s=e;for(t=0,r=s.length;t>10),56320+(e-65536&1023))}for(var He=new Array(256),Ze=new Array(256),Ye=0;Ye<256;Ye++)He[Ye]=simpleEscapeSequence(Ye)?1:0,Ze[Ye]=simpleEscapeSequence(Ye);function State$1(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Le,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function generateError(e,t){var r={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return r.snippet=ne(r),new re(t,r)}function throwError(e,t){throw generateError(e,t)}function throwWarning(e,t){e.onWarning&&e.onWarning.call(null,generateError(e,t))}var Ge={YAML:function handleYamlDirective(e,t,r){var n,i,o;null!==e.version&&throwError(e,"duplication of %YAML directive"),1!==r.length&&throwError(e,"YAML directive accepts exactly one argument"),null===(n=/^([0-9]+)\.([0-9]+)$/.exec(r[0]))&&throwError(e,"ill-formed argument of the YAML directive"),i=parseInt(n[1],10),o=parseInt(n[2],10),1!==i&&throwError(e,"unacceptable YAML version of the document"),e.version=r[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&throwWarning(e,"unsupported YAML version of the document")},TAG:function handleTagDirective(e,t,r){var n,i;2!==r.length&&throwError(e,"TAG directive accepts exactly two arguments"),n=r[0],i=r[1],Ve.test(n)||throwError(e,"ill-formed tag handle (first argument) of the TAG directive"),je.call(e.tagMap,n)&&throwError(e,'there is a previously declared suffix for "'+n+'" tag handle'),$e.test(i)||throwError(e,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch(t){throwError(e,"tag prefix is malformed: "+i)}e.tagMap[n]=i}};function captureSegment(e,t,r,n){var i,o,a,s;if(t1&&(e.result+=te.repeat("\n",t-1))}function readBlockSequence(e,t){var r,n,i=e.tag,o=e.anchor,a=[],s=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),n=e.input.charCodeAt(e.position);0!==n&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,throwError(e,"tab characters must not be used in indentation")),45===n)&&is_WS_OR_EOL(e.input.charCodeAt(e.position+1));)if(s=!0,e.position++,skipSeparationSpace(e,!0,-1)&&e.lineIndent<=t)a.push(null),n=e.input.charCodeAt(e.position);else if(r=e.line,composeNode(e,t,Re,!1,!0),a.push(e.result),skipSeparationSpace(e,!0,-1),n=e.input.charCodeAt(e.position),(e.line===r||e.lineIndent>t)&&0!==n)throwError(e,"bad indentation of a sequence entry");else if(e.lineIndentt?d=1:e.lineIndent===t?d=0:e.lineIndentt?d=1:e.lineIndent===t?d=0:e.lineIndentt)&&(v&&(a=e.line,s=e.lineStart,u=e.position),composeNode(e,t,ze,!0,i)&&(v?_=e.result:g=e.result),v||(storeMappingPair(e,h,p,d,_,g,a,s,u),d=_=g=null),skipSeparationSpace(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==c)throwError(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===i?throwError(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?throwError(e,"repeat of an indentation width identifier"):(f=t+i-1,c=!0)}if(is_WHITE_SPACE(o)){do{o=e.input.charCodeAt(++e.position)}while(is_WHITE_SPACE(o));if(35===o)do{o=e.input.charCodeAt(++e.position)}while(!is_EOL(o)&&0!==o)}for(;0!==o;){for(readLineBreak(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!c||e.lineIndentf&&(f=e.lineIndent),is_EOL(o))l++;else{if(e.lineIndent0){for(i=a,o=0;i>0;i--)(a=fromHexCode(s=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:throwError(e,"expected hexadecimal character");e.result+=charFromCodepoint(o),e.position++}else throwError(e,"unknown escape sequence");r=n=e.position}else is_EOL(s)?(captureSegment(e,r,n,!0),writeFoldedLines(e,skipSeparationSpace(e,!1,t)),r=n=e.position):e.position===e.lineStart&&testDocumentSeparator(e)?throwError(e,"unexpected end of the document within a double quoted scalar"):(e.position++,n=e.position)}throwError(e,"unexpected end of the stream within a double quoted scalar")}(e,h)?g=!0:!function readAlias(e){var t,r,n;if(42!==(n=e.input.charCodeAt(e.position)))return!1;for(n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!is_WS_OR_EOL(n)&&!is_FLOW_INDICATOR(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&throwError(e,"name of an alias node must contain at least one character"),r=e.input.slice(t,e.position),je.call(e.anchorMap,r)||throwError(e,'unidentified alias "'+r+'"'),e.result=e.anchorMap[r],skipSeparationSpace(e,!0,-1),!0}(e)?function readPlainScalar(e,t,r){var n,i,o,a,s,u,c,f,l=e.kind,h=e.result;if(is_WS_OR_EOL(f=e.input.charCodeAt(e.position))||is_FLOW_INDICATOR(f)||35===f||38===f||42===f||33===f||124===f||62===f||39===f||34===f||37===f||64===f||96===f)return!1;if((63===f||45===f)&&(is_WS_OR_EOL(n=e.input.charCodeAt(e.position+1))||r&&is_FLOW_INDICATOR(n)))return!1;for(e.kind="scalar",e.result="",i=o=e.position,a=!1;0!==f;){if(58===f){if(is_WS_OR_EOL(n=e.input.charCodeAt(e.position+1))||r&&is_FLOW_INDICATOR(n))break}else if(35===f){if(is_WS_OR_EOL(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&testDocumentSeparator(e)||r&&is_FLOW_INDICATOR(f))break;if(is_EOL(f)){if(s=e.line,u=e.lineStart,c=e.lineIndent,skipSeparationSpace(e,!1,-1),e.lineIndent>=t){a=!0,f=e.input.charCodeAt(e.position);continue}e.position=o,e.line=s,e.lineStart=u,e.lineIndent=c;break}}a&&(captureSegment(e,i,o,!1),writeFoldedLines(e,e.line-s),i=o=e.position,a=!1),is_WHITE_SPACE(f)||(o=e.position+1),f=e.input.charCodeAt(++e.position)}return captureSegment(e,i,o,!1),!!e.result||(e.kind=l,e.result=h,!1)}(e,h,Ne===r)&&(g=!0,null===e.tag&&(e.tag="?")):(g=!0,null===e.tag&&null===e.anchor||throwError(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===d&&(g=s&&readBlockSequence(e,p))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&throwError(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),u=0,c=e.implicitTypes.length;u"),null!==e.result&&l.kind!==e.kind&&throwError(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result,e.tag)?(e.result=l.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):throwError(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function readDocument(e){var t,r,n,i,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(i=e.input.charCodeAt(e.position))&&(skipSeparationSpace(e,!0,-1),i=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==i));){for(a=!0,i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!is_WS_OR_EOL(i);)i=e.input.charCodeAt(++e.position);for(n=[],(r=e.input.slice(t,e.position)).length<1&&throwError(e,"directive name must not be less than one character in length");0!==i;){for(;is_WHITE_SPACE(i);)i=e.input.charCodeAt(++e.position);if(35===i){do{i=e.input.charCodeAt(++e.position)}while(0!==i&&!is_EOL(i));break}if(is_EOL(i))break;for(t=e.position;0!==i&&!is_WS_OR_EOL(i);)i=e.input.charCodeAt(++e.position);n.push(e.input.slice(t,e.position))}0!==i&&readLineBreak(e),je.call(Ge,r)?Ge[r](e,r,n):throwWarning(e,'unknown document directive "'+r+'"')}skipSeparationSpace(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,skipSeparationSpace(e,!0,-1)):a&&throwError(e,"directives end mark is expected"),composeNode(e,e.lineIndent-1,ze,!1,!0),skipSeparationSpace(e,!0,-1),e.checkLineBreaks&&We.test(e.input.slice(o,e.position))&&throwWarning(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&testDocumentSeparator(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,skipSeparationSpace(e,!0,-1)):e.position=55296&&n<=56319&&t+1=56320&&r<=57343?1024*(n-55296)+r-56320+65536:n}function needIndentIndicator(e){return/^\n* /.test(e)}var Mt=1,qt=2,Lt=3,jt=4,Nt=5;function chooseScalarStyle(e,t,r,n,i,o,a,s){var u,c=0,f=null,l=!1,h=!1,p=-1!==n,d=-1,_=function isPlainSafeFirst(e){return isPrintable(e)&&e!==et&&!isWhitespace(e)&&e!==dt&&e!==vt&&e!==_t&&e!==pt&&e!==bt&&e!==St&&e!==It&&e!==Et&&e!==st&&e!==ct&&e!==ht&&e!==ot&&e!==xt&&e!==yt&&e!==gt&&e!==lt&&e!==at&&e!==ut&&e!==mt&&e!==wt}(codePointAt(e,0))&&function isPlainSafeLast(e){return!isWhitespace(e)&&e!==_t}(codePointAt(e,e.length-1));if(t||a)for(u=0;u=65536?u+=2:u++){if(!isPrintable(c=codePointAt(e,u)))return Nt;_=_&&isPlainSafe(c,f,s),f=c}else{for(u=0;u=65536?u+=2:u++){if((c=codePointAt(e,u))===rt)l=!0,p&&(h=h||u-d-1>n&&" "!==e[d+1],d=u);else if(!isPrintable(c))return Nt;_=_&&isPlainSafe(c,f,s),f=c}h=h||p&&u-d-1>n&&" "!==e[d+1]}return l||h?r>9&&needIndentIndicator(e)?Nt:a?o===Ct?Nt:qt:h?jt:Lt:!_||a||i(e)?o===Ct?Nt:qt:Mt}function writeScalar(e,t,r,n,i){e.dump=function(){if(0===t.length)return e.quotingType===Ct?'""':"''";if(!e.noCompatMode&&(-1!==Bt.indexOf(t)||kt.test(t)))return e.quotingType===Ct?'"'+t+'"':"'"+t+"'";var o=e.indent*Math.max(1,r),a=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),s=n||e.flowLevel>-1&&r>=e.flowLevel;switch(chooseScalarStyle(t,s,e.indent,a,(function testAmbiguity(t){return function testImplicitResolving(e,t){var r,n;for(r=0,n=e.implicitTypes.length;r"+blockHeader(t,e.indent)+dropEndingNewline(indentString(function foldString(e,t){var r,n,i=/(\n+)([^\n]*)/g,o=(s=e.indexOf("\n"),s=-1!==s?s:e.length,i.lastIndex=s,foldLine(e.slice(0,s),t)),a="\n"===e[0]||" "===e[0];var s;for(;n=i.exec(e);){var u=n[1],c=n[2];r=" "===c[0],o+=u+(a||r||""===c?"":"\n")+foldLine(c,t),a=r}return o}(t,a),o));case Nt:return'"'+function escapeString(e){for(var t,r="",n=0,i=0;i=65536?i+=2:i++)n=codePointAt(e,i),!(t=Ot[n])&&isPrintable(n)?(r+=e[i],n>=65536&&(r+=e[i+1])):r+=t||encodeHex(n);return r}(t)+'"';default:throw new re("impossible error: invalid scalar style")}}()}function blockHeader(e,t){var r=needIndentIndicator(e)?String(t):"",n="\n"===e[e.length-1];return r+(n&&("\n"===e[e.length-2]||"\n"===e)?"+":n?"":"-")+"\n"}function dropEndingNewline(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function foldLine(e,t){if(""===e||" "===e[0])return e;for(var r,n,i=/ [^ ]/g,o=0,a=0,s=0,u="";r=i.exec(e);)(s=r.index)-o>t&&(n=a>o?a:s,u+="\n"+e.slice(o,n),o=n+1),a=s;return u+="\n",e.length-o>t&&a>o?u+=e.slice(o,a)+"\n"+e.slice(a+1):u+=e.slice(o),u.slice(1)}function writeBlockSequence(e,t,r,n){var i,o,a,s="",u=e.tag;for(i=0,o=r.length;i tag resolver accepts not "'+u+'" style');n=s.represent[u](t,u)}e.dump=n}return!0}return!1}function writeNode(e,t,r,n,i,o,a){e.tag=null,e.dump=r,detectType(e,r,!1)||detectType(e,r,!0);var s,u=Qe.call(e.dump),c=n;n&&(n=e.flowLevel<0||e.flowLevel>t);var f,l,h="[object Object]"===u||"[object Array]"===u;if(h&&(l=-1!==(f=e.duplicates.indexOf(r))),(null!==e.tag&&"?"!==e.tag||l||2!==e.indent&&t>0)&&(i=!1),l&&e.usedDuplicates[f])e.dump="*ref_"+f;else{if(h&&l&&!e.usedDuplicates[f]&&(e.usedDuplicates[f]=!0),"[object Object]"===u)n&&0!==Object.keys(e.dump).length?(!function writeBlockMapping(e,t,r,n){var i,o,a,s,u,c,f="",l=e.tag,h=Object.keys(r);if(!0===e.sortKeys)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new re("sortKeys must be a boolean or a function");for(i=0,o=h.length;i1024)&&(e.dump&&rt===e.dump.charCodeAt(0)?c+="?":c+="? "),c+=e.dump,u&&(c+=generateNextLine(e,t)),writeNode(e,t+1,s,!0,u)&&(e.dump&&rt===e.dump.charCodeAt(0)?c+=":":c+=": ",f+=c+=e.dump));e.tag=l,e.dump=f||"{}"}(e,t,e.dump,i),l&&(e.dump="&ref_"+f+e.dump)):(!function writeFlowMapping(e,t,r){var n,i,o,a,s,u="",c=e.tag,f=Object.keys(r);for(n=0,i=f.length;n1024&&(s+="? "),s+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),writeNode(e,t,a,!1,!1)&&(u+=s+=e.dump));e.tag=c,e.dump="{"+u+"}"}(e,t,e.dump),l&&(e.dump="&ref_"+f+" "+e.dump));else if("[object Array]"===u)n&&0!==e.dump.length?(e.noArrayIndent&&!a&&t>0?writeBlockSequence(e,t-1,e.dump,i):writeBlockSequence(e,t,e.dump,i),l&&(e.dump="&ref_"+f+e.dump)):(!function writeFlowSequence(e,t,r){var n,i,o,a="",s=e.tag;for(n=0,i=r.length;n",e.dump=s+" "+e.dump)}return!0}function getDuplicateReferences(e,t){var r,n,i=[],o=[];for(inspectNode(e,i,o),r=0,n=o.length;r{try{return Tt.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}},Rt="configs_update",zt="configs_toggle";function update(e,t){return{type:Rt,payload:{[e]:t}}}function toggle(e){return{type:zt,payload:e}}const loaded=()=>()=>{},downloadConfig=e=>t=>{const{fn:{fetch:r}}=t;return r(e)},getConfigByUrl=(e,t)=>r=>{let{specActions:n}=r;if(e)return n.downloadConfig(e).then(next,next);function next(r){r instanceof Error||r.status>=400?(n.updateLoadingStatus("failedConfig"),n.updateLoadingStatus("failedConfig"),n.updateUrl(""),console.error(r.statusText+" "+e.url),t(null)):t(parseYamlConfig(r.text))}},get=(e,t)=>e.getIn(Array.isArray(t)?t:[t]),Pt={[Rt]:(e,t)=>e.merge((0,a.fromJS)(t.payload)),[zt]:(e,t)=>{const r=t.payload,n=e.get(r);return e.set(r,!n)}},Dt={getLocalConfig:()=>parseYamlConfig('---\nurl: "https://petstore.swagger.io/v2/swagger.json"\ndom_id: "#swagger-ui"\nvalidatorUrl: "https://validator.swagger.io/validator"\n')};var Ft=__webpack_require__(7287),Ut=__webpack_require__.n(Ft),Wt=__webpack_require__(3101),Kt=__webpack_require__.n(Wt);const Vt=console.error,withErrorBoundary=e=>t=>{const{getComponent:r,fn:n}=e(),o=r("ErrorBoundary"),a=n.getDisplayName(t);class WithErrorBoundary extends i.Component{render(){return i.createElement(o,{targetName:a,getComponent:r,fn:n},i.createElement(t,Kt()({},this.props,this.context)))}}var s;return WithErrorBoundary.displayName=`WithErrorBoundary(${a})`,(s=t).prototype&&s.prototype.isReactComponent&&(WithErrorBoundary.prototype.mapStateToProps=t.prototype.mapStateToProps),WithErrorBoundary},fallback=e=>{let{name:t}=e;return i.createElement("div",{className:"fallback"},"😱 ",i.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))};class ErrorBoundary extends i.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:r}=this.props;if(this.state.hasError){const r=e("Fallback");return i.createElement(r,{name:t})}return r}}ErrorBoundary.defaultProps={targetName:"this component",getComponent:()=>fallback,fn:{componentDidCatch:Vt},children:null};const $t=ErrorBoundary,Ht=[top_bar,function configsPlugin(){return{statePlugins:{spec:{actions:t,selectors:Dt},configs:{reducers:Pt,actions:e,selectors:n}}}},stadalone_layout,function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{let{getSystem:n}=r;const i=t?e:["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper",...e],o=Ut()(i,Array(i.length).fill(((e,t)=>{let{fn:r}=t;return r.withErrorBoundary(e)})));return{fn:{componentDidCatch:Vt,withErrorBoundary:withErrorBoundary(n)},components:{ErrorBoundary:$t,Fallback:fallback},wrapComponents:o}}}({fullOverride:!0,componentList:["Topbar","StandaloneLayout","onlineValidatorBadge"]})]})(),r=r.default})())); +//# sourceMappingURL=swagger-ui-standalone-preset.js.map \ No newline at end of file diff --git a/docs/assets/scripts/swagger-ui-standalone-preset.js.map b/docs/assets/scripts/swagger-ui-standalone-preset.js.map new file mode 100644 index 000000000..d0cc02bd4 --- /dev/null +++ b/docs/assets/scripts/swagger-ui-standalone-preset.js.map @@ -0,0 +1 @@ +{"version":3,"file":"swagger-ui-standalone-preset.js","mappings":"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","sources":["webpack://SwaggerUIStandalonePreset/webpack/universalModuleDefinition","webpack://SwaggerUIStandalonePreset/./node_modules/@braintree/sanitize-url/dist/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/base64-js/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/buffer/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/actual/instance/bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/actual/object/assign.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/es/function/virtual/bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/es/instance/bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/es/object/assign.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/features/instance/bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/features/object/assign.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/full/instance/bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/full/object/assign.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/a-callable.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/an-object.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/array-includes.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/array-slice.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/classof-raw.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/create-non-enumerable-property.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/create-property-descriptor.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/define-global-property.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/descriptors.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/document-all.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/document-create-element.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/engine-user-agent.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/engine-v8-version.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/entry-virtual.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/enum-bug-keys.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/export.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/fails.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/function-apply.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/function-bind-context.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/function-bind-native.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/function-bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/function-call.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/function-uncurry-this-clause.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/function-uncurry-this.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/get-built-in.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/get-method.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/global.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/has-own-property.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/hidden-keys.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/ie8-dom-define.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/indexed-object.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/is-callable.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/is-forced.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/is-null-or-undefined.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/is-object.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/is-pure.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/is-symbol.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/length-of-array-like.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/math-trunc.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-assign.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-define-property.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-get-own-property-symbols.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-is-prototype-of.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-keys-internal.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-keys.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/object-property-is-enumerable.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/ordinary-to-primitive.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/path.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/require-object-coercible.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/shared-store.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/shared.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/symbol-constructor-detection.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/to-absolute-index.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/to-indexed-object.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/to-integer-or-infinity.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/to-length.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/to-object.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/to-primitive.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/to-property-key.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/try-to-string.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/uid.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/use-symbol-as-uid.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/v8-prototype-define-bug.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/internals/well-known-symbol.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/modules/es.function.bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/modules/es.object.assign.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/stable/instance/bind.js","webpack://SwaggerUIStandalonePreset/./node_modules/core-js-pure/stable/object/assign.js","webpack://SwaggerUIStandalonePreset/./node_modules/css.escape/css.escape.js","webpack://SwaggerUIStandalonePreset/./node_modules/ieee754/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/immutable/dist/immutable.js","webpack://SwaggerUIStandalonePreset/./node_modules/inherits/inherits_browser.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_DataView.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_Hash.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_ListCache.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_Map.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_MapCache.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_Promise.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_Set.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_SetCache.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_Stack.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_Symbol.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_Uint8Array.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_WeakMap.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_arrayFilter.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_arrayLikeKeys.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_arrayMap.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_arrayPush.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_arrayReduce.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_arraySome.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_asciiToArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_asciiWords.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_assignValue.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_assocIndexOf.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseAssignValue.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseEach.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseFindIndex.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseFor.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseForOwn.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseGet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseGetAllKeys.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseGetTag.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseHasIn.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseIsArguments.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseIsEqual.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseIsEqualDeep.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseIsMatch.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseIsNative.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseIsTypedArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseIteratee.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseKeys.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseMatches.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseMatchesProperty.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseProperty.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_basePropertyDeep.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_basePropertyOf.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseSlice.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseSome.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseTimes.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseToString.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseTrim.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseUnary.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_baseZipObject.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_cacheHas.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_castPath.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_castSlice.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_coreJsData.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_createBaseEach.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_createBaseFor.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_createCaseFirst.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_createCompounder.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_createFind.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_deburrLetter.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_defineProperty.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_equalArrays.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_equalByTag.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_equalObjects.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_freeGlobal.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getAllKeys.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getMapData.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getMatchData.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getNative.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getRawTag.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getSymbols.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getTag.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_getValue.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hasPath.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hasUnicode.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hasUnicodeWord.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hashClear.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hashDelete.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hashGet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hashHas.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_hashSet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_isIndex.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_isIterateeCall.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_isKey.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_isKeyable.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_isMasked.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_isPrototype.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_isStrictComparable.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_listCacheClear.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_listCacheDelete.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_listCacheGet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_listCacheHas.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_listCacheSet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_mapCacheClear.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_mapCacheDelete.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_mapCacheGet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_mapCacheHas.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_mapCacheSet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_mapToArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_matchesStrictComparable.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_memoizeCapped.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_nativeCreate.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_nativeKeys.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_nodeUtil.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_objectToString.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_overArg.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_root.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_setCacheAdd.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_setCacheHas.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_setToArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_stackClear.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_stackDelete.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_stackGet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_stackHas.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_stackSet.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_stringToArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_stringToPath.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_toKey.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_toSource.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_trimmedEndIndex.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_unicodeToArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/_unicodeWords.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/camelCase.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/capitalize.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/deburr.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/eq.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/find.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/findIndex.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/get.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/hasIn.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/identity.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isArguments.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isArrayLike.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isBuffer.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isFunction.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isLength.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isObject.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isObjectLike.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isSymbol.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/isTypedArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/keys.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/memoize.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/property.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/some.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/stubArray.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/stubFalse.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/toFinite.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/toInteger.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/toNumber.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/toString.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/upperFirst.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/words.js","webpack://SwaggerUIStandalonePreset/./node_modules/lodash/zipObject.js","webpack://SwaggerUIStandalonePreset/./node_modules/object-assign/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/process/browser.js","webpack://SwaggerUIStandalonePreset/./node_modules/randombytes/browser.js","webpack://SwaggerUIStandalonePreset/./node_modules/react/cjs/react.production.min.js","webpack://SwaggerUIStandalonePreset/./node_modules/react/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/safe-buffer/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/hash.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/sha.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/sha1.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/sha224.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/sha256.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/sha384.js","webpack://SwaggerUIStandalonePreset/./node_modules/sha.js/sha512.js","webpack://SwaggerUIStandalonePreset/./node_modules/@babel/runtime-corejs3/helpers/extends.js","webpack://SwaggerUIStandalonePreset/webpack/bootstrap","webpack://SwaggerUIStandalonePreset/webpack/runtime/compat get default export","webpack://SwaggerUIStandalonePreset/webpack/runtime/define property getters","webpack://SwaggerUIStandalonePreset/webpack/runtime/global","webpack://SwaggerUIStandalonePreset/webpack/runtime/hasOwnProperty shorthand","webpack://SwaggerUIStandalonePreset/webpack/runtime/make namespace object","webpack://SwaggerUIStandalonePreset/webpack/runtime/node module decorator","webpack://SwaggerUIStandalonePreset/./src/standalone/plugins/stadalone-layout/components/StandaloneLayout.jsx","webpack://SwaggerUIStandalonePreset/./src/standalone/plugins/stadalone-layout/index.js","webpack://SwaggerUIStandalonePreset/./src/core/window.js","webpack://SwaggerUIStandalonePreset/./src/core/utils/get-parameter-schema.js","webpack://SwaggerUIStandalonePreset/./src/core/utils/index.js","webpack://SwaggerUIStandalonePreset/./src/standalone/plugins/top-bar/components/TopBar.jsx","webpack://SwaggerUIStandalonePreset/./src/standalone/plugins/top-bar/assets/logo_small.svg","webpack://SwaggerUIStandalonePreset/./src/standalone/plugins/top-bar/components/Logo.jsx","webpack://SwaggerUIStandalonePreset/./src/standalone/plugins/top-bar/index.js","webpack://SwaggerUIStandalonePreset/./node_modules/js-yaml/dist/js-yaml.mjs","webpack://SwaggerUIStandalonePreset/./src/core/plugins/configs/helpers.js","webpack://SwaggerUIStandalonePreset/./src/core/plugins/configs/actions.js","webpack://SwaggerUIStandalonePreset/./src/core/plugins/configs/spec-actions.js","webpack://SwaggerUIStandalonePreset/./src/core/plugins/configs/selectors.js","webpack://SwaggerUIStandalonePreset/./src/core/plugins/configs/reducers.js","webpack://SwaggerUIStandalonePreset/./src/core/plugins/configs/index.js","webpack://SwaggerUIStandalonePreset/./src/core/plugins/safe-render/fn.jsx","webpack://SwaggerUIStandalonePreset/./src/core/plugins/safe-render/components/fallback.jsx","webpack://SwaggerUIStandalonePreset/./src/core/plugins/safe-render/components/error-boundary.jsx","webpack://SwaggerUIStandalonePreset/./src/standalone/presets/standalone/index.js","webpack://SwaggerUIStandalonePreset/./src/core/plugins/safe-render/index.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","this","invalidProtocolRegex","htmlEntitiesRegex","htmlCtrlEntityRegex","ctrlCharactersRegex","urlSchemeRegex","relativeFirstCharacters","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","indexOf","start","end","num","output","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","fromString","string","encoding","isEncoding","actual","write","slice","ArrayBuffer","isView","fromArrayView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","SharedArrayBuffer","valueOf","b","fromObject","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","str","byteArray","base64Write","ucs2Write","utf16leToBytes","units","c","hi","lo","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","apply","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","proto","foo","e","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","NodeError","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","split","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","parent","entryVirtual","bind","isPrototypeOf","method","FunctionPrototype","Function","it","own","path","assign","isCallable","tryToString","$TypeError","argument","isObject","$String","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","index","uncurryThis","stringSlice","DESCRIPTORS","definePropertyModule","createPropertyDescriptor","object","key","f","bitmap","global","fails","documentAll","document","all","IS_HTMLDDA","EXISTS","createElement","navigator","userAgent","match","version","process","Deno","versions","v8","CONSTRUCTOR","getOwnPropertyDescriptor","isForced","createNonEnumerableProperty","hasOwn","wrapConstructor","NativeConstructor","Wrapper","options","source","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","descriptor","TARGET","GLOBAL","STATIC","stat","PROTO","nativeSource","targetPrototype","forced","dontCallGetSet","wrap","sham","real","exec","NATIVE_BIND","Reflect","aCallable","that","test","hasOwnProperty","arraySlice","$Function","factories","F","Prototype","partArgs","boundFunction","bound","args","C","argsLength","construct","classofRaw","uncurryThisWithBind","aFunction","variable","namespace","isNullOrUndefined","V","P","func","check","globalThis","window","self","g","toObject","classof","$Object","propertyIsEnumerable","$documentAll","replacement","feature","detection","normalize","POLYFILL","NATIVE","getBuiltIn","USE_SYMBOL_AS_UID","$Symbol","toLength","ceil","trunc","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","IndexedObject","$assign","A","B","symbol","forEach","chr","T","argumentsLength","getOwnPropertySymbols","S","keys","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","CONFIGURABLE","WRITABLE","Attributes","current","hiddenKeys","names","result","internalObjectKeys","enumBugKeys","$propertyIsEnumerable","NASHORN_BUG","pref","defineGlobalProperty","SHARED","store","IS_PURE","mode","copyright","license","V8_VERSION","toIntegerOrInfinity","integer","requireObjectCoercible","number","isSymbol","getMethod","ordinaryToPrimitive","wellKnownSymbol","TO_PRIMITIVE","exoticToPrim","id","postfix","random","NATIVE_SYMBOL","iterator","shared","uid","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","$","arity","CSS","escape","cssEscape","codeUnit","firstCodeUnit","charAt","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","s","NaN","rt","isNaN","log","LN2","SLICE$0","createClass","ctor","superClass","create","Iterable","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","Keyed","Indexed","Set","DELETE","SHIFT","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","newArr","ii","ensureSize","iter","__iterate","returnTrue","wrapIndex","uint32Index","wholeSlice","begin","resolveBegin","resolveIndex","resolveEnd","defaultIndex","ITERATE_KEYS","ITERATE_VALUES","ITERATE_ENTRIES","REAL_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","next","iteratorValue","k","v","iteratorResult","done","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","getIterator","iterable","iteratorFn","isArrayLike","emptySequence","toSeq","seqFromValue","toKeyedSeq","fromEntrySeq","keyedSeqFromValue","entrySeq","toIndexedSeq","indexedSeqFromValue","toSetSeq","KEYS","VALUES","ENTRIES","toSource","of","__toString","cacheResult","_cache","__iterateUncached","toArray","reverse","seqIterate","__iterator","seqIterator","isSeq","EMPTY_SEQ","EMPTY_REPEAT","EMPTY_RANGE","IS_SEQ_SENTINEL","ArraySeq","_array","ObjectSeq","_object","_keys","IterableSeq","_iterable","IteratorSeq","_iterator","_iteratorCache","maybeSeq","seq","maybeIndexedSeqFromValue","useKeys","cache","maxIndex","entry","__iteratorUncached","fromJS","json","converter","fromJSWith","fromJSDefault","parentJSON","map","isPlainObj","toList","toMap","is","valueA","valueB","deepEqual","__hash","notAssociative","entries","every","flipped","_","allEqual","bSize","has","Repeat","times","_value","invariant","condition","Range","step","_start","_end","_step","Collection","KeyedCollection","IndexedCollection","SetCollection","notSetValue","iterations","searchValue","this$0","other","possibleIndex","offsetValue","imul","smi","i32","hash","o","h","STRING_HASH_CACHE_MIN_STRLEN","cachedHashString","hashString","hashCode","hashJSObj","stringHashCache","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","getIENodeHash","objHashUID","isExtensible","nodeType","node","uniqueID","documentElement","WeakMap","assertNotInfinite","Map","emptyMap","isMap","withMutations","maybeMap","IS_MAP_SENTINEL","keyValues","_root","updateMap","setIn","keyPath","updateIn","remove","deleteIn","update","updater","updatedValue","updateInDeepMap","forceIterator","clear","__ownerID","__altered","merge","mergeIntoMapWith","mergeWith","merger","mergeIn","iters","mergeDeep","deepMerger","mergeDeepWith","deepMergerWith","mergeDeepIn","sort","comparator","OrderedMap","sortFactory","sortBy","mapper","mutable","asMutable","wasAltered","__ensureOwner","asImmutable","MapIterator","iterate","ownerID","makeMap","EMPTY_MAP","MapPrototype","ArrayMapNode","BitmapIndexedNode","nodes","HashArrayMapNode","count","HashCollisionNode","keyHash","ValueNode","_type","_reverse","_stack","mapIteratorFrame","mapIteratorValue","prev","__prev","newRoot","newSize","didChangeSize","didAlter","updateNode","shift","isLeafNode","mergeIntoNode","newNode","idx1","idx2","createNodes","packNodes","excluding","packedII","packedNodes","bit","expandNodes","including","expandedNodes","iterables","mergeIntoCollectionWith","existing","nextValue","collection","filter","mergeIntoMap","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","popCount","idx","canEdit","newArray","spliceIn","newLen","after","spliceOut","pop","removeIn","removed","exists","MAX_ARRAY_MAP_SIZE","isEditable","newEntries","keyHashFrag","MAX_BITMAP_INDEXED_SIZE","newBitmap","newNodes","newCount","MIN_HASH_ARRAY_MAP_SIZE","keyMatch","subNode","List","empty","emptyList","isList","makeList","VNode","setSize","maybeList","IS_LIST_SENTINEL","listNodeFor","_origin","updateList","splice","insert","_capacity","_level","_tail","values","oldSize","setListBounds","unshift","mergeIntoListWith","iterateList","DONE","ListPrototype","removeBefore","level","originIndex","newChild","removingFirst","oldChild","editable","editableVNode","removeAfter","sizeIndex","EMPTY_LIST","EMPTY_ORDERED_MAP","left","right","tailPos","getTailOffset","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","to","origin","capacity","newTail","updateVNode","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","maybeOrderedMap","makeOrderedMap","omap","_map","_list","updateOrderedMap","newMap","newList","flip","ToKeyedSequence","indexed","_iter","_useKeys","ToIndexedSequence","ToSetSequence","FromEntriesSequence","flipFactory","flipSequence","makeSequence","reversedSequence","cacheResultThrough","mapFactory","context","mappedSequence","reverseFactory","filterFactory","predicate","filterSequence","countByFactory","grouper","groups","groupByFactory","isKeyedIter","coerce","iterableClass","reify","sliceFactory","originalSize","resolvedBegin","resolvedEnd","sliceSize","resolvedSize","sliceSeq","skipped","isSkipping","takeWhileFactory","takeSequence","iterating","skipWhileFactory","skipSequence","skipping","concatFactory","isKeyedIterable","singleton","concatSeq","flatten","reduce","sum","flattenFactory","depth","flatSequence","stopped","flatDeep","currentDepth","flatMapFactory","interposeFactory","separator","interposedSequence","defaultComparator","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","some","validateEntry","resolveSize","Record","defaultValues","hasInitialized","RecordType","setProps","RecordTypePrototype","_name","_defaultValues","RecordPrototype","valueSeq","indexedIterable","recordName","defaultVal","_empty","makeRecord","likeRecord","record","getPrototypeOf","setProp","emptySet","isSet","add","maybeSet","IS_SET_SENTINEL","fromKeys","keySeq","updateSet","union","intersect","originalSet","subtract","OrderedSet","__make","EMPTY_SET","SetPrototype","__empty","makeSet","emptyOrderedSet","isOrderedSet","maybeOrderedSet","EMPTY_ORDERED_SET","OrderedSetPrototype","makeOrderedSet","Stack","emptyStack","isStack","unshiftAll","maybeStack","IS_STACK_SENTINEL","head","_head","peek","makeStack","pushAll","EMPTY_STACK","StackPrototype","mixin","methods","keyCopier","toJS","__toJS","toOrderedMap","toOrderedSet","toSet","toStack","__toStringMapper","returnValue","find","findEntry","sideEffect","joined","isFirst","reducer","initialReduction","reduction","useFirst","reduceRight","reversed","not","butLast","isEmpty","countBy","entriesSequence","entryMapper","filterNot","findKey","findLast","findLastEntry","findLastKey","flatMap","searchKey","getIn","searchKeyPath","nested","groupBy","hasIn","isSubset","isSuperset","keyOf","keyMapper","lastKeyOf","maxBy","neg","defaultNegComparator","minBy","rest","skip","amount","skipLast","skipWhile","skipUntil","take","takeLast","takeWhile","takeUntil","hashIterable","IterablePrototype","quoteString","chain","contains","mapEntries","mapKeys","KeyedIterablePrototype","JSON","stringify","defaultZipper","ordered","keyed","murmurHashOfSize","hashMerge","findIndex","removeNum","numArgs","spliced","findLastIndex","interpose","interleave","zipped","interleaved","zip","zipWith","inherits","superCtor","super_","TempCtor","DataView","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","Promise","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","arrayFilter","resIndex","baseTimes","isArguments","isIndex","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","arrayMap","iteratee","arrayPush","arrayReduce","accumulator","initAccum","arraySome","asciiToArray","reAsciiWord","asciiWords","baseAssignValue","eq","assignValue","objValue","assocIndexOf","baseForOwn","baseEach","createBaseEach","baseFindIndex","fromRight","baseFor","createBaseFor","castPath","toKey","baseGet","baseGetAllKeys","keysFunc","symbolsFunc","getRawTag","objectToString","symToStringTag","toStringTag","baseGetTag","baseHasIn","isObjectLike","baseIsArguments","baseIsEqualDeep","baseIsEqual","bitmask","customizer","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isFunction","isMasked","reIsHostCtor","funcProto","objectProto","funcToString","reIsNative","RegExp","baseIsNative","isLength","typedArrayTags","baseIsTypedArray","baseMatches","baseMatchesProperty","identity","property","baseIteratee","isPrototype","nativeKeys","baseKeys","getMatchData","matchesStrictComparable","isKey","isStrictComparable","baseProperty","basePropertyDeep","basePropertyOf","baseSlice","baseSome","symbolProto","symbolToString","baseToString","trimmedEndIndex","reTrimStart","baseTrim","baseUnary","baseZipObject","props","assignFunc","valsLength","cacheHas","stringToPath","castSlice","coreJsData","eachFunc","hasUnicode","stringToArray","createCaseFirst","methodName","strSymbols","trailing","deburr","words","reApos","createCompounder","callback","createFind","findIndexFunc","deburrLetter","isPartial","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","symbolValueOf","tag","convert","stacked","getAllKeys","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","freeGlobal","getSymbols","isKeyable","getMapData","getValue","nativeObjectToString","isOwn","unmasked","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","resolve","Ctor","ctorString","hasPath","hasFunc","reHasUnicode","reHasUnicodeWord","hasUnicodeWord","nativeCreate","reIsUint","isIterateeCall","reIsDeepProp","reIsPlainProp","maskSrcKey","IE_PROTO","memoize","memoizeCapped","overArg","freeExports","freeModule","freeProcess","nodeUtil","types","require","binding","transform","freeSelf","pairs","LARGE_ARRAY_SIZE","unicodeToArray","rePropName","reEscapeChar","quote","subString","reWhitespace","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsModifier","rsEmoji","reUnicodeWord","unicodeWords","capitalize","camelCase","word","upperFirst","reLatin","reComboMark","toInteger","nativeMax","defaultValue","stubFalse","nodeIsTypedArray","resolver","memoized","Cache","guard","toNumber","INFINITY","toFinite","remainder","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","pattern","zipObject","propIsEnumerable","shouldUseNative","test1","getOwnPropertyNames","test2","test3","letter","err","symbols","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","runClearTimeout","marker","Item","noop","nextTick","title","browser","env","argv","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","cwd","chdir","umask","MAX_BYTES","MAX_UINT32","crypto","msCrypto","getRandomValues","randomBytes","cb","generated","oldBrowser","l","p","Fragment","StrictMode","Profiler","q","r","t","Suspense","u","for","w","z","encodeURIComponent","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","refs","D","isReactComponent","setState","forceUpdate","isPureReactComponent","G","H","I","__self","__source","J","children","defaultProps","$$typeof","_owner","L","M","N","K","Q","_status","_result","then","default","R","ReactCurrentDispatcher","ReactCurrentBatchConfig","transition","ReactCurrentOwner","IsSomeRendererActing","Children","only","Component","PureComponent","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","cloneElement","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createFactory","createRef","forwardRef","render","isValidElement","lazy","_payload","_init","memo","useCallback","useContext","useDebugValue","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","copyProps","SafeBuffer","blockSize","finalSize","_block","_finalSize","_blockSize","_len","enc","block","accum","assigned","_update","digest","rem","bits","lowBits","highBits","_hash","SHA","algorithm","Algorithm","sha","sha1","sha224","sha256","sha384","sha512","W","Sha","init","_w","rotl30","ft","_a","_b","_c","_d","_e","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","ch","maj","sigma0","sigma1","gamma0","T1","T2","SHA512","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","ah","bh","dh","eh","fh","gh","hh","al","bl","cl","dl","fl","gl","hl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","_Object$assign","_bindInstanceProperty","_extends","__esModule","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","definition","prop","nmd","paths","StandaloneLayout","React","getComponent","Container","Row","Col","Topbar","BaseLayout","OnlineValidatorBadge","className","StandaloneLayoutPlugin","components","makeWindow","win","location","history","open","close","File","FormData","Im","parseSearch","search","params","decodeURIComponent","TopBar","state","url","specSelectors","selectedIndex","UNSAFE_componentWillReceiveProps","nextProps","onUrlChange","flushAuthData","persistAuthorization","getConfigs","authActions","restoreAuthorization","authorized","loadSpec","specActions","updateUrl","download","onUrlSelect","href","setSelectedUrl","preventDefault","downloadUrl","setSearch","spec","newUrl","protocol","host","pathname","serializeSearch","searchMap","pushState","replaceState","selectedUrl","urls","componentDidMount","configs","targetIndex","primaryName","onFilterChange","layoutActions","updateFilter","Button","Link","Logo","isLoading","loadingStatus","classNames","control","formOnSubmit","rows","link","htmlFor","disabled","onChange","onClick","onSubmit","_defs","_path","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_path9","_path10","_path11","_path12","_path13","_path14","_path15","_path16","_path17","_path18","_path19","_path20","_path21","_path22","_path23","_path24","_path25","_path26","_path27","_path28","_path29","_path30","_path31","xmlns","viewBox","style","clipPath","SwaggerUILogo","height","TopBarPlugin","isNothing","subject","common","sequence","repeat","cycle","isNegativeZero","NEGATIVE_INFINITY","extend","sourceKeys","formatError","exception","compact","where","reason","mark","line","column","snippet","YAMLException$1","captureStackTrace","getLine","lineStart","lineEnd","position","maxLineLength","maxHalfLength","padStart","makeSnippet","maxLength","indent","linesBefore","linesAfter","re","lineStarts","lineEnds","foundLineNo","lineNoLength","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","Type$1","kind","instanceOf","represent","representName","defaultStyle","multi","styleAliases","compileStyleAliases","alias","compileList","schema","currentType","newIndex","previousType","previousIndex","Schema$1","implicit","explicit","type$1","loadKind","compiledImplicit","compiledExplicit","compiledTypeMap","compileMap","scalar","mapping","fallback","collectType","failsafe","_null","resolveYamlNull","constructYamlNull","isNull","canonical","lowercase","uppercase","camelcase","bool","resolveYamlBoolean","constructYamlBoolean","isBoolean","isOctCode","isDecCode","resolveYamlInteger","hasDigits","constructYamlInteger","sign","binary","octal","decimal","hexadecimal","toUpperCase","YAML_FLOAT_PATTERN","SCIENTIFIC_WITHOUT_DOT","resolveYamlFloat","constructYamlFloat","POSITIVE_INFINITY","parseFloat","isFloat","representYamlFloat","core","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","timestamp","resolveYamlTimestamp","constructYamlTimestamp","year","month","day","hour","minute","second","date","fraction","delta","Date","UTC","setTime","getTime","representYamlTimestamp","toISOString","resolveYamlMerge","BASE64_MAP","resolveYamlBinary","bitlen","constructYamlBinary","tailbits","representYamlBinary","_hasOwnProperty$3","_toString$2","resolveYamlOmap","pair","pairKey","pairHasKey","constructYamlOmap","_toString$1","resolveYamlPairs","constructYamlPairs","_hasOwnProperty$2","resolveYamlSet","constructYamlSet","_default","_hasOwnProperty$1","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","_class","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","lc","simpleEscapeSequence","charFromCodepoint","simpleEscapeCheck","simpleEscapeMap","State$1","filename","onWarning","legacy","listener","implicitTypes","typeMap","lineIndent","firstTabInLine","documents","generateError","throwError","throwWarning","directiveHandlers","YAML","handleYamlDirective","major","minor","checkLineBreaks","TAG","handleTagDirective","handle","prefix","tagMap","captureSegment","checkJson","_position","_length","_character","mergeMappings","destination","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startLineStart","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readBlockSequence","nodeIndent","_line","_tag","_anchor","anchor","detected","anchorMap","composeNode","readTagProperty","tagHandle","tagName","isVerbatim","isNamed","readAnchorProperty","parentIndent","nodeContext","allowToSeek","allowCompact","allowBlockStyles","allowBlockScalars","allowBlockCollections","typeIndex","typeQuantity","typeList","flowIndent","blockIndent","indentStatus","atNewLine","hasContent","readBlockMapping","following","_keyLine","_keyLineStart","_keyPos","atExplicitKey","readFlowCollection","_lineStart","_pos","terminator","isPair","isExplicitPair","isMapping","readNext","readBlockScalar","captureStart","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readSingleQuotedScalar","captureEnd","readDoubleQuotedScalar","hexLength","hexResult","readAlias","readPlainScalar","withinFlowCollection","hasPendingContent","_lineIndent","_kind","readDocument","directiveName","directiveArgs","documentStart","hasDirectives","loadDocuments","nullpos","loader","loadAll","loadAll$1","load","load$1","_toString","_hasOwnProperty","CHAR_BOM","CHAR_TAB","CHAR_LINE_FEED","CHAR_CARRIAGE_RETURN","CHAR_SPACE","CHAR_EXCLAMATION","CHAR_DOUBLE_QUOTE","CHAR_SHARP","CHAR_PERCENT","CHAR_AMPERSAND","CHAR_SINGLE_QUOTE","CHAR_ASTERISK","CHAR_COMMA","CHAR_MINUS","CHAR_COLON","CHAR_EQUALS","CHAR_GREATER_THAN","CHAR_QUESTION","CHAR_COMMERCIAL_AT","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","CHAR_GRAVE_ACCENT","CHAR_LEFT_CURLY_BRACKET","CHAR_VERTICAL_LINE","CHAR_RIGHT_CURLY_BRACKET","ESCAPE_SEQUENCES","DEPRECATED_BOOLEANS_SYNTAX","DEPRECATED_BASE60_SYNTAX","encodeHex","character","QUOTING_TYPE_SINGLE","QUOTING_TYPE_DOUBLE","State","noArrayIndent","skipInvalid","flowLevel","styleMap","compileStyleMap","sortKeys","lineWidth","noRefs","noCompatMode","condenseFlow","quotingType","forceQuotes","replacer","explicitTypes","duplicates","usedDuplicates","indentString","spaces","ind","generateNextLine","isWhitespace","isPrintable","isNsCharOrWhitespace","isPlainSafe","inblock","cIsNsCharOrWhitespace","cIsNsChar","codePointAt","needIndentIndicator","STYLE_PLAIN","STYLE_SINGLE","STYLE_LITERAL","STYLE_FOLDED","STYLE_DOUBLE","chooseScalarStyle","singleLineOnly","indentPerLevel","testAmbiguousType","char","prevChar","hasLineBreak","hasFoldableLine","shouldTrackWidth","previousLineBreak","plain","isPlainSafeFirst","isPlainSafeLast","writeScalar","iskey","dump","testAmbiguity","testImplicitResolving","blockHeader","dropEndingNewline","foldString","width","moreIndented","lineRe","nextLF","lastIndex","foldLine","prevMoreIndented","escapeString","escapeSeq","indentIndicator","clip","breakRe","curr","writeBlockSequence","writeNode","detectType","isblockseq","tagStr","duplicateIndex","duplicate","objectOrArray","writeBlockMapping","objectKey","objectValue","explicitPair","pairBuffer","objectKeyList","writeFlowMapping","writeFlowSequence","encodeURI","getDuplicateReferences","objects","duplicatesIndexes","inspectNode","renamed","Type","Schema","FAILSAFE_SCHEMA","JSON_SCHEMA","CORE_SCHEMA","DEFAULT_SCHEMA","dump$1","YAMLException","float","null","int","safeLoad","safeLoadAll","safeDump","parseYamlConfig","yaml","system","errActions","newThrownErr","UPDATE_CONFIGS","TOGGLE_CONFIGS","configName","configValue","payload","toggle","downloadConfig","req","fetch","getConfigByUrl","_ref","status","updateLoadingStatus","statusText","text","action","oriVal","getLocalConfig","componentDidCatch","withErrorBoundary","getSystem","WrappedComponent","ErrorBoundary","targetName","getDisplayName","WithErrorBoundary","isClassComponent","component","displayName","mapStateToProps","getDerivedStateFromError","hasError","errorInfo","FallbackComponent","Fallback","configsPlugin","statePlugins","actions","selectors","reducers","componentList","fullOverride","mergedComponentList","wrapComponents","wrapFactory","Original","_ref2","SafeRenderPlugin"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 000000000..0e4ba9670 --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,54 @@ +# Contributing + +Thank you for considering contributing to Griptape documentation! Before you start, please read the following guidelines. + +## Submitting Issues + +If you have identified a documentation issue, want to propose new documentation, or have a question, please submit an issue through our public [issue tracker](https://github.com/griptape-ai/griptape-docs/issues). Before submitting a new issue, please check the existing issues to ensure it hasn't been reported or discussed before. + +## Submitting Pull Requests + +We welcome and encourage pull requests. To streamline the process, please follow these guidelines: + +1. **Existing Issues:** Please submit pull requests only for existing issues. If you want to add new documentation or fix a documentation issue that hasn't been addressed yet, please first submit an issue. This allows the Griptape team to internally process the request and provide a public response. + +2. **Branch:** Submit all pull requests to the `dev` branch. This helps us manage changes and integrate them smoothly. + +## Getting Started +Griptape docs are built using [MkDocs](https://squidfunk.github.io/mkdocs-material/getting-started/). Dependencies are managed using [Poetry](https://python-poetry.org/). + +To directly contribute to Griptape documentation, first fork the [griptape-docs](https://github.com/griptape-ai/griptape-docs) repository to your GitHub account. Then clone your repository to your local machine. + +From inside the directory run: + +```poetry install --with docs``` + +To run `griptape-docs` locally run: + +```poetry run mkdocs serve``` + +You should see something similar to the following: + +``` +INFO - Building documentation... +INFO - Cleaning site directory +INFO - Documentation built in 0.19 seconds +INFO - [09:28:33] Watching paths for changes: 'docs', 'mkdocs.yml' +INFO - [09:28:33] Serving on http://127.0.0.1:8000/ +INFO - [09:28:37] Browser connected: http://127.0.0.1:8000/ +``` + +### Reference Docs + +You may see many `WARNING` messages in the console output. This is because the [reference docs](./reference/griptape/index.md) are not built. +Fixing this is not necessary to contribute to the documentation, but it helps to reduce noise in the console output. + +First, clone the Griptape repository to a separate directory: + +`git clone git@github.com:griptape-ai/griptape.git ~/some/other/directory/` + +Then, create a symlink called `griptape` in the `griptape-docs` repository: + +`ln -s ~/some/other/directory/griptape griptape` + +The `WARNING` messages should now be resolved. diff --git a/docs/examples/index.md b/docs/examples/index.md new file mode 100644 index 000000000..acd38e988 --- /dev/null +++ b/docs/examples/index.md @@ -0,0 +1,3 @@ +This section of the documentation is dedicated to examples highlighting Griptape functionality. + +We try to keep all examples up to date, but if you think there is a bug please [submit a pull request](https://github.com/griptape-ai/griptape-docs/tree/main/docs/examples). We are also more than happy to include new examples :) \ No newline at end of file diff --git a/docs/examples/load-and-query-pinecone.md b/docs/examples/load-and-query-pinecone.md new file mode 100644 index 000000000..dbe163f8e --- /dev/null +++ b/docs/examples/load-and-query-pinecone.md @@ -0,0 +1,44 @@ +```python +import hashlib +import os +import json +from urllib.request import urlopen +from griptape.drivers import PineconeVectorStoreDriver, OpenAiEmbeddingDriver + +def load_data(driver: PineconeVectorStoreDriver) -> None: + response = urlopen( + "https://raw.githubusercontent.com/wedeploy-examples/" + "supermarket-web-example/master/products.json" + ) + + for product in json.loads(response.read()): + driver.upsert_text( + product["description"], + vector_id=hashlib.md5(product["title"].encode()).hexdigest(), + meta={ + "title": product["title"], + "description": product["description"], + "type": product["type"], + "price": product["price"], + "rating": product["rating"], + }, + namespace="supermarket-products", + ) + +vector_driver = PineconeVectorStoreDriver( + api_key=os.environ["PINECONE_API_KEY"], + environment=os.environ["PINECONE_ENVIRONMENT"], + index_name=os.environ["PINECONE_INDEX_NAME"], + embedding_driver=OpenAiEmbeddingDriver() +) + +load_data(vector_driver) + +result = vector_driver.query( + "fruit", + count=3, + filter={"price": {"$lte": 15}, "rating": {"$gte": 4}}, + namespace="supermarket-products", +) +print(result) +``` diff --git a/docs/examples/load-query-and-chat-marqo.md b/docs/examples/load-query-and-chat-marqo.md new file mode 100644 index 000000000..159fd9641 --- /dev/null +++ b/docs/examples/load-query-and-chat-marqo.md @@ -0,0 +1,47 @@ +```python title="PYTEST_IGNORE" +import os +from griptape import utils +from griptape.drivers import MarqoVectorStoreDriver +from griptape.engines import VectorQueryEngine +from griptape.loaders import WebLoader +from griptape.structures import Agent +from griptape.tools import VectorStoreClient +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver + +# Define the namespace +namespace = "griptape-ai" + +# # Initialize the vector store driver +vector_store = MarqoVectorStoreDriver( + api_key=os.environ["MARQO_API_KEY"], + url=os.environ["MARQO_URL"], + index=os.environ["MARQO_INDEX_NAME"], + embedding_driver=OpenAiEmbeddingDriver() +) +# Initialize the query engine +query_engine = VectorQueryEngine(vector_store_driver=vector_store, prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo")) + +# Initialize the knowledge base tool +vector_store_tool = VectorStoreClient( + description="Contains information about the Griptape Framework from www.griptape.ai", + query_engine=query_engine, + namespace=namespace, + off_prompt=False +) + +# Load artifacts from the web +artifacts = WebLoader().load("https://www.griptape.ai") + +# Upsert the artifacts into the vector store +vector_store.upsert_text_artifacts( + { + namespace: artifacts, + } +) + +# Initialize the agent +agent = Agent(tools=[vector_store_tool]) + +# Start the chat +utils.Chat(agent).start() +``` diff --git a/docs/examples/multiple-agent-shared-memory.md b/docs/examples/multiple-agent-shared-memory.md new file mode 100644 index 000000000..cf3966c97 --- /dev/null +++ b/docs/examples/multiple-agent-shared-memory.md @@ -0,0 +1,80 @@ +This example shows how to use one `Agent` to load content into `TaskMemory` and get that content from another `Agent` using `TaskMemoryClient`. + +The first `Agent` uses a remote vector store (`MongoDbAtlasVectorStoreDriver` in this example) to handle memory operations. The second `Agent` uses the same instance of `TaskMemory` and the `TaskMemoryClient` with the same `MongoDbAtlasVectorStoreDriver` to get the data. + +The `MongoDbAtlasVectorStoreDriver` assumes that you have a vector index configured where the path to the content is called `vector`, and the number of dimensions set on the index is `1536` (this is a commonly used number of dimensions for embedding models). + +`asker` uses the same instance of `TaskMemory` as `loader` so that `asker` has access to the `namespace_storages` that `loader` has set. + +```python +import os +from griptape.tools import WebScraper, VectorStoreClient, TaskMemoryClient +from griptape.structures import Agent +from griptape.drivers import AzureOpenAiChatPromptDriver, AzureOpenAiEmbeddingDriver, AzureMongoDbVectorStoreDriver +from griptape.engines import VectorQueryEngine, PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine +from griptape.memory import TaskMemory +from griptape.artifacts import TextArtifact +from griptape.memory.task.storage import TextArtifactStorage +from griptape.config import StructureConfig, StructureGlobalDriversConfig + + +AZURE_OPENAI_ENDPOINT_1 = os.environ["AZURE_OPENAI_ENDPOINT_1"] +AZURE_OPENAI_API_KEY_1 = os.environ["AZURE_OPENAI_API_KEY_1"] + +MONGODB_HOST = os.environ["MONGODB_HOST"] +MONGODB_USERNAME = os.environ["MONGODB_USERNAME"] +MONGODB_PASSWORD = os.environ["MONGODB_PASSWORD"] +MONGODB_DATABASE_NAME = os.environ["MONGODB_DATABASE_NAME"] +MONGODB_COLLECTION_NAME = os.environ["MONGODB_COLLECTION_NAME"] +MONGODB_INDEX_NAME = os.environ["MONGODB_INDEX_NAME"] +MONGODB_VECTOR_PATH = os.environ["MONGODB_VECTOR_PATH"] +MONGODB_CONNECTION_STRING = f"mongodb+srv://{MONGODB_USERNAME}:{MONGODB_PASSWORD}@{MONGODB_HOST}/{MONGODB_DATABASE_NAME}?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000" + + +azure_embedding_driver = AzureOpenAiEmbeddingDriver( + model='text-embedding-ada-002', + azure_endpoint=AZURE_OPENAI_ENDPOINT_1, + api_key=AZURE_OPENAI_API_KEY_1, + azure_deployment='text-embedding-ada-002' +) + +azure_prompt_driver = AzureOpenAiChatPromptDriver( + model='gpt-4', + azure_endpoint=AZURE_OPENAI_ENDPOINT_1, + api_key=AZURE_OPENAI_API_KEY_1, + azure_deployment='gpt-4' +) + +mongo_driver = AzureMongoDbVectorStoreDriver( + connection_string=MONGODB_CONNECTION_STRING, + database_name=MONGODB_DATABASE_NAME, + collection_name=MONGODB_COLLECTION_NAME, + embedding_driver=azure_embedding_driver, + index_name=MONGODB_INDEX_NAME, + vector_path=MONGODB_VECTOR_PATH +) + +loader = Agent( + tools=[ + WebScraper() + ], + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=azure_prompt_driver, + vector_store_driver=mongo_driver, + embedding_driver=azure_embedding_driver + ) + ), +) +asker = Agent( + tools=[ + TaskMemoryClient(off_prompt=False), + ], + meta_memory=loader.meta_memory, + task_memory=loader.task_memory, +) + +if __name__ == "__main__": + loader.run("Load https://medium.com/enterprise-rag/a-first-intro-to-complex-rag-retrieval-augmented-generation-a8624d70090f") + asker.run("why is retrieval augmented generation useful?") +``` diff --git a/docs/examples/query-webpage.md b/docs/examples/query-webpage.md new file mode 100644 index 000000000..d11c5d9c4 --- /dev/null +++ b/docs/examples/query-webpage.md @@ -0,0 +1,28 @@ +```python +import os +from griptape.artifacts import BaseArtifact +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.loaders import WebLoader + + +vector_store = LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver( + api_key=os.environ["OPENAI_API_KEY"] + ) +) + +[ + vector_store.upsert_text_artifact(a, namespace="griptape") + for a in WebLoader(max_tokens=100).load("https://www.griptape.ai") +] + +results = vector_store.query( + "creativity", + count=3, + namespace="griptape" +) + +values = [BaseArtifact.from_json(r.meta["artifact"]).value for r in results] + +print("\n\n".join(values)) +``` \ No newline at end of file diff --git a/docs/examples/talk-to-a-pdf.md b/docs/examples/talk-to-a-pdf.md new file mode 100644 index 000000000..b4a6a20eb --- /dev/null +++ b/docs/examples/talk-to-a-pdf.md @@ -0,0 +1,49 @@ +This example demonstrates how to vectorize a PDF of the [Attention Is All You Need](https://arxiv.org/pdf/1706.03762.pdf) paper and setup a Griptape agent with rules and the [VectorStoreClient](../reference/griptape/tools/vector_store_client/tool.md) tool to use it during conversations. + +```python +import os +import io +import requests +from griptape.engines import VectorQueryEngine +from griptape.loaders import PdfLoader +from griptape.structures import Agent +from griptape.tools import VectorStoreClient +from griptape.utils import Chat +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver + + +namespace = "attention" + +response = requests.get("https://arxiv.org/pdf/1706.03762.pdf") + +engine = VectorQueryEngine( + prompt_driver=OpenAiChatPromptDriver( + model="gpt-3.5-turbo", + ), + vector_store_driver=LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver( + api_key=os.environ["OPENAI_API_KEY"] + ) + ) +) + +engine.vector_store_driver.upsert_text_artifacts( + { + namespace: PdfLoader().load(response.content) + } +) + +vector_store_tool = VectorStoreClient( + description="Contains information about the Attention Is All You Need paper. " + "Use it to answer any related questions.", + query_engine=engine, + namespace=namespace, + off_prompt=False +) + +agent = Agent( + tools=[vector_store_tool] +) + +Chat(agent).start() +``` diff --git a/docs/examples/talk-to-a-webpage.md b/docs/examples/talk-to-a-webpage.md new file mode 100644 index 000000000..7e942134c --- /dev/null +++ b/docs/examples/talk-to-a-webpage.md @@ -0,0 +1,62 @@ +This example demonstrates how to vectorize a webpage and setup a Griptape agent with rules and the [VectorStoreClient](../reference/griptape/tools/vector_store_client/tool.md) tool to use it during conversations. + +```python +import os +from griptape.engines import VectorQueryEngine +from griptape.loaders import WebLoader +from griptape.rules import Ruleset, Rule +from griptape.structures import Agent +from griptape.tools import VectorStoreClient +from griptape.utils import Chat +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver + + +namespace = "physics-wiki" + +engine = VectorQueryEngine( + prompt_driver=OpenAiChatPromptDriver( + model="gpt-3.5-turbo", + ), + vector_store_driver=LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver( + api_key=os.environ["OPENAI_API_KEY"] + ) + ) +) + +artifacts = WebLoader().load( + "https://en.wikipedia.org/wiki/Physics" +) + +engine.vector_store_driver.upsert_text_artifacts( + {namespace: artifacts} +) + + +vector_store_tool = VectorStoreClient( + description="Contains information about physics. " + "Use it to answer any physics-related questions.", + query_engine=engine, + namespace=namespace, + off_prompt=False +) + +agent = Agent( + rulesets=[ + Ruleset( + name="Physics Tutor", + rules=[ + Rule( + "Always introduce yourself as a physics tutor" + ), + Rule( + "Be truthful. Only discuss physics." + ) + ] + ) + ], + tools=[vector_store_tool] +) + +Chat(agent).start() +``` diff --git a/docs/examples/talk-to-redshift.md b/docs/examples/talk-to-redshift.md new file mode 100644 index 000000000..efaf45594 --- /dev/null +++ b/docs/examples/talk-to-redshift.md @@ -0,0 +1,47 @@ +This example demonstrates how to build an agent that can dynamically query Amazon Redshift Serverless tables and store its contents on the local hard drive. + +Let's build a support agent that uses GPT-4: + +```python +import os +import boto3 +from griptape.drivers import AmazonRedshiftSqlDriver +from griptape.loaders import SqlLoader +from griptape.rules import Ruleset, Rule +from griptape.structures import Agent +from griptape.tools import SqlClient, FileManager +from griptape.utils import Chat + +session = boto3.Session() + +sql_loader = SqlLoader( + sql_driver=AmazonRedshiftSqlDriver( + database=os.environ["REDSHIFT_DATABASE"], + session=session, + cluster_identifier=os.environ['REDSHIFT_CLUSTER_IDENTIFIER'], + ) +) + +sql_tool = SqlClient( + sql_loader=sql_loader, + table_name="people", + table_description="contains information about tech industry professionals", + engine_name="redshift" +) + +agent = Agent( + tools=[sql_tool, FileManager()], + rulesets=[ + Ruleset( + name="HumansOrg Agent", + rules=[ + Rule("Act and introduce yourself as a HumansOrg, Inc. support agent"), + Rule("Your main objective is to help with finding information about people"), + Rule("Only use information about people from the sources available to you") + ] + ) + ] +) + +Chat(agent).start() +``` diff --git a/docs/gen_ref_pages.py b/docs/gen_ref_pages.py new file mode 100644 index 000000000..62fe85b0c --- /dev/null +++ b/docs/gen_ref_pages.py @@ -0,0 +1,48 @@ +"""Generate the code reference pages and navigation.""" + +from textwrap import dedent +from pathlib import Path +import mkdocs_gen_files + + +def build_reference_docs(): + nav = mkdocs_gen_files.Nav() + + for path in sorted(Path("griptape").rglob("*.py")): + module_path = path.relative_to(".").with_suffix("") + doc_path = path.relative_to(".").with_suffix(".md") + full_doc_path = Path("reference", doc_path) + + parts = tuple(module_path.parts) + + if parts[-1] == "__init__": + parts = parts[:-1] + doc_path = doc_path.with_name("index.md") + full_doc_path = full_doc_path.with_name("index.md") + elif parts[-1] == "__main__": + continue + + nav[parts] = doc_path.as_posix() + + with mkdocs_gen_files.open(full_doc_path, "w") as fd: + ident = ".".join(parts) + fd.write(f"::: {ident}") + + mkdocs_gen_files.set_edit_path(full_doc_path, Path("..") / path) + + with mkdocs_gen_files.open("reference/SUMMARY.md", "w") as nav_file: + nav_file.writelines(["---", "search:", "\texclude: true", "---\n"]) + nav_file.writelines(nav.build_literate_nav()) + with mkdocs_gen_files.open("reference/griptape/index.md", "w") as index_file: + index_file.write( + dedent( + """ + # Overview + This section of the documentation is dedicated to a reference API of Griptape. + Here you will find every class, function, and method that is available to you when using the library. + """ + ) + ) + + +build_reference_docs() diff --git a/docs/griptape-framework/data/artifacts.md b/docs/griptape-framework/data/artifacts.md new file mode 100644 index 000000000..b12dc97d3 --- /dev/null +++ b/docs/griptape-framework/data/artifacts.md @@ -0,0 +1,38 @@ +## Overview + +**Artifacts** are used for passing different types of data between Griptape components. All tools return artifacts that are later consumed by tasks and task memory. +Artifacts make sure framework components enforce contracts when passing and consuming data. + +## TextArtifact + +Used for passing text data of arbitrary size around the framework. It can be used to count tokens with [token_count()](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.token_count) with a tokenizer. +It can also be used to generate a text embedding with [generate_embedding()](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.generate_embedding) +and access it with [embedding](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.embedding). + +[TaskMemory](../../reference/griptape/memory/task/task_memory.md) automatically stores [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s returned by tool activities and returns artifact IDs back to the LLM. + +## CsvRowArtifact + +Used for passing structured row data around the framework. It inherits from [TextArtifact](../../reference/griptape/artifacts/text_artifact.md) and overrides the +[to_text()](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.to_text) method, which always returns a valid CSV row. + +## InfoArtifact + +Used for passing short notifications back to the LLM without task memory storing them. + +## ErrorArtifact + +Used for passing errors back to the LLM without task memory storing them. + +## BlobArtifact + +Used for passing binary large objects (blobs) back to the LLM. +Treat it as a way to return unstructured data, such as images, videos, audio, and other files back from tools. +Each blob has a [name](../../reference/griptape/artifacts/base_artifact.md#griptape.artifacts.base_artifact.BaseArtifact.name) and +[dir](../../reference/griptape/artifacts/blob_artifact.md#griptape.artifacts.blob_artifact.BlobArtifact.dir) to uniquely identify stored objects. + +[TaskMemory](../../reference/griptape/memory/task/task_memory.md) automatically stores [BlobArtifact](../../reference/griptape/artifacts/blob_artifact.md)s returned by tool activities that can be reused by other tools. + +## ImageArtifact + +An [ImageArtifact](../../reference/griptape/artifacts/image_artifact.md) is used for passing images back to the LLM. In addition to binary image data, an ImageArtifact includes image metadata like MIME type, dimensions, and prompt and model information for images returned by [image generation Drivers](../drivers/image-generation-drivers.md). It inherits from [BlobArtifact](#blobartifact). diff --git a/docs/griptape-framework/data/chunkers.md b/docs/griptape-framework/data/chunkers.md new file mode 100644 index 000000000..0df73f965 --- /dev/null +++ b/docs/griptape-framework/data/chunkers.md @@ -0,0 +1,22 @@ +## Overview + +Chunkers are used to split arbitrarily long text into chunks of certain token length. +Each chunker has a tokenizer, a max token count, and a list of default separators used to split up text into [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s. +Different types of chunkers provide lists of separators for specific text shapes: + +* [TextChunker](../../reference/griptape/chunkers/text_chunker.md): works on most texts. +* [PdfChunker](../../reference/griptape/chunkers/pdf_chunker.md): works on text from PDF docs. +* [MarkdownChunker](../../reference/griptape/chunkers/markdown_chunker.md) works on markdown text. + +Here is how to use a chunker: + +```python +from griptape.chunkers import TextChunker +from griptape.tokenizers import OpenAiTokenizer +TextChunker( + # set an optional custom tokenizer + tokenizer=OpenAiTokenizer(model="gpt-4"), + # optionally modify default number of tokens + max_tokens=100 +).chunk("long text") +``` diff --git a/docs/griptape-framework/data/index.md b/docs/griptape-framework/data/index.md new file mode 100644 index 000000000..73dfe4c66 --- /dev/null +++ b/docs/griptape-framework/data/index.md @@ -0,0 +1,21 @@ +## Overview +Griptape provides several abstractions for working with data. + +![Data Architecture](../../assets/img/data-architecture.png) + + +[Artifacts](./artifacts.md) are used for passing different types of data, such as text, lists, and blobs, between Griptape components. + +[Embedding Drivers](../drivers/embedding-drivers.md) are used to generate vector embeddings from text. + +[Loaders](./loaders.md) are used to load textual data from different sources. + +[Chunkers](./chunkers.md) are used to split arbitrarily long text into chunks of certain token length. + +**Tokenizers** are used to tokenize and detokenize text in order to track LLM token limits. + +[Query Engines](../engines/query-engines.md) are used to search text storages. + +[Vector Store Drivers](../drivers/vector-store-drivers.md) are used to store and query vector databases. + +[Prompt Drivers](../drivers/prompt-drivers.md) are used to call LLM APIs. diff --git a/docs/griptape-framework/data/loaders.md b/docs/griptape-framework/data/loaders.md new file mode 100644 index 000000000..8aac96d6a --- /dev/null +++ b/docs/griptape-framework/data/loaders.md @@ -0,0 +1,174 @@ +## Overview + +Loaders are used to load textual data from different sources and chunk it into [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s. +Each loader can be used to load a single "document" with [load()](../../reference/griptape/loaders/base_loader.md#griptape.loaders.base_loader.BaseLoader.load) or +multiple documents with [load_collection()](../../reference/griptape/loaders/base_loader.md#griptape.loaders.base_loader.BaseLoader.load_collection). + +## Pdf Loader + +!!! info + This driver requires the `loaders-pdf` [extra](../index.md#extras). + +Inherits from the [TextLoader](../../reference/griptape/loaders/text_loader.md) and can be used to load PDFs from a path or from an IO stream: + +```python +from griptape.loaders import PdfLoader +import urllib.request + +urllib.request.urlretrieve("https://arxiv.org/pdf/1706.03762.pdf", "attention.pdf") + +with open("attention.pdf", "rb") as f: + PdfLoader().load(f.read()) + +urllib.request.urlretrieve("https://arxiv.org/pdf/1706.03762.pdf", "CoT.pdf") + +with open("attention.pdf", "rb") as attention, open("CoT.pdf", "rb") as cot: + PdfLoader().load_collection([attention.read(), cot.read()]) +``` + +## Sql Loader + +Can be used to load data from a SQL database into [CsvRowArtifact](../../reference/griptape/artifacts/csv_row_artifact.md)s: + +```python +from griptape.loaders import SqlLoader +from griptape.drivers import SqlDriver + +SqlLoader( + sql_driver = SqlDriver( + engine_url="sqlite:///:memory:" + ) +).load("SELECT 'foo', 'bar'") + +SqlLoader( + sql_driver = SqlDriver( + engine_url="sqlite:///:memory:" + ) +).load_collection(["SELECT 'foo', 'bar';", "SELECT 'fizz', 'buzz';"]) +``` + +## Csv Loader + +Can be used to load CSV files into [CsvRowArtifact](../../reference/griptape/artifacts/csv_row_artifact.md)s: + +```python +from griptape.loaders import CsvLoader + +with open("tests/resources/cities.csv", "r") as f: + CsvLoader().load(f.read()) + +with open("tests/resources/cities.csv", "r") as cities, open("tests/resources/addresses.csv", "r") as addresses: + CsvLoader().load_collection([cities.read(), addresses.read()]) +``` + + +## DataFrame Loader + +!!! info + This driver requires the `loaders-dataframe` [extra](../index.md#extras). + +Can be used to load [pandas](https://pandas.pydata.org/) [DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html)s into [CsvRowArtifact](../../reference/griptape/artifacts/csv_row_artifact.md)s: + +```python +import urllib +import pandas as pd +from griptape.loaders import DataFrameLoader + +urllib.request.urlretrieve("https://people.sc.fsu.edu/~jburkardt/data/csv/cities.csv", "cities.csv") + +DataFrameLoader().load(pd.read_csv("cities.csv")) + +urllib.request.urlretrieve("https://people.sc.fsu.edu/~jburkardt/data/csv/addresses.csv", "addresses.csv") + +DataFrameLoader().load_collection( + [pd.read_csv('cities.csv'), pd.read_csv('addresses.csv')] +) +``` + + +## Text Loader + +Used to load arbitrary text and text files: + +```python +from pathlib import Path +import urllib +from griptape.loaders import TextLoader + +TextLoader().load( + "my text" +) + +urllib.request.urlretrieve("https://example-files.online-convert.com/document/txt/example.txt", "example.txt") + +with open("example.txt", "r") as f: + TextLoader().load(f.read()) + +with open("example.txt", "r") as f: + TextLoader().load_collection( + ["my text", "my other text", f.read()] + ) +``` + +You can set a custom [tokenizer](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.tokenizer.md), [max_tokens](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.max_tokens.md) parameter, and [chunker](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.chunker.md). + +## Web Loader + +!!! info + This driver requires the `loaders-web` [extra](../index.md#extras). + +Inherits from the [TextLoader](../../reference/griptape/loaders/text_loader.md) and can be used to load web pages: + +```python +from griptape.loaders import WebLoader + +WebLoader().load( + "https://www.griptape.ai" +) + +WebLoader().load_collection( + ["https://www.griptape.ai", "https://docs.griptape.ai"] +) +``` + +## Image Loader + +!!! info + This driver requires the `loaders-image` [extra](../index.md#extras). + +The Image Loader is used to load an image as an [ImageArtifact](./artifacts.md#imageartifact). The Loader operates on image bytes that can be sourced from files on disk, downloaded images, or images in memory. + +```python +from griptape.loaders import ImageLoader + +with open("tests/resources/mountain.png", "rb") as f: + disk_image_artifact = ImageLoader().load(f.read()) +``` + +By default, the Image Loader will load images in their native format, but not all models work on all formats. To normalize the format of Artifacts returned by the Loader, set the `format` field. + +```python +from griptape.loaders import ImageLoader + +# Image data in artifact will be in BMP format. +with open("tests/resources/mountain.png", "rb") as f: + image_artifact_jpeg = ImageLoader(format="bmp").load(f.read()) +``` + + +## Email Loader + +!!! info + This driver requires the `loaders-email` [extra](../index.md#extras). + +Can be used to load email from an imap server: + +```python +from griptape.loaders import EmailLoader + +loader = EmailLoader(imap_url="an.email.server.hostname", username="username", password="password") + +loader.load(EmailLoader.EmailQuery(label="INBOX")) + +loader.load_collection([EmailLoader.EmailQuery(label="INBOX"), EmailLoader.EmailQuery(label="SENT")]) +``` diff --git a/docs/griptape-framework/drivers/embedding-drivers.md b/docs/griptape-framework/drivers/embedding-drivers.md new file mode 100644 index 000000000..332e9674a --- /dev/null +++ b/docs/griptape-framework/drivers/embedding-drivers.md @@ -0,0 +1,193 @@ +## Overview +Embeddings in Griptape are multidimensional representations of text data. Embeddings carry semantic information, which makes them useful for extracting relevant chunks from large bodies of text for search and querying. + +Griptape provides a way to build Embedding Drivers that are reused in downstream framework components. Every Embedding Driver has two basic methods that can be used to generate embeddings: + +* [embed_text_artifact()](../../reference/griptape/drivers/embedding/base_embedding_driver.md#griptape.drivers.embedding.base_embedding_driver.BaseEmbeddingDriver.embed_text_artifact) for [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s. +* [embed_string()](../../reference/griptape/drivers/embedding/base_embedding_driver.md#griptape.drivers.embedding.base_embedding_driver.BaseEmbeddingDriver.embed_string) for any string. + +You can optionally provide a [Tokenizer](../misc/tokenizers.md) via the [tokenizer](../../reference/griptape/drivers/embedding/base_embedding_driver.md#griptape.drivers.embedding.base_embedding_driver.BaseEmbeddingDriver.tokenizer) field to have the Driver automatically chunk the input text to fit into the token limit. + +## Embedding Drivers + +### OpenAI Embeddings + +The [OpenAiEmbeddingDriver](../../reference/griptape/drivers/embedding/openai_embedding_driver.md) uses the [OpenAI Embeddings API](https://platform.openai.com/docs/guides/embeddings). + + +```python +from griptape.drivers import OpenAiEmbeddingDriver + +embeddings = OpenAiEmbeddingDriver().embed_string("Hello Griptape!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` +``` +[0.0017853748286142945, 0.006118456833064556, -0.005811543669551611] +``` + +### Azure OpenAI Embeddings + +The [AzureOpenAiEmbeddingDriver](../../reference/griptape/drivers/embedding/azure_openai_embedding_driver.md) uses the same parameters as [OpenAiEmbeddingDriver](../../reference/griptape/drivers/embedding/openai_embedding_driver.md) +with updated defaults. + +### Bedrock Titan Embeddings + +!!! info + This driver requires the `drivers-embedding-amazon-bedrock` [extra](../index.md#extras). + +The [AmazonBedrockTitanEmbeddingDriver](../../reference/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.md) uses the [Amazon Bedrock Embeddings API](https://docs.aws.amazon.com/bedrock/latest/userguide/embeddings.html). + +```python +from griptape.drivers import AmazonBedrockTitanEmbeddingDriver + +embeddings = AmazonBedrockTitanEmbeddingDriver().embed_string("Hello world!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` +``` +[-0.234375, -0.024902344, -0.14941406] +``` + +### Google Embeddings +!!! info + This driver requires the `drivers-embedding-google` [extra](../index.md#extras). + +The [GoogleEmbeddingDriver](../../reference/griptape/drivers/embedding/google_embedding_driver.md) uses the [Google Embeddings API](https://ai.google.dev/tutorials/python_quickstart#use_embeddings). + +```python +from griptape.drivers import GoogleEmbeddingDriver + +embeddings = GoogleEmbeddingDriver().embed_string("Hello world!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` +``` +[0.0588633, 0.0033929371, -0.072810836] +``` + +### Hugging Face Hub Embeddings + +!!! info + This driver requires the `drivers-embedding-huggingface` [extra](../index.md#extras). + +The [HuggingFaceHubEmbeddingDriver](../../reference/griptape/drivers/embedding/huggingface_hub_embedding_driver.md) connects to the [Hugging Face Hub API](https://huggingface.co/docs/hub/api). It supports models with the following tasks: + +- feature-extraction + +```python +import os +from griptape.drivers import HuggingFaceHubEmbeddingDriver +from griptape.tokenizers import HuggingFaceTokenizer +from transformers import AutoTokenizer + +driver = HuggingFaceHubEmbeddingDriver( + api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + model="sentence-transformers/all-MiniLM-L6-v2", + tokenizer=HuggingFaceTokenizer( + max_output_tokens=512, + tokenizer=AutoTokenizer.from_pretrained( + "sentence-transformers/all-MiniLM-L6-v2" + ) + ), +) + +embeddings = driver.embed_string("Hello world!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` +### Multi Model Embedding Drivers +Certain embeddings providers such as Amazon SageMaker support many types of models, each with their own slight differences in parameters and response formats. To support this variation across models, these Embedding Drivers takes a [Embedding Model Driver](../../reference/griptape/drivers/embedding_model/base_embedding_model_driver.md) +through the [embedding_model_driver](../../reference/griptape/drivers/embedding/base_multi_model_embedding_driver.md#griptape.drivers.embedding.base_multi_model_embedding_driver.BaseMultiModelEmbeddingDriver.embedding_model_driver) parameter. +[Embedding Model Driver](../../reference/griptape/drivers/embedding_model/base_embedding_model_driver.md)s allows for model-specific customization for Embedding Drivers. + +#### SageMaker Embeddings + +The [AmazonSageMakerEmbeddingDriver](../../reference/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.md) uses the [Amazon SageMaker Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) to generate embeddings on AWS. + +!!! info + This driver requires the `drivers-embedding-amazon-sagemaker` [extra](../index.md#extras). + +##### TensorFlow Hub Models +```python title="PYTEST_IGNORE" +import os +from griptape.drivers import AmazonSageMakerEmbeddingDriver, SageMakerTensorFlowHubEmbeddingModelDriver + +driver = AmazonSageMakerEmbeddingDriver( + model=os.environ["SAGEMAKER_TENSORFLOW_HUB_MODEL"], + embedding_model_driver=SageMakerTensorFlowHubEmbeddingModelDriver(), +) + +embeddings = driver.embed_string("Hello world!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` + +##### HuggingFace Models +```python title="PYTEST_IGNORE" +import os +from griptape.drivers import AmazonSageMakerEmbeddingDriver, SageMakerHuggingFaceEmbeddingModelDriver + +driver = AmazonSageMakerEmbeddingDriver( + model=os.environ["SAGEMAKER_HUGGINGFACE_MODEL"], + embedding_model_driver=SageMakerHuggingFaceEmbeddingModelDriver(), +) + +embeddings = driver.embed_string("Hello world!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` + +### VoyageAI Embeddings +The [VoyageAiEmbeddingDriver](../../reference/griptape/drivers/embedding/voyageai_embedding_driver.md) uses the [VoyageAI Embeddings API](https://www.voyageai.com/). + +!!! info + This driver requires the `drivers-embedding-voyageai` [extra](../index.md#extras). + +```python +import os +from griptape.drivers import VoyageAiEmbeddingDriver + +driver = VoyageAiEmbeddingDriver( + api_key=os.environ["VOYAGE_API_KEY"] +) + +embeddings = driver.embed_string("Hello world!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` + +### Override Default Structure Embedding Driver +Here is how you can override the Embedding Driver that is used by default in Structures. + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper, TaskMemoryClient +from griptape.drivers import ( + OpenAiChatPromptDriver, + VoyageAiEmbeddingDriver, +) +from griptape.config import ( + StructureGlobalDriversConfig, + StructureConfig, +) + +agent = Agent( + tools=[WebScraper(), TaskMemoryClient(off_prompt=False)], + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4"), + embedding_driver=VoyageAiEmbeddingDriver(), + ) + ), +) + +agent.run("based on https://www.griptape.ai/, tell me what Griptape is") +``` diff --git a/docs/griptape-framework/drivers/image-generation-drivers.md b/docs/griptape-framework/drivers/image-generation-drivers.md new file mode 100644 index 000000000..7389ff711 --- /dev/null +++ b/docs/griptape-framework/drivers/image-generation-drivers.md @@ -0,0 +1,174 @@ +## Overview + +[Image Generation Drivers](../../reference/griptape/drivers/image_generation/index.md) are used by [image generation Engines](../engines/image-generation-engines.md) to build and execute API calls to image generation models. + +Provide a Driver when building an [Engine](../engines/image-generation-engines.md), then pass it to a [Tool](../tools/index.md) for use by an [Agent](../structures/agents.md): + +```python +from griptape.structures import Agent +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import OpenAiImageGenerationDriver +from griptape.tools import PromptImageGenerationClient + +driver = OpenAiImageGenerationDriver( + model="dall-e-2", +) + +engine = PromptImageGenerationEngine(image_generation_driver=driver) + +agent = Agent(tools=[ + PromptImageGenerationClient(engine=engine), +]) + +agent.run("Generate a watercolor painting of a dog riding a skateboard") +``` + +### Amazon Bedrock + +The [Amazon Bedrock Image Generation Driver](../../reference/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.md) provides multi-model access to image generation models hosted by Amazon Bedrock. This Driver manages API calls to the Bedrock API, while the specific Model Drivers below format the API requests and parse the responses. + +#### Bedrock Stable Diffusion Model Driver + +The [Bedrock Stable Diffusion Model Driver](../../reference/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.md) provides support for Stable Diffusion models hosted by Amazon Bedrock. This Model Driver supports configurations specific to Stable Diffusion, like style presets, clip guidance presets, and sampler. + +This Model Driver supports negative prompts. When provided (for example, when used with an [image generation Engine](../engines/image-generation-engines.md) configured with [Negative Rulesets](../engines/image-generation-engines.md#image-generation-engine-rulesets)), the image generation request will include negatively-weighted prompts describing features or characteristics to avoid in the resulting generation. + +```python +from griptape.structures import Agent +from griptape.tools import PromptImageGenerationClient +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver + +model_driver = BedrockStableDiffusionImageGenerationModelDriver( + style_preset="pixel-art", +) + +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=model_driver, + model="stability.stable-diffusion-xl-v0", +) + +engine = PromptImageGenerationEngine(image_generation_driver=driver) + +agent = Agent(tools=[ + PromptImageGenerationClient(engine=engine), +]) + +agent.run("Generate an image of a dog riding a skateboard") +``` + +#### Bedrock Titan Image Generator Model Driver + +The [Bedrock Titan Image Generator Model Driver](../../reference/griptape/drivers/image_generation_model/bedrock_titan_image_generation_model_driver.md) provides support for Titan Image Generator models hosted by Amazon Bedrock. This Model Driver supports configurations specific to Titan Image Generator, like quality, seed, and cfg_scale. + +This Model Driver supports negative prompts. When provided (for example, when used with an [image generation engine](../engines/image-generation-engines.md) configured with [Negative Rulesets](../engines/image-generation-engines.md#image-generation-engine-rulesets)), the image generation request will include negatively-weighted prompts describing features or characteristics to avoid in the resulting generation. + +```python +from griptape.structures import Agent +from griptape.tools import PromptImageGenerationClient +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockTitanImageGenerationModelDriver + +model_driver = BedrockTitanImageGenerationModelDriver() + +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=model_driver, + model="amazon.titan-image-generator-v1", +) + +engine = PromptImageGenerationEngine(image_generation_driver=driver) + +agent = Agent(tools=[ + PromptImageGenerationClient(engine=engine), +]) + +agent.run("Generate a watercolor painting of a dog riding a skateboard") +``` + +### Azure OpenAI + +The [Azure OpenAI Image Generation Driver](../../reference/griptape/drivers/image_generation/azure_openai_image_generation_driver.md) provides access to OpenAI models hosted by Azure. In addition to the configurations provided by the underlying OpenAI Driver, the Azure OpenAI Driver allows configuration of Azure-specific deployment values. + +```python +import os + +from griptape.structures import Agent +from griptape.tools import PromptImageGenerationClient +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import AzureOpenAiImageGenerationDriver + +driver = AzureOpenAiImageGenerationDriver( + model="dall-e-3", + azure_deployment=os.environ["AZURE_OPENAI_DALL_E_3_DEPLOYMENT_ID"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_2"], + api_key=os.environ["AZURE_OPENAI_API_KEY_2"], +) + +engine = PromptImageGenerationEngine(image_generation_driver=driver) + +agent = Agent(tools=[ + PromptImageGenerationClient(engine=engine), +]) + +agent.run("Generate a watercolor painting of a dog riding a skateboard") +``` + +### Leonardo.Ai + +The [Leonardo Image Generation Driver](../../reference/griptape/drivers/image_generation/leonardo_image_generation_driver.md) enables image generation using models hosted by [Leonardo.ai](https://leonardo.ai/). + +This Driver supports configurations like model selection, image size, specifying a generation seed, and generation steps. For details on supported configuration parameters, see [Leonardo.Ai's image generation documentation](https://docs.leonardo.ai/reference/creategeneration). + +This Driver supports negative prompts. When provided (for example, when used with an [image generation engine](../engines/image-generation-engines.md) configured with [Negative Rulesets](../engines/image-generation-engines.md#image-generation-engine-rulesets)), the image generation request will include negatively-weighted prompts describing features or characteristics to avoid in the resulting generation. + +```python +import os + +from griptape.structures import Agent +from griptape.tools import PromptImageGenerationClient +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import LeonardoImageGenerationDriver + +driver = LeonardoImageGenerationDriver( + model=os.environ["LEONARDO_MODEL_ID"], + api_key=os.environ["LEONARDO_API_KEY"], + image_width=512, + image_height=1024, +) + +engine = PromptImageGenerationEngine(image_generation_driver=driver) + +agent = Agent(tools=[ + PromptImageGenerationClient(engine=engine), +]) + +agent.run("Generate a watercolor painting of a dog riding a skateboard") +``` + +### OpenAI + +The [OpenAI Image Generation Driver](../../reference/griptape/drivers/image_generation/openai_image_generation_driver.md) provides access to OpenAI image generation models. Like other OpenAI Drivers, the image generation Driver will implicitly load an API key in the `OPENAI_API_KEY` environment variable if one is not explicitly provided. + +This Driver supports image generation configurations like style presets, image quality preference, and image size. For details on supported configuration values, see the [OpenAI documentation](https://platform.openai.com/docs/guides/images/introduction). + +```python +from griptape.structures import Agent +from griptape.tools import PromptImageGenerationClient +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import OpenAiImageGenerationDriver + +driver = OpenAiImageGenerationDriver( + model="dall-e-2", + image_size="512x512", +) + +engine = PromptImageGenerationEngine(image_generation_driver=driver) + +agent = Agent(tools=[ + PromptImageGenerationClient(engine=engine), +]) + +agent.run("Generate a watercolor painting of a dog riding a skateboard") +``` diff --git a/docs/griptape-framework/drivers/image-query-drivers.md b/docs/griptape-framework/drivers/image-query-drivers.md new file mode 100644 index 000000000..f643b09eb --- /dev/null +++ b/docs/griptape-framework/drivers/image-query-drivers.md @@ -0,0 +1,124 @@ +# Image Query Drivers + +Image Query Drivers are used by [Image Query Engines](../engines/image-query-engines.md) to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular Image Query Driver. + +!!! info + All Image Query Drivers default to a `max_tokens` of 256. It is recommended that you set this value to correspond to the desired response length. + +## AnthropicImageQueryDriver + +!!! info + To tune `max_tokens`, see [Anthropic's documentation on image tokens](https://docs.anthropic.com/claude/docs/vision#image-costs) for more information on how to relate token count to response length. + +The [AnthropicImageQueryDriver](../../reference/griptape/drivers/image_query/anthropic_image_query_driver.md) is used to query images using Anthropic's Claude 3 multi-modal model. Here is an example of how to use it: + +```python +from griptape.drivers import AnthropicImageQueryDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader + +driver = AnthropicImageQueryDriver( + model="claude-3-sonnet-20240229", + max_tokens=1024, +) + +engine = ImageQueryEngine( + image_query_driver=driver, +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +engine.run("Describe the weather in the image", [image_artifact]) +``` + +You can also specify multiple images with a single text prompt. This applies the same text prompt to all images specified, up to a max of 20. However, you will still receive one text response from the model currently. + +```python +from griptape.drivers import AnthropicImageQueryDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader + +driver = AnthropicImageQueryDriver( + model="claude-3-sonnet-20240229", + max_tokens=1024, +) + +engine = ImageQueryEngine( + image_query_driver=driver, +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact1 = ImageLoader().load(f.read()) + +with open("tests/resources/cow.png", "rb") as f: + image_artifact2 = ImageLoader().load(f.read()) + +result = engine.run("Describe the weather in the image", [image_artifact1, image_artifact2]) + +print(result) +``` + +## OpenAiVisionImageQueryDriver + +!!! info + This Driver defaults to using the `gpt-4-vision-preview` model. As other multimodal models are released, they can be specified using the `model` field. While the `max_tokens` field is optional, it is recommended to set this to a value that corresponds to the desired response length. Without an explicit value, the model will default to very short responses. See [OpenAI's documentation](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information on how to relate token count to response length. + +The [OpenAiVisionImageQueryDriver](../../reference/griptape/drivers/image_query/openai_vision_image_query_driver.md) is used to query images using the OpenAI Vision API. Here is an example of how to use it: + +```python +from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader + +driver = OpenAiVisionImageQueryDriver( + model="gpt-4-vision-preview", + max_tokens=256, +) + +engine = ImageQueryEngine( + image_query_driver=driver, +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +engine.run("Describe the weather in the image", [image_artifact]) +``` + +## AmazonBedrockImageQueryDriver + +The [Amazon Bedrock Image Query Driver](../../reference/griptape/drivers/image_query/amazon_bedrock_image_query_driver.md) provides multi-model access to image query models hosted by Amazon Bedrock. This Driver manages API calls to the Bedrock API, while the specific Model Drivers below format the API requests and parse the responses. + +### Claude + +The [BedrockClaudeImageQueryModelDriver](../../reference/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.md) provides support for Claude models hosted by Bedrock. + +```python +from griptape.drivers import AmazonBedrockImageQueryDriver, BedrockClaudeImageQueryModelDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader +import boto3 + +session = boto3.Session( + region_name="us-west-2" +) + +driver = AmazonBedrockImageQueryDriver( + image_query_model_driver=BedrockClaudeImageQueryModelDriver(), + model="anthropic.claude-3-sonnet-20240229-v1:0", + session=session +) + +engine = ImageQueryEngine( + image_query_driver=driver +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + + +result = engine.run("Describe the weather in the image", [image_artifact]) + +print(result) +``` diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md new file mode 100644 index 000000000..db6bf5d96 --- /dev/null +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -0,0 +1,598 @@ +## Overview + +Prompt Drivers are used by Griptape Structures to make API calls to the underlying LLMs. [OpenAi Chat](#openai-chat) is the default prompt driver used in all structures. + +You can instantiate drivers and pass them to structures: + +```python +from griptape.structures import Agent +from griptape.drivers import OpenAiChatPromptDriver +from griptape.rules import Rule +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4", temperature=0.3), + ) + ), + input_template="You will be provided with a tweet, and your task is to classify its sentiment as positive, neutral, or negative. Tweet: {{ args[0] }}", + rules=[ + Rule( + value="Output only the sentiment." + ) + ], +) + +agent.run("I loved the new Batman movie!") +``` + +Or use them independently: + +```python +from griptape.utils import PromptStack +from griptape.drivers import OpenAiChatPromptDriver + +stack = PromptStack() + +stack.add_system_input( + "You will be provided with Python code, and your task is to calculate its time complexity." +) +stack.add_user_input( +""" +def foo(n, k): + accum = 0 + for i in range(n): + for l in range(k): + accum += i + return accum +""" +) + +result = OpenAiChatPromptDriver(model="gpt-3.5-turbo-16k", temperature=0).run(stack) + +print(result.value) +``` + +## Prompt Drivers + +Griptape offers the following Prompt Drivers for interacting with LLMs. + +!!! warning + When overriding a default Prompt Driver, take care to ensure you've updated the Structure's configured Embedding Driver as well. If Task Memory isn't needed, you can avoid compatability issues by setting `task_memory=None` to disable Task Memory in your Structure. + +### OpenAI Chat + +The [OpenAiChatPromptDriver](../../reference/griptape/drivers/prompt/openai_chat_prompt_driver.md) connects to the [OpenAI Chat](https://platform.openai.com/docs/guides/chat) API. + +```python +import os +from griptape.structures import Agent +from griptape.drivers import OpenAiChatPromptDriver +from griptape.rules import Rule +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=OpenAiChatPromptDriver( + api_key=os.environ["OPENAI_API_KEY"], + temperature=0.1, + model="gpt-3.5-turbo", + response_format="json_object", + seed=42, + ) + ) + ), + input_template="You will be provided with a description of a mood, and your task is to generate the CSS code for a color that matches it. Description: {{ args[0] }}", + rules=[ + Rule( + value='Write your output in json with a single key called "css_code".' + ) + ], +) + +agent.run("Blue sky at dusk.") +``` + +!!! info + `response_format` and `seed` are unique to the OpenAI Chat Prompt Driver and Azure OpenAi Chat Prompt Driver. + +### Azure OpenAI Chat + +The [AzureOpenAiChatPromptDriver](../../reference/griptape/drivers/prompt/azure_openai_chat_prompt_driver.md) connects to Azure OpenAI [Chat Completion](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference) APIs. + +```python +import os +from griptape.structures import Agent +from griptape.rules import Rule +from griptape.drivers import AzureOpenAiChatPromptDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AzureOpenAiChatPromptDriver( + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], + model="gpt-3.5-turbo-16k", + azure_deployment=os.environ["AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], + ) + ) + ), + rules=[ + Rule( + value="You will be provided with text, and your task is to translate it into emojis. " + "Do not use any regular text. Do your best with emojis only." + ) + ], +) + +agent.run("Artificial intelligence is a technology with great promise.") +``` + +### Azure OpenAI Completion + +The [AzureOpenAiCompletionPromptDriver](../../reference/griptape/drivers/prompt/azure_openai_completion_prompt_driver.md) connects to Azure OpenAI [Text Completion](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference) API. + +```python +import os +from griptape.structures import Agent +from griptape.drivers import AzureOpenAiCompletionPromptDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AzureOpenAiCompletionPromptDriver( + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], + model="text-davinci-003", + azure_deployment=os.environ["AZURE_OPENAI_DAVINCI_DEPLOYMENT_ID"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], + temperature=1 + ) + ) + ) +) + +agent.run( + """ + Write a product launch email for new AI-powered headphones that are priced at $79.99 and available at Best Buy, Target and Amazon.com. The target audience is tech-savvy music lovers and the tone is friendly and exciting. + + 1. What should be the subject line of the email? + 2. What should be the body of the email? + """ +) +``` + +### Cohere + +The [CoherePromptDriver](../../reference/griptape/drivers/prompt/cohere_prompt_driver.md) connects to the Cohere [Generate](https://docs.cohere.ai/reference/generate) API. + +!!! info + This driver requires the `drivers-prompt-cohere` [extra](../index.md#extras). + +```python +import os +from griptape.structures import Agent +from griptape.drivers import CoherePromptDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=CoherePromptDriver( + model="command", + api_key=os.environ['COHERE_API_KEY'], + ) + ) + ) +) + +agent.run('What is the sentiment of this review? Review: "I really enjoyed this movie!"') +``` + +### Anthropic + +!!! info + This driver requires the `drivers-prompt-anthropic` [extra](../index.md#extras). + +The [AnthropicPromptDriver](../../reference/griptape/drivers/prompt/anthropic_prompt_driver.md) connects to the Anthropic [Messages](https://docs.anthropic.com/claude/reference/messages_post) API. + +```python +import os +from griptape.structures import Agent +from griptape.drivers import AnthropicPromptDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AnthropicPromptDriver( + model="claude-3-opus-20240229", + api_key=os.environ['ANTHROPIC_API_KEY'], + ) + ) + ) +) + +agent.run('Where is the best place to see cherry blossums in Japan?') +``` + +### Google + +!!! info + This driver requires the `drivers-prompt-google` [extra](../index.md#extras). + +The [GooglePromptDriver](../../reference/griptape/drivers/prompt/google_prompt_driver.md) connects to the [Google Generative AI](https://ai.google.dev/tutorials/python_quickstart#generate_text_from_text_inputs) API. + +```python +import os +from griptape.structures import Agent +from griptape.drivers import GooglePromptDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=GooglePromptDriver( + model="gemini-pro", + api_key=os.environ['GOOGLE_API_KEY'], + ) + ) + ) +) + +agent.run('Briefly explain how a computer works to a young child.') +``` + +### Hugging Face Hub + +!!! info + This driver requires the `drivers-prompt-huggingface` [extra](../index.md#extras). + +The [HuggingFaceHubPromptDriver](../../reference/griptape/drivers/prompt/huggingface_hub_prompt_driver.md) connects to the [Hugging Face Hub API](https://huggingface.co/docs/hub/api). It supports models with the following tasks: + +- text2text-generation +- text-generation + +Let's recreate the [Falcon-7B-Instruct](https://huggingface.co/tiiuae/falcon-7b-instruct) example using Griptape: + +```python +import os +from griptape.structures import Agent +from griptape.drivers import HuggingFaceHubPromptDriver +from griptape.rules import Rule, Ruleset +from griptape.utils import PromptStack +from griptape.config import StructureConfig, StructureGlobalDriversConfig + + +def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: + prompt_lines = [] + + for i in prompt_stack.inputs: + if i.is_user(): + prompt_lines.append(f"User: {i.content}") + elif i.is_assistant(): + prompt_lines.append(f"Girafatron: {i.content}") + else: + prompt_lines.append(f"Instructions: {i.content}") + prompt_lines.append("Girafatron:") + + return "\n".join(prompt_lines) + + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=HuggingFaceHubPromptDriver( + model="tiiuae/falcon-7b-instruct", + api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + prompt_stack_to_string=prompt_stack_to_string_converter, + ) + ) + ), + rulesets=[ + Ruleset( + name="Girafatron", + rules=[ + Rule( + value="You are Girafatron, a giraffe-obsessed robot. You are talking to a human. " + "Girafatron is obsessed with giraffes, the most glorious animal on the face of this Earth. " + "Giraftron believes all other animals are irrelevant when compared to the glorious majesty of the giraffe." + ) + ] + ) + ], +) + +agent.run("Hello Girafatron, what is your favorite animal?") +``` + +#### Text Generation Interface + +The [HuggingFaceHubPromptDriver](#hugging-face-hub) also supports [Text Generation Interface](https://huggingface.co/docs/text-generation-inference/basic_tutorials/consuming_tgi#inference-client) for running models locally. To use Text Generation Interface, just set `model` to a TGI endpoint. + +```python title="PYTEST_IGNORE" +import os +from griptape.structures import Agent +from griptape.drivers import HuggingFaceHubPromptDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=HuggingFaceHubPromptDriver( + model="http://127.0.0.1:8080", + api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + ), + ) + ), +) + +agent.run("Write the code for a snake game.") +``` + +### Hugging Face Pipeline + +!!! info + This driver requires the `drivers-prompt-huggingface` [extra](../index.md#extras). + +The [HuggingFaceHubPromptDriver](../../reference/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.md) uses [Hugging Face Pipelines](https://huggingface.co/docs/transformers/main_classes/pipelines) for inference locally. It supports models with the following tasks: + +- text2text-generation +- text-generation + +!!! warning + Running a model locally can be a computationally expensive process. + +```python +import os +from griptape.structures import Agent +from griptape.drivers import HuggingFaceHubPromptDriver +from griptape.rules import Rule, Ruleset +from griptape.utils import PromptStack +from griptape.config import StructureConfig, StructureGlobalDriversConfig + + +# Override the default Prompt Stack to string converter +# to format the prompt in a way that is easier for this model to understand. +def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: + prompt_lines = [] + + for i in prompt_stack.inputs: + if i.is_user(): + prompt_lines.append(f"User: {i.content}") + elif i.is_assistant(): + prompt_lines.append(f"Girafatron: {i.content}") + else: + prompt_lines.append(f"Instructions: {i.content}") + prompt_lines.append("Girafatron:") + + return "\n".join(prompt_lines) + + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=HuggingFaceHubPromptDriver( + model="tiiuae/falcon-7b-instruct", + api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + prompt_stack_to_string=prompt_stack_to_string_converter, + ), + ) + ), + rulesets=[ + Ruleset( + name="Girafatron", + rules=[ + Rule( + value="You are Girafatron, a giraffe-obsessed robot. You are talking to a human. " + "Girafatron is obsessed with giraffes, the most glorious animal on the face of this Earth. " + "Giraftron believes all other animals are irrelevant when compared to the glorious majesty of the giraffe." + ) + ] + ) + ], +) + +agent.run("Hello Girafatron, what is your favorite animal?") +``` + +### Multi Model Prompt Drivers +Certain LLM providers such as Amazon SageMaker and Amazon Bedrock supports many types of models, each with their own slight differences in prompt structure and parameters. To support this variation across models, these Prompt Drivers takes a [Prompt Model Driver](../../reference/griptape/drivers/prompt_model/base_prompt_model_driver.md) +through the [prompt_model_driver](../../reference/griptape/drivers/prompt/base_multi_model_prompt_driver.md#griptape.drivers.prompt.base_multi_model_prompt_driver.BaseMultiModelPromptDriver.prompt_model_driver) parameter. +[Prompt Model Driver](../../reference/griptape/drivers/prompt_model/base_prompt_model_driver.md)s allows for model-specific customization for Prompt Drivers. + + +#### Amazon SageMaker + +!!! info + This driver requires the `drivers-prompt-amazon-sagemaker` [extra](../index.md#extras). + +The [AmazonSageMakerPromptDriver](../../reference/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.md) uses [Amazon SageMaker Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) for inference on AWS. + +##### LLaMA + +```python title="PYTEST_IGNORE" +import os +from griptape.structures import Agent +from griptape.drivers import ( + AmazonSageMakerPromptDriver, + SageMakerLlamaPromptModelDriver, +) +from griptape.rules import Rule +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AmazonSageMakerPromptDriver( + model=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], + prompt_model_driver=SageMakerLlamaPromptModelDriver(), + temperature=0.75, + ), + ) + ), + rules=[ + Rule( + value="You are a helpful, respectful and honest assistant who is also a swarthy pirate." + "You only speak like a pirate and you never break character." + ) + ], +) + +agent.run("Hello!") +``` + +##### Falcon + +```python title="PYTEST_IGNORE" +import os +from griptape.structures import Agent +from griptape.drivers import ( + AmazonSageMakerPromptDriver, + SageMakerFalconPromptModelDriver, +) +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AmazonSageMakerPromptDriver( + model=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], + prompt_model_driver=SageMakerFalconPromptModelDriver(), + ), + ) + ) +) + +agent.run("What is a good lasagna recipe?") + +``` + +#### Amazon Bedrock + +!!! info + This driver requires the `drivers-prompt-amazon-bedrock` [extra](../index.md#extras). + +The [AmazonBedrockPromptDriver](../../reference/griptape/drivers/prompt/amazon_bedrock_prompt_driver.md) uses [Amazon Bedrock](https://aws.amazon.com/bedrock/) for inference on AWS. + +##### Amazon Titan + +To use this model with Amazon Bedrock, use the [BedrockTitanPromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.md). + +```python +from griptape.structures import Agent +from griptape.drivers import AmazonBedrockPromptDriver, BedrockTitanPromptModelDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AmazonBedrockPromptDriver( + model="amazon.titan-text-express-v1", + prompt_model_driver=BedrockTitanPromptModelDriver( + top_p=1, + ) + ) + ) + ) +) +agent.run( + "Write an informational article for children about how birds fly." + "Compare how birds fly to how airplanes fly." + 'Make sure to use the word "Thrust" at least three times.' +) +``` + +##### Anthropic Claude + +To use this model with Amazon Bedrock, use the [BedrockClaudePromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.md). + +```python +from griptape.structures import Agent +from griptape.drivers import AmazonBedrockPromptDriver, BedrockClaudePromptModelDriver +from griptape.rules import Rule +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AmazonBedrockPromptDriver( + model="anthropic.claude-3-sonnet-20240229-v1:0", + prompt_model_driver=BedrockClaudePromptModelDriver( + top_p=1, + ), + ), + ) + ), + rules=[ + Rule( + value="You are a customer service agent that is classifying emails by type. I want you to give your answer and then explain it." + ) + ], +) +agent.run( + """How would you categorize this email? + + Can I use my Mixmaster 4000 to mix paint, or is it only meant for mixing food? + + + Categories are: + (A) Pre-sale question + (B) Broken or defective item + (C) Billing question + (D) Other (please explain)""" +) +``` +##### Meta Llama 2 + +To use this model with Amazon Bedrock, use the [BedrockLlamaPromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.md). + +```python +from griptape.structures import Agent +from griptape.drivers import AmazonBedrockPromptDriver, BedrockLlamaPromptModelDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AmazonBedrockPromptDriver( + model="meta.llama2-13b-chat-v1", + prompt_model_driver=BedrockLlamaPromptModelDriver(), + ), + ) + ) +) +agent.run( + "Write an article about impact of high inflation to GDP of a country" +) +``` + +##### Ai21 Jurassic + +To use this model with Amazon Bedrock, use the [BedrockJurassicPromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.md). + +```python +from griptape.structures import Agent +from griptape.drivers import AmazonBedrockPromptDriver, BedrockJurassicPromptModelDriver +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AmazonBedrockPromptDriver( + model="ai21.j2-ultra-v1", + prompt_model_driver=BedrockJurassicPromptModelDriver(top_p=0.95), + temperature=0.7, + ) + ) + ) +) +agent.run( + "Suggest an outline for a blog post based on a title. " + "Title: How I put the pro in prompt engineering." +) +``` diff --git a/docs/griptape-framework/drivers/sql-drivers.md b/docs/griptape-framework/drivers/sql-drivers.md new file mode 100644 index 000000000..35377849a --- /dev/null +++ b/docs/griptape-framework/drivers/sql-drivers.md @@ -0,0 +1,75 @@ +## Overview +SQL drivers can be used to make SQL queries and load table schemas. They are used by the [SqlLoader](../../reference/griptape/loaders/sql_loader.md) to process data. All loaders implement the following methods: + +* `execute_query()` executes a query and returns [RowResult](../../reference/griptape/drivers/sql/base_sql_driver.md#griptape.drivers.sql.base_sql_driver.BaseSqlDriver.RowResult.md)s. +* `execute_query_row()` executes a query and returns a raw result from SQL. +* `get_table_schema()` returns a table schema. + +!!! info + More database-specific SQL drivers are coming soon. + +## SqlDriver + +This is a basic SQL loader based on [SQLAlchemy 1.x](https://docs.sqlalchemy.org/en/14/). Here is an example of how to use it: + +```python +from griptape.drivers import SqlDriver + +driver = SqlDriver( + engine_url="sqlite:///:memory:" +) + +driver.execute_query("select 'foo', 'bar';") +``` + +## AmazonRedshiftSqlDriver + +!!! info + This driver requires the `drivers-sql-redshift` [extra](../index.md#extras). + +This is a SQL driver for interacting with the [Amazon Redshift Data API](https://docs.aws.amazon.com/redshift-data/latest/APIReference/Welcome.html) +to execute statements. Here is an example of how to use it for Redshift Serverless: + +```python +import boto3 +import os +from griptape.drivers import AmazonRedshiftSqlDriver + +session = boto3.Session() + +driver = AmazonRedshiftSqlDriver( + database=os.environ["REDSHIFT_DATABASE"], + session=session, + cluster_identifier=os.environ['REDSHIFT_CLUSTER_IDENTIFIER'], +) + +driver.execute_query("select * from people;") +``` + +## SnowflakeSqlDriver + +!!! info + This driver requires the `drivers-sql-snowflake` [extra](../index.md#extras). + +This is a SQL driver based on the [Snowflake SQLAlchemy Toolkit](https://docs.snowflake.com/en/developer-guide/python-connector/sqlalchemy) which runs on top of the Snowflake Connector for Python. Here is an example of how to use it: + +```python +import os +import snowflake.connector +from snowflake.connector import SnowflakeConnection +from griptape.drivers import SnowflakeSqlDriver + +def get_snowflake_connection() -> SnowflakeConnection: + return snowflake.connector.connect( + account=os.environ['SNOWFLAKE_ACCOUNT'], + user=os.environ['SNOWFLAKE_USER'], + password=os.environ['SNOWFLAKE_PASSWORD'], + database=os.environ['SNOWFLAKE_DATABASE'], + schema=os.environ['SNOWFLAKE_SCHEMA'], + warehouse=os.environ['SNOWFLAKE_WAREHOUSE'] + ) + +driver = SnowflakeSqlDriver(connection_func=get_snowflake_connection) + +driver.execute_query("select * from people;") +``` diff --git a/docs/griptape-framework/drivers/vector-store-drivers.md b/docs/griptape-framework/drivers/vector-store-drivers.md new file mode 100644 index 000000000..e2e85d2c9 --- /dev/null +++ b/docs/griptape-framework/drivers/vector-store-drivers.md @@ -0,0 +1,417 @@ +## Overview + +Griptape provides a way to build drivers for vector DBs where embeddings can be stored and queried. Every vector store driver implements the following methods: + +- `upsert_text_artifact()` for updating or inserting a new [TextArtifact](../../reference/griptape/artifacts/text_artifact.md) into vector DBs. The method will automatically generate embeddings for a given value. +- `upsert_text_artifacts()` for updating or inserting multiple [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s into vector DBs. The method will automatically generate embeddings for given values. +- `upsert_text()` for updating and inserting new arbitrary strings into vector DBs. The method will automatically generate embeddings for a given value. +- `upsert_vector()` for updating and inserting new vectors directly. +- `query()` for querying vector DBs. + +Each vector driver takes a [BaseEmbeddingDriver](../../reference/griptape/drivers/embedding/base_embedding_driver.md) used to dynamically generate embeddings for strings. + +!!! info + When working with vector database indexes with Griptape drivers, make sure the number of dimensions is equal to 1536. Nearly all embedding models create vectors with this number of dimensions. Check the documentation for your vector database on how to create/update vector indexes. + +!!! info + More vector drivers are coming soon. + +## Local Vector Store Driver + +The [LocalVectorStoreDriver](../../reference/griptape/drivers/vector/local_vector_store_driver.md) can be used to load and query data from memory. Here is a complete example of how the driver can be used to load a webpage into the driver and query it later: + +```python +import os +from griptape.artifacts import BaseArtifact +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.loaders import WebLoader + + +# Initialize an embedding driver +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) + +vector_store_driver = LocalVectorStoreDriver(embedding_driver=embedding_driver) +artifacts = WebLoader(max_tokens=100).load("https://www.griptape.ai") + +[vector_store_driver.upsert_text_artifact(a, namespace="griptape") for a in artifacts] + +results = vector_store_driver.query( + "creativity", + count=3, + namespace="griptape" +) + +values = [BaseArtifact.from_json(r.meta["artifact"]).value for r in results] + +print("\n\n".join(values)) + +``` + +## Pinecone Vector Store Driver + +!!! info + This driver requires the `drivers-vector-pinecone` [extra](../index.md#extras). + +The [PineconeVectorStoreDriver](../../reference/griptape/drivers/vector/pinecone_vector_store_driver.md) supports the [Pinecone vector database](https://www.pinecone.io/). + +Here is an example of how the driver can be used to load and query information in a Pinecone cluster: + +```python +import os +import hashlib +import json +from urllib.request import urlopen +from griptape.drivers import PineconeVectorStoreDriver, OpenAiEmbeddingDriver + +def load_data(driver: PineconeVectorStoreDriver) -> None: + response = urlopen( + "https://raw.githubusercontent.com/wedeploy-examples/" + "supermarket-web-example/master/products.json" + ) + + for product in json.loads(response.read()): + driver.upsert_text( + product["description"], + vector_id=hashlib.md5(product["title"].encode()).hexdigest(), + meta={ + "title": product["title"], + "description": product["description"], + "type": product["type"], + "price": product["price"], + "rating": product["rating"], + }, + namespace="supermarket-products", + ) + +# Initialize an embedding driver +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) + +vector_store_driver = PineconeVectorStoreDriver( + api_key=os.environ["PINECONE_API_KEY"], + environment=os.environ["PINECONE_ENVIRONMENT"], + index_name=os.environ['PINECONE_INDEX_NAME'], + embedding_driver=embedding_driver, +) + +load_data(vector_store_driver) + +result = vector_store_driver.query( + "fruit", + count=3, + filter={"price": {"$lte": 15}, "rating": {"$gte": 4}}, + namespace="supermarket-products", +) +``` + +## Marqo Vector Store Driver + +!!! info + This driver requires the `drivers-vector-marqo` [extra](../index.md#extras). + +The [MarqoVectorStoreDriver](../../reference/griptape/drivers/vector/marqo_vector_store_driver.md) supports the Marqo vector database. + +Here is an example of how the driver can be used to load and query information in a Marqo cluster: + +```python +import os +from griptape.drivers import MarqoVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.engines import VectorQueryEngine +from griptape.loaders import WebLoader +from griptape.tools import VectorStoreClient + +# Initialize an embedding driver +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) +prompt_driver = OpenAiChatPromptDriver(model="gpt-3.5-turbo") + +# Define the namespace +namespace = 'griptape-ai' + +# Initialize the vector store driver +vector_store = MarqoVectorStoreDriver( + api_key=os.environ["MARQO_API_KEY"], + url=os.environ["MARQO_URL"], + index=os.environ["MARQO_INDEX_NAME"], + embedding_driver=embedding_driver, +) + +# Initialize the query engine +query_engine = VectorQueryEngine(vector_store_driver=vector_store, prompt_driver=prompt_driver) + +# Initialize the knowledge base tool +VectorStoreClient( + description="Contains information about the Griptape Framework from www.griptape.ai", + query_engine=query_engine, + namespace=namespace, +) + +# Load artifacts from the web +artifacts = WebLoader(max_tokens=200).load("https://www.griptape.ai") + +# Upsert the artifacts into the vector store +vector_store.upsert_text_artifacts( + { + namespace: artifacts, + } +) +result = vector_store.query(query="What is griptape?") +print(result) +``` + +## Mongodb Atlas Vector Store Driver + +!!! info + This driver requires the `drivers-vector-mongodb` [extra](../index.md#extras). + +The [MongodbAtlasVectorStoreDriver](../../reference/griptape/drivers/vector/mongodb_atlas_vector_store_driver.md) provides support for storing vector data in a MongoDB Atlas database. + +Here is an example of how the driver can be used to load and query information in a MongoDb Atlas Cluster: + +```python +from griptape.drivers import MongoDbAtlasVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.loaders import WebLoader +import os + +# Initialize an embedding driver +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) + +host = os.environ["MONGODB_HOST"] +username = os.environ["MONGODB_USERNAME"] +password = os.environ["MONGODB_PASSWORD"] +database_name = os.environ["MONGODB_DATABASE_NAME"] +collection_name = os.environ[ "MONGODB_COLLECTION_NAME"] +index_name = os.environ["MONGODB_INDEX_NAME"] +vector_path = os.environ["MONGODB_VECTOR_PATH"] + +# Initialize the vector store driver +vector_store = MongoDbAtlasVectorStoreDriver( + connection_string=f"mongodb+srv://{username}:{password}@{host}/{database_name}", + database_name=database_name, + collection_name=collection_name, + embedding_driver=embedding_driver, + index_name=index_name, + vector_path=vector_path, +) + +# Load artifacts from the web +artifacts = WebLoader(max_tokens=200).load("https://www.griptape.ai") + +# Upsert the artifacts into the vector store +vector_store.upsert_text_artifacts( + { + "griptape": artifacts, + } +) + +result = vector_store.query(query="What is griptape?") +print(result) +``` + +The format for creating a vector index should look similar to the following: +```json +{ + "fields": [ + { + "numDimensions": 1536, + "path": "", + "similarity": "euclidean", + "type": "vector" + }, + { + "path": "namespace", + "type": "filter" + } + ] +} +``` +Replace `path_to_vector` with the expected field name where the vector content will be. + +## Azure MongoDB Vector Store Driver + +!!! info + This driver requires the `drivers-vector-mongodb` [extra](../index.md#extras). + +The [AzureMongoDbVectorStoreDriver](../../reference/griptape/drivers/vector/azure_mongodb_vector_store_driver.md) provides support for storing vector data in an Azure CosmosDb database account using the MongoDb vCore API + +Here is an example of how the driver can be used to load and query information in an Azure CosmosDb MongoDb vCore database. It is almost the same as the [MongodbAtlasVectorStoreDriver](#mongodb-atlas-vector-store-driver): + +```python +from griptape.drivers import AzureMongoDbVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.loaders import WebLoader +import os + +# Initialize an embedding driver +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) + +azure_host = os.environ["AZURE_MONGODB_HOST"] +username = os.environ["AZURE_MONGODB_USERNAME"] +password = os.environ["AZURE_MONGODB_PASSWORD"] +database_name = os.environ["AZURE_MONGODB_DATABASE_NAME"] +collection_name = os.environ["AZURE_MONGODB_COLLECTION_NAME"] +index_name = os.environ["AZURE_MONGODB_INDEX_NAME"] +vector_path = os.environ["AZURE_MONGODB_VECTOR_PATH"] + +# Initialize the vector store driver +vector_store = AzureMongoDbVectorStoreDriver( + connection_string=f"mongodb+srv://{username}:{password}@{azure_host}/{database_name}?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000", + database_name=database_name, + collection_name=collection_name, + embedding_driver=embedding_driver, + index_name=index_name, + vector_path=vector_path, +) + +# Load artifacts from the web +artifacts = WebLoader(max_tokens=200).load("https://www.griptape.ai") + +# Upsert the artifacts into the vector store +vector_store.upsert_text_artifacts( + { + "griptape": artifacts, + } +) + +result = vector_store.query(query="What is griptape?") +print(result) +``` + +## Redis Vector Store Driver + +!!! info + This driver requires the `drivers-vector-redis` [extra](../index.md#extras). + +The [RedisVectorStoreDriver](../../reference/griptape/drivers/vector/redis_vector_store_driver.md) integrates with the Redis vector storage system. + +Here is an example of how the driver can be used to load and query information in a Redis Cluster: + +```python +import os +from griptape.drivers import RedisVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.loaders import WebLoader +import numpy as np # Assuming you'd use numpy to create a dummy vector for the sake of example. + +# Initialize an embedding driver +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) + +vector_store_driver = RedisVectorStoreDriver( + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + password=os.environ["REDIS_PASSWORD"], + index=os.environ["REDIS_INDEX"], + embedding_driver=embedding_driver, +) + +# Load artifacts from the web +artifacts = WebLoader(max_tokens=200).load("https://www.griptape.ai") + +# Upsert the artifacts into the vector store +vector_store_driver.upsert_text_artifacts( + { + "griptape": artifacts, + } +) + +result = vector_store_driver.query(query="What is griptape?") +print(result) +``` + +The format for creating a vector index should be similar to the following: +``` +FT.CREATE idx:griptape ON hash PREFIX 1 "griptape:" SCHEMA tag TAG vector VECTOR FLAT 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE +``` + +## OpenSearch Vector Store Driver + +!!! info + This driver requires the `drivers-vector-opensearch` [extra](../index.md#extras). + +The [OpenSearchVectorStoreDriver](../../reference/griptape/drivers/vector/opensearch_vector_store_driver.md) integrates with the OpenSearch platform, allowing for storage, retrieval, and querying of vector data. + +Here is an example of how the driver can be used to load and query information in an OpenSearch Cluster: + +```python +import os +import boto3 +from griptape.drivers import AmazonOpenSearchVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.loaders import WebLoader + +# Initialize an embedding driver +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) + +vector_store_driver = AmazonOpenSearchVectorStoreDriver( + host=os.environ["AMAZON_OPENSEARCH_HOST"], + index_name=os.environ["AMAZON_OPENSEARCH_INDEX_NAME"], + session=boto3.Session(), + embedding_driver=embedding_driver, +) + +# Load artifacts from the web +artifacts = WebLoader(max_tokens=200).load("https://www.griptape.ai") + +# Upsert the artifacts into the vector store +vector_store_driver.upsert_text_artifacts( + { + "griptape": artifacts, + } +) + +result = vector_store_driver.query(query="What is griptape?") + +print(result) +``` + +The body mappings for creating a vector index should look similar to the following: +```json +{ + "mappings": { + "properties": { + "vector": {"type": "knn_vector", "dimension": 1536}, + "namespace": {"type": "keyword"}, + "metadata": {"type": "object", "enabled": true} + } + } +} +``` + +## PGVector Vector Store Driver + +!!! info + This driver requires the `drivers-vector-postgresql` [extra](../index.md#extras). + +The [PGVectorVectorStoreDriver](../../reference/griptape/drivers/vector/pgvector_vector_store_driver.md) integrates with PGVector, a vector storage and search extension for Postgres. While Griptape will handle enabling the extension, PGVector must be installed and ready for use in your Postgres instance before using this vector store driver. + +Here is an example of how the driver can be used to load and query information in a Postgres database: + +```python +import os +from griptape.drivers import PgVectorVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.loaders import WebLoader + +# Initialize an embedding driver. +embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) + +db_user = os.environ["POSTGRES_USER"] +db_pass = os.environ["POSTGRES_PASSWORD"] +db_host = os.environ["POSTGRES_HOST"] +db_port = os.environ["POSTGRES_PORT"] +db_name = os.environ["POSTGRES_DB"] +db_connection_string = f"postgresql://{db_user}:{db_pass}@{db_host}:{db_port}/{db_name}" +vector_store_driver = PgVectorVectorStoreDriver( + connection_string=db_connection_string, + embedding_driver=embedding_driver, + table_name="griptape_vectors", +) + +# Install required Postgres extensions and create database schema. +vector_store_driver.setup() + +web_loader = WebLoader() +artifacts = web_loader.load("https://www.griptape.ai") +vector_store_driver.upsert_text_artifacts( + { + "griptape": artifacts, + } +) + +result = vector_store_driver.query("What is griptape?") +print(result) +``` diff --git a/docs/griptape-framework/drivers/web-scraper-drivers.md b/docs/griptape-framework/drivers/web-scraper-drivers.md new file mode 100644 index 000000000..e1a3f53b3 --- /dev/null +++ b/docs/griptape-framework/drivers/web-scraper-drivers.md @@ -0,0 +1,79 @@ +## Overview + +Web Scraper Drivers can be used to scrape text from the web. They are used by [WebLoader](../../reference/griptape/loaders/web_loader.md) to provide its functionality. All Web Scraper Drivers implement the following methods: + +* `scrape_url()` scrapes text from a website and returns a [TextArtifact](../../reference/griptape/artifacts/text_artifact.md). The format of the scrapped text is determined by the Driver. + +## Markdownify Web Scraper Driver + +!!! info + This driver requires the `drivers-web-scraper-markdownify` [extra](../index.md#extras) and the + playwright browsers to be installed. + + To install the playwright browsers, run `playwright install` in your terminal. If you are using + poetry, run `poetry run playwright install` instead. The `playwright` command should already be + installed as a dependency of the `drivers-web-scraper-markdownify` extra. For more details about + playwright, see [the playwright docs](https://playwright.dev/python/docs/library). + + Note that if you skip installing the playwright browsers, you will see the following error when + you run your code: + + ``` + playwright._impl._errors.Error: Executable doesn't exist at ... + ╔════════════════════════════════════════════════════════════╗ + ║ Looks like Playwright was just installed or updated. ║ + ║ Please run the following command to download new browsers: ║ + ║ ║ + ║ playwright install ║ + ║ ║ + ║ <3 Playwright Team ║ + ╚════════════════════════════════════════════════════════════╝ + ``` + +The [MarkdownifyWebScraperDriver](../../reference/griptape/drivers/web_scraper/markdownify_web_scraper_driver.md) outputs the scraped text in markdown format. It uses [playwright](https://pypi.org/project/playwright/) to render web pages along with dynamically loaded content, and a combination of [beautifulsoup4](https://pypi.org/project/beautifulsoup4/) and [markdownify](https://pypi.org/project/markdownify/) to produce a markdown representation of a webpage. It makes a best effort to produce a markdown representation of a webpage that is concise yet human (and LLM) readable. + +Example using `MarkdownifyWebScraperDriver` directly: + +```python +from griptape.drivers import MarkdownifyWebScraperDriver + +driver = MarkdownifyWebScraperDriver() + +driver.scrape_url("https://griptape.ai") +``` + +Example of using `MarkdownifyWebScraperDriver` with an agent: + +```python +from griptape.drivers import MarkdownifyWebScraperDriver +from griptape.loaders import WebLoader +from griptape.tools import TaskMemoryClient, WebScraper +from griptape.structures import Agent + +agent = Agent( + tools=[ + WebScraper( + web_loader=WebLoader( + web_scraper_driver=MarkdownifyWebScraperDriver(timeout=1000) + ), + off_prompt=True, + ), + TaskMemoryClient(off_prompt=False), + ], +) +agent.run("List all email addresses on griptape.ai in a flat numbered markdown list.") +``` + +## Trafilatura Web Scraper Driver + +The [TrafilaturaWebScraperDriver](../../reference/griptape/drivers/web_scraper/trafilatura_web_scraper_driver.md) scrapes text from a webpage using the [Trafilatura](https://trafilatura.readthedocs.io) library. + +Example of using `TrafilaturaWebScraperDriver` directly: + +```python +from griptape.drivers import TrafilaturaWebScraperDriver + +driver = TrafilaturaWebScraperDriver() + +driver.scrape_url("https://griptape.ai") +``` diff --git a/docs/griptape-framework/engines/extraction-engines.md b/docs/griptape-framework/engines/extraction-engines.md new file mode 100644 index 000000000..f7969ff4a --- /dev/null +++ b/docs/griptape-framework/engines/extraction-engines.md @@ -0,0 +1,79 @@ +## Overview +Extraction Engines in Griptape facilitate the extraction of data from text formats such as CSV and JSON. +These engines play a crucial role in the functionality of [Extraction Tasks](../../griptape-framework/structures/tasks.md). +As of now, Griptape supports two types of Extraction Engines: the CSV Extraction Engine and the JSON Extraction Engine. + +## CSV Extraction Engine + +The CSV Extraction Engine is designed specifically for extracting data from CSV-formatted content. + +!!! info + The CSV Extraction Engine requires the `column_names` parameter for specifying the columns to be extracted. + +```python +from griptape.drivers import OpenAiChatPromptDriver +from griptape.engines import CsvExtractionEngine + +# Initialize the CsvExtractionEngine instance +csv_engine = CsvExtractionEngine( + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), +) + +# Define some unstructured data +sample_text = """ +Alice, 28, lives in New York. +Bob, 35 lives in California. +Charlie is 40 and lives in Texas. +""" + +# Extract CSV rows using the engine +result = csv_engine.extract(sample_text, column_names=["name", "age", "location"]) + +for row in result.value: + print(row.to_text()) +``` +``` +name,age,location +Alice,28,New York +Bob,35,California +Charlie,40,Texas +``` + +## JSON Extraction Engine + +The JSON Extraction Engine is tailored for extracting data from JSON-formatted content. + +!!! info + The JSON Extraction Engine requires the `template_schema` parameter for specifying the structure to be extracted. + +```python +from schema import Schema + +from griptape.drivers import OpenAiChatPromptDriver +from griptape.engines import JsonExtractionEngine + +json_engine = JsonExtractionEngine( + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), +) + +# Define some unstructured data +sample_json_text = """ +Alice (Age 28) lives in New York. +Bob (Age 35) lives in California. +""" + +# Define a schema for extraction +user_schema = Schema( + {"users": [{"name": str, "age": int, "location": str}]} +).json_schema("UserSchema") + +# Extract data using the engine +result = json_engine.extract(sample_json_text, template_schema=user_schema) + +for artifact in result.value: + print(artifact.value) +``` +``` +{'name': 'Alice', 'age': 28, 'location': 'New York'} +{'name': 'Bob', 'age': 35, 'location': 'California'} +``` diff --git a/docs/griptape-framework/engines/image-generation-engines.md b/docs/griptape-framework/engines/image-generation-engines.md new file mode 100644 index 000000000..e5e7c77e1 --- /dev/null +++ b/docs/griptape-framework/engines/image-generation-engines.md @@ -0,0 +1,165 @@ +## Overview + +[Image Generation Engines](../../reference/griptape/engines/image/index.md) facilitate text-to-image and image-to-image generation. Each Engine provides a `run` method that accepts the necessary inputs for its particular mode and provides the request to the configured [Driver](../drivers/image-generation-drivers.md). + +### Image Generation Engine Rulesets + +[Rulesets](../structures/rulesets.md) and Negative Rulesets are used by Engines to influence a model's output. Input rulesets are added to request prompts and can be used to standardize generated images across varying prompts. Negative rulesets are treated as negatively-weighted prompts and can be used to describe features or characteristics that should be avoided in the result. + +In the following example, rulesets are provided to the Engine's `run()` method call. These rules are provided to the Driver and influence the model to generate an image in an artistic, watercolor style, while avoiding blurry, photographic characteristics. + +!!! note "Not all Drivers support Negative Rulesets" + See the [documentation for your Driver](../drivers/image-generation-drivers.md) to determine if it supports Negative Rulesets. + +```python +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.rules import Ruleset, Rule + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = PromptImageGenerationEngine( + image_generation_driver=driver, +) + +positive_ruleset = Ruleset(name="positive rules", rules=[Rule("artistic"), Rule("watercolor")]) +negative_ruleset = Ruleset(name="negative rules", rules=[Rule("blurry"), Rule("photograph")]) + +engine.run( + prompts=["A dog riding a skateboard"], + rulesets=[positive_ruleset], + negative_rulesets=[negative_ruleset], +) +``` + +### Prompt Image Generation Engine + +This Engine facilitates generating images from text prompts. + +```python +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = PromptImageGenerationEngine( + image_generation_driver=driver, +) + +engine.run( + prompts=["A watercolor painting of a dog riding a skateboard"], +) +``` + +### Variation Image Generation Engine + +This Engine facilitates generating variations of an input image according to a text prompt. The input image is used as a reference for the model's generation. + +```python +from griptape.engines import VariationImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.loaders import ImageLoader + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = VariationImageGenerationEngine( + image_generation_driver=driver, +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +engine.run( + prompts=["A photo of a mountain landscape in winter"], + image=image_artifact, +) +``` + +### Inpainting Image Generation Engine + +This Engine facilitates inpainting, or modifying an input image according to a text prompt within the bounds of a mask defined by mask image. After inpainting, the area specified by the mask is replaced with the model's generation, while the rest of the input image remains the same. + +```python +from griptape.engines import InpaintingImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.loaders import ImageLoader + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = InpaintingImageGenerationEngine( + image_generation_driver=driver, +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +with open("tests/resources/mountain-mask.png", "rb") as f: + mask_artifact = ImageLoader().load(f.read()) + +engine.run( + prompts=["A photo of a castle built into the side of a mountain"], + image=image_artifact, + mask=mask_artifact, +) +``` + +### Outpainting Image Generation Engine + +This Engine facilitates outpainting, or modifying an input image according to a text prompt outside the bounds of a mask defined by a mask image. After outpainting, the area of the input image specified by the mask remains the same, while the rest is replaced with the model's generation. + +```python +from griptape.engines import OutpaintingImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.loaders import ImageLoader + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = OutpaintingImageGenerationEngine( + image_generation_driver=driver, +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +with open("tests/resources/mountain-mask.png", "rb") as f: + mask_artifact = ImageLoader().load(f.read()) + +engine.run( + prompts=["A photo of a mountain shrouded in clouds"], + image=image_artifact, + mask=mask_artifact, +) +``` diff --git a/docs/griptape-framework/engines/image-query-engines.md b/docs/griptape-framework/engines/image-query-engines.md new file mode 100644 index 000000000..a0b9309d8 --- /dev/null +++ b/docs/griptape-framework/engines/image-query-engines.md @@ -0,0 +1,25 @@ +# ImageQueryEngine + +The [Image Query Engine](../../reference/griptape/engines/image_query/image_query_engine.md) is used to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular [Image Query Driver](../drivers/image-query-drivers.md). + +All Image Query Drivers default to a `max_tokens` of 256. You can tune this value based on your use case and the [Image Query Driver](../drivers/image-query-drivers.md) you are providing. + +```python +from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader + +driver = OpenAiVisionImageQueryDriver( + model="gpt-4-vision-preview", + max_tokens=256 +) + +engine = ImageQueryEngine( + image_query_driver=driver +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +engine.run("Describe the weather in the image", [image_artifact]) +``` diff --git a/docs/griptape-framework/engines/query-engines.md b/docs/griptape-framework/engines/query-engines.md new file mode 100644 index 000000000..8acd4686d --- /dev/null +++ b/docs/griptape-framework/engines/query-engines.md @@ -0,0 +1,27 @@ +## Overview +Query engines are used to search collections of text. + +## VectorQueryEngine + +Used to query vector storages. You can set a custom [prompt_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.prompt_driver.md) and [vector_store_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.vector_store_driver.md). Uses [LocalVectorStoreDriver](../../reference/griptape/drivers/vector/local_vector_store_driver.md) by default. + +Use the [upsert_text_artifact](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.upsert_text_artifact.md) method to insert [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s into vector storage with an optional `namespace`. + +Use the [VectorQueryEngine](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.query.md) method to query the vector storage. + +```python +from griptape.drivers import OpenAiChatPromptDriver, LocalVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.engines import VectorQueryEngine +from griptape.loaders import WebLoader + +engine = VectorQueryEngine( + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), + vector_store_driver=LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) +) + +engine.upsert_text_artifacts( + WebLoader().load("https://www.griptape.ai"), namespace="griptape" +) + +engine.query("what is griptape?", namespace="griptape") +``` diff --git a/docs/griptape-framework/engines/summary-engines.md b/docs/griptape-framework/engines/summary-engines.md new file mode 100644 index 000000000..8ecc1ad09 --- /dev/null +++ b/docs/griptape-framework/engines/summary-engines.md @@ -0,0 +1,29 @@ +## Overview + +Summary engines are used to summarize text and collections of [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s. + +## PromptSummaryEngine + +Used to summarize texts with LLMs. You can set a custom [prompt_driver](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.prompt_driver), [template_generator](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.template_generator), and [chunker](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.chunker). + +Use the [summarize_artifacts](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.summarize_artifacts) method to summarize a list of artifacts or [summarize_text](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.summarize_text) to summarize an arbitrary string. + +```python +import io +import requests + +from griptape.drivers import OpenAiChatPromptDriver +from griptape.engines import PromptSummaryEngine +from griptape.loaders import PdfLoader + +response = requests.get("https://arxiv.org/pdf/1706.03762.pdf") +engine = PromptSummaryEngine( + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), +) + +artifacts = PdfLoader().load(response.content) + +text = "\n\n".join([a.value for a in artifacts]) + +engine.summarize_text(text) +``` diff --git a/docs/griptape-framework/index.md b/docs/griptape-framework/index.md new file mode 100644 index 000000000..7c33e0588 --- /dev/null +++ b/docs/griptape-framework/index.md @@ -0,0 +1,208 @@ +The Griptape framework provides developers with the ability to create AI systems that operate across two dimensions: **predictability** and **creativity**. + +For **predictability**, Griptape enforces structures like sequential pipelines, DAG-based workflows, and long-term memory. To facilitate creativity, Griptape safely prompts LLMs with tools and short-term memory connecting them to external APIs and data stores. The framework allows developers to transition between those two dimensions effortlessly based on their use case. + +Griptape not only helps developers harness the potential of LLMs but also enforces trust boundaries, schema validation, and tool activity-level permissions. By doing so, Griptape maximizes LLMs’ reasoning while adhering to strict policies regarding their capabilities. + +Griptape’s design philosophy is based on the following tenets: + +1. **Modularity and composability**: All framework primitives are useful and usable on their own in addition to being easy to plug into each other. +2. **Technology-agnostic**: Griptape is designed to work with any capable LLM, data store, and backend through the abstraction of drivers. +3. **Keep data off prompt by default**: When working with data through loaders and tools, Griptape aims to keep it off prompt by default, making it easy to work with big data securely and with low latency. +4. **Minimal prompt engineering**: It’s much easier to reason about code written in Python, not natural languages. Griptape aims to default to Python in most cases unless absolutely necessary. + +## Quick Start + +### OpenAI API Key +First, configure an OpenAI client by [getting an API key](https://platform.openai.com/account/api-keys) and adding it to your environment as `OPENAI_API_KEY`. +By default, Griptape uses [OpenAI Completions API](https://platform.openai.com/docs/guides/completion) to execute LLM prompts, but other LLMs can be configured with the use of [Prompt Drivers](./drivers/prompt-drivers.md). + +### Using pip + +Install **griptape**: + +``` +pip install griptape[all] -U +``` + +### Using Poetry + +To get started with Griptape using Poetry first create a new poetry project from the terminal: + +``` +poetry new griptape-quickstart +``` + +Change your working directory to the new `griptape-quickstart` directory created by Poetry and add the the `griptape` dependency. + +``` +poetry add griptape[all] +``` + +### Extras + +The `[all]` [extra](https://peps.python.org/pep-0508/#extras) ensures that you have access to the entire range of functionalities that Griptape offers. +This comprehensive installation is recommended for newcomers to get the complete Griptape experience. + +However, if you wish to optimize the installation size or only require specific functionalities, you have two main options: + +1. Core Dependencies: These are the foundational dependencies that enable Griptape to function with most of its default settings. +2. Extras: These are additional, vendor-specific drivers integrated within the Griptape framework. If a particular Driver mandates an extra, it will be explicitly highlighted in the documentation. + +To install just the core dependencies: +``` +poetry add griptape +``` + +To install specific extras (e.g., drivers for [AnthropicPromptDriver](./drivers/prompt-drivers.md#anthropic) and [PineconeVectorStoreDriver](./drivers/vector-store-drivers.md#pinecone)): +``` +poetry add griptape[drivers-prompt-anthropic,drivers-vector-pinecone] +``` + +For a comprehensive list of extras, please refer to the `[tool.poetry.extras]` section of Griptape's [pyproject.toml](https://github.com/griptape-ai/griptape/blob/main/pyproject.toml). + +## Build a Simple Agent +With Griptape, you can create *structures*, such as [Agents](./structures/agents.md), [Pipelines](./structures/pipelines.md), and [Workflows](./structures/workflows.md), that are composed of different types of tasks. First, let's build a simple Agent that we can interact with through a chat based interface. + +```python +from griptape.structures import Agent +from griptape.utils import Chat + +agent = Agent() +Chat(agent).start() +``` +Run this script in your IDE and you'll be presented with a `Q:` prompt where you can interact with your model. +``` +Q: Write me a haiku about griptape +processing... +[09/08/23 09:52:45] INFO PromptTask d4302227570e4a978ed79e7e0444337b + Input: Write me a haiku about griptape +[09/08/23 09:52:48] INFO PromptTask d4302227570e4a978ed79e7e0444337b + Output: Griptape rough and true, + Skateboard's trusty, silent guide, + In each ride, we're glued. +A: Griptape rough and true, +Skateboard's trusty, silent guide, +In each ride, we're glued. +Q: +``` +If you want to skip the chat interface and load an initial prompt, you can do so using the `.run()` method: + +```python +from griptape.structures import Agent +from griptape.utils import Chat + +agent = Agent() +agent.run("write me a haiku about griptape") +``` +Agents on their own are fun, but let's add some capabilities to them using Griptape Tools. +### Build a Simple Agent with Tools + +```python +from griptape.structures import Agent +from griptape.tools import Calculator + +calculator = Calculator(off_prompt=False) + +agent = Agent( + tools=[calculator] +) + +agent.run( + "what is 7^12" +) +``` +Here is the chain of thought from the Agent. Notice where it realizes it can use the tool you just injected to do the calculation.[^1] +[^1]: In some cases a model might be capable of basic arithmetic. For example, gpt-3.5 returns the correct numeric answer but in an odd format. + +``` +[09/08/23 09:53:42] INFO ToolkitTask c87320c5ab1b4988acf25c107b46dffa + Input: what is 7^12 +[09/08/23 09:53:49] INFO Subtask f3f41104a2234a69832c7eacb64e7324 + Thought: The user is asking for the value of 7 raised to the power of 12. I can use the Calculator tool to + perform this calculation. + + Action: {"name": "Calculator", "path": "calculate", "input": {"values": {"expression": + "7**12"}}} + INFO Subtask f3f41104a2234a69832c7eacb64e7324 + Response: 13841287201 +[09/08/23 09:53:51] INFO ToolkitTask c87320c5ab1b4988acf25c107b46dffa + Output: The value of 7 raised to the power of 12 is 13841287201. +``` + +## Build a Simple Pipeline + +Agents are great for getting started, but they are intentionally limited to a single task. Pipelines, however, allow us to define any number of tasks to run in sequence. Let's define a simple two-task Pipeline that uses tools and memory: + +```python +from griptape.memory.structure import ConversationMemory +from griptape.structures import Pipeline +from griptape.tasks import ToolkitTask, PromptTask +from griptape.tools import WebScraper, FileManager, TaskMemoryClient + + +# Pipelines represent sequences of tasks. +pipeline = Pipeline( + conversation_memory=ConversationMemory() +) + +pipeline.add_tasks( + # Load up the first argument from `pipeline.run`. + ToolkitTask( + "{{ args[0] }}", + # Add tools for web scraping, and file management + tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=False)] + ), + # Augment `input` from the previous task. + PromptTask( + "Say the following in spanish: {{ parent_output }}" + ) +) + +pipeline.run( + "Load https://www.griptape.ai, summarize it, and store it in griptape.txt" +) +``` + +``` +[09/08/23 10:02:34] INFO ToolkitTask 3c1d2f4a49384873820a9a8cd8acc983 + Input: Load https://www.griptape.ai, summarize it, and store it in griptape.txt +[09/08/23 10:02:44] INFO Subtask 42fd56ba100e45688401c5ce32b79a33 + Thought: To complete this task, I need to first load the webpage using the WebScraper tool's get_content + activity. Then, I will summarize the content using the TaskMemory tool's summarize activity. Finally, I will + store the summarized content in a file named griptape.txt using the FileManager tool's save_file_to_disk + activity. + + Action: {"name": "WebScraper", "path": "get_content", "input": {"values": {"url": + "https://www.griptape.ai"}}} +[09/08/23 10:02:45] INFO Subtask 42fd56ba100e45688401c5ce32b79a33 + Response: Output of "WebScraper.get_content" was stored in memory with memory_name "TaskMemory" and + artifact_namespace "39ca67bbe26b4e1584193b87ed82170d" +[09/08/23 10:02:53] INFO Subtask 8023e3d257274df29065b22e736faca8 + Thought: Now that the webpage content is stored in memory, I can use the TaskMemory tool's summarize activity + to summarize the content. + Action: {"name": "TaskMemoryClient", "path": "summarize", "input": {"values": {"memory_name": "TaskMemory", "artifact_namespace": "39ca67bbe26b4e1584193b87ed82170d"}}} +[09/08/23 10:02:57] INFO Subtask 8023e3d257274df29065b22e736faca8 + Response: Griptape is an open source framework that allows developers to build and deploy AI applications + using large language models (LLMs). It provides the ability to create conversational and event-driven apps that + can securely access and manipulate data. The framework enforces structures for predictability and creativity, + allowing developers to easily transition between the two. Griptape Cloud is a managed platform for deploying and + managing AI apps. +[09/08/23 10:03:06] INFO Subtask 7baae700239943c18b5b6b21873f0e13 + Thought: Now that I have the summarized content, I can store it in a file named griptape.txt using the + FileManager tool's save_file_to_disk activity. + Action: {"name": "FileManager", "path": "save_file_to_disk", "input": {"values": + {"memory_name": "TaskMemory", "artifact_namespace": "39ca67bbe26b4e1584193b87ed82170d", "path": + "griptape.txt"}}} + INFO Subtask 7baae700239943c18b5b6b21873f0e13 + Response: saved successfully +[09/08/23 10:03:14] INFO ToolkitTask 3c1d2f4a49384873820a9a8cd8acc983 + Output: The summarized content of the webpage https://www.griptape.ai has been successfully stored in the file + named griptape.txt. + INFO PromptTask 8635925ff23b46f28a740105bd11ca8f + Input: Say the following in spanish: The summarized content of the webpage https://www.griptape.ai has been + successfully stored in the file named griptape.txt. +[09/08/23 10:03:18] INFO PromptTask 8635925ff23b46f28a740105bd11ca8f + Output: El contenido resumido de la página web https://www.griptape.ai se ha almacenado con éxito en el archivo + llamado griptape.txt. +``` diff --git a/docs/griptape-framework/misc/events.md b/docs/griptape-framework/misc/events.md new file mode 100644 index 000000000..bd43f2404 --- /dev/null +++ b/docs/griptape-framework/misc/events.md @@ -0,0 +1,271 @@ +## Overview + +You can use [EventListener](../../reference/griptape/events/event_listener.md)s to listen for events during a Structure's execution. + +## Specific Event Types + +You can listen to specific event types: + +```python +from griptape.structures import Agent +from griptape.events import ( + BaseEvent, + StartTaskEvent, + FinishTaskEvent, + StartActionsSubtaskEvent, + FinishActionsSubtaskEvent, + StartPromptEvent, + FinishPromptEvent, + EventListener, +) +from griptape.drivers import LocalEventListenerDriver + + +def handler(event: BaseEvent): + print(event.__class__) + + +agent = Agent( + event_listeners=[ + EventListener( + event_types=[ + StartTaskEvent, + FinishTaskEvent, + StartActionsSubtaskEvent, + FinishActionsSubtaskEvent, + StartPromptEvent, + FinishPromptEvent, + ], + driver=LocalEventListenerDriver(handler=handler), + ) + ] +) + +agent.run("tell me about griptape") +``` +``` + +[09/08/23 10:51:16] INFO PromptTask a20c236d1d86480fb14ae976e6cf8983 + Input: tell me about griptape + + +[09/08/23 10:51:27] INFO PromptTask a20c236d1d86480fb14ae976e6cf8983 + Output: Griptape is a gritty, sandpaper-like material that is applied to the top of a skateboard deck. It + provides traction and grip, allowing skateboarders to keep their feet firmly on the board and perform tricks more + easily. Griptape comes in different colors and designs, but the most common type is black. It's adhesive on one + side so it can stick to the skateboard. Over time, griptape can wear down and need to be replaced to maintain + optimal performance. It's an essential component for skateboarding and other similar sports. + +``` + +## All Event Types + +Or listen to all events: + +```python +from griptape.structures import Agent +from griptape.events import BaseEvent, EventListener +from griptape.drivers import LocalEventListenerDriver + + +def handler1(event: BaseEvent): + print("Handler 1", event.__class__) + + +def handler2(event: BaseEvent): + print("Handler 2", event.__class__) + + +agent = Agent( + event_listeners=[ + EventListener(driver=LocalEventListenerDriver(handler=handler1)), + EventListener(driver=LocalEventListenerDriver(handler=handler1)), + ] +) + +agent.run("tell me about griptape") +``` + +``` +Handler 1 +Handler 2 +Handler 1 +Handler 2 +[10/26/23 11:49:29] INFO PromptTask 20e3ef1f8856453ebabc84863ac36784 + Input: tell me about griptape +Handler 1 +Handler 2 +Handler 1 +Handler 2 +[10/26/23 11:49:55] INFO PromptTask 20e3ef1f8856453ebabc84863ac36784 + Output: Griptape is a gritty, sandpaper-like material that is applied to the top of + a skateboard, longboard, or scooter deck to provide traction between the rider's + feet and the deck. It is an essential component for performing tricks and + maintaining control of the board or scooter. + + Griptape is typically black, but it comes in a variety of colors and designs. It is + made by embedding an abrasive material (similar to sand) into a tough, + weather-resistant adhesive. The adhesive side is then applied to the deck, while + the abrasive side faces up to provide grip. + + The grip provided by the griptape allows riders to keep their footing on the board, + especially during tricks where the board is flipped or spun. It also helps riders + control the board better during downhill rides or sharp turns. + + Over time, griptape can wear down and lose its effectiveness, at which point it can + be removed and replaced. It's an essential part of skateboarding equipment and + plays a significant role in the sport's safety and performance. +Handler 1 +Handler 2 +Handler 1 +Handler 2 +``` + +## Streaming + + +You can use the [CompletionChunkEvent](../../reference/griptape/events/completion_chunk_event.md) to stream the completion results from Prompt Drivers. + +```python +from griptape.events import CompletionChunkEvent, EventListener +from griptape.tasks import ToolkitTask +from griptape.structures import Pipeline +from griptape.tools import WebScraper, TaskMemoryClient +from griptape.drivers import LocalEventListenerDriver + + +pipeline = Pipeline( + event_listeners=[ + EventListener( + driver=LocalEventListenerDriver(handler=lambda e: print(e.token, end="", flush=True)), + event_types=[CompletionChunkEvent], + ) + ] +) + +pipeline.add_tasks( + ToolkitTask( + "Based on https://griptape.ai, tell me what griptape is.", + tools=[WebScraper(), TaskMemoryClient(off_prompt=False)], + ) +) + +pipeline.run() +``` + +You can also use the [Stream](../../reference/griptape/utils/stream.md) utility to automatically wrap +[CompletionChunkEvent](../../reference/griptape/events/completion_chunk_event.md)s in a Python iterator. + +```python +from griptape.utils import Stream +from griptape.tasks import ToolkitTask +from griptape.structures import Pipeline +from griptape.tools import WebScraper + + +pipeline = Pipeline() +pipeline.config.global_drivers.prompt_driver.stream = True +pipeline.add_tasks(ToolkitTask("Based on https://griptape.ai, tell me what griptape is.", tools=[WebScraper()])) + +for artifact in Stream(pipeline).run(): + print(artifact.value, end="", flush=True), +``` + + +## Counting Tokens + +To count tokens, you can use Event Listeners and the [TokenCounter](../../reference/griptape/utils/token_counter.md) util: + +```python +from griptape import utils +from griptape.events import BaseEvent, StartPromptEvent, FinishPromptEvent, EventListener +from griptape.structures import Agent +from griptape.drivers import LocalEventListenerDriver + + +token_counter = utils.TokenCounter() + + +def count_tokens(e: BaseEvent): + if isinstance(e, StartPromptEvent) or isinstance(e, FinishPromptEvent): + token_counter.add_tokens(e.token_count) + + +agent = Agent( + event_listeners=[ + EventListener( + driver=LocalEventListenerDriver(handler=lambda e: count_tokens(e)), + event_types=[StartPromptEvent, FinishPromptEvent], + ) + ] +) + +agent.run("tell me about large language models") + +print(f"total tokens: {token_counter.tokens}") +``` + +``` +[09/25/23 16:32:41] INFO PromptTask c93569eb1d264675b52bef184b269621 + Input: tell me about large language models +[09/25/23 16:33:01] INFO PromptTask c93569eb1d264675b52bef184b269621 + Output: Large language models are a type of artificial intelligence model that are trained on + a vast amount of text data. They are designed to generate human-like text based on the input + they are given. These models can answer questions, write essays, summarize texts, translate + languages, and even generate creative content like poetry or stories. + + One of the most well-known large language models is GPT-3, developed by OpenAI. It has 175 + billion machine learning parameters and was trained on hundreds of gigabytes of text. + + These models work by predicting the probability of a word given the previous words used in + the text. They don't understand text in the way humans do, but they can generate coherent and + contextually relevant sentences by learning patterns in the data they were trained on. + + However, they also have limitations. For instance, they can sometimes generate incorrect or + nonsensical responses. They can also be sensitive to slight changes in input phrasing, and + they don't have the ability to fact-check information or access real-time data, so they can't + provide up-to-date information or verify the truthfulness of their outputs. They also don't + have a sense of ethics or morality, so they rely on guidelines and safety measures put in + place by their developers. +total tokens: 273 +``` + + +## Inspecting Payloads + +You can use the [StartPromptEvent](../../reference/griptape/events/start_prompt_event.md) to inspect the Prompt Stack and final prompt string before it is sent to the LLM. + +```python +from griptape.structures import Agent +from griptape.events import BaseEvent, StartPromptEvent, EventListener +from griptape.drivers import LocalEventListenerDriver + + +def handler(event: BaseEvent): + if isinstance(event, StartPromptEvent): + print("Prompt Stack Inputs:") + for input in event.prompt_stack.inputs: + print(f"{input.role}: {input.content}") + print("Final Prompt String:") + print(event.prompt) + + +agent = Agent( + event_listeners=[EventListener(driver=LocalEventListenerDriver(handler=handler), event_types=[StartPromptEvent])] +) + +agent.run("Write me a poem.") +``` +``` +... +Prompt Stack Inputs: +system: +user: Write me a poem. +Final Prompt String: + + +User: Write me a poem. + +Assistant: +... +``` diff --git a/docs/griptape-framework/misc/tokenizers.md b/docs/griptape-framework/misc/tokenizers.md new file mode 100644 index 000000000..b523d04e4 --- /dev/null +++ b/docs/griptape-framework/misc/tokenizers.md @@ -0,0 +1,143 @@ +## Overview + +Tokenizers are used throughout Griptape to calculate the number of [tokens](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/tokens) in a piece of text. +They are particulary useful for ensuring that the LLM token limits are not exceeded. + +Tokenizers are a low level abstraction that you will rarely interact with directly. + +## Tokenizers + +### OpenAI + +```python +from griptape.tokenizers import OpenAiTokenizer + + +tokenizer = OpenAiTokenizer(model="gpt-4") + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +### Cohere +```python +import os +from cohere import Client +from griptape.tokenizers import CohereTokenizer + + +tokenizer = CohereTokenizer( + model="command", client=Client(os.environ["COHERE_API_KEY"]) +) + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +### Anthropic + +```python +from griptape.tokenizers import AnthropicTokenizer + + +tokenizer = AnthropicTokenizer(model="claude-3-opus-20240229") + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +### Google + +```python +import os +from griptape.tokenizers import GoogleTokenizer + +tokenizer = GoogleTokenizer(model="gemini-pro", api_key=os.environ["GOOGLE_API_KEY"]) + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +### Hugging Face +```python +from transformers import AutoTokenizer +from griptape.tokenizers import HuggingFaceTokenizer + + +tokenizer = HuggingFaceTokenizer( + max_output_tokens=512, + tokenizer=AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2") +) + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +### Bedrock + +#### Anthropic Claude +```python +from griptape.tokenizers import BedrockClaudeTokenizer + + +tokenizer = BedrockClaudeTokenizer(model="anthropic.claude-3-sonnet-20240229-v1:0") + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +#### Amazon Titan +```python +from griptape.tokenizers import BedrockTitanTokenizer + + +tokenizer = BedrockTitanTokenizer(model="amazon.titan-text-express-v1") + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +#### Meta Llama 2 +```python +from griptape.tokenizers import BedrockLlamaTokenizer + + +tokenizer = BedrockLlamaTokenizer(model="meta.llama2-13b-chat-v1") + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + +#### Ai21 Jurassic +```python +from griptape.tokenizers import BedrockJurassicTokenizer + + +tokenizer = BedrockJurassicTokenizer(model="ai21.j2-ultra-v1") + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` + + +### Simple +Not all LLM providers have a public tokenizer API. In this case, you can use the `SimpleTokenizer` to count tokens based on a simple heuristic. + +```python +from griptape.tokenizers import SimpleTokenizer + +tokenizer = SimpleTokenizer(max_input_tokens=1024, max_output_tokens=1024, characters_per_token=6) + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` diff --git a/docs/griptape-framework/structures/agents.md b/docs/griptape-framework/structures/agents.md new file mode 100644 index 000000000..8737d2a59 --- /dev/null +++ b/docs/griptape-framework/structures/agents.md @@ -0,0 +1,79 @@ +## Overview + +An [Agent](../../reference/griptape/structures/agent.md) is the quickest way to get started with Griptape. +Agents take in [tools](../../reference/griptape/structures/agent.md#griptape.structures.agent.Agent.tools) and [input_template](../../reference/griptape/structures/agent.md#griptape.structures.agent.Agent.input_template) +directly, which the agent uses to dynamically determine whether to use a [Prompt Task](./tasks.md#prompt-task) or [Toolkit Task](./tasks.md#toolkit-task). + +If [tools](../../reference/griptape/structures/agent.md#griptape.structures.agent.Agent.tools) are passed provided to the Agent, a [Toolkit Task](./tasks.md#toolkit-task) will be used. If no [tools](../../reference/griptape/structures/agent.md#griptape.structures.agent.Agent.tools) +are provided, a [Prompt Task](./tasks.md#prompt-task) will be used. + +## Toolkit Task Agent + +```python +from griptape.tools import Calculator +from griptape.structures import Agent + + +agent = Agent( + input_template="Calculate the following: {{ args[0] }}", + tools=[Calculator()] +) + +agent.run("what's 123^312?") +``` + +``` +[09/08/23 10:11:31] INFO ToolkitTask 319f53af2e564c15a3b97992fc039ec9 + Input: Calculate the following: what's 123^312? +[09/08/23 10:11:55] INFO Subtask cbd5bb8684ad4fc59958201efbf14743 + Thought: The user wants to calculate the value of 123 raised to the power of 312. I can use the Calculator tool + to perform this calculation. + + Action: {"name": "Calculator", "path": "calculate", "input": {"values": {"expression": + "123**312"}}} + INFO Subtask cbd5bb8684ad4fc59958201efbf14743 + Response: + 11230388208945295722090491952733133124202871121067044284403441616854053130045246777417573635449877716182202751456 + 62903768337745814236262209544548389555407097435988334710646912635818793342584092805141253230302226219003560706069 + 42457739968799225811781682901969575983855664495472037997890318771511185547708335412624757899597237206373758262442 + 72269858013479598852506666010704868797813623903160430655651532132073996589276408598241791795573009265505912300559 + 47848517605515539611362917584666826953065776743002119105282582194109888263281423789852046556346579319777145449509 + 5671672325351081760983520684046903739998382099007883142337182654942065184263509761170721 +[09/08/23 10:12:22] INFO ToolkitTask 319f53af2e564c15a3b97992fc039ec9 + Output: The result of 123 raised to the power of 312 is + 11230388208945295722090491952733133124202871121067044284403441616854053130045246777417573635449877716182202751456 + 62903768337745814236262209544548389555407097435988334710646912635818793342584092805141253230302226219003560706069 + 42457739968799225811781682901969575983855664495472037997890318771511185547708335412624757899597237206373758262442 + 72269858013479598852506666010704868797813623903160430655651532132073996589276408598241791795573009265505912300559 + 47848517605515539611362917584666826953065776743002119105282582194109888263281423789852046556346579319777145449509 + 5671672325351081760983520684046903739998382099007883142337182654942065184263509761170721. +``` + +## Prompt Task Agent + +```python +from griptape.structures import Agent +from griptape.tasks import PromptTask + + +agent = Agent() +agent.add_task( + PromptTask( + "Write me a {{ creative_medium }} about {{ args[0] }} and {{ args[1] }}", + context={ + 'creative_medium': 'haiku' + } + ) +) + +agent.run("Skateboards", "Programming") +``` + +``` +[09/08/23 10:10:24] INFO PromptTask e70fb08090b24b91a9307fa83479e851 + Input: Write me a haiku about Skateboards and Programming +[09/08/23 10:10:28] INFO PromptTask e70fb08090b24b91a9307fa83479e851 + Output: Code on wheels in flight, + Skateboards meet algorithms bright, + In binary, we ignite. +``` diff --git a/docs/griptape-framework/structures/config.md b/docs/griptape-framework/structures/config.md new file mode 100644 index 000000000..c392200f9 --- /dev/null +++ b/docs/griptape-framework/structures/config.md @@ -0,0 +1,147 @@ +## Overview + +The [StructureConfig](../../reference/griptape/config/structure_config.md) class allows for the customization of Structures within Griptape, enabling specific settings such as Drivers to be defined for Tasks. + +### Premade Configs + +Griptape provides predefined [StructureConfig](../../reference/griptape/config/structure_config.md)'s for widely used services that provide APIs for most Driver types Griptape offers. + +#### OpenAI + +The [OpenAI Structure Config](../../reference/griptape/config/openai_structure_config.md) provides default Drivers for OpenAI's APIs. This is the default config for all Structures. + + +```python +from griptape.structures import Agent +from griptape.config import OpenAiStructureConfig + +agent = Agent( + config=OpenAiStructureConfig() +) + +agent = Agent() # This is equivalent to the above +``` + +#### Amazon Bedrock +The [Amazon Bedrock Structure Config](../../reference/griptape/config/amazon_bedrock_structure_config.md) provides default Drivers for Amazon Bedrock's APIs. + +```python +from griptape.structures import Agent +from griptape.config import AmazonBedrockStructureConfig + +agent = Agent( + config=AmazonBedrockStructureConfig() +) +``` + +#### Google +The [Google Structure Config](../../reference/griptape/config/google_structure_config.md) provides default Drivers for Google's Gemini APIs. + +```python +from griptape.structures import Agent +from griptape.config import GoogleStructureConfig + +agent = Agent( + config=GoogleStructureConfig() +) +``` + +#### Anthropic + +The [Anthropic Structure Config](../../reference/griptape/config/anthropic_structure_config.md) provides default Drivers for Anthropic's APIs. + +!!! info + Anthropic does not provide an embeddings API which means you will need to use another service for embeddings. + The `AnthropicStructureConfig` defaults to using `VoyageAiEmbeddingDriver` which integrates with [VoyageAI](https://www.voyageai.com/), the service used in Anthropic's [embeddings documentation](https://docs.anthropic.com/claude/docs/embeddings). + To override the default embedding driver, see: [Override Default Structure Embedding Driver](../drivers/embedding-drivers.md#override-default-structure-embedding-driver). + + +```python +from griptape.structures import Agent +from griptape.config import AnthropicStructureConfig + +agent = Agent( + config=AnthropicStructureConfig() +) +``` + +### Custom Configs + +You can create your own [StructureConfig](../../reference/griptape/config/structure_config.md) by overriding the Drivers in [default_config](../../reference/griptape/config/structure_config.md#griptape.config.structure_config.StructureConfig.default_config). +The [StructureConfig](../../reference/griptape/config/structure_config.md) class includes "Dummy" Drivers for all types, which throw a [DummyException](../../reference/griptape/exceptions/dummy_exception.md) if invoked without being overridden. +This approach ensures that you are informed through clear error messages if you attempt to use Structures without proper Driver configurations. + +```python +import os +from griptape.structures import Agent +from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.drivers import AnthropicPromptDriver + +agent = Agent( + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=AnthropicPromptDriver( + model="claude-3-sonnet-20240229", + api_key=os.environ["ANTHROPIC_API_KEY"], + ) + ) + ), +) +``` + +### Task Memory + +Griptape allows for detailed control over [Task Memory](./task-memory.md) settings, permitting overrides on a per Engine basis, beyond the global Drivers configuration. + +```python +from griptape.structures import Agent +from griptape.config import StructureConfig, StructureTaskMemoryConfig, StructureTaskMemoryQueryEngineConfig +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver + + +agent = Agent( + config=StructureConfig( + task_memory=StructureTaskMemoryConfig( + query_engine=StructureTaskMemoryQueryEngineConfig( + vector_store_driver=LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver(), + ) + ) + ) + ) +) +``` + +### Loading/Saving Configs + +Configuration classes in Griptape offer utility methods for loading, saving, and merging configurations, streamlining the management of complex setups. + +```python +from griptape.structures import Agent +from griptape.config import AmazonBedrockStructureConfig +from griptape.drivers import AmazonBedrockCohereEmbeddingDriver + +custom_config = AmazonBedrockStructureConfig() +custom_config.global_drivers.embedding_driver = AmazonBedrockCohereEmbeddingDriver() +custom_config.merge_config( + { + "task_memory": { + "summary_engine": { + "prompt_driver": { + "model": "amazon.titan-text-express-v1", + "prompt_model_driver": { + "type": "BedrockTitanPromptModelDriver", + }, + } + } + } + } +) +serialized_config = custom_config.to_json() +deserialized_config = AmazonBedrockStructureConfig.from_json(serialized_config) + +agent = Agent( + config=deserialized_config, +) +``` + diff --git a/docs/griptape-framework/structures/conversation-memory.md b/docs/griptape-framework/structures/conversation-memory.md new file mode 100644 index 000000000..0fdcf1867 --- /dev/null +++ b/docs/griptape-framework/structures/conversation-memory.md @@ -0,0 +1,161 @@ +## Overview + +You can use Conversation Memory to give Griptape Structures the ability to keep track of the conversation across runs. All structures are created with [ConversationMemory](../../reference/griptape/memory/structure/conversation_memory.md) by default. + +### Example + +```python +from griptape.structures import Agent +from griptape.memory.structure import ConversationMemory + +agent = Agent() + +agent.run("My favorite animal is a Liger.") +agent.run("What is my favorite animal?") +``` + +``` +[09/19/23 14:21:07] INFO PromptTask 3e64ca5d5f634a11957cbf46adce251a + Input: My favorite animal is a Liger. +[09/19/23 14:21:13] INFO PromptTask 3e64ca5d5f634a11957cbf46adce251a + Output: That's fascinating! Ligers, a hybrid offspring of a male lion and a female tiger, are indeed unique and + interesting animals. They are known to be the largest of all big cats. Do you have a particular reason why you + like them so much? + INFO PromptTask 3e64ca5d5f634a11957cbf46adce251a + Input: What is my favorite animal? +[09/19/23 14:21:15] INFO PromptTask 3e64ca5d5f634a11957cbf46adce251a + Output: Your favorite animal is a Liger, as you previously mentioned. +``` + +You can disable conversation memory in any structure by setting it to `None`: + +```python +from griptape.structures import Agent +from griptape.memory.structure import ConversationMemory + +Agent(conversation_memory=None) +``` + +## Types of Memory + +Griptape provides several types of Conversation Memory to fit various use-cases. + +### Conversation Memory + +[ConversationMemory](../../reference/griptape/memory/structure/conversation_memory.md) will keep track of the full task input and output for all runs. + +```python +from griptape.structures import Agent +from griptape.memory.structure import ConversationMemory + +agent = Agent( + conversation_memory=ConversationMemory() +) + +agent.run("Hello!") + +print(agent.conversation_memory) +``` + +You can set the [max_runs](../../reference/griptape/memory/structure/conversation_memory.md#griptape.memory.structure.conversation_memory.ConversationMemory.max_runs) parameter to limit how many runs are kept in memory. + +```python +from griptape.structures import Agent +from griptape.memory.structure import ConversationMemory + +agent = Agent( + conversation_memory=ConversationMemory(max_runs=2) +) + +agent.run("Run 1") +agent.run("Run 2") +agent.run("Run 3") +agent.run("Run 4") +agent.run("Run 5") + +print(agent.conversation_memory.runs[0].input == 'run4') +print(agent.conversation_memory.runs[1].input == 'run5') +``` + +### Summary Conversation Memory + +[SummaryConversationMemory](../../reference/griptape/memory/structure/summary_conversation_memory.md) will progressively summarize task input and output of runs. + +You can choose to offset which runs are summarized with the +[offset](../../reference/griptape/memory/structure/summary_conversation_memory.md#griptape.memory.structure.summary_conversation_memory.SummaryConversationMemory.offset) parameter. + +```python +from griptape.structures import Agent +from griptape.memory.structure import SummaryConversationMemory + +agent = Agent( + conversation_memory=SummaryConversationMemory(offset=2) +) + +agent.run("Hello!") + +print(agent.conversation_memory.summary) +``` + +## Conversation Memory Drivers + +You can persist and load memory by using Conversation Memory Drivers. You can build drivers for your own data stores by extending [BaseConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/base_conversation_memory_driver.md). + +```python +from griptape.drivers import LocalConversationMemoryDriver +from griptape.structures import Agent +from griptape.memory.structure import ConversationMemory + +memory_driver = LocalConversationMemoryDriver(file_path="memory.json") + +agent_1 = Agent(conversation_memory=ConversationMemory(driver=memory_driver)) +agent_1.run("Skateboarding is my favorite activity.") + +agent_2 = Agent(conversation_memory=memory_driver.load()) +agent_2.run("What is my favorite activity?") +``` + +### Local Conversation Memory Driver + +The [LocalConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/local_conversation_memory_driver.md) allows you to persist Conversation Memory in a local JSON file. + +```python +from griptape.structures import Agent +from griptape.drivers import LocalConversationMemoryDriver +from griptape.memory.structure import ConversationMemory + +local_driver = LocalConversationMemoryDriver(file_path="memory.json") +agent = Agent(conversation_memory=ConversationMemory(driver=local_driver)) + +agent.run("Surfing is my favorite sport.") +agent.run("What is my favorite sport?") +``` + +### Amazon DynamoDb Conversation Memory Driver + +!!! info + This driver requires the `drivers-memory-conversation-amazon-dynamodb` [extra](../index.md#extras). + +The [AmazonDynamoDbConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.md) allows you to persist Conversation Memory in [Amazon DynamoDb](https://aws.amazon.com/dynamodb/). + +```python +import os +import uuid +from griptape.drivers import AmazonDynamoDbConversationMemoryDriver +from griptape.memory.structure import ConversationMemory +from griptape.structures import Agent + +conversation_id = uuid.uuid4().hex +dynamodb_driver = AmazonDynamoDbConversationMemoryDriver( + table_name=os.environ["DYNAMODB_TABLE_NAME"], + partition_key="id", + value_attribute_key="memory", + partition_key_value=conversation_id, +) + +agent = Agent(conversation_memory=ConversationMemory(driver=dynamodb_driver)) + +agent.run("My name is Jeff.") +agent.run("What is my name?") +``` + diff --git a/docs/griptape-framework/structures/pipelines.md b/docs/griptape-framework/structures/pipelines.md new file mode 100644 index 000000000..dcf549995 --- /dev/null +++ b/docs/griptape-framework/structures/pipelines.md @@ -0,0 +1,47 @@ +## Overview +A [Pipeline](../../reference/griptape/structures/pipeline.md) is very similar to an [Agent](../../reference/griptape/structures/agent.md), but allows for multiple tasks. + +## Context + +Pipelines have access to the following [context](../../reference/griptape/structures/pipeline.md#griptape.structures.pipeline.Pipeline.context) variables in addition to the [base context](./tasks.md#context). + +* `parent_output`: output from the parent. +* `parent`: parent task. +* `child`: child task. + + +## Pipeline + +```python +from griptape.tasks import PromptTask +from griptape.structures import Pipeline + + +pipeline = Pipeline() + +pipeline.add_tasks( + # take the first argument from the pipeline `run` method + PromptTask("{{ args[0] }}"), + # take the output from the previous task and insert it into the prompt + PromptTask("Say the following like a pirate: {{ parent_output }}") +) + +pipeline.run("Write me a haiku about sailing.") +``` + +``` +[09/08/23 10:18:46] INFO PromptTask b2d35331b8e5455abbb9567d10044001 + Input: Write me a haiku about sailing. +[09/08/23 10:18:50] INFO PromptTask b2d35331b8e5455abbb9567d10044001 + Output: Sails catch morning breeze, + Sea whispers secrets to hull, + Horizon awaits. + INFO PromptTask 28e36610063e4d728228a814b48296ef + Input: Say the following like a pirate: Sails catch morning breeze, + Sea whispers secrets to hull, + Horizon awaits. +[09/08/23 10:19:21] INFO PromptTask 28e36610063e4d728228a814b48296ef + Output: Yarr! Th' sails snag th' mornin' zephyr, + Th' sea be whisperin' secrets to th' hull, + Th' horizon be awaitin', matey. +``` diff --git a/docs/griptape-framework/structures/rulesets.md b/docs/griptape-framework/structures/rulesets.md new file mode 100644 index 000000000..d97ea65cb --- /dev/null +++ b/docs/griptape-framework/structures/rulesets.md @@ -0,0 +1,185 @@ +## Overview + +A [Ruleset](../../reference/griptape/rules/ruleset.md) can be used to define rules for [Structures](../structures/agents.md) and [Tasks](../structures/tasks.md). +Rulesets can be used to shape personality, format output, restrict topics, and more. + +## Structure + +### Rulesets + +You can define a Ruleset at the Structure level if you need to have certain behaviors across all Tasks. + +```python +from griptape.structures import Pipeline +from griptape.tasks import PromptTask +from griptape.rules import Rule, Ruleset + +pipeline = Pipeline( + rulesets=[ + Ruleset( + name="Employment", + rules=[ + Rule("Behave like a polite customer support agent"), + Rule("Act like you work for company SkaterWorld, Inc."), + Rule("Discuss only topics related to skateboarding"), + Rule("Limit your response to fewer than 5 sentences."), + ], + ), + Ruleset( + name="Background", + rules=[ + Rule("Your name is Todd"), + ], + ), + ] +) + +pipeline.add_tasks( + PromptTask(input="Respond to this user's question: {{ args[0] }}"), + PromptTask( + input="Extract keywords from this response: {{ parent_output }}" + ), +) + +pipeline.run("How do I do a kickflip?") +``` + +``` +[09/29/23 13:44:35] INFO PromptTask 0ecf932b1602493781485de37028f1df + Input: Respond to this user's question: How do I do a kickflip? +[09/29/23 13:44:41] INFO PromptTask 0ecf932b1602493781485de37028f1df + Output: Hello! This is Todd from SkaterWorld, Inc. To do a kickflip, you'll need to place + your back foot on the tail and your front foot across the skateboard. Push down on the tail + while dragging the edge of your front foot up the board. Then, jump and flick your front foot + out to the side. Practice makes perfect, so keep trying! + INFO PromptTask 1f7f5c0af17240dc8cb785d7efbdbfb6 + Input: Extract keywords from this response: Hello! This is Todd from SkaterWorld, Inc. To do + a kickflip, you'll need to place your back foot on the tail and your front foot across the + skateboard. Push down on the tail while dragging the edge of your front foot up the board. + Then, jump and flick your front foot out to the side. Practice makes perfect, so keep trying! +[09/29/23 13:44:46] INFO PromptTask 1f7f5c0af17240dc8cb785d7efbdbfb6 + Output: The keywords from the response are: Todd, SkaterWorld, Inc., kickflip, back foot, + tail, front foot, skateboard, push down, dragging, edge, board, jump, flick, side, practice, + trying. +``` + +### Rules + +You can pass [rules](../../reference/griptape/structures/structure.md#griptape.structures.structure.Structure.rules) directly to the Structure to have a Ruleset created for you. + +```python +from griptape.structures import Pipeline +from griptape.tasks import PromptTask +from griptape.rules import Rule + +pipeline = Pipeline( + rules=[ + Rule("Respond only using emojis"), + ], +) + +pipeline.add_tasks( + PromptTask("Respond to this question from the user: '{{ args[0] }}'"), + PromptTask( + "How would you rate your response (1-5)? 1 being bad, 5 being good. Response: '{{parent_output}}'" + ), +), + +pipeline.run("How do I bake a cake?") +``` +``` +[09/29/23 13:31:41] INFO PromptTask 51c0030b7a854ae5a9bef4595014915c + Input: Respond to this question from the user: 'How do I bake a cake?' +[09/29/23 13:31:45] INFO PromptTask 51c0030b7a854ae5a9bef4595014915c + Output: 📖🥣🥚🥛🍚🧈🍰🔥⏲️👩‍🍳🎂 + INFO PromptTask 9ea16d8e79d84cbab9823e234b51f013 + Input: How would you rate your response (1-5)? 1 being bad, 5 being good. Response: + '📖🥣🥚🥛🍚🧈🍰🔥⏲️👩‍🍳🎂' +[09/29/23 13:31:46] INFO PromptTask 9ea16d8e79d84cbab9823e234b51f013 + Output: 👍👍👍👍👍 +``` + +## Task + +### Rulesets + +You can define a Ruleset at the Task level if you need to have different behaviors per Task. + +```python +from griptape.structures import Pipeline +from griptape.tasks import PromptTask +from griptape.rules import Rule, Ruleset + +pipeline = Pipeline() + +pipeline.add_tasks( + PromptTask( + input="Respond to the following prompt: {{ args[0] }}", + rulesets=[ + Ruleset( + name="Emojis", + rules=[ + Rule("Respond using uppercase characters only."), + ], + ) + ] + ), + PromptTask( + input="Determine the sentiment of the following text: {{ parent_output }}", + rulesets=[ + Ruleset( + name="Diacritic", + rules=[ + Rule("Respond using diacritic characters only."), + ], + ) + ], + ), +) + +pipeline.run("I love skateboarding!") +``` + +``` +[09/29/23 13:39:22] INFO PromptTask 0950581dd35e403c9fc51d246861bfc9 + Input: Respond to the following prompt: I love skateboarding! +[09/29/23 13:39:24] INFO PromptTask 0950581dd35e403c9fc51d246861bfc9 + Output: THAT'S AWESOME! 😃 KEEP UP THE GOOD WORK AND ALWAYS STAY SAFE! 🛹👍👏 + INFO PromptTask 325f9b7acaca47a2a097d322288e1bfa + Input: Determine the sentiment of the following text: THAT'S AWESOME! 😃 KEEP UP THE GOOD + WORK AND ALWAYS STAY SAFE! 🛹👍👏 +[09/29/23 13:39:26] INFO PromptTask 325f9b7acaca47a2a097d322288e1bfa + Output: Thê sêntimênt ôf thê têxt is pôsitivê. +``` + +### Rules + +You can pass [rules](../../reference/griptape/tasks/prompt_task.md#griptape.tasks.prompt_task.PromptTask.rules) directly to the Task to have a Ruleset created for you. + +```python +from griptape.structures import Pipeline +from griptape.tasks import PromptTask +from griptape.rules import Rule + +pipeline = Pipeline() + +pipeline.add_tasks( + PromptTask( + rules=[ + Rule("Write your answer in json with a single key 'emoji_response'"), + Rule("Respond only using emojis"), + ], + ), +) + +pipeline.run("How are you?") + +``` +``` +[09/25/23 16:29:05] INFO PromptTask d1cc2c0b780d4b32b6309ceab11173f4 + Input: How are you? +[09/25/23 16:29:07] INFO PromptTask d1cc2c0b780d4b32b6309ceab11173f4 + Output: { + "emoji_response": "😊👍" + } +``` diff --git a/docs/griptape-framework/structures/task-memory.md b/docs/griptape-framework/structures/task-memory.md new file mode 100644 index 000000000..e44625476 --- /dev/null +++ b/docs/griptape-framework/structures/task-memory.md @@ -0,0 +1,89 @@ +## Overview +Task Memory augments activity inputs and outputs with storage capabilities. It's a way to keep any data generated by tools off prompt but still allow LLMs to operate on that data remotely. This is useful in the following scenarios: + +* **Security requirements**: many organizations don't want data to leave their cloud for regulatory and security reasons. +* **Long textual content**: when textual content returned by tools can't fit in the token limit, it's often useful to perform operations on it in a separate process, not in the main LLM. +* **Non-textual content**: tools can generate images, videos, PDFs, and other non-textual content that can be stored in memory and acted upon later by other tools. + +By default, Griptape augments all tool outputs with [TaskMemory](../../reference/griptape/memory/task/task_memory.md) but you can override at the structure, task, or tool activity level. + + +## Task Memory +Here is an example of how memory can be used in unison with multiple tools to store and load content: + +```python +from griptape.artifacts import TextArtifact, BlobArtifact +from griptape.memory.task.storage import TextArtifactStorage, BlobArtifactStorage +from griptape.structures import Agent +from griptape.tools import WebScraper, FileManager, TaskMemoryClient +from griptape.engines import VectorQueryEngine, PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver + +prompt_driver = OpenAiChatPromptDriver(model="gpt-3.5-turbo") + +agent = Agent( + tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=True)] +) + +agent.run( + "Load https://www.griptape.ai, summarize it, " + "and store it in griptape.txt" +) +``` + +``` +[10/20/23 13:31:40] INFO ToolkitTask 82211eeb10374e75ad77135373d816e6 + Input: Load https://www.griptape.ai, summarize it, + and store it in griptape.txt +[10/20/23 13:31:52] INFO Subtask 17b3d35197eb417b834a7db49039ae4f + Thought: The user wants to load the webpage at + https://www.griptape.ai, summarize its content, and + store the summary in a file named griptape.txt. To + achieve this, I need to first use the WebScraper + tool to get the content of the webpage. Then, I + will use the TaskMemoryClient to summarize the + content. Finally, I will use the FileManager tool + to save the summarized content to a file named + griptape.txt. + + Action: {"name": "WebScraper", + "path": "get_content", "input": {"values": + {"url": "https://www.griptape.ai"}}} +[10/20/23 13:31:53] INFO Subtask 17b3d35197eb417b834a7db49039ae4f + Response: Output of "WebScraper.get_content" was + stored in memory with memory_name "TaskMemory" and + artifact_namespace + "82543abe79984d11bb952bd6036a7a01" +[10/20/23 13:32:00] INFO Subtask 58bac35adda94157ac6f9482e7c41c9f + Thought: Now that I have the content of the webpage + stored in memory, I can use the TaskMemoryClient + tool to summarize this content. + Action: {"name": + "TaskMemoryClient", "path": "summarize", + "input": {"values": {"memory_name": "TaskMemory", + "artifact_namespace": + "82543abe79984d11bb952bd6036a7a01"}}} +[10/20/23 13:32:03] INFO Subtask 58bac35adda94157ac6f9482e7c41c9f + Response: Output of + "TaskMemoryClient.summarize" was stored in + memory with memory_name "TaskMemory" and + artifact_namespace + "01b8015f8c5647f09e8d103198404db0" +[10/20/23 13:32:12] INFO Subtask a630f649007b4d7fa0b6cf85be6b2f4f + Thought: Now that I have the summarized content of + the webpage stored in memory, I can use the + FileManager tool to save this content to a file + named griptape.txt. + Action: {"name": "FileManager", + "path": "save_memory_artifacts_to_disk", + "input": {"values": {"dir_name": ".", "file_name": + "griptape.txt", "memory_name": "TaskMemory", + "artifact_namespace": + "01b8015f8c5647f09e8d103198404db0"}}} + INFO Subtask a630f649007b4d7fa0b6cf85be6b2f4f + Response: saved successfully +[10/20/23 13:32:14] INFO ToolkitTask 82211eeb10374e75ad77135373d816e6 + Output: The summarized content of the webpage at + https://www.griptape.ai has been successfully + stored in a file named griptape.txt. +``` diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md new file mode 100644 index 000000000..a7aae8734 --- /dev/null +++ b/docs/griptape-framework/structures/tasks.md @@ -0,0 +1,669 @@ +## Overview + +A [Task](../../reference/griptape/tasks/index.md) is a purpose-built abstraction for the Large Language Model (LLM). Griptape offers various types of Tasks, each suitable for specific use cases. + + +## Context +Tasks that take input have a field [input](../../reference/griptape/tasks/base_text_input_task.md#griptape.tasks.base_text_input_task.BaseTextInputTask.input) which lets you define the Task objective. +Within the [input](../../reference/griptape/tasks/base_text_input_task.md#griptape.tasks.base_text_input_task.BaseTextInputTask.input), you can access the following [context](../../reference/griptape/structures/structure.md#griptape.structures.structure.Structure.context) variables: + +* `args`: an array of arguments passed to the `.run()` method. +* `structure`: the structure that the task belongs to. +* user defined context variables + +Additional [context](../../reference/griptape/structures/structure.md#griptape.structures.structure.Structure.context) variables may be added based on the Structure running the task. +```python +from griptape.structures import Agent +from griptape.tasks import PromptTask + + +agent = Agent() +agent.add_task( + PromptTask( + "Respond to the user's following question '{{ args[0] }}' in the language '{{preferred_language}}' and tone '{{tone}}'.", + context={"preferred_language": "ENGLISH", "tone": "PLAYFUL"}, + ) +) + +agent.run("How do I bake a cake?") +``` + +``` +[09/08/23 11:12:47] INFO PromptTask 0f5a5def49864126834627b6140f3e63 + Input: Respond to the user's following question 'How do I bake a cake?' in the language 'ENGLISH' and tone + 'PLAYFUL'. +[09/08/23 11:13:17] INFO PromptTask 0f5a5def49864126834627b6140f3e63 + Output: Oh, you're in for a treat! Baking a cake is like creating a masterpiece, but way more delicious! Here's a + simple recipe to get you started: + + 1. Preheat your oven to 350°F (175°C). It's like sunbathing, but for your cake! + + 2. Grab a bowl and mix together 2 cups of sugar and 1/2 cup of softened butter. It's like making sweet, buttery + sandcastles! + + 3. Crack in 3 eggs, one at a time, and stir in 2 teaspoons of vanilla extract. It's a pool party in your bowl! + + 4. In a separate bowl, combine 1 1/2 cups of all-purpose flour, 1 3/4 teaspoons of baking powder, and a pinch of + salt. This is the dry gang! + + 5. Gradually mix the dry gang into the buttery pool party. Stir until it's just combined, we don't want to + overwork the partygoers! + + 6. Pour the batter into a greased cake pan. It's like tucking your cake into bed! + + 7. Bake for 30 to 40 minutes, or until a toothpick comes out clean. It's like playing hide and seek with your + cake! + + 8. Let it cool, then frost and decorate as you like. This is where you can let your creativity shine! + + Remember, baking is all about having fun and enjoying the process. So, put on your favorite tunes, roll up your + sleeves, and let's get baking! 🍰🎉 +``` + +## Prompt Task + +For general purpose prompting, use the [PromptTask](../../reference/griptape/tasks/prompt_task.md): + +```python +from griptape.tasks import PromptTask +from griptape.structures import Agent + + +agent = Agent() +agent.add_task( + # take the first argument from the agent `run` method + PromptTask("Respond to the users following request: {{ args[0] }}"), +) + +agent.run("Write me a haiku") +``` + +``` +[10/20/23 15:27:26] INFO PromptTask f5025c6352914e9f80ef730e5269985a + Input: Respond to the users following request: + Write me a haiku +[10/20/23 15:27:28] INFO PromptTask f5025c6352914e9f80ef730e5269985a + Output: Gentle morning dew, + Kisses the waking flowers, + Day begins anew. +``` + +## Toolkit Task + +To use [Griptape Tools](../../griptape-framework/tools/index.md), use a [Toolkit Task](../../reference/griptape/tasks/toolkit_task.md). +This Task takes in one or more Tools which the LLM will decide to use through Chain of Thought (CoT) reasoning. Because this Task uses CoT, it is recommended to only use with very capable models. + +```python +from griptape.tasks import ToolkitTask +from griptape.structures import Agent +from griptape.tools import WebScraper, FileManager, TaskMemoryClient + + +agent = Agent() +agent.add_task( + ToolkitTask( + "Load https://www.griptape.ai, summarize it, and store it in a file called griptape.txt", + tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=False)] + ), +) + +agent.run() +``` + +``` +[09/08/23 11:14:55] INFO ToolkitTask 22af656c6ad643e188fe80f9378dfff9 + Input: Load https://www.griptape.ai, summarize it, and store it in a file called griptape.txt +[09/08/23 11:15:02] INFO Subtask 7a6356470e6a4b08b61edc5591b37f0c + Thought: The first step is to load the webpage using the WebScraper tool's get_content activity. + + Action: {"name": "WebScraper", "path": "get_content", "input": {"values": {"url": + "https://www.griptape.ai"}}} +[09/08/23 11:15:03] INFO Subtask 7a6356470e6a4b08b61edc5591b37f0c + Response: Output of "WebScraper.get_content" was stored in memory with memory_name "TaskMemory" and + artifact_namespace "2b50373849d140f698ba8071066437ee" +[09/08/23 11:15:11] INFO Subtask a22a7e4ebf594b4b895fcbe8a95c1dd3 + Thought: Now that the webpage content is stored in memory, I can use the TaskMemory tool's summarize activity + to summarize it. + Action: {"name": "TaskMemoryClient", "path": "summarize", "input": {"values": {"memory_name": "TaskMemory", "artifact_namespace": "2b50373849d140f698ba8071066437ee"}}} +[09/08/23 11:15:15] INFO Subtask a22a7e4ebf594b4b895fcbe8a95c1dd3 + Response: Griptape is an open source framework that allows developers to build and deploy AI applications + using large language models (LLMs). It provides the ability to create conversational and event-driven apps that + can access and manipulate data securely. Griptape enforces structures like sequential pipelines and DAG-based + workflows for predictability, while also allowing for creativity by safely prompting LLMs with external APIs and + data stores. The framework can be used to create AI systems that operate across both dimensions. Griptape Cloud + is a managed platform for deploying and managing AI apps, and it offers features like scheduling and connecting + to data stores and APIs. +[09/08/23 11:15:27] INFO Subtask 7afb3d44d0114b7f8ef2dac4314a8e90 + Thought: Now that I have the summary, I can use the FileManager tool's save_file_to_disk activity to store the + summary in a file named griptape.txt. + Action: {"name": "FileManager", "path": "save_file_to_disk", "input": {"values": + {"memory_name": "TaskMemory", "artifact_namespace": "2b50373849d140f698ba8071066437ee", "path": + "griptape.txt"}}} + INFO Subtask 7afb3d44d0114b7f8ef2dac4314a8e90 + Response: saved successfully +[09/08/23 11:15:31] INFO ToolkitTask 22af656c6ad643e188fe80f9378dfff9 + Output: The summary of the webpage https://www.griptape.ai has been successfully stored in a file named + griptape.txt. +``` + +## Tool Task + +Another way to use [Griptape Tools](../../griptape-framework/tools/index.md), is with a [Tool Task](../../reference/griptape/tasks/tool_task.md). +This Task takes in a single Tool which the LLM will use without Chain of Thought (CoT) reasoning. Because this Task does not use CoT, it is better suited for less capable models. + +```python +from griptape.structures import Agent +from griptape.tasks import ToolTask +from griptape.tools import Calculator + +# Initialize the agent and add a task +agent = Agent() +agent.add_task(ToolTask(tool=Calculator())) + +# Run the agent with a prompt +agent.run("Give me the answer for 5*4.") +``` + +``` +[10/20/23 14:20:25] INFO ToolTask df1604b417a84ee781dbd1f2b904ed30 + Input: Give me the answer for 5*4. +[10/20/23 14:20:29] INFO Subtask a9a9ad7be2bf465fa82bd350116fabe4 + Action: { + + "name": "Calculator", + "path": "calculate", + "input": { + "values": { + "expression": "5*4" + } + } + } +[10/20/23 14:20:30] INFO Subtask a9a9ad7be2bf465fa82bd350116fabe4 + Response: 20 + INFO ToolTask df1604b417a84ee781dbd1f2b904ed30 + Output: 20 +``` + +## Extraction Task + +To extract information from text, use an [ExtractionTask](../../reference/griptape/tasks/extraction_task.md). +This Task takes an [Extraction Engine](../../griptape-framework/engines/extraction-engines.md), and a set of arguments specific to the Engine. + + +### CSV Extraction + +```python +from griptape.drivers import OpenAiChatPromptDriver +from griptape.tasks import ExtractionTask +from griptape.structures import Agent +from griptape.engines import CsvExtractionEngine + +# Instantiate the CSV extraction engine +csv_extraction_engine = CsvExtractionEngine( + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo") +) + +# Define some unstructured data and columns +csv_data = """ +Alice, 28, lives in New York. +Bob, 35 lives in California. +Charlie is 40 and lives in Texas. +""" + +columns = ["Name", "Age", "Address"] + + +# Create an agent and add the ExtractionTask to it +agent = Agent() +agent.add_task( + ExtractionTask( + extraction_engine=csv_extraction_engine, + args={"column_names": columns}, + ) +) + +# Run the agent +agent.run(csv_data) +``` +``` +[12/19/23 10:33:11] INFO ExtractionTask e87fb457edf8423ab8a78583badd7a11 + Input: + Alice, 28, lives in New York. + Bob, 35 lives in California. + Charlie is 40 and lives in Texas. + +[12/19/23 10:33:13] INFO ExtractionTask e87fb457edf8423ab8a78583badd7a11 + Output: Name,Age,Address + Alice,28,New York + Bob,35,California + Charlie,40,Texas +``` + +### JSON Extraction + +```python +from schema import Schema + +from griptape.drivers import OpenAiChatPromptDriver +from griptape.tasks import ExtractionTask +from griptape.structures import Agent +from griptape.engines import JsonExtractionEngine + +# Instantiate the json extraction engine +json_extraction_engine = JsonExtractionEngine( + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), +) + +# Define some unstructured data and a schema +json_data = """ +Alice (Age 28) lives in New York. +Bob (Age 35) lives in California. +""" +user_schema = Schema( + {"users": [{"name": str, "age": int, "location": str}]} +).json_schema("UserSchema") + +agent = Agent() +agent.add_task( + ExtractionTask( + extraction_engine=json_extraction_engine, + args={"template_schema": user_schema}, + ) +) + +# Run the agent +agent.run(json_data) +``` +``` +[12/19/23 10:37:41] INFO ExtractionTask 3315cc77f94943a2a2dceccfe44f6a67 + Input: + Alice (Age 28) lives in New York. + Bob (Age 35) lives in California. + +[12/19/23 10:37:44] INFO ExtractionTask 3315cc77f94943a2a2dceccfe44f6a67 + Output: {'name': 'Alice', 'age': 28, 'location': 'New York'} + {'name': 'Bob', 'age': 35, 'location': 'California'} +``` + +## Text Summary Task + +To summarize a text, use the [TextSummaryTask](../../reference/griptape/tasks/text_summary_task.md). +This Task takes an [Summarization Engine](../../griptape-framework/engines/summary-engines.md), and a set of arguments to the engine. + +```python +from griptape.structures import Agent +from griptape.tasks import TextSummaryTask + +# Create a new agent +agent = Agent() + +# Add the TextSummaryTask to the agent +agent.add_task(TextSummaryTask()) + + +# Run the agent +agent.run( + "Artificial Intelligence (AI) is a branch of computer science that deals with " + "creating machines capable of thinking and learning. It encompasses various fields " + "such as machine learning, neural networks, and deep learning. AI has the potential " + "to revolutionize many sectors, including healthcare, finance, and transportation. " + "Our life in this modern age depends largely on computers. It is almost impossible " + "to think about life without computers. We need computers in everything that we use " + "in our daily lives. So it becomes very important to make computers intelligent so " + "that our lives become easy. Artificial Intelligence is the theory and development " + "of computers, which imitates the human intelligence and senses, such as visual " + "perception, speech recognition, decision-making, and translation between languages." + " Artificial Intelligence has brought a revolution in the world of technology. " +) +``` + +``` +[10/20/23 15:37:46] INFO TextSummaryTask e870f2a6226f43fcb89f93b1c0c85b10 + Input: Artificial Intelligence (AI) is a branch of + computer science that deals with creating machines + capable of thinking and learning. It encompasses + various fields such as machine learning, neural + networks, and deep learning. AI has the potential + to revolutionize many sectors, including + healthcare, finance, and transportation. Our life + in this modern age depends largely on computers. It + is almost impossible to think about life without + computers. We need computers in everything that we + use in our daily lives. So it becomes very + important to make computers intelligent so that our + lives become easy. Artificial Intelligence is the + theory and development of computers, which imitates + the human intelligence and senses, such as visual + perception, speech recognition, decision-making, + and translation between languages. Artificial + Intelligence has brought a revolution in the world + of technology. +[10/20/23 15:37:49] INFO TextSummaryTask e870f2a6226f43fcb89f93b1c0c85b10 + Output: Artificial Intelligence (AI) is a branch of + computer science that focuses on creating + intelligent machines. It encompasses various fields + such as machine learning and neural networks. AI + has the potential to revolutionize sectors like + healthcare, finance, and transportation. It is + essential to make computers intelligent to simplify + our daily lives. AI imitates human intelligence and + senses, bringing a revolution in technology. +``` + +## Text Query Task + +To query text, use the [TextQueryTask](../../reference/griptape/tasks/text_query_task.md). +This Task takes a [Query Engine](../../griptape-framework/engines/query-engines.md), and a set of arguments specific to the engine. + +```python +from griptape.drivers import OpenAiChatPromptDriver +from griptape.structures import Agent +from griptape.tasks import TextQueryTask +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver +from griptape.engines import VectorQueryEngine +from griptape.artifacts import TextArtifact + +# Initialize Embedding Driver and Vector Store Driver +vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) + +artifact = TextArtifact( + "Griptape builds AI-powered applications that connect securely to your enterprise data and APIs." + "Griptape Agents provide incredible power and flexibility when working with large language models." +) + +# Create a VectorQueryEngine using the LocalVectorStoreDriver +vector_query_engine = VectorQueryEngine( + vector_store_driver=vector_store_driver, + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo") +) +vector_query_engine.upsert_text_artifact(artifact=artifact) + +# Instantiate the agent and add TextQueryTask with the VectorQueryEngine +agent = Agent() +agent.add_task( + TextQueryTask( + "Respond to the users following query: {{ args[0] }}", + query_engine=vector_query_engine, + ) +) + +# Run the agent with a query string +agent.run("Give me information about Griptape") +``` + +``` +[10/20/23 15:32:39] INFO TextQueryTask a1d2eceab9204679b3f701f6ea821606 + Input: Respond to the users following query: Give + me information about Griptape +[10/20/23 15:32:41] INFO TextQueryTask a1d2eceab9204679b3f701f6ea821606 + Output: Griptape builds AI-powered applications + that connect securely to your enterprise data and + APIs. Griptape Agents provide incredible power and + flexibility when working with large language + models. +``` + +## Code Execution Task + +To execute an arbitrary Python function, use the [CodeExecutionTask](../../reference/griptape/tasks/text_query_task.md). +This task takes a python function, and authors can elect to return a custom artifact. + +```python +from griptape.structures import Pipeline +from griptape.tasks import CodeExecutionTask, PromptTask +from griptape.artifacts import BaseArtifact, TextArtifact + + +def character_counter(task: CodeExecutionTask) -> BaseArtifact: + result = len(task.input) + # For functions that don't need to return anything, we recommend returning task.input + return TextArtifact(str(result)) + + +# Instantiate the pipeline +pipeline = Pipeline() + +pipeline.add_tasks( + + # take the first argument from the pipeline `run` method + CodeExecutionTask(run_fn=character_counter), + # # take the output from the previous task and insert it into the prompt + PromptTask("{{args[0]}} using {{ parent_output }} characters") +) + +pipeline.run("Write me a line in a poem") +``` + +``` +[01/09/24 15:23:54] INFO CodeExecutionTask 048b1f548683475187064dde90055f72 + Input: Write me a line in a poem + INFO CodeExecutionTask 048b1f548683475187064dde90055f72 + Output: 25 + INFO PromptTask b6156dc5c0c6404488ab925989e78b01 + Input: Write me a line in a poem using 25 + characters +[01/09/24 15:24:03] INFO PromptTask b6156dc5c0c6404488ab925989e78b01 + Output: "Silent code, loud impact." +``` + +## Image Generation Tasks + +To generate an image, use one of the following [Image Generation Tasks](../../reference/griptape/tasks/index.md). All Image Generation Tasks accept an [Image Generation Engine](../engines/image-generation-engines.md) configured to use an [Image Generation Driver](../drivers/image-generation-drivers.md). + +All successful Image Generation Tasks will always output an [Image Artifact](../data/artifacts.md#imageartifact). Each task can be configured to additionally write the generated image to disk by providing either the `output_file` or `output_dir` field. The `output_file` field supports file names in the current directory (`my_image.png`), relative directory prefixes (`images/my_image.png`), or absolute paths (`/usr/var/my_image.png`). By setting `output_dir`, the task will generate a file name and place the image in the requested directory. + +### Prompt Image Generation Task + +The [Prompt Image Generation Task](../../reference/griptape/tasks/prompt_image_generation_task.md) generates an image from a text prompt. + +```python +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import OpenAiImageGenerationDriver +from griptape.tasks import PromptImageGenerationTask +from griptape.structures import Pipeline + + +# Create a driver configured to use OpenAI's DALL-E 3 model. +driver = OpenAiImageGenerationDriver( + model="dall-e-3", + quality="hd", + style="natural", +) + +# Create an engine configured to use the driver. +engine = PromptImageGenerationEngine( + image_generation_driver=driver, +) + +# Instantiate a pipeline. +pipeline = Pipeline() + +# Add a PromptImageGenerationTask to the pipeline. +pipeline.add_tasks( + PromptImageGenerationTask( + input="{{ args[0] }}", + image_generation_engine=engine, + output_dir="images/", + ) +) + +pipeline.run("An image of a mountain on a summer day") +``` + +### Variation Image Generation Task + +The [Variation Image Generation Task](../../reference/griptape/tasks/variation_image_generation_task.md) generates an image using an input image and a text prompt. The input image is used as a basis for generating a new image as requested by the text prompt. + +```python +from griptape.engines import VariationImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tasks import VariationImageGenerationTask +from griptape.loaders import ImageLoader +from griptape.structures import Pipeline + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = VariationImageGenerationEngine( + image_generation_driver=driver, +) + +# Load input image artifact. +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +# Instatiate a pipeline. +pipeline = Pipeline() + +# Add a VariationImageGenerationTask to the pipeline. +pipeline.add_task( + VariationImageGenerationTask( + input=("{{ args[0] }}", image_artifact), + image_generation_engine=engine, + output_dir="images/", + ) +) + +pipeline.run("An image of a mountain landscape on a snowy winter day") +``` + +### Inpainting Image Generation Task + +The [Inpainting Image Generation Task](../../reference/griptape/tasks/inpainting_image_generation_task.md) generates an image using an input image, a mask image, and a text prompt. The input image will be modified within the bounds of the mask image as requested by the text prompt. + +```python +from griptape.engines import InpaintingImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tasks import InpaintingImageGenerationTask +from griptape.loaders import ImageLoader +from griptape.structures import Pipeline + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = InpaintingImageGenerationEngine( + image_generation_driver=driver, +) + +# Load input image artifacts. +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +with open("tests/resources/mountain-mask.png", "rb") as f: + mask_artifact = ImageLoader().load(f.read()) + +# Instantiate a pipeline. +pipeline = Pipeline() + +# Add an InpaintingImageGenerationTask to the pipeline. +pipeline.add_task( + InpaintingImageGenerationTask( + input=("{{ args[0] }}", image_artifact, mask_artifact), + image_generation_engine=engine, + output_dir="images/" + ) +) + +pipeline.run("An image of a castle built into the side of a mountain") +``` + +### Outpainting Image Generation Task + +The [Outpainting Image Generation Task](../../reference/griptape/tasks/outpainting_image_generation_task.md) generates an image using an input image, a mask image, and a text prompt. The input image will be modified outside the bounds of a mask image as requested by the text prompt. + +```python +from griptape.engines import OutpaintingImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tasks import OutpaintingImageGenerationTask +from griptape.loaders import ImageLoader +from griptape.structures import Pipeline + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = OutpaintingImageGenerationEngine( + image_generation_driver=driver, +) + +# Load input image artifacts. +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +with open("tests/resources/mountain-mask.png", "rb") as f: + mask_artifact = ImageLoader().load(f.read()) + +# Instantiate a pipeline. +pipeline = Pipeline() + +# Add an OutpaintingImageGenerationTask to the pipeline. +pipeline.add_task( + OutpaintingImageGenerationTask( + input=("{{ args[0] }}", image_artifact, mask_artifact), + image_generation_engine=engine, + output_dir="images/", + ) +) + +pipeline.run("An image of a mountain shrouded by clouds") +``` + +## Image Query Task + +The [Image Query Task](../../reference/griptape/tasks/image_query_task.md) executes a natural language query on one or more input images. This Task uses an [Image Query Engine](../engines/image-query-engines.md) configured with an [Image Query Driver](../drivers/image-query-drivers.md) to perform the query. The functionality provided by this Task depend on the capabilities of the model provided by the Driver. + +This Task accepts two inputs: a query (represented by either a string or a [Text Artifact](../data/artifacts.md#textartifact)) and a list of [Image Artifacts](../data/artifacts.md#imageartifact) or a Callable returning these two values. + +```python +from griptape.engines import ImageQueryEngine +from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.tasks import ImageQueryTask +from griptape.loaders import ImageLoader +from griptape.structures import Pipeline + + +# Create a driver configured to use OpenAI's GPT-4 Vision model. +driver = OpenAiVisionImageQueryDriver( + model="gpt-4-vision-preview", + max_tokens=100, +) + +# Create an engine configured to use the driver. +engine = ImageQueryEngine( + image_query_driver=driver, +) + +# Load the input image artifact. +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +# Instantiate a pipeline. +pipeline = Pipeline() + +# Add an ImageQueryTask to the pipeline. +pipeline.add_task( + ImageQueryTask( + input=("{{ args[0] }}", [image_artifact]), + image_query_engine=engine, + ) +) + +pipeline.run("Describe the weather in the image") +``` diff --git a/docs/griptape-framework/structures/workflows.md b/docs/griptape-framework/structures/workflows.md new file mode 100644 index 000000000..3c2bac25a --- /dev/null +++ b/docs/griptape-framework/structures/workflows.md @@ -0,0 +1,149 @@ +## Overview + +A [Workflow](../../reference/griptape/structures/workflow.md) is a non-sequential DAG that can be used for complex concurrent scenarios with tasks having multiple inputs. + + +## Context + +Workflows have access to the following [context](../../reference/griptape/structures/workflow.md#griptape.structures.workflow.Workflow.context) variables in addition to the [base context](./tasks.md#context): + +* `parent_outputs`: outputs into the current task referenceable by parent task IDs. +* `parents`: parent tasks referenceable by IDs. +* `children`: child tasks referenceable by IDs. + +## Workflow +Let's build a simple workflow. Let's say, we want to write a story in a fantasy world with some unique characters. We could setup a workflow that generates a world based on some keywords. Then we pass the world description to any number of child tasks that create characters. Finally, the last task pulls in information from all parent tasks and writes up a short story. + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow + +workflow = Workflow() + +def character_task(task_id, character_name) -> PromptTask: + return PromptTask( + "Based on the following world description create a character named {{ name }}:\n{{ parent_outputs['world'] }}", + context={ + "name": character_name + }, + id=task_id + ) + +world_task = PromptTask( + "Create a fictional world based on the following key words {{ keywords|join(', ') }}", + context={ + "keywords": ["fantasy", "ocean", "tidal lock"] + }, + id="world" +) +workflow.add_task(world_task) + +story_task = PromptTask( + "Based on the following description of the world and characters, write a short story:\n{{ parent_outputs['world'] }}\n{{ parent_outputs['scotty'] }}\n{{ parent_outputs['annie'] }}", + id="story" +) +workflow.add_task(story_task) + +character_task_1 = character_task("scotty", "Scotty") +character_task_2 = character_task("annie", "Annie") + +# Note the preserve_relationship flag. This ensures that world_task remains a parent of +# story_task so its output can be referenced in the story_task prompt. +workflow.insert_tasks(world_task, [character_task_1, character_task_2], story_task, preserve_relationship=True) + +workflow.run() +``` + + +!!! Info + Output edited for brevity +``` +[09/08/23 10:26:21] INFO PromptTask world + Input: Create a fictional world based on the following key words fantasy, ocean, tidal lock +[09/08/23 10:27:11] INFO PromptTask world + Output: Welcome to the world of "Oceanus Fantasia", a realm where fantasy and oceanic wonders intertwine in a + unique celestial phenomenon known as tidal lock. + + Oceanus Fantasia is a vast, water-dominated planet, with its surface covered by a seemingly endless ocean. The + ocean is not just water, but a magical liquid that sparkles with all the colors of the rainbow under the planet's + twin suns. This magical ocean is home to a myriad of fantastical creatures, from the tiny luminescent pixie-fish + to the colossal, wise leviathans that roam the depths. + + ... + + In Oceanus Fantasia, magic and technology coexist. The inhabitants use their understanding of the magical ocean + and its creatures to power their cities, heal their sick, and even control the weather. The ocean's magic is a + part of them, and they are a part of the ocean. + + Welcome to Oceanus Fantasia, where the ocean's tide writes the story of a world in perpetual twilight, a world of + magic, mystery, and endless adventure. + INFO PromptTask scotty + Input: Based on the following world description create a character named Scotty: + Welcome to the world of "Oceanus Fantasia", a realm where fantasy and oceanic wonders intertwine in a unique + celestial phenomenon known as tidal lock. + + ... + + In Oceanus Fantasia, magic and technology coexist. The inhabitants use their understanding of the magical ocean + and its creatures to power their cities, heal their sick, and even control the weather. The ocean's magic is a + part of them, and they are a part of the ocean. + + Welcome to Oceanus Fantasia, where the ocean's tide writes the story of a world in perpetual twilight, a world of + magic, mystery, and endless adventure. + INFO PromptTask annie + Input: Based on the following world description create a character named Annie: + Welcome to the world of "Oceanus Fantasia", a realm where fantasy and oceanic wonders intertwine in a unique + celestial phenomenon known as tidal lock. + + ... + + Welcome to Oceanus Fantasia, where the ocean's tide writes the story of a world in perpetual twilight, a world of + magic, mystery, and endless adventure. +[09/08/23 10:27:47] INFO PromptTask scotty + Output: Character Name: Scotty + + Scotty is a Tide Whisperer, one of the mysterious seers who reside in the Twilight Zone of Oceanus Fantasia. He + is a tall, slender figure with a complexion that reflects the perpetual twilight of his home, a mix of the golden + hue of the Solaris and the luminescent glow of the Lunarians. His hair, a cascade of silver waves, mirrors the + ever-changing colors of the magical ocean. His eyes, a deep sea-green, hold a depth that seems to echo the + vastness of the ocean itself. + + ... + + Scotty embodies the spirit of Oceanus Fantasia, a world of magic, mystery, and endless adventure. He is a beacon + of hope and wisdom in a world divided by light and darkness, a testament to the unity and harmony that can exist + in diversity. +[09/08/23 10:28:47] INFO PromptTask annie + Output: Character Name: Annie + + Annie is a young, vibrant inhabitant of the Twilight Zone in Oceanus Fantasia. She is a Tide Whisperer, a seer + who can read the future in the ebb and flow of the magical tides. Her skin is a soft, iridescent hue, a blend of + the golden tones of the Solaris people and the luminescent glow of the Lunarians, reflecting her unique position + between the two cultures. + + ... + + Annie's best friend is a luminescent pixie-fish named Lumi. Lumi is a constant companion and often assists Annie + in her tide readings. Together, they represent the spirit of Oceanus Fantasia - a world of magic, mystery, and + endless adventure. + INFO PromptTask story + Input: Based on the following description of the world and characters, write a short story: + Welcome to the world of "Oceanus Fantasia", a realm where fantasy and oceanic wonders intertwine in a unique + celestial phenomenon known as tidal lock. + + ... + + Annie's best friend is a luminescent pixie-fish named Lumi. Lumi is a constant companion and often assists Annie + in her tide readings. Together, they represent the spirit of Oceanus Fantasia - a world of magic, mystery, and + endless adventure. +[09/08/23 10:29:47] INFO PromptTask story + Output: In the world of Oceanus Fantasia, where the ocean's tide writes the story of a world in perpetual + twilight, lived Scotty and Annie, the Tide Whisperers. They were the bridge between the Solaris Kingdom and the + Lunarian Clan, the mediators of the perpetual day and eternal night. + ... + Scotty and Annie, with their deep understanding of the magical ocean and its creatures, continued to guide the + inhabitants of Oceanus Fantasia. They embodied the spirit of their world, a world of magic, mystery, and endless + adventure. They were the beacon of hope and wisdom in a world divided by light and darkness, a testament to the + unity and harmony that can exist in diversity. +``` + diff --git a/docs/griptape-framework/tools/index.md b/docs/griptape-framework/tools/index.md new file mode 100644 index 000000000..6a131298c --- /dev/null +++ b/docs/griptape-framework/tools/index.md @@ -0,0 +1,62 @@ +# Overview + +One of the most powerful features of Griptape is the ability for Toolkit Tasks to generate _chains of thought_ (CoT) and use tools that can interact with the outside world. We use the [ReAct](https://arxiv.org/abs/2210.03629) technique to implement CoT reasoning and acting in the underlying LLMs without using any fine-tuning. + +Griptape implements the reasoning loop in the Toolkit Tasks and integrates Griptape Tools natively. + +## Tools +Here is an example of a pipeline using tools: + +```python +from griptape.tasks import ToolkitTask +from griptape.structures import Pipeline +from griptape.tools import WebScraper, FileManager, TaskMemoryClient + + +pipeline = Pipeline() + +pipeline.add_tasks( + ToolkitTask( + "Load https://www.griptape.ai, summarize it, and store it in a file called griptape.txt", + tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=False)] + ), +) + +pipeline.run() +``` + +``` +[09/08/23 10:53:56] INFO ToolkitTask 979d99f68766423ea05b367e951281bc + Input: Load https://www.griptape.ai, summarize it, and store it in a file called griptape.txt +[09/08/23 10:54:02] INFO Subtask 97bd154a71e14a1699f8152e50490a71 + Thought: The first step is to load the content of the webpage. I can use the WebScraper tool with the get_content + activity for this. + + Action: {"name": "WebScraper", "path": "get_content", "input": {"values": {"url": + "https://www.griptape.ai"}}} +[09/08/23 10:54:03] INFO Subtask 97bd154a71e14a1699f8152e50490a71 + Response: Output of "WebScraper.get_content" was stored in memory with memory_name "TaskMemory" and + artifact_namespace "9eb6f5828cf64356bf323f11d28be27e" +[09/08/23 10:54:09] INFO Subtask 7ee08458ce154e3d970711b7d3ed79ba + Thought: Now that the webpage content is stored in memory, I can use the TaskMemory tool with the summarize + activity to summarize the content. + Action: {"name": "TaskMemoryClient", "path": "summarize", "input": {"values": {"memory_name": "TaskMemory", "artifact_namespace": "9eb6f5828cf64356bf323f11d28be27e"}}} +[09/08/23 10:54:12] INFO Subtask 7ee08458ce154e3d970711b7d3ed79ba + Response: Griptape is an open source framework that allows developers to build and deploy AI applications + using large language models (LLMs). It provides the ability to create conversational and event-driven apps that + can access and manipulate data securely. Griptape enforces structures like sequential pipelines and workflows for + predictability, while also allowing for creativity by safely prompting LLMs with external APIs and data stores. + The framework can be used to create AI systems that operate across both predictability and creativity dimensions. + Griptape Cloud is a managed platform for deploying and managing AI apps. +[09/08/23 10:54:24] INFO Subtask a024949a9a134f058f2e6b7c379c8713 + Thought: Now that I have the summary, I can store it in a file called griptape.txt. I can use the FileManager + tool with the save_file_to_disk activity for this. + Action: {"name": "FileManager", "path": "save_file_to_disk", "input": {"values": + {"memory_name": "TaskMemory", "artifact_namespace": "9eb6f5828cf64356bf323f11d28be27e", "path": + "griptape.txt"}}} + INFO Subtask a024949a9a134f058f2e6b7c379c8713 + Response: saved successfully +[09/08/23 10:54:27] INFO ToolkitTask 979d99f68766423ea05b367e951281bc + Output: The summary of the webpage https://www.griptape.ai has been successfully stored in a file called + griptape.txt. +``` diff --git a/docs/griptape-tools/custom-tools/index.md b/docs/griptape-tools/custom-tools/index.md new file mode 100644 index 000000000..5b0fe7ad1 --- /dev/null +++ b/docs/griptape-tools/custom-tools/index.md @@ -0,0 +1,79 @@ +## Overview + +Building your own tools is easy with Griptape! + +To start, create a directory for your tool inside your project. All tool directories should have the following components: + +* `manifest.yml` with a YAML manifest. +* `tool.py` file with a tool Python class. +* `requirements.txt` file with tool Python dependencies. + +Let's build a simple random number generator tool! First, create a new directory for your tool `rng_tool`. This is where all tool files will go. + +## Tool Manifest + +Tool YAML manifests are for humans and downstream systems, like ChatGPT Plugins, to generate manifests of their own. Create a `manifest.yml` file in the `rng_tool` directory: + +```yaml +version: "v1" +name: Random Number Generator +description: Tool for generating random numbers. +contact_email: hello@griptape.ai +legal_info_url: https://www.griptape.ai/legal +``` + +## Tool Dependencies + +To add Python dependencies for your tool, add a `requirements.txt` file. The tool we are building is pretty simple, so you can leave that file empty. + +## Tool Implementation + +Next, create a `tool.py` file with the following code: + +```python title="PYTEST_IGNORE" +import random +from griptape.artifacts import TextArtifact +from griptape.tools import BaseTool +from griptape.utils.decorators import activity +from schema import Schema, Literal, Optional + + +class RandomNumberGenerator(BaseTool): + @activity(config={ + "description": "Can be used to generate random numbers", + "schema": Schema({ + Optional(Literal( + "decimals", + description="Number of decimals to round the random number to" + )): int + }) + }) + def generate(self, params: dict) -> TextArtifact: + return TextArtifact( + str(round(random.random(), params["values"].get("decimals"))) + ) +``` + +## Testing Custom Tools + +Finally, let's test our tool: + +```python title="PYTEST_IGNORE" +from griptape.structures import Agent +from rng_tool.tool import RandomNumberGenerator + +rng_tool = RandomNumberGenerator() + +agent = Agent( + tools=[rng_tool] +) + +agent.run( + "generate a random number rounded to 5 decimal places" +) + +``` + +That's it! You can start using this tool with any converter or directly via Griptape. + +Check out other [Griptape Tools](https://github.com/griptape-ai/griptape/tree/main/griptape/tools) to learn more about tool implementation details. diff --git a/docs/griptape-tools/index.md b/docs/griptape-tools/index.md new file mode 100644 index 000000000..0476cd7b1 --- /dev/null +++ b/docs/griptape-tools/index.md @@ -0,0 +1,37 @@ +Tools give the LLM abilities to invoke outside APIs, reference data sets, and generally expand their capabilities. + +Griptape tools are special Python classes that LLMs can use to accomplish specific goals. Here is an example custom tool for generating a random number: + +```python title="PYTEST_IGNORE" +import random +from griptape.artifacts import TextArtifact +from griptape.tools import BaseTool +from griptape.utils.decorators import activity +from schema import Schema, Literal, Optional + + +class RandomNumberGenerator(BaseTool): + @activity(config={ + "description": "Can be used to generate random numbers", + "schema": Schema({ + Optional(Literal( + "decimals", + description="Number of decimals to round the random number to" + )): int + }) + }) + def generate(self, params: dict) -> TextArtifact: + return TextArtifact( + str(round(random.random(), params["values"].get("decimals"))) + ) +``` + +A tool can have many "activities" as denoted by the `@activity` decorator. Each activity has a description (used to provide context to the LLM), and the input schema that the LLM must follow in order to use the tool. + +Output artifacts from all tool activities (except for `InfoArtifact` and `ErrorArtifact`) go to short-term `TaskMemory`. To disable that behavior set the `off_prompt` tool parameter to `False`: + +```python title="PYTEST_IGNORE" +RandomNumberGenerator(off_prompt=False) +``` + +We provide a set of official Griptape Tools for accessing and processing data. You can also [build your own tools](./custom-tools/index.md). diff --git a/docs/griptape-tools/official-tools/aws-iam-client.md b/docs/griptape-tools/official-tools/aws-iam-client.md new file mode 100644 index 000000000..89f0ccbba --- /dev/null +++ b/docs/griptape-tools/official-tools/aws-iam-client.md @@ -0,0 +1,68 @@ +# AwsIamClient + +This tool enables LLMs to make AWS IAM API requests. + +```python +import boto3 +from griptape.structures import Agent +from griptape.tools import AwsIamClient, TaskMemoryClient + +# Initialize the AWS IAM client +aws_iam_client = AwsIamClient(session=boto3.Session()) + +# Create an agent with the AWS IAM client tool +agent = Agent( + tools=[aws_iam_client, TaskMemoryClient(off_prompt=False)] +) + +# Run the agent with a high-level task +agent.run("List all my IAM users") +``` +``` +[09/11/23 16:45:45] INFO Task 890fcf77fb074c9490d5c91563e0c995 + Input: List all my IAM users +[09/11/23 16:45:51] INFO Subtask f2f0809ee10d4538972ed01fdd6a2fb8 + Thought: To list all IAM users, I can use the + AwsIamClient tool with the list_users activity. + This activity does not require any input. + + Action: {"name": "AwsIamClient", + "path": "list_users"} +[09/11/23 16:45:52] INFO Subtask f2f0809ee10d4538972ed01fdd6a2fb8 + Response: Output of "AwsIamClient.list_users" + was stored in memory with memory_name + "TaskMemory" and artifact_namespace + "51d22a018a434904a5da3bb8d4f763f7" +[09/11/23 16:45:59] INFO Subtask 8e0e918571544eeebf46de898466c48c + Thought: The output of the list_users activity is + stored in memory. I can retrieve this information + using the TaskMemory tool with the summarize + activity. + Action: {"name": "TaskMemoryClient", "path": + "summarize", "input": {"values": {"memory_name": + "TaskMemory", "artifact_namespace": + "51d22a018a434904a5da3bb8d4f763f7"}}} +[09/11/23 16:46:03] INFO Subtask 8e0e918571544eeebf46de898466c48c + Response: The text provides information about + two different users in an AWS IAM system. The first + user is named "example-user-1" and has a + user ID of "AIDASHBEHWJLQV2IOYDHM". The second user + is named "example-user-2" and + has a user ID of "AIDASHBEHWJLWHVS76C6X". Both + users have a path of "/", and their ARNs (Amazon + Resource Names) indicate their location in the IAM + system. The first user was created on July 18, + 2023, at 20:29:27 UTC, while the second user was + created on August 29, 2023, at 20:56:37 UTC. +[09/11/23 16:46:13] INFO Task 890fcf77fb074c9490d5c91563e0c995 + Output: There are two IAM users in your AWS + account: + + 1. User "example-user-1" with user ID + "AIDASHBEHWJLQV2IOYDHM", created on July 18, 2023, + at 20:29:27 UTC. + 2. User "example-user-2" with + user ID "AIDASHBEHWJLWHVS76C6X", created on August + 29, 2023, at 20:56:37 UTC. + +``` diff --git a/docs/griptape-tools/official-tools/aws-s3-client.md b/docs/griptape-tools/official-tools/aws-s3-client.md new file mode 100644 index 000000000..220a2d471 --- /dev/null +++ b/docs/griptape-tools/official-tools/aws-s3-client.md @@ -0,0 +1,65 @@ +# AwsS3Client + +This tool enables LLMs to make AWS S3 API requests. + +```python +import boto3 +from griptape.structures import Agent +from griptape.tools import AwsS3Client, TaskMemoryClient + +# Initialize the AWS S3 client +aws_s3_client = AwsS3Client( + session=boto3.Session() +) + +# Create an agent with the AWS S3 client tool +agent = Agent( + tools=[aws_s3_client, TaskMemoryClient(off_prompt=False)] +) + +# Task to list all the AWS S3 buckets +agent.run("List all my S3 buckets.") +``` +``` +[09/11/23 16:49:35] INFO Task 8bf7538e217a4b5a8472829f5eee75b9 + Input: List all my S3 buckets. +[09/11/23 16:49:41] INFO Subtask 9fc44f5c8e73447ba737283cb2ef7f5d + Thought: To list all S3 buckets, I can use the + "list_s3_buckets" activity of the "AwsS3Client" + tool. This activity doesn't require any input. + + Action: {"name": "AwsS3Client", + "path": "list_s3_buckets"} +[09/11/23 16:49:42] INFO Subtask 9fc44f5c8e73447ba737283cb2ef7f5d + Response: Output of + "AwsS3Client.list_s3_buckets" was stored in memory + with memory_name "TaskMemory" and + artifact_namespace + "f2592085fd4a430286a46770ea508cc9" +[09/11/23 16:49:50] INFO Subtask 0e9bb639a432431a92ef40a8c085ca0f + Thought: The output of the "list_s3_buckets" + activity is stored in memory. I can retrieve this + information using the "summarize" activity of the + "TaskMemory" tool. + Action: {"name": "TaskMemoryClient", "path": + "summarize", "input": {"values": {"memory_name": + "TaskMemory", "artifact_namespace": + "f2592085fd4a430286a46770ea508cc9"}}} +[09/11/23 16:49:52] INFO Subtask 0e9bb639a432431a92ef40a8c085ca0f + Response: The text consists of multiple + dictionaries, each containing a 'Name' and + 'CreationDate' key-value pair. The 'Name' + represents the name of a resource or bucket, while + the 'CreationDate' represents the date and time + when the resource or bucket was created. +[09/11/23 16:50:03] INFO Task 8bf7538e217a4b5a8472829f5eee75b9 + Output: The names of your S3 buckets are as + follows: + 1. Bucket Name: 'example-bucket-1', Creation Date: + '2022-01-01T00:00:00Z' + 2. Bucket Name: 'example-bucket-2', Creation Date: + '2022-01-02T00:00:00Z' + 3. Bucket Name: 'example-bucket-3', Creation Date: + '2022-01-03T00:00:00Z' + Please note that the creation dates are in UTC. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/calculator.md b/docs/griptape-tools/official-tools/calculator.md new file mode 100644 index 000000000..af3159c82 --- /dev/null +++ b/docs/griptape-tools/official-tools/calculator.md @@ -0,0 +1,33 @@ +# Calculator + +This tool enables LLMs to make simple calculations. + +```python +from griptape.structures import Agent +from griptape.tools import Calculator + +# Create an agent with the Calculator tool +agent = Agent( + tools=[Calculator(off_prompt=False)] +) + +# Run the agent with a task to perform the arithmetic calculation of \(10^5\) +agent.run("What is 10 raised to the power of 5?") +``` +``` +[09/08/23 14:23:51] INFO Task bbc6002a5e5b4655bb52b6a550a1b2a5 + Input: What is 10 raised to the power of 5? +[09/08/23 14:23:56] INFO Subtask 3e9211a0f44c4277812ae410c43adbc9 + Thought: The question is asking for the result of + 10 raised to the power of 5. This is a mathematical + operation that can be performed using the + Calculator tool. + + Action: {"name": "Calculator", + "path": "calculate", "input": {"values": + {"expression": "10**5"}}} + INFO Subtask 3e9211a0f44c4277812ae410c43adbc9 + Response: 100000 +[09/08/23 14:23:58] INFO Task bbc6002a5e5b4655bb52b6a550a1b2a5 + Output: 10 raised to the power of 5 is 100000. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/computer.md b/docs/griptape-tools/official-tools/computer.md new file mode 100644 index 000000000..9ff9ed288 --- /dev/null +++ b/docs/griptape-tools/official-tools/computer.md @@ -0,0 +1,107 @@ +# Computer + +This tool enables LLMs to execute Python code and run shell commands inside a Docker container. You have to have the Docker daemon running in order for this tool to work. + +You can specify a local working directory and environment variables during tool initialization: + +```python +from griptape.structures import Agent +from griptape.tools import Computer, TaskMemoryClient + +# Initialize the Computer tool +computer = Computer() + +# Create an agent with the Computer tool +agent = Agent( + tools=[computer, TaskMemoryClient(off_prompt=False)] +) + +# Create a file using the shell command +filename = "my_new_file.txt" +agent.run(f"Run this shell command for me: touch {filename}") + +# Add content to the file using the shell command +content = "This is the content of the file." +agent.run(f"Run this shell command for me: echo '{content}' > {filename}") + +# Output the contents of the file using the shell command +agent.run(f"Run this shell command for me: cat {filename}") +``` +``` +[09/11/23 16:24:15] INFO Task d08009ee983c4286ba10f83bcf3080e6 + Input: Run this shell command for me: touch + my_new_file.txt +[09/11/23 16:24:21] INFO Subtask 1ec0f9ea528e44b89eb9d41da0e00856 + Thought: The user wants to create a new file named + "my_new_file.txt". I can do this by executing the + shell command "touch my_new_file.txt" using the + Computer tool with the execute_command activity. + + Action: {"name": "Computer", + "path": "execute_command", "input": {"values": + {"command": "touch my_new_file.txt"}}} +[09/11/23 16:24:22] INFO Subtask 1ec0f9ea528e44b89eb9d41da0e00856 + Response: Output of "Computer.execute_command" + was stored in memory with memory_name + "TaskMemory" and artifact_namespace + "54ffbc84a37a497480cab6ab4f904e7e" +[09/11/23 16:24:28] INFO Subtask f3e1b1d09b4c46babda27342680aa770 + Thought: The command has been executed and the + output is stored in memory. However, the "touch" + command does not produce any output when it + successfully creates a file. To confirm that the + file was created, I can list the files in the + current directory using the "ls" command. + + Action: {"name": "Computer", + "path": "execute_command", "input": {"values": + {"command": "ls"}}} +[09/11/23 16:24:29] INFO Subtask f3e1b1d09b4c46babda27342680aa770 + Response: Output of "Computer.execute_command" + was stored in memory with memory_name + "TaskMemory" and artifact_namespace + "82bc4937564e4901b7fc51fced45b643" +[09/11/23 16:24:40] INFO Subtask 36f0bbfdd7974e6cb52766ba21dc64e0 + Thought: The output of the "ls" command is stored + in memory. I need to retrieve this output to check + if "my_new_file.txt" is listed, which would confirm + that the file was created successfully. + Action: {"name": "TaskMemoryClient", "path": + "query", "input": {"values": {"memory_name": + "TaskMemory", "artifact_namespace": + "82bc4937564e4901b7fc51fced45b643", "query": "Is + my_new_file.txt in the list of files?"}}} +[09/11/23 16:24:41] INFO Subtask 36f0bbfdd7974e6cb52766ba21dc64e0 + Response: Yes. +[09/11/23 16:24:42] INFO Task d08009ee983c4286ba10f83bcf3080e6 + Output: The file "my_new_file.txt" has been + successfully created. + INFO Task d08009ee983c4286ba10f83bcf3080e6 + Input: Run this shell command for me: echo 'This is + the content of the file.' > my_new_file.txt +[09/11/23 16:24:53] INFO Subtask a0a3fb162d6d4f3398a98c6d3604a491 + Thought: The user wants to write the text 'This is + the content of the file.' into the file + 'my_new_file.txt'. I can achieve this by using the + 'execute_command' activity of the 'Computer' tool. + + Action: {"name": "Computer", + "path": "execute_command", "input": {"values": + {"command": "echo 'This is the content of the + file.' > my_new_file.txt"}}} + INFO Subtask a0a3fb162d6d4f3398a98c6d3604a491 + Response: Output of "Computer.execute_command" + was stored in memory with memory_name + "TaskMemory" and artifact_namespace + "ec20f2e7ec674e0286c8d1f05d528957" +[09/11/23 16:25:00] INFO Task d08009ee983c4286ba10f83bcf3080e6 + Output: The text 'This is the content of the file.' + has been successfully written into + 'my_new_file.txt'. + INFO Task d08009ee983c4286ba10f83bcf3080e6 + Input: Run this shell command for me: cat + my_new_file.txt +[09/11/23 16:25:10] INFO Task d08009ee983c4286ba10f83bcf3080e6 + Output: The content of the file 'my_new_file.txt' + is: 'This is the content of the file.' +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/date-time.md b/docs/griptape-tools/official-tools/date-time.md new file mode 100644 index 000000000..fa2a2e153 --- /dev/null +++ b/docs/griptape-tools/official-tools/date-time.md @@ -0,0 +1,36 @@ +# DateTime + +This tool enables LLMs to get current date and time. + +```python +from griptape.structures import Agent +from griptape.tools import DateTime + +# Create an agent with the DateTime tool +agent = Agent( + tools=[DateTime(off_prompt=False)] +) + +# Fetch the current date and time +agent.run({ + "description": "What is the current date and time?" +}) +``` +``` +[09/11/23 15:26:02] INFO Task d0bf49dacd8849e695494578a333f6cc + Input: {'description': 'What is the current date + and time?'} +[09/11/23 15:26:06] INFO Subtask 1c6c8d43926d4eff81992886301d5655 + Thought: The user wants to know the current date + and time. I can use the DateTime tool with the + get_current_datetime activity to find this + information. + + Action: {"name": "DateTime", + "path": "get_current_datetime"} + INFO Subtask 1c6c8d43926d4eff81992886301d5655 + Response: 2023-09-11 15:26:06.767997 +[09/11/23 15:26:08] INFO Task d0bf49dacd8849e695494578a333f6cc + Output: The current date and time is September 11, + 2023, 15:26:06. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/email-client.md b/docs/griptape-tools/official-tools/email-client.md new file mode 100644 index 000000000..ec8af7bb6 --- /dev/null +++ b/docs/griptape-tools/official-tools/email-client.md @@ -0,0 +1,22 @@ +# EmailClient + +The [EmailClient](../../reference/griptape/tools/email_client/tool.md) enables LLMs to send emails. + +```python +import os +from griptape.tools import EmailClient + +email_client = EmailClient( + smtp_host=os.environ.get("SMTP_HOST"), + smtp_port=int(os.environ.get("SMTP_PORT", 465)), + smtp_password=os.environ.get("SMTP_PASSWORD"), + smtp_user=os.environ.get("FROM_EMAIL"), + smtp_use_ssl=bool(os.environ.get("SMTP_USE_SSL")), +) +``` + +For debugging purposes, you can run a local SMTP server that the LLM can send emails to: + +```shell +python -m smtpd -c DebuggingServer -n localhost:1025 +``` diff --git a/docs/griptape-tools/official-tools/file-manager.md b/docs/griptape-tools/official-tools/file-manager.md new file mode 100644 index 000000000..cc10ccfcb --- /dev/null +++ b/docs/griptape-tools/official-tools/file-manager.md @@ -0,0 +1,48 @@ +# FileManager + +This tool enables LLMs to save and load files. + +```python +from griptape.structures import Agent +from griptape.tools import FileManager + +# Initialize the FileManager tool with the current directory as its base +file_manager_tool = FileManager() + +# Add the tool to the Agent +agent = Agent( + tools=[file_manager_tool] +) + +# Directly create a file named 'sample1.txt' with some content +filename = "sample1.txt" +content = "This is the content of sample1.txt" + +with open(filename, "w") as f: + f.write(content) + +# Now, read content from the file 'sample1.txt' using the agent's command +agent.run("Can you get me the sample1.txt file?") +``` +``` +[09/12/23 12:07:56] INFO Task 16a1ce1847284ae3805485bad7d99116 + Input: Can you get me the sample1.txt file? +[09/12/23 12:08:04] INFO Subtask ddcf48d970ce4edbbc22a46b2f83ec4f + Thought: The user wants the content of the file + named "sample1.txt". I can use the FileManager tool + with the activity "load_files_from_disk" to load + the file from the disk. + + Action: {"name": "FileManager", + "path": "load_files_from_disk", "input": + {"values": {"paths": ["sample1.txt"]}}} + INFO Subtask ddcf48d970ce4edbbc22a46b2f83ec4f + Response: + [BlobArtifact(id='a715cc1bc6724bf28566a5b3c343b6ed' + , name='sample1.txt', type='BlobArtifact', + value=b'This is the content of sample1.txt', + dir='')] +[09/12/23 12:08:10] INFO Task 16a1ce1847284ae3805485bad7d99116 + Output: The content of the file "sample1.txt" is + "This is the content of sample1.txt". +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/google-cal-client.md b/docs/griptape-tools/official-tools/google-cal-client.md new file mode 100644 index 000000000..cc2661a92 --- /dev/null +++ b/docs/griptape-tools/official-tools/google-cal-client.md @@ -0,0 +1,37 @@ +# GoogleCalendarClient + +The GoogleCalendarClient tool allows you to interact with Google Calendar. + + +```python +import os +from griptape.tools import GoogleCalendarClient, TaskMemoryClient +from griptape.structures import Agent + +# Create the GoogleCalendarClient tool +google_calendar_tool = GoogleCalendarClient( + service_account_credentials={ + "type": os.environ["GOOGLE_ACCOUNT_TYPE"], + "project_id": os.environ["GOOGLE_PROJECT_ID"], + "private_key_id": os.environ["GOOGLE_PRIVATE_KEY_ID"], + "private_key": os.environ["GOOGLE_PRIVATE_KEY"], + "client_email": os.environ["GOOGLE_CLIENT_EMAIL"], + "client_id": os.environ["GOOGLE_CLIENT_ID"], + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] + }, + owner_email=os.environ["GOOGLE_OWNER_EMAIL"] +) + +# Set up an agent using the GoogleCalendarClient tool +agent = Agent( + tools=[google_calendar_tool, TaskMemoryClient(off_prompt=False)] +) + +# Task: Get upcoming events from a Google calendar +agent.run( + "Get me the details of the next upcoming event from my primary calendar.", +) +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/google-docs-client.md b/docs/griptape-tools/official-tools/google-docs-client.md new file mode 100644 index 000000000..26a4a1f10 --- /dev/null +++ b/docs/griptape-tools/official-tools/google-docs-client.md @@ -0,0 +1,63 @@ +# GoogleDocsClient + +The GoogleDocsClient tool provides a way to interact with the Google Docs API. It can be used to create new documents, save content to existing documents, and more. + +```python +import os +from griptape.structures import Agent +from griptape.tools import GoogleDocsClient + +# Create the GoogleDocsClient tool +google_docs_tool = GoogleDocsClient( + service_account_credentials={ + "type": os.environ["GOOGLE_ACCOUNT_TYPE"], + "project_id": os.environ["GOOGLE_PROJECT_ID"], + "private_key_id": os.environ["GOOGLE_PRIVATE_KEY_ID"], + "private_key": os.environ["GOOGLE_PRIVATE_KEY"], + "client_email": os.environ["GOOGLE_CLIENT_EMAIL"], + "client_id": os.environ["GOOGLE_CLIENT_ID"], + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] + }, + owner_email=os.environ["GOOGLE_OWNER_EMAIL"], + off_prompt=False +) + +# Set up an agent using the GoogleDocsClient tool +agent = Agent( + tools=[google_docs_tool] +) + +# Task: Create a new Google Doc and save content to it +agent.run( + "Create doc with name 'test_creation' in test folder with content 'Hey, Tony.", +) +``` +``` +[10/05/23 12:56:19] INFO ToolkitTask 90721b7478a74618a63d852d35be3b18 + Input: Create doc with name 'test_creation' in + test folder with content 'Hey, Tony.' +[10/05/23 12:56:28] INFO Subtask 042b7050755f43578bba2c315d124fcb + Thought: The user wants to create a Google Doc + named 'test_creation' in a folder named 'test' + with the content 'Hey, Tony.'. I can use the + 'save_content_to_google_doc' activity of the + GoogleDocsClient tool to achieve this. + + Action: {"name": + "GoogleDocsClient", "path": + "save_content_to_google_doc", "input": {"values": + {"file_path": "test_creation", "content": "Hey, + Tony.", "folder_path": "test"}}} +[10/05/23 12:56:31] INFO Subtask 042b7050755f43578bba2c315d124fcb + Response: Content has been successfully saved to + Google Doc with ID: + 1OgKbsPqxOnzkf65kodb1i1_qC1zjX_Bend5XL5bVxpA. +[10/05/23 12:56:38] INFO ToolkitTask 90721b7478a74618a63d852d35be3b18 + Output: The document 'test_creation' has been + successfully created in the 'test' folder with the + content 'Hey, Tony.'. The Google Doc ID is + 1OgKbsPqxOnzkf65kodb1i1_qC1zjX_Bend5XL5bVxpA. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/google-drive-client.md b/docs/griptape-tools/official-tools/google-drive-client.md new file mode 100644 index 000000000..1c7d53541 --- /dev/null +++ b/docs/griptape-tools/official-tools/google-drive-client.md @@ -0,0 +1,60 @@ +# GoogleDriveClient + +The GoogleDriveClient tool provides a way to interact with the Google Drive API. It can be used to save content on Drive, list files, and more. + +```python +import os +from griptape.structures import Agent +from griptape.tools import GoogleDriveClient + +# Create the GoogleDriveClient tool +google_drive_tool = GoogleDriveClient( + service_account_credentials={ + "type": os.environ["GOOGLE_ACCOUNT_TYPE"], + "project_id": os.environ["GOOGLE_PROJECT_ID"], + "private_key_id": os.environ["GOOGLE_PRIVATE_KEY_ID"], + "private_key": os.environ["GOOGLE_PRIVATE_KEY"], + "client_email": os.environ["GOOGLE_CLIENT_EMAIL"], + "client_id": os.environ["GOOGLE_CLIENT_ID"], + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] + }, + owner_email=os.environ["GOOGLE_OWNER_EMAIL"], + off_prompt=False +) + +# Set up an agent using the GoogleDriveClient tool +agent = Agent( + tools=[google_drive_tool] +) + +# Task: Save content to my Google Drive (default directory is root) +agent.run( + "Save the content 'Hi this is Tony' in a filed named 'hello.txt' to my Drive.", +) +``` +``` +[10/05/23 10:49:14] INFO ToolkitTask 2ae3bb7e828744f3a2631c29c6fce001 + Input: Save the content 'Hi this is Tony' in a file + named 'hello.txt' to my Drive. +[10/05/23 10:49:24] INFO Subtask 381430d881354184ace65af39e0b292b + Thought: The user wants to save the content 'Hi + this is Tony' in a file named 'hello.txt' to Google + Drive. I can use the 'save_content_to_drive' + activity of the GoogleDriveClient tool to + accomplish this. + + Action: {"name": + "GoogleDriveClient", "path": + "save_content_to_drive", "input": {"values": + {"path": "hello.txt", "content": "Hi this is + Tony"}}} +[10/05/23 10:49:26] INFO Subtask 381430d881354184ace65af39e0b292b + Response: saved successfully +[10/05/23 10:49:29] INFO ToolkitTask 2ae3bb7e828744f3a2631c29c6fce001 + Output: The content 'Hi this is Tony' has been + successfully saved in a file named 'hello.txt' on + your Google Drive. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/google-gmail-client.md b/docs/griptape-tools/official-tools/google-gmail-client.md new file mode 100644 index 000000000..067928a39 --- /dev/null +++ b/docs/griptape-tools/official-tools/google-gmail-client.md @@ -0,0 +1,62 @@ +# GoogleGmailClient + +The GoogleGmailClient tool provides a way to interact with the Gmail API. It can be used to create draft emails, send emails, and more. + +```python +from griptape.tools import GoogleGmailClient +from griptape.structures import Agent +import os + +# Create the GoogleGmailClient tool +gmail_tool = GoogleGmailClient( + service_account_credentials={ + "type": os.environ["GOOGLE_ACCOUNT_TYPE"], + "project_id": os.environ["GOOGLE_PROJECT_ID"], + "private_key_id": os.environ["GOOGLE_PRIVATE_KEY_ID"], + "private_key": os.environ["GOOGLE_PRIVATE_KEY"], + "client_email": os.environ["GOOGLE_CLIENT_EMAIL"], + "client_id": os.environ["GOOGLE_CLIENT_ID"], + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] + }, + owner_email=os.environ["GOOGLE_OWNER_EMAIL"], + off_prompt=False +) + +# Set up an agent using the GoogleGmailClient tool +agent = Agent( + tools=[gmail_tool] +) + +# Task: Create a draft email in GMail +agent.run( + "Create a draft email in Gmail to example@email.com with the subject 'Test Draft', the body " + "'This is a test draft email.'", +) +``` +``` +[10/05/23 13:24:05] INFO ToolkitTask 1f190f823d584053bfe9942f41b6cb2d + Input: Create a draft email in Gmail to + example@email.com with the subject 'Test Draft', + the body 'This is a test draft email.' +[10/05/23 13:24:15] INFO Subtask 7f2cce7e5b0e425ba696531561697b96 + Thought: The user wants to create a draft email in + Gmail. I can use the GoogleGmailClient tool with + the create_draft_email activity to accomplish this. + I will need to provide the 'to', 'subject', and + 'body' values as input. + + Action: {"name": + "GoogleGmailClient", "path": + "create_draft_email", "input": {"values": {"to": + "example@email.com", "subject": "Test Draft", + "body": "This is a test draft email."}}} +[10/05/23 13:24:16] INFO Subtask 7f2cce7e5b0e425ba696531561697b96 + Response: An email draft was successfully + created (ID: r6322867913697829111) +[10/05/23 13:24:19] INFO ToolkitTask 1f190f823d584053bfe9942f41b6cb2d + Output: The draft email has been successfully + created in Gmail with the ID: r6322867913697829111. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/image-query-client.md b/docs/griptape-tools/official-tools/image-query-client.md new file mode 100644 index 000000000..fb5dcca33 --- /dev/null +++ b/docs/griptape-tools/official-tools/image-query-client.md @@ -0,0 +1,29 @@ +# ImageQueryClient + +This tool allows Agents to execute natural language queries on the contents of images using multimodal models. + +```python +from griptape.structures import Agent +from griptape.tools import ImageQueryClient +from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.engines import ImageQueryEngine + +# Create an Image Query Driver. +driver = OpenAiVisionImageQueryDriver( + model="gpt-4-vision-preview" +) + +# Create an Image Query Engine configured to use the driver. +engine = ImageQueryEngine( + image_query_driver=driver, +) + +# Create an Image Query Client configured to use the engine. +tool = ImageQueryClient( + image_query_engine=engine, + off_prompt=False, +) + +# Create an agent and provide the tool to it. +Agent(tools=[tool]).run("Describe the weather in the image tests/resources/mountain.png in one word.") +``` diff --git a/docs/griptape-tools/official-tools/inpainting-image-generation-client.md b/docs/griptape-tools/official-tools/inpainting-image-generation-client.md new file mode 100644 index 000000000..82c99adb7 --- /dev/null +++ b/docs/griptape-tools/official-tools/inpainting-image-generation-client.md @@ -0,0 +1,32 @@ +# InpaintingImageGenerationClient + +This tool allows LLMs to generate images using inpainting, where an input image is altered within the area specified by a mask image according to a prompt. The input and mask images can be provided either by their file path or by their [Task Memory](../../griptape-framework/structures/task-memory.md) references. + +```python +from griptape.structures import Agent +from griptape.engines import InpaintingImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tools import InpaintingImageGenerationClient + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = InpaintingImageGenerationEngine( + image_generation_driver=driver, +) + +# Create a tool configured to use the engine. +tool = InpaintingImageGenerationClient( + engine=engine, +) + +# Create an agent and provide the tool to it. +Agent(tools=[tool]).run("Generate an image of a castle built into the side of a mountain by inpainting the " + "image at tests/resources/mountain.png using the mask at tests/resources/mountain-mask.png.") +``` diff --git a/docs/griptape-tools/official-tools/openweather-client.md b/docs/griptape-tools/official-tools/openweather-client.md new file mode 100644 index 000000000..d6d150766 --- /dev/null +++ b/docs/griptape-tools/official-tools/openweather-client.md @@ -0,0 +1,20 @@ +# OpenWeatherClient + +The [OpenWeatherClient](../../reference/griptape/tools/openweather_client/tool.md) enables LLMs to use [OpenWeatherMap](https://openweathermap.org/). + +```python +import os +from griptape.structures import Agent +from griptape.tools import OpenWeatherClient, TaskMemoryClient + +agent = Agent( + tools=[ + OpenWeatherClient( + api_key=os.environ["OPENWEATHER_API_KEY"], + ), + TaskMemoryClient(off_prompt=False) + ] +) + +agent.run("What's the weather currently like in San Francisco?") +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/outpainting-image-generation-client.md b/docs/griptape-tools/official-tools/outpainting-image-generation-client.md new file mode 100644 index 000000000..8e8940332 --- /dev/null +++ b/docs/griptape-tools/official-tools/outpainting-image-generation-client.md @@ -0,0 +1,32 @@ +# OutpaintingImageGenerationClient + +This tool allows LLMs to generate images using outpainting, where an input image is altered outside of the area specified by a mask image according to a prompt. The input and mask images can be provided either by their file path or by their [Task Memory](../../griptape-framework/structures/task-memory.md) references. + +```python +from griptape.structures import Agent +from griptape.engines import OutpaintingImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tools import OutpaintingImageGenerationClient + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = OutpaintingImageGenerationEngine( + image_generation_driver=driver, +) + +# Create a tool configured to use the engine. +tool = OutpaintingImageGenerationClient( + engine=engine, +) + +# Create an agent and provide the tool to it. +Agent(tools=[tool]).run("Generate an image of a mountain shrouded by clouds by outpainting the " + "image at tests/resources/mountain.png using the mask at tests/resources/mountain-mask.png.") +``` diff --git a/docs/griptape-tools/official-tools/prompt-image-generation-client.md b/docs/griptape-tools/official-tools/prompt-image-generation-client.md new file mode 100644 index 000000000..b2045bdd5 --- /dev/null +++ b/docs/griptape-tools/official-tools/prompt-image-generation-client.md @@ -0,0 +1,31 @@ +# PromptImageGenerationClient + +This tool allows LLMs to generate images from a text prompt. + +```python +from griptape.structures import Agent +from griptape.engines import PromptImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tools import PromptImageGenerationClient + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver(), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = PromptImageGenerationEngine( + image_generation_driver=driver, +) + +# Create a tool configured to use the engine. +tool = PromptImageGenerationClient( + engine=engine, +) + +# Create an agent and provide the tool to it. +Agent(tools=[tool]).run("Generate an image of a mountain on a summer day.") +``` diff --git a/docs/griptape-tools/official-tools/rest-api-client.md b/docs/griptape-tools/official-tools/rest-api-client.md new file mode 100644 index 000000000..b253d0bce --- /dev/null +++ b/docs/griptape-tools/official-tools/rest-api-client.md @@ -0,0 +1,159 @@ +# RestApiClient + +This tool enables LLMs to call REST APIs. + +The [RestApiClient](../../reference/griptape/tools/rest_api_client/tool.md) tool uses the following parameters: + +### Example +The following example is built using [https://jsonplaceholder.typicode.com/guide/](https://jsonplaceholder.typicode.com/guide/). + +```python +from json import dumps +from griptape.drivers import OpenAiChatPromptDriver +from griptape.memory.structure import ConversationMemory +from griptape.structures import Pipeline +from griptape.tasks import ToolkitTask +from griptape.tools import RestApiClient +from griptape.config import StructureConfig, StructureGlobalDriversConfig + +posts_client = RestApiClient( + base_url="https://jsonplaceholder.typicode.com", + path="posts", + description="Allows for creating, updating, deleting, patching, and getting posts.", + off_prompt=False, + request_body_schema=dumps( + { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "$id": "http://example.com/example.json", + "type": "object", + "default": {}, + "title": "Root Schema", + "required": ["title", "body", "userId"], + "properties": { + "title": { + "type": "string", + "default": "", + "title": "The title Schema", + }, + "body": { + "type": "string", + "default": "", + "title": "The body Schema", + }, + "userId": { + "type": "integer", + "default": 0, + "title": "The userId Schema", + }, + }, + } + ), + request_query_params_schema=dumps( + { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "$id": "http://example.com/example.json", + "type": "object", + "default": {}, + "title": "Root Schema", + "required": ["userId"], + "properties": { + "userId": { + "type": "string", + "default": "", + "title": "The userId Schema", + }, + }, + } + ), + request_path_params_schema=dumps( + { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "$id": "http://example.com/example.json", + "type": "array", + "default": [], + "title": "Root Schema", + "items": { + "anyOf": [ + { + "type": "string", + "title": "Post id", + }, + ] + }, + } + ), + response_body_schema=dumps( + { + "$schema": "https://json-schema.org/draft/2019-09/schema", + "$id": "http://example.com/example.json", + "type": "object", + "default": {}, + "title": "Root Schema", + "required": ["id", "title", "body", "userId"], + "properties": { + "id": { + "type": "integer", + "default": 0, + "title": "The id Schema", + }, + "title": { + "type": "string", + "default": "", + "title": "The title Schema", + }, + "body": { + "type": "string", + "default": "", + "title": "The body Schema", + }, + "userId": { + "type": "integer", + "default": 0, + "title": "The userId Schema", + }, + }, + } + ), +) + +pipeline = Pipeline( + conversation_memory=ConversationMemory(), + config = StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=OpenAiChatPromptDriver( + model="gpt-4", + temperature=0.1 + ), + ) + ), +) + +pipeline.add_tasks( + ToolkitTask( + "Output the title of post 1.", + tools=[posts_client], + ), + ToolkitTask( + "Create a post for user 1 with title 'My First Post' and body 'Hello world!'.", + tools=[posts_client], + ), + ToolkitTask( + "Update post 1 with a new body: 'Hello universe!'.", + tools=[posts_client], + ), + ToolkitTask( + "Patch post 1 with a new title: 'My First Post, A Journey'.", + tools=[posts_client], + ), + ToolkitTask( + "Delete post 1.", + tools=[posts_client], + ), + ToolkitTask( + "Output the body of all the comments for post 1.", + tools=[posts_client], + ), +) + +pipeline.run() +``` diff --git a/docs/griptape-tools/official-tools/sql-client.md b/docs/griptape-tools/official-tools/sql-client.md new file mode 100644 index 000000000..0e6fcf370 --- /dev/null +++ b/docs/griptape-tools/official-tools/sql-client.md @@ -0,0 +1,71 @@ +# SqlClient + +This tool enables LLMs to execute SQL statements via [SQLAlchemy](https://www.sqlalchemy.org/). Depending on your underlying SQL engine, [configure](https://docs.sqlalchemy.org/en/20/core/engines.html) your `engine_url` and give the LLM a hint about what engine you are using via `engine_name`, so that it can create engine-specific statements. + +```python +import os +import boto3 +from griptape.drivers import AmazonRedshiftSqlDriver +from griptape.loaders import SqlLoader +from griptape.structures import Agent +from griptape.tools import SqlClient, TaskMemoryClient + + +session = boto3.Session() + +sql_loader = SqlLoader( + sql_driver=AmazonRedshiftSqlDriver( + database=os.environ["REDSHIFT_DATABASE"], + session=session, + cluster_identifier=os.environ['REDSHIFT_CLUSTER_IDENTIFIER'], + ) +) + +sql_tool = SqlClient( + sql_loader=sql_loader, + table_name="people", + table_description="contains information about tech industry professionals", + engine_name="redshift" +) + +agent = Agent( + tools=[sql_tool, TaskMemoryClient(off_prompt=False)] +) +agent.run("SELECT * FROM people;") +``` +``` +[09/11/23 17:02:55] INFO Task d8331f8705b64b4b9d9a88137ed73f3f + Input: SELECT * FROM people; +[09/11/23 17:03:02] INFO Subtask 46c2f8926ce9469e9ca6b1b3364e3e41 + Thought: The user wants to retrieve all records + from the 'people' table. I can use the SqlClient + tool to execute this query. + + Action: {"name": "SqlClient", + "path": "execute_query", "input": {"values": + {"sql_query": "SELECT * FROM people;"}}} +[09/11/23 17:03:03] INFO Subtask 46c2f8926ce9469e9ca6b1b3364e3e41 + Response: Output of "SqlClient.execute_query" + was stored in memory with memory_name + "TaskMemory" and artifact_namespace + "217715ba3e444e4985bee223df5716a8" +[09/11/23 17:03:11] INFO Subtask e51f05449647482caa3051378ab5cb8c + Thought: The output of the SQL query has been + stored in memory. I can retrieve this data using + the TaskMemory's 'summarize' activity. + Action: {"name": "TaskMemoryClient", "path": + "summarize", "input": {"values": {"memory_name": + "TaskMemory", "artifact_namespace": + "217715ba3e444e4985bee223df5716a8"}}} +[09/11/23 17:03:12] INFO Subtask e51f05449647482caa3051378ab5cb8c + Response: The text includes a list of employees + with their respective IDs, names, positions. There + are two employees named Tanya Cooley who are both + managers, and two employees named John Doe who are + both coders. +[09/11/23 17:03:17] INFO Task d8331f8705b64b4b9d9a88137ed73f3f + Output: The 'people' table contains records of + several employees. Notably, there are two employees + named Tanya Cooley who are both managers, and two + employees named John Doe who are both coders. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/task-memory-client.md b/docs/griptape-tools/official-tools/task-memory-client.md new file mode 100644 index 000000000..9b32d4054 --- /dev/null +++ b/docs/griptape-tools/official-tools/task-memory-client.md @@ -0,0 +1,11 @@ +# TaskMemoryClient + +This tool enables LLMs to query and summarize task outputs that are stored in short-term tool memory. This tool uniquely requires the user to set the `off_prompt` property explicitly for usability reasons (Griptape doesn't provide the default `True` value). + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper, TaskMemoryClient + + +Agent(tools=[WebScraper(), TaskMemoryClient(off_prompt=False)]) +``` diff --git a/docs/griptape-tools/official-tools/variation-image-generation-client.md b/docs/griptape-tools/official-tools/variation-image-generation-client.md new file mode 100644 index 000000000..a9f703b57 --- /dev/null +++ b/docs/griptape-tools/official-tools/variation-image-generation-client.md @@ -0,0 +1,83 @@ +# VariationImageGenerationEngine + +This Tool allows LLMs to generate variations of an input image from a text prompt. The input image can be provided either by its file path or by its [Task Memory](../../griptape-framework/structures/task-memory.md) reference. + +## Referencing an Image by File Path + +```python +from griptape.structures import Agent +from griptape.engines import VariationImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tools import VariationImageGenerationClient + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver( + style_preset="pixel-art", + ), + model="stability.stable-diffusion-xl-v0", +) + +# Create an engine configured to use the driver. +engine = VariationImageGenerationEngine( + image_generation_driver=driver, +) + +# Create a tool configured to use the engine. +tool = VariationImageGenerationClient( + engine=engine, +) + +# Create an agent and provide the tool to it. +Agent(tools=[tool]).run("Generate a variation of the image located at tests/resources/mountain.png " + "depicting a mountain on a winter day") +``` + +## Referencing an Image in Task Memory + +```python +from griptape.structures import Agent +from griptape.engines import VariationImageGenerationEngine, PromptImageGenerationEngine +from griptape.drivers import AmazonBedrockImageGenerationDriver, \ + BedrockStableDiffusionImageGenerationModelDriver +from griptape.tools import VariationImageGenerationClient, PromptImageGenerationClient + + +# Create a driver configured to use Stable Diffusion via Bedrock. +driver = AmazonBedrockImageGenerationDriver( + image_generation_model_driver=BedrockStableDiffusionImageGenerationModelDriver( + style_preset="pixel-art", + ), + model="stability.stable-diffusion-xl-v0", +) + +# Create an prompt image generation engine configured to use the driver. +prompt_engine = PromptImageGenerationEngine( + image_generation_driver=driver, +) + +# Create a prompt image generation client configured to use the engine. +prompt_tool = PromptImageGenerationClient( + engine=prompt_engine, +) + +# Create an variation image generation engine configured to use the driver. +variation_engine = VariationImageGenerationEngine( + image_generation_driver=driver, +) + +# Create a variation image generation client configured to use the engine. +variation_tool = VariationImageGenerationClient( + engine=variation_engine, +) + +# Create an agent and provide the tools to it. +agent = Agent(tools=[prompt_tool, variation_tool]) + +# Run the agent using a prompt motivating it to generate an image, then +# create a variation of the image present in task memory. +agent.run("Generate an image of a mountain on a summer day. Then, generate a " + "variation of this image depicting the same mountain scene on a winter day.") +``` diff --git a/docs/griptape-tools/official-tools/vector-store-client.md b/docs/griptape-tools/official-tools/vector-store-client.md new file mode 100644 index 000000000..2b4d6cbe5 --- /dev/null +++ b/docs/griptape-tools/official-tools/vector-store-client.md @@ -0,0 +1,37 @@ +The [VectorStoreClient](../../reference/griptape/tools/vector_store_client/tool.md) enables LLMs to dynamically query task memory. + +Here is an example of how it can be used with the Pincone storage driver: + +```python +from griptape.structures import Agent +from griptape.tools import VectorStoreClient, TaskMemoryClient +from griptape.loaders import WebLoader +from griptape.engines import VectorQueryEngine +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver + +engine = VectorQueryEngine( + prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), + vector_store_driver=LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver(), + ), +) + +engine.upsert_text_artifacts( + WebLoader().load("https://www.griptape.ai"), + namespace="griptape" +) + +vector_db = VectorStoreClient( + description="This DB has information about the Griptape Python framework", + query_engine=engine, + namespace="griptape" +) + +agent = Agent( + tools=[vector_db, TaskMemoryClient(off_prompt=False)] +) + +agent.run( + "what is Griptape?" +) +``` diff --git a/docs/griptape-tools/official-tools/web-scraper.md b/docs/griptape-tools/official-tools/web-scraper.md new file mode 100644 index 000000000..ee52cc76c --- /dev/null +++ b/docs/griptape-tools/official-tools/web-scraper.md @@ -0,0 +1,76 @@ +# WebScraper + +This tool enables LLMs to scrape web pages for full text, summaries, authors, titles, and keywords. It can also execute search queries to answer specific questions about the page. This tool uses OpenAI APIs for some of its activities, so in order to use it provide a valid API key in `openai_api_key`. + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper, TaskMemoryClient + +agent = Agent( + tools=[WebScraper(), TaskMemoryClient(off_prompt=False)] +) + +agent.run( + "Based on https://www.griptape.ai/, tell me what griptape is" +) +``` +``` +[09/11/23 15:27:39] INFO Task dd9ad12c5c1e4280a6e20d7c116303ed + Input: Based on https://www.griptape.ai/, tell me + what griptape is +[09/11/23 15:27:47] INFO Subtask 4b34be74b06a47ba9cb3a4b62aa35907 + Thought: I need to find out what griptape is based + on the information provided on the website + https://www.griptape.ai/. I can use the WebScraper + tool with the get_content activity to load the + content of the website. + + Action: {"name": "WebScraper", + "path": "get_content", "input": {"values": + {"url": "https://www.griptape.ai/"}}} +[09/11/23 15:27:48] INFO Subtask 4b34be74b06a47ba9cb3a4b62aa35907 + Response: Output of "WebScraper.get_content" was + stored in memory with memory_name "TaskMemory" + and artifact_namespace + "02da5930b8d74f7ca30aecc3760a3318" +[09/11/23 15:27:59] INFO Subtask 5b255e3e98aa401295f77532bc779390 + Thought: The content of the website has been stored + in memory. I can use the TaskMemory tool with + the summarize activity to get a summary of the + content. + Action: {"name": "TaskMemoryClient", "path": + "summarize", "input": {"values": {"memory_name": + "TaskMemory", "artifact_namespace": + "02da5930b8d74f7ca30aecc3760a3318"}}} +[09/11/23 15:28:03] INFO Subtask 5b255e3e98aa401295f77532bc779390 + Response: Griptape is an open source framework + that allows developers to build and deploy AI + applications using large language models (LLMs). It + provides the ability to create conversational and + event-driven apps that can access and manipulate + data securely. Griptape enforces structures like + sequential pipelines and DAG-based workflows for + predictability, while also allowing for creativity + by safely prompting LLMs with external APIs and + data stores. The framework can be used to create AI + systems that operate across both dimensions. + Griptape Cloud is a managed platform for deploying + and managing AI apps, and it offers features like + scheduling and connecting to data stores and APIs. +[09/11/23 15:28:12] INFO Task dd9ad12c5c1e4280a6e20d7c116303ed + Output: Griptape is an open source framework that + enables developers to build and deploy AI + applications using large language models (LLMs). It + allows the creation of conversational and + event-driven apps that can securely access and + manipulate data. Griptape enforces structures like + sequential pipelines and DAG-based workflows for + predictability, while also allowing for creativity + by safely prompting LLMs with external APIs and + data stores. The framework can be used to create AI + systems that operate across both dimensions. + Additionally, Griptape Cloud is a managed platform + for deploying and managing AI apps, offering + features like scheduling and connecting to data + stores and APIs. +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/web-search.md b/docs/griptape-tools/official-tools/web-search.md new file mode 100644 index 000000000..f22ef1a23 --- /dev/null +++ b/docs/griptape-tools/official-tools/web-search.md @@ -0,0 +1,110 @@ +# WebSearch + +This tool enables LLMs to search the web. + +```python +import os +from griptape.tools import WebSearch +from griptape.structures import Agent + +# Initialize the WebSearch tool with necessary parameters +web_search_tool = WebSearch( + results_count=5, + google_api_lang="lang_en", + google_api_key=os.environ["GOOGLE_API_KEY"], + google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], + google_api_country="us", + off_prompt=False +) + +# Set up an agent using the WebSearch tool +agent = Agent( + tools=[web_search_tool] +) + +# Task: Search the web for a specific query +agent.run("Tell me how photosynthesis works") +``` +``` +[09/08/23 15:37:25] INFO Task 2cf557f7f7cd4a20a7fa2f0c46af2f71 + Input: Tell me how photosynthesis works +[09/08/23 15:37:32] INFO Subtask d023ef9f41d142229513510cf4f47afe + Thought: I know that photosynthesis is a process + used by plants and other organisms to convert light + energy into chemical energy that can later be + released to fuel the organisms' activities. + However, to provide a detailed explanation, I will + need to conduct a web search. + + Action: {"name": "WebSearch", + "path": "search", "input": {"values": {"query": + "How does photosynthesis work?"}}} + INFO Subtask d023ef9f41d142229513510cf4f47afe + Response: {'url': + 'https://www.nationalgeographic.org/encyclopedia/ph + otosynthesis/', 'title': 'Photosynthesis', + 'description': 'Jul 15, 2022 ... Photosynthesis is + the process by which plants use sunlight, water, + and carbon dioxide to create oxygen and energy in + the form of sugar.'} + {'url': + 'https://www.snexplores.org/article/explainer-how-p + hotosynthesis-works', 'title': 'Explainer: How + photosynthesis works', 'description': 'Oct 28, 2020 + ... Photosynthesis is the process of creating sugar + and oxygen from carbon dioxide, water and sunlight. + It happens through a long series of + chemical\xa0...'} + {'url': + 'https://www.sciencefocus.com/nature/how-does-photo + synthesis-work', 'title': 'Photosynthesis: What is + it and how does it work? - BBC Science ...', + 'description': "Jul 27, 2022 ... Photosynthesis is + the process by which carbohydrate molecules are + synthesised. It's used by plants, algae and certain + bacteriato turn sunlight,\xa0..."} + {'url': 'https://oregonforests.org/photosynthesis', + 'title': 'Photosynthesis | OregonForests', + 'description': "Here's how it works: Tree and plant + roots absorb water, as well as minerals and + nutrients, from the soil. At the same time, the + leaves or needles absorb carbon\xa0..."} + {'url': + 'https://ssec.si.edu/stemvisions-blog/what-photosyn + thesis', 'title': 'What is Photosynthesis | + Smithsonian Science Education Center', + 'description': 'Apr 12, 2017 ... Rather, plants use + sunlight, water, and the gases in the air to make + glucose, which is a form of sugar that plants need + to survive. This process\xa0...'} +[09/08/23 15:37:50] INFO Task 2cf557f7f7cd4a20a7fa2f0c46af2f71 + Output: Photosynthesis is the process by which + plants, algae, and certain bacteria convert light + energy, usually from the sun, into chemical energy + in the form of glucose or sugar. This process + involves several steps: + + 1. Absorption of light: The process begins when + light is absorbed by proteins containing + chlorophylls (pigments) present in chloroplasts. + + 2. Conversion of light energy to chemical energy: + The absorbed light energy is used to convert carbon + dioxide from the atmosphere and water from the soil + into glucose. This conversion process occurs + through a series of chemical reactions known as the + light-dependent reactions and the Calvin cycle. + + 3. Release of oxygen: As a byproduct of these + reactions, oxygen is produced and released into the + atmosphere. + + 4. Use of glucose: The glucose produced is used by + the plant for growth and development. It can also + be stored for later use. + + In summary, photosynthesis is a vital process for + life on Earth as it is the primary source of oxygen + in the atmosphere and forms the basis of the food + chain. +``` \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..727761f87 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,27 @@ +# Griptape Docs + +Welcome to Griptape Docs! This documentation is organized into the following sections: + +## Griptape Topic Guides + +Griptape Topic Guides discuss key topics at a high level and provide useful background information and explanation. + +### Griptape Framework + +[Griptape Framework](griptape-framework/index.md) provides an overview of the key topics within Griptape, and how you can get started building agents. + +### Griptape Tools + +[Griptape Tools](griptape-tools/index.md) provides and overview of the tools available within Griptape, and how you can use them to extend the capability of LLMs. + +## Griptape Recipes + +[Griptape Recipes](examples/index.md) are ready-to-go examples built around common use-cases like data retrieval and more. They are more advanced than Griptape Trade School, and require some understanding of how Griptape works. + +## Griptape Reference Guide + +[Griptape Reference Guide](reference/griptape/index.md) contains low level technical reference of Griptape's APIs. + +## Griptape Trade School + +[Griptape Trade School](https://learn.griptape.ai) takes you through the steps of building a variety of projects with Griptape. Start here if you are new to Griptape or programming. diff --git a/docs/overrides/main.html b/docs/overrides/main.html new file mode 100644 index 000000000..e3acc1afb --- /dev/null +++ b/docs/overrides/main.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + + + +{% block announce %} +
    + Star and contribute to Griptape on GitHub! +
    +{% endblock %} \ No newline at end of file diff --git a/docs/plugins/swagger_ui_plugin.py b/docs/plugins/swagger_ui_plugin.py new file mode 100644 index 000000000..0243f6900 --- /dev/null +++ b/docs/plugins/swagger_ui_plugin.py @@ -0,0 +1,35 @@ +import os + +import markdown +from jinja2 import Environment, FileSystemLoader, select_autoescape +from markupsafe import Markup + +config_scheme = { + "spec_url": "https://cloud-preview.griptape.ai/public/openapi.yaml", + "template": "swagger.md.tmpl", + "outfile": "griptape-cloud/api/api-reference.md", +} + + +def generate_page_contents(page): + spec_url = config_scheme["spec_url"] + tmpl_url = config_scheme["template"] + env = Environment(loader=FileSystemLoader("docs/plugins/tmpl"), autoescape=select_autoescape(["html", "xml"])) + md = markdown.Markdown() + env.filters["markdown"] = lambda text: Markup(md.convert(text)) + + template = env.get_template(tmpl_url) + tmpl_out = template.render(spec_url=spec_url) + return tmpl_out + + +def on_config(config): + print("INFO - swagger-ui plugin ENABLED") + + +def on_page_read_source(page, config): + index_path = os.path.join(config["docs_dir"], config_scheme["outfile"]) + page_path = os.path.join(config["docs_dir"], page.file.src_path) + if index_path == page_path: + contents = generate_page_contents(page) + return contents diff --git a/docs/plugins/tmpl/swagger.md.tmpl b/docs/plugins/tmpl/swagger.md.tmpl new file mode 100644 index 000000000..1d35a3e5e --- /dev/null +++ b/docs/plugins/tmpl/swagger.md.tmpl @@ -0,0 +1,29 @@ +
    + + + \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 000000000..0b9852e82 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,153 @@ +site_name: Griptape Docs +hooks: + - docs/plugins/swagger_ui_plugin.py +plugins: + - glightbox + - search + - mkdocstrings: + handlers: + python: + paths: ["griptape"] + options: + show_if_no_docstring: true + heading_level: 3 + - gen-files: + scripts: + - docs/gen_ref_pages.py + - literate-nav: + nav_file: SUMMARY.md + - section-index +copyright: "© Griptape, Inc." +extra_css: + - assets/css/extra.css + - assets/css/code_select.css + - assets/css/mkdocstrings.css + - assets/css/swagger-ui.css +extra_javascript: + - assets/scripts/swagger-ui-bundle.js + - assets/scripts/swagger-ui-standalone-preset.js +extra: + analytics: + provider: google + property: G-QM8EDPSCB6 + social: + - icon: fontawesome/solid/house + link: https://www.griptape.ai + - icon: fontawesome/brands/discord + link: https://discord.gg/gnWRz88eym + - icon: fontawesome/brands/github + link: https://github.com/griptape-ai/griptape/ + - icon: fontawesome/brands/python + link: https://pypi.org/project/griptape/ +theme: + name: material + custom_dir: docs/overrides + logo: assets/img/griptape-mark-square-light.svg + palette: + scheme: slate + primary: black + accent: deep orange + features: + - content.code.copy + - content.code.annotate + - navigation.tabs + - navigation.sections + - navigation.expand + - navigation.top + - announce.dismiss + - toc.follow +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - admonition + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.details + - pymdownx.tabbed + - tables + - def_list + - footnotes +nav: + - Home: + - Overview: "index.md" + - Contributing: "contributing.md" + - Framework: + - Overview: "griptape-framework/index.md" + - Structures: + - Agents: "griptape-framework/structures/agents.md" + - Pipelines: "griptape-framework/structures/pipelines.md" + - Workflows: "griptape-framework/structures/workflows.md" + - Tasks: "griptape-framework/structures/tasks.md" + - Task Memory: "griptape-framework/structures/task-memory.md" + - Conversation Memory: "griptape-framework/structures/conversation-memory.md" + - Rulesets: "griptape-framework/structures/rulesets.md" + - Config: "griptape-framework/structures/config.md" + - Tools: + - Overview: "griptape-framework/tools/index.md" + - Building Custom Tools: "griptape-tools/custom-tools/index.md" + - Engines: + - Query Engines: "griptape-framework/engines/query-engines.md" + - Extraction Engines: "griptape-framework/engines/extraction-engines.md" + - Summary Engines: "griptape-framework/engines/summary-engines.md" + - Image Generation Engines: "griptape-framework/engines/image-generation-engines.md" + - Image Query Engines: "griptape-framework/engines/image-query-engines.md" + - Drivers: + - Prompt Drivers: "griptape-framework/drivers/prompt-drivers.md" + - Embedding Drivers: "griptape-framework/drivers/embedding-drivers.md" + - Vector Store Drivers: "griptape-framework/drivers/vector-store-drivers.md" + - Image Generation Drivers: "griptape-framework/drivers/image-generation-drivers.md" + - SQL Drivers: "griptape-framework/drivers/sql-drivers.md" + - Image Query Drivers: "griptape-framework/drivers/image-query-drivers.md" + - Web Scraper Drivers: "griptape-framework/drivers/web-scraper-drivers.md" + - Data: + - Overview: "griptape-framework/data/index.md" + - Artifacts: "griptape-framework/data/artifacts.md" + - Chunkers: "griptape-framework/data/chunkers.md" + - Loaders: "griptape-framework/data/loaders.md" + - Misc: + - Events: "griptape-framework/misc/events.md" + - Tokenizers: "griptape-framework/misc/tokenizers.md" + - Tools: + - Overview: "griptape-tools/index.md" + - Official Tools: + - AwsIamClient: "griptape-tools/official-tools/aws-iam-client.md" + - AwsS3Client: "griptape-tools/official-tools/aws-s3-client.md" + - Calculator: "griptape-tools/official-tools/calculator.md" + - Computer: "griptape-tools/official-tools/computer.md" + - DateTime: "griptape-tools/official-tools/date-time.md" + - EmailClient: "griptape-tools/official-tools/email-client.md" + - FileManager: "griptape-tools/official-tools/file-manager.md" + - GoogleCalendarClient: "griptape-tools/official-tools/google-cal-client.md" + - GoogleGmailClient: "griptape-tools/official-tools/google-gmail-client.md" + - GoogleDriveClient: "griptape-tools/official-tools/google-drive-client.md" + - GoogleDocsClient: "griptape-tools/official-tools/google-docs-client.md" + - OpenWeatherClient: "griptape-tools/official-tools/openweather-client.md" + - RestApiClient: "griptape-tools/official-tools/rest-api-client.md" + - SqlClient: "griptape-tools/official-tools/sql-client.md" + - TaskMemoryClient: "griptape-tools/official-tools/task-memory-client.md" + - VectorStoreClient: "griptape-tools/official-tools/vector-store-client.md" + - WebScraper: "griptape-tools/official-tools/web-scraper.md" + - WebSearch: "griptape-tools/official-tools/web-search.md" + - PromptImageGenerationClient: "griptape-tools/official-tools/prompt-image-generation-client.md" + - VariationImageGenerationClient: "griptape-tools/official-tools/variation-image-generation-client.md" + - InpaintingImageGenerationClient: "griptape-tools/official-tools/inpainting-image-generation-client.md" + - OutpaintingImageGenerationClient: "griptape-tools/official-tools/outpainting-image-generation-client.md" + - ImageQueryClient: "griptape-tools/official-tools/image-query-client.md" + - Custom Tools: + - Building Custom Tools: "griptape-tools/custom-tools/index.md" + - Recipes: + - Overview: "examples/index.md" + - Agents: + - Talk to Redshift: "examples/talk-to-redshift.md" + - Talk to a Webpage: "examples/talk-to-a-webpage.md" + - Talk to a PDF: "examples/talk-to-a-pdf.md" + - Shared Memory Between Agents: "examples/multiple-agent-shared-memory.md" + - Data: + - Load and Query Pinecone: "examples/load-and-query-pinecone.md" + - Load and Query Marqo: "examples/load-query-and-chat-marqo.md" + - Query a Webpage: "examples/query-webpage.md" + - Reference Guide: "reference/" + - Trade School: "https://learn.griptape.ai" diff --git a/poetry.lock b/poetry.lock index 3cc0fbee2..429d4574d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -208,6 +208,20 @@ tests = ["attrs[tests-no-zope]", "zope-interface"] tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +[[package]] +name = "babel" +version = "2.14.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, +] + +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "backoff" version = "2.2.1" @@ -1456,6 +1470,23 @@ files = [ [package.extras] speedup = ["python-levenshtein (>=0.12)"] +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + [[package]] name = "google-ai-generativelanguage" version = "0.4.0" @@ -1635,6 +1666,20 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] +[[package]] +name = "griffe" +version = "0.42.1" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.8" +files = [ + {file = "griffe-0.42.1-py3-none-any.whl", hash = "sha256:7e805e35617601355edcac0d3511cedc1ed0cb1f7645e2d336ae4b05bbae7b3b"}, + {file = "griffe-0.42.1.tar.gz", hash = "sha256:57046131384043ed078692b85d86b76568a686266cc036b9b56b704466f803ce"}, +] + +[package.dependencies] +colorama = ">=0.4" + [[package]] name = "grpcio" version = "1.62.1" @@ -2145,6 +2190,24 @@ files = [ simplejson = ">=3.17.0" six = ">=1.14.0" +[[package]] +name = "markdown" +version = "3.6" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -2316,6 +2379,199 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + +[[package]] +name = "mkdocs" +version = "1.5.3" +description = "Project documentation with Markdown." +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, + {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pathspec = ">=0.11.1" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "1.0.1" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_autorefs-1.0.1-py3-none-any.whl", hash = "sha256:aacdfae1ab197780fb7a2dac92ad8a3d8f7ca8049a9cbe56a4218cd52e8da570"}, + {file = "mkdocs_autorefs-1.0.1.tar.gz", hash = "sha256:f684edf847eced40b570b57846b15f0bf57fb93ac2c510450775dcf16accb971"}, +] + +[package.dependencies] +Markdown = ">=3.3" +markupsafe = ">=2.0.1" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-gen-files" +version = "0.5.0" +description = "MkDocs plugin to programmatically generate documentation pages during the build" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_gen_files-0.5.0-py3-none-any.whl", hash = "sha256:7ac060096f3f40bd19039e7277dd3050be9a453c8ac578645844d4d91d7978ea"}, + {file = "mkdocs_gen_files-0.5.0.tar.gz", hash = "sha256:4c7cf256b5d67062a788f6b1d035e157fc1a9498c2399be9af5257d4ff4d19bc"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + +[[package]] +name = "mkdocs-glightbox" +version = "0.3.7" +description = "MkDocs plugin supports image lightbox with GLightbox." +optional = false +python-versions = "*" +files = [ + {file = "mkdocs-glightbox-0.3.7.tar.gz", hash = "sha256:4e890140a97dd4ad128cb92174384bd0ac33adec3304bbd2b7c48d0847685c4f"}, + {file = "mkdocs_glightbox-0.3.7-py3-none-any.whl", hash = "sha256:9659631a9829d93d8fb0ce3a20a10261c258605ba4dc87a3b7b5d847b93a276d"}, +] + +[[package]] +name = "mkdocs-literate-nav" +version = "0.6.1" +description = "MkDocs plugin to specify the navigation in Markdown instead of YAML" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_literate_nav-0.6.1-py3-none-any.whl", hash = "sha256:e70bdc4a07050d32da79c0b697bd88e9a104cf3294282e9cb20eec94c6b0f401"}, + {file = "mkdocs_literate_nav-0.6.1.tar.gz", hash = "sha256:78a7ab6d878371728acb0cdc6235c9b0ffc6e83c997b037f4a5c6ff7cef7d759"}, +] + +[package.dependencies] +mkdocs = ">=1.0.3" + +[[package]] +name = "mkdocs-material" +version = "9.5.17" +description = "Documentation that simply works" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material-9.5.17-py3-none-any.whl", hash = "sha256:14a2a60119a785e70e765dd033e6211367aca9fc70230e577c1cf6a326949571"}, + {file = "mkdocs_material-9.5.17.tar.gz", hash = "sha256:06ae1275a72db1989cf6209de9e9ecdfbcfdbc24c58353877b2bb927dbe413e4"}, +] + +[package.dependencies] +babel = ">=2.10,<3.0" +colorama = ">=0.4,<1.0" +jinja2 = ">=3.0,<4.0" +markdown = ">=3.2,<4.0" +mkdocs = ">=1.5.3,<1.6.0" +mkdocs-material-extensions = ">=1.3,<2.0" +paginate = ">=0.5,<1.0" +pygments = ">=2.16,<3.0" +pymdown-extensions = ">=10.2,<11.0" +regex = ">=2022.4" +requests = ">=2.26,<3.0" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, +] + +[[package]] +name = "mkdocs-section-index" +version = "0.3.8" +description = "MkDocs plugin to allow clickable sections that lead to an index page" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs_section_index-0.3.8-py3-none-any.whl", hash = "sha256:823d298d78bc1e73e23678ff60889f3c369c2167b03dba73fea88bd0e268a60d"}, + {file = "mkdocs_section_index-0.3.8.tar.gz", hash = "sha256:bbd209f0da79441baf136ef3a9c40665bb9681d1fb62c73ca2f116fd1388a404"}, +] + +[package.dependencies] +mkdocs = ">=1.2" + +[[package]] +name = "mkdocstrings" +version = "0.23.0" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings-0.23.0-py3-none-any.whl", hash = "sha256:051fa4014dfcd9ed90254ae91de2dbb4f24e166347dae7be9a997fe16316c65e"}, + {file = "mkdocstrings-0.23.0.tar.gz", hash = "sha256:d9c6a37ffbe7c14a7a54ef1258c70b8d394e6a33a1c80832bce40b9567138d1c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} +pymdown-extensions = ">=6.3" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "1.8.0" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings_python-1.8.0-py3-none-any.whl", hash = "sha256:4209970cc90bec194568682a535848a8d8489516c6ed4adbe58bbc67b699ca9d"}, + {file = "mkdocstrings_python-1.8.0.tar.gz", hash = "sha256:1488bddf50ee42c07d9a488dddc197f8e8999c2899687043ec5dd1643d057192"}, +] + +[package.dependencies] +griffe = ">=0.37" +mkdocstrings = ">=0.20" + [[package]] name = "mongomock" version = "4.1.2" @@ -2700,6 +2956,16 @@ files = [ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] +[[package]] +name = "paginate" +version = "0.5.6" +description = "Divides large result sets into pages for easier browsing" +optional = false +python-versions = "*" +files = [ + {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, +] + [[package]] name = "pandas" version = "1.5.3" @@ -3244,6 +3510,24 @@ dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pyte docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] +[[package]] +name = "pymdown-extensions" +version = "10.7.1" +description = "Extension pack for Python Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, + {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, +] + +[package.dependencies] +markdown = ">=3.5" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pymongo" version = "4.6.1" @@ -3631,6 +3915,20 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + [[package]] name = "readme-renderer" version = "42.0" @@ -4874,6 +5172,47 @@ numpy = ">=1.11" requests = ">=2.20,<3.0" tenacity = ">=8.0.1" +[[package]] +name = "watchdog" +version = "4.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, + {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, + {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, + {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, + {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, + {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, + {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, + {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + [[package]] name = "websocket-client" version = "1.7.0" @@ -5086,4 +5425,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7b1203869463a403ae5ecbf8b3b267a919d6ef1baff302a28084e18c70e52205" +content-hash = "99746cb554c4bc04b03cb998baf428d187e2f0fa9fef3ec7667004578bb65d2c" diff --git a/pyproject.toml b/pyproject.toml index 0a52e0a88..ea2d78d06 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -155,6 +155,20 @@ pyright = "^1.1.355" pre-commit = "^3.5.0" boto3-stubs = {extras = ["bedrock", "iam", "opensearch", "s3", "sagemaker"], version = "^1.34.18"} + +[tool.poetry.group.docs] +optional = true + +[tool.poetry.group.docs.dependencies] +mkdocs = "^1.5.2" +mkdocs-material = "^9.2.8" +mkdocs-glightbox = "^0.3.4" +mkdocstrings = {extras = ["python"], version = "^0.23.0"} +mkdocs-gen-files = "^0.5.0" +mkdocs-literate-nav = "^0.6.0" +mkdocs-section-index = "^0.3.6" +pymdown-extensions = "^10.3" + [tool.black] line-length=120 skip_magic_trailing_comma = true diff --git a/tests/integration/test_code_blocks.py b/tests/integration/test_code_blocks.py new file mode 100644 index 000000000..a37e0d086 --- /dev/null +++ b/tests/integration/test_code_blocks.py @@ -0,0 +1,22 @@ +import io +import os + +import pytest +from tests.utils.code_blocks import get_all_code_blocks, check_py_string + + +if "DOCS_ALL_CHANGED_FILES" in os.environ: + docs_all_changed_files = os.environ["DOCS_ALL_CHANGED_FILES"].split() + + all_code_blocks = [get_all_code_blocks(changed_file) for changed_file in docs_all_changed_files] + all_code_blocks = [block for sublist in all_code_blocks for block in sublist] +else: + all_code_blocks = get_all_code_blocks("docs/**/*.md") + + +@pytest.mark.parametrize("block", all_code_blocks, ids=[f["id"] for f in all_code_blocks]) +def test_code_block(block, monkeypatch): + # Send some stdin for tests that use the Chat util + monkeypatch.setattr("sys.stdin", io.StringIO("Hi\nexit\n")) + + check_py_string(block["code"]) diff --git a/tests/resources/addresses.csv b/tests/resources/addresses.csv new file mode 100644 index 000000000..b9b365fc2 --- /dev/null +++ b/tests/resources/addresses.csv @@ -0,0 +1,7 @@ +"FirstName", "LastName", "StreetAddress", "City", "State", "ZipCode" +John,Doe,120 jefferson st.,Riverside, NJ, 08075 +Jack,McGinnis,220 hobo Av.,Phila, PA,09119 +"John ""Da Man""",Repici,120 Jefferson St.,Riverside, NJ,08075 +Stephen,Tyler,"7452 Terrace ""At the Plaza"" road",SomeTown,SD, 91234 +,Blankman,,SomeTown, SD, 00298 +"Joan ""the bone"", Anne",Jet,"9th, at Terrace plc",Desert City,CO,00123 diff --git a/tests/resources/cities.csv b/tests/resources/cities.csv new file mode 100644 index 000000000..ee6b058b6 --- /dev/null +++ b/tests/resources/cities.csv @@ -0,0 +1,130 @@ +"LatD", "LatM", "LatS", "NS", "LonD", "LonM", "LonS", "EW", "City", "State" + 41, 5, 59, "N", 80, 39, 0, "W", "Youngstown", OH + 42, 52, 48, "N", 97, 23, 23, "W", "Yankton", SD + 46, 35, 59, "N", 120, 30, 36, "W", "Yakima", WA + 42, 16, 12, "N", 71, 48, 0, "W", "Worcester", MA + 43, 37, 48, "N", 89, 46, 11, "W", "Wisconsin Dells", WI + 36, 5, 59, "N", 80, 15, 0, "W", "Winston-Salem", NC + 49, 52, 48, "N", 97, 9, 0, "W", "Winnipeg", MB + 39, 11, 23, "N", 78, 9, 36, "W", "Winchester", VA + 34, 14, 24, "N", 77, 55, 11, "W", "Wilmington", NC + 39, 45, 0, "N", 75, 33, 0, "W", "Wilmington", DE + 48, 9, 0, "N", 103, 37, 12, "W", "Williston", ND + 41, 15, 0, "N", 77, 0, 0, "W", "Williamsport", PA + 37, 40, 48, "N", 82, 16, 47, "W", "Williamson", WV + 33, 54, 0, "N", 98, 29, 23, "W", "Wichita Falls", TX + 37, 41, 23, "N", 97, 20, 23, "W", "Wichita", KS + 40, 4, 11, "N", 80, 43, 12, "W", "Wheeling", WV + 26, 43, 11, "N", 80, 3, 0, "W", "West Palm Beach", FL + 47, 25, 11, "N", 120, 19, 11, "W", "Wenatchee", WA + 41, 25, 11, "N", 122, 23, 23, "W", "Weed", CA + 31, 13, 11, "N", 82, 20, 59, "W", "Waycross", GA + 44, 57, 35, "N", 89, 38, 23, "W", "Wausau", WI + 42, 21, 36, "N", 87, 49, 48, "W", "Waukegan", IL + 44, 54, 0, "N", 97, 6, 36, "W", "Watertown", SD + 43, 58, 47, "N", 75, 55, 11, "W", "Watertown", NY + 42, 30, 0, "N", 92, 20, 23, "W", "Waterloo", IA + 41, 32, 59, "N", 73, 3, 0, "W", "Waterbury", CT + 38, 53, 23, "N", 77, 1, 47, "W", "Washington", DC + 41, 50, 59, "N", 79, 8, 23, "W", "Warren", PA + 46, 4, 11, "N", 118, 19, 48, "W", "Walla Walla", WA + 31, 32, 59, "N", 97, 8, 23, "W", "Waco", TX + 38, 40, 48, "N", 87, 31, 47, "W", "Vincennes", IN + 28, 48, 35, "N", 97, 0, 36, "W", "Victoria", TX + 32, 20, 59, "N", 90, 52, 47, "W", "Vicksburg", MS + 49, 16, 12, "N", 123, 7, 12, "W", "Vancouver", BC + 46, 55, 11, "N", 98, 0, 36, "W", "Valley City", ND + 30, 49, 47, "N", 83, 16, 47, "W", "Valdosta", GA + 43, 6, 36, "N", 75, 13, 48, "W", "Utica", NY + 39, 54, 0, "N", 79, 43, 48, "W", "Uniontown", PA + 32, 20, 59, "N", 95, 18, 0, "W", "Tyler", TX + 42, 33, 36, "N", 114, 28, 12, "W", "Twin Falls", ID + 33, 12, 35, "N", 87, 34, 11, "W", "Tuscaloosa", AL + 34, 15, 35, "N", 88, 42, 35, "W", "Tupelo", MS + 36, 9, 35, "N", 95, 54, 36, "W", "Tulsa", OK + 32, 13, 12, "N", 110, 58, 12, "W", "Tucson", AZ + 37, 10, 11, "N", 104, 30, 36, "W", "Trinidad", CO + 40, 13, 47, "N", 74, 46, 11, "W", "Trenton", NJ + 44, 45, 35, "N", 85, 37, 47, "W", "Traverse City", MI + 43, 39, 0, "N", 79, 22, 47, "W", "Toronto", ON + 39, 2, 59, "N", 95, 40, 11, "W", "Topeka", KS + 41, 39, 0, "N", 83, 32, 24, "W", "Toledo", OH + 33, 25, 48, "N", 94, 3, 0, "W", "Texarkana", TX + 39, 28, 12, "N", 87, 24, 36, "W", "Terre Haute", IN + 27, 57, 0, "N", 82, 26, 59, "W", "Tampa", FL + 30, 27, 0, "N", 84, 16, 47, "W", "Tallahassee", FL + 47, 14, 24, "N", 122, 25, 48, "W", "Tacoma", WA + 43, 2, 59, "N", 76, 9, 0, "W", "Syracuse", NY + 32, 35, 59, "N", 82, 20, 23, "W", "Swainsboro", GA + 33, 55, 11, "N", 80, 20, 59, "W", "Sumter", SC + 40, 59, 24, "N", 75, 11, 24, "W", "Stroudsburg", PA + 37, 57, 35, "N", 121, 17, 24, "W", "Stockton", CA + 44, 31, 12, "N", 89, 34, 11, "W", "Stevens Point", WI + 40, 21, 36, "N", 80, 37, 12, "W", "Steubenville", OH + 40, 37, 11, "N", 103, 13, 12, "W", "Sterling", CO + 38, 9, 0, "N", 79, 4, 11, "W", "Staunton", VA + 39, 55, 11, "N", 83, 48, 35, "W", "Springfield", OH + 37, 13, 12, "N", 93, 17, 24, "W", "Springfield", MO + 42, 5, 59, "N", 72, 35, 23, "W", "Springfield", MA + 39, 47, 59, "N", 89, 39, 0, "W", "Springfield", IL + 47, 40, 11, "N", 117, 24, 36, "W", "Spokane", WA + 41, 40, 48, "N", 86, 15, 0, "W", "South Bend", IN + 43, 32, 24, "N", 96, 43, 48, "W", "Sioux Falls", SD + 42, 29, 24, "N", 96, 23, 23, "W", "Sioux City", IA + 32, 30, 35, "N", 93, 45, 0, "W", "Shreveport", LA + 33, 38, 23, "N", 96, 36, 36, "W", "Sherman", TX + 44, 47, 59, "N", 106, 57, 35, "W", "Sheridan", WY + 35, 13, 47, "N", 96, 40, 48, "W", "Seminole", OK + 32, 25, 11, "N", 87, 1, 11, "W", "Selma", AL + 38, 42, 35, "N", 93, 13, 48, "W", "Sedalia", MO + 47, 35, 59, "N", 122, 19, 48, "W", "Seattle", WA + 41, 24, 35, "N", 75, 40, 11, "W", "Scranton", PA + 41, 52, 11, "N", 103, 39, 36, "W", "Scottsbluff", NB + 42, 49, 11, "N", 73, 56, 59, "W", "Schenectady", NY + 32, 4, 48, "N", 81, 5, 23, "W", "Savannah", GA + 46, 29, 24, "N", 84, 20, 59, "W", "Sault Sainte Marie", MI + 27, 20, 24, "N", 82, 31, 47, "W", "Sarasota", FL + 38, 26, 23, "N", 122, 43, 12, "W", "Santa Rosa", CA + 35, 40, 48, "N", 105, 56, 59, "W", "Santa Fe", NM + 34, 25, 11, "N", 119, 41, 59, "W", "Santa Barbara", CA + 33, 45, 35, "N", 117, 52, 12, "W", "Santa Ana", CA + 37, 20, 24, "N", 121, 52, 47, "W", "San Jose", CA + 37, 46, 47, "N", 122, 25, 11, "W", "San Francisco", CA + 41, 27, 0, "N", 82, 42, 35, "W", "Sandusky", OH + 32, 42, 35, "N", 117, 9, 0, "W", "San Diego", CA + 34, 6, 36, "N", 117, 18, 35, "W", "San Bernardino", CA + 29, 25, 12, "N", 98, 30, 0, "W", "San Antonio", TX + 31, 27, 35, "N", 100, 26, 24, "W", "San Angelo", TX + 40, 45, 35, "N", 111, 52, 47, "W", "Salt Lake City", UT + 38, 22, 11, "N", 75, 35, 59, "W", "Salisbury", MD + 36, 40, 11, "N", 121, 39, 0, "W", "Salinas", CA + 38, 50, 24, "N", 97, 36, 36, "W", "Salina", KS + 38, 31, 47, "N", 106, 0, 0, "W", "Salida", CO + 44, 56, 23, "N", 123, 1, 47, "W", "Salem", OR + 44, 57, 0, "N", 93, 5, 59, "W", "Saint Paul", MN + 38, 37, 11, "N", 90, 11, 24, "W", "Saint Louis", MO + 39, 46, 12, "N", 94, 50, 23, "W", "Saint Joseph", MO + 42, 5, 59, "N", 86, 28, 48, "W", "Saint Joseph", MI + 44, 25, 11, "N", 72, 1, 11, "W", "Saint Johnsbury", VT + 45, 34, 11, "N", 94, 10, 11, "W", "Saint Cloud", MN + 29, 53, 23, "N", 81, 19, 11, "W", "Saint Augustine", FL + 43, 25, 48, "N", 83, 56, 24, "W", "Saginaw", MI + 38, 35, 24, "N", 121, 29, 23, "W", "Sacramento", CA + 43, 36, 36, "N", 72, 58, 12, "W", "Rutland", VT + 33, 24, 0, "N", 104, 31, 47, "W", "Roswell", NM + 35, 56, 23, "N", 77, 48, 0, "W", "Rocky Mount", NC + 41, 35, 24, "N", 109, 13, 48, "W", "Rock Springs", WY + 42, 16, 12, "N", 89, 5, 59, "W", "Rockford", IL + 43, 9, 35, "N", 77, 36, 36, "W", "Rochester", NY + 44, 1, 12, "N", 92, 27, 35, "W", "Rochester", MN + 37, 16, 12, "N", 79, 56, 24, "W", "Roanoke", VA + 37, 32, 24, "N", 77, 26, 59, "W", "Richmond", VA + 39, 49, 48, "N", 84, 53, 23, "W", "Richmond", IN + 38, 46, 12, "N", 112, 5, 23, "W", "Richfield", UT + 45, 38, 23, "N", 89, 25, 11, "W", "Rhinelander", WI + 39, 31, 12, "N", 119, 48, 35, "W", "Reno", NV + 50, 25, 11, "N", 104, 39, 0, "W", "Regina", SA + 40, 10, 48, "N", 122, 14, 23, "W", "Red Bluff", CA + 40, 19, 48, "N", 75, 55, 48, "W", "Reading", PA + 41, 9, 35, "N", 81, 14, 23, "W", "Ravenna", OH + diff --git a/tests/resources/cow.png b/tests/resources/cow.png new file mode 100644 index 0000000000000000000000000000000000000000..38a12396781577440690d7d5c95d9b10266c9a5e GIT binary patch literal 3147861 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

    QSN|s)c&d^tfA~D_&!c7R2C~m?10fdi$SApd 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

    0M4H1}P0BLqKbV?ptEEc35PgMnrd!;_druI#2G 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�Pb9Q68 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

    h-Sgscabw8K{c_A4xR69( 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

    ?%}N!yo0eX5!_S}jkt|XNJBd5-ucI} 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 HYsiFqM$g|7-v5zxDCAel{#V5H==&MIcvvb-lQK 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%0A5Uszm1fL`iE=A+QIe-0e*D9~_v`;7 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%0DMAzR=t=$1S&TSn$ZGDSnJVgXf^+UJ3U#yz< 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%0DT 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%0DmxUn0C|OUDIJ zBB-y=Hkj3t%QU&0fIUmxP8T+g)8T>mpw6x2 zrVF((>%|6ACYS;YI3q}sIhppO$~hn_flrVSQ=27dVvAayn7XkjA5Rtto`PAG-P5rNtZ$4 zvk70HzaR%(@pLxxB4GSvqNr)4h#$bOovvQ<2{8o}e7OB^NpGE;yri7v(8~=|h9({V z>UwlLn7(^IsXbNZOEn>_lan+0vwQq0A?S@fLfLeh0%H^Aj49rhORtzq=8rCpycQ4i z6h+h+C1t8Re2ZUVk*dz zGs3s5f$JWho1G5G!?Mx8)~Xv$Iq9f}FuzW&QM8@X6S4uP?7wPjEL42v zr|r>XMJ|oZbxh$sO&dd0X$b9!$AOOwBSQqAR*-cOKJI=763Dh-*(M$X+e`L5`9MBL zpd>P2pP?CmcLGFcg9L!o`U!m>5lwf*uJ;B{Bs=|t6_F&v{2g7Zef?6;2c@o{XiiIU>+l z8CHgNi~ScdC2u5)u?&aq9V8=$CCf|f5w9l59Wxz=!9SvpSn`pIcI0(wN#{qt#%ARu z5ykumBoX0a#~xf<0<>;hS!6;PS#r*yBPm36!!1&UEpDS$!Eh)Y8uSZhWt!Xw$`BaYH>QdY zVa_LP>QCo9)YqcKr&9ucm|*?SBh-bo>zn2b*X5i|r{$lq{`B3%=*gHcdxq_2@&@JJbM zJJ6-RLWfV!p42_QEjV9Kq6-OuMU*Gy$I zQd|oPaN1-Sp_-qBSAwZ~h<$k`vq#`AmJCG+3(&@1eblqY2C3OYUw-b;N?O+AWD3Qg zi&R*}HwWVSJo6(|q>X7*tAFu~> zh#)P}p!fXNWJ0rcQoiU=5vqg6k|ZIo$ieGP2HitX+$G-%Junpmc%p8t$s`oGL7R0g zw6V@yx(YA`2|Y#wld4ua>8k6HydnGAgCzoO(i@f1N7d4@$je3z$#H%0A-$~}&bx7- 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�ITciMC1SV<)_(jf@z$(Bx!yz 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

    Yw;}@YvVMF%ZY2OW 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%0Ah#`j!KbTba?p(ZAi8?`wBx_EGBMxKEIfn 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

    1sB(J~%vhDYLMgb)PROn$+4&w?Y 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%0AHDJ6(Kt@JkXi6VAm*Y+Eq4J z&z-kyY0Ov{kd{XqO5?7|kWLs-^+8DCG79&l?F}h0 zDh0#AxGjYT&Xl5)LPqC)Fs|B{hTJdi>j6aA;VK?-AY@R1Dk-LAcbjJuLi0XCT=Fx3 zrW=7KVZsmzz8pMJLgV1C4+xyIk*^d5CJlffgY(IYp%DHv+$?rT6qd1j&~UTbKQCDj zzf^6BtS_O@{$&QIYT@t@G|Gsy;;JINN;{NBew*9G^H>{TQ+XIS2`E7Z1G3%1&(){r z>u;*(zZUes3c;Z1Ly{W42uY@N%M8@we3}Z(pX{kJ)QT#C=XnD7N-GBahSTH4HZv#f z-ot!WHv-HU7i2uxuHqO@Gn-TO?_%CMP8S8Q9Os!?MjiH^A`rUeI?L+?8HjVmit{U= zcev}7*zF0OERRjK=uYU{jI@Q7jpeO{Mwxndmr7EFc=#lhVE&FayZA!L)BZ;9NVr_Y zF^jxEn0-DF|8~&akbNBqNS6+|!gVqs#5F^;P?F-B7MTZav(AC_tUfh+Z*11=rKQP% zU~O8d1~md?HVEfL;(|OMwo{8D^Fv9kW`35N4M)O!1|c}=t@%dU65GLv$&pcTIsTCw z0Y;VXnKg>r2J{U2&js6h-H$&h|0<0*r9i$<(AA z4IVrJlX^2*!le-)MX6mE7K);py z@^9r!T~;FjI9@D?GT|F**g&s_#06?QI0PeXkc2$aapCD@KC5UqL=Dca8!o4%*Pd(St`l!rw zLKio;`ez^IWjVAJ?e@QU|Ka!l_>UAK>olY7&D$@(Ae@JF!DvCnnt-GLubxOkYbaV$ z7X9Hsf1k4YiuI&@@~=Yjj$1#SlL_581Z^T)@s|uLKH?d zEAI*Iv^RRQTusC{`ooUxJ?Q-X)!(c9FaPX6H8ug|`|Gd2oJ?lnUp?$RvvCXp`WkEs z@ADB90$6!EmqI1*%%%#9(Xn#n)@(CJg1Wi6ZWu;!@G>5EzyIcXxmn#_UHw~MeNmbG zzdYSrkEMB*9`uO4ckJ^y&Y4wN)zvd@tQj)`altJJF1Y6t@HLPnkg)g+TyWzH1meO1 z$-c2$|=kp;V_&slqDV4gjG9&kX-~VB)XRYacTD>8PJw_S%O_!G|^up={-TuvF{J?@)Ns_66=lG|G55M|b zvStuC0E2@=2Z@r9mSEp#F0#M|y-4+CyIk2X#e=H3RaDXZ<&!4q?(@Tw8`J7^EsLpe zg0$6?Box3eOX<{|Eeu}BfSGo>6}V&cOwA`C`d%f5CQdD5xEuqNqRm=IKs_DE`y4z} zg0v6$DjCNp?JdVzrx5vtRBLRv#nY3B1BQ{{1Kp3?J=Wi#>9^f2Cg&05y>@{n*Th7zq;KDQ4uex-| zzY1s9lG^OEhJpi_gzqXEY@5x6zN>(C*v{zQ_Hjeh3F_Ud+N_}vlK!z&ES~%6Ro5H6 z&B115Yezp-dK!RBF0bgU(r%s5jf4A)^aQyo2~Iqhr+gSY4(MgidfF3E~kU z92!n4P*FdU-qJ_#ITJRy#UMlfSXvbbeMeeouw&q&cm&ruipDHwf~j3)Fg%T(siy${ z$H|Z7`mkWhvW%JB5z}q3Ot3`dv>dY)&h9yPV>OLufpvWyZ!&+5%sr=x&fwekGn>v& zr6-U(1JY?Qa8-WA0yDdkS^7)WDn;^v8J-z4Tvkikov49HGLmkbM&MCAj(_Ya%n-4b z#+x~V8SiFLHB^)Ab(BCd@7-OT3C?7=udBCBypHEf(WNdR_MXLq=3XL@mYDjFzO4(A~6ET z2?wOnkMOOX3W`qKFdr|7fEhGcf!E)~uxA0GGAASst`MGuX|0t`RLf-x@&nSK7~mep@N3DzBT`1DXmFI3CSpa|gKfv@ z@e5XgSILbihsgf>BDr7?*~>W<;|SGS`~U+9HF2ds2t*8x+$sg#$%rwxUJ*s=#k~%j zTIed#<}T2T-J}tKO$zw*ulSUgf$x&$6DV0j5Xk>h7tB!0DArn5I4y0x*tUo{a)lVG z(qSSoe~6%4dqw?A*8UI(BwOcHGa`b@{UXXwS9h*S&|_#~lxCcb0l(~bvY3HJPj;M5 zd&3+S3;3a>ggDap^z7za(L?~)@!_rht+$p8w%u|iZWYE{Wb}n*cJoWF-}4t1m_ z1&o~m^OA8!KGTbftl>(EdJ0@>qh&w*Jey=gED{LG zJ0pJMLjg-xO;S~o=S#ORbV_W-!E=6c;9YR&jwGXRw*8F+l6e}!sta4{0E;vg9aE}_ z=?a8n)iOxUFLGAp@fUCHI~kZ9l9a*l^-NJKN`TAf6rLr2=~mEvaZ{WqpW`{jcjN!} zZ15{3k-VMTp)9B37?nFbW{)8tX1AN`^+TxvTiKlg|-M0fgn+#k(9%} zBuJMsu%u>1q?oZO4LC|bm%u@B24n`DWCq0DWLx|%kO`DJ9u~*=DX*XGM<;eexr>Yf z&t=j&2A0!4dpsNByvPL^+bGr+#F%sS@vK7Cxd<^5<9nN;n;;Fngtmra z8>8r?@D*QZXr4#Rn1c=K7aVwY%_BLt42wnnvSNPI=lfee+19%zEQUXI_|<6?bUnOX z6H{!S&#u2q7nmYzwwsmn3`*=GAkB#$QfL{YnLtlgtuX$1au19;AZi}}wsiGf&Iy;{ zPT6jxHZav8bU?Wne#cWW!VbAG`SQaXASyu4G{}SV0L!xs71CKzzF_N&A3)G6dS~Dj z-MkjO*!#eCJ=-`ze$2i0u{qfJ{MYGE`Ya56I-=zZV0kQGZP>2Bp?e8Lun_dlgZA>30rC^(?Soz zD^m^kl_qWt@856d&j7q3V8AFj`pD&1%G2?rKjCN~3N2!A=BK0PHp;1uzo zTD{JU^P&R1tF;?00TQ=AX|Oq^>U{PrZsE*CLdVG{I;RigIyKjGiMvfeX^fkD=wK^JuDU&uj&9yd? zfMS+KEURFy5fx^~eqT64PFVG#ePR}4BV^VTPnx=F-$Lj}H5=ylOg{Mf_HH(xrH2`+ z=KO2&HP}^3A+L6V3lNs>*Q@q$=nU5yT^+^Rx@Fs&t;_lNC$_*bQdFP=v|Ae)Of^QC zci$Xd?^g>erwGHq9XWWmIJE~&7b)7gSDF&cNABF;uM{D+>(20+R;tc&U)|BGyxp&- z5YM8Dg&Up@Kk> zgL*iv_Z9u+BzcfGIs<9?Bw>#)2LBZ~QYa7#woI?z>9{oU# z0xBW{-gS|B3y_7hxL7MHiD|A~y#(hejmUg4>r9)>{sN~)Bv5&sK=2q}tiNY@d07zH z7;?17$H$94Pz7GdLy|x!vX=T7C9^2+9cDabQuE&Sb@w`XDs^v@Tg-t8zzP)O<3YW} zr&8x8p8!dRAE$9kx`!)b(~ps>Hk2?!GxR)D@!1!XD@VzoaVN;PGP7)V5_5{f*QqWX ziI`u}YI0xHOUlIV{eaOiazs?RfkM;D_{lp>^PtxPnXWw$l!Mjb@o-}&V*iFiHXJP>AnQb<^-&tWc9ZUs3uI{cmW3ZWpZ z8H>PGJEt&~cSPCnm8u{OxK1AbwUh}ng<}rrabP%3SnWWW17!mg3yE5f18}C& zu4>|C6UO)=;z>n~N17f$mv4oeeUy~<v!H()GSCI! z7?>Lo#fzp0K|#V_%H$uX5ViH9o^Ql!SbUab6wEkvz6FpCBHyj$8I#DfUS8NF4@U)} zY&T)Z|CxD@^8-j-&wW1l`o4JvL*GK2$;@qFrWUYQ#!F-SZ%HX9JeOHBzWbJ zZ_kz(_`i&ea^N`v15_d(syF_?l$8e`vYy!y>r*6Zb(}Jl8|mXhv6j6ThFJk8=lP$X z_5Z_cjc0HalS8o`?!GA6WRa>87yQKaoTnGSPAdz2srHEz=oY-D1{pdS1<1L>nYMFj zN6B2^GK>!{LmyVL%lx&^_gNu(w;iUW66i>|_1x>?$FutTl$|`hlg2VQZ27K)30_}g zZP>Ne&_90Dbx78U$@Rzj7f$pOF)LE`(;nffH* z`M2Z79D7=W?~6G%X$8;5Ibq&Z!idh3dtHumac1~Fi-k+*O}Pd?$qeQ|N{je9!qJw| z7n&J3Wn9W>$l8f`Ek$_#W>yDl3|sn1n@KW*invf0T#MN^?bthG*;=xXuEeTvG?aCdLSuNQKUQF(d+1RU5dtyfoPycbi(f6N;u{ zHj;;s`3?t=UDi+$^>XOUCQ3UyZ&|@ix0C8Dmp7Y3tx?1Jp|{DF9!>|DW%+6AgY``Z zXEm9aE#s=Xos~*4sHxpvjKXkEnG#*(B?Jp#q}dRC zcn&|1iFvs;MwYR!?t<~@x(AZ;l~<)Nig%+!bM`dGWRF1zqulz-zBWnIXSpQF&MO;a zrB=(sYo^$3rxTJfrQtvS*MITjF`Wp8Behy}bqH2L=yG>=rFb%-o zR@2UEF4=Z?dqZ)wKfIIyR}(;p((8-RuIb?F>IPj0Prlv1^2Tn6IDkSAf|5L(w%gwD z!(uzp-i^UMdHnI}{hyGS6_C=2G33|G2l`P=k(kKESWTvl9-*Lv|77}ow~bCJPG;H} zDLen|#dvh}^@rKh6MZVo96>XD>sp#vH+~uslU0}5Z#HdXg?ECEDb|ha!Z*}(0t2FR znG#{AR7!59$hgsMEuSXs>nrRkxoYhLj+6pT>O=&xB>s=Mb~UL{GHeZ24jTv6@RqbzdPCmbIDzpd}s7G$#7ee0xb>sQ?4MnxeL*k0w6#fhX+it#S$#G%r9IknfpN9RPAz$>8ZS`Wmz8yvpjI# zTE%Q;oOhQnop-7d{_#2Z=bnVAHoUUo#2OhlDSUsEHcTabeL3WL9>-V=;~BiWZwXi| zToQ30AtGl(CVR6i>*2@Q2^)Nu$_2ego^iid(-f%x&1gF~)oNR@EHbxU&>W^uZ-jq6 zOd{t3iRK6mXfX$87y~~aSJ8bfEcBV}(6@|yt~$isiDY0HahmRQR<~TF`SEnnydCMZ zs(?zNwfiZ_WAqI`FvzlK8wrKPW*I(SNOqO0#N$lr0Z7haSqo^Rgrpih+?w>*yCVP= zZC+qBRY8281aI?Cdba6lm4-AwRpn^a*e_{#$EJLehSdI=D3Kjk6)6NxErrUYl9ymx znUUo&!8yDe^D4})Xup`eskt#ghdB~*@A!WQK2dat51xwSMm^iS%KqhG@0S2F`@r+*4J&{Yn zo=ASLQ)850v_LQ`&|#P=z{eCHcEMy?WI=WS7XlM_fKOpfN;YpriDfZA2)G6v4xz3z zjQ}1bbkRSoy#=LN)MVLF91w_ND&5n5#2z7I$sG`oago}HP$z-hr?cjL_B8b(n`o2mB*#*yE*lio_dfF7+F(2Z=8lBh4V}jDmEGaIyALhIy2;x~}N#$#78OzDT z0_fywv~n0!+A^W|Y(9Dma1Sr2u{ce(7fJcw$H95X-eYB4paB`7(Ghn+50M)~`gkihv*3&SKYrRSL=&UM%TrgkB+ zv5E-_EZb$J-3vFC2~WGU3nBq{hW0K;0PUsvp5zjM@!uq|1qqNcP% zf^(7~2H;mO034W1iklxzwakii)R z8mgq2Ad{a=M<_7j69@$I3Bf)V$b!GVf@<`2g!J{+aQ66#1}4T1=j9VTsK=``O(iNZ zw|Tww3Xfeyq}l6)DO|7N2SLmNgLYr`N(dlFgP6M(B9qgH1*!b`4O04|#qh+<{7e`u zsSl%z*$g0VIZg-ER4gh<{@2s>{dbQKKXMwhU=$?gPot~%->|4N3Gwjx*XO&p|Kl(I z>93#BCCF%gy_`Q93f$?oLyYk)FQ;!ld~5EOVhY|9$Bk2Sd409VQWSlk({@|GmRpPG zPf~5?Z?)^Y8!Y?is)UlcPz$9C#I4mdq ztAT(|B4=r|Yck-k)kI@81RRYSk^6@!0fym?3$U1vF`C-w=$Xxu64Q3Q?p~o7vGufS zWIJ#v({Z7{JkWq~l}N=uscBR1(phR5UZELSP|ok34$Z;kYBm)&Uep^%(u@Mgu8QOk z7u6QOZ>I85U$am|q1y=x;%hYp4p}$FC5;lHYHzzY-@w(;&suITI&~2uLf9drKiLy~ z!oUMQ1`HX2EV`qM(Ub3M4u+Oxvsx;Cxyqs=d0&4s(DP+?Q8)W|V~l~v1J=B<*EsQ- zRXxM23#ln#K8Kx5jW|sXK=CA59}BJ77!IyV-Ya42vkhmVrK8v#%Y?O3<*?pgw2Z9X z0IB*B2(mgZ5I?GtZ&4M)R&s~=Gk(z`RIdiR4Am~zz(K+EoGf)+j3j>XhM5*35@^=< zvpLy-STXZ|7|-pdDjhC~q}ib}U?;z%X9CXT$w1_W{%zeu672~8NE(H)N+>T*l|hk$ z* zs!*VUdn*7T?Fj{Ko}ty)Jh*$CeL5!<6E+A=1*!#)!s45!jN80?*&fR#$Mat6hqLZ` z)!vkVGrmR^831P`lQepnJe4Vqa5+Vc8cUt-L^)%B7uILBoib+%hSq2lw_Y$h3P|dU zl%Y|Kf<%ez(W~Sj{gDKQm7>v4tx=silU0-Olj8E4)+(PIa*Gbbq@BPQRRvd>`?pFm zlzzBu>y>xespMFKw+!6W#W4HBYy0aw6dVj&fa$LgXHtCv)YLbWj}jtcP^@xffzKD> z&CO)vfawH9`CH*3;LLA-^Va%R&b3$ewDP->aaLh9O2*e?_-Ou8?2179WpfKksxy;e zN_OAjQgpH|-VSJ4&*6UmneUzcT)zA+>g0~Wo^3svTNr-~m`baG>DI`~`!}rb&_`v} zz%|abIER2D4YY}F`3x5GEgk@V0>@z#AkT3lsFUhJ`Unyau2z+(Wh%!VYzUu`K4cYt zwSHJ6^QjRk+W9M#0wn%<7|&zN>^l;ETCd-QWTG_vu>>8q;pN%Je)oheA&>YJ>}#f+Ps*T&2cc)JB{l=gO%AgL1ZgIH~Aw%&sRVKibpni`X2_JQW|vMG zZK4r6H50c$B0mJbEUayH#oVm!@bvJ5v}X{l-~9alob|pi;TVKR#L8k>FZ{HL=Pz-^&oW?~gHS4~;67}g@x4-K!FkD}gUk0ip+0cf^@ zF;RfZbt-P(O;RCp+YY=#>$996FyZx{@`3G1)3{OKxz2Qp@X5 z`PYA;h%-bvbt3%NFvYQkAR z$$XTD^n^-PA|*zNIf^VzYTDWBJgR?16h%0ShN1ZBdM=i6L&>ST5f^XshxiL$>PdZI zoDDtL!fU`P7La(40lV%gSr?Z#H%0xys=U3;N9SfYyKC0cgg2QNki{nY&I~wpv- zQv%Ca=0pOiba_7uWloxx<)GQ*BC3C#KI@j3KS~&{rkx>jSoh?(i6Ipl+Rn{rS{-Iu zea-@OuYhJ`s8*v++vQOSv8peNRk=~PT~7j3PM=G?tFS3VV(=8uFT7;aP#>eZkldmo z{Bg0k(B`uRZyaYkLYi?Uvu=%W$URQIr?N!Tq@)?OQl|wP>as|{f7Y5AcRL+F_vC+( z>qz_edP`#IoV&=pT>AXuPgmF1T)d_NO|!5ZwVL?H5IRZ+$@IyjdwqjZ0UYuvtxjKI z!5TxbRPwzm8aDdLnn9KuH#m5^2?hF`TE(rzKPrlxrp-O=wIbJKY;$}P;3uS92)A%R zB#c{wE$A#)znt}M-(!VQ<^0Rv{qCRs`q#wkt&h4wlyzFhf(=IV&vg}Yx?qRH&Hb&e z)g^?+s4A-)7^@gxZEu##bV-~R4BBFjEA@Ig?5x(y#bSMZdoQe-KhFjdzQ+T0P`~$% z6E_#YKCO!oPQSZ=&w@;KuE{7g@P3?s{`6vFCTi~eiPY++AHKi3x`J=#i)F1dsF#|X z#gEzN#p<>6Qn%QhmS%y{&9^-{@5y9JUe!a0wI;~N*#KKfc9uSVq(mpE;m|j&Rvi%)CWJ86ZuI#l5d8Vm&tN*>$6UBs;~yeS>R3yn z)3-HeO}5`~GRwfZl$w$i6dr-Vx3cEy%lH2W9LOK^LE=5=Pm z%AGcMgd7a}t&NdB)2HF0XsaMOwcmEHFa18kn3VQzG4*d6Bur|1Jyn|xo*>#03VCjz zgqYb3)Z2lL%*3uQKl=*iPD_CHT>vEGYen8g-*-Non7G7~pI}BVS{=7NwYgSXKvKHs zs->7kM(P(vOod@IxW{?dgNoRqu>Ei0z8T$2iAwDz0VEnUP~wbz4XX@#egCml7?ctvqJT?CSdz-wsR zl)_jNkw8>=P;aUCS~x~fI20f#gY^Z9Ng)dsYEThqz`C008H5p^w3M~Y1ZQc>=xXfs zh)~yvNHoCeN8`iz8au{wRIQs=jN)IZdZa%*pS*In#Cy>FCUbuU>{C%u5KZnaXrOQv zctP?g1mztp#PoFQp~mWVUI>9wNr#bx-^ZJqMgS;Sq-!q~G0Pw7Up)D5XhBhfUV zaJMpi(ItXt8pD?ro^C{v!W-c={mTsVRR{o(gr}nWjBZW^C*Ptqoj;3v0r*amxO$&9 z(@-V?UJDomYpU1)761naEIEod+~|ah-)O@p8SRRN#l*<)AzE;Om`G5dP0SUER#@1j z5k#$JRF}ncWr}#r(F9*j$_yX}m+DzV6^wF4F5mFe!s|pg9Q-}&{AoaZt>?Tsw;3Jg2_Y)#N9u%R*&SPM zwupm3!z8v{-n2l(GNyasqL!{{TC4(fJvQFd?GP{v7%AP0_FhzbqrG8lMjAH4YjawB zEGz35f;+GRJ##JjAgGpL%1iHZ#Z(Tf{h^C_T1@3-gF@2nvsKRG&e0xUGH}V`fe7i( zsa##jb0=1`e-ylMs|*at8S}_*Y52tCN!f(Vfbp_Lz8}Z#=??)DLY+$^=^_J`v*!fj zE30^WO#vRe!Qr#cK#E(SDFvLUw?q7OEFDjC0tBM`y~mTMmzb27(^sr;gbw7?Kqy`n zih2nIOuEz>0P&>lIcZ*vMXYDgNWN?EUEa}5XM875?m}6pe1=d#L97~)BtYDCrWuH% zF9`RyfO~5v(d$pm+CEIfEA#qpjl_IWg3A=R0Fm;6?jlp@+<}}6PC86kHp_L`@m9s_q{ijyDQdOf=93B% z5i93)s9E*@mJf&ij}y}}7U!xct~pC913mm@7D0UO)4ZT(CYGDmA&32SHpSO7VMSNN zxhk$H5kMSZ!N0h$?2`XZWrleI%AL2JM9JG>o=}8M4wENIkNmGMlx6sG1NFfQ64ZY% zi^!GPS*b5*&GLrhSMcV=$@3?9pIERQ87nV8zB(71`4BC&NckLrg9?9(pOOnOyCvBc zM+GCn+GZSrJL|8<0;F8V-Jc#E7}MJ?T@4hOv+1LAo~*ps5`V@^*{NDH8T|@|k=h`& zgw5IPx3biTUJghhi7b{N#H!IqpoP1YJeOv{7$0?{I289PkT2yC{mj^CimOFxgL`#I zB&IS{9kN@`%@jG;`M|Cgm8%SmND?cBxEwI=quqs-lPsW9${PEE`QjMcQe1Gx4H{HN zlg+l0Sn2H{Tu(htRgsq|QzW6~;gkGkDzs^)y3lS)dljchY+pxQxJW-~w};yaWq4;% zP&kK4hMN503K;D9j{O50NGeKh@*}pwrQ5UTDz4(cR`0kr_=ixy3XFlOAqt``@RX&K zdofQJ_W_0`mcAw&Lm@nmB!{AX`&lKWh`eaJX>@eD{8I}5IZ1q3mkijwy1s!Z)(b*B z&n99yS-=z!_qtyqM|iN-pr;(^=ZAM+fiw`T6hV7va0OZDq48gb&1$zCM=}R3aks&A z@Ughvdf z*Bz>Rzc(6>z~qhT%a^wYy6p_y%L@hnt+5dE+5Nls{z&z~L}0&fh}(EP)~q0mFaTND z_xa%wq(%{QS+{#)`_KRJ-Oa3oPD5BTLp8ci#p-XaVWYy^ivRZeCEcIT>iJk4%4Hvl4`OSN`@KAlQ;2xwz# z3a?xY;HwHz4!c$J@@8c{d-!TRC4Vi8fcd(q$Ua&oSr!SCLdYJda#($*{s%-0h|p72 z2P`8^D51i(hNh4Aa@d?Uo3JKYUFe)*XCy<|P<=&G<`QE(5lX1Xh7`G|R_|r>gD#{m z9g{~?7A+a15xZ&^tQYI(N}&RWA`&tsf+1^?Vv$GVS5C*pvT}(Dvn(kMdEiFpIC+30 zqn-+1F@-iQjc6CikSQt|*oXQr)>uvbF-;v-Jh()|E0YZ}@)__Vs3Ejy=~I`G2C2gr z3`BrD6g~Wo|4axJCRw@$T}tSazGV{pgyVIQP7USIavi@LNR9L|%}+M_0R+B_14ho1 zQe}X|r5>K=2ICxGpUc^6aiM9R&O*fQVtCHZiPrnk5$q*_Z2_I3^#m11-Hbi+F8~48 zMi9?GT#>&E$EC19){i4Jd07d?%O27spuV5EoD|FpcnT=^c}_+V**A)o2;WKV$oxrV zd9K|AlY`x-eFiy%Q{iPjNw7lHU%>^AEJ!FxEPN7NST9>peNv2Cr&F9O0WQ6`WeM9S zF)NS_a^;WwT51zmmIz0IK)uuJ1BLh_#{j7+KEX0}(`K6GwP>$7UG-w7XC_sAY3fk+ z$y;-5z^F8V^n7acp<&n!3B^sMpVgg_%IE`&)}-5sh zXBZ(Mbp+p&OO{a};)cT`$(I9v9-LZkMzhgXO0$IW%q#APE=K0c z6x1-m3XK*hEn$J;Ug>4}Q0{;Iw!>?pH(SsW9NEN*xg$koW+{_Ad>auYzpzqRZ z9B3l4QE6k6@(#(@xsN9E;;|^V91sCL zN&0ImMz`+`W=toHEVZNM)vz^4s%R_9$T-pIR@*?%w&TjMhfac9pS!|YD8F^+oj!1?QOkxK8CV?eXPqaz! z*GEYk3fS~Bn8YyrE*L$I1IR9_DELS+Ws=0ABfII;`A7Wbb4pZ&^mUxh`*e>{k3xLP zD%l`oLI(H2xXid^@h`~%(6eZ~D~5R#Z6V;jceYajvT(m5Pj)0JZJambP#a$+v$G)@ zD+?`a+rjU6LL3`oz7gLMY=}d04Pc{$x)bOVq?~yC>AyVd{+;Y$QEE;YgTkaGEKX3G z#x#yXs?@tU?dpm~v}rZ7m7!!-7zw@++lCz&*X|&)CJh9zoh2(Cu zm*|8x2PIV^e=%(#@>3TVOoSJUoUfnsJGQ_%FAN}qn<0lTS872F_(d_4LSQfLrR_&T z%{SWxnm~=0>0^0#mk#oz8%`xfW=Ju*+@`HNhkTrKUV7P`3e%JhAEX_*K#U-EHG3p1 z$6wj3@m_2qc*a;MgdV38Wj7hRzp0+FzhVYP+tzpyz6R}RIlDl`bO-r&myXR^Z7jCN zLP~xw>uq&N=Fp0rZ=N0;&RV+*S*{-+YP~KsPJcu`gB#k{A@~Z!Uj!EhvW6#yXoYiCWvQXE~=x^XDzbu;b3^Xm_GX} zN)v0und>`grswAeA_d;R~YqljKUK^mDc~M9f%S04~2XUZGgJ8zC(Ea zzyHtw4KE)ql-XRnO}o=(>H(Nucd*;*T%C8XE+^x$;D{`eLB+Q>SL4ZKFW~)6op!KGcut%OOz3iS@K<)5dGG4B ziT<@F>_57^y;4Y7EEdQ0_WiftZMOtoOK3>VOVfd06$E^bC{q~F8QjfApVe+Qi{;?% z9Ykxq11t*5ijh2_$U%gv8>8Kg>Z{ps{Q7#k8w{`1X>i3>&ri*6TN?x4v({t&?kfq4 zWW?oZis-7@X+>DzqD~sLH|+0LR5Yt6P?gExA9?2es&{j%^pb4%@rab~MlrbOf8_eWG# zSt7jzn*|wnBq-$m5cTvAi{o{`@J3a$8eb08R(Cgh2FEW7AtTo;)68)9g5gd$S{V&I z7(#w~V`|eGDZ`xefgJ>V!u?ZhpDWp|^o z7{xDaiDT`7CDpu0qQrXpu08DQwyUVg^oIde1aHmlL6e{_H?iX6-?U_-3ulpDOj`<@=IIfEMzdPxL2+uGgQ7J>kg(r|xrK~hi#tYF8qSVS(+!&D* zzn|eSa$spHt#mPJ_E@7%f+)I5>(cU2u9Kd8{@r>1TVDS`k^CzY;ciK1bwAXHxs%78B^KmedliBBl5b`iZ;r07p7TsVRD`Eb7b!+HI?EJAuT6GNtE zVwsFuMmvVF;&Gz5kh0Zg_PY99y830BBWPh|x}Yk6^V z%$AWUj@FGDOCeD!*iHtTa}!n-mACG@JearPGb}(zUw~<`bQat%QZ#TdB+Ctkk}Ek> zNFcy;I9INK<+aW++Gea_TQS9jCP6_&lnY>;BF*ajyWqZEI!1iL*a{1yChYeq>~GLG z<(o9mS6g}3Q57!t~dbEzq%`0)I7okAY(b^8((cc#xL(6VO4 z1XNtPY=~}J=ZXQhcYr<3JzVHw7Kp8P4N)Gl&e)x&=#i?ZtLP%m>M|1iFl!EN%EjuF zg`iV@=jCkn$LNYStz^)1DJxSP4vZRq;hz2Ml7ncy<1bFzvv{( zt_PBLt9RQz0VI))1%ALYY4rdSRZST5pfR$soXzC#3t>Qv1_9JE{BxZfGQ8E=s_5<9 zt$WnlzLtrMXMQ~-e_aTbB%6ZFY+zKic2V^Hi4{(&ZBZjkHth61w zxLU_bGC=O=Y}pz%+k@-pk3U0_7xjzva)aPuTrPr6Go5e8>Bk8I&p-JW|KjKMq1|gZ zG)Y*uvB)p&Ij2pXa(G4GlFvc}Yp4w1br47;fx{0FGsU^6xBDx^q|)1uA3qIDIorITm zc4~Bu+Pbo+ZHY;PxzglX1|LfZa;1w6i6$eVE*kU23ISTe{?pT=F$5%#oWJu^^}~lh zZ8y4y}6L&OFA7?4@?^qel^mNPC=+`IWlp}v3oO| zt~7m`E@ulGsnv@};b^(rOsPPYZ@&7*z&PQQkL_GbkiV`r%kje}?bl8=?IfvT5tIG% zfs@e`01!Wgpn=Ty_Szj>T{OFkv9BhYuM8`!yg&t(D19LiA!>g)H%h`y#`5LqdzY8h zde4Kco*rtgy5V2T$sCW@_iB^%JNnS6wQiTx|MgzmVq+6+TIj;d$;4~`d}3IoF}S7F zlrz2yCH+7{R54M)5c7_?d@HRd&vb!es!&L-!~J5Z^#qGcDD#TYxHsWo%5CsYyXkk_ zsMh6eh!En!8&eGyr;Up#!ZC<#ruwS^HO-Rrr@s6e{EB!t`UJVA2QDx)uFl0~ zk`50KoV0ypb1RgH%tSsMt2dz)u^<7d9L$^EhTaPrRgc0${V;yA4}PHBZL&?65TSoy z%RP2&?3E-gpU7*EYl+gXFoW z`DYMN$$}>`;WVHJYWLQ&&obF8Q|ck4Q~Re=!Fa9kiUYpE=1KRo-Fxb2>>eX^rO?vBi|1k z5Ni@3p?jTWoDl~pc!vICWJ@P;uR0QBZ{7TEYR9iAykxn++>{_B4ttjgyOT=6+;ylH zpqLoINz*0=9lk8r$yj&pgze#*>0{B;qT0q5q8q6-J09@l_>)|sQd0JdAHv&K(%o%T zPm_<-$kpx0HO7&1%&vF4jZwo9h{bG)r`jRJ6{z-$lemr0TALFn$5bJ17o`0zG{y z|DZl!4K56Tc(xJ+YWACMh^}{lAsb!oDei= z>HM1ZJwP0k;Ny##!oB;5O@ViuTL69i1;5#!Co^ZM;rK|~Cx2P5855Ea(ZP0L2`-6{ zQ+)I3rSt9|2ejoyT(P2j;oUtl8*iH?eG{g)8}m^COnaL|213sYhrR#>VkxX$DP0Gq(gRx^)G6%>+fi zQ*QJUggZIn4ZhD?XOMMB~UPB9$hkO+YSpS5ho1|tUrtEn*i zG3fB7`E?&(CWXg>U07J6Rf$7160n;r4r%bv<&%uKsLPp05D_0z){P#HFZKI0$7eHM z?r4M9?K}yULX%dup+34B$SCF*H6+iN2Y1MCtQXUnwtGXjY*EDSvB8x9%(#sb{l0xQ z2%Kp&aDJc;C4%MT+1kveGi-ibi3asa^I9wg3v5CF_N?oAjy3t{5&(IOCs=4tyO#qD zXDzb$R|6SLsDrui0yr17vhtnewkm=@-7HNoJB>b%NGx_P2U3u$r%#gF)ZXO|a8vrj z8&N~2)7O=wZKQWI>~@-n=W^fk=f!q?xVgQVP1n=eV!2*}5MO`&q1Y1X52{DHlLx8F znq15*AWDU$zWBp$em$FyEl9nZ;!UGTp{D!rZ5C3_GMkIVaTeUg7DirI_wap3Eb$C2HJv#^g>92mZ`21`6lFrrLez~c2dKHdy zL;UAf272`LXzuR)hYz1WeR3Mi96>#L{^9qvR(E)R!(=a29xksPFZ~0_y`39zJ{??N zC!kS1WMiE>jZN}ur8n=KesJnz=ZfCFm0=gP29Aw>XFMx19ezQkl)w|0#IbZ2&^^QgMQL})GiH0kzO@;}CJJnkqcwJF9MEQDagDt>DuGUCz z4wD>w`L!~C_`$95E_`$9UkAVf$KWJ|BM8KP5t0VnAXBBA)>F%pAB9N@YQ6jW#nULF zL)(orYNr*?0x2bOT|WGTmR?bT@9r= zF@@ICY4`4K_4uiEeH+75DsM1f-(FgZGc2_ic1M)frcox9KjWXoPW#0g9~umc?g4cw z;wP{s#1zB$vL8Lv@SY=H=}}OYXQ$cc^5usR2N9H$QeE< zG;)o~82uBnG~Ecm%NFokz?1u*j<0nedtu#&(QbbBPEwrWpJCKy!$CFH`CI`!%?3o z+87o_K)#P_@wdFJ>+j^6`w)qV#O6p!f#F#!6j%Og_-17 z#1&T30Z@sSK!Q$?<`Le=*kjY~b%tb?iwCx(A;4@!xl)rdIvRx9=%FfzXRC39M-vjH z=EFs0u$%mr(hb5)0?tA}T`a+2)ReGMjg9vuELaa%H*?k@aUDs`&c<{qQd>|ukP{XB z_-;UxFVz3cm8yI7GDS_XSh$diQ2!>7*=&bs?Aq1DQNeuv*TYzCZqiq~?{6fPgf4bJ zmFr}f6wo0CnFS+adeoB?ZGdb`^h)8!v5`GU(%Mo31oB>dBxk9a-VMrkzBK#YQ-&e< zV67U5n%hSap_tjtU;1Wl7;f`PY^6kle>D2nWI)O#7~WHb5huKH897^zA3dT4BM=*( zp$A3j$pX4KHrR{cC-{qDD?$|Id&05`20iAS|)mvP7;xE}4-jHvP+{AWO*UaLJrPvd*FRd^tkYRA<0! z4nQQXRRQCmhS1kY z84RT=*UF9dNq%j1#}i(2?nM&q=y~Llb$jchu%Sh}Jj)|(v!0d&35hJ%SrZ~xnNL*^ z)&Xm~=nDJx!gireXY180x_3z(osdB4S`;G0r(=Z0XppdrHd=~l9>yy9ajTIt=F$j? zqCG0C)smvbsT$>DkigPm+`7!BJFR|WIVFYc+p`fkHf>VH2VFHu^y*r+fS#lH$Jql# zdABMOW84xp1$(8KkZ3tw(L8{=pDrMDuwt+EwYz=(^h|LNLu4>A& z;!m`AY9;Wi^X@RjZ3w7&78OfXh(l(hb%#fMS~?#t4%&=6lP5_y@Bf z4Iv4KlAg;A6+EAJudzDCHU{Gy<=`DcMGSMLy=dxt>6{6(v0Zo;_k6W3YxI{ms1>s= zJ+qHZ4V+9Fb9Z)lo>cFZShq5C6kh&j0j(1O98r2`VJt1t1s$$zX&71f1+@%85}>?d zGHY4nl=shL3&>OW945^CTz2P+!8;xfwU7_V_$@FB{;CYBB_CYpr@`q=#xu=-=svqf7#^K^Ekdt#`5rT_0=6Y9@k6B$Z%Q8 zo{+!rfXT62YfKQ*I%X8n!+0^QR4qMPDG9l==gR6(ge`Q|_Oh#T5IQ-#gN`zS+&uW_ z)1-P)fPe`O5HBAk1mvAQJ|p2^`RWH)6{8ZGlFNz9*x;V5FbDel`TO?e-FmwC^S}J7 zfBiVUx*9ZPPs%UDt9SS^!cuCQ$oE3U>*4M5Y|`!Z5J^M^*O%9|8UR?0SZBh4hAgwU z5C{?I*S@)!O>XaRe){qG{@qpY`tI`|e%tHzMx)V(U;gQAK5ASvpPzm^xcn+e?{y_q zc>nD;3JFUJL?1uhy}R3MFQJjsHpL#mnJ#76lou zqZyC?;P3xkQwa3mf|&iQdyx%()nR*_EauYW+s(9DG*dbVty+CUf^@NNb%yj1Lm|01 z%s)@p`rd@#jI`OaLcsNEGS+B(Y?t3I*W1S1+Q4gQ^78&`MjWE6guvpeh*6i9sOP(7 zr#+ZHKi#~4Z!qzWm}9-+SoDTHCl$MhwOfKIrSkA{sEdl_z$9DG7nk>U+a;n{2Vs5u zc_cW5{TY|;;BvoOvM+`v!}>P9-e@{EE$*3DL!&0t8n*qR!{w7|*>rPUt#DTycgC)WCz!JRX4|{H zM>{jQOdUc8iuPhrnnapvBV@0Df!*ZyCFYZ5XN`DkQR#XmC}d?co*OuwtAO5W>=dQU z&d~K;O&^-Q%jD*v40HvIR>E*XmKYkyL{e#7!NO78~XjR-dS_o0bib$i%O?pc<(dc9Z(7BPzs;@v7v|T9PdoNvmSPG)evM|r<^!b{-X94 zgwd*jdDK^7g{;!KtWZ}gUKtBYEu5b*YWmv zyd@bEaVDy?#8$AY6nyoF{Ru1E1!g5{luRMl@Os3J@i~4tp+$l^e`M6-Y-EafI!7JB zjRZl#--UXta9w`Lj%fJfxwnC0oxW2SoYHE_rfV`QCNveapZHRYvBX8k>C=UN@x6%# zI4!%%^{p87+JHT}flA-j_tpc5daWc73)yJDf#lJBq%a>lrS(@}N!j-HoWMp4aQU>u}OLcs#* zaGwER0WguPc6YyCy1L<=(`}tR)dp8QnngYuafn$Y%3Go#b<=iie>I08h6#NgFiq#2 zT!`|8R*7AP2J8WpkEdjX>uTId3fS6U=$yPlo814}S>GWmiJ1mQ0UxRpQK^CzSP4I` zTD1!wi8V;yPVy89EgY~ff4A23`()XCc!)s3;za}kHXU@<>ODXUsij4}B8pIHUxIXi zY^qf(22rUYTyAzA5rU(6h97pNfVR`)x3BH`lAS1;6BA#zkXBtw}2FXMru z&zKr)9^D0$R?t69s<;@#>QrDy)NsKG|1CD*pe|`usT0~V#?7z-D*GKCyilDl+H7R~ zQ8XO`|86&lqMZbVJ~-Q15(&F=LKnRX{wd-~4;^}ay_4Y^0(GBES4|rdR$-|B%Cs5U zTgF_{+^HXcg$KTINYJ-@Xygst9h?($==MqKCoYvBkmPnfBXpMY!{jPqSs5=2B`+S* zG3*B{wLO;5kTpb^#Zi;DoelpLY z7_F7VB^!_esnpa_>y-k|8dO1|i;WhAvXey6*-xg)ud@qfS%C0@)MP@o;8W;TJe1lu zG;-6bq}LahFGr4y5}zUorKa6@qeg{wqqbln*cm4+BkE93tu;YcLKL(?Xa10HOFsZF8z!w<6FKw2&iQE&dSE`CTz;{uQ!DtuhrrR2pnDbXsP^QK7ou@LfQ+J`7b zH=zO{q;)3i*C0L)I7wMv-eUX{){%;04C8!p(yI-)3kHw~P^A}wIqLOxPbxvGRMrZa zQogmGfx;;>ZYN`0f8W@-9_osu8f1W!0lVoB-r>M)!-?qn`eC`5nh|MS}0{P7c-y664H zpZ-e2?sB~~Q(!Y4U4Qc@p!Q@u_kL!j$&w4D7K>>b6zUXKIP-Qo3xT0#Ye2DRvja8P zzy9$zVs6&qa_|9zrPcO&```cWx0=AA?dfE!>?~N^%+}f+sQ6o7d55AbfPc^9$jC~J zE}G4*)S7v^^=^N$nxX!?(M||nIGA0p)kcpWv0k1ZpDu6i5rlBOL>dlIqtzMx{M2al zW$KWT2>D11hza#1sG$JISGTuPhERlHO~l6XI@nBnJhCv7f8H6rocW)t$=vt$Z$6LwO-=xn-w5gsj8*Q55#YL z`^#Is*Hv}$u}lm5iQ!Ag2tP+|p1mMdMY zI?OBiAsDYN+Ui`wx2?hDW;Wl<-K!93L>+pXkK1LP{*?GDIbZ=1lN%E1VZPYX<&`FR zMK!;M5>VnclNqsI)Vj2M!!8=$H#=C(UptZ?!ODqhVFL~qz3BwVJ1!UAol^Za9Hf@y zVna`l^3Z0jz?Xh`Z9wdR3p$k`w-`0`jT1F`Nzi^@Z(Q;XoZ@9B z75o`S(B_VQpP#o)9B??tfHX|ZUR1(athY3NX`9oB)c5-BQ?7ytM(JJd2pv9JZ>=F_oS)mOuyi z*?Pn|NC~-E4Kh|TH`t=`u z7>`DeX)(t!>y^4U;TZSEHMJ>m&X9z~9Wsz{f+=y9bVD@_c>5KKBhN0F0oQnDF;&5_7OPy;c2o0AYHAA{NlU`XTOmBT(pEeX>SlHhEt@qDbP7XqxBo`p6BUjeYNIBPnZeFyx>jMS$@>ux5<+% zkDqb4wU0Zd*}-g~nmv|XMrgx-^!vTOi&Z?8?%^DdLlB&&PO8NQm-HVmkE}uD>b5=zG#G8nGOVmbxp43r8(Am(Jh_e*}z- zMo+!VE1=I!L7PD@a{MJ&AUhbQ*E6G6mphWoMzS9y+XL9)8Bt_;TPGQ0Q1q- zm!0qRyP*81htG@Y)b}c(u!jV4w(z9*^0h>rfAsv>EHcjLaM-kmUE|Yw!@=#ld%*+e zDITlWd;Cy;*lE`*SmQ}Dl*{H*B|;y z>JrFQrx$(5PoI9G_^{n=$0k!L^%x^?`_*b@wETa!`mfLb;s5&g9G@yfjpnBPy44C* z7@XBa*`|O`w$oUxOUE7*noOs}i}+qVaIHjh{UK+stsVhP6*!HkqvdkfZZ-7EO~*g? z%jI8PUT#J|YfZKRSGVs$5lEQ#9K5@|yuRKYj}PDf{KtRxx8YNpw3^O`@7}G@pUD3l z@po_mURJa9?bmk*?Mn{~CiHrAiR4>?`fzleld~EUiHTubJZd#l(o#nvMrf8>DzfbK z;Pxgd{uBdF$SIX(wv9qufk)d*V zJ)I!_g^K@nyg)wZK)slFpL{l5qV53vrh{U6d<4}Z(U1)}?AEFjR!Pq2v|H7U>SAa& zMgJrOMI-9!8r?UtW1>VLDzOiXlTpsRF+U@6Dc{_@O=jU(nJW-0$>XJnnxeYGK80vt zOU@C&vKFm;Hb~Yr30eCBfr$A#eUKh{71=UMXUoTO_s-u{T}e*dSwzsiPz_FBB@-G* zoY>W=IZ>bD0zyQU)`tWnakwglqxLXKKpf2-`BREv7P@>|u1$mxO@%b;R4r#*aa55A z1ukc#M#}>dGEs@JTO0(7pXr=$<ZGP*~L%y!bL?rFv6!ltp$?B)ijh$Iubg^wx0^ z=Y)iPCa(g%#w!t#Kj>aTXAn|x9jSq5Nr41YapdeQwO)e&U<}wTPLJ-1a=&l$il)9W zw1J9X{wht*h5jNQfuAW|-khP!vb=FmG7=WEw41F$)u|C$9Ldg0w*_PS0eHZ;HuNQ) z{Yy384w=p11wkd7&fSN;&N`hcx*MQh8-(V~W-Yer9D*j^Cj{E?3o`!-s<9gK=>#pp z42mHOI#MA>xfpDV+>~ziutQah8UuV|#SA6Wqed7JvF3eJZc?jC!PX?>vjbzaKXAZG zSH+ilnIgYQa?8l_%M5hrT{@Ja9&ZeBVw$RA$oDucFP;FJfhUybi~7! zu_6599LufedzTUt76i!6E3>qtpQ~42Cw_54AWjT<*-ed%VXr{Yx&fI6OpOBTiU+N% zBTZaUaIN~S839)WPsCZ$D=R@PAr5I5`hDT$(YDol0>F2#1K6Cfjd>ozJ)?DnjRFit zmpbJtN6xCsezKSni@sil+JpH=h*8r>A9;mP=yByVm-B=3bw4Aq5kRB zm#lZ>Y#dY!8fkk5jeImb=^LF=%nLkIkd@?>nI9L&kGYq zCd*OK482jo(6Qhkh?wh9i;!A7AGdunO7eGXw5UGS0TLlo%Wd zc@>VH2-A@U=T~b3R5+BP$el;ZMq8g$;**R@h;-Vg<*G5zhL$hdEVL1%T81i5`41%| zWSO)5^KSoB#R(r)js0@lg@QX-II85`#4Od`#_p|L4E{>(4f}UL%yF9|8R1 zX*B@DOBPe^o@tc?o=+r3XsCBq%XO{M!5SYgr}c_#7Pa?_?|=Ni2A99OZ1*Y32u#?; z``fRcpC8%ytDC#&__1z61$*h&P+4!e+|Lft0Zw}9&fBf;``ue(BcYH-c_IVBrJ02`v$1Q}sL#fAgELc+~#=dIiwzV&+@9T9=jPg#Sfvtr%Dk*~o-|k&W zK<`p;D`}9}tySr11x1?YXsDMeCG^^8Vp3^5NR@&n=9J1P7oRR8vA8BF`CnmG`|@%z zo~SQ4(*o%D;Vh#bD^dgexeF zjC_$v1N{>Mn%wSoxqJMW)UNWXP)!#x`6Yl;HNr@od4|IpapnVUQ&^pJz>{b@;V1%B zsbM519-sl!ylf_MY_u+b4^LFD@3~dxL2xW^c8_pXX4|3(2)EijnD3F;X!8Iaaq~BeTXvRw_#%T1Y znDLpyh1CuIE{X=zPCW0(txxaxj9?jLU% zx?!!nK#mKZ*%vp;N?2tp=Sr-!6lWzdI?Kppj=BuHh?4bV&8M>3n8cz= zIztGD0Xh!oL1Rvby}MeKI*K-cqS!n_Qx3*?AM#KXssN6>(QO8_(t{VQd8hWKd6 z%XX13BiY`<%v}ctiHv`rcRAk#p689vGoG}H_QmLMPT@*hzOVnho zHJoXYhT2n3FR1mx+4&<3AOTms`xZFP=QvNY6pDvflY}=_gz$_tFxS@lfkBRMrq!^*js+>4}o^xxecUkHhz~kAd%ckuVhcSA|$Hg%t-tq-WYnn#<7UgQ7rc3=y3Pk}Ro`E+Dp? zcH6XH$*oAd30z;*?Y6o$kOBQrvg&$qkBGXa4=Yh9Gy5y+M-}PA)1zffQ%~BlbnPmK zK&QE?3P_%u>MYxpEIdppo=C*XfTcPAd}yHg(TDROX%5#h*NIWmAn>{vUl^`xafpBB z#zRs|xz zqv~J*b@A9lwP~BUdJG?Pc;y_1h6Aa4EytIWa?WWlA&BvD&cXZ>3Vp`77Xxq9!+0MX zt6zz%R4g8*iIeGc_;4qIbO@TH#mveSy07^~(Us%%Y8_5IBrJA22PTs|81U0(o^*!u zVBhn22tMgAaQyevctb~26vs(bP$M}#Q_)xCJXqkE&!dSfXkX?vS2MOGW#Cs#x1vFb z%DU_9Ja8Ob&ruNq%W3Ao`l}R^ji%OX}0UK>BsNryZ>&uGGE?vsgA!Tq=C^)UtUd zlw36ZE%q(fTr2pSDTQTYWK~`zcXV+kC?c{y8}l))0W&3QS?S!niHFsWGJDHpCYYW^ zP4%L4IgAMI@gM!O|LQlnrvJr%_MiNhQum^^1~0lEkL;UQr1L4stJRbpqoE{zMZQM( zz*v#maM6Gbu!?z-2X7kd8h=p^4ft@X68&ax4FD*5m9K6zW4=x&<~cPNAwaY+OTx6D zPSer(_CkJztc@hTC-)?veQz*8Vi$=>OA?27dHXjXlp%aeXit1G^?0f@Ne(h{+bX*q zDWjL`o6AnK<-HpX!q>9KDnLel$wQZ5YFUVjO4C>OyH~UEqEYKu5-f`TV9;)BJ-9Fm z;O6>Dm?QSMz5VwM8Ch;8X!9DLHA(*XyI*syH#fKc=CA*{*Xlj~{Mq)qTQnwn-5ZgB zu?1W|8h)kLou%Y(e)~s%HlLc3Hk!?Tzg~P+poF6^eER)w7_jBf-;bY1H#dD9j-X_! zBCM;=Fm`|*JaYGRzF?0`kI?2k{`mdiX6O(x8J*rQpr0g--qInB8~E_)ff0q(82CTol+YjD%d!6q4Z@=EmHwf^}eh-!2PYRO0{-f{i zzIhK`k;$2lXC#iAMgXIrtrpi`f8${$)2F$ITRbCx%1np!x-1h#YbJcYLi1yQ1{8B8JhyG8b&%67AiDjtrG^ToA`3}hR9-FWn| z*S|`&%G|Zd40R2;4v$GzAJz)h0Dy2hRIQ+G=9Qz^Z2v!+?(A3cJ4LU z^X9#`x~t0Fc9|B&vatc-e}^Z8Kmvq>kRN#9g*TpB2un!FAPY+fu*?HUARF1;wtH}O zb=4hmI#bN^a0Wgr(v(}}tju#Fe#7^>ziY3(_S(u^;wZ8oWKwI9Ra*t>k@nJbcy9#O z29K*sWfH~R=kddXW*F<{z&OMd3%n3oWPAKh)q@YCqoGAm^rhNt`bgCT=g8VD4)c+l z4LYN=5ZC3<&)kOMNin=zPNwy?92D6U2RuFcEUJJltu3-38{E>_uG!TPhgay$Xqq4u z?b&394ua+Q!GQqRVeY{=C&Ol@OJ6sC17j*;CMV`XaB-;}#I6(!;UuXm<)vjp8nc-q zHYib34XCu60V0V)PQc=B2?uM3&U_@}0~F;1!Ezh+dMUTNx*4FS5@D^>Q%}ogySjyA z9Jo7^>>c+0TtbX_pi86lGP=G{%fK{?gwz5B0!R^w!ToNW_{d)?M2Oy{E*4Wu;{pW| z+)rO)EQf528Ish<>(riTd{C_Z0(KIYjfK_^HrczpNrq3z1HVnAuSV5L zMYVl8KsUp2%1S8%>ccAT6vR+&<_%|3lTa=O6wY7L48NoNYBK9vW#^5%fQ z52T=HX#E56oV1{dKs}_mVz4CjVW*d-}r|VSVRyp z+x&PTOZx5a zt>JiJ+NSccO1U7h^!w903|o4DBd;hK;^Xt;f(ZD==c!@=mM>({G6!S6_1V@^TMz(5 zl~(J}Cc1H8`QHwPh~_}=(cq;2&RLf6P(}*^oxr;uHNPWx^W*Wr3zehmpXUL(5qndO z2rLCoon;s?Z%+2I7-Iy0m?-i@gOIp+n2sLA_Gz`W#f!f@s~ZE^fM&8I|4C&jP5UaO zDu+_mlHQqQ$4d8pT?P20sClH(f=;sOQliYfny70)f3FxEO!!giF*R!yM@OyEo@BWu z8oWsP9LBMwiNIPZPwMEa{fuWQv0-VG#mytfF&|_7gT0W2;cy>4uvk;nA_Wp;Qm(WJ zwOyn^LoiD3!zmeTnD1n{UAPsA7O?w@#j$VmE?{(pmu%kpHMcX%@@3A?eVS)W zwZzMVh7j*h zN+n;^RSxAS_3%E=Pm_n^X6>ZjNs8h*4DYlaWMYcvW(O)*t>!?*E1%<+DT@st>;U{}aPNFVBJ$6cI$VFMsz(_{_1vH-; z!tSKi<3o}9o>z=f(u?jnY&XSjH%=CGM)R?-Njs6aXEBojG@IVV0WoLKM9TyH+p`+x z1$cQQS`##(?;FK5UvsDR8Rd>w=})DqURB*)ySs;A11fY2i5#eZ?r?W1nKPL&$D5}@ ztA;CaX7A@iYd3X8U{{9@wsbMh%RnyE>)~f*VHj+-RRJXIOZe*3MC`T;4*v4&7gA-E zs|%Qp9$az-H(qPdt6#o*M+{C=fCu&eM)wc4ngARtxsanQd`wc-MAh7GSIP${W@E58 z(Ts*g`6iDg4TX=R;P7b*0;6N)8CsV`stf>2&bk zR9gY2+w02>F!5(s7X<0Xnn77BH1zXx6*GA7X2kYQIlV=4=%7EvM_Vl!d3tOEbxC`s z^LeY)sy3lsUNBUkOSKrjLGFX3?e6AbrXpQXEbpTV+O`8`tab$5IH`+ z|9_nq4%^}VM|XAJz2ZaUNwWK&%>noUEY<9hGZ~V2vZM_0=1-2t!y!CY#JKB@!w@f1 zle+o%*`s0p1kZuFlLxexP(?8@H5)<8GOVmjGrYZP)Vta?<{Ih>tp6w7P8TyL-*6Z3 zz1hM9HnOO}r|)d&&e=Kr#`&AKcr~Avbpn)Hs2lqpI zNu`i-RlAG8dkan4CSd(yGB%!~E+E2;0G!Qlm#{;nJAHZ?-hRYeQ?JMk2rXzbDSRE{`kF)29Ktz-uJxgp7*Cix;ryD;x|BS>^4QN zDr>>hQ>(dierZJ-VNCo3YbGgA@Nz9rgAeaB5y1r{dvwBXwdLq9u{RvMQ6RG-NK?ZR zxsDH^UQjO+6jn;@FHenbUr(%OC6S?#04SrrS5iPBu%P(-W1!08rqMqm86u@tG_+;8 z;G{k)8!uNOn?SSxf*dnYrDuh9JgJp-lRH9okxt0qQfOaz?`gguD?LS!FL!z!S&6DS z51f6~ z30(>Ur2*Ij!@wADhb7W2IKBswozRE&Y3hZQMh5C|`yw3P_>;7RsF;@^obarQN*SU_ z$4O5sYlf8r9;|`J9#`S=V%&EmYt-x@mO&v$k1M0UJyM;k#3YUc#dN1Yj%T3U208RW z9I!jvs;WFcCyh`zA1NOlq~<$I#nu3Qf<{0bW>&1BL|4K_#TkIueVv||QXt&M2hY9x zVZYm%@s(WYi`Su29&1`lZrb&@gYhNB$5zRJp*pi^T|6c-b?|^`X_%BiX-m!{%4CI;863>FAm%XYq=a)52rQJ) zR62l#YG3n=+e4c9y>!kx#mqL4N(p6w;1YQC95i5x4+pXL6F-td7-E$%&@dCR&552S zvT1BlGO|2;c&QNYlS4htl^-LaY=DSTHZK!}EM;BKHU>qoqZ`NNXWy|IY+pZb4&wiG z{iLR}mo#!7krG${5TyOKl?$a(m-P&z&E~%;jA8Xvx36Ru@u&@R z^SuP-SeH087h#OPl4t_^0GZAZ`i+!*{GSiUv&eyw*?7&WX)Y^SjnHZDsxUlF#wnRD zrzs2iMykB&5TRab^)-nAP+HG&hi&SS>{FE=opoTR<(fq+fh3vU92|yDGtOH;dmNbn zZebtqEWGpz#g`@Z3a^4|sKSar+Yw5a`9^iG%>MSaZG|+f0>^-@CY)y5Cn)q-Zh3v) zWnOFJls&I4jV^v%KU+fTjnb#?Yw05TJx*q-WLkdoL2dR?i)rxyhD2e7d&bG_5t_p~p(ysvNFsS=K2}m1iK7)#y!tv^16iP_V638Re&NoqEJG!wxB+An z2X=USXeWlMqTPB#a_JyQy(p6mxtr=_2F;~a;syX}Rj7TJj#ai(BCv#nX#a$Z)*R<2 z0pe1Hr?e{%8xqg6IV5EPXbBPS_*9ZadKgL5CDTYES+|Eg`$W0^s;owuG46Z0w`gn> zIap~`xQCtnSX$qFh)iHQ^0??No&MQ4shXZJZwn29aZ?$Hrtx|I{ts;*SB|RR$2ZI5 z5;=d(As2IpY}n)7WR%HQo_3niPIj4Oh&G(kzn%2DfUs|!$| zrVuC&q0*yW`UnQH*&6+j|Hnr{e`;xgtqlJtTrCkrO`H=iO-mN~5# z{CGgqAyn0NqpbbmXezg3E4qKmsFAJ+lr0b&-*H0_SL zQ-gLf-nfm=-~S4Wy^lAf>#cI)QHU0M(Hj|L;LS0XFPDv7f?Kwz#NFoplbr1^P6^7Q zr#kqdkZnt8h|Lzpkrnc<$^}t{sCB0M_odn{j|Lwl2^1=-AVevoK^JdcqmS?9$uM!T z#0|gQX?PrKGkKRw`H!bWC-2&HkD7LiBKhGrfBLhZ|K;U!+-+3v1|Qy>eO)(&pw?zi z34Pn{g=0m#LF?kHAxl!t&uHI5sX^lS^2mxmr^+sU-8v!o12G#VNxrzcTxMFE1mnT~ z^yPz_o1_2n_y03Y=xnoT@ke=nu7#~BY(@E#lMkQ%>Fdj1sQiQIgURfyb1B`JOdgtz z#zPvHVX|Gf+ZqiiITZ_|EvvWGV^HecrQ#h^JX@TIVaXV)=0#gha zG0*)xS?10Zfp2!hKU+8nfEz6VD=Pnx0a7pZ#CE5r^kXsguimay#>urG_j=sb`PXC8 z;aqL>aCi3RCyV=!AXTH?krUcx zkhk=P3^NVo?4HJBZnpHq%k{E*aVeP7#+m8nAwvLFbaK)F0|4ZHYs-!VjS|HCU)drs zECl13{Hq24I3&cU`o0D0yON@aK>Bv#iRypi?MzVI?mf^fPXn-8PEyR1Cx0vs=k(SZKX%69f_$Ae-w9%3R3 zPFgsyy~D@S0Dv97Qjmg@<4j<^6i;*)SbejJ{$%JDk?aHa-gwg7Snw%^sxYR})J&4o zB9mQZ0k7KutuI-YA~eW>vnt_Libp+B?E&v z2ga9@_TK@6WQCSW<>k$1B)T69%|>6?tZ$4BA#aV7L})^4NU^(^VkJ0}vu`taz-EPS zR*kC>?JQEp)zQ6RQJC%}ZwV;@7NFuVQa~PhGM!*}^vJL0@%lUX6FQZ>2igPAyv$FW zmMMn&Sakn&N>!2}Q>Y;C*Lg30PHhQ+YSQIwH=zRmmVKMNj_OOjTLKfuA#hCRjBiY4 z6NcQW;OQ9~UDQCkW{+e>kmk%R0oi={{I#Q$s6h4-xsH?AJktZYj&jR!=+MHh$qs{U z&Ag({f*b_9O+0~oBi#fDtuP|)L5)N~&VKb-i_>MOvB1%>!FY720FF*jM5b_|DOzhf zq#nOJMRuKmp8Eo^>Y=4|%H#2WCe|0ZER2RloHsEj)Z*`D!BID5BM7dFIi4f;kds#1 zFlbmvEH1Ehmacob`zKWkOA!_7X{XEv>Y*hivW7dccNgU>>FMCKV&XIU&SQHjfw>kR z6N|N8>x_7Yef^5+eYH#Dr(Ope?43-Oh320$BPs8yj#kiFApDoa_A%QNDS->

    QTulS$1Mj9$r$eE4SEf^ zewgY@Vgwg@hVrp#U~wQjTnqdV#^6~DX9EuY)%1>_d5kJr1Tqr^fZCkRC+0r;y_dy9 zlyCIz{!)7|J6Z6~vP87A97`ri_C{Z~l+=l<7GcB^f?MK4;ftZGm>gvt8PalodT||W zs*BA?!yVPQzOrLeGoL95MI?3uAYiunNt$?J%2T~kxXdEoc8+4F8Of^Mk@K*rjJ9gt zeV!!2clR<=+Ux>gluF)0qVD33hCH^s4A2uvK$4{?uDWw~(qJTlhw6ZWO_aO}`qP-P zl|^o$fY-}NfKA7F!oJ4J2B?*E3w#lW)A>Mq!?i9O);`K(Kdfk1WHAS%;$_53sgW)P z*}r9GpLs+wE-zIbJNlH%j^S?X139PxK;_3>MtfHiQ8Csr5A zCn&emmnT97!F!?AhPvo+H5I3%F474@0%UGqdH_gbXba7+S1^$$_iU2e`dLhs(X=%%v7rwqU zU2LLReOB{SN8%PTemF8ti7zV);#e(s^iI3TS2)(b%tn#yOJHmqODHB-g2|~7a|t+3 zd|L2&181+)>`c^(obCvp?<*}W7Tog2;jqwCA4?I>))dwpKH@-Lw~rO0PfOH#Hja_^ z$21Yvzc{6E5djJ4$z0b2BWPo78T)`7WM(8VSk6%k6B&I`+7E{T6`+uVsa8{dvvM3N znqGy;Qe9FpJSo@7Xll)7Fss<*-vR4N!y-?;@iA(31iv!pex|UDe?L7~=A4w;wGCo? zFygIGd*i1q&Z_gs1JOt8(4m$cPY8JY*-FO5Ev6GDCe3D52EnK~Qj}6vi9jbLjE(^1 zG}P#H$9JC*l%BCIW6e^P+hPd#MeNq(qN)@H2)@>A&8JgE29=79_RCsj@-V7tV5V{_ z6$kHsH2g`hX?M;TPm-T#vUSwLs~(sC-l$09MaGKfum1c0@AO5}n6293^F#*rz3_gqFXh#DI=s{}g7M-S?j|k!No3F?qrPgYN<%&7e6(t^Lb*)lXB@g)4 z{OZ!_lTO(43~d=HV^rCG2h=vKg7szMV424h^oEnI)S5IjY6`e$uA%eE`1+f#@j)Ia zOU%*zeZ5^*`LXTm?WVB03=5?WRuvZT<(>1Z)oesIqcK{v&=lo>XZmAlHrhRAq!xmH z0=fbO0KE;ne7>*xPSi21yw!MQxP)@d`MYnIqaiOTW~Ve2dI^igy2uI+5QG8HUc5C} zah%H&v4R>2s`a2rJojp$YXYtpLrV4bW_%BJpts?2RbvN%kr6uKm6w&N#C+gJ_&)et zC1^-dtjNjzy|mSnm(8N9F@;8e)9R7=076R94h=%v<^|eSSV*jo!aU=_RZO?{Kaf;7~{o3-^;! zyLAIDN2G4J3inYY8f8V{)BtF$-hq9ZrE-b~g`kRMbdE0HB@82qh_IdDx=6`CA8|sx z^B47B3@%$dbQ*IMGJ0Pz8ZzGt^Jlp|=J3wgqJ(TjzdC?Hw}>~e;MAiF9B1yr-|UM7 zi(>y--Jr<`+u#kCodk^=QSvuaeH>cWK!vLtpEC!%a&x)UTTiC7*I(@(ZYQg7<$xzsahmhVR`K7NxWETbx4NP*@$|t_6->zw;P!l{KgNik(kU~Af~~D6 z6=yl8GZ#LHYnzc-DnH!+mytunYxFSK6#nC~c8ciQ(BNj*9Q5A@=%7}`O((eY2T;7t-A|IIEcTXk<@Z;m)mQ$2RBv!+49#?WX&%oLP1nqianII%$ zB&16AhpUEzD+U3vp5ihZ3tU?i!Jh`fVvA=c6R$Nm5{&CHN@fmmOvfisi;oC?Q#PJRK!hGOQ|hbuEzz%A1syjM!ihO zO~z(b67AyISz3l#Eq``Y(SCWkkQ6anxz*j8&vV#)c9WjMbm_Qpfe6)2RXe2)^%_a$ z80lF^c}nU?Da0wqQ4AhNzc87rH0l;-U@@4Y$~TpdiOFgj){XH=BQ6Uv1mSB3?>=o~ z6R&3Ctc|&r*uu?-f2nCG8pIJ*(j*nRLKJsRuFg`OL*KS_0{h5td4Q>CaAliMi{vG+ ztoL#_jPhU7X?c;j%!WEC&0#uibn{`R!d9e?1axLjMyfsN40~V2(yOr;yb$Docb%B& zPysC+-{fJEPle)jJh#XWabc2hmb}e&%#g(>y9~L*7Q*zZP{>Gj0{|Fr`h4?GV>6T7 zQYwNORL1~k3196oiKJE>SlUw_JQR4G$}qDw!i$5(r_FPJ7WNe)PCGp{u5d#UP@TT4 z#wQ&P`xf&&Uqm^>s2R`Y3L9$i)*ozKvqnDZ#cDt6>DyB>Ov;j z@fGx_XqR{tuTC8w^pI#2g*Y?~!H*#&a!yAKuEgJP^1uDD{QB#|^GD7fCQu70%Eg%l zqNfX1=Y8ts6ID_QooQV-2nplGPu}@ru{pGtzBdEDAZFR1as&Y7Wjg_=sN_qQV%#z^ z*HPhKpR9=*v8MAV7K8g*&yYH&q1{Q%n=wWHX)|A@8d)jKfAvqQU;TnaocI)*sH2vh zTCv;5!Z0bsYU}W|U^H-wZy{M-VI()IDeG4M+(GU2Iz1q3r!)1kNazd|GqBz826~J; zy64R6vDWI4KyQ{{NozX1L+Qfz)HQ96Ym9QsMStEbR`qtP+Gsy~c;CN%%{y$zn2{4E zVn_+-FvO*;OF zHOKzLfA%LYEPHI&7sGp=8ka2@$Z^WfRFRbWIIky!cB?_!R5n|dD5%qJ@`tzXl;sAu zA7xPWa)<0<^l%F$qM6{d;r)XF!P#H?mx&%Tfnv8lzqoP&uXO~y>`fq;4+p6i@wm2$ z0ORQdd$F>FoR4Bzqiv$`^kLlVHAf?&7?6gm+Vb_=ukJs+uX6#}6L+tmYb66@;?dv# zJO6p6P|P#Ruh?(TM|YEP`AF}!3dhNGGglEMp>c9J!Pe{bW&e6jWh|AX zSUoPR_2(&{JesjIH`AbV`t*xhbvhl;A$j!LM7-wp6D7%U2)m`{Zp?Z*yL_`+ z&Aq-_x4oK8udd$ReEz}JoL{`=25W(@7W0<5e#wXtwCP*5L==8__l1_{C-cm(XjV~B zAtco}n_12ciCnE!*Ffx~v=15a$-vrY9Rs*Xd@aO!t7E}QDu7?LZXtUI;!`&S_ZYM=y}MYohdQ;j9-ZJXpZ#JtAhgpCR=M<04r^?`Td~M4x4CaCU;BK zO5X|P*)&coWXG!NIy?~VzA>~gqW@Gsw^@1;0L5Q*D{wtk+hppjn9`eHu6Jj5pRqqa zO>~xdCx#-TBqt$^Gi=Y_gO8BC{(TXXNJ%*MyBHBslUz7dvCZeF6WY^%DI=z(kIbFLSy+b5UW0F34k3r2D&4M}_a#Nj zwLS@yla@N^gu)V2o!E#MH^U5mCDA!#69IhG5nJOHxI^Suf&jyx?YD+_h9auAHj`VA zC0vnNYNMfe6dk`aFBc~P#R`k>N3l{Y7AW{dbVUhix~zbEwc=oYl16+ytz7gKi^HSu zR_R=`!Ww-%F@lXl<7TMurJf!Gp{h|sp5+KjQKc9QDZ^VlZNF@ebIOix194bU`}IQA ze6bw?g<kN2s!kta4(C)amo= z{R2fHr9Y+8|LkRF?Q|POf;0cgk!D?P?)YoHO z7WQ5hGq-zqD4unn#-r?Di(CsU@=3e@o7da4LJ@()rlZtoSguf@=SIe6I-k2JRZ+qx z`#IAs>z<@38i05Mdb*7k3I{2WN*mB0*&3U#Rk77VmP4L?*UQ+ZOv?ULfj>1M()I}V zt-9s7((Jj(jTs?f1av~{@3dYws*V7(W(NBZNpFV*9HXM0&`wRhJ+_<9JMJRdpXhp7 zc@$54^_MbWB1L*tpQ$a?MbWzP;#c7Ti~Tx<71Gpw4sTBSZ~Z|-b`mM(y@Wsl%Wet2 zXo!ED50E4wr-g{TWyTcNX;Raa3*>2r|3Eq3k+etC0{DPsSO4)LP&GdEaL9)OP)FjK zgPsh%v|?KXai)X9r$w@fnBqpM^30LaAMZW%2(yn zoCx8n`F5T@4c;F$&m}9iw%OBhVafxPvza8`&I=+&j~GuKsbV;9MC}e0_a!t4e;%5A z&QgGu>=#v8^nvwvT4pD3+NQ2iflDh<+AS0WB&WCr(M(fE$b0lW5x*xW$5^UkpUVBf z*3m>?;~_7NZJlL6R+_OlE<2%yfsa`ZaeEdNzno$L`SK?PuYKPbd@_=o^TdD+&a=rHf6+Q0N6 z$>|XtwbIlF#*8ry|WV;Wo0h);?S5#E_GF4Ma8>Ffb&6HdJ?p zNqqHKl!}Oa6b);V9+I0<_v)MJ-FrM4=MlTWw!`<0Zg1E>!g%CK&Vs}E5bZ6_1y34? zC27Mgre-CG3hj3vKc2n5%3dRwS(tZ4G_RW2q#z)rbB3&`svxocS-Q@=*zIO|cVF*c ze|Z1?AN;{T=c#IHlpPxaj)Jv!7Vo1IBY?N9Ce3<-3Wh<%{p6mspi+b2dfa~AyuSSO z`L2q;7Y%a$tjNwy5N-7Zdx@?PsTO@9c8;aEG+g zIl(IwdKun+0^&Rkc=V$G`tzqxV8`2UzrFeRUeMwldUbi7nG6r3%WDer;~#$gn+6W_ z#Of#>{k{M8KaP1$vpJbA=%c7`g-X8l%|pY-bTK{azNKpu2{o=Z+GpjL+WKV#$9wE% zd^bx%=LtjrwWGYf4+@Ue++e1iHqzgE*6}tudMOY&)#c$(3mTi2HXC6Ud&OUDGVRdVy~kmuEy5jf#`iJt%6l&-#W*H`{8X zygw?-@c?XY^e*SC2~`!@F4EIt;&5tJ*%*?CkZ=x1#n~rSl4`Nm058mru<>NE)@xjD zEzixq*=N(C>s$`w_|cj7%=PmA{SUHVr?Q5O#rU2M47Xi2ZlX|{4(=N|GTp*-rgImP zmXg4p2Nak{4gmJRexP5v6;rCJTaZAfT{v#N;e%G*u z?MPXpm<4WP+>=h1Dul6oxT{~jPPPz-6GByEoi!(HeVh0~^N@CY=8uZC(Q6g(J&D~= zRK4yc+p+Q-1pNH=#;UEb8h8Y-(9or=E04M1qsr}$f?(j}rZ7s_d`62^z%BAqx=+upCK#MbgrdA?7S6n&F|xNAXG30iZ0yP;C{B9ohuxX; zgJRMw6tR`g1X<|%op8<@lAiGTK)=6on5`$&HPy4L=QQ-#AhGxHxWs5b33qaZ!=OOp zp1N>f?7Rl>Qo6wuVK?bhp)~kdtX#77q{Lg4>Ycp3WPtIM566bxgcrgq(-GSb$4A4@ zuX>k)fI~mspFZI@g%{`L%X;vt&_a~@P^!#Ay>)05t_3@4N8p&Tx5FOSV~sJ^tQp5T z5vin^D0AWrZkKq z^|IA&+bT}dCEBEhV|q$f8csbHN$wV}9UrhI3H>2CvaEMJPn~WqGMXRzf}^N)DBIsZ zmO33T0;i&7PP3Gg#xoSn9QFd51nGdi5%2|TQ-Q)^Ds%Gy@#U!!=v9SBKoe7+XVcSK z>uJ9#>hFZKJXNbfUz%vW-yF0tzTEqg?-ll=doSfMMhX7V*UPSZhj~qd!O6?x?GMC4 z3Q(D1XRd?%nL7+i4YXpIMjv6Ns2EHjTnH~f+yh#zXeAAdk`EmeM^EV?woUxU8w6tZ z%4@sR^XnjTT7`0%$-5S659A;mD(L7%#=C~tf0gPGJVGI;(?^arZ298<66J;s&W2X(Fu7KkSC>veUSlJ&D|bU@`mM!2zW72 zl3;Ov!HcO6aI2k7l)&r@!OSVb1_A1l668!1`58JBH95`Gm83sMA8K}J8shzjEMA3u zx6AjwG9T$Mz1@4{q!-&+GBB+0VFGnPs;jld+-~u4VT4Re#BR7?Zk%8&+t29{l8OQAfrmkm4c54>`5MEW~x=%|1r&8p8tA; zclNV~LgRdA6qT~1OYv)Tr!X!)NSskwT`tK-;xiVIN=fL+I!nSL2d49 zcweQoL|3x_F@M?pCZ-S@7Kpx?8NcG>Q#Ofo=}{N^U3t!Nt9>YoZ3|_@L`ra4ghQrS z!%&(x72gQ+rVXCRL9-)C5+l-0l*OyZK(W+138RD+ps|$75^G#3=ORbf3N|7@xmi8Z zHzj_-?cp`{j@0ynS)!W$O@q`~5o=FfyfZRsE7QODKma|qY1aB4%PEv4m$0U=h4a}A zi@qRo^98(@+C8)~F}Zliz{m5fHR_HpN(v}ZhWxKC`^Xd)Bidn}SoE&v;}x47MF3?Y zL~6Zhl9M&E9uIQRAW$sh=RNm-@$*!vO(kcIxHebjiEHO3V*RJqd4J7PUy0S|+E^{V zws_`~fv`6I{+E}({qwZdcKf5xKPvfrM`!c>56o^G^(uEDPMDlpaEQ!IPxA^W&Z^*n ztiDxhO`ME0?ZrAX(CfFCT8bUbID7MyEx~rja9Zvto;{3-$G9HfzxQ}ol()rV6K1dn z6e}FK&+Bgc%+LZfff2@^KYk=W7gW^|=MOh;-(G$C{NOYk4{u(-`v!j?{cCj3kqeVC zkE7JQ`&ZWhq}PG7cNn4g6(NrP_rLpJVD4+h`s1tp{b+r4rW6RS&y|4A`WI`B(+*-C zQ{!<>-}(t(xXa1-^YhXEvU&EPlmOg6!x^Vb_OUf<>U1`l&W00hm}k|(*X%my;~b@S zxjj)-!$)jSo$&Qmji(O6rPV!K8oYxZbRw!>y*w*=TJySiad`DkcQ&4QPeR3Zz3X4~ zm4aYFC!$&s8Lr&O)>^Y%ctv{JS9lfCCZlOxm7#l<5d@-%O1iw3z+I&R*(_z-?7LSN z$^F(5)}t`ny^Ga!L}J8^LY0RpkqixC3>%p?U^v};G!aE{PBiQFRu|f{c|2vAPrGjl z5b0`2M`rvI37oWbOg`kp6&b7^XqecpYy>34Ao?Tou@-lO zvWio!rrz@Z^QMpLl^GoXru#J=GlM$?eep3Fh2zi>#CK?q!cPg$l?Wwpl`TONi^Uf% z&?k|(yB~y(Yiww~*||co7%WUu7hVm+6So;UE2}`6Pq@p#hr=7?&86+Yb54EPX$=7q zLBTpkg$kO7db$S!%Zd(kB57vKRZe)q8el>a z>`pOxJbW!65Cn8~%cXX6;~5Ii-Y+)pz|#43RxL?Ru!$PKK7C(2gUF*>AZwovY+oS4WRLRbr4QYN`HXdiRijjqOai=G~eLm5gvY4>vqszk=02MBOtSSn6VK*uLk z&=w~ztHHk|)j^ak#R0&j4%U5|XfT8Ai+A{7p4}*bg_HE#&hqAx*c>r84d(~Y>v0EMEUQfI+#IwY3+N=nlo$|MRebjga>B#p z>&LYtI+YpZDA2}EVEm9tdMZ>~raE)IH#%MfLx|1EeOxJ0_z*P16RKy)4ZI9r_k}XI z(z4YBO4F+kDI)llF3fDu14jUCA?7nAN-JSHkN0{B_&nmx42OAAgh@u~f%=6cIVYOz zBcJe|w8CkiVl#^V(bXm1lSG+c*;A)u0G3wkh& z#S9lleqc!)$e?12v__7yVp8RSvo|XGoKHYW2Cd(a0|FA1`t}?ILsw8B+ ze<)wPc{LwolLZq4mjkEn0Vo@_OcW# zKD`?$O9p`YLy9UwfBJ3QDfwl|b>@$Dm^e^;o{o>Z-RIBWAD@5aH<`oO`<`16YM!d$ zhwLv^fl$0r63|Ln1E{(~p5Pg!oDzE8%Jk}SN%wa}-M}(ia4oyg+w>w(D~CQDsukGX zjdIj&@lDRm&!l7y8<#55Rt_B|l8rQ(?A&`k)|oVZ|EhK_V+2NFXpecEle(U)qhe-cuxK<`RJ3#ujjCREAm4?6cX*np5P zF_|s9fY1Tikih&lbWYAA-DhQqJ&`?%=fGquM1cN!oHWJl5!hU(Q|r#L?i<*ztAxWF zH9A~OX|+N-YFv*8kP4?arM(lhaA-otE;=Xpful@lb>8fNC{`uq^3}SP)RDUCMLf*r62ome{%of*Y2{Zk5PIhODq-LJJwa_ zm4`}t1o}r??t&2No+Fir{N&_W>g{sJx6B@5OoVrk3QEDv2ncX;Xr|R9X#VcU?>ojB z`Tf%qH224w+yCd!e)((+aN(rc>=KPOnk~L99a^cFMyAu4C>%GB#$C|Gq#>c*X?MSS z|Glg$1YM~?p1xA7hFZIglPBYVX8@r<4`|3(1U7Y;;r)GN5+|qq{#S$XL#-Ywh`amy zR)Y>|^6u?7^Enu};(l2xd$|>Am)jqIU8}Z6_cs@peP3N~7@Zt*+(xUO$_%L$4fSzKcBMBEON;`dRC<1jy*Q5{26O2iL|$zUpUGmsxuSZ z8uhvbVlEoR3P+?uvo@UQK-c%ZVmdupjZP+$ztU^m-`=78-u~?CX190y{zuAtqIu)q z-hKV;ufPAz`SrDoL|?NmYz&Ru(v}dnTkY;*G@LD#mv69)n!D++A$S$87j4SUIk@L> zjUw6CJ7;DZM6zEjXbzS+R2y0q%p}^32lpw+8u!&ARj2HX#le_3zNv1}1h%GkL&Kg4 zG>Q0W_~?Jqs6hyRbgWywe#R+QW3=G;VA_B;BmAf^0EJTE8li<=!0Ft5X?P%VH=Hh~ zy(l1#8VIX5dA^h?c#MD-&mxR%-y7><1F7H38Aw2pc@SU?f zCh{vE3mH0}yhvgLE4kdLibob2YCq;bxX&mr1qMJvxznD+YjT^89vv5wmebHNu}qd} z0O&wV_NUO}s6bfqTqnz6NV?V-M~YV`6m!Rn>06hXGHm6kFQ9m-$wdT77=R=fG`AYCG^sf3{qT-%nwUoRiz`GCUfdk~k!`?(tVhH%LsxF{1Pe&Z>+o zbyj(pyUEP(EXPtDuQL$f)%NDc)Ao7#5#7GGwV0{A>7zxkIp1^cLH5Sdb$f2a?b=o7 zFCq$7A36z+_>F8Ii`~nF0(TY`oT5x(UfCkpEV=mTr&tVmyJTBlQCm_fEKpV)bTyCV z_C>&%ZR7l>ljABjxKAcIUnGIlgy$Y1BU#F3rW3b@SuhrTwXCH1L`K(i@}W)CQnOlA zI}a)X#EErIHzIYnO-fDlx$-($S(-Hb@L@(I2KVaZbg>%F4abQe?rP%sgMgCNL?LXL zf?h02d1bH?PC_Vdc)$A0DwxqcV20Qz1Gia~LHLEDY8r&$;AHQRG89=pld% z#7|)Kq+kearDjtL8)px}604x3A`#3h2K9iGY-jn23O;53bD+bqfym2+g!D@c^f`Xm z9w}&bT?`S)yWu?no0M$7((l0laVPt-8G{u0GTq;rmnWS91qfZprB3TL`5~?(#+~@` z2#}yg2WvDc7MP8cN76Bml6knGV!b&6X~i<6CTwEx^%}g>ZI2;Un2Q} z9x0W{M&s$A^^&_n{F|{-lJw6E)2W0{8Oo=5VS%baQh1P&gj_yvJ%M*Io1*?7-N7qi z6SQ(^^?}7y=P>17K^O+OaS12*{B`Eu3ej!<6t!ghesY^jg2t<_MIp#0foZ*~USDlh z|K$eYofu;IKgm@Vr8eal=+B?qjhrak>GuFcISFyEql=oE<^! z8N$1z^>I#QuSs6rf+qOQTw5;RKW{m$DXPi~?5D@z187G@n5ZJbfU=|61F`x`l`q!h zp%O|JE%L}@X$Zq&Q3bpeQYuY!t%W5dnAEyK{6j$)^GJfI1ntb=5c{4?Q58b7RyPIY zL&4l#Z&y>QI<;18V_bI>s8fv94gs8~a0>Z4z!%tSN;M`_Uc<>h=b1ElGXl-djiHLhj&@qNYE;yp8A z3XYYoZl`AnK@($JEH|c$2SGt2;D&a}b#M2# zAAdZ5^IHUH>8mxEx!xGue^;$^3^V8QIGK`EdL6u;<{A@zdi?V6{&TfmYxg>yAmH?i zzxmgG^T&V0Z&e>gy<^ld?@L{()!AsQfO25w>W(^2mG?j1l8pB+ucwnCy6y7y*OTFm z4e!*6Nec?+AjA~V3AZ>6-+lb<_18bQq|DDE=>ekQNRV4Knqa2UZj2v>vZ;Eb2i8&D z(57or0R&^?!wPIZOy=su0i(@vxVWATXU(%dr47(yRp0^#pMMm-tl{7mMY)Wvl~9(Z zqpA6DvVz`Oe>50)bPmoc+ond19!UUljp1ncSDKKu*ZNJ#T3igqjh>;@6#4$Xk;zlW z7u1-?%}IeB`MyGEfE#Ql=++{v^1wE1s@_-w2R1rW zkvck{<)4T=~P|vD^T*D}XS#)6a+Imbj-7;>;dw}@;t8+6U zIOzo2nU`|66`DM~^I{q;wQQ=)J)o>1)svMSj>eT>VikI3XHDBt--epjvO9ppwHe~+a*QKLNCa^KrjulUPxP$8#@#P(9h^Nu)qU^ zIduJklFP}g?sU;8tkXB@jDn^>{i%+hh(ge=FkKM8v?Rl8)tmP#YZV!Q19&E9bW$rf zA(=`o=24+}d|^r=*n0Sm*fjP;aFt>T47Wm=t1mi#H$x_3$9Q_h!aY&iCigA15^}0jYl?~{i8;h0Vbdlk&*XC# zJv#Fit?j8FrknQJ6h@;uK}#)ZkB=t(nLOZipOjCR4{->o_R+=@N>j+v5|WEXOohHO z)&uOOO9_V1A{iS;GC|3)EG11Nr{?Gt_p^b`UhQ6lt9G}uaS1`5*3}7knjPxluV*KX z4j$9qe4G!DtAqsHX|rgk2#Wo_^3HLMqCnL zwU{f`$d80{ONJagmLS%o!C}ZOg53~`$v~}3yB}?7wnJ*IvRpLqmNCqvj66yrbo5BP zK`F7BTN0_fr*)OY-zO+07&ne*@inY`k(9 zy64{P1j#Li6*`Griv&jLeOK-GH`8U=q|WiZbelGxa8Ygfpq@~7ecV0#>a_O_9zr9p z|8nrB*_|^fLFT~#Dz?aI0BQMtMH8h0qw5KbiW(=LyNAYTx;O?w5r|7iW0P7S0Q1ZR zCe;r%L$DobC=sbPZXw!z=1IrH4U*3rOoZaQrAI}5roy-r#iiR!ZX^7LUm?rEFL>G> z(<|j2tN0T%!wUlIkmOJ%bggOZ?q452R+)NR}*Hg1(8mtT` z8XhSklEgZcNa9d20*}*qrZFh2h1#%3(JGJOFT)!6b`#U|+UmLnUoCeYrU#CU$AEHN zaySX|{G`=ce!8jldWR|#rDahmT+IXPqJI7|__LSRH_$-18z@0Hi;96_rl;h(3F0}% z>gVBD-Mx688l54q90ML1T)=@xJLcr`uYdVxzxOx(U2K&FY)3_zDa3hgNl=eOd7%p< zV=bnGIw**>nn@Ig~{1948TIIRvyR&!fVbjNTXo#LlWQS0W3juk&n^ueltNg2N_D<$62%d~~D)6bW&0bvBv9MV;$&?s4HSJu@E*>*Ws3!mKiSo7CW}O~SxkyOphrww}yaZ9@T= zl^&mbzI`ur81>~jV7gOtSg(5L7b}fz-m3S0tRbAJuh4IH=VrW`#NB8SiH$yguQxR! z%l!}}Qh8#bPm0v)8)tJS6b9Q;rs<(dp^!;D_-M{+X z_y2--4(g#?(to@X<9_z@Uwr=fn}p$~o#DQnYLg<+)Pl)9_s-exoV6;mF(pp({7icR zEW{+^=EJAA-@cnX3(WuM+ z%|}?H2YPr$E7Y#i0NZq8FDyqlq-UFSoN&cv(VU|em=omrsb^I4{pbEy?=mn7!#9~i z3sERUzXkoZT@vLCGJz{{`|2$Q2c2$89>%26?MYk%gkGNOjg~ZNX+4~uD{y58&1OVs z=xMutW0K=?+qvR^nmm0n9BJ2HYP>P;x~W0MhoHaQK`Fc{8$kQ$IP(b%;IjtI*Ms^{ z^Du*R#KWO1fM9$zQmlD#Nfa|P=q$b`1;I~IM?;P@4Mh^iE%19WZ(d%LA;_$o=Y58U z`u;r-6l(YFPi(`~iWS}T<^ietNBZ&k)T57PqTWh*4?zsfkwthw#<9EQ-uY}Wh~kEF zk`yRi45XVevtiT=mggl3*3+4Z9a>++1c68trn6ApIiRnwU<5dF84pHK@+-w!Q-wdr z&*Q$(I#_25{*_RU6O-mQFu?5QHSMQP5fiNPm|TaJPmrJWS~W zT(52`-9FVZ73WVna9X^AfaWOCa)OR=)K;%v%M09{^T$%(F4<|eRQ_dOY|++tH%LDc z>*Jyv!GzP~Q>a%D*Og;uvs{Ox*1LE5EH~pjhzOjv_Z(de)-dIOhh*8#vPN@+c}nj8 z^kn{^2fJ3R84AQk4^D#FB1G5Z?{=Jh8-iH2)KWnjC+!%AsN}Pp{>-baoJ!}+D$90` z#0>9oR62kCJRSHtU>;Oa*@=0EjKhPRPJw#oBH|(yj?|a*wnWnAfs2hk9&2VLc)O#I z?+qu^SRYo{Aw8RD?a<_j<-rnKcp`|5N;$?$7l+*<^JIYn%s}RhFS;GvJI&i3<9xtvbKN(_*NS#x)J-R z687PJq18}XbMbH>B$KMxVQYMW(3Zi|_`yh`llq||r8(I|_)Z6Bs*=JL5CL_XxgPRLu8`(ZP)}&E#99tV- z3nF^J+r`S7lsBV^al=~;KD~arPogFSO=-#mfQ`S=;pqnb3+9?(OzsvbT+JXvA4JmV zed*`7o-Ig-JynM!uqV_{NmA?tI@V&uiAj7=Mww$?Wy$Qt^$IrA)R!8BP%E z_no+O}ifJQ9}KK`PF_r!EvaUlGnh$hE(ahYl%P}07>hF4GVoYrT+T=}bdR(1fM&fKFOihV!;S|m zusY8w#Xg4}_5tO>cJQg#yzrbQRYwOmU4I`DkSC%t#Ggr}!~=q^vbnxA3&e;^=_pBA zC~0<}hHGb97mA!t(-Mc@tl5|dD65TcD`#)S2dJBVG9Pj%8pQ{Q7baP|s+$=$qIBfY z62pTZCgxp&BZ`gg3f;FJXo4;6O0q+&h~TMsAMCsxjU{eM+SZlB!ow-{i9i)lu@E_@ zlnEu~g1Ls|ghf**glG4NG@~{M<Pe>;@3IuF1l1sK!4xgpLq%h1 z*~c{EzN+?L3|uB&tAixwgdtc|&Y+he2hi2D4f&q(r=Em2H;RFx1F~DlQfe-mi=#FHWlbNnb=sf0> z5b*U8R?}gfo)R1+_L`W?ogpPF(UhI!&u+f|73LloST7z5)h@$NS&0ybF~->1FKAxJ z$$G`qH;kf4s~^D=+CbMpKGUhaPEP`z3WjgBn6_zxO4Y@D<}gK}%szalu+jbM-S>a` z&))s?cUVKd|KYp;^`HNd4pP0i-+uFT?A~|VhQ^{Jy{meV(rAV+eSP_6x|poCyH>k? z|M{cB$o6U3?_9tc3#6z(T(17+yYDqSPfig2*E@DyVVe}b{ZE$!m zD~KZ(jK8DI?;~b$vWwZm$l@Hs7;p@Fl`HGeJVY%CFkh|FoJ~niaP`)oEH%eD(zy++ z9374B2F-3eEg~j+zIt_b`So&i1I%LKtvqywgElw@KPcqsan&0 z6;v(@=dgl+1`tal(8r<-DH^Isn?RM1zh9fo+e}$tA6@clM7&in#hl;8O=hxd#rRm4W1*I? z2ZNhJugowQ(t&$;nB4j8tt^`oQUzN$jo2P#^-O=HO?n@_w=7{x_e;1WObhkKarDGo zr&T0Tkv+tz+;|Y_{~;Wxx0|1q3Zxj}P4F4B{GtFnTsHiqatbE$)N)wEYjB2U4;-T8 zzIt&{04XEIn<~9q2dHmAc$Q+ zyb!CE%_3{t6+tS?!K~D@W(4QZ*{131=!3C}|H3jwDWToC)sHWjV3ZoA**_ z=Z$2Yu&NV7wGGn@rosM1!Yn8^uFlQ&l{ImJ(~GZ@(L;;D_lDlUOv#x&zkzWojpx&3*9%znaFaq$56=Pz$1G~=E+x3 z^_;B9CZQhp>OF)s%am9fr*cWm)$F>L$LZ}!t>vT+S^vd9OpYW+g^69EuU-tv>1o|$ zacK0UJzPv4ZYx*s%$Us{asi6li%&Ide?-`ADmxmXbRVuG8b>3$MVA#eFZW{4x> z>;P@9uplOgUM~)%X=71z#I%}eu4lxpJN|UU9K^8NhiTBH{hDib!;c1YiMvUpu@lw$ z{`Sv~YUGWI1g|JDs;|G!LF{`46eh8rgVp;=!8=25LEyv9nz|8UB8R?bC?E?CN{q6^ z(RWA9-#VNg(skg4L0Umqv!&~QxpbH9s_;GcV~RmZp7$-910;H;mW2dn7d zD`^a5Ru^Ve1QxDI5K`{dnwLu&SG(8#V9hhj)BuQN$$GB$w)2scz%y|)>rYGzjVgsL zW6jE(<75FL>lG5ThtvC8|-|B6%CqDf7pMa57Ex{%~;wCdY^iwmS4hpd%XFZ-~Q?R{(d~X|K{DdpFe%~)4%#xChu>jv!&x#+viKEKz_bh ztdIVO|K>jk55W~vr)a$cm1>l&nzLT2F$L{)JD+YJ@VLH`E$KJE^Luw6eu*o|j7z5l zxNvl&X}j8NtR9JbZPRCdP}}+X*T4GZJF}g@d8`1WHescWG2`SQ)r=8hH>J%g7zbsd9)hbez2r-qAZ_PUf5mVr;xwNNb6?TYEWEU=pDtk#7B`S+BCxBl<`^;W(;W;ZS@NRRKmLRbuUF1`_ZWjTi88sSEDOWID7Wxt(JbIR#;Z%OUk0950VZV=|;r zxh24NqhD86AiW77jWx=1rFpTL4FZu<&!dq$-DDcQ7~oW`FAXx{&GYJ&C)U5XboA>g z0OLhuCmcFbfzFYk30Y%>PqdoFK4UQ=#?-VH?*C{73Z(kVJdhNy&f>PlP9vS6EJ+{( zJ%^d#ggOmKHS1Q9Qy^e0JDIln24a|mhz-gp8_f>0!2{`yt3rxxIGT3bb{+h>xW6OU z5^UixNh62`EOP!49V8^qJjU|t>7Y`tcula5@7x$qObCb75cx!c)uxrxxx0gOoZ^Y6lxFa) zoskq*7=`N}K1X2_n|p^^gIPZYO>l5d*Du~~WceE!u6KKq5 zbOaJYQr^@;@RSUY%A97x_-Y5$enKRP#9A^9ua-I1x^qP>*XsHpS4SG$?3hO#hOStz zYux;uAD)$B{_}}|1x8p6q9=Wd9zv!p#Zr4SzgPG4pw^u9^l%gTTTf195ncIIW4zC% z9G%TLNI5p>!kkbCU61mtnXRBtidW)tj#RaJse)e*6g?umf^`Vb4uTXi)igS~Q$y_p zO^?ya5wSfA7fpd*KkGU_Vjtp}z}$_x_2cN$rVH#+t*2a-F0~^)1W*}ZkC8C%hz7(O zbsHkA!Mh|{asS8Q$|qqsAL6-_%vlT^U*t^XQbZj1{{tdFkfx{3ej5sObDWFwApSuv zYty=;U@uqb06$39391Msehn5{7 z4N!qmTFQ;&dYH9rlm5vVmrI&BSS0j>(+-#*Kv=D07>|<=h31u`&S}c^L6z?SwgrD< zKTMS^u0{iEhD1?0k%ZD4*)CT&{@V4Wfu4FBsKKozBu}|>7I*w4$VfyP9T&c5g(a^e zM5AaWZfJc1t!+Q&rgxe`1P^eP5lX9y;5iJ`Db~G}3Ge6a1`K&iV*J7Tx ze2Lo=4TA3l3G+LL{26?dOB`3*sei&?ESJH=SESB!Ey3DA+|J8tq;WUkNrLZ~2_>nH zr2YVP2W?YcaH}dx@PhWdsW2Uf2wC23=ZAS#{Kix=t&nt4!pRwG9*Is7bHVsuxuJ_%kOnf65Lu6pO)fUL~V^W1!bTu%ZLS-+o_$q|>F!u)vKzNrs(_ z1t*AhB70Vq!2b!U8f}_q@?ObBhLlLFOvSaHbRTrDf_hOz!Yj}mqcsJnI_eAEDAV>> zvL3}RHa59``QEfd_l`6XRno8x)(br9BnCDVOpHj!yF%8K5gMQa@$)g_#Hd@?Yv`s9>T5OV-&iGoS| z#UkUjsu^4vXGAqX@5Qzf2H{SJsv65=AY5Bfvg<4}N4eS#Muz%0k2=Rzb~&4FV&Rm( zq)`T=Cn}OQrnf9r zLtY8G1d`O6iZJFzjuLgXBc(iR*PL)rkL2Fs^ja-^mR$rfI7oq~|A()&>rd zw%VRfwaUuwm^;wr*~`br%drFW^!)YJYB(|E7wBTz$xfI2;^CI1=hyS$tzD^00l-P= zV9A)YGk*Bk>77mPZ=%~eD03hd$fDipkB9VVRM%B~_!|C9*sJQ`csbq}EzmP%L38f& z?EU-pyKli7LRv)XdNP=s^>R}C$A9ooe%MTEy)(~MN#F3|{n7sHqQ}4zA}}l$)$Nh4 z_nYonXEvKuPfzE|t=Ux|qPE@n>aO3qS~9-h?fcyelfVSp!Tsm+{sm~~{Z^};!QfUg zL4jN<%kC7l?z~p|8-4tZLK`rwN%q}0zkT!Zs7ONzL-1^ zyB1A&M(}Vp*K9Z)c@UNgL@Nk<82$Nm=WDxqvC&3Lw!_>BX?nDnYn&MWrFYlckMGAf zA0F3_SMT1GYa~YP*^rDD2s7BXEna{cn!MBaRI29vr7=XOJC6epS;#YzMV(=O`TBYx z$+lkXQF6@<*X%AF>3FVoIL!Kx6_H!}tj9M9dn#28GG-=%xx`EH-?P&!dWR5OdAi?X zjZ&lA|9Z0>8h%w4Bgp4UMY=OQLOK+TcEO-8Rx(J{0F4d62c?I~Ei#*o(*$Iy0Q8G} z%9l?YFffIW2GgBZ<`m0%_C~(zHwDi=!`h#dwP@NQf&EMW` zyH{6EW%s+BFRf;~9eSjD#}yrCP|c>%y<}jEjlGZ-5KitJ(RDfTyd zYPF19b*VXMV|ysp*VytNf{ybwB4@b}^(-*kY2yhb?jVaoh71H?65rqRIv8A3gZEr}*m(l)^q3vtyF_CAaNdSJdh?N0aQ#vy}xtTsXq!& z3K8|zxvFB$x(s@b?-bl@g{z);Enc4zgfkW36YTfMAum)@8pxrWz++7h0&R>WF69m% zO-PW#$=#-lyXcrswnH=gDpD)!%0+quz7g*AfLTpRR#O`0Yfno9n3@ZxwzDu-gI3Be zePqh2Dg98RD z=Li1@X?*&dIQ3z?Y@uk%DQcWITB#q$cg6E}(I*^Q3?MeyFJ20`LdX->IP);mh-7{_ z+-UK3jtZCV_%!{(bKcHI`s&1u*5!pJyA;iNZNrh?TDxJATV`O!kImQSVDtYur|m$w zfdU1DY>&(*BYQd7zlE-GinRll&Ww%8Tnm}WY{!jmYM5{*&H!*ZG+6pG_cC29cASl~ znGAIHN_*ymfzBY!;kKn$Zy!Mg{(qqWr;e*jR7|&yF85T3tSI>2v$OmV(y1@47z)gt z)4@QF+{~#nNo4`T(gG=zS!2>&+!E~QNxE`zPk|!Z0~toAp8*w(8ec2ce{>p#_P{KL zOz6H%;zV~B|No^`>T$@Lh|OGM)G~mPLC#P7MOO9>0f}b{i&J?;7vf(fc&jNhe=L-9T#N3Mt@iLv3Z`XhrhPs3w#Cu_~M6_7bNs>(v zLY7yX0=fMyB8Z}H(@9pL{HH;R?I$rY*v&EP#ClH2$cd{S0yXYeQOu)8zdRJpz<3J3 zPiW!CP_u09@V!iQ5jx18xFMVvfW~oL)l{$nq@aHt3Rb55;)S_+yTwWMG`=Y|&*Q@4 zpR5y}oLDRj2x~E%3kzA$RW?s_RMpSSyRyBW5;xYVJt1Mp7?HEtObu-8eDxLo0<5;cl(+e^RbemnVC%vX9i%40j8)@z<4%k|YwOK{M zLYyQHh2PeLqpajQy&7Huq7^A}C>wl@=#%*nFZ=0Gd$0fH3d0a3dT6)FqyZ{QH<4Bd z+&X=`wd%l9t5@-m+)8URLxl^2d{ZV;mz zlT;+e*4~DWqt?wSd|H^^eQI95BMJ^jyKWoxT z%jrXY3`V}8nMO+;5mBLTltxdW3R>VC3%77>#h00FTW&9)@yOW2(cDDcJ`(ORh?P#M_ktwHY zUA;CM4HN+|gQ)N_InlugMu;97+=}K?!aREV=G&h?;O3WJ^mFs1w0K?_5Q(RDOu#qr zIIW&-U-~!x z+OPibpK!^n#kr%brJ+{CG~PZhCS%>zE9wh2^nx_###(eflMUVu2gcdD z+b~{B$@a&;`Saht{qsLn6=it(|Iu_OF}AN+cF?1b)AuL(d++NqD>JL8tSStqY+=iS z2?%B$Fkrw4F#sW$A|wVdMgqxVh%7My3Iwv`LdZtKw(K&(a;2)t%GcaBy3_Y3x*Nf7 zofK8&^vn0|i#X^1|GvG~UVH7eZ?8tJv!mwG*@WSw{I*LaSd(`Zi-Vh+&e1Vt+UuYG z<*Oh5`D(hT+e09>%C~n9M;C8Ky<2k*qv7bVv=2m5=7_@0qa&g(5s+okRK=1h(ye-{ zi8BNrJ%g1^@Lum>;q;5&osZs9wLhTx_I6vHn!ZgwD%YyyE>499 zqs!rHp@I~k5ijwIaN7tZ=-QcEW@$mlT_QEN-kSqtu~JUIPcCvn|3R8DY+KTKsTkC& zD1YCA=#AQ^ij9T@1MCd1HXbwTvqMGW=9F6HZRj1e5h|OZP zHJe(=K;mWK@`aiR-iww4hch0rBvy^2SkR(1WwdGRZNR5Xid{41KShWfa2Dm#&J8fW zjy#`g4zbuOPT`e>7~fR+?Wb%G(k=-fItrvv{R^g%^7~`{ijUbHV;4O&4scBl_1>kE zfGHF$zytq^s>T{r{ofddiO%9?B)o)1KEEf3j^`v))=&p)5Gp|rz!{BiEY4#2=||9O z!o+!rme-}1{h06;a5OuFDGpux;4B37QM?-+vAlTbL7%9 z-QXH<2bgx)fHR3U>S5IK{evbWf{n+Iu2Jv@y`70xqpbqR{kq&a;RZ=3mH|ThByt62 zFjM+1pf&|+NG=O){a3L&_G^MHO|!WcfCdYz?xGX(tQ-v3*MSVFXNsdjRsZO3D|IH< zm(@<&1Mo*wl4&d`>LUC#QDEOOxvD8l9OtauJ@pyDnvFnC;ET>cvq%{n@wjhlzm_Jz zVQD#=fKsYOXiTio7O+Z7TvOQS$a$rHlPE)<9oHqNkuEN>E*lpZT9ThV6`Iw@g}Q^g zL;Ns2md!AR>eM(fxtbAZlA-4O_Qt5NIxq`~qx3keHt{+ue_g7U^#nZf2#|7R_U6}@ zppsewaI}A%MTZ9hy>ZhfW^x*H!PDe1^ldJ;qipkhpsoWnGm?zF#2>~QGV~|Wfq;-Y zb$tfKCu5Hc7deRlN6?{%sbocYs<-tcRbPvRUYWw1-YNeq3qn}=xt>MT1};`_ot`8f zV|o-X&)Q`qb-u61q7IDr>3a4s?QiW{ih#|@mr_j&5)Ku>;Y9$|L`DWR9RqYv6x8Cx zn#EKbeB|;4cqx!#r?hGDAsKO6uB!EVlxfa`Zxp|rxD~jq3zjD#Rt41wjT0ks1qLSq zviluweknH_tqf%9XwjkwWA@MA+3$ByXm%k*&r=@8=z?o@H)Fm?6*bCz=m+RQNv4pf zw^ag;l9D?#z9m{42NY1=b3-(^jE-hLuqVtdxz@NF89sbA4{1Lh(La$G+BgYc&l5x> zb(qaFKZ9Vhna7p|wEt}6Qbec-Jqw}mEzP0BA>v2ZvA5f-Kiv+wY~x}`{%}2keW^Wc z06z?6tAyi#x@i)K48k2Hp`HwcG8+!6-7eH(g1yGS*Cq@whXN$tPEQgL*4d4gCSXZb zoxcfbmcu;@(pil|)MQv!-D;7=j_Kd0=exns?2?K~aE@vV%8;ryEGRCNSvFi5)}>^( z*d!ljIX^gl^?5oJ`Y8CYG5&nG>J$cy#nC~GYof#PoH8AOG4v3f{Ol$Me-Z7)XCmA9 zX!xATqykGOZ*w5E+9C_d_eul7UTk^L-%x)0nfCD5Dd!<(Is2myfR!P#GIoWmE0dFY zP3E#J?BPR36?3m(_oZ+O9)|9OC(Lk5+*U`~ebhSc>g@V0;u}FfKEtOsf2+Qd!VZ-{ z;woZZ&FMpGqv<*>7Jgu6<2};{1}+f?Wp>E66@9-1Ui0ndVB>ma*fQhdJQtY9l1r&+ zZ6>gE-jE)Jc4A;w-m8`#bZJh{)GnS6bI~*u!&{N7O^fYQ-}~3)eJ+r#YZ<4)9i8jrO%Gu6!gKu1e$DIjEDSuG%vRkC)Cki}V?0_`l_$WSDI}k>?6RmQ4_C8v-c0h(Cf8DI>HNo@ zruViU)B1ME*&SUqOzKLlMT^e3{I{AhD_AYcb={1|)x;EpE$uazGR;g%Z$HM z1LO>qT5~+QZEPeAuAnn^^5)C_$Md=**TKYt#N2ThS75>4*A z18aGYFHW6ToPp5lsh*tuc-;TaEwGdM@BNd%|87aM$|b;A5_lXW@4@IdPv5$6G5fw+ zttxi{N5)O|Zv}Ld>z^3x)b}Ji7XHefqlP z61ojR=?*pwRNTG#<*!;NT{l&qg%r>v@oad5>v=jl{c1WKhVxU#a#CtFKYshigW)wG z-mcgDtM{u3)U}$8I_Iydr6Vq&TI+@cDIlqIinWrPTcdZaX4L}$Q^p{9I^EyVslpCq zHUzb<6gcww>u)%(9G`z7hDh@O!O__XdVaaIYVF-}Hm?w`3*3kFHd7nPCOO%IA9$lD+e5XP{q`yUc67J zEE5)?5SPvegXg5=M(0SBfjAKZxg7JQ1#`Gul#id__TqPK7r>#G4M12$FOTY1u9o1n zhm+tdQ$0QqQ}G7O8ix82Cd}XW10yJ^HO=gzewEZh8B2da*+XW=1X447ayQd1-`|~& z?ET2wc(_}Tkqq8_FJa(!$GyHlg(ft)ZakXwO``+Ag1WqD%@dbua&sdpX%j7bH*!^q z_+YUNG9o@)RORV>a4m+>K^0i_#MOFQVS2f4eo-Lps$qMqQz=5Bx{Mi&{DZiszCcBeCcTCSr`XqC()1As3^_i6ot)ok3Lg7&$Tx*m*X8R?(F{oaf+=YxZkH$(`L%kDv{+> z(THU6NMl9TY>7xJ8ReFpGpcl@h%;n-Q#$ieNP+$9VAVk*@&oH1QVM2io*~FXMUCQi zR}0|ugc1y#MY4D^dURc!oICJWf(a`|}din>v zj>wsI0a>pYi~%VMownl_9H{|2!OdqV*86ffyaKZ*ax#uq2iOBQX>d25IE~5%)ln)+ zYn{wKx|U>+VabblHc9ruSfomZgh?5#2F9x$UKU zknDlq485XU7y$`!O0{S+L`;t#{QZcUC?5#3_=lNOqQ@m(51VW3s_Zvr7RBLLMnJkC zgNZ4^jJRZyi%(qOaC4 zO<@a+*bD}_n^;@9L#z-jvc_5mkG0R7hIaez_Bv#iY}f24vsEwX=k>4;va2Y-oCy6f z0V)9lA~7iTX(AsgH(QpDqQ;OzY2Bs02;tQZD@CVbb@dVbA*5_s+|3uHcjZ3r>gN-- zDKfER1~as%2U@H}7Y(iE%nGf^cH$%%m2i`Gu3A*uIk=kuFuH7-JqB9Fq4ss~tZvJ8 ziYMu&cyYm|zz^X&s+Q*9uQB3u9oE}2k*DoQIHiI-l;*H8{^fkhbPDKzFgyX(EV@<~ zF~ba~h$V-TcmtHqy14V45L9C3LZc${1aN(RH77imH1J&$3V?Qw902JjSNP@m?tZU! zVGpVMwXw_qVT|!krB}im9-1m)SRY#@6)1ZAC%t#|_y{BB6)bWF9D9!Mu|@R^vuqV$O$2!O51d=whO62PQv@btIaC{YpUID(%ld{mR1;P{?(f4O?MUhDJA| zw~Sf=p3&oYRacpz$4s+C54xlkR*M7{<3+=}Uy@Ja9^iXLCQ@|MwSC6fG7 z$)tgt+B`ZBRr;cl?w&yrjt}dR>D_9oL&&UOxmam+D5XWAlk*ca9^;;R-B{7*i{Jdq zi}@7*!i&ZEZMC}IkD)fV)P-@8YxQbk7jyW<>chMDkkqI*_UEZRyxGyn+~C7(x@3>E zn$GIASE~np_$E3TY&;^dn!LEPS!vq8{DDrP)oLl0-hcbU#p~0_Y<%+iv_F<7KA*k* z>-NUlsC9C3(K&l{de&XcdT7^bwE#J156APva5y^s;=OAx*d<%gfJFh=}EHq1~ zw|;LxBfsePDfS68w*Tk9^&iiMqm$ES^W+duBoY)!+WvyFdCP=@{t$;oHAxwAxh+ z*3zfKT=KPPOb5fC{`G(PSO4^%p)l*bT3&fYga z|Jir{?;l5E_(ChMmmy5;kB2%t200po-r)S}AI*lhW>_ujbRcGvp^^Z0@K6*+7zmA~ zUIC>y3sxU`1aeM{LWwMeSGUAq3ggBsRX=b1mrr+r*j~fn#l33VIy{x#awh_ zPXxbd8S+}Sw%C-(=(a~vB3l%xz7*DU>h&u4BI#xp?fGfezmb{+2|cXkR6oe-VaS6G zdC9J8@4R(Ws zAAA#%!ge|Y#7616c0&^5Q+EPs^fS+mqZ74a64LVy$0yNN?k_dF5xpp$3YGbI;5@Pt z(y|nET(fGm!yp9>6MaZ5Q=Vso8#i2_&`(!r^g=dhFKLGww~La zmzC;5eyoJJ6)%hp__`RNbYOv0eSgtJ@Q`RhT_Vd2Q4#2qeqsSl>@f;|F9LRLBA(WCaQr61i`zdF5#hHDU$xWf6d8P*@?QM!dHArF>s8!ics%> z4H{P4w}ws_N<0=j5|DVyqBhjM=E&`7gdkX=EDJ(ZL%#% zOBdP^(Q*?yoI^F9sb7B<3=(ZQvxT4BdWyy6Y^rv}t^{x>x=L{qU5&?)OA_s9-vivy zsovAZ>jJ9{R2M#r132#uY2^=#MzWAFbKgq*_9OvKoJgP;o1dTx=L(P=mbx608M@wq zCYy|CpJ7#abe6Q9jb9iMgZc1Djc2lmp)mD-5#PW_hj3eI*&9N>%KSt@@Xy7oa0GjO48r(iJh_=qeeE_86TXPYE2) z<1?gAI2Y_7=0rr30sD+3nZve+U}hbb_<_3CN>AZU0)s>^BZ>VznuM4MJ6E32Ve1G~ z(jrg$B0f&2IrrvCR~63iSSK;GA!j0=rw%$L+%cvO1X zO$!51Bmxx4P_Mi(9R@}9wvvzG^Jq|LbTU_O-=Zb;$`gfmu6uR{;D9Kj)Njf*sx3dx z{UDAPAzkq_IutO@Hcr!-HlglTnqIb~!9P+~ts_D7)&grGMS0PUE*{=p{aNA5-5U~*xMmdR7|V5NghHJC}qj_8~aXl+!Z*&${xFheIpx9V8(Kcq1( z9Kx1j6}jP0e1E4PagneG-rvx0grGr?_w(yw?bNT$3YpDPAMZ%MvrKG#^)6Ke@dAjy zLQXy6j}$2(_9Z(tun?qO3YG{6#E~)$AiEaRP{y+XX8E?hCpQfNqN}6z9RN6*duHp{xc77=%BP(jE&-` zwcE$1fW41tY(Sn>64)lp$HWNebh2PDX;)OdkzWi+;;LkFL(dG8OB)dAbvdw~o3;8F z@A>rD=ydcSrLYjMrRs3d@3de4um8vYa>M5UYDdcD_-?bW@17nZId3m-tBnl*^5?7(1klO_4SrF!e9^1+@)Tetb;Wcvj2B^m6ZU3m#)i_^yThr;sw{N%q;J^9zeL3Hw#ECdEUyA+hnodUN%f;yZotuL` zEgsz7OjJMS3C_-6J=`w_y-~eg=fYnuv}X4=!{M433T}M4f1WI-VHiif-~ZzLX)?aP zzO^La^^bo1{#SomDpx_M<1fy;Cl{I{z1{~0sD1j{7zYuKTyA)R-JDx%mY~*vh%SIC z4<)Lbr_U#^PNp|~5|N;W6))4Lql;6X4fK9lTKD{7518XPxV)@38fsQ5r;{&!wi;dD zUf;xMHM?l?1%>18#hcr=KODVzJ?-&3Qq+}5$5M-v89Y7U7{v(vARIkeRJm53jRwl# zn#sQmCMs$Rv%%CtVFT0liQ$svK>-4^4F^`rF5ptFHMqIV$U(f9tK0$EB`u~?xtYBV zjm`MxRtr}qFw5nn_TIfm(g&-#`~g0?#amS(R~4uLvAt{9`pwUNGPv%$(c%>0R{eq;zOl#*hY-Sxi`wq6L9D6a6f= zZXe;!w6v8VasXuzXolKRU}#FBw-w)!wtEl0x&P0?A44=0Cey5&gz(7p#Rc4^-!8xj zIX17u0B(%gM{-*#3z=6rO60v5W^?vI3Gu%Nbb@qg0!VLCMbf8_Y|)Udpp(kUS>(6# zC7L`WSxf-2dQ=u##9GE~)qy`L@q=H=KU!p&8YdS+30cPxyR$3cm}~ zO9y;+D_%M(C`{7&-nd8zCs{v6t1%Ix36{gCR^$j7l$ne)Ks*|p9xp5t*cAEj)TWZm zd!f46t{@9mAKcfH_gJFTT zLhrHPZ=Ro~&ISk3mYK#jqHT9A1|dt3Sk>FD5!4G>Zpoy4Wm}2B#!DJ5}=KtY932~>HWHX z@@DYyheo@)TdcE~V0J(U$*NW7MTSgU|0O#gJwTXP6!uAA1s(JJ&`oZmm_+j+oh*H3 zFlQ7##C?^&#N50G5ug#?Oy&@?kx`x3VAYB|D;2P} zaha&OP!@mNRD@i&1}!6A#B~%{?gQnCaF`8X?1s6kRhzzr-=a~U4xx&Ho!^93iUYXv z)t_>5Jdrr(V$CC@cB5?BnvYXHVMDp!+HX;^&`FcfTAK$GGS4(cxJY15lFNSHr`4#p zU&{^*eLcVnMzu@hVKegR)Pb~qGw=H_3YpNzH~~DN;poHyF6*9|&Wgv57A>=*0cc?p zV@1#e$zt5V6#y$C#LNbRUr%mH;M!_s&MGw_nbuQQ7^LQbK5(gQzV?VlfLCO$M<*(Z z2?d0gH(t`*BVCvhtVVqDYyw^)C*)Kf{3NFEx%j z`aBLoS`#~#rB3i8!XT2!$rnZd8ee(e0>jzd74+u!SgDHCy@81!3!vO3lTNJk1l7#2 z+4sn`Fnw5j3ZkMw=tU=BT-h1Gs_s|61rwA$OR;_C*KHOpP=#@tO5Pgp)k9zSs;+Ehh?j$+ zU97g~@`##WmpI1y=tWl;p=#9RfQitqsejnft>Fx&OQX@}3h)}rL>cGPj5f`{Dt{oO zbgNIhjUV5Wo?9l%>wmeH`=MZ^qnI2Iv3NL`xk;s>|D(JV+rx%PK!lo#@jd1Zw!I66 zDXvIdJS7Y0G{ZCG0Kb}1(PTd4sVxhJ)YlkLq^A{09i%U$wQ&6dl^s2#Rv|jYI>gnq z2QK5<+!Wqco~MB;*AtFpOh|*^I!ncBTcOr>(TS05DVe;r@uzDAv&2y<)u+Q-f?0$) z6C;=3ZdG4UFPbJuYsw{+0=yB&&=3-8wWifM==<1ZPF5`7)j;IO7A=TpFTV0a%mwtw>KV*Rvo<{GcRo?m{PAyi-n2Z}Cp%jVyKkWlCO%|eF_NV!fWI2_?o zlEr?F)y6}^YU|Q!`FmeqeD^1RE^vvl&Z5R_H;SeEZdpE`Ruo_EAgnnGHzx31-}!dsmt$rgePILdQze@$k0QJw?2mNq|0qR|j0a zbQMuu-P67pz$qMS47SpRR?v%GX%L4uv%|e1yv^ zchF;o(3>a6SYb08r2M8cwde57Ap_%XY7)FGJ@^q*)tmWr<{pivJ$6{$z-#hKD)haB z*2M)4j}PoW!TS371ssm~ux|=K&TuJrfF~W)8$i5o1zGL5>7p8K*?8|{2QGBQhP8Qm zChfwtAguF|9%Xb6STnOSqyjX5tJ-l#%Yc)ha48m$;<>1zjo}3O*yr)Q+*0L%c>~d5 zKA0d=@t5;K&(HLUN1n{3H6B^L44haHtBuU9Q2z`$7STCg)MYyL!l3qY(uS)Nb$>kDywk5NkG7 zS@|%!Wa4kb@B??33}ky%z-RLh@l6rHPPr)W3kK9^^xJM;YdlOwg!RN503Q4bfO@Mg zK+XU&dlIJ1oFF*!ze)unIv~IocYpn-|C8wbYF~fTyo&9BK}E!Yax@}oks_1rFST|X z2KU)r9C+9NI&ACdNag1zsGHD-6|+O^S)X^-*kx}-3!Bs=Z@@!lzwMbRb_$cAw~j06 z*c;JGhsl000WF$)PX8-rT+O!JD=M+~{2-HTbUTgI&6f7P|eCfYl~ z{@`a!q0I*7+n(+ef$)$^q)SQnC5A{AY)&08Bi*DXX{(CWj-0biTWTraw0F=sy`Rh+ z2}sy0b_KX98;GQeW(=AtQ8{PMVLJ8dX_3jmaQ2R|p@oD&EG)yE=g$g$fNwL2vOB)H zY#g0wJ(=j(-sfwX(P6qB5OcR2k7?wN>wt$)>@oUTasDM*!?a!9R=O<*Fp*qe>AGL- zw16^^NAG$=I>5%n`mvVs;qn zx_4wr@3UsxGolx4LcSNBM_oo(wHf%(f@dakH6CU(Oxz%M&RbMP5(wquhHK_cC3S zc0E6X7>xRMNCft(L0M6rAkGzvj(KbbJxm6~(Ot$2-J2xj%hngY3oS%=LmjC3APU`& z2BmJ>OV!@d$kI)g3Cud8XL2kt0I<-Gp|y3b+mtXd6P_LhGkVnl=bY?I)Z@jP`F6Yz z9XX^i!C$^a+8VU0_Rg!JGAQUG2ox$hdIzD7o2-m)zP{8tHCLB?o=@vA;C9b;y7)(I z?OI18TkZ-{LXu%oWJWXm4|_rRsb-N^CgT zRRT^2V+)t$I6V!iUjxkMUF2f9QoQ{1;q~h`bOXp(3Do?9-02DUI#^w;3=q(-W96Q| zv3@WwTkh6|-~BKj&;H4GfBtszhuDWZaW>H#+1;*H>w*HGjI)cQo`JDKx!Y+D zdQ+->&0xQMIWyh9y7=-Ux-lZLoeDw9@o@)>RW2X(dhbfb%5oOpFshB^>Z(((Dh2@2 z;dRf_)1%JuhacWiEIVM7nBcd>r>X9ZH)|*Nk29ZPHXBnY9HKUlE{2!i(cQN?=lu^K z5fbuFsZhDP{xqH}FJ7Od`R4Hb!GHT7p(h#VBv&0@xKZu1GeZzAd)Y?egVLuDZ$WAs z3M{Jduoknv&_aSwzHcPJxFU6ugmin;tCj2XiIL!OiTBW~zkT!ZZ~X3Wefy`sybJ4~ zTlCPeV|P9~|MH^JZ1+BXLbTKxt^TKX=7dVwjmS<%jxiy!aCe8AFZaT-OXk$m#J5y`c8(mjOp#~TU6NC3}YmG8LBG0)Npb=-w@R|SegN-SnduEmD8ixcg%f2&`HAPh>AuAwkkkSjp7p^$Ca z6lQc_G))g{GCg_ydTI>1Ty@z*kG(<^FRWCFpPdGxqcjtoiFwRS9H3Oy@uIkUx&Pe0 zIGgrIE{=h9Bm^0W7_5oXd3BLhbeV4toh;Z{3ldPWyVW?om|eY>8a;$08y>58rqyIM ze;{K(wBs*z>TBKONX)Z$H8Zl_g!GRt)o%8wOf}e6MsI!n?f0FFGvL7A42cpxnoG$R z;ToxiIvqvll_85W7iKu^;BffzjwXKnG#0F%Vn;ZajBH;E}gH<}m2yJzV%8zrAm#ERhkrG-NQR_nBLg(4K4b>YfIER^~- zlVti%E1vgFP?h|H5>9;drgEg1tkEqf@k?>|=CC=sevhqZ@i`xi%8lA$Jd5KK$YNT6 zV2MrYW-!S~!Eh)b)#2{72Aj8U3y91luz(2esa^$H2=Y}JblnKN&f)m#y4W;vYX$ZlQqw7mBzI?PHs-dxQPoO`V#LioK>md0#6Qy}@im2(&Z^ z>ANQe2BX1*(Edgxg!FbGbjvN2Kd1qD4d=%PR12d$4G#iuWu;q1T>WwPhI<^{PKnhe;& z-R^E5w9oE(p9<)w{*@3HqFTAT*%K#lqg3#Fgh04h#B{jo^o7>HRy5T+r|`G0qwX@$ z>wg@u=!gmjj4yp8s;NS?wNYDnS!y3c{}1I#%}4S~utK8RVXew`ImUN|;^f^;^|Ymg z6R|~pZ&2UVi`eIZ7P?7NaAtUP>J?o*Ufbcy@tLA29x|Hts-tW^aZ1x1 zBI~L&5Cpo=GHreZ>xg7(aYbfydNj3)Acs!~-I#ku1G~$btA}L?KI%d7!io%xqsR$} z-%VzPZkzDQyFRFuH~PjZoRArtXyDaOYVxYWhUaGX36L0YK+gQe0=c82PzUPdV{QC? zAxr#G$1QGes>fYHJAuNXlW)@d+80$M;{E0^^|~YBMktX48OE%xm@n?1E=JR`=^Bfr z%%_EAPp&a|rCP|*x_>G+wYiknxVJ5?I6`_xY%>!ft>6j|1Yt6w(5>;JAs4XygD;L= zw33r2+nyk{nxK0$-go3Rhv-g~QY;b8Do#TO0G@Fr(!RjEHPR4BS#B;|+Oo3k$)=L& z_*yg8tKU5H%+UeOSwYLg{xHVnI1C?N3y5^2P!$lgzNOs;--1Q|ioyc%di(vm+6k>u zOeP44gwPlSZtu)SGxNBk9)hN2KuhH;_@DzE=2Gj`>iP!})f!e_K#pk%qg<-moW<9X z9NM#9F2>awtL3pXY}fEaW5@M;ekt2Px4k{>_kkH=3VWp-9Z>N2%{gUJ+BkRjCM3Ny z_a4ZUd#8izTB|u9uK)fo{_&^DL%nNMUAu|tzt3A4PiEMw8rPiydmE66n`>ir$DMNB zjp5DbsbwQMML6V@J;{#UyUX4euTO<0A9~IZ()FQCw3>czcRCtB?7SEo9goNLnmt8` zEw65+viIuUdNU6a<@wh-7~}D9);T`sMKT-Rm={I#+nwjQfA#g(fAkOk!P)C?dcDi@ zqt?yk^~vdZwbbqnKH#6AF0-%Of9JpZPd*>KG#X#@KK*&wrJ^rzG8Ls&1)d2P75${mZL|hu`?gZ+-mmXJ#yycM4`RG^yKEACp^8y}T?8dUTd3yTht0kA8;jKY$rND%P0eA)FSSP=|GraA; z{^?Kp?>}Xwj66CVV%7;a4eVkgbU&+&_Ifq%o_%?@7@7A4UbW6ke!-@r-<&_4Cdn0)K{=CcB~QfW@ewM6U}#;b3tUSCws)`U#~S+~3TKN1FbxPS z-!zGemc8H4$bsg=)(#2X-Et7)3KKK*kpPa!B`Q8X)(K0@6-16ph*99eqw40!iJo&S z7271a)A6v@Xi5*a?>}mc5LO5WCL$`_T0~wWjEHT0)ty~^VT1Wg{TWhPG$9^N_ElJd zcRIyHL6y>SVi4KlM93UhO^#Mxg%x|YBtyANS_Hyw`mHhVCDEn}^Amid4Vn)Ca8JNd zAeABo=_UWBvu}o>AieDpz?d6v9CelHn)*^W9@NGVn8-II-^Mc?ifjmMT@d z59=WYIYj2(cCFL8n=Qc>AHZ#i;S8^9KL~iiuwsP#T;mNI$B*2%G*~tTcZLUJwjCGk zP}NSLaYu_$jbuFGP>5js0LIOPZHjR59cWONdu2{_fbV)$BelG`DX<$L$Z=c}#Xs9$ z3t28FV?AZmJ8H_5m~-N|R-4W7jX^2++|Y&65lP1A8jm$|cjY`8#c5|{3xhHv!liLm zk?a9nk_qiLmrI1sS8}%I^ZL<|FDWS++L4@bgcd=E?>FdNB_UYQVICZv_{LdVYxf!R zG<3DvL#r-sgx1^9$ z-}6P#ym#LtlJPnikMwS>H}OW`X@FCJC2XLVa|3)k)skoHn*>#+3KN?BwZS+>s71v% z!xG`tDkz{@r^--)aQ86kaj0PV^-PQF7WtCTtab@_Z0vd><##XWVcZwzA(NxrX4or< z0Gr>iTP<&xg+gT9c&<8FU%(}(8H}KyH-f+Urr$jlI-T6pm}_x6sAyuEUvfBMR@hNS zKyXN2?tUh+?pLTBxhP#D@+R}yHA~8M(io-3&f5aGjDzF+7a8sK^pt+t8z8=!4p*`| zc!>FI@)8og3l)i>vbiAR=ZLVSa?^{>zLX4uYVtg+2ZO^#%gd6;{7HqDlICvQ2k41? ziMSlk`OS4LX)Ct_OO+sHy#s+toN7f0?x-bLA~&>xXunT0P%lIoypgCK2qtPg6o5PX zsNW*v$?}3NV@U?sVM;}HpJ7t~(5PE{e*dx@9n{Fv&KK#Dm-qg4}>JmCCPHXS8p_d2dxbWMJl5;Xq~+7U17wll&q>o z!a0SG!kt^rbey?L%2>_w<;EQ@gKq|{muzF|oI0h5*0DuK=KEO!%Cl83ku#(WXbP@W z$<|>`#Kc124dmjqzxnbvE-&B8<9-Fp^7(RBE0yFcA$r;y@&qf3{0mlKhp3Ey^cR2p z?s|sotd=>l9_!+%N*Y=O($j|ey}G?U?Y1RNg`AON62tj;UTPGV^L18s?rv8rZr%Qi zRS>CL9*c$Mu;2H`FTVNF&4*81zBk(;wrY*){QB0S;X-w9GG6-ZHsG!wR>l}ePtDdf zTD9xTk8R<7tGN9Nx7@ypCB z7F*^2a`B&S|BwIme*i&>Le$8+oDtS{AP7B}@KGu@uLr$m{rKr+OmIaRYouf{o&ETC ze*68~@1Fw%o;rjuS)3qn?hShYo`dWT5slmpKED5|R{rL!Web5Ic=r12mw)p8`PV1y zZs+RVRlQbK@vx?yjQeK9kB*M!{I3k7BDNr!88+V%LzQ#ZCgZ0@*N}E$G8ms+P-M_k zuo_eUey)9SG5+rD*5NMk2w)7N5d=B9hQPIHcK7Sc;SERz4>XTk<9?5e9mH^LZ%uk!j!xAk zm1>y;-I@eRU$pcIMbz*z_tdrAL}>i1!zsr^#V5@i(^Kt)+S9^`wYXGmHPZ>C_;|c8 zslB)Nnaoxi?VERRnY&fo%bl#-VHkIH550cY!BRyw?{uHv+OV2At@M7D@^1Dl9{8dH_&6AT1lK z&a@#NLfR^wB(Yk878Oag2~z0l4Yhi43zD(O9BfCRvv`>e22I;S_r$k>`6aI&6voM5 z^5HQhiHJu-eLr6n?HYy>ma}51?i))hAh#c!KSF5ztHM)Zv**gU6Y9}k&<;)t2|zHc zW=;{km{E%AUutq#SFeANmfQc|%Vof$Z1;K9{UeDpz$4^5^{GTrYNRM>GSBiJ!{nJXVj)6hnvDZP40pb!Bri@%1 zz)&cxw0*77WG>*)@Vq4nT-;Tel(H~!DWD6rv;`!HW5zJyy@xaR? zQV2s4YJ6<0|K?1>rH;2AoHqv(>6=Q&_;>z_ZaVBCbVUrMU~^@*o|R*pvM!>s<>s9u-6aJJ{g?tCbLf9M=jBC@2DB(IET@ep!rgE`?<^ znlFp6A|wfTOJe|C;3+MJV~E{>k8c)nrGmxt&o*uE_L13aj&bxF1@FR1K%x7+{Hth) zrnfislT)o4V2NG2IN;VKeX@f`c6c+#h)qz1c zaH?Ty;gjq3&~}wtJeK&oj*{}A*4DALTF@Md?U1&7Y*?l`zPzj$rv(2c{12_`%VP8L9 zqyoKCYh)(LY^_|Y9Anp|YO}Lsc_%Je4|rIyI$UvzJ_UACmubuG*w({%tfKzn1cTM7 zS)z6MK~Yp~pRMMaaJJx7g)zK*<^l*>A6J5^W9*K*JRYWR9VJ7KcB}``7f4RoD*TFv zMlL_q5J~0@x(r{^Xz7Sj>SF9R@JJC*0dplNZcw$_jDSJM>{ZyuAZysNM z_vg)H3q|)CjL`;@&2lB2E|>q>zx{8r(EjlL&#f17Lz_ny{cSVncT@`5g(&94Ow!43NeoB&!ssH*%XRFb|Q}88Wo6${wczZ*%^wn2Cn%oY&o4RgH zc+kS>Z~rxJD3X+rWHX(OPt|r!>@)8Hf`AgE9wBt?;D~?M0%NRrt8*`Se4^8lNSY^Y zpClUsR(%24(b0Ud1^D>&7xl)G80|~Du)~kn68_-&-SBFlIF_gVVL}gwmZn2YK>pOv zkB#-Zo70<5x`-gMyNy$jZA3}f+0C|K&TE$Mv5Kq3LL8^X<)&e_pxSNQL`+8mY#2r6 z%%pp^WFu)$i*^sK^~TR|IqAc%-m64dVKYtLP&8RV$}v;5k{Nho*R4ggl6 zhz<`;qH~}PXI}2fhbIvY3X%wmW>nv1vFi8|9u2N%W2<0vux!#~u9K}+&L6r_wAKERSLUOE zVR)~b%6G$>Iejn*&$%{e;5#Y;Rc?}&!oq9Tf$%h>G|0pM1=jcqvM-#m^?71gSI;9> zkShul=h$0DH3c*3p`rFDko`~;lqcggnC~UPVb^9RN5}PEuwQX}23g1!Omx9sVgj5Y z{b-vjmi(f0zNIrd-N7zy*iJoU>e$ zTmf|7OwowE!xF$rl(eb^BM<(VBkgNy7n=$rBJ)@!TCdV-zKZfSu~g?~TYJps9bbOX zV^ircp$I~w*9aBiz-8=>HJ2wC0?EI|Plp9x2uG+ia^mH3D2e(!ptu@t*?T8F1Cx1P zprmEG^o*L`N;_;8J5Ac`Y?CZuEmqTkv3Vk?%?ybTsHzv&R~QaQ6bN1n28ul?8YHq* zTHi}3a&FV@gkeA{Bg4TlXp|O&cSy<#@WWm+a!Y{cIgxxevYW9*pS*iXO*W8?DYHZT`wO=2I21F zUHIjR`Iy;-JrD73bTGJXKCNe5Q=m=XuG~5k+<{BqXC5axyk3eXinHZyACaMA7Xj{x zU`vJa@sWz!2lh=JCR)nS^!B=oxb%sPm?~2Dv_4Rp3%+?VuPo|hNRlc)s z!Dcr5MhsgP>9L(Avb)95kIi_9bm-33k2)K#Wja9*ashLYv*H(Yn^pSI>U1DPCk{ho1!R%I&G=)bg;mK~mcs{+@k`k}F^O%Dy@ zzr#o+3%=%A#$y+T_Qp<yhy+4+WQpObuY}JTayluYx{sJv%R z(R`XOd|D^aKdH64p;$SfZ87oYFuw;!>PJ7`wbnL&WPZDdF0z}F& z23v<3lgu4jeeCTnDfoy+Q zB8H>f+SWz_PNMo_|5QI7GSy4p$=3oFtXZe0nGPnm$^hHMWzS0UNN7R3F!7{PbAOb} zhUpMU)20GY*Y_5Sg`S}Kl&*O%u?sbS0Ud_to-_9X=wz^7U3Jd#Q8)n>!% zqqAcL^qAo+>{h7HhM&}R12t|M}+UzjxSa4!`{lf;S93c>B*v-5*0LNc7J6smpV}jHlW0*B8C-ulVT; z!TivC8J=LXn?4r}v2t*Ag=CG0Ya{M}6~!<7v@0xYBL2g>*j)(r(U6N-WlrMF+4VJ6 z%wyW<4Wk66W+K|B=1t0FA0FVhdgrx2e%0h!^XkK(*aFyOBm{$cJ(d* zBY{;6<-FpIvU~)5!;;E-!uoX9x_E_a_m9X8{9E9@ejUnC;pdnsSwt&FJNRE835+)8 z4aY;t{;N?d(Z`5_AT=9J!oXH?iWK^Ms`7-ri-(ASMwcH6UJy|prtc0SdsaRJ0P5|) zl(3E@$*XC2by;r3e;-%mU2CzHk4{OS^#2P@3>L@vwuQe^ow`n0;zG%hd{CQR^P;86 zaGYMpAp#z|<{1gFdj%3R%b@IV!yZZdsJ-xim;mffxMWTB)IL73CIceW5)Km9hp1P` zxE!|C$nGZDh3D$_;_8E`Jd2nZvT<2xMr1BirtGJ=^1VDdPg`B#;bcpiARp>NFw$Ci zA!dPD<#=BT#ih9viiI8|33-z>S6N&ugJeIRdWIIj#Em*Ls{%DE%34go05df30?rE{ zAc|RJoi~j=*eO~u(BbHy?^Gxg`HvhAguQ2hdIv0|JMR=LCg14!)4yc-qg>}=j1jc0 zfEc}?9gQGDzqIUl$%F$_(d1G9h>D+Bk*7}B+rpVGha)A3ydJ%nSx3EsQfX$8468l9 z)hh$Qi}mBxQbk&z21>V`h-@Q+SA@I8Dgj0V@Nqz%6Q8x+`;(iYDPn(8@##_WTrrrc zr~&OLy%}XWOAE2*x;a_!rOb}wD?sBFkR`er88sE7 zfwi42R)Mp(KcL#2FV6TZ-vhS__IceJ{L zZwmK;EHW>*?Ty@t?8P1}%P|+G3aRS$aD@A1isgDJ-SxeJ3)PcU>cejoK%2^Tb z?CDYNRU1Wf7B0Nc6G?Q2)_o_#U-eEMBkJ?GwgmRS9{ll&qi%5AJr2(c=DV9a+JRT9%;x_ z4;t;+J7&TyBOdz|6I%$MMKGy$D4`9@w>Yl-t1R9 zhA<25lg-OQqa0+zxL6{PZ|sP%4|*{NH9oPHa~SMm6)S+yT2`p-Br**~JF;w)_OF;s z!Cx8-x$lR<$kn&cqu!Xme^1I0!JRI*n&;`R&^?~Y<}u1=UFI$AJGYE9y(6RbK#pJF zGYh}Yp`WekEVIaVgzLFJ{0B1%`&d0a%}77iiSL7*H^fUx&H7`yg&b?C#^TAR7mYrS zhTa}X@4(%onmE)q*dp3p4Y69eWkKp_b)yjU^8jPSI1d<5o%6`Jwlb`T^79^Z@)`Nn zXc>sn;u=ld=kvn!UM>$dj39R3J>qY?aZg~wdLyzO^%7_AX2p`r0yQF4a~(A@L_{?OPMV-7!pj~tm4p+-gV8Q^JO|yv#pt93eE$=A$BqEQ0-Er~_ zfHa0;J|_^50u#LkA3vh_#82~nYUtL{YYS=1&6D1z?`u^UvnGIh%PPBtVk2vr7FxI{ zUowOFqG9SJx!HI=?py!r;X{ed_Q~!0 zUux8B|LyNbD2zx_Bf<+#J^t5U19$S_8eA=e*G$N6&p%};+rD+h8FovMwK z`J^X-NY%_~Dpl(XZtIy}@~_OQhZQ`qDR33O(s0MR!>#SV@*A(i;urzlez|`C(Ie2p z(Be5hKK4_EDvykUa&NB$1~TkI}-Jedo4dBRLB zMr6J6}4c#%S~G<*?#IicTn3s+4>b?vjKn6fBiFeGQpQI$7L>>$f06WW%x zNz~{e(&*;#k%R6Kr{m`L`A;`ks{u8BV6EAdn93FMHx(_O9GAs@ph5RG_85RkT$SYmoRGUx0I>PSdAYB^~Uxq`A) zPHOl;sSp5p5>SB~fvbdAZ44P7ksFTu<+;{wjIa8>ve6SbRi-unyy-q`2lLh0^-R1n zF~UH9G{br<7K%GI8$wv)8=dEs3BF>Ghvo!|%y1jtT0P}(8#}KW!g*nI)N8a`xGd@- z34jDbz!FTU%b>8Sl{mW?+4^jheRn)6*_uh^GAr*##hY_}uwOzJg4TRZZ{L1uo^(+R zb1m;o9OMJGyA0-i8{w>A27)A{1HCZj4;WP}Xja1(Kehi1>OiN1V{VzX&dc`_R44Wwah zh9c^PnA0e0wdS|>2;(d8T>a!odY)a~7CQ|u%wtju$vvtT*R$;d9(&=iRrO=i z>?%sPLgMzUZ^ahRT~08k^U-b2$ZFNFn$y2}_e8y>bkVGn5vIL<^Yv>TSgkGepbY_z=h?zw8*PDrSaEgI~ zI*PldL?xBN&|rX%4lK!Q45pQ0CRZIlR~1SR2b|^IOp>;fdt5WxhHR<A3S+yd< zSf*#|HPJD0;vv`Z-Q1B3%(q&=6CroPN%4Tyh=A%>MDD(c0Dg-}KLw17jA{Ws4#guy14#Sy*P(ZRqxa+ex3e_4=YcJ=t8qZ;@=hD2)}28OE3kw6g5s%EBo9u!NJ`|^}^v0jR`fc;x)&&)9? z0v))pays~j;vvg^_Anw6%K-ff-C*Q8e2Sbps1nJe8^Yh~uCEs(+hUwvER1w~ScaaJ z9Mp}OpAt_j2NSWuv+2!k4!kPAYDt_-}( zq}pT*f%#4d2$V*11c?cCqONeY9Vb88heVw1mk!wKlsawW zWrCTe8Xr_&$P*(VaWHULe#WM9NbRHy-hBPfOu0CRbBHLlkG%*Fd^KPJB|&^nF>iv` zQUQd{K11mdGhz2Zz2wa*lzn9?ra@QudXXcom9E>NM#;c*$KuNqT061 zU^50Q9zSO(C>n~M%^!oTsvJNp)uo=|YmqfU)-60}{y>2M5@R)Gt6HcLn?`NDWusl2 zVPMOglZSR2${qC!2HIY{&aFQA9U{)LuTnh;A{N!mX<`q!v6Lz}my)ol_C)ieYSV(A z;We;h>*Mp+=1;xdjny~_{nR~N;DicWd&?R#>*i!XmV z`1rkZ;9kA`?pMG0`~QkaGVAsA71b-v?x`^nS6XZv4hBcZ7X*ENqwnjN!8rA!(_j7K z@4flvFManX-~WSezZY;pztfW@ZI``<=Wi~;ojpFDogb4{8o-W~sPYe05f%4mgSDtM z>qu>Bd3W>f_y488IzUCy&MaqbOJZU)18F z#x_=)aj|ET6NIWVEIm)*2Mwi$ne+etzxa1`e>NJG(NX7QX)96nY=7&1G`F}D0n*aXJ&}hveZu05qsC#{V!krD#Ex4Gm-byQ47X*byFW-2F8gkS}Sjc*B@f7!@-^eMMOgrnWIv1^f?Rh(S4%X)JthDh zCQ)@ykC%(Z_;%E=Fjwnc-=$arzB8ZcznUH5loj(vrZx7#-!b*V<&H;?@M_ejLfv?p;t)!{Vanv3?XChmw6e{t@H;YAF(Vb5x z##A!$%c~Hf0vPRVb4V%IN*Go|DNH~sBM3r!zJiA!-hy$79cw}1C7e)fHdt=R3(1<= zM|u=Kq`p&Hv6c&0YU9B`g;8xciO84BwKFDO^Y9*PEBI45lP~?$4(8(b) z*6VwyLoK0%7=3!1B@lNegiGL;M`tw7r^YprTzj@eEI1*t)@Ku}*MlLPr@r$5D0>!T$}26(J#d7+Q3D-J_M8z{ zAR=+aUp9=p?5TIe zW&W;e56Sm$;h`X)tbvL(g(i&TkU65o2*0>}P z={Q6uA?{1w#sE+idHDdY&Hy$GqNl>o`kHJY1vp^q#c19>KZ(yKH4&f#)rT}fz^n8I z-c7k);Ws($-?(5=TknUhtNB1}lJVb|`g1WJh*odB3*8HyXp+ zTShg^1HnW>QB%aBWetCAAdB;iTK4KGu(1dXY-(qx+vJK^bJbM61ZAsHsUQ+(s%(2X zDB8wTWKL6QbX|PFb~VKsnlvylKx6Pi9pu5eXx5GR7Gxd3rMK^`<#lYN!MH9NLeh;{ zs5q7upM_C=8XeSBXo~cTvqweKpKo=RL}^E>WFgVb#*JQsQgMaKf;n!m{L~ zIkCl-P2Vy2Ufg^tv`(}ya8Bh`$GV6@vxdjTw=y zVf>CGYy3{0^v$=QS-fuo)k6zn1j}{j$JKT0P5wO0 zO`)^GGLu8ik~3f;KLFRKP55a3h=T z`L+F&3aor_pwp zhevgYHlScT=zZelgEiYx1HXK(a0bqtFguTBrD|N$h^)SQRkrgtnOWeYE9I(NM^Kl@ z4v2rI7{4tuae&;Oo(8?iKm66V8rdGZ>4>0xdN(%~F{zX_Ex&kuy#2rbt^aU5yT<_l*Vt1U|4Oa->HS+4K3YHZR#iKx ze|1|nkM;Pu+O7)$@4vr%^P@L6mzSU$XAj%g>Lq&udSfG@dZ0_2btl}MpbDGa7KV3S z2#f#*{prP$V=!8I?6NLJe5N26nwNVMU#y&B3-|Ec=E;7?kcRWjZZliwpUU<+KRhyh z&}clm_^Pm9>5o5NoE~cwG2PVXACE?bz2{;7m&fNn7qb(Zr4;KLXH%M`?%64WO&)r> zA8sA`nIC3VnAj^!hZEi?+O-0l`!yXcTF33_)pzYTKT?@YZ>DAenx%e6SnV$z9ouzq+x zJ~xvd#bZpg|QbnL=xVD)Vag;MG#rIiO(6_P2!8|lWh>)wW8pxvYvcPZ%F}`ws`Tni~ zArah$Q*%*vpaHzu$!4iYEfe7`e?gPZHgQQ-f&QccI=Z^Gy*hJu&)XQ>%@bB)1mppo z7&Eq$G@U>xVO12=!&$jWXB5jQL;R3*#o+tR4dj&ei|T;^X793od@`eJ%1(kb{nc-y zt4kgywa$_1VsQDXdw$ODa51!p+FmKv@Vp$do5Duj>X9M8r*ijb{O*H{!D zKUO|7E@s;a1ZlSz##SAuDll#ARdEDzsp-q{gu3rU5p?sKJki_4FV5el-;H4)35^jK ze*w7A$C`TsJ&?G%y68Qv>3h3wy{5^WuLEJfsv?ut8App4TB*QU(NTo$D7cG_3VR-Z z1?$MnNT&MnF@i;vWWbE?N9*Ji41f>-3j%w&Z9N=PVevLAlGq9T`A#Vv&{5}kNiYCWs{?mT0 z@-}IKmbbmAdLGiL)Be)UkJCo6CSw&FP2nsCT-*gd+r?~W1M#tiQQ|OVRE}Tm;&{>P z%X#=lVZdk3$~E9&y)1X%INEqN5l%F4yR?Ni!N;&En62ZajVU@kX^? zEA*mS;uE7lmH~^wn zsIb4;mZIb;F);!;jSC24A<;$|Rv?zf$Ds3#SWR6bM)_8eg8}q3zRV%LkYx@xE_TW-i~ zrIa4Anw~^gvgeXn4JXyZW-!fYKo&k}f;aT}1+4@vl zG0HZybJ7a&L2nv%->i8Pz1&qkcBI4#7}G)F;84i2+}4Nu%re7#*;aFXb8W-N8F!c5 z%Ve-9bf-}cmC~9nC8NVsyBd6K6qs<~6N&uxGm>60Hj`9tZCTffE;$*Hi zZboH2r$ES80wUj1S&+tv)!rvK(-6;bPM+q4jn2f1XVxprYWuME5qe823 z!qiGEYLO1mxOq(iwEL&v%%dZ-2{3^MO|s>>gv;*lQ-Hv4H&?PaGvk>dYX(S55w^= zM^#@bTO2G>yL0l>k3SzBw(Uv}Z2y&mk)HUn?>gz;W>{$FiWr~ed~o{qn?e7IvXYol zhxwc1udeStz{yM>d60%@sWbIx>OGrT^J8>GEziIFdO5gF>TCvNnt}GP{XhN}|FC%e zZhy6&3@+UKZ_nR-`@{FjF4XF~`%%HC@)2uVR#s!Z~jAAkH* z;?%(e2Fam9@$r4RB5b6uZf>2}F`Tq{*0MYrQ3Wqamu91RrJS8l7a44 zP>8*7boO=#n!~Ol>}XJ28Hhp)&Z#=Yz+c-WTaq)x-HB6gcRr3Vp7<^4%=lx0D2<<31h6WB&AqEhhbT<0Jibw$< zaNDXl`e(HQPiGpV?GR;U-C7=~Z2;2hR!mZb5Yk#nfiFU%(^xQALyIca$!n$EG9-b4iFRk*+n{6s&CqnZ6EfuE${n7O z#o=H>hT&SZ8uQ+;P|dIBVJ+g4uq+ldx+kR;aZ$OT1F-U_ft+L!APfD4kZB~;YOI-0 zMMw{p(b%TX9nSk>&(R^r)oDMVt%ROkp4QXLWQne{tTufQF2+P^Bnmfv-%-KJSF<5e z!q_Z{9aag>5n(|(hzjf=6AJkt1N4NtwlJCnrv_)yZ|MDH;zsKn=~-L?Y`CVwz8M~# zGJNd%G`ZNfo^ymFwJD%UP}p((1nMrv90gF!`cRrGP+-?em8R1dOA3{LfhaXMsaZ`a?)^v!-B!Wzhe2pr z-2}h|i}OYa>5wyn1SsE+x0m}-&2F#|zyV78`4LcEO0Y8~$ng&(wt>BZ)HeVPVw$H3Kw|K}YYkm*2}(1T>k?ynF5RRqEAIf6QLUpN2zej1AO< zto1XDVhE-}p2mvSU{*as;poNZfP6pToy^~7jq|R*i>v|!w}?VNR{*;@Uo`5TU7lZu zl|T}!xj9)LdI((E|ANtJbKY|Rg)e6%_{s@aP87)SJrS4(X{@gMQR)TmdvuD%iqrv8tA&$V2cM z!awsQq71w5+xhM2s#t&71#{gTos}Sm?i^Q--$1mUtiN(j^_KC%6>EfIKkW0E8O>nC z91d&lpb0eOuY6&cpC#x1e)o2Q_b9Azk9-@EJ}Bi1<C_gpR)6j| z<4_`9$dH0@ z9Zx0()~RC?O{J=J?rp-6l*KXA=NhhG@p^9ZJjpR53&l6fvkD)Gy?nK`8r_+@7_B>g zN`}X)JZ_%{89q-rI}~>#e|ElnZpTL@*VbHLm-RGU+E(K! z`Z+`jsEvJXjf-%#;=!I%f_s={`!gRLud zVm1dcMtXocl-MptN+DA^cQTp!`Dc@lzhl&`dZ|us*@Iu$OHU@_a=E%xgEAaNz9cw0 zMG?bz>{RT=yQ}N}^{;==bB&#Nv(0P z4{3yUMm?^NO!#XTA1?hZX4Y@7Dp0J2lW0>c18L8Uj1-*LZo~fd4W|Q^8OO(;QAX!vXMe^xfXxCkdgK&J+ehxl6`}FNk+pin-NMeObqj_`j zv0TXXdLuo`Xe?xUXqErTfB6puKJe5NZRoR3+Ip;*HUjrKr%~tb~Awde@se79oSP-5h1BkbJI zPv3scE!p@Ro8qXP?OuGyH)^e;ck}uEH{X2Lzv=0GmQfSrRy#+O#I;%#bE$xc5E2JE zpT8Mj-@5PI9a!7=nz9s5z7O});jCO^d-8m9aU%&s%qw5Qdswtq!QLoYv|sUogm5&RK^Y}Dxm@EquN@sS@`KSsBPo8X0_J(z1P@{Vi_v(CO1p_4mFNnTaffcJ z)fPC$sJ8~U7f&Ya1z;?Plg!3lDCV1OMaWn`YD+47Y&Q_Z27XCzbdiEJs9b5eTgoN~ zu;nuGiDIscx=OgHyWwmD`H$(kQV}>T2vIIehEO%y1~R4ZUyGFq0+>2e7OFhrEuU!8(2!K%^bs*}i(<{Af+YZcK#*Vqcc)Yd%Ppoe zC!+&+hWN2;2&VuK%JfJMYU4oUx`&a5jD6xE+HBr4dKHKRXF3*85BZ__awRQP4Lv;h zVwzOZ917o8Cl$S^slJo$o!ruEG$5)>>bgc$+f9~QK(_rB^F^iJgb#wTGhC8JD;x=J zIcLS*bKN6}W0-i9;A37AC>(c+K7P?4oh!x`4MYDq)ald%wUJI(P)L_ACo~ZNajqgk z>(AFq5@JYEsnu}?Wt++%wZo2m=#)8Pp{V9e7w%y(r3#oB_xnZ8Y2n5rQU)PQbf?KaO*;-j7!z-VH61V`4J^D zQl|hfxS(@r9^hP6x@{zT`Q#C&2IeQgI*Ex)Z0_I(X2P9K^<>FRlI|dDL6s&RK6q3YR8BwYB(~k;^DDq z?s5;UJ{a$cHI<8aWHR1G#o1%o5@>3N_zbqGjcOWAx!ERINAyT6V~nH@H1~ylrQi`4 zL`*xhC*up2%FuB5VD6{F5gQ8=7qZ!aX|5#8s~g5R_P+O(z*B%l+7?0`_%*uN=e;{0 zlJ$p#Cc$ttndEJAg5glv?U}fsL}xamMkZ2_Xv_93tS;=1Vkr z$Ul{LloaB&a^FV2A;b!*q8R|Hrdq1CMS$@34a*~}Ek~dlqFtgQs@b%`(HPz%Vn~}~ zNJe@+>=PjVaxSnkLYY#!(zc!)l?#`JaIN&J)V9471KA`DicQjZNE^hDVC7iam$srt zc{ur*4NAnC*sYj-BhXzRK!hOCt)G zIA08Hv@%j9ubq#zVAKy|4zkR`A&N<5 z+^aKLUvxH``Ce6C0vJ;U^tavmL4%(cOh^v+`namL4i+26*RyFapG~_F z&~|tt`V=k{au_lB^Dn;|4f|nt&Za4~KfLQvaA2&-1b_kT!1VUAdVB`K{`Bq7|Mce% zzIp5L7(87pwV~!t&klKG=CkGm#I4#h0L}C#ig8)X)*doZc_~jDMKAaCFu1!bRq6)n z+PVjg_JBZ68Eql&GGu#ED!0s-Fk|4;haV45jucF;Z$F)${p$PQ{_gOg;_F;qd^$dV z14MhkmBRbr%&>A zFj~_AMPcLUo5}bR-Br%#)?rhn3K_|_4p9$=bkJjS#74sjJ{^`5JIFJH6}cKvE3UfE znAeDKVv~d)yx^%l8_vtcyrP`5N)~3Pht1*Z6AxDeyma4|t(9`2DT<$!>Or45mNL8? zaC)edAr;E*?syXOA3#yz-oakXmX&h4a#sHIo7-v?v%X?8I)M-Jj6s4@QiMWCQCaL| z+}d1&*c$ApSH!F@Mv(LSVrE}6N4cDdX4E|a7TR`?n(mD5+OFh^%jxouzJ50xku~pq zadv(=>{U~h&YKo)0PT4G_S_HR)X_^8gm`o{cbNAKr(=5I;kaVmZlRX_{65nF(%KOFo z{iHV=PDzO(*$Qu^D9VP~GP)+Vrrlw!Sp^+@0Jr$;cDz@}z(am3XD-mn(U3eS%7Y71 z&_GD$OWucM+_7;YFu_=@z}cCYL2b3A=BD-Ffy^;P zMjJC9!wnr(EYPZ|do**qD^eq>O;iqb3X(EdF|C>USpypCkT4l@fdh`V@2KOM0PO)h zJt~j74f>bY<$48P4=m1uON`Fsy_Hgk1&1pmj_B%UkQGxe4J|Qzi9|EyD)lZTWHu!A zw)-inOoCH1Z>SF6L)_$4zL(#tm3$s{qL3^5Ip^XvQvz8g(hnfdvvXud{V*N3`H}M= zkw@T3lUT8PD=Dy0KDZj0VAz&HiN%$J>&w|4XGgl z3nA-qhIxcOvu!>CR6M zekfm2dP+&oXt~}TcW+@72jK;AFf#aZpY?`;S`RaRI9ON28mF9k`0$y)pd+SKncN|k z?As!Ag1i)UBk>?Rp3QaM+gdV4nzZon)lC?7F>o9OX=FViveKQx!z5IjS#=>K@yiB) z3rz|)7^x#Lhm^wwNa6&1XdVOtFa%IQ3aMdh*~5;Q0ODDPAAFLr+O%G&nBq8a2$2nH zchQ-FI0c<0^C~ZB7a!W)PfQi^3Bq{sP~)ug6AnU%50$ZvxEnc6hBqr9PTG z(ATkjfiOoESIgyGG+48nv}vO2*HT0f3zE>8RbbIiqU`BIKg%@Gs~QAQ=g+AacZP$( z>IU3VVS<@ZxegJS!mrld0lufQepm2z){J|O4nlf&M#5q*V2KP?<_v^|%vJ$meK;QC zN*u!g*)dB*^EWrPe3IUzQ$+(|*jPU?6;(-AS|os$PCN2`Rz8HbNDfie;w$W^99m7R zj=g$6o@LDMiUrJTWEDcU6>}*HByGI1(mTuHK%>-ZCKF)OYovHc#-)F9P)mafH=-?F z;lWxkk8?9&X2M>!ydDy_#N<}Z_%dyr1s$Ewqi{hP!qvnYhKq+Ar`#Yk!ua9^;BlFU zN0yB9eno!IdlPjS`^z^4@m&oRl_J0ACT`Qp0%#7TQg z)KX{QMebQxSs}tPm)Hnw-a)}CN@oF5~pM1r6!wQB}c#Z1T^$XQhb z6g*K~HiLqmDu~yIdx1b5T`qxh#)E<9pqnf{C)q-_G&i9;y8P$fQ0S8vTHfH%m-9;N zKv!$!_cyWtVC#l^02NItM4k9%4SjH{DcV1%+7JWH*c z_dl1~mDykd@oUL&=$Hlw06K(yCzVEKex^t1-3qzX&g*)`VJvq#gMP;9AUyj zcc9w1yHzTI_!B;clliDx;lwzX9o0KpH$OBFPvzSh_B=c9&3meTe(bCHM!)~|!#}&Y z$?E#k6G)Mp&f0~wIxp6aA`Ho&eIn}C8nvjwdJKD+@o-?U*mBOzvts5zwOa4>x|X_8 zZ{KN}6;IQ9tx9=38UR`n&_<*Fx>vZp>3#XtyPHoxlA1^?W&1J50%Zj%=wC|dmaOBm z%%ktTJ(~_@)>8Cx{3f?kH9BWTO>W1nnJLfbpWM#WccbADB5AZ5y$5TGPXqZCUVTRc1OP~XxN3-~@Mll(1qg-HvA0FlV z+su9LZhOTtTXeO=RlE81#no>Y(@@|U0Hr=4b?^6slM^$NnE%M6U+yU^>(KKjc9eH- z9M^FY2|V3eM-9LXKDGFn!y=$Nxh715`2D*s3mw9Gn^a_y@1TWpIhwzF`xQJ}tXHw+ zDcW}lEi^6p&i9-JV3ONU^Fo7%=gzRVsCKH(EG!a9g7!F#SZd3Un?L;G;CDZdT+Oek zT@ipOWw_1rA3z=|Q#h6-lO2|oR=ImKkT|LoqXZ#yCrm4&C@f=>U1>Z2RH0#_YV%wmXFIu?S!QjlKSYl(P&jytC$E=YaUMf zSCi?**_*#5)g;jqS7}Q`dDpGLqQZG{yu1KZ3 zI}qUVpL~Ny^~>$YE44yD7K|=SC}S>H8YG1B3<Vffq6*)84zDlHWC%jWqXtM5B_34tV4Mi7!~>(YKi z7Dg;fDlZ`-Ph0{8aJvO7?kVVOkaw_wL$@%TQ2=pGOF*@9d+fh>(%F{5j@hyzySy;O z209@Ez(qCbA+#3y3Rp}&&yDK}U=g9RZ&lloVojoLPB^m}O zp?1))g#|Y#W7sX#S^%=why2O!)n7}%KrzZq(hdV*tgW7n`O;14SK#l%7TcKPCAcXS zbkK;p=hbF|VH89N;KI|`bax=Q$sI^@S%UVSS)p<7r%Ja_svnp<0<*ByHf~a2THfay z4ZlKCqe9>qmy7P5#BfQ1w~bt=!{IRM5wUWH*B%p3CQ7c zlTrBORh1Uno|toleAUQ7Ai!P7yqcIg=Mtj>9ToAWo`-7+1sfPS z)C=am#hd}3D(XT=6g^?>ie3eDt<46TVtJ?CS)%0j2igOCL61YXI(Jm5T_F_nM$$aO zCHnOh&_kZ62)($xCQU)RT5~uRymlP?U?6xfMMCd^?qLuLCO=@ib$N=pvDs{NwiN-G zl|5dqKed2@+Q_##q> zL~8*nOCHcAF5=M*uMe}ywif-~eu3*+w4r;pXn4wr=$^;xM3a)n0cQg2qz`c-(bXZj zvmbqNKS4h zG*{TuLVqVApC$w5T`!xl&NOpk!9Gqe?skVlE+D_M-NN%HiB!UJ%-hl<0eeX4>Ce-Z zx|V2Bkqf(&NK8Y7MVU;Z1u#GY#&fF@Lz7CEZo)`YLn&u2RjJt$O#F(hw!PlS(Qr0| zE*(KS_SCPH3S(}A^gdV8cL6>|3$OV381TdMwQg2lAcp>hiinv$KU0%?QW>PeuFmgL zJ3T*H&Y<0ix@5}i-Ahb z3&!yerFz*FW^B-fwiI2wxPRHN zFYGq(X(TXTrz;C4!;RM8hC6Lcx~?BPy99x|Hv)j$A! zwX5W1{iO3`dUxlu<9g(Z;)$da!$`j2H#m7(meiGf5skmen1NI}#)kSOjtfwcna_+6 zArzy})#9(=6Hl~DkW4j79p?$?AA5M5<8AdDB>Ce@^sQy~kKg^t#~=Sn8`5ktY=#E= zS>={+mfaBYgL2`6qr^-V$=XyNNMt! zeJy2s=`xuWok{=d+SO^(PKLdDvqMr|DAcYle#8w4XlU6&HP<@*s`u%ARc1whkt>a7 zce-_iIVon$BxQVGM2;^)%)7la7>tfi8>RB$<%b`(|M5Tiw+4Fn+&cN@>id7b$7OGC@7>q`(qI4juMb*Pda0|co5t~BIkS6teJ#@kBWv}})!miv z({8jUbU%|3ddP;8A@qBbR_8#y57C>=Wz1<4TYGms^K8ImL(#rUp~&K%cFN^o{)v(7!F2n?W8Y0+%((8Vo@HZ0+OE^6hf!9n+-RI<-F0T zg0I~AndG2Xudlkths{;==MdYZp4I*exI$#%bFouh4CODFCuk`ISjoul1r> zgd6sRZ5{wx3F@`{v_JKp#uH1k7$|LL@=Y7->2*4Pc=z^5@xIY&mMZzd^^g=s9tAc0 z>EHc3fBBnVJ93|Y^YwiBP^;JAt?^)TaM0uv*Sor{HfwgYNmJ|1?DU)S(d_^rXdWFh z>63*bOA&zNuXO6JJ!&ia2gL$Tz!jqY=x~O&^X&A>&nKofX2J}S_i7aMgU0rP;FPCJ z2m>b_b##Oki=l<4Djo>o6iy&vRv)bC5AZZ&rUY$No~y0^w9lHNfa zdUb=ccwrr7}3AYLohTm)?u4DZ*%_AY%y`+miwX zf?SK$v%YH23i_un&*Z~o);{+{bX*LtyN%;x-P=+`-3XRi`Xu5D3-!Y{)836ws6hfs zept`=OG%`o+!wNQOaarOebKLAh-v72ji;D+hVDx(M&@b@HBtvkEl*4nj{j=E!J{IN zKLMnKdvqTTh!dah3y-*8P@G8}@xE#$#oBy2^v1qBREHqY*&1=JeN!k z`k^2SiPURc&qj7QygVY+#L_lf7+}L;lkU)&!Uq#b2&Y=S6jH$M75~AQb21e!aF<|* z@Mrxk1(v3}7y#KDmtJ=Da8I zhwt+|$dMP7lF*;f%Oy>~Y2VJ_A6Qr24GDKtpjpO;g^Wi}c;xe+@B!^p@KtR#Nx)$=$K2J=D5)f(MDTnHbw&%8)a?8g}Mw) zLzGz=MwoNpeL$%wQZqf9^loTLBTZxGQ4A9M{SWVBqol>!y4)KV!;cV)XK9_11yVm~ z0f6DvFk9xW$?{cUtIj~qY)M*UN}Udh~dri|Mk!QmtOjX3>1{-J+vGtrkl6iMe5O0GbbTL{+Z_n;zJk>cc>i662){^qe#GY{G@nlvw z6NWbrFZ<*Eb+cY8)>@wF==ReS>k?DRHWPeMrP3iZYBo9w(!JgdW4x22llMRWMu{n( z>uhgN@jI){J?7KRU91-$r!vEPNKy?LyQ1nd?2T;lt^9wr_|Lch@qhYnE15-iu=8DOk=5ZS z9&Anlb~%+bz?SYqhSlj$Kle`F7^VaQEh>%bY_za4t~-bYXB`ZhaGwdWOu15;jQC7q zd?*|F;6+tHzyT7(cKTM8$OsF9LX00VhMamgel+&rK_jeogI#%@aE>~%d^kl9-aNocmMO-vww5FJvFoOxN~fxv=Mq* zA3!yQhyyNO+v&k{R5PLP!PKc8{;`BBX@X?b6sMU8>I&PBAr%Qg$Vj3PrXON{P*mhy z7B)Ose8{L}X}Y-Swazr?zcRG)#iLBAnHFi7XPc%Q4Y_0S>Bz>lhSr_PtX)r5Pq+x% zK5%VsU#xI^R1b@_!m!(4O_!8%#ddpg(}OGA@1`mx)0y3_`liZSMzj*yg!N8`YvS5~ zhf+beybY#(T4`H^x5A1L;og?C;QBVuatVJb6)}Q(eP3CIsJt#=y zyB{9F4{|h{S)h)riWxQ{Bc`=*PFMpogfD~}Hd1s3J{$IJf@DYxqH+)#R}7nJdfEAK zRID{!Cm8ojE!UoRzo2fFYP5|JHe!n5 z=b*CIPnEO7)gT(CdY7M$zWj!Fh1=fcB3;r4u5H6j3bYi;Y6P}@c} zMCV2J%orohO*tG*pCG`h32cm(!&DtI6qig#7<{@bH%n>Kq$!9V?v$x)aWNjE9{CYW z`pWW6=xum?sZimqz)!51WI48CwE}`J$DA`%-TROdbR#HADBucu0coa0Uj!DTRGS1n zKPsGf4FIzkOsGCNc{q4>BNdW9UUd;TTne1chO4KP#-G4Fl4~zE>R=ff z;R51(`(4F`OAxAo`I#+)Mx>1@{TlqD8P7O`2o_O{5&BBITe?4N7iTEaXaPacBpCPl z2$Du}2jY#^ zks6DQIo!+K28$--=z>|h+Hw$nib=sexxP1a9LOcCwit`_^k3=Z-Mn%oR5Cr99qSr( zGuR9PmS}=Z_$YvpksbOf&hHKub1zLLBb=y{#Dy9~nc&vRXVg16t!q+^*(S=TXdi_N za-PHvl$S%?A2h@3wbq9ClI}g#EqZW+}RY!6XkJ_Bbe%-CA09TCb4P+Z!1lmf_B*QcSpiuJQpu|XHl^kpx z;p#p4 zM*lW&V!o}&vi5Wk= zo;ORyo9+P1wAoC{^o7zXT$O2;LTS^sL(GtrBBaPHs_z6V{UT$1(*R*C|w0mEm*YlWYY7w^R^9g`x=Xt zS+_x%5jIX{Lyh5rwBJ07%uGWKY z{}2Dpx_rykz+v*A&%gS@-~lsqx6Jxeu}`J$?uL9XrlYa!8U0OS>hPCqeA~8Y znzTXd3l3@_pqRuA4&H{|PEHQ`qrRgBn$X_Ib+@J5y|WnVURLzhP>?uGgfvdA?upuE z*rmXaMo_TE9m-8flcad4KW8~xmr6!hSWSz()$9~+Zia?d-&|cm1GX9}G73i#0`N+7 zxVrw>z-+^R!m*DU_ZH+DX70q#8NmhE6?|QOHj22Gu+MsIVo3v`h4+`=?%>~7>-?ZX z11Z~qt}14Ktpe(j7h%}5#SEGvOmvLQ@oRz`p**7LWfvZ6C}e=JZc`MH`xhVNV(=|o z;68)9kxki}2sUlZYmh{c2|B_gC>*GtcW(rb7aF-Oc@j?{T!pSSCqMjY5@D$1%tc%% z3NAXeg7gp<)=|}E&9kK0tnpb~tRB5-2-eLa+}yuC zKioXMeD?O6*Zr62?dbHgBh0cTt#I9dAQV_J{xO~15~TqJPuAIkyJUt4k#s)XaoiS( zt4HE^89s!uVqO_7O_(IMUCMV4?i=x6h6(if`qHzUyBRg`i=(DWvSZCORfnFz1302e z%ftm+c%elidfqA(vZ>I4C+=o4`Jh8qpL6! z6mYn<4r9X8PQDG{%JDeDm}Ea~HnC0TzO~OKA@-XM=0_SQhpX}2z!s%WD%sON{)7I9 zOP^Jnx;fp3ZTOK&laKS*NkT3VtHZDCwVYW@jj9Q{U4~$9nXpJ2X1n4KT`i#PWH6GX z5ec~(Bf2M3O5`4TrF4Va>h`RgmaPK$p34&+lDYYfFb$G7xl^|m- z%w-<;0bSV@Mm5ABO8UX)q8Yw|75>zPmr6}XBR5${(_h%rg?B5&0!#HSuB*o4;yl6d0&vb%^SWjr4zR?X;e=W_oDPW>$+Ub$ zW@sfNr=o?SIp@}!jMm}R0X_w3z6ICu5Ei1Mb70cL>}aIG!%vK^`0a+H_%^nF;un+C#@n6T=fK(vlGGQ!G+h zQac-OonTyToOI?fk=fSJRAti=Hu!3?TF`Lgmcaz^Q<(D-43h$UPVBgB!H;_!zKzB4 zNjwel&`kkql1%G4Cw~Fe)Ub(0LGxUxfkv@U!C!qZU{kHh0>ot)&8rpx=x_$Z71J+U zElUTj#a(YNUx*gU#QcJsUMel5iG&C!l-CtnDrSB`~GE=>fi&{27(ci za@)~EMEk;~+mtHaP6M)W#SlD}0nHt0 zkvvCI?zR7*%v5&D$ot zVt#{qE3GC2S+uVcTP3MbIyFLH?7G+;kHj_MST6B$>B}xwp1yCK7NJ6aq)beGBT$EV zn6F5%>}y4nm%G3&@>k%gQ>>3bc?rul?+s8e;GOtm))B}E5L?Ro^>}sHGhR;_jFMgN zv}J;Myi8*3Uqdh@ZPl^Nuu%mlW_V;lZ97vA>f)BUk!JZ|GIplH@FhgZYSKs72d?|s z7&qHM*5jnAT1By$T9C@};aY(-x78Ob?Y0|7R+cMi_E83C(p(L%e{w?vJOf@ce9p#BoW-r2em=kWR$>cS+0rc5 zGC2xmw;Zm-l6nvdrnwOpW!QR@+W=oBDj6p^`I_LA6xpvPl<4Ny}FW-)aBazLDJwGv`AJNo9 zmE(}k9A01bpSMZmBxwPp!zS&;jNFwCwx5fRV&%F4txS^~HF9{G2IT>p7XdNu8p;KN z1s|^e&IL+O^ao%5$#*~e&GG5c#pOqLKhyp&GX1mv@bBB=1sO@93=g<0$HU3l=SNz2 z!{&~YZ@RcxP7$qEw?tKI*T0Yw^}qSmm%sn^r`ACO7iI`?u9#jvuK1wMqDdX^MpDkL zB--Ano>6fI7cRIeYcq=}Ub+Xlu*h_wJ1vNyOkN7%+!Bghe!3$XIDhv?-OF!nFGrIm zS5y3SVy1z@bIF&P%?1D-J_cbn8BSc%;04VhP1wuBw%+cXqANU6%&_hh5d{kfR^o`j zP>$A26jUn-dOo#St}VM^PSMavfP^C8BBRzC^1wjht#*U-$yq--KO5b3ZE?PeSVKyI zq)P`>yKgq@6Jy%-RldGX!oECDtS%H5voSXo0#2@Z?5U3t{t0dm1&Yad(mt&B7;h3>==c$14GWJE1zktgMMga)co=^|*95G8fG(ro%;51Se5$vL@r#V&Q#KgQT?{ zMB^VMEv>a(i{WR;1X9CiaXFk)IVE|T_#Y2W#@{$@Z>CF&=TiY#jgzC%9V$*lmc5Jq z!fZ+U&5g5pe1OE9am@~wPC5s-1uWvN_9w(US>?<}j#$I)ZP6f3buNVZY-W8WByRe{ zv$wZD|DbIts8%yzl7SH7xUFJ)sMvZROKc|zsbR8BbZ*I!eiKT3o=9mC^dm z#2hi0k6g*+s_`BkaXbVx9{?PpKq=HJ#!Y%|4tzoq??^LP?a_|0qtM#d`|w@m@Pu^H zp3>N%odGt4oCJM1+ov)w0nqTt+b8E%nDJn>Q5%nxPXQ4-aHo9Mnq8S*Z3#oaXn#1v zP8JXa$0)=_i!n8_`mw_sH(qo~hpH%$4fv?|U^;MEyhN$w@ij(nH0ugXL{M@PQVT|Z z4raK93fCbn6N7CvOoXz=!jAQTTu7Ty&$9@)&bM7_jAzQ_GHL3Ldg*2@8Pkuz-;4e+ z$unWJC>^*Cu!->_I-y2mcsf9fJ`MwgS&U$vkQOSaJc=ml;SPlb8fHmcbl6H>c;QqD zgZ-7G z+1|>RD)XsEuvk27f{8#5Ap2Hz1FmBV8k25M^5Bb`WlTFj(-8rcaD&K{=~`mM;?Z~l z=yB_h*iqAPQiM&cD`^aNSx!G-G}36>Lbk5ujlKxh{D$?ROmx(TE|T!mUW^%-G6Y-5 zo7>D$mY*+cM{Nshr$Tb*{vdHY3%`#LOSThW&V@xgDaW9Dimn!38#hK^m$S9@!(!qd(M`bN z1~;zY1FnQ%W^a#!ny5(S6oF6`sQor3oQ~2w)vd-E74|eNy#KDCC@6OVyuUP zv$Pc2ut$6PRqxC^*JvT+q{sGltVzB=k))LpPW2LH$>6-T@46bnXW9?4yOhxyGat!; zwXmv=s2jONrr23euPs%i#{hn*x)|J%9NMwWujG>em1Sh#6V7n-5uu2QHpBH$&nf{< z);J%hUQdC5$$o5f}71NG>EzpU2#TycPQ)VwqoQiFN2L^;7=qH zF|3vx$%wE$!Ek1Cs@6KqOqEGJ$}GAgNF$L( zAnfV6lJBfP^xV@KZDRMM>))4;zS3bNb#a}F6sQr|%wAr5a|kHhAo)_8-%xnrk~0wf zlGoALJv=rV&58LdCnw#j54Ny2E;DRh(X%P_^M<5xIv!McePdF$hz6vHTga?Zi)s7> zePPi;#gom?W&5P8uTQ0_fvBSr+uM71uH_Z^7XAyRY{1$5O`(OXR0+H6;2`xjpIGK(P zTFu_L&xPLpATh17`x?&(+fm7mKUV4HuG=tJ{J;H=|A7s=m*e)nU8}dRKD@7**ULX@ zZ+prz(ad-yp3DbVz~)3Y~kd&4_MHPDj`xZG?EuX_TJZWf#lzNXh3 z7K`D~Et8`TS`Pcu@eE;M4zP1Ip3H;3-r6gb%X5B5>X^@D?W2>o$AAkyH6bNf zDHtg!(AK&PoOd`9fuYXfU5TqUF&A_ z6L3blzA{lX2zY-ty}PWRy_1A_U`~`<1nG`>ME(g0Noi}97uxe#|I_|`EvkB0xFdIaf>hI2w9iYp`f43-hRBvG8rpSD@jEH z&f=}jhQ_PO%DjwJ3I)a3snl*e*B+U-@kZW91PEe9PxU57onq;<)qpP{`E%Q_fthI- ze$t5-6aNU_+5d7muJFV%8M&c+?@zY(o}-I$Z1|5U>duRE7RCYgjH_DYw1*Ruj3?_u zz<@hn%vVj-_IsY=tR`Nx-&3wa!Gf@bktj>KRG*v$IL0%UhbWhmbGtsmfFz$@^@i2A zXBtTYgFbQ7F0RMJ-DIo_Y9?vh*2@+n3gAIh8Z@mx1w%g{Ov5x|s78e)eFhIWgt2C@5pLjg;ZD4hK?`x9bsMRBZf<%u_ zB~!Q{L^^mJ;Q>0w0XK$)-iYu}Hi1s*`|JS;iTyju+i zGHHb4YDLkl3zwr$4^jl>TF8*&VdC%=*;38*;l#ne4uYkHH%g82lR>P)jcZy9QoZUIIZ^Hu z9EYRsiX^BJz-=MYGS7=JhyX-1ipkDfav1vbCp8lZJT4;?mz#xi5oHgG2C7}X4;ho* zeZf(b{z7RWAS>^X)(kbvuh?T&3j2k+fd|QB1C`=f_H`cJuSaZZ=g;pWF<7-pk?r zQk~LgAFqGwFzD3P#VOkP(rTgDkU#(N{dXbJ5&jDY?W3E!ySfo`F9wA{0S}#%V-!rd zu4wy*{G&GbR4$gv)!N0y1->}E&t%cht4gV4&K6th*GJ~w>FL72v9x~u(Qx1#ot&TX zlXFI*R=>O3y}4|)$_!(-pLC_U=SRYLv8*Z2Ow{)9?xV}lwLBqQWJeUK?h|jztLy$j zry&+`n4i%J60!Z>6tkq)e_W>5EwJPR`Qxm0b923?uD(P_PYPr0C7 z|DreiAmtt0-P#kd=A<`$+<9zNbvrz^+H7H;*?=4#zp-9gKeT%0bNLB5pi-3!Nv2HC zN3X9+TQY7XaC|5?8l~>lpxg+1=D{cU<|948G+svo{~Fn(c;vaoq%v zCpVw3HR=i|0KNeLtR3`NhCqWAwtGnSRzX;Bv^5zIk+qvSy7)d{N||Wx z%S|WzREmq)x^rCVU5!LepfFqHjvX4Cqobxd3XzGXSYk5VW-~LiSJA zM0f{Wr4x9dAhe#JJ4X#ZRVboh<_b~a5=Vr*N~2_XnHOgDJuTpxYKB2tIHqWwc(|3z!-AeWhXCElmMn#>8SaT z!UXPDkQ8xL0~Ji^{zE{qRbVE$1lP8Z7g1;b1vZ8NKlpec37?@ICFn%(S@?6YC#-1r zB!u49U7oY4cV^8GIqDFltjF^TpN!OQt5$adXLEIvOfUy*m#a|WFDa==kR?xy`@>es_yp7TY;(9hr5h|E5^(wKqvncx zo;!I1&v&vHgnWxX%ZeowBPG-jZo2B+3M)6o?&m3MEAVz^T@5 zi1>!T$pc-R%A<3V7?*faEo&pA2$n7*vx=EMg2|{iRviM(&9m|^u)%UUPtJ>;WF3-G zLARMvVg@+MKwJ#I>2x@19Ur-mJ*iPo=N_ts3l7&-g?Rcmi5nQSRjI~QF*T>z5L+3& zxWEU08WIto+-2#&+K(74%!NCLMFiCZM#^>Tk^>eL+EDM_jc%MWA(T-xLebnyOr?6W zuZ9;5`j3ybCdKoXQ|Ydi-k@>3K+jUlMM)Ga@QUYxy3mO3N({4{#F;j(SfetcE{Zf= zOCu_+>TEEDp;LKZmgLFYUIm0QYHc)`9UUIp+w&=UejCjbsu=Ib!kbN><3MRP#b_YH z&G~_QO(g~e3brb?TR(u)2gt@|Hv=Ucjh`}K!KloAUA|@$JEWAv+M6B0a-~VG zBQ1we!BkHkWR%$G?v8sm(3Zy-b}qx-a7PoOf3h(f*8_!TZC$)+u%v2bL0a?0;V%kd z$ME7TPmUFP9tDdS4d)Byj8u6x`eG(j$)$B$Sp<|7cCCH(#bR{Fq88S4;#ESF$02Ww zd*Dk3wsx?3WVkX$$kMBDzYM!wum)POdo?2g9C%O{h9t&QlQg0Ul9d7H{I8EUD^wY- zV8?(NM+A2eEZz=7U~AytH2r!ncuM-IAQhgj5E@r7g>f&jXG)4tCU7E^;1chUoGJI% zW1&&OHBN7DeRvqhw`RK_?+RTJ{RIX@nM>!@U|eW4Asb&)eA4W(^%RXIQsvi;*dOi0 zQZR;I3R%5BCfL*ENRkSeRRW1Oh8^$Hp^5=CU$Az~n#o8Df_ zaMZZ_cZkKDxqK=f9+~x7k4ES$9Rds^W}|EGrUa^FB>NT7LwYJw0Sq}k0Kd$=usX2T zefaEqq+vT2)=hW`H;adruab%7+K64dcx3GS>;e|B>JXHlKA_o)G{JLWMY&E>5BXk<<4O>@^ zF}}NTy9xf-Vc;HcS0w<=VDKEh?&joA&KyhCbTK_ zJgj1K0inoE$5|7an_?iGz;(DN+Qg<<3D9c=LL>A5+uv*U7T7yqN;eW7KmDbz- z$KN%NW5N*ZM9GBKB>T6VuCOqiH=rm6kgS)Z5eC6OqV!Mium0%|KkATSlSVs{$yb${ zu>;HH?C7AS`zs_pkB{T=xY?-T{{3RCrAgmpS|Tt<7^SeqV*2jn&Be_%d$jp#(bj~# zA)*K;WP-e-^V8q{#b2F$@dd7!9_Q}n^6ay>(?Q<^Bivx`>JtfZrO#tDD}R{_VdtxcgY*icik*5cX!AJ`b7)y+OZGtMmqoZ@xa;{8L)5Kt;TGwP1DU?8iw-N zEF)$MF<^FN?s&?v%7H^-MQ}4O+5o_dX!8~66fHT;pspPrN6RIy211%EQK>Z#bd3*s z!&WUA&0<9@URsjJ&Z)#v(9R~K&e1{duB!%QE6e_h#mcBZSj<`Kai)pDD?&vf`2K~} zR=H8p9v3$R#@|Gd#mcfr1}rIuCf%a0C3164O+eE0j z@+YHlsp!6!frLi|zp;EN^wU<=>M7|^^|{X)?bgNntE5sa&Zx%#*-;8mD)#}!9^fpT zT5@rbYfsRwC%_x`?0toD_x9qtTgq)yqPghxcSf($f+=|g6Z5e4ty9HH4z#j;#1ZU* zfa?Vc0!ksWVLE17262FeDUvUceTl6IoMcuTN|hwWO+=p>3=I}v?4A?(MZ?Lm3~;1O z0$4OU70C?4A$)+4@0vo9N+dJ@z_y-OSU_vZ&GP0*n+*+f2ICa*HTJfel}pie8DgYh zdVH!hAy)*Tj5%qWtUuI=ytmWs&gylD*5D4w=`K&W6SaJ4htw#V z=`Fuc6g+>3G!QU*+nV96r=OA^=sb?+MrOjCmcY88txEr*9>lQIAc%6K(@*OO28Y4= zXk`fspCPiGDu_h2h~=_(diwRfp17xN=Ym|Miu1GdF=uOMar3G5+1G_;3 zco%TNBgRFj395N8yuFGMhFpf3g2C^UD)qYAB+PQ%yZ*#@Ivq2(44=fQhj-)Sp<%iI z5!0AS>Nd?-xtx)Y<$4_`!-Xd1y?(C|x-?qDYUdal^7ig?+6DjDE_aaCA290^vy5ZX z_e{`(8|69KN^>(CsL)5IgcYAG4Ugt^xgHJd6B&x0GL|mdCFQz=J;11a0+0c4(o3st zjyBHHadXDSRW?Y{9*ZWHyGo%u<16g#5KAazy{bz)!I#WSorIvu2-Axr8>uk#S~KkArC6-JNtz?k=M7NWVZOF+rGN z>WCYeTwP|FwdOVMKTmr-leluly7~^T!y+3lPmrLjuc1&B0}rKAQY@E?9M3=GF?b#5 zXN(bxsg|bLD>f*&OE$3Qlkjr*7xL0LGAX}vNB`)!Sa1444?MaWw5r?Z^z`~upEcAH z|2)bj{2-7@yc7U)d)MF}pC$A{)Iy6mGNjLwn``~Ja)zYZOpI!I!cI&^sx8DEQMEg_ zPZUcaA+iiYox#9)LHW$&h< zAmwsXGm#BD;@M#6-iZk@k1qzvh%G9Rf|En1OU8S`@-6>SGbJG!R>Pw*-$G=S%v;j8|GS?S&VM z!oK@cOF%-M5$^23T?ShR&VS{+XMkaPJs#NP-UJvR(bU|csm1~&8akPqGM7H}1zcgc zs8Ao(WE0P_1wTS8>ca3pcpYILUpE^YcETatbxWlv+m?|=WmbYr3>ga&O#=4XD=8+4 zSEjg+J)8_?mE)sgsV$cfrQoZ4Sk1u$Gczib9cFi<+EGPpn~v=Sz>`0DYCalP+lOX_ zNqJ)nx~7wh(!eVftrD+0BLrnE`BJynHN1z~d_k1LB9SOyt-n0@05dHM5e3t8t^AQ4 z<%VV!Yf(sB6*cSUM$4FcWP(_+GGKSuy>eG%c5`$-D&$e0%%}9s(bByAgTMFjcfYP3 z)fKw7pI-j_FaPTQyckrOSS(?}TDjV^QTS9!Vowg+z3#YLD;*u245(~}!#5{Kz5ajz z6|$tfQnFBG1##W9bV(u`gFX@4PAfIqvMa_XMy=->ZGQZhKmIxS3swYK<5Ru;{EM4U zAN0t%6Xmg%5uHE+X>59C*K8gGX{e(gceCMNMIPj7W^#Zd?s;L04~U!Pc39-N=|ySLKoY_bKBVR9Y2 zs?ly|jUyQJ?FJ>eJrf%MUokUUYP4$Xnyl(<%ZC(X#T5?*7d{%^F)6i&vHk+MqINaL z2S4(v+TTg_dqcusC!7=wk3L#V|MsuGyuKUzX&|!RsLCK!C*X2NwwTW?m(w6z6s?TK ze5B-Qb{RQh_%`Ody}P}+#Ue=?>{A+RNZqpsg-4M3;ZYEfK~;)$kF|Q;Q8!=?HO{Xk zpDm0>W;Z<_y*V0mhau~ZW&mQ9uyBQARZOUKYgG!uM+y~%5ShG>0kjp0W$HOn5f`Mx z<~TXc8bh@r2$~RsOvB$)s~XFU_F5W*<=XS@*ic{~Kp7SgR!rB3{0GAJVkn2I2(_+y zAB8TBwqeC9LWoE*2!}lCal(R)WpPND9v9&$C(Xe9_(yVYz}j@WG^|-gmMRM6?*+b& zf0w>P#@#Er@SP$_bE!BQXx77{DkI4`^L6a!xxkucH#Eya&h8X&Q@1kRC zTZW+1(oGq^QqdqLnM93($2U4QU(1m1n{)@n$3rX?yEiJ!7*P{WRfJt$e$OuHn&`&> z5E8M}O3z%8=d<;}K}GT`aKxiQ-f5uH7pYT<#sB^;&P=2sZ=;@-8iZzsPgE$&L#L$7 zqt@aS8%bA@Y1?FsT(o3xuraSwCP_ug`kd-IhU@WwislfUZlYsSwvf_b!^0{^K(;%; zyLP*Zq9Jwm=U%KJXb`qID1t#lhpjeIUd#^3?H^XoZU^5Tw%_<9(xGatrc1j~J6NnI z+{|2Z0V7N}d3~A=C!O;%NeID$8b2C21T@ACyR4Q}yd}(uPct7)yhB{lG5AYL69ZN2 z9X8N;Q_S5m*m|de`~z*x1Df56(;5?Yqhb8DcdL(0%Su*7h(%lH>hIIs@Iq9Nt`(a{b-+^`oQBOfzECg={CQjirTq6kLPm%VcMq9^qx< z4RO@ZJY0kGc39l0zl@iGNNh`Oup}VRHsI?*w8{co zy*ofA@Z$cLYx1CEDj=*tC`KIix^{)g#)(F7 zMW6-d3F1uD>f_lY%7aTY=)wm~NDcW*3 z_2)D`vSo>olOBVTO$b%`E7CP#g%2K;5xIowGx z&7;IJRLheQLAJ3swZqmU*HW%W0I~izaYh$VS}=c(E_TVe7+1{B`Xj%~=?6UI3{p6i z6Wowrk#ymQ+0=YAsxVm7kfWMJ1EF6?9!M7dqW?G=k#jJHGvYqB%`{bq<$#v`5Lil4 zsj;RMR?_tqVK6XeK?sVBDc6+jYKlG*HhV+^I3dOzDz_Cw!I5z_}yf`$lS~`yweC`(eM-PKM0XY01wdhh7Y3 zpi*j`jv^-#CNCl_f*s(f<~#00G5?v=-|m-k#rU^($u#h){ack$@`MXcI7aotWRIfJFj%v*iDX~qUA~`%d91X@0 zOtV!V^e66%)3eTGFmz|BAuOgN$56p$W{d>-%9Tp(9fOxNEp(ltT)E!w-zmkbNS~g+ zy?;qANmVdofFjS(xJEPO5c!F5LSVE^}^5K_6n2(KEPM zGcgwHnz7<*%I_Q+fH@T3i75?S)j}&3=}!q8J`Y6aZvp>39x*)CWh7H1a!|YmCTwvR z#!;(vaeJFk_}o$UHX?`yUyVLtG2_vg&=NE0B;4)Oli&QsZ+WdUjvpCGF4Ls8S2ECN z>6bAaNEsZCIMi^Pb_+`x=e(gY*=tJf5^KIXYrk>d5psA4hyVYQ?%he!G&>7;W!*Eg z@_wyrcTacE&Pv0Ahy|=A5FrJUBOI`iL*U@c7ABVD@CRVvC_)~f5DpP+1fgJARx2&+ zTza~@E_u)V@}5~$*;V{b&KeuDy*1UD-}k=fJm)#jd5%aYMz}{7+hH8FpPVN-ScKCR zm2O#8CJB9liaZ~ZQNvhFvV^L1dN>-zd(Y=PH!Ymhpg$^YJ9jF|h__uwSlWk?7|XFO5(6FaQh&|so-)`UpL*3l|# zCPiZjq(1;5SZvT{u~ckm(x_GVo97E`{naE#x7Xd{V*^yS@y^AO`Sd=Y!$}0iBC-@o z2^aIhplja+eB+|}{K;fiZs6)kJn3!YSJLhClaX zo`yW{W`tx2?hl$LKAzZvS%uVuT1bLJ^vdO5ibk9q^d`IO$^}S=u8#I>2uYG5@>uLc){UoA4{A2Y?ne)Sf>5&( z^PyD|CMo6{WHoIs(#G{Y_ZtungG+MlWXj*lk}#i$LTN`K;T~b=00762J8h6^TQ!4c zfQ(T*vki!+TFCdiL-z%sk;Nrq4=S4bG0O=vxe)j%)JrPzO?)Y=In?0G+eU2+H{9j? zy`a3bfIVrPHh%I?{@I6{_rLzdpZ}fDe{VGHsv_Gr*B5U-e|2&3)yHqItl#llAJ(sb z_@x$(D+7|K?ozl*g!7BKH1@DPc`UB8M5qI)qpHDz`%H$D%4r$#-~aHD z#92x}H7|y9<*;9(U=ByZy;S$+W1&z%e~Jt9QKG+bLU%hEOMx-Bu)Aj#2$?+_kHhiV zg5!YkVM(VkuYYy^#g{}-(Qt^;GOUUL z&{11EqU3pgUv-f9`-_xP=42?y1z}IA^}cof`IU(d)xW%!EtVz7dwaLC8EH6IGW2<9 zc*&uVR;uQxh%fOsg0tA%lI?4R9O{USuj_K}*lxAll;&nl#G zp~c@$YeZ`?;1quaWimh@Ms52WJJy~KZ(8Y6Rkd>z1j9y4LW|772>R9)z?tREEi4hz z)Bd=8(V)UIzwQb9F1U|kwX&6anTuuAKbLC6F66Xa0?$} zsl8doxRPv?A2GP4auGjO3R{#PvpQQl8ob4FU3zn|yd7a(sXi#LAPfOeG7=h1Sjt&i zH#UGrdAUc7${Ofs*0(+`7mKGg)3ypaX6LTOa=ggZ$#S0ca1g)HlYX33nG*7tI$Ad^TIMxse*!o2|abGY<~(0I>`2V!b}^C&EQF9!<6 zj?)%8knn<2tWuuDmKU(wG~|p5pA6MV`V2OfSg}j|78wlYDh0bajA+x-Isl$I{=#Nk zK|rGzdyV)Ps6{qmWZWMF;@6Z!PH$KK;F~lsd?)!Q>fY(1a9X0J@maxKqE@FM=D*!y z*U7%h!O)rqx6jfDb2WY^yeM+IP&6=b2%PL9c#kp^C?bXvwjLGK(q=~SM3m$QgS&q9 zls3W4cWB1KtimSo=iQ0X8oPk~OGifVC+UKz0#h&xEi75@fY21&q89T#P32BveKXLZ zCl2)uWFZC&4KaE9d}l@97h5p{&Erhp+qf*ZF!?wUaFu4^K)4 zFBZcd?BvUyy?lB7>#r3F=HmL@QNEIQ>Vz-X25{ncsdI(8&>kH3hdz(1plK=N`7uMA zG4SJJ5O*xsXIEE~!RVxjhNnpjvp9f3a6qSu2Ew35tvOmt0wmx0Sc4P`szgUUajt7V zjQVE4av3FFuJ`dq_k-QLwZ+%pymuN+dW8(+VQ$32%m^@p;h4-u&Blet`?J6O#sB!K z1FnGnygkgcsB7FHDAy*od_IHB@T{-So9#~Dc$l`yWV+<&uOP)65c=46qJf|uhjAb+ zz%|xq4Tc~$J}8^X=>T26`QrB7uX=-y6{4TL`O(eIw=^bzsJ>;=A8ImecI`h*u3ldZ z-v3{a#e9G90v$h%#wFY}M!p0i5B}*P9Fn~39^jHO!sTj1ReqSgOdX_n`ltTGzxhe< zrsR^iq8t#bor>S$@Ae7ukg?qPey0apv+sQM=Et*T$8V{g)sx92%vQLL@5I(%(Ai=4 z_!?(*%Vdmt=-^mibpG>lrTh&GQ=w;j{4}<~@c#bn;!MYG5gRvAq^fH634 zfKLNgtY8bRrIxsLfStG&oWa4~Bo<}F4i-<*QfgEaC{wT3rC#KtPm`#Y%$F}>%&jOBgTz4Pu zbcwl}`5D*|`Qhv2LZ4$zrw5J>ejY9shF?p~eD8J$UTS5iEYZvMo8=?`i%o@Q&v3n} zlyXq48!53#y+*aT(t_%g)~v>)9)70E1Fa8p)p+w^e^75W6p+hR{3MyWq&P@swSuW) z-lhZ!`+7r$b-3<&#Vcs|*h~&Z4JSd7dVf9JOqbIlV+V6)nZr^ofBPNl+;Deh91-(& z0pJJ*f(xY8VMa2TCWe(xie^AJiH$%9`+UBplLeDHwt|Ro7Fdv_Y2%5ZPqXx~E0pEf#e;T3thr>%goyBQ5}K+3LS2?tJ@cXy{) zKDqm@4c6`$ez*OM(%Rcm-;j;2wtC!vT@u=cmAe*AP|z9{*uTj1f({c#Nrc&XIvGz$ zp_~~Az=K7PYJw~0{9Q`><>cP18my-<(}2vT5BmLiQ5^!;c%T7N+^(%1pPyjr5<4-T z!WMe6lx$om6`FJr4HV6LInVcjEjD~hiFpGXJ>8?R_jJUJT7y8ViOd42l7*kzjEg3%E0}1}}*#Ko0Z_2P0Pl^B--hFlc;y3sqXguP8X7fZt zK`#c+1eHqgBWD2c#LE0S3f*zgh#Yv>5jiL?+2k zaGZxnqoLoa2NH#xPv(p%2y4yicw}5SN9z&|4bAeH$2wxOM(FG7key4kv@X`vrn5MC zS()w`jSDf*k{yOrI<+_KcUWJa6bRf6iHag-UV{u1;+S)kPOm!eeyz3y@l!|4G;Mqm zZ>`bWDW2Bs`il;cl0jy-FO}s>P!Du^87kq~EGAIDfBnF5)Iw@nNeb8E0|zpV%}s;O zog@^+hAVARNl=oZyAU4LmoBYGpmeqgExBtUapiRp!#z@;YH*{pOiE6MeYiGsA4rGo z9tJE4&4y1!E9lY~D)74T@xG!e)faRZl4MjVmjRddhihApwxmofhf$ofGbKezQ`zeN zaQnrYLvu=WH%nIv3yW;v_C1_97r-1`7@Tq(Klj3g56o_^Xa$xk@97emdlaA2>0!wf+Pxc0Rc^9~9Yl7(y-FJjSR6)g(?CgrkYi4m} z)%Xp^;n9R0(>KG|WrSY^J#&kR17in9Hf}$%ZRfe)ZWpVk+sUXS+YhL)d~1DB)R+BE z0!<>9un4WEYSb2|U9Fg&WW+W+vg^7)Uc z(CJ*lVBi=7s6HK&`Ea@eJ`hiy(@`V__5@Ce0C=&Dy+>ods@dZVxHUj*H&wVwyzDt+Q z-TF0Tx7Y#MCq_=~L66HW*_ijZ|HQMhRFBI$XtnaSstgWc!**_*C=uX|8S7@VRV|{i z7lo^)Y;QAr4AG(_2oxo9}(kXo1*blgy^V0Zk*S37%<6Har2eI&vms?6D7Q< zd@O%h8xv(*;f$&31Zn_GO?C;v&jttqSI?4gm=zCOY-#4C6k;oXU1?ZPag53h~If`|yDd zTd%j#coBNEr=27!?R>BGbuM2K6F93iu73FL=RXy4D`$MJk2!Xdg$KxRMxS>o^@cv7 zlL1b!$o=dGKV~~%A4tCTne~FXlXB`${_r0bi$#b{h^Idu^@rf5d#?H<;Q711^`j5% z9z;GI4t(6RFTVWtSHI92uAJ3AeEm(M*+}M-Qn_|;sI8!{JuOtK%FkV^E_ST~Ke6fZ zuYdm6FJ4|ENZ=t&AD=0Q`+Qj6^?DbL8g3h{sE8xA=Me26>giM}HP35{b)J^1dp&<4 zqthE8&LY_;03IIn>_pc}rAk@lh0!Neh@*?;8A}J^^7X1`n@_bWQHhlffsbd1OaH~O zt}}pR-w{SvwilT(vP+TU(=wOM^?L(8^y)lUM0uo5+_||e5eRwJ&g_=5;w&kUQ42Vs zCkir_v-D9+*^PDuvwN)4pkDwi%tENTTsL)CJ~m4pn7qavHqRQZRv*pj58JJ7sZ`MV z@qOKdpvMkb7c>8iOm=Z~?&x+qBMl9LGk@>hUGMZ%6bSBP$_H&HcJ46SaVsE|Qnfxw zM$(Kf0(G3yy56k2GyVRU7KPf+HSYI&m**FQ@#w5sYqvXMtSUi#!t|n))CPdQ_adWr z+5-hZrC#=B>AnOJ+A=tsHUo0j?QY-Pm5Mpsr%u+eH?A~Fxn^E_)HvqV^?*B#WF&Co1c(-xzjI#(%9n#EG_d4ETe4_1Fei)9U5R=ba$Q#q$T0|Lye zimiUql^74hCMd?aj1O*}(8GG)mPJ%*MGA7+pJuUoTKV>y>qe!d<^~Hu-a$2MaX5p%T>-RM-8`FM*1!gBT=#85fXRz>h|L@)BKm7c|&8<5qgNikl z4vPz(mD;X$TJ79*HJ~fCN~qS?tMjYV{%tol-|p|`b0xJIv)A@r7gldvHNX4z!)IrW zL4Tk#Ljj2M^0Ixw;_2D6*AgJ4vhV>y10Pyg!`Rp!E+uiw#g-%un4iA9?6vOjOoeg* zAFTF(!na@ZlQc@i%x~ThFw8+c$rR(e_U*YlwY6=HelnTUOn}`OMkn>o7ju56Qo+@8 z0;$e`D#2wr+nOrsP9{_2X@JG`qrws%qLs3s`S?WH7Md#{D%cGb6}=~;j+nK z40TjbFTk&@e*kMp%>;hrz&bm~=-`XzNvFs36Athk&>Zw6lC3OvYJjNo*pnj5T#fc+_uzmAqw{O zM@jXx>9DHSu!*!f_N|-PmQ5ftBZj2sD;kV!deUmE63Ikd0!P|cKs;8ONS}KrEn85f z*kI19J_>~CaH8ZuQYs8w89*L3avRB0!*_)=WdBf0$DU%dE)EaA&O3r#@EZAA!^5?c z9Z=SAW*3t)$f&xripLAH;K?SV5TLW2N2rrHnv_VQpvvd`m{&|{WpDzcW7Nw!MRg6a z5E$(Tq$e-MqlB|mTp%yP3jh#;a@CsG2M_met_>lOPDKlgA|;0JeO;6ghJr$eSxsy@ z_E{t@XH3~C<3l;zY-n%1Wi2?_#Nkx2WQtI`sgENVT^(Ug&k4lDZ*L8b3YnaOp-D^# z%K6FgRnd2n^vFV>a7^||u@ohe6Lk#SQ=#Ms9Zl>M9g(jl8T;#C1Nl)$-M34dlMWYh z1!rtk_Ms6c+Ez?X5uNif`A|l@rZ{kVW1!rilol3xFPJQos+bPz6jhAI&F$wEMhzmz zke&mrY9jdY!;{Xac6la4YSzm9>Vpt)nrX9rC>Fc#=jwGnm{Giu*yZdVaVLm;xI4^( zL5Kby=v+hg=I7lNHXe*eRR{pOSQKY_yZliQUXGXLvj#nVka!$=*f;H`vc-z#C&b~; z49-#7fH$Ev_oUQO9DydJv%2?5?fgP1B;)fishnN8GI)A-+<$xBB7(omxC<$`GH=}J z#RyZ(C%Er+6CH8>m3=jz3?;J>bF}7I{oC*GCjGlX<^0XD)x%G_)6qbu6ho!AV6oBz z%{EEJ*6avhPQoWDII;f3$z-K)lsnP4*TjQ2YG=*au3Rn<=Co|hYG-{A zW@J3oy%AA;W&a?xaFH_K<&GFC)5-(CQ0DnU@h~59GRr?x79-lRQphVq^GCb3c#lUD z#7=M=M~8QJ?X#D!)0OjC`=jz$n|wMTv#gV}jVA+AumAef|M~5BLrKq%^397E{?H@I zWW6BLwjBQtB@LJGWHfsF*<1I)7;3d_U1xy?gh;g7sA36q?Lh4J;!_#Ji-U-SQpDo6T_S?h4-PWz=QDdGPki|8Ief->kZtHX ziJj2QEEy>+RnD1+{^I@$MIj<8`}7C=prrvQWZb`Z1_>E(R67-#RjyB#ZHpArxO*bz zDlV1jPL;D|aBVRjnM+#`ln}-h_|Zmtj&EDOQA6-fyB%+$D!arksb>Qo_SgZ|G0sam z{J7ROa(PV!D`dHu_|534(5)Wq6$&+WqSce)Y&oh_8_~0Sd>jsX`oA%mC+tSc&+N;z zQEwP~(*n@CKD|6|-L+H*4D!F1CGb-s)GX7btQJ}UhGV+zHWyT2&Kg%~Tg%4C1e|St zj0^;H_b!cW+vak0^#YZSqk+KSo7+zNv{C^%udc2Te!#KhD|i;_z|H+AnfQB!gKz;G zkDwurF+zdA0;kUH2VOy;h^=x-p_GO7p(sTH?CgGqsaBRhqcFu*avuV~+z=-#_q-aH zS&>t#m*|2$WVr_p8!x6ipLR!+X{A7L#dV(&W8ngnD@M?s+U)^?Q@DT>sax2$aka{p z%dPh}_-hXc{SC55)8p8dC9D_@=u<2WqIjDu^NbXso(aKB8V94MWK2t3YsZaOPeN#% z8jCXS^~!a=*AfS@0L51r?G#H)`f1~hk!Ahm^VK|*;`bZntj?M_eppV-Q7FR{q&o^i z(a5vXKEZBGHk0Z}Dez+Wse6zT?edv}oMQ)ll6(vW!={3_bJiZBp93|5WD|aoILw1XRnTl`PpXykVAW10kNn;pcZaZ} z6eaUXw9~Oc5n?&BomO(PoRilO491f738-OuT(4IrR~0gp)*GY22O)&sGf_Zo;_xe7 zMBDjd&67wblSIrl3NpbT8)b?K793?b-+7SYioOS1Ab}F+1ZOCiJ@dnpuw5ce(&vtL z=XR_@>r9copEhR1sK+yv{kO^+4=XfR8YVG!8{L4Y4x<$z-}=k2{eaUnnPn>+_g6XH zo4p;%Tf+>o^}xH~(zwBe>4#c5FQV-|ZP(U@DUKgFO06D3047k@irM+r>rkfW-oh8j zgK}k1VNgOyHY7KF<`DC`yU#euSm+jY1u31ufbdI+aR#q-H`-rlW-0)0(~!3BB$w)5 zu*u~*rrLDU)O<(0n#}_~JQ_aciGnZZ-TSm*p|G3D)HQJ7C5IzN{DkJ2vHY*)QcEJtBw1xsZ#!C#P5Y~AVL=3T> z<`4~ADpv5*;XBDPHMY(X1{ivk-Dmk)+4nNZZG7eU^cxzVL`>4Mv(La(PEm1Zrv zJfva%Zck9_?AQQ8NrVT!5dl~s$DU6iPR?;9#gmczS`!)$vZauMWT{pM`$RSe2|mu0 zfG{zBvE^tnrdX~K{(f7bplDW@?|3H0#QW`RsZN`rC{RF))yqi&J$vn?ss{20idg&Y z=;m;_Qbcoa zSSXhL66aNi6KI5sO!P*>O<;MjZfII!0;~QLL+BulDA1l#SlMQ}m@7OpMSd?ie%Qex z#UudS47kUAWUj@ZLz+c?Lz?cIlQZnLu72}3Ti?9X=qsGp7j9JG$;gI*Sokx{}YC$69GrQ7Qh(_^)Rd+~Yh(sR-WF%RE*Tb1~)Yr1} z$xWIHpvy_9+9YC6!!S4%4c^V1s{s`}h&LF0$b3Fq$t8E4kY)1AH%_faIyoBNbPS~& zT9m6A>$cQGyL$e$%UQo00{Z&}DHMXh70#MzSuY;76mV(^EJ1DW2;+^s%T>yF7H1}G zZ2|4Y*k7j{0Qj_MHz8_|0sWI=IR>fGk>QoB3(9i|&_5AcbxmlQJc!k5ZfmzfP{lhU z@-7tA59VHmy?(h`8FV@tFD#^%QBItUc-U8K_&sO9@M*RZgrjWWbz8xPezTq4v@x(N zP$){}O`nc*$Ie%+T{u_;=)Gexymyh+!_-M2Y4?oC8hxvfrAbsiwip;KPGR|Q z_nZIyvu2Z~>midVr7{&1kl;h#B71)C{p!`&yJ&9Sy~)*@zMz7Y?9K73UA|l`#^_^} zhVEbe{1me=9t;pT@R;DP;%!>BD^$%F++%HQs5To?10ruQ8rza<$2Rk%ko?LpR)p0q z*WJ#rJFH*T{Y$;O0rw8*s2DchEY~EZRJ~l@!wr}h&tS4$86lh#D7R%=~P7%ZXFm;o{^NzmC9o=*&+AgUG9$`udiO6!v@h^9Q4Y}Exq^_`_!jg zwZc=ol+OS1tG|8m+3WVZ8)nU?jdId%hkC+G1p=)5#E7+8k~Fgu@aXe@^jot|M^rrW zL+<R)_`^8B^d4KXWOa1Y`{7EQY_oUpSWWJYIE3y@XT%`lJuqBC z*jQir@%>-D{QMs~=O@R9qw(B?G`$~SA}LBf09Z0z8<7P!uHSuS^%gap>Oi***AN(G zUrQ545l9b-u1M)JS|Wo4^NXJfFBsw`?JY$Ila1)v zhV|SEm7(JY06JqjBD80reAe~iD;*g;0GEtt%z7~y!cfQ{SV!}G8(|`2#=QDtjQ05? z2yPS%2;s7;D`TW8oMA0RQU8V(11*S;5`u(TCs`H1{zk}3XAZcoBm2Us7g7m&MQ6$H zhC-wG4*%V)$BBWF?N~qcsfBAD7k@BpDz{VI7 zPJQzEu@wpw!>XdLXc;53Hy4?YaFhc9j?yx&RZusB*~fF>7{%5HUUYwQL~{YW2FWr6SWp zb#vt=)5!EUa?qqdb{6er20GVE#%O$Sc5Qj`^fhMip#Um03P5`6-nAkF>?Hi=1Ho&@ zaVBZ(wg zpjn7JT+VD;6iLP_M4Pl z4F6fkXrK-o?)4*6A@**emK2G760_!{0cnn%Ry(lk2%C5lXMQv1TeAS7fmcZ~i#nm~ zCQ9M>$_+K#w<)b4|J1IjIw>ASau~~{cVl{dXQxu8)k4TTGuYSTbqL_S`P%epv@ASq zKu!VWnm`ETL?}5zA)v(@mkMH_2x%U}Ya31W_!-0Y8wG{y=fPWVDJl^mo?!jFGM!H- z@pUEFz3#5>r>9phQ3^PHo!DRypXT+;7xWWmcVE1IHD68Zr!Nr=7)j47ZJ&Mbrcl2O z_pIZz)sv*rifKg_#}2!hlDl^G#VdlCoVM0_;U!}AaM><(((8e^Oxcwj%t)%u!sD2F zLn?1T&iC_~J!Z7ZvXA^95h>PkJX!c=c{Bu$!uM^YD(F|{!E5R*t4AE*Ov$Z(sGim_ zm5&#H`EUQd*ZJ-5|ITm!iy(^EA`^ItFZOl-l7qt?>VteStD+|JF4RvQB=SbQu~l7Y zXx$*!7@LY~A}fj+;N>I7M0}i)1SN>u51oczjv#jbSgw*E8;v=f_HEpX{pNt|wl1_w z=UzY-7wM`kLziN_BcJE+xZp+l&D;x~wd_&{1SWKRLh(^Sb5~&XVPZqNZzPMkSKu4s zD}WH)n;W!z$ml!L$Z7AWK*L(_kut_$iylI*a;kun@imb>F+w5@31C=oHrD5}?H{W+ zFzj*Jv)O{XfVjf#DB4s2aTS8P7TKNj-9_&B|mI;E6ocT88xr(8-hwJ zt^MrNW}aAJATF7Y%=&jf(V}w?(8)VGUL~Xbbl!tEfV^*n&K@i2qQOQHMCOhT~)6Sh9ecuRjPCsAzO;(hy+Euq^)Bq)Q(Y?kj{DnPN)H> z6q_82QkXAh-5?}5D1tNcf8!`UZ;Y8n8@`*wG_)<^k;$sX>_`RYJw{{V$p~4#lo2PF za~BrA4R<{-5bF};$$|d#Q@Uuol!km&9Q2QNBfA;r z#AmV$2(&w?)yLhgM{YipF4cQkqm+$ki96EzgPXDNmTjjHRT`HUG$Kj~xt|9Z_>Gzr z_WP|{(p3!u2J$c-_@aX*4?@m>6C`N>!ec+qS8V;c`M__Y5N)#gES=A#i-ZWANAMWa z|NP(n%U2JXTIEb7=p6}aG1eEWr;EUVTVo2yamf{n0U9GOai2Cd;-g3Ii0CS3)U&?@;XWTRcem2%p-g`^19g(rM-Tx{u}pEz9K^ zX0}o-e)G#;!n66q9b1pj-d;@-$2+9~WSHpf>x))zY`|sp@c8D-fAFxG{roTf?CjMS u9BMAV_~NJk>*I^pZ%@x(z5Q}Gzy7m7dgr9>{QmF$!SDR}KmEgh_x}M}g=;VX literal 0 HcmV?d00001 diff --git a/tests/resources/mountain-mask.png b/tests/resources/mountain-mask.png new file mode 100644 index 0000000000000000000000000000000000000000..408a20de483a79c5a882a580db0b71b4db3e7ccc GIT binary patch literal 9161 zcmeAS@N?(olHy`uVBq!ia0y~yUO9D3HYfGzkcp7ce4Z7cjwOnHd%^!`Mt8? ztx|+t?VyL%(9@GcP=o{)8=ws7Xl9`4>8%PGC4eT$7bv7WwtO7DCQgb3* zGILY&ih)kEGc`1_0b7G1gK#L4&Ip7~b2AHMok%k1I-T=#@{58C5|dNy453<(gpgE& z+->Dwl$i<)Qc%Ewlw*iN)!XQULKP{LAyEhx1;(KrmyJF=J=k%XPUtxWOvJl9T^vIy z7~kI7m^&v@tR*nZ&~xj-Ek`6)EO@fzVq)gj*#{-Wbv{^s`TF_lO6vn62juJj{oC_X z(V>BXk%@&vK*2#l@xy!igBAsAo4fZ+~IcLPJ? zga$?dt>_SlX&@bJ4bpI>3Iaj~3{I)tUU2&kFcdI@Ee4A?F|j$U$O%N)F2RroSK8p< zae#qis;(B)sXz(l1H5o|32<;qFf82UstR+sLIT4Mgi zBrvp`5}OM53DDDQqn;j(>Cxmpnx`S<*JwdDT6%+OgwZOCWwf3KH7rIOC!;MgaMeIk zGqkbZDbiK-!&9d9*I&Q=SyT7Z+NR;aq65Ew|GxeBV?@m?b3p}%2hqT`?EO`KiPu>F zeYgKFFE9W4{1-c>c%=_Ne`Ye&bnc1wYH;v9FrVS7)b#1FCaZ#O0>hHm;`3nq1!@Tl zS4QPW!w1&28%-aBJb!%fx7z#RzT1PZReNpcpZ{sIzyANc`o-)*KeQTe)yuzs|31I} z_~X?({>Cw}9AdKn_vbI?bMe2kIsW|m`ugqT$B$<(5o~5?Y&!7#`SaW7=i74!rm8q3 z_y9|ZUeQOEh<>jgD^G)W?0q$O=hpyOQ1px{84VXu8W~Lt-~p%6#4wr|;KP3-A~Ae; zeE$CYjpmhnjrF=8s`lQScmDbQf93xefvtyqUJw5M{rmP~Ma|Xq->W$VIJhMk9)5CF zht(i2IDZH)h)Ze0ah^uKNrFIUw~uAqw=HSGnzgivl*lLW3+r2Egwhg2UvMH iT0f4q4@P$T=pQ$`s9Cg%m6RQ5sf(wppUXO@geCyJul@-D literal 0 HcmV?d00001 diff --git a/tests/resources/mountain.jpg b/tests/resources/mountain.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba7dbe43f278bb51ae019217f2138db0b443fd22 GIT binary patch literal 82351 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

    BbtPgl5NZu*n53-*j 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 z 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

    K&mD{dNxDjZ^cQvjGcLb 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

    NH!RZL++W-c`rw+`7lmzy|BJ9NHC*(OJ!^ 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

    LvH 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

    8|ZEto>(p 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

    AGw5kNiWvH6p3O&k*APeFN>-QfH>1FA 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

  • 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

    D|Ye}7? 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

    -ItBz$3)mkAZdfHe!$gWI=$JcPzd+ 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 0 + + def test_load_collection(self, create_source, loader): + resource_paths = ["sentences.wav", "sentences2.wav"] + sources = [create_source(resource_path) for resource_path in resource_paths] + + collection = loader.load_collection(sources) + + assert len(collection) == len(resource_paths) + + keys = {loader.to_key(source) for source in sources} + for key in collection.keys(): + artifact = collection[key] + assert isinstance(artifact, AudioArtifact) + assert artifact.name.endswith(".wav") + assert artifact.mime_type == "audio/wav" + assert len(artifact.value) > 0 diff --git a/tests/unit/tasks/test_audio_transcription_task.py b/tests/unit/tasks/test_audio_transcription_task.py new file mode 100644 index 000000000..fdab5f730 --- /dev/null +++ b/tests/unit/tasks/test_audio_transcription_task.py @@ -0,0 +1,38 @@ +from unittest.mock import Mock + +import pytest + +from griptape.artifacts import AudioArtifact +from griptape.engines import AudioTranscriptionEngine +from griptape.structures import Agent +from griptape.tasks import BaseTask, AudioTranscriptionTask +from tests.mocks.mock_structure_config import MockStructureConfig + + +class TestAudioTranscriptionTask: + @pytest.fixture + def audio_artifact(self): + return AudioArtifact(value=b"audio data", format="mp3") + + @pytest.fixture + def audio_transcription_engine(self): + return Mock() + + def test_audio_input(self, audio_artifact, audio_transcription_engine): + task = AudioTranscriptionTask(audio_artifact, audio_transcription_engine=audio_transcription_engine) + + assert task.input.value == audio_artifact.value + + def test_callable_input(self, audio_artifact, audio_transcription_engine): + def callable(task: BaseTask) -> AudioArtifact: + return audio_artifact + + task = AudioTranscriptionTask(callable, audio_transcription_engine=audio_transcription_engine) + + assert task.input == audio_artifact + + def test_config_audio_transcription_engine(self, audio_artifact): + task = AudioTranscriptionTask(audio_artifact) + Agent(config=MockStructureConfig()).add_task(task) + + assert isinstance(task.audio_transcription_engine, AudioTranscriptionEngine) diff --git a/tests/unit/tools/test_transcription_client.py b/tests/unit/tools/test_transcription_client.py new file mode 100644 index 000000000..ea6bd3453 --- /dev/null +++ b/tests/unit/tools/test_transcription_client.py @@ -0,0 +1,47 @@ +from unittest.mock import Mock, mock_open, patch + +import pytest + +from griptape.artifacts import AudioArtifact +from griptape.tools.audio_transcription_client.tool import AudioTranscriptionClient + + +class TestTranscriptionClient: + @pytest.fixture + def transcription_engine(self) -> Mock: + return Mock() + + @pytest.fixture + def audio_loader(self) -> Mock: + loader = Mock() + loader.load.return_value = AudioArtifact(value=b"audio data", format="wav") + + return loader + + def test_init_transcription_client(self, transcription_engine, audio_loader) -> None: + assert AudioTranscriptionClient(engine=transcription_engine, audio_loader=audio_loader) + + @patch("builtins.open", mock_open(read_data=b"audio data")) + def test_transcribe_audio_from_disk(self, transcription_engine, audio_loader) -> None: + client = AudioTranscriptionClient(engine=transcription_engine, audio_loader=audio_loader) + client.engine.run.return_value = Mock(value="transcription") # pyright: ignore + + text_artifact = client.transcribe_audio_from_disk(params={"values": {"path": "audio.wav"}}) + + assert text_artifact + assert text_artifact.value == "transcription" + + def test_transcribe_audio_from_memory(self, transcription_engine, audio_loader) -> None: + client = AudioTranscriptionClient(engine=transcription_engine, audio_loader=audio_loader) + memory = Mock() + memory.load_artifacts = Mock(return_value=[AudioArtifact(value=b"audio data", format="wav", name="name")]) + client.find_input_memory = Mock(return_value=memory) + + client.engine.run.return_value = Mock(value="transcription") # pyright: ignore + + text_artifact = client.transcribe_audio_from_memory( + params={"values": {"memory_name": "memory", "artifact_namespace": "namespace", "artifact_name": "name"}} + ) + + assert text_artifact + assert text_artifact.value == "transcription" From 1b1accc5ded4a11c7cf335dc8028bf68db6f952b Mon Sep 17 00:00:00 2001 From: Kyle Roche Date: Tue, 4 Jun 2024 09:59:22 -0700 Subject: [PATCH 069/145] Feature/pusher event driver (#821) Co-authored-by: Collin Dutter --- .github/workflows/docs-integration-tests.yml | 4 + CHANGELOG.md | 1 + .../drivers/event-listener-drivers.md | 35 +++++++++ griptape/drivers/__init__.py | 2 + .../pusher_event_listener_driver.py | 39 ++++++++++ poetry.lock | 73 ++++++++++++++++++- pyproject.toml | 3 + .../test_pusher_event_listener_driver.py | 42 +++++++++++ 8 files changed, 196 insertions(+), 3 deletions(-) create mode 100644 griptape/drivers/event_listener/pusher_event_listener_driver.py create mode 100644 tests/unit/drivers/event_listener/test_pusher_event_listener_driver.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index eb3621870..a87810774 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -112,6 +112,10 @@ jobs: AWS_IOT_CORE_ENDPOINT: ${{ secrets.INTEG_AWS_IOT_CORE_ENDPOINT }} AWS_IOT_CORE_TOPIC: ${{ secrets.INTEG_AWS_IOT_CORE_TOPIC }} ELEVEN_LABS_API_KEY: ${{ secrets.INTEG_ELEVEN_LABS_API_KEY }} + PUSHER_APP_ID: ${{ secrets.INTEG_PUSHER_APP_ID }} + PUSHER_KEY: ${{ secrets.INTEG_PUSHER_KEY }} + PUSHER_SECRET: ${{ secrets.INTEG_PUSHER_SECRET }} + PUSHER_CLUSTER: ${{ secretes.INTEG_PUSHER_CLUSTER }} services: postgres: image: ankane/pgvector:v0.5.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index cf0d8ed36..62a9f49ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AudioTranscriptionTask` and `AudioTranscriptionClient` for transcribing audio content in Structures. - `OpenAiAudioTranscriptionDriver` for integration with OpenAI's speech-to-text models, including Whisper. - Parameter `env` to `BaseStructureRunDriver` to set environment variables for a Structure Run. +- `PusherEventListenerDriver` to enable sending of framework events over a Pusher WebSocket. ### Changed - **BREAKING**: Updated OpenAI-based image query drivers to remove Vision from the name. diff --git a/docs/griptape-framework/drivers/event-listener-drivers.md b/docs/griptape-framework/drivers/event-listener-drivers.md index d35489f98..6e8f59b22 100644 --- a/docs/griptape-framework/drivers/event-listener-drivers.md +++ b/docs/griptape-framework/drivers/event-listener-drivers.md @@ -212,4 +212,39 @@ agent = Agent( agent.run("Analyze the pros and cons of remote work vs. office work") ``` +### Pusher Event Listener Driver +!!! info + This driver requires the `drivers-event-listener-pusher` [extra](../index.md#extras). + +The [PusherEventListenerDriver](../../reference/griptape/drivers/event_listener/pusher_event_listener_driver.md) sends Events to [Pusher](https://pusher.com). + +```python +import os +from griptape.drivers import PusherEventListenerDriver +from griptape.events import ( + EventListener, + FinishStructureRunEvent +) +from griptape.structures import Agent + +agent = Agent( + event_listeners=[ + EventListener( + event_types=[FinishStructureRunEvent], + driver=PusherEventListenerDriver( + batched=False, + app_id=os.environ["PUSHER_APP_ID"], + key=os.environ["PUSHER_KEY"], + secret=os.environ["PUSHER_SECRET"], + cluster=os.environ["PUSHER_CLUSTER"], + channel='my-channel', + event_name='my-event' + ), + ), + ], +) + +agent.run("Analyze the pros and cons of remote work vs. office work") + +``` diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 6c64756e1..f44602f8b 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -93,6 +93,7 @@ from .event_listener.webhook_event_listener_driver import WebhookEventListenerDriver from .event_listener.aws_iot_core_event_listener_driver import AwsIotCoreEventListenerDriver from .event_listener.griptape_cloud_event_listener_driver import GriptapeCloudEventListenerDriver +from .event_listener.pusher_event_listener_driver import PusherEventListenerDriver from .file_manager.base_file_manager_driver import BaseFileManagerDriver from .file_manager.local_file_manager_driver import LocalFileManagerDriver @@ -193,6 +194,7 @@ "WebhookEventListenerDriver", "AwsIotCoreEventListenerDriver", "GriptapeCloudEventListenerDriver", + "PusherEventListenerDriver", "BaseFileManagerDriver", "LocalFileManagerDriver", "AmazonS3FileManagerDriver", diff --git a/griptape/drivers/event_listener/pusher_event_listener_driver.py b/griptape/drivers/event_listener/pusher_event_listener_driver.py new file mode 100644 index 000000000..d41b679d7 --- /dev/null +++ b/griptape/drivers/event_listener/pusher_event_listener_driver.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING +from attrs import define, field, Factory +from griptape.drivers import BaseEventListenerDriver +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + from pusher import Pusher + + +@define +class PusherEventListenerDriver(BaseEventListenerDriver): + app_id: str = field(kw_only=True) + key: str = field(kw_only=True) + secret: str = field(kw_only=True) + cluster: str = field(kw_only=True) + channel: str = field(kw_only=True) + event_name: str = field(kw_only=True) + pusher_client: Pusher = field( + default=Factory( + lambda self: import_optional_dependency("pusher").Pusher( + app_id=self.app_id, key=self.key, secret=self.secret, cluster=self.cluster, ssl=True + ), + takes_self=True, + ), + kw_only=True, + ) + + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: + data = [ + {"channel": self.channel, "name": self.event_name, "data": event_payload} + for event_payload in event_payload_batch + ] + + self.pusher_client.trigger_batch(data) + + def try_publish_event_payload(self, event_payload: dict) -> None: + self.pusher_client.trigger(channels=self.channel, event_name=self.event_name, data=event_payload) diff --git a/poetry.lock b/poetry.lock index 7e6804fcc..7d78e319e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -2974,6 +2974,22 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} +[[package]] +name = "ndg-httpsclient" +version = "0.5.1" +description = "Provides enhanced HTTPS support for httplib and urllib2 using PyOpenSSL" +optional = true +python-versions = ">=2.7,<3.0.dev0 || >=3.4.dev0" +files = [ + {file = "ndg_httpsclient-0.5.1-py2-none-any.whl", hash = "sha256:d2c7225f6a1c6cf698af4ebc962da70178a99bcde24ee6d1961c4f3338130d57"}, + {file = "ndg_httpsclient-0.5.1-py3-none-any.whl", hash = "sha256:dd174c11d971b6244a891f7be2b32ca9853d3797a72edb34fa5d7b07d8fff7d4"}, + {file = "ndg_httpsclient-0.5.1.tar.gz", hash = "sha256:d72faed0376ab039736c2ba12e30695e2788c4aa569c9c3e3d72131de2592210"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.1" +PyOpenSSL = "*" + [[package]] name = "networkx" version = "3.2.1" @@ -3747,6 +3763,30 @@ files = [ [package.extras] tests = ["pytest"] +[[package]] +name = "pusher" +version = "3.3.2" +description = "A Python library to interract with the Pusher Channels API" +optional = true +python-versions = "*" +files = [ + {file = "pusher-3.3.2-py2.py3-none-any.whl", hash = "sha256:4ae2d2dc77eb28043da042796992b8b41454f458c4d8c8e151f7498f2c4374c7"}, + {file = "pusher-3.3.2.tar.gz", hash = "sha256:14f412c8e26562aaf663a114951792fefae01f0d220dac84971f926404620760"}, +] + +[package.dependencies] +ndg-httpsclient = "*" +pyasn1 = "*" +pynacl = "*" +pyopenssl = "*" +requests = ">=2.3.0" +six = "*" +urllib3 = "*" + +[package.extras] +aiohttp = ["aiohttp (>=0.20.0)"] +tornado = ["tornado (>=5.0.0)"] + [[package]] name = "py-partiql-parser" version = "0.5.0" @@ -3996,6 +4036,32 @@ snappy = ["python-snappy"] test = ["pytest (>=7)"] zstd = ["zstandard"] +[[package]] +name = "pynacl" +version = "1.5.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +optional = true +python-versions = ">=3.6" +files = [ + {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, +] + +[package.dependencies] +cffi = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] + [[package]] name = "pyopenssl" version = "24.1.0" @@ -5995,7 +6061,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] +all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-google = ["google-generativeai"] @@ -6003,6 +6069,7 @@ drivers-embedding-huggingface = ["huggingface-hub", "transformers"] drivers-embedding-voyageai = ["voyageai"] drivers-event-listener-amazon-iot = ["boto3"] drivers-event-listener-amazon-sqs = ["boto3"] +drivers-event-listener-pusher = ["pusher"] drivers-memory-conversation-amazon-dynamodb = ["boto3"] drivers-memory-conversation-redis = ["redis"] drivers-prompt-amazon-bedrock = ["anthropic", "boto3"] @@ -6033,4 +6100,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "da89e6bb7aa395fd5badc416ec859e574416ea1fe07ee6f93035fe6a7e314dcd" +content-hash = "b035e9419f6dbc25ee6663b81c49730946b9990641e14aa656080915cb4735b2" diff --git a/pyproject.toml b/pyproject.toml index 55ae82ce2..f9b4d1ba7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,6 +53,7 @@ markdownify = {version = "^0.11.6", optional = true} voyageai = {version = "^0.2.1", optional = true} elevenlabs = {version = "^1.1.2", optional = true} torch = {version = "^2.3.0", optional = true} +pusher = {version = "^3.3.2", optional = true} # loaders pandas = {version = "^1.3", optional = true} @@ -96,6 +97,7 @@ drivers-web-scraper-markdownify = ["playwright", "beautifulsoup4", "markdownify" drivers-event-listener-amazon-sqs = ["boto3"] drivers-event-listener-amazon-iot = ["boto3"] +drivers-event-listener-pusher = ["pusher"] loaders-dataframe = ["pandas"] loaders-pdf = ["pypdf"] @@ -128,6 +130,7 @@ all = [ "voyageai", "elevenlabs", "torch", + "pusher", # loaders "pandas", diff --git a/tests/unit/drivers/event_listener/test_pusher_event_listener_driver.py b/tests/unit/drivers/event_listener/test_pusher_event_listener_driver.py new file mode 100644 index 000000000..6f0636b5c --- /dev/null +++ b/tests/unit/drivers/event_listener/test_pusher_event_listener_driver.py @@ -0,0 +1,42 @@ +from pytest import fixture +from tests.mocks.mock_event import MockEvent +from griptape.drivers import PusherEventListenerDriver +from unittest.mock import Mock + + +class TestPusherEventListenerDriver: + @fixture(autouse=True) + def mock_post(self, mocker): + mock_pusher_client = mocker.patch("pusher.Pusher") + mock_pusher_client.return_value.trigger.return_value = Mock() + mock_pusher_client.return_value.trigger_batch.return_value = Mock() + + return mock_pusher_client + + @fixture() + def driver(self): + return PusherEventListenerDriver( + app_id="test-app-id", + key="test-key", + secret="test-secret", + cluster="test-cluster", + channel="test-channel", + event_name="test-event", + ) + + def test_init(self, driver): + assert driver + + def test_try_publish_event_payload(self, driver): + data = MockEvent().to_dict() + driver.try_publish_event_payload(data) + + driver.pusher_client.trigger.assert_called_with(channels="test-channel", event_name="test-event", data=data) + + def test_try_publish_event_payload_batch(self, driver): + data = [MockEvent().to_dict() for _ in range(3)] + driver.try_publish_event_payload_batch(data) + + driver.pusher_client.trigger_batch.assert_called_with( + [{"channel": "test-channel", "name": "test-event", "data": data[i]} for i in range(3)] + ) From c6cceda255f58522edf6f1f1be9102c9d2fa2a4c Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 4 Jun 2024 10:27:52 -0700 Subject: [PATCH 070/145] Fix computer tool (#820) --- poetry.lock | 31 ++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7d78e319e..cf8fde4ac 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1200,24 +1200,25 @@ wmi = ["wmi (>=1.5.1)"] [[package]] name = "docker" -version = "6.1.3" +version = "7.1.0" description = "A Python library for the Docker Engine API." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "docker-6.1.3-py3-none-any.whl", hash = "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9"}, - {file = "docker-6.1.3.tar.gz", hash = "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20"}, + {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, + {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, ] [package.dependencies] -packaging = ">=14.0" pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} requests = ">=2.26.0" urllib3 = ">=1.26.0" -websocket-client = ">=0.32.0" [package.extras] +dev = ["coverage (==7.2.7)", "pytest (==7.4.2)", "pytest-cov (==4.1.0)", "pytest-timeout (==2.1.0)", "ruff (==0.1.8)"] +docs = ["myst-parser (==0.18.0)", "sphinx (==5.1.1)"] ssh = ["paramiko (>=2.4.3)"] +websockets = ["websocket-client (>=1.3.0)"] [[package]] name = "docutils" @@ -5817,22 +5818,6 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] -[[package]] -name = "websocket-client" -version = "1.8.0" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.8" -files = [ - {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, - {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, -] - -[package.extras] -docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - [[package]] name = "websockets" version = "12.0" @@ -6100,4 +6085,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "b035e9419f6dbc25ee6663b81c49730946b9990641e14aa656080915cb4735b2" +content-hash = "4e98cb17a098a86dc3c109bad3cb8b5299e333d20e7c12903a7fe9472b7a3d31" diff --git a/pyproject.toml b/pyproject.toml index f9b4d1ba7..66b408f6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ pyyaml = ">=6" tenacity = ">=8.0" numpy = ">=1" stringcase = "^1.2.0" -docker = "^6.1.3" +docker = "^7.1.0" sqlalchemy = "~=1.0" dateparser = "^1.1.8" requests = "^2" From 7fe0f7d8691beef7841a857cbb6839397001e082 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 4 Jun 2024 10:55:30 -0700 Subject: [PATCH 071/145] Don't exlude extra fields (#825) --- CHANGELOG.md | 3 +++ griptape/schemas/base_schema.py | 4 ++-- tests/unit/schemas/test_base_schema.py | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62a9f49ff..15e0fb9c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Default standard OpenAI and Azure OpenAI image query model to `gpt-4o`. - Error message to be more helpful when importing optional dependencies. +### Fixed +- Extra fields being excluded when using `SerializableMixin.from_dict`. + ## [0.25.1] - 2024-05-15 ### Fixed diff --git a/griptape/schemas/base_schema.py b/griptape/schemas/base_schema.py index 82bc072fb..79ae5e51f 100644 --- a/griptape/schemas/base_schema.py +++ b/griptape/schemas/base_schema.py @@ -5,14 +5,14 @@ from collections.abc import Sequence import attrs -from marshmallow import Schema, fields, EXCLUDE +from marshmallow import Schema, fields, INCLUDE from griptape.schemas.bytes_field import Bytes class BaseSchema(Schema): class Meta: - unknown = EXCLUDE + unknown = INCLUDE DATACLASS_TYPE_MAPPING = {**Schema.TYPE_MAPPING, dict: fields.Dict, bytes: Bytes} diff --git a/tests/unit/schemas/test_base_schema.py b/tests/unit/schemas/test_base_schema.py index 947d69c24..fcbd08c7f 100644 --- a/tests/unit/schemas/test_base_schema.py +++ b/tests/unit/schemas/test_base_schema.py @@ -81,5 +81,5 @@ def test_load(self): def test_load_with_unknown_attribute(self): schema = BaseSchema.from_attrs_cls(MockSerializable)() - mock_serializable = schema.load({"foo": "baz", "bar": "qux", "baz": [1, 2, 3], "zoop": "bop"}) - assert hasattr(mock_serializable, "zoop") is False + with pytest.raises(TypeError): + schema.load({"foo": "baz", "bar": "qux", "baz": [1, 2, 3], "zoop": "bop"}) From dc9e58592d0a7f2a3ab17a7861e353110a6f7924 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Tue, 4 Jun 2024 11:28:01 -0700 Subject: [PATCH 072/145] Add support for Llama 3 on Amazon SageMaker (#800) --- .github/workflows/docs-integration-tests.yml | 4 +- CHANGELOG.md | 3 ++ .../drivers/prompt-drivers.md | 23 ++++++++-- .../prompt/amazon_sagemaker_prompt_driver.py | 5 ++- .../prompt_model/base_prompt_model_driver.py | 2 +- .../bedrock_claude_prompt_model_driver.py | 2 +- .../bedrock_jurassic_prompt_model_driver.py | 2 +- .../bedrock_llama_prompt_model_driver.py | 4 +- .../bedrock_titan_prompt_model_driver.py | 2 +- .../sagemaker_falcon_prompt_model_driver.py | 2 +- .../sagemaker_llama_prompt_model_driver.py | 28 +++++++----- .../test_amazon_sagemaker_prompt_driver.py | 26 ++++++----- ...st_sagemaker_falcon_prompt_model_driver.py | 2 +- ...est_sagemaker_llama_prompt_model_driver.py | 44 ++++++++++++++----- 14 files changed, 103 insertions(+), 46 deletions(-) diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index a87810774..ef2c96123 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -77,8 +77,10 @@ jobs: GRIPTAPE_CLOUD_BASE_URL: ${{ secrets.INTEG_GRIPTAPE_CLOUD_BASE_URL }} OPENWEATHER_API_KEY: ${{ secrets.INTEG_OPENWEATHER_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.INTEG_ANTHROPIC_API_KEY }} - SAGEMAKER_LLAMA_ENDPOINT_NAME: ${{ secrets.INTEG_LLAMA_ENDPOINT_NAME }} + SAGEMAKER_LLAMA_3_INSTRUCT_ENDPOINT_NAME: ${{ secrets.SAGEMAKER_LLAMA_3_INSTRUCT_ENDPOINT_NAME }} + SAGEMAKER_LLAMA_3_INSTRUCT_INFERENCE_COMPONENT_NAME: ${{ secrets.SAGEMAKER_LLAMA_3_INSTRUCT_INFERENCE_COMPONENT_NAME }} SAGEMAKER_FALCON_ENDPOINT_NAME: ${{ secrets.INTEG_FALCON_ENDPOINT_NAME }} + SAGEMAKER_FALCON_INFERENCE_COMPONENT_NAME: ${{ secrets.INTEG_FALCON_INFERENCE_COMPONENT_NAME }} HUGGINGFACE_HUB_ACCESS_TOKEN: ${{ secrets.INTEG_HUGGINGFACE_HUB_ACCESS_TOKEN }} AZURE_OPENAI_ENDPOINT_1: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_1 }} AZURE_OPENAI_API_KEY_1: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_1 }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 15e0fb9c7..3f12a4edb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Field `azure_ad_token` on all Azure Drivers is no longer serializable. - Default standard OpenAI and Azure OpenAI image query model to `gpt-4o`. - Error message to be more helpful when importing optional dependencies. +- **BREAKING**: `AmazonSageMakerPromptDriver.model` parameter, which gets passed to `SageMakerRuntime.Client.invoke_endpoint` as `EndpointName`, is now renamed to `AmazonSageMakerPromptDriver.endpoint`. +- **BREAKING** `AmazonSageMakerPromptDriver.model` parameter is now optional being passed to `SageMakerRuntime.Client.invoke_endpoint` as `InferenceComponentName` (instead of `EndpointName`). +- **BREAKING** `SageMakerLlamaPromptModelDriver` modified to exclusively support the Llama 3 Instruct model deployed via SageMaker JumpStart. (Support for Llama 2 models has been removed.) ### Fixed - Extra fields being excluded when using `SerializableMixin.from_dict`. diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index bf8814330..1006f215f 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -401,7 +401,22 @@ through the [prompt_model_driver](../../reference/griptape/drivers/prompt/base_m The [AmazonSageMakerPromptDriver](../../reference/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.md) uses [Amazon SageMaker Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) for inference on AWS. -##### LLaMA +!!! info + For single model endpoints, the `model` parameter does not need to be specified. + For multi-model endpoints, the `model` parameter should be the inference component name. + +!!! warning + Make sure that the selected prompt model driver is compatible with the selected model. Note that even the same + logical model can require different prompt model drivers depending on how it is bundled in the endpoint. For + example, the reponse format are different for `Meta-Llama-3-8B-Instruct` when deployed via + "Amazon SageMaker JumpStart" and "Hugging Face on Amazon SageMaker". + +##### Llama + +!!! info + `SageMakerLlamaPromptModelDriver` requires a tokenizer corresponding to a [Gated Model](https://huggingface.co/docs/hub/en/models-gated) on Hugging Face. + + Make sure to request access to the [Meta-Llama-3-8B-Instruct](https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct) model on Hugging Face and configure your environment for hugging face use. ```python title="PYTEST_IGNORE" import os @@ -416,7 +431,8 @@ from griptape.config import StructureConfig agent = Agent( config=StructureConfig( prompt_driver=AmazonSageMakerPromptDriver( - model=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], + endpoint=os.environ["SAGEMAKER_LLAMA_3_INSTRUCT_ENDPOINT_NAME"], + model=os.environ["SAGEMAKER_LLAMA_3_INSTRUCT_INFERENCE_COMPONENT_NAME"], prompt_model_driver=SageMakerLlamaPromptModelDriver(), temperature=0.75, ) @@ -446,7 +462,8 @@ from griptape.config import StructureConfig agent = Agent( config=StructureConfig( prompt_driver=AmazonSageMakerPromptDriver( - model=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], + endpoint=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], + model=os.environ["SAGEMAKER_FALCON_INFERENCE_COMPONENT_NAME"], prompt_model_driver=SageMakerFalconPromptModelDriver(), ) ) diff --git a/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py b/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py index 342faf909..2934ea642 100644 --- a/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py @@ -18,6 +18,8 @@ class AmazonSageMakerPromptDriver(BaseMultiModelPromptDriver): sagemaker_client: Any = field( default=Factory(lambda self: self.session.client("sagemaker-runtime"), takes_self=True), kw_only=True ) + endpoint: str = field(kw_only=True, metadata={"serializable": True}) + model: str = field(default=None, kw_only=True, metadata={"serializable": True}) custom_attributes: str = field(default="accept_eula=true", kw_only=True, metadata={"serializable": True}) stream: bool = field(default=False, kw_only=True, metadata={"serializable": True}) @@ -32,10 +34,11 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: "parameters": self.prompt_model_driver.prompt_stack_to_model_params(prompt_stack), } response = self.sagemaker_client.invoke_endpoint( - EndpointName=self.model, + EndpointName=self.endpoint, ContentType="application/json", Body=json.dumps(payload), CustomAttributes=self.custom_attributes, + **({"InferenceComponentName": self.model} if self.model is not None else {}), ) decoded_body = json.loads(response["Body"].read().decode("utf8")) diff --git a/griptape/drivers/prompt_model/base_prompt_model_driver.py b/griptape/drivers/prompt_model/base_prompt_model_driver.py index de9b6b6d6..096802370 100644 --- a/griptape/drivers/prompt_model/base_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/base_prompt_model_driver.py @@ -26,4 +26,4 @@ def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str | list | def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: ... @abstractmethod - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: ... + def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: ... diff --git a/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py index 032940d66..2b4c547a9 100644 --- a/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py @@ -65,7 +65,7 @@ def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: **input, } - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: + def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: if isinstance(output, bytes): body = json.loads(output.decode()) else: diff --git a/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py index 3b51eef1c..4da99e88f 100644 --- a/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py @@ -68,7 +68,7 @@ def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: "frequencyPenalty": {"scale": 0}, } - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: + def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: if isinstance(output, bytes): body = json.loads(output.decode()) else: diff --git a/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py index 6c6dab1d2..951583c51 100644 --- a/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py @@ -89,11 +89,11 @@ def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: "top_p": self.top_p, } - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: + def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: # When streaming, the response body comes back as bytes. if isinstance(output, bytes): output = output.decode() - elif isinstance(output, list): + elif isinstance(output, list) or isinstance(output, dict): raise Exception("Invalid output format.") body = json.loads(output) diff --git a/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py index 00621416a..5f5bbc1d2 100644 --- a/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py @@ -67,7 +67,7 @@ def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: } } - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: + def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: # When streaming, the response body comes back as bytes. if isinstance(output, str) or isinstance(output, bytes): if isinstance(output, bytes): diff --git a/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py b/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py index a6859f13c..a5a8a4dc9 100644 --- a/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py @@ -35,7 +35,7 @@ def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: "stop": stop_sequences, } - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: + def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: if isinstance(output, list): return TextArtifact(output[0]["generated_text"].strip()) else: diff --git a/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py b/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py index 7864a70a8..7e934d4a6 100644 --- a/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py @@ -8,7 +8,8 @@ @define class SageMakerLlamaPromptModelDriver(BasePromptModelDriver): - DEFAULT_MAX_TOKENS = 600 + # Default context length for all Llama 3 models is 8K as per https://huggingface.co/blog/llama3 + DEFAULT_MAX_INPUT_TOKENS = 8000 _tokenizer: HuggingFaceTokenizer = field(default=None, kw_only=True) @@ -16,26 +17,31 @@ class SageMakerLlamaPromptModelDriver(BasePromptModelDriver): def tokenizer(self) -> HuggingFaceTokenizer: if self._tokenizer is None: self._tokenizer = HuggingFaceTokenizer( - tokenizer=import_optional_dependency("transformers").LlamaTokenizerFast.from_pretrained( - "hf-internal-testing/llama-tokenizer" + tokenizer=import_optional_dependency("transformers").AutoTokenizer.from_pretrained( + "meta-llama/Meta-Llama-3-8B-Instruct", model_max_length=self.DEFAULT_MAX_INPUT_TOKENS ), - max_output_tokens=self.max_tokens or self.DEFAULT_MAX_TOKENS, + max_output_tokens=self.max_tokens or self.DEFAULT_MAX_INPUT_TOKENS, ) return self._tokenizer - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> list: - return [[{"role": i.role, "content": i.content} for i in prompt_stack.inputs]] + def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str: + return self.tokenizer.tokenizer.apply_chat_template( # pyright: ignore + [{"role": i.role, "content": i.content} for i in prompt_stack.inputs], + tokenize=False, + add_generation_prompt=True, + ) def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: prompt = self.prompt_driver.prompt_stack_to_string(prompt_stack) - return { "max_new_tokens": self.prompt_driver.max_output_tokens(prompt), "temperature": self.prompt_driver.temperature, + "stop": self.tokenizer.tokenizer.eos_token, } - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: - if isinstance(output, list): - return TextArtifact(output[0]["generation"]["content"].strip()) + def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: + # This output format is specific to the Llama 3 Instruct models when deployed via SageMaker JumpStart. + if isinstance(output, dict): + return TextArtifact(output["generated_text"]) else: - raise ValueError("output must be an instance of 'list'") + raise ValueError("Invalid output format.") diff --git a/tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py index 11dc881ab..c6692e1ba 100644 --- a/tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py @@ -1,7 +1,8 @@ from botocore.response import StreamingBody from griptape.artifacts import TextArtifact -from griptape.drivers import AmazonSageMakerPromptDriver, SageMakerLlamaPromptModelDriver +from griptape.drivers import AmazonSageMakerPromptDriver, SageMakerFalconPromptModelDriver from griptape.tokenizers import HuggingFaceTokenizer, OpenAiTokenizer +from griptape.utils import PromptStack from io import BytesIO from unittest.mock import Mock import json @@ -22,27 +23,30 @@ def mock_client(self, mocker): return mocker.patch("boto3.Session").return_value.client.return_value def test_init(self): - assert AmazonSageMakerPromptDriver(model="foo", prompt_model_driver=SageMakerLlamaPromptModelDriver()) + assert AmazonSageMakerPromptDriver(endpoint="foo", prompt_model_driver=SageMakerFalconPromptModelDriver()) def test_custom_tokenizer(self): assert isinstance( - AmazonSageMakerPromptDriver(model="foo", prompt_model_driver=SageMakerLlamaPromptModelDriver()).tokenizer, + AmazonSageMakerPromptDriver( + endpoint="foo", prompt_model_driver=SageMakerFalconPromptModelDriver() + ).tokenizer, HuggingFaceTokenizer, ) assert isinstance( AmazonSageMakerPromptDriver( - model="foo", + endpoint="foo", tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), - prompt_model_driver=SageMakerLlamaPromptModelDriver(), + prompt_model_driver=SageMakerFalconPromptModelDriver(), ).tokenizer, OpenAiTokenizer, ) def test_try_run(self, mock_model_driver, mock_client): # Given - driver = AmazonSageMakerPromptDriver(model="model", prompt_model_driver=mock_model_driver) - prompt_stack = "prompt-stack" + driver = AmazonSageMakerPromptDriver(endpoint="model", prompt_model_driver=mock_model_driver) + prompt_stack = PromptStack() + prompt_stack.add_user_input("prompt-stack") response_body = "invoke-endpoint-response-body" mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body(response_body)} @@ -53,7 +57,7 @@ def test_try_run(self, mock_model_driver, mock_client): mock_model_driver.prompt_stack_to_model_input.assert_called_once_with(prompt_stack) mock_model_driver.prompt_stack_to_model_params.assert_called_once_with(prompt_stack) mock_client.invoke_endpoint.assert_called_once_with( - EndpointName=driver.model, + EndpointName=driver.endpoint, ContentType="application/json", Body=json.dumps( { @@ -68,12 +72,14 @@ def test_try_run(self, mock_model_driver, mock_client): def test_try_run_throws_on_empty_response(self, mock_model_driver, mock_client): # Given - driver = AmazonSageMakerPromptDriver(model="model", prompt_model_driver=mock_model_driver) + driver = AmazonSageMakerPromptDriver(endpoint="model", prompt_model_driver=mock_model_driver) mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body("")} + prompt_stack = PromptStack() + prompt_stack.add_user_input("prompt-stack") # When with pytest.raises(Exception) as e: - driver.try_run("prompt-stack") + driver.try_run(prompt_stack) # Then assert e.value.args[0] == "model response is empty" diff --git a/tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py index ecc3a5d8c..78d990229 100644 --- a/tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py +++ b/tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py @@ -8,7 +8,7 @@ class TestSageMakerFalconPromptModelDriver: @pytest.fixture def driver(self): return AmazonSageMakerPromptDriver( - model="foo", + endpoint="endpoint-name", session=boto3.Session(region_name="us-east-1"), prompt_model_driver=SageMakerFalconPromptModelDriver(), temperature=0.12345, diff --git a/tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py index a06b34966..b39ce458e 100644 --- a/tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py +++ b/tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py @@ -5,10 +5,27 @@ class TestSageMakerLlamaPromptModelDriver: + @pytest.fixture(autouse=True) + def llama3_instruct_tokenizer(self, mocker): + tokenizer = mocker.patch("transformers.AutoTokenizer").return_value + tokenizer.model_max_length = 8000 + + return tokenizer + + @pytest.fixture(autouse=True) + def hugging_face_tokenizer(self, mocker, llama3_instruct_tokenizer): + tokenizer = mocker.patch( + "griptape.drivers.prompt_model.sagemaker_llama_prompt_model_driver.HuggingFaceTokenizer" + ).return_value + tokenizer.count_output_tokens_left.return_value = 7991 + tokenizer.tokenizer = llama3_instruct_tokenizer + return tokenizer + @pytest.fixture def driver(self): return AmazonSageMakerPromptDriver( - model="foo", + endpoint="endpoint-name", + model="inference-component-name", session=boto3.Session(region_name="us-east-1"), prompt_model_driver=SageMakerLlamaPromptModelDriver(), temperature=0.12345, @@ -26,22 +43,25 @@ def stack(self): def test_init(self, driver): assert driver.prompt_driver is not None - def test_prompt_stack_to_model_input(self, driver, stack): - model_input = driver.prompt_stack_to_model_input(stack) + def test_prompt_stack_to_model_input(self, driver, stack, hugging_face_tokenizer): + driver.prompt_stack_to_model_input(stack) - assert isinstance(model_input, list) - assert len(model_input[0]) == 2 - assert model_input[0][0]["role"] == "system" - assert model_input[0][0]["content"] == "foo" - assert model_input[0][1]["role"] == "user" - assert model_input[0][1]["content"] == "bar" + hugging_face_tokenizer.tokenizer.apply_chat_template.assert_called_once_with( + [{"role": "system", "content": "foo"}, {"role": "user", "content": "bar"}], + tokenize=False, + add_generation_prompt=True, + ) def test_prompt_stack_to_model_params(self, driver, stack): - assert driver.prompt_stack_to_model_params(stack)["max_new_tokens"] == 588 + assert driver.prompt_stack_to_model_params(stack)["max_new_tokens"] == 7991 assert driver.prompt_stack_to_model_params(stack)["temperature"] == 0.12345 def test_process_output(self, driver, stack): - assert driver.process_output([{"generation": {"content": "foobar"}}]).value == "foobar" + assert driver.process_output({"generated_text": "foobar"}).value == "foobar" + + def test_process_output_invalid_format(self, driver, stack): + with pytest.raises(ValueError): + assert driver.process_output([{"generated_text": "foobar"}]) def test_tokenizer_max_model_length(self, driver): - assert driver.tokenizer.tokenizer.model_max_length == 2048 + assert driver.tokenizer.tokenizer.model_max_length == 8000 From 1865b64365eb843761c6629534443d1ae1c1fb9f Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 4 Jun 2024 11:45:19 -0700 Subject: [PATCH 073/145] Fix integ tests (#827) --- .github/workflows/docs-integration-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index ef2c96123..4c469dcb6 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -117,7 +117,7 @@ jobs: PUSHER_APP_ID: ${{ secrets.INTEG_PUSHER_APP_ID }} PUSHER_KEY: ${{ secrets.INTEG_PUSHER_KEY }} PUSHER_SECRET: ${{ secrets.INTEG_PUSHER_SECRET }} - PUSHER_CLUSTER: ${{ secretes.INTEG_PUSHER_CLUSTER }} + PUSHER_CLUSTER: ${{ secrets.INTEG_PUSHER_CLUSTER }} services: postgres: image: ankane/pgvector:v0.5.0 From 0fade6403cceeaaeb1949a837ce28ba52688c023 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 4 Jun 2024 12:17:11 -0700 Subject: [PATCH 074/145] Fix out of space issue during integration tests (#828) --- .github/workflows/docs-integration-tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 4c469dcb6..dcef2e2c7 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -133,6 +133,8 @@ jobs: --health-timeout 5s --health-retries 5 steps: + - name: Delete huge unnecessary tools folder # See https://github.com/orgs/community/discussions/25678#discussioncomment-5242449 + run: rm -rf /opt/hostedtoolcache - name: Checkout actions uses: actions/checkout@v3 - name: Init environment From 23018b8403c514862a55ba6a70be49cb36a9b016 Mon Sep 17 00:00:00 2001 From: Emily Danielson <2302515+emjay07@users.noreply.github.com> Date: Tue, 4 Jun 2024 12:41:29 -0700 Subject: [PATCH 075/145] adding docs for griptape-cloud-knowledge-base-client (#824) --- .github/workflows/docs-integration-tests.yml | 1 + .../griptape-cloud-knowledge-base-client.md | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 docs/griptape-tools/official-tools/griptape-cloud-knowledge-base-client.md diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index dcef2e2c7..7e1fc5712 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -75,6 +75,7 @@ jobs: GRIPTAPE_CLOUD_API_KEY: ${{ secrets.INTEG_GRIPTAPE_CLOUD_API_KEY }} GRIPTAPE_CLOUD_STRUCTURE_ID: ${{ secrets.INTEG_GRIPTAPE_CLOUD_STRUCTURE_ID }} GRIPTAPE_CLOUD_BASE_URL: ${{ secrets.INTEG_GRIPTAPE_CLOUD_BASE_URL }} + GRIPTAPE_CLOUD_KB_ID: ${{ secrets.INTEG_GRIPTAPE_CLOUD_KB_ID }} OPENWEATHER_API_KEY: ${{ secrets.INTEG_OPENWEATHER_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.INTEG_ANTHROPIC_API_KEY }} SAGEMAKER_LLAMA_3_INSTRUCT_ENDPOINT_NAME: ${{ secrets.SAGEMAKER_LLAMA_3_INSTRUCT_ENDPOINT_NAME }} diff --git a/docs/griptape-tools/official-tools/griptape-cloud-knowledge-base-client.md b/docs/griptape-tools/official-tools/griptape-cloud-knowledge-base-client.md new file mode 100644 index 000000000..cd6e33ac9 --- /dev/null +++ b/docs/griptape-tools/official-tools/griptape-cloud-knowledge-base-client.md @@ -0,0 +1,25 @@ +## Overview + +The `GriptapeCloudKnowledgeBaseClient` is a lightweight Tool to retrieve data from a RAG pipeline and vector store hosted in [Griptape Cloud](https://cloud.griptape.ai). It enables searching across a centralized [Knowledge Base](https://cloud.griptape.ai/knowledge-bases) that can consist of various data sources such as Confluence, Google Docs, and web pages. + +**Note:** This tool requires a [Knowledge Base](https://cloud.griptape.ai/knowledge-bases) hosted in Griptape Cloud and an [API Key](https://cloud.griptape.ai/keys) for access. + +```python +import os +from griptape.structures import Agent +from griptape.tools import GriptapeCloudKnowledgeBaseClient + +knowledge_base_client = GriptapeCloudKnowledgeBaseClient( + description="Contains information about the company and its operations", + api_key=os.environ["GRIPTAPE_CLOUD_API_KEY"], + knowledge_base_id=os.environ["GRIPTAPE_CLOUD_KB_ID"], +) + +agent = Agent( + tools=[ + knowledge_base_client, + ] +) + +agent.run("What is the company's corporate travel policy?") +``` From 21c17b5a6b805ed4db75391a9ab6ebbe29db1dfc Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 4 Jun 2024 13:47:57 -0700 Subject: [PATCH 076/145] Ignore computer tool due to out of space issues (#830) --- .github/workflows/docs-integration-tests.yml | 2 -- docs/griptape-tools/official-tools/computer.md | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 7e1fc5712..f752aa90d 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -134,8 +134,6 @@ jobs: --health-timeout 5s --health-retries 5 steps: - - name: Delete huge unnecessary tools folder # See https://github.com/orgs/community/discussions/25678#discussioncomment-5242449 - run: rm -rf /opt/hostedtoolcache - name: Checkout actions uses: actions/checkout@v3 - name: Init environment diff --git a/docs/griptape-tools/official-tools/computer.md b/docs/griptape-tools/official-tools/computer.md index f2b23a548..6496e6fff 100644 --- a/docs/griptape-tools/official-tools/computer.md +++ b/docs/griptape-tools/official-tools/computer.md @@ -4,7 +4,7 @@ This tool enables LLMs to execute Python code and run shell commands inside a Do You can specify a local working directory and environment variables during tool initialization: -```python +```python title="PYTEST_IGNORE" from griptape.structures import Agent from griptape.tools import Computer From a7f83b30148bff0968e8e9594a362e8e5b691859 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 5 Jun 2024 08:32:59 -0700 Subject: [PATCH 077/145] Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. (#833) --- CHANGELOG.md | 3 ++ .../drivers/prompt-drivers.md | 31 ++--------------- .../prompt/huggingface_hub_prompt_driver.py | 11 ++++-- griptape/tokenizers/huggingface_tokenizer.py | 5 +-- poetry.lock | 34 +++++++++---------- pyproject.toml | 2 +- 6 files changed, 33 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87de56beb..c65fcfd95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed +- Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. + ## [0.26.0] - 2024-06-04 ### Added diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 1006f215f..8e0ffcfad 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -237,52 +237,27 @@ agent.run('Briefly explain how a computer works to a young child.') !!! info This driver requires the `drivers-prompt-huggingface` [extra](../index.md#extras). -The [HuggingFaceHubPromptDriver](../../reference/griptape/drivers/prompt/huggingface_hub_prompt_driver.md) connects to the [Hugging Face Hub API](https://huggingface.co/docs/hub/api). It supports models with the following tasks: +The [HuggingFaceHubPromptDriver](../../reference/griptape/drivers/prompt/huggingface_hub_prompt_driver.md) connects to the [Hugging Face Hub API](https://huggingface.co/docs/hub/api). -- text2text-generation -- text-generation !!! warning Not all models featured on the Hugging Face Hub are supported by this driver. Models that are not supported by [Hugging Face serverless inference](https://huggingface.co/docs/api-inference/en/index) will not work with this driver. Due to the limitations of Hugging Face serverless inference, only models that are than 10GB are supported. -!!! info - The `prompt_stack_to_string_converter` function is intended to convert a `PromptStack` to model specific input. You - should consult the model's documentation to determine the correct format. - -Let's recreate the [Falcon-7B-Instruct](https://huggingface.co/tiiuae/falcon-7b-instruct) example using Griptape: - ```python import os from griptape.structures import Agent from griptape.drivers import HuggingFaceHubPromptDriver from griptape.rules import Rule, Ruleset -from griptape.utils import PromptStack from griptape.config import StructureConfig -def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: - prompt_lines = [] - - for i in prompt_stack.inputs: - if i.is_user(): - prompt_lines.append(f"User: {i.content}") - elif i.is_assistant(): - prompt_lines.append(f"Girafatron: {i.content}") - else: - prompt_lines.append(f"Instructions: {i.content}") - prompt_lines.append("Girafatron:") - - return "\n".join(prompt_lines) - - agent = Agent( config=StructureConfig( prompt_driver=HuggingFaceHubPromptDriver( - model="tiiuae/falcon-7b-instruct", + model="HuggingFaceH4/zephyr-7b-beta", api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], - prompt_stack_to_string=prompt_stack_to_string_converter, ) ), rulesets=[ @@ -294,7 +269,7 @@ agent = Agent( "Girafatron is obsessed with giraffes, the most glorious animal on the face of this Earth. " "Giraftron believes all other animals are irrelevant when compared to the glorious majesty of the giraffe." ) - ] + ], ) ], ) diff --git a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py index 062672aa8..d6b021f29 100644 --- a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py @@ -52,7 +52,7 @@ class HuggingFaceHubPromptDriver(BasePromptDriver): ) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - prompt = self.prompt_stack_to_string(prompt_stack) + prompt = self.__to_prompt(prompt_stack) response = self.client.text_generation( prompt, return_full_text=False, max_new_tokens=self.max_output_tokens(prompt), **self.params @@ -61,7 +61,7 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: return TextArtifact(value=response) def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - prompt = self.prompt_stack_to_string(prompt_stack) + prompt = self.__to_prompt(prompt_stack) response = self.client.text_generation( prompt, return_full_text=False, max_new_tokens=self.max_output_tokens(prompt), stream=True, **self.params @@ -69,3 +69,10 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: for token in response: yield TextArtifact(value=token) + + def __to_prompt(self, prompt_stack: PromptStack) -> str: + tokens = self.tokenizer.tokenizer.apply_chat_template( + [{"role": i.role, "content": i.content} for i in prompt_stack.inputs], add_generation_prompt=True + ) + + return self.tokenizer.tokenizer.decode(tokens) diff --git a/griptape/tokenizers/huggingface_tokenizer.py b/griptape/tokenizers/huggingface_tokenizer.py index dbfba5429..84023a378 100644 --- a/griptape/tokenizers/huggingface_tokenizer.py +++ b/griptape/tokenizers/huggingface_tokenizer.py @@ -17,7 +17,4 @@ class HuggingFaceTokenizer(BaseTokenizer): max_output_tokens: int = field(kw_only=True) # pyright: ignore[reportGeneralTypeIssues] def count_tokens(self, text: str | list) -> int: - if isinstance(text, str): - return len(self.tokenizer.encode(text)) - else: - raise ValueError("Text must be a string.") + return len(self.tokenizer.encode(text)) diff --git a/poetry.lock b/poetry.lock index cf8fde4ac..c89d577b4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -5515,18 +5515,18 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.40.2" +version = "4.41.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = true python-versions = ">=3.8.0" files = [ - {file = "transformers-4.40.2-py3-none-any.whl", hash = "sha256:71cb94301ec211a2e1d4b8c8d18dcfaa902dfa00a089dceca167a8aa265d6f2d"}, - {file = "transformers-4.40.2.tar.gz", hash = "sha256:657b6054a2097671398d976ad46e60836e7e15f9ea9551631a96e33cb9240649"}, + {file = "transformers-4.41.2-py3-none-any.whl", hash = "sha256:05555d20e43f808de1ef211ab64803cdb513170cef70d29a888b589caebefc67"}, + {file = "transformers-4.41.2.tar.gz", hash = "sha256:80a4db216533d573e9cc7388646c31ed9480918feb7c55eb211249cb23567f87"}, ] [package.dependencies] filelock = "*" -huggingface-hub = ">=0.19.3,<1.0" +huggingface-hub = ">=0.23.0,<1.0" numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" @@ -5539,17 +5539,15 @@ tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.21.0)"] agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -docs = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] -docs-specific = ["hf-doc-builder"] -flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] integrations = ["optuna", "ray[tune] (>=2.7.0)", "sigopt"] @@ -5559,7 +5557,7 @@ natten = ["natten (>=0.14.6,<0.15.0)"] onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "ruff (==0.1.5)", "urllib3 (<2.0.0)"] +quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.1.5)", "urllib3 (<2.0.0)"] ray = ["ray[tune] (>=2.7.0)"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] sagemaker = ["sagemaker (>=2.31.0)"] @@ -5568,16 +5566,16 @@ serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] -tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] +tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] timm = ["timm"] tokenizers = ["tokenizers (>=0.19,<0.20)"] torch = ["accelerate (>=0.21.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.19.3,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.23.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] @@ -6085,4 +6083,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "4e98cb17a098a86dc3c109bad3cb8b5299e333d20e7c12903a7fe9472b7a3d31" +content-hash = "658965f94fd55e2ff1ee9e3579854d247344ce9da8b2f8f8a08826a515fb2aff" diff --git a/pyproject.toml b/pyproject.toml index 60fc345f2..c82cb8e26 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ requests = "^2" # drivers cohere = { version = ">=4", optional = true } anthropic = { version = "^0.20.0", optional = true } -transformers = { version = "^4.30", optional = true } +transformers = { version = "^4.41.2", optional = true } huggingface-hub = { version = ">=0.13", optional = true } boto3 = { version = "^1.28.2", optional = true } sqlalchemy-redshift = { version = "*", optional = true } From 7025db89814a41a86ab7b8c9989e617958740bfe Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 5 Jun 2024 09:45:12 -0700 Subject: [PATCH 078/145] Updated `HuggingFacePipelinePromptDriver` to use chat features of `transformers.TextGenerationPipeline`. (#832) --- CHANGELOG.md | 1 + .../drivers/prompt-drivers.md | 37 +++-------------- .../huggingface_pipeline_prompt_driver.py | 41 +++++++++++-------- ...est_hugging_face_pipeline_prompt_driver.py | 20 ++++++--- 4 files changed, 47 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c65fcfd95..31f79f873 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. +- Updated `HuggingFacePipelinePromptDriver` to use chat features of `transformers.TextGenerationPipeline`. ## [0.26.0] - 2024-06-04 diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 8e0ffcfad..c659c7e82 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -305,62 +305,37 @@ agent.run("Write the code for a snake game.") !!! info This driver requires the `drivers-prompt-huggingface-pipeline` [extra](../index.md#extras). -The [HuggingFacePipelinePromptDriver](../../reference/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.md) uses [Hugging Face Pipelines](https://huggingface.co/docs/transformers/main_classes/pipelines) for inference locally. It supports models with the following tasks: - -- text2text-generation -- text-generation +The [HuggingFacePipelinePromptDriver](../../reference/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.md) uses [Hugging Face Pipelines](https://huggingface.co/docs/transformers/main_classes/pipelines) for inference locally. !!! warning Running a model locally can be a computationally expensive process. ```python -import os from griptape.structures import Agent from griptape.drivers import HuggingFacePipelinePromptDriver from griptape.rules import Rule, Ruleset -from griptape.utils import PromptStack from griptape.config import StructureConfig -# Override the default Prompt Stack to string converter -# to format the prompt in a way that is easier for this model to understand. -def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: - prompt_lines = [] - - for i in prompt_stack.inputs: - if i.is_user(): - prompt_lines.append(f"User: {i.content}") - elif i.is_assistant(): - prompt_lines.append(f"Girafatron: {i.content}") - else: - prompt_lines.append(f"Instructions: {i.content}") - prompt_lines.append("Girafatron:") - - return "\n".join(prompt_lines) - - agent = Agent( config=StructureConfig( prompt_driver=HuggingFacePipelinePromptDriver( - model="TinyLlama/TinyLlama-1.1B-Chat-v0.6", - prompt_stack_to_string=prompt_stack_to_string_converter, + model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", ) ), rulesets=[ Ruleset( - name="Girafatron", + name="Pirate", rules=[ Rule( - value="You are Girafatron, a giraffe-obsessed robot. You are talking to a human. " - "Girafatron is obsessed with giraffes, the most glorious animal on the face of this Earth. " - "Giraftron believes all other animals are irrelevant when compared to the glorious majesty of the giraffe." + value="You are a pirate chatbot who always responds in pirate speak!" ) - ] + ], ) ], ) -agent.run("Hello Girafatron, what is your favorite animal?") +agent.run("How many helicopters can a human eat in one sitting?") ``` ### Multi Model Prompt Drivers diff --git a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py index bde6d5e4e..324ecd74f 100644 --- a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py @@ -1,5 +1,7 @@ +from __future__ import annotations from collections.abc import Iterator +from typing import TYPE_CHECKING from attrs import Factory, define, field from griptape.artifacts import TextArtifact @@ -7,6 +9,9 @@ from griptape.tokenizers import HuggingFaceTokenizer from griptape.utils import PromptStack, import_optional_dependency +if TYPE_CHECKING: + from transformers import TextGenerationPipeline + @define class HuggingFacePipelinePromptDriver(BasePromptDriver): @@ -14,13 +19,9 @@ class HuggingFacePipelinePromptDriver(BasePromptDriver): Attributes: params: Custom model run parameters. model: Hugging Face Hub model name. - tokenizer: Custom `HuggingFaceTokenizer`. """ - SUPPORTED_TASKS = ["text2text-generation", "text-generation"] - DEFAULT_PARAMS = {"return_full_text": False, "num_return_sequences": 1} - max_tokens: int = field(default=250, kw_only=True, metadata={"serializable": True}) model: str = field(kw_only=True, metadata={"serializable": True}) params: dict = field(factory=dict, kw_only=True, metadata={"serializable": True}) @@ -34,28 +35,36 @@ class HuggingFacePipelinePromptDriver(BasePromptDriver): ), kw_only=True, ) + pipe: TextGenerationPipeline = field( + default=Factory( + lambda self: import_optional_dependency("transformers").pipeline( + "text-generation", model=self.model, max_new_tokens=self.max_tokens, tokenizer=self.tokenizer.tokenizer + ), + takes_self=True, + ) + ) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - prompt = self.prompt_stack_to_string(prompt_stack) - pipeline = import_optional_dependency("transformers").pipeline + messages = [{"role": input.role, "content": input.content} for input in prompt_stack.inputs] - generator = pipeline( + result = self.pipe( + messages, + max_new_tokens=self.max_tokens, tokenizer=self.tokenizer.tokenizer, - model=self.model, - max_new_tokens=self.tokenizer.count_output_tokens_left(prompt), + stop_strings=self.tokenizer.stop_sequences, + temperature=self.temperature, + do_sample=True, ) - if generator.task in self.SUPPORTED_TASKS: - extra_params = {"pad_token_id": self.tokenizer.tokenizer.eos_token_id} - - response = generator(prompt, **(self.DEFAULT_PARAMS | extra_params | self.params)) + if isinstance(result, list): + if len(result) == 1: + generated_text = result[0]["generated_text"][-1]["content"] - if len(response) == 1: - return TextArtifact(value=response[0]["generated_text"].strip()) + return TextArtifact(value=generated_text) else: raise Exception("completion with more than one choice is not supported yet") else: - raise Exception(f"only models with the following tasks are supported: {self.SUPPORTED_TASKS}") + raise Exception("invalid output format") def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: raise NotImplementedError("streaming is not supported") diff --git a/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py b/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py index fec39da4d..b565ccf4d 100644 --- a/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py @@ -13,7 +13,7 @@ def mock_pipeline(self, mocker): def mock_generator(self, mock_pipeline): mock_generator = mock_pipeline.return_value mock_generator.task = "text-generation" - mock_generator.return_value = [{"generated_text": "model-output"}] + mock_generator.return_value = [{"generated_text": [{"content": "model-output"}]}] return mock_generator @pytest.fixture(autouse=True) @@ -44,6 +44,16 @@ def test_try_run(self, prompt_stack): # Then assert text_artifact.value == "model-output" + def test_try_stream(self, prompt_stack): + # Given + driver = HuggingFacePipelinePromptDriver(model="foo", max_tokens=42) + + # When + with pytest.raises(Exception) as e: + driver.try_stream(prompt_stack) + + assert e.value.args[0] == "streaming is not supported" + @pytest.mark.parametrize("choices", [[], [1, 2]]) def test_try_run_throws_when_multiple_choices_returned(self, choices, mock_generator, prompt_stack): # Given @@ -55,16 +65,16 @@ def test_try_run_throws_when_multiple_choices_returned(self, choices, mock_gener driver.try_run(prompt_stack) # Then - e.value.args[0] == "completion with more than one choice is not supported yet" + assert e.value.args[0] == "completion with more than one choice is not supported yet" - def test_try_run_throws_when_unsupported_task_returned(self, prompt_stack, mock_generator): + def test_try_run_throws_when_non_list(self, mock_generator, prompt_stack): # Given driver = HuggingFacePipelinePromptDriver(model="foo", max_tokens=42) - mock_generator.task = "obviously-an-unsupported-task" + mock_generator.return_value = {} # When with pytest.raises(Exception) as e: driver.try_run(prompt_stack) # Then - assert e.value.args[0].startswith("only models with the following tasks are supported: ") + assert e.value.args[0] == "invalid output format" From 863031797ecf68f8888100ef82e1333dbbc2df84 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:17:22 -0700 Subject: [PATCH 079/145] Add task relationship APIs (#822) --- CHANGELOG.md | 12 + docs/examples/multi-agent-workflow.md | 44 +- .../structures/workflows.md | 181 +++++- griptape/structures/structure.py | 22 + griptape/structures/workflow.py | 11 +- griptape/tasks/actions_subtask.py | 18 - griptape/tasks/base_task.py | 20 + griptape/tasks/toolkit_task.py | 1 + tests/unit/structures/test_workflow.py | 526 +++++++++++++++--- 9 files changed, 698 insertions(+), 137 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31f79f873..a644b13d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added +- `BaseTask.add_child()` to add a child task to a parent task. +- `BaseTask.add_children()` to add multiple child tasks to a parent task. +- `BaseTask.add_parent()` to add a parent task to a child task. +- `BaseTask.add_parents()` to add multiple parent tasks to a child task. +- `Structure.resolve_relationships()` to resolve asymmetrically defined parent/child relationships. In other words, if a parent declares a child, but the child does not declare the parent, the parent will automatically be added as a parent of the child when running this method. The method is invoked automatically by `Structure.before_run()`. + ### Changed +- **BREAKING**: `Workflow` no longer modifies task relationships when adding tasks via `tasks` init param, `add_tasks()` or `add_task()`. Previously, adding a task would automatically add the previously added task as its parent. Existing code that relies on this behavior will need to be updated to explicitly add parent/child relationships using the API offered by `BaseTask`. +- `Structure.before_run()` now automatically resolves asymmetrically defined parent/child relationships using the new `Structure.resolve_relationships()`. - Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. - Updated `HuggingFacePipelinePromptDriver` to use chat features of `transformers.TextGenerationPipeline`. +### Fixed +- `Workflow.insert_task()` no longer inserts duplicate tasks when given multiple parent tasks. + ## [0.26.0] - 2024-06-04 ### Added diff --git a/docs/examples/multi-agent-workflow.md b/docs/examples/multi-agent-workflow.md index 044f4abad..2678bf3ab 100644 --- a/docs/examples/multi-agent-workflow.md +++ b/docs/examples/multi-agent-workflow.md @@ -155,35 +155,33 @@ if __name__ == "__main__": ), ), ) - end_task = team.add_task( - PromptTask( - 'State "All Done!"', - ) - ) - team.insert_tasks( - research_task, - [ - StructureRunTask( - ( - """Using insights provided, develop an engaging blog + writer_tasks = team.add_tasks(*[ + StructureRunTask( + ( + """Using insights provided, develop an engaging blog post that highlights the most significant AI advancements. Your post should be informative yet accessible, catering to a tech-savvy audience. Make it sound cool, avoid complex words so it doesn't sound like AI. Insights: {{ parent_outputs["research"] }}""", - ), - driver=LocalStructureRunDriver( - structure_factory_fn=lambda: build_writer( - role=writer["role"], - goal=writer["goal"], - backstory=writer["backstory"], - ) - ), - ) - for writer in WRITERS - ], - end_task, + ), + driver=LocalStructureRunDriver( + structure_factory_fn=lambda: build_writer( + role=writer["role"], + goal=writer["goal"], + backstory=writer["backstory"], + ) + ), + parent_ids=[research_task.id], + ) + for writer in WRITERS + ]) + end_task = team.add_task( + PromptTask( + 'State "All Done!"', + parent_ids=[writer_task.id for writer_task in writer_tasks], + ) ) team.run() diff --git a/docs/griptape-framework/structures/workflows.md b/docs/griptape-framework/structures/workflows.md index 3c2bac25a..74b6755a0 100644 --- a/docs/griptape-framework/structures/workflows.md +++ b/docs/griptape-framework/structures/workflows.md @@ -18,7 +18,14 @@ Let's build a simple workflow. Let's say, we want to write a story in a fantasy from griptape.tasks import PromptTask from griptape.structures import Workflow -workflow = Workflow() + +world_task = PromptTask( + "Create a fictional world based on the following key words {{ keywords|join(', ') }}", + context={ + "keywords": ["fantasy", "ocean", "tidal lock"] + }, + id="world" +) def character_task(task_id, character_name) -> PromptTask: return PromptTask( @@ -26,30 +33,20 @@ def character_task(task_id, character_name) -> PromptTask: context={ "name": character_name }, - id=task_id + id=task_id, + parent_ids=["world"] ) -world_task = PromptTask( - "Create a fictional world based on the following key words {{ keywords|join(', ') }}", - context={ - "keywords": ["fantasy", "ocean", "tidal lock"] - }, - id="world" -) -workflow.add_task(world_task) +scotty_task = character_task("scotty", "Scotty") +annie_task = character_task("annie", "Annie") story_task = PromptTask( "Based on the following description of the world and characters, write a short story:\n{{ parent_outputs['world'] }}\n{{ parent_outputs['scotty'] }}\n{{ parent_outputs['annie'] }}", - id="story" + id="story", + parent_ids=["world", "scotty", "annie"] ) -workflow.add_task(story_task) -character_task_1 = character_task("scotty", "Scotty") -character_task_2 = character_task("annie", "Annie") - -# Note the preserve_relationship flag. This ensures that world_task remains a parent of -# story_task so its output can be referenced in the story_task prompt. -workflow.insert_tasks(world_task, [character_task_1, character_task_2], story_task, preserve_relationship=True) +workflow = Workflow(tasks=[world_task, story_task, scotty_task, annie_task, story_task]) workflow.run() ``` @@ -147,3 +144,151 @@ workflow.run() unity and harmony that can exist in diversity. ``` +### Declarative vs Imperative Syntax + +The above example showed how to create a workflow using the declarative syntax via the `parent_ids` init param, but there are a number of declarative and imperative options for you to choose between. There is no functional difference, they merely exist to allow you to structure your code as is most readable for your use case. Possibilities are illustrated below. + +Declaratively specify parents (same as above example): + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +workflow = Workflow( + tasks=[ + PromptTask("Name an animal", id="animal"), + PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective", parent_ids=["animal"]), + PromptTask("Name a {{ parent_outputs['adjective'] }} animal", id="new-animal", parent_ids=["adjective"]), + ], + rules=[Rule("output a single lowercase word")] +) + +workflow.run() +``` + +Declaratively specify children: + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +workflow = Workflow( + tasks=[ + PromptTask("Name an animal", id="animal", child_ids=["adjective"]), + PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective", child_ids=["new-animal"]), + PromptTask("Name a {{ parent_outputs['adjective'] }} animal", id="new-animal"), + ], + rules=[Rule("output a single lowercase word")], +) + +workflow.run() +``` + +Declaratively specifying a mix of parents and children: + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +workflow = Workflow( + tasks=[ + PromptTask("Name an animal", id="animal"), + PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective", parent_ids=["animal"], child_ids=["new-animal"]), + PromptTask("Name a {{ parent_outputs['adjective'] }} animal", id="new-animal"), + ], + rules=[Rule("output a single lowercase word")], +) + +workflow.run() +``` + +Imperatively specify parents: + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +animal_task = PromptTask("Name an animal", id="animal") +adjective_task = PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective") +new_animal_task = PromptTask("Name a {{ parent_outputs['adjective'] }} animal", id="new-animal") + +adjective_task.add_parent(animal_task) +new_animal_task.add_parent(adjective_task) + +workflow = Workflow( + tasks=[animal_task, adjective_task, new_animal_task], + rules=[Rule("output a single lowercase word")], +) + +workflow.run() +``` + +Imperatively specify children: + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +animal_task = PromptTask("Name an animal", id="animal") +adjective_task = PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective") +new_animal_task = PromptTask("Name a {{ parent_outputs['adjective'] }} animal", id="new-animal") + +animal_task.add_child(adjective_task) +adjective_task.add_child(new_animal_task) + +workflow = Workflow( + tasks=[animal_task, adjective_task, new_animal_task], + rules=[Rule("output a single lowercase word")], +) + +workflow.run() +``` + +Imperatively specify a mix of parents and children: + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +animal_task = PromptTask("Name an animal", id="animal") +adjective_task = PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective") +new_animal_task = PromptTask("Name a {{ parent_outputs['adjective'] }} animal", id="new-animal") + +adjective_task.add_parent(animal_task) +adjective_task.add_child(new_animal_task) + +workflow = Workflow( + tasks=[animal_task, adjective_task, new_animal_task], + rules=[Rule("output a single lowercase word")], +) + +workflow.run() +``` + +Or even mix imperative and declarative: + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +animal_task = PromptTask("Name an animal", id="animal") +adjective_task = PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective", parent_ids=["animal"]) + + +new_animal_task = PromptTask("Name a {{ parent_outputs['adjective'] }} animal", id="new-animal") +new_animal_task.add_parent(adjective_task) + +workflow = Workflow( + tasks=[animal_task, adjective_task, new_animal_task], + rules=[Rule("output a single lowercase word")], +) + +workflow.run() +``` diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 8b71dd905..84058dc7a 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -209,6 +209,26 @@ def publish_event(self, event: BaseEvent, flush: bool = False) -> None: def context(self, task: BaseTask) -> dict[str, Any]: return {"args": self.execution_args, "structure": self} + def resolve_relationships(self) -> None: + task_by_id = {task.id: task for task in self.tasks} + + for task in self.tasks: + # Ensure parents include this task as a child + for parent_id in task.parent_ids: + if parent_id not in task_by_id: + raise ValueError(f"Task with id {parent_id} doesn't exist.") + parent = task_by_id[parent_id] + if task.id not in parent.child_ids: + parent.child_ids.append(task.id) + + # Ensure children include this task as a parent + for child_id in task.child_ids: + if child_id not in task_by_id: + raise ValueError(f"Task with id {child_id} doesn't exist.") + child = task_by_id[child_id] + if task.id not in child.parent_ids: + child.parent_ids.append(task.id) + def before_run(self) -> None: self.publish_event( StartStructureRunEvent( @@ -216,6 +236,8 @@ def before_run(self) -> None: ) ) + self.resolve_relationships() + def after_run(self) -> None: self.publish_event( FinishStructureRunEvent( diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index e60efa425..5927a1f4f 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -16,10 +16,6 @@ class Workflow(Structure): def add_task(self, task: BaseTask) -> BaseTask: task.preprocess(self) - if self.output_task: - self.output_task.child_ids.append(task.id) - task.parent_ids.append(self.output_task.id) - self.tasks.append(task) return task @@ -77,6 +73,7 @@ def insert_task( if parent_task.id in child_task.parent_ids: child_task.parent_ids.remove(parent_task.id) + last_parent_index = -1 for parent_task in parent_tasks: # Link the new task to the parent task if parent_task.id not in task.parent_ids: @@ -85,7 +82,11 @@ def insert_task( parent_task.child_ids.append(task.id) parent_index = self.tasks.index(parent_task) - self.tasks.insert(parent_index + 1, task) + if parent_index > last_parent_index: + last_parent_index = parent_index + + # Insert the new task once, just after the last parent task + self.tasks.insert(last_parent_index + 1, task) return task diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index d47d1df32..dfc54aca6 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -172,24 +172,6 @@ def actions_to_dicts(self) -> list[dict]: def actions_to_json(self) -> str: return json.dumps(self.actions_to_dicts()) - def add_child(self, child: ActionsSubtask) -> ActionsSubtask: - if child.id not in self.child_ids: - self.child_ids.append(child.id) - - if self.id not in child.parent_ids: - child.parent_ids.append(self.id) - - return child - - def add_parent(self, parent: ActionsSubtask) -> ActionsSubtask: - if parent.id not in self.parent_ids: - self.parent_ids.append(parent.id) - - if self.id not in parent.child_ids: - parent.child_ids.append(self.id) - - return parent - def __init_from_prompt(self, value: str) -> None: thought_matches = re.findall(self.THOUGHT_PATTERN, value, re.MULTILINE) actions_matches = re.findall(self.ACTIONS_PATTERN, value, re.DOTALL) diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index 771fe4dc8..c75978997 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -60,6 +60,26 @@ def meta_memories(self) -> list[BaseMetaEntry]: def __str__(self) -> str: return str(self.output.value) + def add_parents(self, parents: list[str | BaseTask]) -> None: + for parent in parents: + self.add_parent(parent) + + def add_parent(self, parent: str | BaseTask) -> None: + parent_id = parent if isinstance(parent, str) else parent.id + + if parent_id not in self.parent_ids: + self.parent_ids.append(parent_id) + + def add_children(self, children: list[str | BaseTask]) -> None: + for child in children: + self.add_child(child) + + def add_child(self, child: str | BaseTask) -> None: + child_id = child if isinstance(child, str) else child.id + + if child_id not in self.child_ids: + self.child_ids.append(child_id) + def preprocess(self, structure: Structure) -> BaseTask: self.structure = structure diff --git a/griptape/tasks/toolkit_task.py b/griptape/tasks/toolkit_task.py index ed787aa45..3a3727434 100644 --- a/griptape/tasks/toolkit_task.py +++ b/griptape/tasks/toolkit_task.py @@ -161,6 +161,7 @@ def add_subtask(self, subtask: ActionsSubtask) -> ActionsSubtask: if len(self.subtasks) > 0: self.subtasks[-1].add_child(subtask) + subtask.add_parent(self.subtasks[-1]) self.subtasks.append(subtask) diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index 970d43e74..4a493bdd8 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -140,10 +140,10 @@ def test_tasks_initialization(self): assert workflow.tasks[1].id == "test2" assert workflow.tasks[2].id == "test3" assert len(first_task.parents) == 0 - assert len(first_task.children) == 1 - assert len(second_task.parents) == 1 - assert len(second_task.children) == 1 - assert len(third_task.parents) == 1 + assert len(first_task.children) == 0 + assert len(second_task.parents) == 0 + assert len(second_task.children) == 0 + assert len(third_task.parents) == 0 assert len(third_task.children) == 0 def test_add_task(self): @@ -161,8 +161,8 @@ def test_add_task(self): assert first_task.structure == workflow assert second_task.structure == workflow assert len(first_task.parents) == 0 - assert len(first_task.children) == 1 - assert len(second_task.parents) == 1 + assert len(first_task.children) == 0 + assert len(second_task.parents) == 0 assert len(second_task.children) == 0 def test_add_tasks(self): @@ -179,8 +179,8 @@ def test_add_tasks(self): assert first_task.structure == workflow assert second_task.structure == workflow assert len(first_task.parents) == 0 - assert len(first_task.children) == 1 - assert len(second_task.parents) == 1 + assert len(first_task.children) == 0 + assert len(second_task.parents) == 0 assert len(second_task.children) == 0 def test_run(self): @@ -210,7 +210,111 @@ def test_run_with_args(self): assert task.input.to_text() == "-" - def test_run_topology_1(self): + @pytest.mark.parametrize( + "tasks", + [ + [PromptTask(id="task1", parent_ids=["missing"])], + [PromptTask(id="task1", child_ids=["missing"])], + [PromptTask(id="task1"), PromptTask(id="task2", parent_ids=["missing"])], + [PromptTask(id="task1"), PromptTask(id="task2", parent_ids=["task1", "missing"])], + [PromptTask(id="task1"), PromptTask(id="task2", parent_ids=["task1"], child_ids=["missing"])], + ], + ) + def test_run_raises_on_missing_parent_or_child_id(self, tasks): + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=tasks) + + with pytest.raises(ValueError) as e: + workflow.run() + + assert e.value.args[0] == "Task with id missing doesn't exist." + + def test_run_topology_1_declarative_parents(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1"), + PromptTask("test2", id="task2", parent_ids=["task1"]), + PromptTask("test3", id="task3", parent_ids=["task1"]), + PromptTask("test4", id="task4", parent_ids=["task2", "task3"]), + ], + ) + + workflow.run() + + self._validate_topology_1(workflow) + + def test_run_topology_1_declarative_children(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1", child_ids=["task2", "task3"]), + PromptTask("test2", id="task2", child_ids=["task4"]), + PromptTask("test3", id="task3", child_ids=["task4"]), + PromptTask("test4", id="task4"), + ], + ) + + workflow.run() + + self._validate_topology_1(workflow) + + def test_run_topology_1_declarative_mixed(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1", child_ids=["task3"]), + PromptTask("test2", id="task2", parent_ids=["task1"], child_ids=["task4"]), + PromptTask("test3", id="task3"), + PromptTask("test4", id="task4", parent_ids=["task2", "task3"]), + ], + ) + + workflow.run() + + self._validate_topology_1(workflow) + + def test_run_topology_1_imperative_parents(self): + task1 = PromptTask("test1", id="task1") + task2 = PromptTask("test2", id="task2") + task3 = PromptTask("test3", id="task3") + task4 = PromptTask("test4", id="task4") + task2.add_parent(task1) + task3.add_parent("task1") + task4.add_parents([task2, "task3"]) + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[task1, task2, task3, task4]) + + workflow.run() + + self._validate_topology_1(workflow) + + def test_run_topology_1_imperative_children(self): + task1 = PromptTask("test1", id="task1") + task2 = PromptTask("test2", id="task2") + task3 = PromptTask("test3", id="task3") + task4 = PromptTask("test4", id="task4") + task1.add_children([task2, task3]) + task2.add_child(task4) + task3.add_child(task4) + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[task1, task2, task3, task4]) + + workflow.run() + + self._validate_topology_1(workflow) + + def test_run_topology_1_imperative_mixed(self): + task1 = PromptTask("test1", id="task1") + task2 = PromptTask("test2", id="task2") + task3 = PromptTask("test3", id="task3") + task4 = PromptTask("test4", id="task4") + task1.add_children([task2, task3]) + task4.add_parents([task2, task3]) + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[task1, task2, task3, task4]) + + workflow.run() + + self._validate_topology_1(workflow) + + def test_run_topology_1_imperative_insert(self): task1 = PromptTask("test1", id="task1") task2 = PromptTask("test2", id="task2") task3 = PromptTask("test3", id="task3") @@ -225,60 +329,152 @@ def test_run_topology_1(self): workflow.run() - assert task1.state == BaseTask.State.FINISHED - assert task1.parent_ids == [] - assert task1.child_ids == ["task2", "task3"] + self._validate_topology_1(workflow) + + def test_run_topology_2_declarative_parents(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("testa", id="taska"), + PromptTask("testb", id="taskb", parent_ids=["taska"]), + PromptTask("testc", id="taskc", parent_ids=["taska"]), + PromptTask("testd", id="taskd", parent_ids=["taska", "taskb", "taskc"]), + PromptTask("teste", id="taske", parent_ids=["taska", "taskd", "taskc"]), + ], + ) - assert task2.state == BaseTask.State.FINISHED - assert task2.parent_ids == ["task1"] - assert task2.child_ids == ["task4"] + workflow.run() - assert task3.state == BaseTask.State.FINISHED - assert task3.parent_ids == ["task1"] - assert task3.child_ids == ["task4"] + self._validate_topology_2(workflow) + + def test_run_topology_2_declarative_children(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("testa", id="taska", child_ids=["taskb", "taskc", "taskd", "taske"]), + PromptTask("testb", id="taskb", child_ids=["taskd"]), + PromptTask("testc", id="taskc", child_ids=["taskd", "taske"]), + PromptTask("testd", id="taskd", child_ids=["taske"]), + PromptTask("teste", id="taske", child_ids=[]), + ], + ) - assert task4.state == BaseTask.State.FINISHED - assert task4.parent_ids == ["task2", "task3"] - assert task4.child_ids == [] + workflow.run() - def test_run_topology_2(self): - """Adapted from https://en.wikipedia.org/wiki/Directed_acyclic_graph#/media/File:Tred-G.svg""" + self._validate_topology_2(workflow) + + def test_run_topology_2_imperative_parents(self): taska = PromptTask("testa", id="taska") taskb = PromptTask("testb", id="taskb") taskc = PromptTask("testc", id="taskc") taskd = PromptTask("testd", id="taskd") taske = PromptTask("teste", id="taske") - workflow = Workflow(prompt_driver=MockPromptDriver()) + taskb.add_parent(taska) + taskc.add_parent("taska") + taskd.add_parents([taska, taskb, taskc]) + taske.add_parents(["taska", taskd, "taskc"]) + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[taska, taskb, taskc, taskd, taske]) + + workflow.run() + self._validate_topology_2(workflow) + + def test_run_topology_2_imperative_children(self): + taska = PromptTask("testa", id="taska") + taskb = PromptTask("testb", id="taskb") + taskc = PromptTask("testc", id="taskc") + taskd = PromptTask("testd", id="taskd") + taske = PromptTask("teste", id="taske") + taska.add_children([taskb, taskc, taskd, taske]) + taskb.add_child(taskd) + taskc.add_children([taskd, taske]) + taskd.add_child(taske) + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[taska, taskb, taskc, taskd, taske]) + + workflow.run() + + self._validate_topology_2(workflow) + + def test_run_topology_2_imperative_mixed(self): + taska = PromptTask("testa", id="taska") + taskb = PromptTask("testb", id="taskb") + taskc = PromptTask("testc", id="taskc") + taskd = PromptTask("testd", id="taskd") + taske = PromptTask("teste", id="taske") + taska.add_children([taskb, taskc, taskd, taske]) + taskb.add_child(taskd) + taskd.add_parent(taskc) + taske.add_parents(["taska", taskd, "taskc"]) + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[taska, taskb, taskc, taskd, taske]) + + workflow.run() + + self._validate_topology_2(workflow) + + def test_run_topology_2_imperative_insert(self): + taska = PromptTask("testa", id="taska") + taskb = PromptTask("testb", id="taskb") + taskc = PromptTask("testc", id="taskc") + taskd = PromptTask("testd", id="taskd") + taske = PromptTask("teste", id="taske") + workflow = Workflow(prompt_driver=MockPromptDriver()) workflow.add_task(taska) workflow.add_task(taske) + taske.add_parent(taska) workflow.insert_tasks(taska, taskd, taske, preserve_relationship=True) workflow.insert_tasks(taska, [taskc], [taskd, taske], preserve_relationship=True) workflow.insert_tasks(taska, taskb, taskd, preserve_relationship=True) workflow.run() - assert taska.state == BaseTask.State.FINISHED - assert taska.parent_ids == [] - assert set(taska.child_ids) == {"taskb", "taskd", "taskc", "taske"} + self._validate_topology_2(workflow) + + def test_run_topology_3_declarative_parents(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1"), + PromptTask("test2", id="task2", parent_ids=["task4"]), + PromptTask("test4", id="task4", parent_ids=["task1"]), + PromptTask("test3", id="task3", parent_ids=["task2"]), + ], + ) - assert taskb.state == BaseTask.State.FINISHED - assert taskb.parent_ids == ["taska"] - assert taskb.child_ids == ["taskd"] + workflow.run() - assert taskc.state == BaseTask.State.FINISHED - assert taskc.parent_ids == ["taska"] - assert set(taskc.child_ids) == {"taskd", "taske"} + self._validate_topology_3(workflow) + + def test_run_topology_3_declarative_children(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1", child_ids=["task4"]), + PromptTask("test2", id="task2", child_ids=["task3"]), + PromptTask("test4", id="task4", child_ids=["task2"]), + PromptTask("test3", id="task3", child_ids=[]), + ], + ) - assert taskd.state == BaseTask.State.FINISHED - assert set(taskd.parent_ids) == {"taskb", "taska", "taskc"} - assert taskd.child_ids == ["taske"] + workflow.run() - assert taske.state == BaseTask.State.FINISHED - assert set(taske.parent_ids) == {"taskd", "taskc", "taska"} - assert taske.child_ids == [] + self._validate_topology_3(workflow) + + def test_run_topology_3_declarative_mixed(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1"), + PromptTask("test2", id="task2", parent_ids=["task4"], child_ids=["task3"]), + PromptTask("test4", id="task4", parent_ids=["task1"], child_ids=["task2"]), + PromptTask("test3", id="task3"), + ], + ) + + workflow.run() + + self._validate_topology_3(workflow) - def test_run_topology_3(self): + def test_run_topology_3_imperative_insert(self): task1 = PromptTask("test1", id="task1") task2 = PromptTask("test2", id="task2") task3 = PromptTask("test3", id="task3") @@ -288,28 +484,75 @@ def test_run_topology_3(self): workflow + task1 workflow + task2 workflow + task3 + task2.add_parent(task1) + task3.add_parent(task2) workflow.insert_tasks(task1, task4, task2) workflow.run() - assert task1.state == BaseTask.State.FINISHED - assert task1.parent_ids == [] - assert task1.child_ids == ["task4"] + self._validate_topology_3(workflow) + + def test_run_topology_4_declarative_parents(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask(id="collect_movie_info"), + PromptTask(id="movie_info_1", parent_ids=["collect_movie_info"]), + PromptTask(id="movie_info_2", parent_ids=["collect_movie_info"]), + PromptTask(id="movie_info_3", parent_ids=["collect_movie_info"]), + PromptTask(id="compare_movies", parent_ids=["movie_info_1", "movie_info_2", "movie_info_3"]), + PromptTask(id="send_email_task", parent_ids=["compare_movies"]), + PromptTask(id="save_to_disk", parent_ids=["compare_movies"]), + PromptTask(id="publish_website", parent_ids=["compare_movies"]), + PromptTask(id="summarize_to_slack", parent_ids=["send_email_task", "save_to_disk", "publish_website"]), + ], + ) - assert task2.state == BaseTask.State.FINISHED - assert task2.parent_ids == ["task4"] - assert task2.child_ids == ["task3"] + workflow.run() - assert task3.state == BaseTask.State.FINISHED - assert task3.parent_ids == ["task2"] - assert task3.child_ids == [] + self._validate_topology_4(workflow) + + def test_run_topology_4_declarative_children(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask(id="collect_movie_info", child_ids=["movie_info_1", "movie_info_2", "movie_info_3"]), + PromptTask(id="movie_info_1", child_ids=["compare_movies"]), + PromptTask(id="movie_info_2", child_ids=["compare_movies"]), + PromptTask(id="movie_info_3", child_ids=["compare_movies"]), + PromptTask(id="compare_movies", child_ids=["send_email_task", "save_to_disk", "publish_website"]), + PromptTask(id="send_email_task", child_ids=["summarize_to_slack"]), + PromptTask(id="save_to_disk", child_ids=["summarize_to_slack"]), + PromptTask(id="publish_website", child_ids=["summarize_to_slack"]), + PromptTask(id="summarize_to_slack", child_ids=[]), + ], + ) - assert task4.state == BaseTask.State.FINISHED - assert task4.parent_ids == ["task1"] - assert task4.child_ids == ["task2"] + workflow.run() - def test_run_topology_4(self): - workflow = Workflow(prompt_driver=MockPromptDriver()) + self._validate_topology_4(workflow) + + def test_run_topology_4_declarative_mixed(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask(id="collect_movie_info"), + PromptTask(id="movie_info_1", parent_ids=["collect_movie_info"], child_ids=["compare_movies"]), + PromptTask(id="movie_info_2", parent_ids=["collect_movie_info"], child_ids=["compare_movies"]), + PromptTask(id="movie_info_3", parent_ids=["collect_movie_info"], child_ids=["compare_movies"]), + PromptTask(id="compare_movies"), + PromptTask(id="send_email_task", parent_ids=["compare_movies"], child_ids=["summarize_to_slack"]), + PromptTask(id="save_to_disk", parent_ids=["compare_movies"], child_ids=["summarize_to_slack"]), + PromptTask(id="publish_website", parent_ids=["compare_movies"], child_ids=["summarize_to_slack"]), + PromptTask(id="summarize_to_slack"), + ], + ) + + workflow.run() + + self._validate_topology_4(workflow) + + def test_run_topology_4_imperative_insert(self): collect_movie_info = PromptTask(id="collect_movie_info") summarize_to_slack = PromptTask(id="summarize_to_slack") movie_info_1 = PromptTask(id="movie_info_1") @@ -321,30 +564,34 @@ def test_run_topology_4(self): publish_website = PromptTask(id="publish_website") movie_info_3 = PromptTask(id="movie_info_3") + workflow = Workflow(prompt_driver=MockPromptDriver()) workflow.add_tasks(collect_movie_info, summarize_to_slack) workflow.insert_tasks(collect_movie_info, [movie_info_1, movie_info_2, movie_info_3], summarize_to_slack) workflow.insert_tasks([movie_info_1, movie_info_2, movie_info_3], compare_movies, summarize_to_slack) workflow.insert_tasks(compare_movies, [send_email_task, save_to_disk, publish_website], summarize_to_slack) - assert set(collect_movie_info.child_ids) == {"movie_info_1", "movie_info_2", "movie_info_3"} - - assert set(movie_info_1.parent_ids) == {"collect_movie_info"} - assert set(movie_info_2.parent_ids) == {"collect_movie_info"} - assert set(movie_info_3.parent_ids) == {"collect_movie_info"} - assert set(movie_info_1.child_ids) == {"compare_movies"} - assert set(movie_info_2.child_ids) == {"compare_movies"} - assert set(movie_info_3.child_ids) == {"compare_movies"} - - assert set(compare_movies.parent_ids) == {"movie_info_1", "movie_info_2", "movie_info_3"} - assert set(compare_movies.child_ids) == {"send_email_task", "save_to_disk", "publish_website"} - - assert set(send_email_task.parent_ids) == {"compare_movies"} - assert set(save_to_disk.parent_ids) == {"compare_movies"} - assert set(publish_website.parent_ids) == {"compare_movies"} - - assert set(send_email_task.child_ids) == {"summarize_to_slack"} - assert set(save_to_disk.child_ids) == {"summarize_to_slack"} - assert set(publish_website.child_ids) == {"summarize_to_slack"} + self._validate_topology_4(workflow) + + @pytest.mark.parametrize( + "tasks", + [ + [PromptTask(id="a", parent_ids=["a"])], + [PromptTask(id="a"), PromptTask(id="b", parent_ids=["a", "b"])], + [PromptTask(id="a", parent_ids=["b"]), PromptTask(id="b", parent_ids=["a"])], + [ + PromptTask(id="a", parent_ids=["c"]), + PromptTask(id="b", parent_ids=["a"]), + PromptTask(id="c", parent_ids=["b"]), + ], + ], + ) + def test_run_raises_on_cycle(self, tasks): + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=tasks) + + with pytest.raises(ValueError) as e: + workflow.run() + + assert e.value.args[0] == "nodes are in a cycle" def test_input_task(self): task1 = PromptTask("prompt1") @@ -417,6 +664,9 @@ def test_context(self): workflow + task workflow + child + task.add_parent(parent) + task.add_child(child) + context = workflow.context(task) assert context["parent_outputs"] == {parent.id: ""} @@ -439,3 +689,133 @@ def test_deprecation(self): with pytest.deprecated_call(): Workflow(stream=True) + + @staticmethod + def _validate_topology_1(workflow): + assert len(workflow.tasks) == 4 + assert workflow.input_task.id == "task1" + assert workflow.output_task.id == "task4" + assert workflow.input_task.id == workflow.tasks[0].id + assert workflow.output_task.id == workflow.tasks[-1].id + + task1 = workflow.find_task("task1") + assert task1.state == BaseTask.State.FINISHED + assert task1.parent_ids == [] + assert sorted(task1.child_ids) == ["task2", "task3"] + + task2 = workflow.find_task("task2") + assert task2.state == BaseTask.State.FINISHED + assert task2.parent_ids == ["task1"] + assert task2.child_ids == ["task4"] + + task3 = workflow.find_task("task3") + assert task3.state == BaseTask.State.FINISHED + assert task3.parent_ids == ["task1"] + assert task3.child_ids == ["task4"] + + task4 = workflow.find_task("task4") + assert task4.state == BaseTask.State.FINISHED + assert sorted(task4.parent_ids) == ["task2", "task3"] + assert task4.child_ids == [] + + @staticmethod + def _validate_topology_2(workflow): + """Adapted from https://en.wikipedia.org/wiki/Directed_acyclic_graph#/media/File:Tred-G.svg""" + assert len(workflow.tasks) == 5 + assert workflow.input_task.id == "taska" + assert workflow.output_task.id == "taske" + assert workflow.input_task.id == workflow.tasks[0].id + assert workflow.output_task.id == workflow.tasks[-1].id + + taska = workflow.find_task("taska") + assert taska.state == BaseTask.State.FINISHED + assert taska.parent_ids == [] + assert sorted(taska.child_ids) == ["taskb", "taskc", "taskd", "taske"] + + taskb = workflow.find_task("taskb") + assert taskb.state == BaseTask.State.FINISHED + assert taskb.parent_ids == ["taska"] + assert taskb.child_ids == ["taskd"] + + taskc = workflow.find_task("taskc") + assert taskc.state == BaseTask.State.FINISHED + assert taskc.parent_ids == ["taska"] + assert sorted(taskc.child_ids) == ["taskd", "taske"] + + taskd = workflow.find_task("taskd") + assert taskd.state == BaseTask.State.FINISHED + assert sorted(taskd.parent_ids) == ["taska", "taskb", "taskc"] + assert taskd.child_ids == ["taske"] + + taske = workflow.find_task("taske") + assert taske.state == BaseTask.State.FINISHED + assert sorted(taske.parent_ids) == ["taska", "taskc", "taskd"] + assert taske.child_ids == [] + + @staticmethod + def _validate_topology_3(workflow): + assert len(workflow.tasks) == 4 + assert workflow.input_task.id == "task1" + assert workflow.output_task.id == "task3" + assert workflow.input_task.id == workflow.tasks[0].id + assert workflow.output_task.id == workflow.tasks[-1].id + + task1 = workflow.find_task("task1") + assert task1.state == BaseTask.State.FINISHED + assert task1.parent_ids == [] + assert task1.child_ids == ["task4"] + + task2 = workflow.find_task("task2") + assert task2.state == BaseTask.State.FINISHED + assert task2.parent_ids == ["task4"] + assert task2.child_ids == ["task3"] + + task3 = workflow.find_task("task3") + assert task3.state == BaseTask.State.FINISHED + assert task3.parent_ids == ["task2"] + assert task3.child_ids == [] + + task4 = workflow.find_task("task4") + assert task4.state == BaseTask.State.FINISHED + assert task4.parent_ids == ["task1"] + assert task4.child_ids == ["task2"] + + @staticmethod + def _validate_topology_4(workflow): + assert len(workflow.tasks) == 9 + assert workflow.input_task.id == "collect_movie_info" + assert workflow.output_task.id == "summarize_to_slack" + assert workflow.input_task.id == workflow.tasks[0].id + assert workflow.output_task.id == workflow.tasks[-1].id + + collect_movie_info = workflow.find_task("collect_movie_info") + assert collect_movie_info.parent_ids == [] + assert sorted(collect_movie_info.child_ids) == ["movie_info_1", "movie_info_2", "movie_info_3"] + + movie_info_1 = workflow.find_task("movie_info_1") + assert movie_info_1.parent_ids == ["collect_movie_info"] + assert movie_info_1.child_ids == ["compare_movies"] + + movie_info_2 = workflow.find_task("movie_info_2") + assert movie_info_2.parent_ids == ["collect_movie_info"] + assert movie_info_2.child_ids == ["compare_movies"] + + movie_info_3 = workflow.find_task("movie_info_3") + assert movie_info_3.parent_ids == ["collect_movie_info"] + assert movie_info_3.child_ids == ["compare_movies"] + + compare_movies = workflow.find_task("compare_movies") + assert sorted(compare_movies.parent_ids) == ["movie_info_1", "movie_info_2", "movie_info_3"] + assert sorted(compare_movies.child_ids) == ["publish_website", "save_to_disk", "send_email_task"] + + send_email_task = workflow.find_task("send_email_task") + assert send_email_task.parent_ids == ["compare_movies"] + assert send_email_task.child_ids == ["summarize_to_slack"] + + save_to_disk = workflow.find_task("save_to_disk") + assert save_to_disk.parent_ids == ["compare_movies"] + assert save_to_disk.child_ids == ["summarize_to_slack"] + + publish_website = workflow.find_task("publish_website") + assert publish_website.parent_ids == ["compare_movies"] + assert publish_website.child_ids == ["summarize_to_slack"] From 7a137e1cac88385eb7f0425cdc0453e603d13256 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 5 Jun 2024 10:40:27 -0700 Subject: [PATCH 080/145] =?UTF-8?q?Update=20cohere=20prompt=20driver,=20ad?= =?UTF-8?q?d=20cohere=20embedding=20driver,=20cohere=20stru=E2=80=A6=20(#8?= =?UTF-8?q?31)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 + .../drivers/embedding-drivers.md | 23 ++ griptape/config/__init__.py | 2 + griptape/config/cohere_structure_config.py | 37 +++ griptape/drivers/__init__.py | 2 + .../embedding/cohere_embedding_driver.py | 43 +++ .../drivers/prompt/cohere_prompt_driver.py | 50 ++-- griptape/schemas/base_schema.py | 2 + griptape/tokenizers/cohere_tokenizer.py | 4 +- poetry.lock | 265 +++++++++--------- pyproject.toml | 5 +- .../config/test_cohere_structure_config.py | 38 +++ .../embedding/test_cohere_embedding_driver.py | 21 ++ .../prompt/test_cohere_prompt_driver.py | 23 +- .../unit/tokenizers/test_cohere_tokenizer.py | 1 + 15 files changed, 348 insertions(+), 171 deletions(-) create mode 100644 griptape/config/cohere_structure_config.py create mode 100644 griptape/drivers/embedding/cohere_embedding_driver.py create mode 100644 tests/unit/config/test_cohere_structure_config.py create mode 100644 tests/unit/drivers/embedding/test_cohere_embedding_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index a644b13d2..189dd785d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,12 +12,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `BaseTask.add_parent()` to add a parent task to a child task. - `BaseTask.add_parents()` to add multiple parent tasks to a child task. - `Structure.resolve_relationships()` to resolve asymmetrically defined parent/child relationships. In other words, if a parent declares a child, but the child does not declare the parent, the parent will automatically be added as a parent of the child when running this method. The method is invoked automatically by `Structure.before_run()`. +- `CohereEmbeddingDriver` for using Cohere's embeddings API. +- `CohereStructureConfig` for providing Structures with quick Cohere configuration. ### Changed - **BREAKING**: `Workflow` no longer modifies task relationships when adding tasks via `tasks` init param, `add_tasks()` or `add_task()`. Previously, adding a task would automatically add the previously added task as its parent. Existing code that relies on this behavior will need to be updated to explicitly add parent/child relationships using the API offered by `BaseTask`. - `Structure.before_run()` now automatically resolves asymmetrically defined parent/child relationships using the new `Structure.resolve_relationships()`. - Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. - Updated `HuggingFacePipelinePromptDriver` to use chat features of `transformers.TextGenerationPipeline`. +- Updated `CoherePromptDriver` to use Cohere's latest SDK. ### Fixed - `Workflow.insert_task()` no longer inserts duplicate tasks when given multiple parent tasks. diff --git a/docs/griptape-framework/drivers/embedding-drivers.md b/docs/griptape-framework/drivers/embedding-drivers.md index 49dfde4a5..58182b03e 100644 --- a/docs/griptape-framework/drivers/embedding-drivers.md +++ b/docs/griptape-framework/drivers/embedding-drivers.md @@ -164,6 +164,29 @@ embeddings = driver.embed_string("Hello world!") print(embeddings[:3]) ``` +### Cohere Embeddings + +The [CohereEmbeddingDriver](../../reference/griptape/drivers/embedding/cohere_embedding_driver.md) uses the [Cohere Embeddings API](https://docs.cohere.com/docs/embeddings). + +!!! info + This driver requires the `drivers-embedding-cohere` [extra](../index.md#extras). + +```python +import os +from griptape.drivers import CohereEmbeddingDriver + +embedding_driver=CohereEmbeddingDriver( + model="embed-english-v3.0", + api_key=os.environ["COHERE_API_KEY"], + input_type="search_document", +) + +embeddings = embedding_driver.embed_string("Hello world!") + +# display the first 3 embeddings +print(embeddings[:3]) +``` + ### Override Default Structure Embedding Driver Here is how you can override the Embedding Driver that is used by default in Structures. diff --git a/griptape/config/__init__.py b/griptape/config/__init__.py index 7783b3886..541eb0db0 100644 --- a/griptape/config/__init__.py +++ b/griptape/config/__init__.py @@ -8,6 +8,7 @@ from .amazon_bedrock_structure_config import AmazonBedrockStructureConfig from .anthropic_structure_config import AnthropicStructureConfig from .google_structure_config import GoogleStructureConfig +from .cohere_structure_config import CohereStructureConfig __all__ = [ @@ -19,4 +20,5 @@ "AmazonBedrockStructureConfig", "AnthropicStructureConfig", "GoogleStructureConfig", + "CohereStructureConfig", ] diff --git a/griptape/config/cohere_structure_config.py b/griptape/config/cohere_structure_config.py new file mode 100644 index 000000000..82f11b8f4 --- /dev/null +++ b/griptape/config/cohere_structure_config.py @@ -0,0 +1,37 @@ +from attrs import Factory, define, field + +from griptape.config import StructureConfig +from griptape.drivers import ( + BaseEmbeddingDriver, + BasePromptDriver, + CoherePromptDriver, + CohereEmbeddingDriver, + BaseVectorStoreDriver, + LocalVectorStoreDriver, +) + + +@define +class CohereStructureConfig(StructureConfig): + api_key: str = field(metadata={"serializable": False}, kw_only=True) + + prompt_driver: BasePromptDriver = field( + default=Factory(lambda self: CoherePromptDriver(model="command-r", api_key=self.api_key), takes_self=True), + metadata={"serializable": True}, + kw_only=True, + ) + embedding_driver: BaseEmbeddingDriver = field( + default=Factory( + lambda self: CohereEmbeddingDriver( + model="embed-english-v3.0", api_key=self.api_key, input_type="search_document" + ), + takes_self=True, + ), + metadata={"serializable": True}, + kw_only=True, + ) + vector_store_driver: BaseVectorStoreDriver = field( + default=Factory(lambda self: LocalVectorStoreDriver(embedding_driver=self.embedding_driver), takes_self=True), + kw_only=True, + metadata={"serializable": True}, + ) diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index f44602f8b..3050989fe 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -29,6 +29,7 @@ from .embedding.huggingface_hub_embedding_driver import HuggingFaceHubEmbeddingDriver from .embedding.google_embedding_driver import GoogleEmbeddingDriver from .embedding.dummy_embedding_driver import DummyEmbeddingDriver +from .embedding.cohere_embedding_driver import CohereEmbeddingDriver from .embedding_model.base_embedding_model_driver import BaseEmbeddingModelDriver from .embedding_model.sagemaker_huggingface_embedding_model_driver import SageMakerHuggingFaceEmbeddingModelDriver @@ -143,6 +144,7 @@ "GoogleEmbeddingDriver", "DummyEmbeddingDriver", "BaseEmbeddingModelDriver", + "CohereEmbeddingDriver", "SageMakerHuggingFaceEmbeddingModelDriver", "SageMakerTensorFlowHubEmbeddingModelDriver", "BaseVectorStoreDriver", diff --git a/griptape/drivers/embedding/cohere_embedding_driver.py b/griptape/drivers/embedding/cohere_embedding_driver.py new file mode 100644 index 000000000..5e8bdf4dd --- /dev/null +++ b/griptape/drivers/embedding/cohere_embedding_driver.py @@ -0,0 +1,43 @@ +from __future__ import annotations +from typing import TYPE_CHECKING +from attrs import define, field, Factory +from griptape.drivers import BaseEmbeddingDriver +from griptape.tokenizers import CohereTokenizer +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + from cohere import Client + + +@define +class CohereEmbeddingDriver(BaseEmbeddingDriver): + """ + Attributes: + api_key: Cohere API key. + model: Cohere model name. + client: Custom `cohere.Client`. + tokenizer: Custom `CohereTokenizer`. + input_type: Cohere embedding input type. + """ + + DEFAULT_MODEL = "models/embedding-001" + + api_key: str = field(kw_only=True, metadata={"serializable": False}) + client: Client = field( + default=Factory(lambda self: import_optional_dependency("cohere").Client(self.api_key), takes_self=True), + kw_only=True, + ) + tokenizer: CohereTokenizer = field( + default=Factory(lambda self: CohereTokenizer(model=self.model, client=self.client), takes_self=True), + kw_only=True, + ) + + input_type: str = field(kw_only=True, metadata={"serializable": True}) + + def try_embed_chunk(self, chunk: str) -> list[float]: + result = self.client.embed(texts=[chunk], model=self.model, input_type=self.input_type) + + if isinstance(result.embeddings, list): + return result.embeddings[0] + else: + raise ValueError("Non-float embeddings are not supported.") diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index 2f85c49bf..7a2f39cd6 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any from collections.abc import Iterator from attrs import define, field, Factory from griptape.artifacts import TextArtifact @@ -21,7 +21,7 @@ class CoherePromptDriver(BasePromptDriver): tokenizer: Custom `CohereTokenizer`. """ - api_key: str = field(kw_only=True, metadata={"serializable": True}) + api_key: str = field(kw_only=True, metadata={"serializable": False}) model: str = field(kw_only=True, metadata={"serializable": True}) client: Client = field( default=Factory(lambda self: import_optional_dependency("cohere").Client(self.api_key), takes_self=True), @@ -33,33 +33,37 @@ class CoherePromptDriver(BasePromptDriver): ) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - result = self.client.generate(**self._base_params(prompt_stack)) + result = self.client.chat(**self._base_params(prompt_stack)) - if result.generations: - if len(result.generations) == 1: - generation = result.generations[0] - - return TextArtifact(value=generation.text.strip()) - else: - raise Exception("completion with more than one choice is not supported yet") - else: - raise Exception("model response is empty") + return TextArtifact(value=result.text) def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - result = self.client.generate( - **self._base_params(prompt_stack), - stream=True, # pyright: ignore[reportCallIssue] - ) + result = self.client.chat_stream(**self._base_params(prompt_stack)) - for chunk in result: - yield TextArtifact(value=chunk.text) + for event in result: + if event.event_type == "text-generation": + yield TextArtifact(value=event.text) def _base_params(self, prompt_stack: PromptStack) -> dict: - prompt = self.prompt_stack_to_string(prompt_stack) + user_message = prompt_stack.inputs[-1].content + history_messages = [self.__to_cohere_message(input) for input in prompt_stack.inputs[:-1]] + return { - "prompt": self.prompt_stack_to_string(prompt_stack), - "model": self.model, + "message": user_message, + "chat_history": history_messages, "temperature": self.temperature, - "end_sequences": self.tokenizer.stop_sequences, - "max_tokens": self.max_output_tokens(prompt), + "stop_sequences": self.tokenizer.stop_sequences, } + + def __to_cohere_message(self, input: PromptStack.Input) -> dict[str, Any]: + return {"role": self.__to_cohere_role(input.role), "text": input.content} + + def __to_cohere_role(self, role: str) -> str: + if role == PromptStack.SYSTEM_ROLE: + return "SYSTEM" + if role == PromptStack.USER_ROLE: + return "USER" + elif role == PromptStack.ASSISTANT_ROLE: + return "CHATBOT" + else: + return "USER" diff --git a/griptape/schemas/base_schema.py b/griptape/schemas/base_schema.py index 79ae5e51f..2dd454b53 100644 --- a/griptape/schemas/base_schema.py +++ b/griptape/schemas/base_schema.py @@ -110,6 +110,7 @@ def _resolve_types(cls, attrs_cls: type) -> None: from typing import Any boto3 = import_optional_dependency("boto3") if is_dependency_installed("boto3") else Any + Client = import_optional_dependency("cohere").Client if is_dependency_installed("cohere") else Any attrs.resolve_types( attrs_cls, @@ -122,6 +123,7 @@ def _resolve_types(cls, attrs_cls: type) -> None: "BaseTokenizer": BaseTokenizer, "BasePromptModelDriver": BasePromptModelDriver, "boto3": boto3, + "Client": Client, }, ) diff --git a/griptape/tokenizers/cohere_tokenizer.py b/griptape/tokenizers/cohere_tokenizer.py index 0a3c6a236..e6845d9ca 100644 --- a/griptape/tokenizers/cohere_tokenizer.py +++ b/griptape/tokenizers/cohere_tokenizer.py @@ -9,8 +9,8 @@ @define() class CohereTokenizer(BaseTokenizer): - MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = {"command": 4096} - MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {"command": 4096} + MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = {"command-r": 128000, "command": 4096, "embed": 512} + MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {"command": 4096, "embed": 512} client: Client = field(kw_only=True) diff --git a/poetry.lock b/poetry.lock index c89d577b4..65e767cc5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -955,13 +955,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cohere" -version = "5.5.0" +version = "5.5.4" description = "" optional = true python-versions = "<4.0,>=3.8" files = [ - {file = "cohere-5.5.0-py3-none-any.whl", hash = "sha256:7792e8898c95f2cb955b2d9f23b8602f73f3b698d59f1a1b4896c53809671da0"}, - {file = "cohere-5.5.0.tar.gz", hash = "sha256:00b492ebf8921e83cb2371f2ee36ddf301422daae3024343a87d4316f02b711b"}, + {file = "cohere-5.5.4-py3-none-any.whl", hash = "sha256:8b692dcb5e86b554e5884168a7d2454951ce102fbd983e9053ec933e06bf02fa"}, + {file = "cohere-5.5.4.tar.gz", hash = "sha256:14acb2ccf272e958f79f9241ae972fd82e96b9b8ee9e6922a5687370761203ec"}, ] [package.dependencies] @@ -971,7 +971,7 @@ httpx = ">=0.21.2" httpx-sse = ">=0.4.0,<0.5.0" pydantic = ">=1.9.2" requests = ">=2.0.0,<3.0.0" -tokenizers = ">=0.19,<0.20" +tokenizers = ">=0.15,<0.16" types-requests = ">=2.0.0,<3.0.0" typing_extensions = ">=4.0.0" @@ -5263,120 +5263,130 @@ files = [ [[package]] name = "tokenizers" -version = "0.19.1" +version = "0.15.2" description = "" optional = true python-versions = ">=3.7" files = [ - {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"}, - {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3"}, - {file = "tokenizers-0.19.1-cp310-none-win32.whl", hash = "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837"}, - {file = "tokenizers-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b"}, - {file = "tokenizers-0.19.1-cp311-none-win32.whl", hash = "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256"}, - {file = "tokenizers-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c"}, - {file = "tokenizers-0.19.1-cp312-none-win32.whl", hash = "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57"}, - {file = "tokenizers-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f"}, - {file = "tokenizers-0.19.1-cp37-none-win32.whl", hash = "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3"}, - {file = "tokenizers-0.19.1-cp37-none-win_amd64.whl", hash = "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26"}, - {file = "tokenizers-0.19.1-cp38-none-win32.whl", hash = "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975"}, - {file = "tokenizers-0.19.1-cp38-none-win_amd64.whl", hash = "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478"}, - {file = "tokenizers-0.19.1-cp39-none-win32.whl", hash = "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb"}, - {file = "tokenizers-0.19.1-cp39-none-win_amd64.whl", hash = "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f"}, - {file = "tokenizers-0.19.1.tar.gz", hash = "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, + {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9b9b070fdad06e347563b88c278995735292ded1132f8657084989a4c84a6d5"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea621a7eef4b70e1f7a4e84dd989ae3f0eeb50fc8690254eacc08acb623e82f1"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf7fd9a5141634fa3aa8d6b7be362e6ae1b4cda60da81388fa533e0b552c98fd"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44f2a832cd0825295f7179eaf173381dc45230f9227ec4b44378322d900447c9"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b9ec69247a23747669ec4b0ca10f8e3dfb3545d550258129bd62291aabe8605"}, + {file = "tokenizers-0.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b6a4c78da863ff26dbd5ad9a8ecc33d8a8d97b535172601cf00aee9d7ce9ce"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5ab2a4d21dcf76af60e05af8063138849eb1d6553a0d059f6534357bce8ba364"}, + {file = "tokenizers-0.15.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a47acfac7e511f6bbfcf2d3fb8c26979c780a91e06fb5b9a43831b2c0153d024"}, + {file = "tokenizers-0.15.2-cp310-none-win32.whl", hash = "sha256:064ff87bb6acdbd693666de9a4b692add41308a2c0ec0770d6385737117215f2"}, + {file = "tokenizers-0.15.2-cp310-none-win_amd64.whl", hash = "sha256:3b919afe4df7eb6ac7cafd2bd14fb507d3f408db7a68c43117f579c984a73843"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:89cd1cb93e4b12ff39bb2d626ad77e35209de9309a71e4d3d4672667b4b256e7"}, + {file = "tokenizers-0.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfed5c64e5be23d7ee0f0e98081a25c2a46b0b77ce99a4f0605b1ec43dd481fa"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a907d76dcfda37023ba203ab4ceeb21bc5683436ebefbd895a0841fd52f6f6f2"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20ea60479de6fc7b8ae756b4b097572372d7e4032e2521c1bbf3d90c90a99ff0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:48e2b9335be2bc0171df9281385c2ed06a15f5cf121c44094338306ab7b33f2c"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:112a1dd436d2cc06e6ffdc0b06d55ac019a35a63afd26475205cb4b1bf0bfbff"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4620cca5c2817177ee8706f860364cc3a8845bc1e291aaf661fb899e5d1c45b0"}, + {file = "tokenizers-0.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccd73a82751c523b3fc31ff8194702e4af4db21dc20e55b30ecc2079c5d43cb7"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:107089f135b4ae7817affe6264f8c7a5c5b4fd9a90f9439ed495f54fcea56fb4"}, + {file = "tokenizers-0.15.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0ff110ecc57b7aa4a594396525a3451ad70988e517237fe91c540997c4e50e29"}, + {file = "tokenizers-0.15.2-cp311-none-win32.whl", hash = "sha256:6d76f00f5c32da36c61f41c58346a4fa7f0a61be02f4301fd30ad59834977cc3"}, + {file = "tokenizers-0.15.2-cp311-none-win_amd64.whl", hash = "sha256:cc90102ed17271cf0a1262babe5939e0134b3890345d11a19c3145184b706055"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f86593c18d2e6248e72fb91c77d413a815153b8ea4e31f7cd443bdf28e467670"}, + {file = "tokenizers-0.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0774bccc6608eca23eb9d620196687c8b2360624619623cf4ba9dc9bd53e8b51"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d0222c5b7c9b26c0b4822a82f6a7011de0a9d3060e1da176f66274b70f846b98"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3835738be1de66624fff2f4f6f6684775da4e9c00bde053be7564cbf3545cc66"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0143e7d9dcd811855c1ce1ab9bf5d96d29bf5e528fd6c7824d0465741e8c10fd"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db35825f6d54215f6b6009a7ff3eedee0848c99a6271c870d2826fbbedf31a38"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f5e64b0389a2be47091d8cc53c87859783b837ea1a06edd9d8e04004df55a5c"}, + {file = "tokenizers-0.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e0480c452217edd35eca56fafe2029fb4d368b7c0475f8dfa3c5c9c400a7456"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a33ab881c8fe70474980577e033d0bc9a27b7ab8272896e500708b212995d834"}, + {file = "tokenizers-0.15.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a308a607ca9de2c64c1b9ba79ec9a403969715a1b8ba5f998a676826f1a7039d"}, + {file = "tokenizers-0.15.2-cp312-none-win32.whl", hash = "sha256:b8fcfa81bcb9447df582c5bc96a031e6df4da2a774b8080d4f02c0c16b42be0b"}, + {file = "tokenizers-0.15.2-cp312-none-win_amd64.whl", hash = "sha256:38d7ab43c6825abfc0b661d95f39c7f8af2449364f01d331f3b51c94dcff7221"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:38bfb0204ff3246ca4d5e726e8cc8403bfc931090151e6eede54d0e0cf162ef0"}, + {file = "tokenizers-0.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c861d35e8286a53e06e9e28d030b5a05bcbf5ac9d7229e561e53c352a85b1fc"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:936bf3842db5b2048eaa53dade907b1160f318e7c90c74bfab86f1e47720bdd6"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:620beacc3373277700d0e27718aa8b25f7b383eb8001fba94ee00aeea1459d89"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2735ecbbf37e52db4ea970e539fd2d450d213517b77745114f92867f3fc246eb"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:473c83c5e2359bb81b0b6fde870b41b2764fcdd36d997485e07e72cc3a62264a"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968fa1fb3c27398b28a4eca1cbd1e19355c4d3a6007f7398d48826bbe3a0f728"}, + {file = "tokenizers-0.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:865c60ae6eaebdde7da66191ee9b7db52e542ed8ee9d2c653b6d190a9351b980"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7c0d8b52664ab2d4a8d6686eb5effc68b78608a9008f086a122a7b2996befbab"}, + {file = "tokenizers-0.15.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f33dfbdec3784093a9aebb3680d1f91336c56d86cc70ddf88708251da1fe9064"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d44ba80988ff9424e33e0a49445072ac7029d8c0e1601ad25a0ca5f41ed0c1d6"}, + {file = "tokenizers-0.15.2-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:dce74266919b892f82b1b86025a613956ea0ea62a4843d4c4237be2c5498ed3a"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0ef06b9707baeb98b316577acb04f4852239d856b93e9ec3a299622f6084e4be"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73e2e74bbb07910da0d37c326869f34113137b23eadad3fc00856e6b3d9930c"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eeb12daf02a59e29f578a865f55d87cd103ce62bd8a3a5874f8fdeaa82e336b"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ba9f6895af58487ca4f54e8a664a322f16c26bbb442effd01087eba391a719e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccec77aa7150e38eec6878a493bf8c263ff1fa8a62404e16c6203c64c1f16a26"}, + {file = "tokenizers-0.15.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f40604f5042ff210ba82743dda2b6aa3e55aa12df4e9f2378ee01a17e2855e"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5645938a42d78c4885086767c70923abad047163d809c16da75d6b290cb30bbe"}, + {file = "tokenizers-0.15.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05a77cbfebe28a61ab5c3891f9939cc24798b63fa236d84e5f29f3a85a200c00"}, + {file = "tokenizers-0.15.2-cp37-none-win32.whl", hash = "sha256:361abdc068e8afe9c5b818769a48624687fb6aaed49636ee39bec4e95e1a215b"}, + {file = "tokenizers-0.15.2-cp37-none-win_amd64.whl", hash = "sha256:7ef789f83eb0f9baeb4d09a86cd639c0a5518528f9992f38b28e819df397eb06"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4fe1f74a902bee74a3b25aff180fbfbf4f8b444ab37c4d496af7afd13a784ed2"}, + {file = "tokenizers-0.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c4b89038a684f40a6b15d6b09f49650ac64d951ad0f2a3ea9169687bbf2a8ba"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d05a1b06f986d41aed5f2de464c003004b2df8aaf66f2b7628254bcbfb72a438"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:508711a108684111ec8af89d3a9e9e08755247eda27d0ba5e3c50e9da1600f6d"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:daa348f02d15160cb35439098ac96e3a53bacf35885072611cd9e5be7d333daa"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:494fdbe5932d3416de2a85fc2470b797e6f3226c12845cadf054dd906afd0442"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2d60f5246f4da9373f75ff18d64c69cbf60c3bca597290cea01059c336d2470"}, + {file = "tokenizers-0.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93268e788825f52de4c7bdcb6ebc1fcd4a5442c02e730faa9b6b08f23ead0e24"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6fc7083ab404019fc9acafe78662c192673c1e696bd598d16dc005bd663a5cf9"}, + {file = "tokenizers-0.15.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e39b41e5531d6b2122a77532dbea60e171ef87a3820b5a3888daa847df4153"}, + {file = "tokenizers-0.15.2-cp38-none-win32.whl", hash = "sha256:06cd0487b1cbfabefb2cc52fbd6b1f8d4c37799bd6c6e1641281adaa6b2504a7"}, + {file = "tokenizers-0.15.2-cp38-none-win_amd64.whl", hash = "sha256:5179c271aa5de9c71712e31cb5a79e436ecd0d7532a408fa42a8dbfa4bc23fd9"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:82f8652a74cc107052328b87ea8b34291c0f55b96d8fb261b3880216a9f9e48e"}, + {file = "tokenizers-0.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02458bee6f5f3139f1ebbb6d042b283af712c0981f5bc50edf771d6b762d5e4f"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9a09cd26cca2e1c349f91aa665309ddb48d71636370749414fbf67bc83c5343"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:158be8ea8554e5ed69acc1ce3fbb23a06060bd4bbb09029431ad6b9a466a7121"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ddba9a2b0c8c81633eca0bb2e1aa5b3a15362b1277f1ae64176d0f6eba78ab1"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ef5dd1d39797044642dbe53eb2bc56435308432e9c7907728da74c69ee2adca"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:454c203164e07a860dbeb3b1f4a733be52b0edbb4dd2e5bd75023ffa8b49403a"}, + {file = "tokenizers-0.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cf6b7f1d4dc59af960e6ffdc4faffe6460bbfa8dce27a58bf75755ffdb2526d"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2ef09bbc16519f6c25d0c7fc0c6a33a6f62923e263c9d7cca4e58b8c61572afb"}, + {file = "tokenizers-0.15.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9a2ebdd2ad4ec7a68e7615086e633857c85e2f18025bd05d2a4399e6c5f7169"}, + {file = "tokenizers-0.15.2-cp39-none-win32.whl", hash = "sha256:918fbb0eab96fe08e72a8c2b5461e9cce95585d82a58688e7f01c2bd546c79d0"}, + {file = "tokenizers-0.15.2-cp39-none-win_amd64.whl", hash = "sha256:524e60da0135e106b254bd71f0659be9f89d83f006ea9093ce4d1fab498c6d0d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6a9b648a58281c4672212fab04e60648fde574877d0139cd4b4f93fe28ca8944"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7c7d18b733be6bbca8a55084027f7be428c947ddf871c500ee603e375013ffba"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:13ca3611de8d9ddfbc4dc39ef54ab1d2d4aaa114ac8727dfdc6a6ec4be017378"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:237d1bf3361cf2e6463e6c140628e6406766e8b27274f5fcc62c747ae3c6f094"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67a0fe1e49e60c664915e9fb6b0cb19bac082ab1f309188230e4b2920230edb3"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4e022fe65e99230b8fd89ebdfea138c24421f91c1a4f4781a8f5016fd5cdfb4d"}, + {file = "tokenizers-0.15.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d857be2df69763362ac699f8b251a8cd3fac9d21893de129bc788f8baaef2693"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:708bb3e4283177236309e698da5fcd0879ce8fd37457d7c266d16b550bcbbd18"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c35e09e9899b72a76e762f9854e8750213f67567787d45f37ce06daf57ca78"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1257f4394be0d3b00de8c9e840ca5601d0a4a8438361ce9c2b05c7d25f6057b"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02272fe48280e0293a04245ca5d919b2c94a48b408b55e858feae9618138aeda"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dc3ad9ebc76eabe8b1d7c04d38be884b8f9d60c0cdc09b0aa4e3bcf746de0388"}, + {file = "tokenizers-0.15.2-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:32e16bdeffa7c4f46bf2152172ca511808b952701d13e7c18833c0b73cb5c23f"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fb16ba563d59003028b678d2361a27f7e4ae0ab29c7a80690efa20d829c81fdb"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2277c36d2d6cdb7876c274547921a42425b6810d38354327dd65a8009acf870c"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cf75d32e8d250781940d07f7eece253f2fe9ecdb1dc7ba6e3833fa17b82fcbc"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1b3b31884dc8e9b21508bb76da80ebf7308fdb947a17affce815665d5c4d028"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10122d8d8e30afb43bb1fe21a3619f62c3e2574bff2699cf8af8b0b6c5dc4a3"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d88b96ff0fe8e91f6ef01ba50b0d71db5017fa4e3b1d99681cec89a85faf7bf7"}, + {file = "tokenizers-0.15.2-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:37aaec5a52e959892870a7c47cef80c53797c0db9149d458460f4f31e2fb250e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e2ea752f2b0fe96eb6e2f3adbbf4d72aaa1272079b0dfa1145507bd6a5d537e6"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b19a808d8799fda23504a5cd31d2f58e6f52f140380082b352f877017d6342b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:64c86e5e068ac8b19204419ed8ca90f9d25db20578f5881e337d203b314f4104"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de19c4dc503c612847edf833c82e9f73cd79926a384af9d801dcf93f110cea4e"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea09acd2fe3324174063d61ad620dec3bcf042b495515f27f638270a7d466e8b"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cf27fd43472e07b57cf420eee1e814549203d56de00b5af8659cb99885472f1f"}, + {file = "tokenizers-0.15.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:7ca22bd897537a0080521445d91a58886c8c04084a6a19e6c78c586e0cfa92a5"}, + {file = "tokenizers-0.15.2.tar.gz", hash = "sha256:e6e9c6e019dd5484be5beafc775ae6c925f4c69a3487040ed09b45e13df2cb91"}, ] [package.dependencies] -huggingface-hub = ">=0.16.4,<1.0" +huggingface_hub = ">=0.16.4,<1.0" [package.extras] dev = ["tokenizers[testing]"] -docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] -testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] +docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] +testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] [[package]] name = "tomli" @@ -5515,39 +5525,41 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.41.2" +version = "4.39.3" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = true python-versions = ">=3.8.0" files = [ - {file = "transformers-4.41.2-py3-none-any.whl", hash = "sha256:05555d20e43f808de1ef211ab64803cdb513170cef70d29a888b589caebefc67"}, - {file = "transformers-4.41.2.tar.gz", hash = "sha256:80a4db216533d573e9cc7388646c31ed9480918feb7c55eb211249cb23567f87"}, + {file = "transformers-4.39.3-py3-none-any.whl", hash = "sha256:7838034a12cca3168247f9d2d1dba6724c9de3ae0f73a108258c6b8fc5912601"}, + {file = "transformers-4.39.3.tar.gz", hash = "sha256:2586e5ff4150f122716fc40f5530e92871befc051848fbe82600969c535b762d"}, ] [package.dependencies] filelock = "*" -huggingface-hub = ">=0.23.0,<1.0" +huggingface-hub = ">=0.19.3,<1.0" numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" regex = "!=2019.12.17" requests = "*" safetensors = ">=0.4.1" -tokenizers = ">=0.19,<0.20" +tokenizers = ">=0.14,<0.19" tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.21.0)"] agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.14,<0.19)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +docs = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision"] +docs-specific = ["hf-doc-builder"] +flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] integrations = ["optuna", "ray[tune] (>=2.7.0)", "sigopt"] @@ -5557,7 +5569,7 @@ natten = ["natten (>=0.14.6,<0.15.0)"] onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.1.5)", "urllib3 (<2.0.0)"] +quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "ruff (==0.1.5)", "urllib3 (<2.0.0)"] ray = ["ray[tune] (>=2.7.0)"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] sagemaker = ["sagemaker (>=2.31.0)"] @@ -5566,16 +5578,16 @@ serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] -tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "tensorboard", "timeout-decorator"] +tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] +tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] timm = ["timm"] -tokenizers = ["tokenizers (>=0.19,<0.20)"] +tokenizers = ["tokenizers (>=0.14,<0.19)"] torch = ["accelerate (>=0.21.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.23.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.19.3,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.14,<0.19)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] @@ -6047,6 +6059,7 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] +drivers-embedding-cohere = ["cohere"] drivers-embedding-google = ["google-generativeai"] drivers-embedding-huggingface = ["huggingface-hub", "transformers"] drivers-embedding-voyageai = ["voyageai"] @@ -6083,4 +6096,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "658965f94fd55e2ff1ee9e3579854d247344ce9da8b2f8f8a08826a515fb2aff" +content-hash = "7d073f2b3d8b7e16b3315c7c59925884fadda9c0b0c179b191a748de669f2e0c" diff --git a/pyproject.toml b/pyproject.toml index c82cb8e26..b750051e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,9 +31,9 @@ dateparser = "^1.1.8" requests = "^2" # drivers -cohere = { version = ">=4", optional = true } +cohere = { version = "^5.5.4", optional = true } anthropic = { version = "^0.20.0", optional = true } -transformers = { version = "^4.41.2", optional = true } +transformers = { version = "^4.39.3", optional = true } huggingface-hub = { version = ">=0.13", optional = true } boto3 = { version = "^1.28.2", optional = true } sqlalchemy-redshift = { version = "*", optional = true } @@ -91,6 +91,7 @@ drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-huggingface = ["huggingface-hub", "transformers"] drivers-embedding-voyageai = ["voyageai"] drivers-embedding-google = ["google-generativeai"] +drivers-embedding-cohere = ["cohere"] drivers-web-scraper-trafilatura = ["trafilatura"] drivers-web-scraper-markdownify = ["playwright", "beautifulsoup4", "markdownify"] diff --git a/tests/unit/config/test_cohere_structure_config.py b/tests/unit/config/test_cohere_structure_config.py new file mode 100644 index 000000000..1dc585421 --- /dev/null +++ b/tests/unit/config/test_cohere_structure_config.py @@ -0,0 +1,38 @@ +from pytest import fixture +from griptape.config import CohereStructureConfig + + +class TestCohereStructureConfig: + @fixture + def config(self): + return CohereStructureConfig(api_key="api_key") + + def test_to_dict(self, config): + assert config.to_dict() == { + "type": "CohereStructureConfig", + "image_generation_driver": {"type": "DummyImageGenerationDriver"}, + "image_query_driver": {"type": "DummyImageQueryDriver"}, + "conversation_memory_driver": None, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, + "audio_transcription_driver": {"type": "DummyAudioTranscriptionDriver"}, + "prompt_driver": { + "type": "CoherePromptDriver", + "temperature": 0.1, + "max_tokens": None, + "stream": False, + "model": "command-r", + }, + "embedding_driver": { + "type": "CohereEmbeddingDriver", + "model": "embed-english-v3.0", + "input_type": "search_document", + }, + "vector_store_driver": { + "type": "LocalVectorStoreDriver", + "embedding_driver": { + "type": "CohereEmbeddingDriver", + "model": "embed-english-v3.0", + "input_type": "search_document", + }, + }, + } diff --git a/tests/unit/drivers/embedding/test_cohere_embedding_driver.py b/tests/unit/drivers/embedding/test_cohere_embedding_driver.py new file mode 100644 index 000000000..af6a5576d --- /dev/null +++ b/tests/unit/drivers/embedding/test_cohere_embedding_driver.py @@ -0,0 +1,21 @@ +from unittest.mock import Mock +import pytest +from griptape.drivers import CohereEmbeddingDriver + + +class TestCohereEmbeddingDriver: + @pytest.fixture(autouse=True) + def mock_client(self, mocker): + mock_client = mocker.patch("cohere.Client").return_value + + mock_client.embed.return_value = Mock(embeddings=[[0, 1, 0]]) + + return mock_client + + def test_init(self): + assert CohereEmbeddingDriver(model="embed-english-v3.0", api_key="bar", input_type="search_document") + + def test_try_embed_chunk(self): + assert CohereEmbeddingDriver( + model="embed-english-v3.0", api_key="bar", input_type="search_document" + ).try_embed_chunk("foobar") == [0, 1, 0] diff --git a/tests/unit/drivers/prompt/test_cohere_prompt_driver.py b/tests/unit/drivers/prompt/test_cohere_prompt_driver.py index 907e27325..b3ceb11a4 100644 --- a/tests/unit/drivers/prompt/test_cohere_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_cohere_prompt_driver.py @@ -8,16 +8,16 @@ class TestCoherePromptDriver: @pytest.fixture def mock_client(self, mocker): mock_client = mocker.patch("cohere.Client").return_value - mock_client.generate.return_value.generations = [Mock()] - mock_client.generate.return_value.generations[0].text = "model-output" + mock_client.chat.return_value = Mock(text="model-output") + return mock_client @pytest.fixture def mock_stream_client(self, mocker): mock_client = mocker.patch("cohere.Client").return_value - mock_chunk = Mock() - mock_chunk.text = "model-output" - mock_client.generate.return_value = iter([mock_chunk]) + mock_chunk = Mock(text="model-output", event_type="text-generation") + mock_client.chat_stream.return_value = iter([mock_chunk]) + return mock_client @pytest.fixture(autouse=True) @@ -55,16 +55,3 @@ def test_try_stream_run(self, mock_stream_client, prompt_stack): # pyright: ign # Then assert text_artifact.value == "model-output" - - @pytest.mark.parametrize("choices", [[], [1, 2]]) - def test_try_run_throws_when_multiple_choices_returned(self, choices, mock_client, prompt_stack): - # Given - driver = CoherePromptDriver(model="command", api_key="api-key") - mock_client.generate.return_value.generations = choices - - # When - with pytest.raises(Exception) as e: - driver.try_run(prompt_stack) - - # Then - e.value.args[0] == "Completion with more than one choice is not supported yet." diff --git a/tests/unit/tokenizers/test_cohere_tokenizer.py b/tests/unit/tokenizers/test_cohere_tokenizer.py index ca724cee6..9ca23f4f0 100644 --- a/tests/unit/tokenizers/test_cohere_tokenizer.py +++ b/tests/unit/tokenizers/test_cohere_tokenizer.py @@ -7,6 +7,7 @@ class TestCohereTokenizer: @pytest.fixture(autouse=True) def mock_client(self, mocker): mock_client = mocker.patch("cohere.Client").return_value.tokenize.return_value.tokens = ["foo", "bar"] + return mock_client @pytest.fixture From e167885dff5d07a087174836433e2697823e1ab5 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 5 Jun 2024 12:22:26 -0700 Subject: [PATCH 081/145] Update BedrockPromptDriver to use Converse API (#834) --- CHANGELOG.md | 10 ++ .../drivers/prompt-drivers.md | 160 +++++------------- .../structures/task-memory.md | 2 - .../config/amazon_bedrock_structure_config.py | 7 +- griptape/drivers/__init__.py | 8 - .../amazon_bedrock_cohere_embedding_driver.py | 6 +- .../amazon_bedrock_titan_embedding_driver.py | 6 +- .../prompt/amazon_bedrock_prompt_driver.py | 70 ++++---- .../bedrock_claude_prompt_model_driver.py | 87 ---------- .../bedrock_jurassic_prompt_model_driver.py | 76 --------- .../bedrock_llama_prompt_model_driver.py | 101 ----------- .../bedrock_titan_prompt_model_driver.py | 83 --------- griptape/tokenizers/__init__.py | 10 -- .../tokenizers/bedrock_claude_tokenizer.py | 12 -- .../tokenizers/bedrock_cohere_tokenizer.py | 14 -- .../tokenizers/bedrock_jurassic_tokenizer.py | 20 --- .../tokenizers/bedrock_llama_tokenizer.py | 14 -- .../tokenizers/bedrock_titan_tokenizer.py | 14 -- griptape/tokenizers/simple_tokenizer.py | 2 + poetry.lock | 16 +- pyproject.toml | 2 +- .../test_amazon_bedrock_structure_config.py | 1 - .../test_amazon_bedrock_prompt_driver.py | 152 +++++++---------- ...test_bedrock_claude_prompt_model_driver.py | 129 -------------- ...st_bedrock_jurassic_prompt_model_driver.py | 71 -------- .../test_bedrock_llama_prompt_model_driver.py | 64 ------- .../test_bedrock_titan_prompt_model_driver.py | 58 ------- .../test_bedrock_claude_tokenizer.py | 47 ----- .../test_bedrock_cohere_tokenizer.py | 25 --- .../test_bedrock_jurassic_tokenizer.py | 39 ----- .../test_bedrock_llama_tokenizer.py | 35 ---- .../test_bedrock_titan_tokenizer.py | 31 ---- tests/utils/structure_tester.py | 105 ++++++------ 33 files changed, 224 insertions(+), 1253 deletions(-) delete mode 100644 griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py delete mode 100644 griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py delete mode 100644 griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py delete mode 100644 griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py delete mode 100644 griptape/tokenizers/bedrock_claude_tokenizer.py delete mode 100644 griptape/tokenizers/bedrock_cohere_tokenizer.py delete mode 100644 griptape/tokenizers/bedrock_jurassic_tokenizer.py delete mode 100644 griptape/tokenizers/bedrock_llama_tokenizer.py delete mode 100644 griptape/tokenizers/bedrock_titan_tokenizer.py delete mode 100644 tests/unit/drivers/prompt_models/test_bedrock_claude_prompt_model_driver.py delete mode 100644 tests/unit/drivers/prompt_models/test_bedrock_jurassic_prompt_model_driver.py delete mode 100644 tests/unit/drivers/prompt_models/test_bedrock_llama_prompt_model_driver.py delete mode 100644 tests/unit/drivers/prompt_models/test_bedrock_titan_prompt_model_driver.py delete mode 100644 tests/unit/tokenizers/test_bedrock_claude_tokenizer.py delete mode 100644 tests/unit/tokenizers/test_bedrock_cohere_tokenizer.py delete mode 100644 tests/unit/tokenizers/test_bedrock_jurassic_tokenizer.py delete mode 100644 tests/unit/tokenizers/test_bedrock_llama_tokenizer.py delete mode 100644 tests/unit/tokenizers/test_bedrock_titan_tokenizer.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 189dd785d..ad589408c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - **BREAKING**: `Workflow` no longer modifies task relationships when adding tasks via `tasks` init param, `add_tasks()` or `add_task()`. Previously, adding a task would automatically add the previously added task as its parent. Existing code that relies on this behavior will need to be updated to explicitly add parent/child relationships using the API offered by `BaseTask`. +- **BREAKING**: Removed `AmazonBedrockPromptDriver.prompt_model_driver` as it is no longer needed with the `AmazonBedrockPromptDriver` Converse API implementation. +- **BREAKING**: Removed `BedrockClaudePromptModelDriver`. +- **BREAKING**: Removed `BedrockJurassicPromptModelDriver`. +- **BREAKING**: Removed `BedrockLlamaPromptModelDriver`. +- **BREAKING**: Removed `BedrockTitanPromptModelDriver`. +- **BREAKING**: Removed `BedrockClaudeTokenizer`, use `SimpleTokenizer` instead. +- **BREAKING**: Removed `BedrockJurassicTokenizer`, use `SimpleTokenizer` instead. +- **BREAKING**: Removed `BedrockLlamaTokenizer`, use `SimpleTokenizer` instead. +- **BREAKING**: Removed `BedrockTitanTokenizer`, use `SimpleTokenizer` instead. +- Updated `AmazonBedrockPromptDriver` to use [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html). - `Structure.before_run()` now automatically resolves asymmetrically defined parent/child relationships using the new `Structure.resolve_relationships()`. - Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. - Updated `HuggingFacePipelinePromptDriver` to use chat features of `transformers.TextGenerationPipeline`. diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index c659c7e82..859dcec03 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -232,6 +232,47 @@ agent = Agent( agent.run('Briefly explain how a computer works to a young child.') ``` +### Amazon Bedrock + +!!! info + This driver requires the `drivers-prompt-amazon-bedrock` [extra](../index.md#extras). + +The [AmazonBedrockPromptDriver](../../reference/griptape/drivers/prompt/amazon_bedrock_prompt_driver.md) uses [Amazon Bedrock](https://aws.amazon.com/bedrock/)'s [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html). + +All models supported by the Converse API are available for use with this driver. + +```python +from griptape.structures import Agent +from griptape.drivers import AmazonBedrockPromptDriver +from griptape.rules import Rule +from griptape.config import StructureConfig + +agent = Agent( + config=StructureConfig( + prompt_driver=AmazonBedrockPromptDriver( + model="anthropic.claude-3-sonnet-20240229-v1:0", + ) + ), + rules=[ + Rule( + value="You are a customer service agent that is classifying emails by type. I want you to give your answer and then explain it." + ) + ], +) +agent.run( + """How would you categorize this email? + + Can I use my Mixmaster 4000 to mix paint, or is it only meant for mixing food? + + + Categories are: + (A) Pre-sale question + (B) Broken or defective item + (C) Billing question + (D) Other (please explain)""" +) +``` + ### Hugging Face Hub !!! info @@ -339,7 +380,7 @@ agent.run("How many helicopters can a human eat in one sitting?") ``` ### Multi Model Prompt Drivers -Certain LLM providers such as Amazon SageMaker and Amazon Bedrock supports many types of models, each with their own slight differences in prompt structure and parameters. To support this variation across models, these Prompt Drivers takes a [Prompt Model Driver](../../reference/griptape/drivers/prompt_model/base_prompt_model_driver.md) +Certain LLM providers such as Amazon SageMaker support many types of models, each with their own slight differences in prompt structure and parameters. To support this variation across models, these Prompt Drivers takes a [Prompt Model Driver](../../reference/griptape/drivers/prompt_model/base_prompt_model_driver.md) through the [prompt_model_driver](../../reference/griptape/drivers/prompt/base_multi_model_prompt_driver.md#griptape.drivers.prompt.base_multi_model_prompt_driver.BaseMultiModelPromptDriver.prompt_model_driver) parameter. [Prompt Model Driver](../../reference/griptape/drivers/prompt_model/base_prompt_model_driver.md)s allows for model-specific customization for Prompt Drivers. @@ -422,120 +463,3 @@ agent = Agent( agent.run("What is a good lasagna recipe?") ``` - -#### Amazon Bedrock - -!!! info - This driver requires the `drivers-prompt-amazon-bedrock` [extra](../index.md#extras). - -The [AmazonBedrockPromptDriver](../../reference/griptape/drivers/prompt/amazon_bedrock_prompt_driver.md) uses [Amazon Bedrock](https://aws.amazon.com/bedrock/) for inference on AWS. - -##### Amazon Titan - -To use this model with Amazon Bedrock, use the [BedrockTitanPromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.md). - -```python -from griptape.structures import Agent -from griptape.drivers import AmazonBedrockPromptDriver, BedrockTitanPromptModelDriver -from griptape.config import StructureConfig - -agent = Agent( - config=StructureConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="amazon.titan-text-express-v1", - prompt_model_driver=BedrockTitanPromptModelDriver( - top_p=1, - ) - ) - ) -) -agent.run( - "Write an informational article for children about how birds fly." - "Compare how birds fly to how airplanes fly." - 'Make sure to use the word "Thrust" at least three times.' -) -``` - -##### Anthropic Claude - -To use this model with Amazon Bedrock, use the [BedrockClaudePromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.md). - -```python -from griptape.structures import Agent -from griptape.drivers import AmazonBedrockPromptDriver, BedrockClaudePromptModelDriver -from griptape.rules import Rule -from griptape.config import StructureConfig - -agent = Agent( - config=StructureConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-3-sonnet-20240229-v1:0", - prompt_model_driver=BedrockClaudePromptModelDriver( - top_p=1, - ) - ) - ), - rules=[ - Rule( - value="You are a customer service agent that is classifying emails by type. I want you to give your answer and then explain it." - ) - ], -) -agent.run( - """How would you categorize this email? - - Can I use my Mixmaster 4000 to mix paint, or is it only meant for mixing food? - - - Categories are: - (A) Pre-sale question - (B) Broken or defective item - (C) Billing question - (D) Other (please explain)""" -) -``` -##### Meta Llama 2 - -To use this model with Amazon Bedrock, use the [BedrockLlamaPromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.md). - -```python -from griptape.structures import Agent -from griptape.drivers import AmazonBedrockPromptDriver, BedrockLlamaPromptModelDriver -from griptape.config import StructureConfig - -agent = Agent( - config=StructureConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="meta.llama2-13b-chat-v1", - prompt_model_driver=BedrockLlamaPromptModelDriver(), - ) - ) -) -agent.run( - "Write an article about impact of high inflation to GDP of a country" -) -``` - -##### Ai21 Jurassic - -To use this model with Amazon Bedrock, use the [BedrockJurassicPromptModelDriver](../../reference/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.md). - -```python -from griptape.structures import Agent -from griptape.drivers import AmazonBedrockPromptDriver, BedrockJurassicPromptModelDriver -from griptape.config import StructureConfig - -agent = Agent( - config=StructureConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="ai21.j2-ultra-v1", - prompt_model_driver=BedrockJurassicPromptModelDriver(top_p=0.95), - temperature=0.7, - ) - ) -) -agent.run( - "Suggest an outline for a blog post based on a title. " - "Title: How I put the pro in prompt engineering." -) -``` diff --git a/docs/griptape-framework/structures/task-memory.md b/docs/griptape-framework/structures/task-memory.md index f76094dad..219fd4412 100644 --- a/docs/griptape-framework/structures/task-memory.md +++ b/docs/griptape-framework/structures/task-memory.md @@ -206,7 +206,6 @@ from griptape.config import ( ) from griptape.drivers import ( AmazonBedrockPromptDriver, - BedrockTitanPromptModelDriver, AmazonBedrockTitanEmbeddingDriver, LocalVectorStoreDriver, OpenAiChatPromptDriver, @@ -227,7 +226,6 @@ agent = Agent( query_engine=VectorQueryEngine( prompt_driver=AmazonBedrockPromptDriver( model="amazon.titan-text-express-v1", - prompt_model_driver=BedrockTitanPromptModelDriver(), ), vector_store_driver=LocalVectorStoreDriver( embedding_driver=AmazonBedrockTitanEmbeddingDriver() diff --git a/griptape/config/amazon_bedrock_structure_config.py b/griptape/config/amazon_bedrock_structure_config.py index cefb97f57..e70d9c819 100644 --- a/griptape/config/amazon_bedrock_structure_config.py +++ b/griptape/config/amazon_bedrock_structure_config.py @@ -11,7 +11,6 @@ BasePromptDriver, BaseVectorStoreDriver, BedrockClaudeImageQueryModelDriver, - BedrockClaudePromptModelDriver, BedrockTitanImageGenerationModelDriver, LocalVectorStoreDriver, ) @@ -21,11 +20,7 @@ class AmazonBedrockStructureConfig(StructureConfig): prompt_driver: BasePromptDriver = field( default=Factory( - lambda: AmazonBedrockPromptDriver( - model="anthropic.claude-3-sonnet-20240229-v1:0", - stream=False, - prompt_model_driver=BedrockClaudePromptModelDriver(), - ) + lambda: AmazonBedrockPromptDriver(model="anthropic.claude-3-sonnet-20240229-v1:0", stream=False) ), metadata={"serializable": True}, ) diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 3050989fe..02a3882fb 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -55,10 +55,6 @@ from .prompt_model.base_prompt_model_driver import BasePromptModelDriver from .prompt_model.sagemaker_llama_prompt_model_driver import SageMakerLlamaPromptModelDriver from .prompt_model.sagemaker_falcon_prompt_model_driver import SageMakerFalconPromptModelDriver -from .prompt_model.bedrock_titan_prompt_model_driver import BedrockTitanPromptModelDriver -from .prompt_model.bedrock_claude_prompt_model_driver import BedrockClaudePromptModelDriver -from .prompt_model.bedrock_jurassic_prompt_model_driver import BedrockJurassicPromptModelDriver -from .prompt_model.bedrock_llama_prompt_model_driver import BedrockLlamaPromptModelDriver from .image_generation_model.base_image_generation_model_driver import BaseImageGenerationModelDriver from .image_generation_model.bedrock_stable_diffusion_image_generation_model_driver import ( @@ -165,10 +161,6 @@ "BasePromptModelDriver", "SageMakerLlamaPromptModelDriver", "SageMakerFalconPromptModelDriver", - "BedrockTitanPromptModelDriver", - "BedrockClaudePromptModelDriver", - "BedrockJurassicPromptModelDriver", - "BedrockLlamaPromptModelDriver", "BaseImageGenerationModelDriver", "BedrockStableDiffusionImageGenerationModelDriver", "BedrockTitanImageGenerationModelDriver", diff --git a/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py b/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py index 15ce67c4c..54ac78b45 100644 --- a/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py +++ b/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py @@ -3,7 +3,7 @@ from typing import Any, TYPE_CHECKING from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver -from griptape.tokenizers import BedrockCohereTokenizer +from griptape.tokenizers.simple_tokenizer import SimpleTokenizer from griptape.utils import import_optional_dependency if TYPE_CHECKING: @@ -28,8 +28,8 @@ class AmazonBedrockCohereEmbeddingDriver(BaseEmbeddingDriver): model: str = field(default=DEFAULT_MODEL, kw_only=True) input_type: str = field(default="search_query", kw_only=True) session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) - tokenizer: BedrockCohereTokenizer = field( - default=Factory(lambda self: BedrockCohereTokenizer(model=self.model), takes_self=True), kw_only=True + tokenizer: SimpleTokenizer = field( + default=Factory(lambda self: SimpleTokenizer(characters_per_token=4), takes_self=True), kw_only=True ) bedrock_client: Any = field( default=Factory(lambda self: self.session.client("bedrock-runtime"), takes_self=True), kw_only=True diff --git a/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py b/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py index a510c618c..c6a692bf3 100644 --- a/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py +++ b/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py @@ -3,7 +3,7 @@ from typing import Any, TYPE_CHECKING from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver -from griptape.tokenizers import BedrockTitanTokenizer +from griptape.tokenizers import SimpleTokenizer from griptape.utils import import_optional_dependency if TYPE_CHECKING: @@ -24,8 +24,8 @@ class AmazonBedrockTitanEmbeddingDriver(BaseEmbeddingDriver): model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True}) session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) - tokenizer: BedrockTitanTokenizer = field( - default=Factory(lambda self: BedrockTitanTokenizer(model=self.model), takes_self=True), kw_only=True + tokenizer: SimpleTokenizer = field( + default=Factory(lambda self: SimpleTokenizer(characters_per_token=4), takes_self=True), kw_only=True ) bedrock_client: Any = field( default=Factory(lambda self: self.session.client("bedrock-runtime"), takes_self=True), kw_only=True diff --git a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py index 0675e7f92..f3d03a684 100644 --- a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py @@ -1,11 +1,11 @@ from __future__ import annotations -import json from typing import TYPE_CHECKING, Any from collections.abc import Iterator from attrs import define, field, Factory +from griptape.drivers import BasePromptDriver from griptape.artifacts import TextArtifact from griptape.utils import import_optional_dependency -from .base_multi_model_prompt_driver import BaseMultiModelPromptDriver +from griptape.tokenizers import SimpleTokenizer, BaseTokenizer if TYPE_CHECKING: from griptape.utils import PromptStack @@ -13,43 +13,55 @@ @define -class AmazonBedrockPromptDriver(BaseMultiModelPromptDriver): +class AmazonBedrockPromptDriver(BasePromptDriver): session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) bedrock_client: Any = field( default=Factory(lambda self: self.session.client("bedrock-runtime"), takes_self=True), kw_only=True ) + additional_model_request_fields: dict = field(default=Factory(dict), kw_only=True) + tokenizer: BaseTokenizer = field(default=Factory(lambda: SimpleTokenizer(characters_per_token=4)), kw_only=True) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - model_input = self.prompt_model_driver.prompt_stack_to_model_input(prompt_stack) - payload = {**self.prompt_model_driver.prompt_stack_to_model_params(prompt_stack)} - if isinstance(model_input, dict): - payload.update(model_input) + response = self.bedrock_client.converse(**self._base_params(prompt_stack)) - response = self.bedrock_client.invoke_model( - modelId=self.model, contentType="application/json", accept="application/json", body=json.dumps(payload) - ) + output_message = response["output"]["message"] + output_content = output_message["content"][0]["text"] - response_body = response["body"].read() + return TextArtifact(output_content) - if response_body: - return self.prompt_model_driver.process_output(response_body) + def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + response = self.bedrock_client.converse_stream(**self._base_params(prompt_stack)) + + stream = response.get("stream") + if stream is not None: + for event in stream: + if "contentBlockDelta" in event: + yield TextArtifact(event["contentBlockDelta"]["delta"]["text"]) else: raise Exception("model response is empty") - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - model_input = self.prompt_model_driver.prompt_stack_to_model_input(prompt_stack) - payload = {**self.prompt_model_driver.prompt_stack_to_model_params(prompt_stack)} - if isinstance(model_input, dict): - payload.update(model_input) - - response = self.bedrock_client.invoke_model_with_response_stream( - modelId=self.model, contentType="application/json", accept="application/json", body=json.dumps(payload) - ) - - response_body = response["body"] - if response_body: - for chunk in response["body"]: - chunk_bytes = chunk["chunk"]["bytes"] - yield self.prompt_model_driver.process_output(chunk_bytes) + def _base_params(self, prompt_stack: PromptStack) -> dict: + system_messages = [ + {"text": input.content} for input in prompt_stack.inputs if input.is_system() and input.content + ] + messages = [ + {"role": self.__to_amazon_bedrock_role(input), "content": [{"text": input.content}]} + for input in prompt_stack.inputs + if not input.is_system() + ] + + return { + "modelId": self.model, + "messages": messages, + "system": system_messages, + "inferenceConfig": {"temperature": self.temperature}, + "additionalModelRequestFields": self.additional_model_request_fields, + } + + def __to_amazon_bedrock_role(self, prompt_input: PromptStack.Input) -> str: + if prompt_input.is_system(): + return "system" + elif prompt_input.is_assistant(): + return "assistant" else: - raise Exception("model response is empty") + return "user" diff --git a/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py deleted file mode 100644 index 2b4c547a9..000000000 --- a/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py +++ /dev/null @@ -1,87 +0,0 @@ -from __future__ import annotations -from typing import Optional -import json -from attrs import define, field -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack -from griptape.drivers import BasePromptModelDriver, AmazonBedrockPromptDriver -from griptape.tokenizers import BedrockClaudeTokenizer - - -@define -class BedrockClaudePromptModelDriver(BasePromptModelDriver): - ANTHROPIC_VERSION = "bedrock-2023-05-31" # static string for AWS: https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages.html#api-inference-examples-claude-multimodal-code-example - - top_p: float = field(default=0.999, kw_only=True, metadata={"serializable": True}) - top_k: int = field(default=250, kw_only=True, metadata={"serializable": True}) - _tokenizer: BedrockClaudeTokenizer = field(default=None, kw_only=True) - prompt_driver: Optional[AmazonBedrockPromptDriver] = field(default=None, kw_only=True) - - @property - def tokenizer(self) -> BedrockClaudeTokenizer: - """Returns the tokenizer for this driver. - - We need to pass the `session` field from the Prompt Driver to the - Tokenizer. However, the Prompt Driver is not initialized until after - the Prompt Model Driver is initialized. To resolve this, we make the `tokenizer` - field a @property that is only initialized when it is first accessed. - This ensures that by the time we need to initialize the Tokenizer, the - Prompt Driver has already been initialized. - - See this thread more more information: https://github.com/griptape-ai/griptape/issues/244 - - Returns: - BedrockClaudeTokenizer: The tokenizer for this driver. - """ - if self._tokenizer: - return self._tokenizer - else: - self._tokenizer = BedrockClaudeTokenizer(model=self.prompt_driver.model) - return self._tokenizer - - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> dict: - messages = [ - {"role": self.__to_anthropic_role(prompt_input), "content": prompt_input.content} - for prompt_input in prompt_stack.inputs - if not prompt_input.is_system() - ] - system = next((i for i in prompt_stack.inputs if i.is_system()), None) - - if system is None: - return {"messages": messages} - else: - return {"messages": messages, "system": system.content} - - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: - input = self.prompt_stack_to_model_input(prompt_stack) - - return { - "stop_sequences": self.tokenizer.stop_sequences, - "temperature": self.prompt_driver.temperature, - "top_p": self.top_p, - "top_k": self.top_k, - "max_tokens": self.prompt_driver.max_output_tokens(self.prompt_driver.prompt_stack_to_string(prompt_stack)), - "anthropic_version": self.ANTHROPIC_VERSION, - **input, - } - - def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: - if isinstance(output, bytes): - body = json.loads(output.decode()) - else: - raise Exception("Output must be bytes.") - - if body["type"] == "content_block_delta": - return TextArtifact(value=body["delta"]["text"]) - elif body["type"] == "message": - return TextArtifact(value=body["content"][0]["text"]) - else: - return TextArtifact(value="") - - def __to_anthropic_role(self, prompt_input: PromptStack.Input) -> str: - if prompt_input.is_system(): - return "system" - elif prompt_input.is_assistant(): - return "assistant" - else: - return "user" diff --git a/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py deleted file mode 100644 index 4da99e88f..000000000 --- a/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py +++ /dev/null @@ -1,76 +0,0 @@ -from __future__ import annotations -from typing import Optional -import json -from attrs import define, field -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack -from griptape.drivers import BasePromptModelDriver -from griptape.tokenizers import BedrockJurassicTokenizer -from griptape.drivers import AmazonBedrockPromptDriver - - -@define -class BedrockJurassicPromptModelDriver(BasePromptModelDriver): - top_p: float = field(default=0.9, kw_only=True, metadata={"serializable": True}) - _tokenizer: BedrockJurassicTokenizer = field(default=None, kw_only=True) - prompt_driver: Optional[AmazonBedrockPromptDriver] = field(default=None, kw_only=True) - supports_streaming: bool = field(default=False, kw_only=True) - - @property - def tokenizer(self) -> BedrockJurassicTokenizer: - """Returns the tokenizer for this driver. - - We need to pass the `session` field from the Prompt Driver to the - Tokenizer. However, the Prompt Driver is not initialized until after - the Prompt Model Driver is initialized. To resolve this, we make the `tokenizer` - field a @property that is only initialized when it is first accessed. - This ensures that by the time we need to initialize the Tokenizer, the - Prompt Driver has already been initialized. - - See this thread more more information: https://github.com/griptape-ai/griptape/issues/244 - - Returns: - BedrockJurassicTokenizer: The tokenizer for this driver. - """ - if self._tokenizer: - return self._tokenizer - else: - self._tokenizer = BedrockJurassicTokenizer(model=self.prompt_driver.model) - return self._tokenizer - - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> dict: - prompt_lines = [] - - for i in prompt_stack.inputs: - if i.is_user(): - prompt_lines.append(f"User: {i.content}") - elif i.is_assistant(): - prompt_lines.append(f"Assistant: {i.content}") - elif i.is_system(): - prompt_lines.append(f"System: {i.content}") - else: - prompt_lines.append(i.content) - prompt_lines.append("Assistant:") - - prompt = "\n".join(prompt_lines) - - return {"prompt": prompt} - - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: - prompt = self.prompt_stack_to_model_input(prompt_stack)["prompt"] - - return { - "maxTokens": self.prompt_driver.max_output_tokens(prompt), - "temperature": self.prompt_driver.temperature, - "stopSequences": self.tokenizer.stop_sequences, - "countPenalty": {"scale": 0}, - "presencePenalty": {"scale": 0}, - "frequencyPenalty": {"scale": 0}, - } - - def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: - if isinstance(output, bytes): - body = json.loads(output.decode()) - else: - raise Exception("Output must be bytes.") - return TextArtifact(body["completions"][0]["data"]["text"]) diff --git a/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py deleted file mode 100644 index 951583c51..000000000 --- a/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py +++ /dev/null @@ -1,101 +0,0 @@ -from __future__ import annotations -import json -import itertools as it -from typing import Optional -from attrs import define, field -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack -from griptape.drivers import BasePromptModelDriver -from griptape.tokenizers import BedrockLlamaTokenizer -from griptape.drivers import AmazonBedrockPromptDriver - - -@define -class BedrockLlamaPromptModelDriver(BasePromptModelDriver): - top_p: float = field(default=0.9, kw_only=True) - _tokenizer: BedrockLlamaTokenizer = field(default=None, kw_only=True) - prompt_driver: Optional[AmazonBedrockPromptDriver] = field(default=None, kw_only=True) - - @property - def tokenizer(self) -> BedrockLlamaTokenizer: - """Returns the tokenizer for this driver. - - We need to pass the `session` field from the Prompt Driver to the - Tokenizer. However, the Prompt Driver is not initialized until after - the Prompt Model Driver is initialized. To resolve this, we make the `tokenizer` - field a @property that is only initialized when it is first accessed. - This ensures that by the time we need to initialize the Tokenizer, the - Prompt Driver has already been initialized. - - See this thread more more information: https://github.com/griptape-ai/griptape/issues/244 - - Returns: - BedrockLlamaTokenizer: The tokenizer for this driver. - """ - if self._tokenizer: - return self._tokenizer - else: - self._tokenizer = BedrockLlamaTokenizer(model=self.prompt_driver.model) - return self._tokenizer - - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str: - """ - Converts a `PromptStack` to a string that can be used as the input to the model. - - Prompt structure adapted from https://huggingface.co/blog/llama2#how-to-prompt-llama-2 - - Args: - prompt_stack: The `PromptStack` to convert. - """ - prompt_lines = [] - - inputs = iter(prompt_stack.inputs) - input_pairs: list[tuple] = list(it.zip_longest(inputs, inputs)) - for input_pair in input_pairs: - first_input: PromptStack.Input = input_pair[0] - second_input: Optional[PromptStack.Input] = input_pair[1] - - if first_input.is_system(): - prompt_lines.append(f"[INST] <>\n{first_input.content}\n<>\n\n") - if second_input: - if second_input.is_user(): - prompt_lines.append(f"{second_input.content} [/INST]") - else: - raise Exception("System input must be followed by user input.") - elif first_input.is_assistant(): - prompt_lines.append(f" {first_input.content} ") - if second_input: - if second_input.is_user(): - prompt_lines.append(f"[INST] {second_input.content} [/INST]") - else: - raise Exception("Assistant input must be followed by user input.") - elif first_input.is_user(): - prompt_lines.append(f"[INST] {first_input.content} [/INST]") - if second_input: - if second_input.is_assistant(): - prompt_lines.append(f" {second_input.content} ") - else: - raise Exception("User input must be followed by assistant input.") - - return "".join(prompt_lines) - - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: - prompt = self.prompt_stack_to_model_input(prompt_stack) - - return { - "prompt": prompt, - "max_gen_len": self.prompt_driver.max_output_tokens(prompt), - "temperature": self.prompt_driver.temperature, - "top_p": self.top_p, - } - - def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: - # When streaming, the response body comes back as bytes. - if isinstance(output, bytes): - output = output.decode() - elif isinstance(output, list) or isinstance(output, dict): - raise Exception("Invalid output format.") - - body = json.loads(output) - - return TextArtifact(body["generation"]) diff --git a/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py deleted file mode 100644 index 5f5bbc1d2..000000000 --- a/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py +++ /dev/null @@ -1,83 +0,0 @@ -from __future__ import annotations -from typing import Optional -import json -from attrs import define, field -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack -from griptape.drivers import BasePromptModelDriver -from griptape.tokenizers import BedrockTitanTokenizer -from griptape.drivers import AmazonBedrockPromptDriver - - -@define -class BedrockTitanPromptModelDriver(BasePromptModelDriver): - top_p: float = field(default=0.9, kw_only=True, metadata={"serializable": True}) - _tokenizer: BedrockTitanTokenizer = field(default=None, kw_only=True) - prompt_driver: Optional[AmazonBedrockPromptDriver] = field(default=None, kw_only=True) - - @property - def tokenizer(self) -> BedrockTitanTokenizer: - """Returns the tokenizer for this driver. - - We need to pass the `session` field from the Prompt Driver to the - Tokenizer. However, the Prompt Driver is not initialized until after - the Prompt Model Driver is initialized. To resolve this, we make the `tokenizer` - field a @property that is only initialized when it is first accessed. - This ensures that by the time we need to initialize the Tokenizer, the - Prompt Driver has already been initialized. - - See this thread for more information: https://github.com/griptape-ai/griptape/issues/244 - - Returns: - BedrockTitanTokenizer: The tokenizer for this driver. - """ - if self._tokenizer: - return self._tokenizer - else: - self._tokenizer = BedrockTitanTokenizer(model=self.prompt_driver.model) - return self._tokenizer - - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> dict: - prompt_lines = [] - - for i in prompt_stack.inputs: - if i.is_user(): - prompt_lines.append(f"User: {i.content}") - elif i.is_assistant(): - prompt_lines.append(f"Bot: {i.content}") - elif i.is_system(): - prompt_lines.append(f"Instructions: {i.content}") - else: - prompt_lines.append(i.content) - prompt_lines.append("Bot:") - - prompt = "\n\n".join(prompt_lines) - - return {"inputText": prompt} - - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: - prompt = self.prompt_stack_to_model_input(prompt_stack)["inputText"] - - return { - "textGenerationConfig": { - "maxTokenCount": self.prompt_driver.max_output_tokens(prompt), - "stopSequences": self.tokenizer.stop_sequences, - "temperature": self.prompt_driver.temperature, - "topP": self.top_p, - } - } - - def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: - # When streaming, the response body comes back as bytes. - if isinstance(output, str) or isinstance(output, bytes): - if isinstance(output, bytes): - output = output.decode() - - body = json.loads(output) - - if self.prompt_driver.stream: - return TextArtifact(body["outputText"]) - else: - return TextArtifact(body["results"][0]["outputText"]) - else: - raise ValueError("output must be an instance of 'str' or 'bytes'") diff --git a/griptape/tokenizers/__init__.py b/griptape/tokenizers/__init__.py index b116f9fb0..e69473acd 100644 --- a/griptape/tokenizers/__init__.py +++ b/griptape/tokenizers/__init__.py @@ -3,11 +3,6 @@ from griptape.tokenizers.cohere_tokenizer import CohereTokenizer from griptape.tokenizers.huggingface_tokenizer import HuggingFaceTokenizer from griptape.tokenizers.anthropic_tokenizer import AnthropicTokenizer -from griptape.tokenizers.bedrock_titan_tokenizer import BedrockTitanTokenizer -from griptape.tokenizers.bedrock_cohere_tokenizer import BedrockCohereTokenizer -from griptape.tokenizers.bedrock_jurassic_tokenizer import BedrockJurassicTokenizer -from griptape.tokenizers.bedrock_claude_tokenizer import BedrockClaudeTokenizer -from griptape.tokenizers.bedrock_llama_tokenizer import BedrockLlamaTokenizer from griptape.tokenizers.google_tokenizer import GoogleTokenizer from griptape.tokenizers.voyageai_tokenizer import VoyageAiTokenizer from griptape.tokenizers.simple_tokenizer import SimpleTokenizer @@ -20,11 +15,6 @@ "CohereTokenizer", "HuggingFaceTokenizer", "AnthropicTokenizer", - "BedrockTitanTokenizer", - "BedrockCohereTokenizer", - "BedrockJurassicTokenizer", - "BedrockClaudeTokenizer", - "BedrockLlamaTokenizer", "GoogleTokenizer", "VoyageAiTokenizer", "SimpleTokenizer", diff --git a/griptape/tokenizers/bedrock_claude_tokenizer.py b/griptape/tokenizers/bedrock_claude_tokenizer.py deleted file mode 100644 index d44116e2c..000000000 --- a/griptape/tokenizers/bedrock_claude_tokenizer.py +++ /dev/null @@ -1,12 +0,0 @@ -from attrs import define -from griptape.tokenizers import AnthropicTokenizer - - -@define() -class BedrockClaudeTokenizer(AnthropicTokenizer): - MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = { - "anthropic.claude-3": 200000, - "anthropic.claude-v2:1": 200000, - "anthropic.claude": 100000, - } - MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {"anthropic.claude": 4096} diff --git a/griptape/tokenizers/bedrock_cohere_tokenizer.py b/griptape/tokenizers/bedrock_cohere_tokenizer.py deleted file mode 100644 index 44ccb4ac6..000000000 --- a/griptape/tokenizers/bedrock_cohere_tokenizer.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import annotations -from attrs import define, field -from .simple_tokenizer import SimpleTokenizer - - -@define() -class BedrockCohereTokenizer(SimpleTokenizer): - # https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-embed.html - DEFAULT_CHARACTERS_PER_TOKEN = 4 - MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = {"cohere": 1024} - MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {"cohere": 4096} - - model: str = field(kw_only=True) - characters_per_token: int = field(default=DEFAULT_CHARACTERS_PER_TOKEN, kw_only=True) diff --git a/griptape/tokenizers/bedrock_jurassic_tokenizer.py b/griptape/tokenizers/bedrock_jurassic_tokenizer.py deleted file mode 100644 index 7511138b3..000000000 --- a/griptape/tokenizers/bedrock_jurassic_tokenizer.py +++ /dev/null @@ -1,20 +0,0 @@ -from __future__ import annotations -from attrs import define, field, Factory -from .simple_tokenizer import SimpleTokenizer - - -@define() -class BedrockJurassicTokenizer(SimpleTokenizer): - DEFAULT_CHARACTERS_PER_TOKEN = 6 # https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-prepare.html#model-customization-prepare-finetuning - MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = {"ai21": 8192} - MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = { - "ai21.j2-mid-v1": 8191, - "ai21.j2-ultra-v1": 8191, - "ai21.j2-large-v1": 8191, - "ai21": 2048, - } - - model: str = field(kw_only=True) - characters_per_token: int = field( - default=Factory(lambda self: self.DEFAULT_CHARACTERS_PER_TOKEN, takes_self=True), kw_only=True - ) diff --git a/griptape/tokenizers/bedrock_llama_tokenizer.py b/griptape/tokenizers/bedrock_llama_tokenizer.py deleted file mode 100644 index e7d1ec829..000000000 --- a/griptape/tokenizers/bedrock_llama_tokenizer.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import annotations -from attrs import define, field -from .simple_tokenizer import SimpleTokenizer - - -@define() -class BedrockLlamaTokenizer(SimpleTokenizer): - DEFAULT_CHARACTERS_PER_TOKEN = 6 # https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-prepare.html#model-customization-prepare-finetuning - MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = {"meta": 2048} - MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {"meta": 2048} - - model: str = field(kw_only=True) - characters_per_token: int = field(default=DEFAULT_CHARACTERS_PER_TOKEN, kw_only=True) - stop_sequences: list[str] = field(factory=list, kw_only=True) diff --git a/griptape/tokenizers/bedrock_titan_tokenizer.py b/griptape/tokenizers/bedrock_titan_tokenizer.py deleted file mode 100644 index 0d8ba0273..000000000 --- a/griptape/tokenizers/bedrock_titan_tokenizer.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import annotations -from attrs import define, field, Factory -from .simple_tokenizer import SimpleTokenizer - - -@define() -class BedrockTitanTokenizer(SimpleTokenizer): - DEFAULT_CHARACTERS_PER_TOKEN = 6 # https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-prepare.html#model-customization-prepare-finetuning - MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = {"amazon": 4096} - MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {"amazon": 8000} - - model: str = field(kw_only=True) - characters_per_token: int = field(default=DEFAULT_CHARACTERS_PER_TOKEN, kw_only=True) - stop_sequences: list[str] = field(default=Factory(lambda: ["User:"]), kw_only=True) diff --git a/griptape/tokenizers/simple_tokenizer.py b/griptape/tokenizers/simple_tokenizer.py index 484afe69f..864b92f96 100644 --- a/griptape/tokenizers/simple_tokenizer.py +++ b/griptape/tokenizers/simple_tokenizer.py @@ -7,6 +7,8 @@ @define() class SimpleTokenizer(BaseTokenizer): model: Optional[str] = field(init=False, kw_only=True, default=None) + max_input_tokens: int = field(kw_only=True, default=0) + max_output_tokens: int = field(kw_only=True, default=0) characters_per_token: int = field(kw_only=True) def count_tokens(self, text: str | list) -> int: diff --git a/poetry.lock b/poetry.lock index 65e767cc5..87b88792a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -278,17 +278,17 @@ lxml = ["lxml"] [[package]] name = "boto3" -version = "1.34.106" +version = "1.34.119" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.34.106-py3-none-any.whl", hash = "sha256:d3be4e1dd5d546a001cd4da805816934cbde9d395316546e9411fec341ade5cf"}, - {file = "boto3-1.34.106.tar.gz", hash = "sha256:6165b8cf1c7e625628ab28b32f9027064c8f5e5fca1c38d7fc228cd22069a19f"}, + {file = "boto3-1.34.119-py3-none-any.whl", hash = "sha256:8f9c43c54b3dfaa36c4a0d7b42c417227a515bc7a2e163e62802780000a5a3e2"}, + {file = "boto3-1.34.119.tar.gz", hash = "sha256:cea2365a25b2b83a97e77f24ac6f922ef62e20636b42f9f6ee9f97188f9c1c03"}, ] [package.dependencies] -botocore = ">=1.34.106,<1.35.0" +botocore = ">=1.34.119,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -706,13 +706,13 @@ xray = ["mypy-boto3-xray (>=1.34.0,<1.35.0)"] [[package]] name = "botocore" -version = "1.34.106" +version = "1.34.119" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.106-py3-none-any.whl", hash = "sha256:4baf0e27c2dfc4f4d0dee7c217c716e0782f9b30e8e1fff983fce237d88f73ae"}, - {file = "botocore-1.34.106.tar.gz", hash = "sha256:921fa5202f88c3e58fdcb4b3acffd56d65b24bca47092ee4b27aa988556c0be6"}, + {file = "botocore-1.34.119-py3-none-any.whl", hash = "sha256:4bdf7926a1290b2650d62899ceba65073dd2693e61c35f5cdeb3a286a0aaa27b"}, + {file = "botocore-1.34.119.tar.gz", hash = "sha256:b253f15b24b87b070e176af48e8ef146516090429d30a7d8b136a4c079b28008"}, ] [package.dependencies] @@ -6096,4 +6096,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7d073f2b3d8b7e16b3315c7c59925884fadda9c0b0c179b191a748de669f2e0c" +content-hash = "d0913fb4119f352710d722c55029eaa74e948d57e3fa5ffb345ca4e690f20ec2" diff --git a/pyproject.toml b/pyproject.toml index b750051e0..53c07257e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,7 @@ cohere = { version = "^5.5.4", optional = true } anthropic = { version = "^0.20.0", optional = true } transformers = { version = "^4.39.3", optional = true } huggingface-hub = { version = ">=0.13", optional = true } -boto3 = { version = "^1.28.2", optional = true } +boto3 = { version = "^1.34.119", optional = true } sqlalchemy-redshift = { version = "*", optional = true } snowflake-sqlalchemy = { version = "^1.4.7", optional = true } pinecone-client = { version = "^3", optional = true } diff --git a/tests/unit/config/test_amazon_bedrock_structure_config.py b/tests/unit/config/test_amazon_bedrock_structure_config.py index 5b8c63a98..33b286f94 100644 --- a/tests/unit/config/test_amazon_bedrock_structure_config.py +++ b/tests/unit/config/test_amazon_bedrock_structure_config.py @@ -38,7 +38,6 @@ def test_to_dict(self, config): "prompt_driver": { "max_tokens": None, "model": "anthropic.claude-3-sonnet-20240229-v1:0", - "prompt_model_driver": {"type": "BedrockClaudePromptModelDriver", "top_k": 250, "top_p": 0.999}, "stream": False, "temperature": 0.1, "type": "AmazonBedrockPromptDriver", diff --git a/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py index 1bd94d3e9..28409cea1 100644 --- a/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py @@ -1,117 +1,83 @@ -from botocore.response import StreamingBody -from griptape.artifacts import TextArtifact -from griptape.drivers import AmazonBedrockPromptDriver -from griptape.drivers import BedrockClaudePromptModelDriver, BedrockTitanPromptModelDriver -from griptape.tokenizers import AnthropicTokenizer, BedrockTitanTokenizer -from io import StringIO -from unittest.mock import Mock -import json import pytest +from griptape.utils import PromptStack +from griptape.drivers import AmazonBedrockPromptDriver + class TestAmazonBedrockPromptDriver: @pytest.fixture - def mock_prompt_model_driver(self): - mock_prompt_model_driver = Mock() - mock_prompt_model_driver.prompt_stack_to_model_params.return_value = {"model-param-key": "model-param-value"} - mock_prompt_model_driver.process_output.return_value = TextArtifact("model-output") - return mock_prompt_model_driver - - @pytest.fixture(autouse=True) - def mock_client(self, mocker): - return mocker.patch("boto3.Session").return_value.client.return_value - - def test_init(self): - assert AmazonBedrockPromptDriver(model="anthropic.claude", prompt_model_driver=BedrockClaudePromptModelDriver()) - - def test_custom_tokenizer(self): - assert isinstance( - AmazonBedrockPromptDriver( - model="anthropic.claude", prompt_model_driver=BedrockClaudePromptModelDriver() - ).tokenizer, - AnthropicTokenizer, - ) + def mock_converse(self, mocker): + mock_converse = mocker.patch("boto3.Session").return_value.client.return_value.converse - assert isinstance( - AmazonBedrockPromptDriver( - model="titan", - tokenizer=BedrockTitanTokenizer(model="amazon"), - prompt_model_driver=BedrockTitanPromptModelDriver(), - ).tokenizer, - BedrockTitanTokenizer, - ) + mock_converse.return_value = {"output": {"message": {"content": [{"text": "model-output"}]}}} + + return mock_converse + + @pytest.fixture + def mock_converse_stream(self, mocker): + mock_converse_stream = mocker.patch("boto3.Session").return_value.client.return_value.converse_stream + + mock_converse_stream.return_value = {"stream": [{"contentBlockDelta": {"delta": {"text": "model-output"}}}]} + + return mock_converse_stream + + @pytest.fixture + def prompt_stack(self): + prompt_stack = PromptStack() + prompt_stack.add_generic_input("generic-input") + prompt_stack.add_system_input("system-input") + prompt_stack.add_user_input("user-input") + prompt_stack.add_assistant_input("assistant-input") + + return prompt_stack - @pytest.mark.parametrize("model_inputs", [{"model-input-key": "model-input-value"}, "not-a-dict"]) - def test_try_run(self, model_inputs, mock_prompt_model_driver, mock_client): + @pytest.fixture + def messages(self): + return [ + {"role": "user", "content": [{"text": "generic-input"}]}, + {"role": "system", "content": [{"text": "system-input"}]}, + {"role": "user", "content": [{"text": "user-input"}]}, + {"role": "assistant", "content": [{"text": "assistant-input"}]}, + ] + + def test_try_run(self, mock_converse, prompt_stack, messages): # Given - driver = AmazonBedrockPromptDriver(model="model", prompt_model_driver=mock_prompt_model_driver) - prompt_stack = "prompt-stack" - response_body = "invoke-model-response-body" - mock_prompt_model_driver.prompt_stack_to_model_input.return_value = model_inputs - mock_client.invoke_model.return_value = {"body": to_streaming_body(response_body)} + driver = AmazonBedrockPromptDriver(model="foo bar") # When text_artifact = driver.try_run(prompt_stack) # Then - mock_prompt_model_driver.prompt_stack_to_model_input.assert_called_once_with(prompt_stack) - mock_prompt_model_driver.prompt_stack_to_model_params.assert_called_once_with(prompt_stack) - mock_client.invoke_model.assert_called_once_with( + mock_converse.assert_called_once_with( modelId=driver.model, - contentType="application/json", - accept="application/json", - body=json.dumps( - { - **mock_prompt_model_driver.prompt_stack_to_model_params.return_value, - **(model_inputs if isinstance(model_inputs, dict) else {}), - } - ), + messages=[ + {"role": "user", "content": [{"text": "generic-input"}]}, + {"role": "user", "content": [{"text": "user-input"}]}, + {"role": "assistant", "content": [{"text": "assistant-input"}]}, + ], + system=[{"text": "system-input"}], + inferenceConfig={"temperature": driver.temperature}, + additionalModelRequestFields={}, ) - mock_prompt_model_driver.process_output.assert_called_once_with(response_body) - assert text_artifact == mock_prompt_model_driver.process_output.return_value + assert text_artifact.value == "model-output" - @pytest.mark.parametrize("model_inputs", [{"model-input-key": "model-input-value"}, "not-a-dict"]) - def test_try_stream_run(self, model_inputs, mock_prompt_model_driver, mock_client): + def test_try_stream_run(self, mock_converse_stream, prompt_stack, messages): # Given - driver = AmazonBedrockPromptDriver(model="model", prompt_model_driver=mock_prompt_model_driver, stream=True) - prompt_stack = "prompt-stack" - model_response = "invoke-model-response-body" - response_body = [{"chunk": {"bytes": model_response}}] - mock_prompt_model_driver.prompt_stack_to_model_input.return_value = model_inputs - mock_client.invoke_model_with_response_stream.return_value = {"body": response_body} + driver = AmazonBedrockPromptDriver(model="foo bar", stream=True) # When text_artifact = next(driver.try_stream(prompt_stack)) # Then - mock_prompt_model_driver.prompt_stack_to_model_input.assert_called_once_with(prompt_stack) - mock_prompt_model_driver.prompt_stack_to_model_params.assert_called_once_with(prompt_stack) - mock_client.invoke_model_with_response_stream.assert_called_once_with( + mock_converse_stream.assert_called_once_with( modelId=driver.model, - contentType="application/json", - accept="application/json", - body=json.dumps( - { - **mock_prompt_model_driver.prompt_stack_to_model_params.return_value, - **(model_inputs if isinstance(model_inputs, dict) else {}), - } - ), + messages=[ + {"role": "user", "content": [{"text": "generic-input"}]}, + {"role": "user", "content": [{"text": "user-input"}]}, + {"role": "assistant", "content": [{"text": "assistant-input"}]}, + ], + system=[{"text": "system-input"}], + inferenceConfig={"temperature": driver.temperature}, + additionalModelRequestFields={}, ) - mock_prompt_model_driver.process_output.assert_called_once_with(model_response) - assert text_artifact.value == mock_prompt_model_driver.process_output.return_value.value - - def test_try_run_throws_on_empty_response(self, mock_prompt_model_driver, mock_client): - # Given - driver = AmazonBedrockPromptDriver(model="model", prompt_model_driver=mock_prompt_model_driver) - mock_client.invoke_model.return_value = {"body": to_streaming_body("")} - - # When - with pytest.raises(Exception) as e: - driver.try_run("prompt-stack") - - # Then - assert e.value.args[0] == "model response is empty" - - -def to_streaming_body(text: str) -> StreamingBody: - return StreamingBody(StringIO(text), len(text)) + assert text_artifact.value == "model-output" diff --git a/tests/unit/drivers/prompt_models/test_bedrock_claude_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_bedrock_claude_prompt_model_driver.py deleted file mode 100644 index 94bc97122..000000000 --- a/tests/unit/drivers/prompt_models/test_bedrock_claude_prompt_model_driver.py +++ /dev/null @@ -1,129 +0,0 @@ -from unittest import mock -import json -import boto3 -import pytest -from griptape.utils import PromptStack -from griptape.drivers import AmazonBedrockPromptDriver, BedrockClaudePromptModelDriver - - -class TestBedrockClaudePromptModelDriver: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - @pytest.fixture - def driver(self, request): - return AmazonBedrockPromptDriver( - model=request.param, - session=boto3.Session(region_name="us-east-1"), - prompt_model_driver=BedrockClaudePromptModelDriver(), - temperature=0.12345, - ).prompt_model_driver - - @pytest.mark.parametrize( - "driver,", - [ - ("anthropic.claude-v2"), - ("anthropic.claude-v2:1"), - ("anthropic.claude-3-sonnet-20240229-v1:0"), - ("anthropic.claude-3-haiku-20240307-v1:0"), - ], - indirect=["driver"], - ) - def test_init(self, driver): - assert driver.prompt_driver is not None - - @pytest.mark.parametrize( - "driver,", - [ - ("anthropic.claude-v2"), - ("anthropic.claude-v2:1"), - ("anthropic.claude-3-sonnet-20240229-v1:0"), - ("anthropic.claude-3-haiku-20240307-v1:0"), - ], - indirect=["driver"], - ) - @pytest.mark.parametrize("system_enabled", [True, False]) - def test_prompt_stack_to_model_input(self, driver, system_enabled): - stack = PromptStack() - if system_enabled: - stack.add_system_input("foo") - stack.add_user_input("bar") - stack.add_assistant_input("baz") - stack.add_generic_input("qux") - - expected_messages = [ - {"role": "user", "content": "bar"}, - {"role": "assistant", "content": "baz"}, - {"role": "user", "content": "qux"}, - ] - actual = driver.prompt_stack_to_model_input(stack) - expected = {"messages": expected_messages, **({"system": "foo"} if system_enabled else {})} - - assert actual == expected - - @pytest.mark.parametrize( - "driver,", - [ - ("anthropic.claude-v2"), - ("anthropic.claude-v2:1"), - ("anthropic.claude-3-sonnet-20240229-v1:0"), - ("anthropic.claude-3-haiku-20240307-v1:0"), - ], - indirect=["driver"], - ) - @pytest.mark.parametrize("system_enabled", [True, False]) - def test_prompt_stack_to_model_params(self, driver, system_enabled): - stack = PromptStack() - if system_enabled: - stack.add_system_input("foo") - stack.add_user_input("bar") - stack.add_assistant_input("baz") - stack.add_generic_input("qux") - - max_tokens = driver.prompt_driver.max_output_tokens(driver.prompt_driver.prompt_stack_to_string(stack)) - - expected = { - "temperature": 0.12345, - "max_tokens": max_tokens, - "anthropic_version": driver.ANTHROPIC_VERSION, - "messages": [ - {"role": "user", "content": "bar"}, - {"role": "assistant", "content": "baz"}, - {"role": "user", "content": "qux"}, - ], - "top_p": 0.999, - "top_k": 250, - "stop_sequences": ["<|Response|>"], - **({"system": "foo"} if system_enabled else {}), - } - - assert driver.prompt_stack_to_model_params(stack) == expected - - @pytest.mark.parametrize( - "driver,", - [ - ("anthropic.claude-v2"), - ("anthropic.claude-v2:1"), - ("anthropic.claude-3-sonnet-20240229-v1:0"), - ("anthropic.claude-3-haiku-20240307-v1:0"), - ], - indirect=["driver"], - ) - def test_process_output(self, driver): - assert ( - driver.process_output(json.dumps({"type": "message", "content": [{"text": "foobar"}]}).encode()).value - == "foobar" - ) - assert ( - driver.process_output( - json.dumps({"type": "content_block_delta", "delta": {"text": "foobar"}}).encode() - ).value - == "foobar" - ) diff --git a/tests/unit/drivers/prompt_models/test_bedrock_jurassic_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_bedrock_jurassic_prompt_model_driver.py deleted file mode 100644 index e0d6f1f02..000000000 --- a/tests/unit/drivers/prompt_models/test_bedrock_jurassic_prompt_model_driver.py +++ /dev/null @@ -1,71 +0,0 @@ -from unittest import mock -import json -import boto3 -import pytest -from griptape.utils import PromptStack -from griptape.drivers import AmazonBedrockPromptDriver, BedrockJurassicPromptModelDriver - - -class TestBedrockJurassicPromptModelDriver: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_tokenization = '{"prompt": {"tokens": [{}, {}, {}]}}' - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_tokenization - mock_client.invoke_model.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - return mock_session_object - - @pytest.fixture - def driver(self): - return AmazonBedrockPromptDriver( - model="ai21.j2-ultra", - session=boto3.Session(region_name="us-east-1"), - prompt_model_driver=BedrockJurassicPromptModelDriver(), - temperature=0.12345, - ).prompt_model_driver - - @pytest.fixture - def stack(self): - stack = PromptStack() - - stack.add_system_input("foo") - stack.add_user_input("bar") - - return stack - - def test_driver_stream(self): - with pytest.raises(ValueError): - AmazonBedrockPromptDriver( - model="ai21.j2-ultra", - session=boto3.Session(region_name="us-east-1"), - prompt_model_driver=BedrockJurassicPromptModelDriver(), - temperature=0.12345, - stream=True, - ).prompt_model_driver - - def test_init(self, driver): - assert driver.prompt_driver is not None - - def test_prompt_stack_to_model_input(self, driver, stack): - model_input = driver.prompt_stack_to_model_input(stack) - - assert isinstance(model_input, dict) - assert model_input["prompt"].startswith("System: foo\nUser: bar\nAssistant:") - - def test_prompt_stack_to_model_params(self, driver, stack): - assert driver.prompt_stack_to_model_params(stack)["maxTokens"] == 2042 - assert driver.prompt_stack_to_model_params(stack)["temperature"] == 0.12345 - - def test_process_output(self, driver): - assert ( - driver.process_output(json.dumps({"completions": [{"data": {"text": "foobar"}}]}).encode()).value - == "foobar" - ) diff --git a/tests/unit/drivers/prompt_models/test_bedrock_llama_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_bedrock_llama_prompt_model_driver.py deleted file mode 100644 index 8cb4b2c94..000000000 --- a/tests/unit/drivers/prompt_models/test_bedrock_llama_prompt_model_driver.py +++ /dev/null @@ -1,64 +0,0 @@ -from unittest import mock -import json -import boto3 -import pytest -from griptape.tokenizers import BedrockLlamaTokenizer -from griptape.utils import PromptStack -from griptape.drivers import AmazonBedrockPromptDriver, BedrockLlamaPromptModelDriver - - -class TestBedrockLlamaPromptModelDriver: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_tokenization = '{"generation_token_count": 13}' - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_tokenization - mock_client.invoke_model.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - return mock_session_object - - @pytest.fixture - def driver(self): - return AmazonBedrockPromptDriver( - model="meta.llama", - session=boto3.Session(region_name="us-east-1"), - prompt_model_driver=BedrockLlamaPromptModelDriver(), - temperature=0.12345, - ).prompt_model_driver - - @pytest.fixture - def stack(self): - stack = PromptStack() - - stack.add_system_input("{{ system_prompt }}") - stack.add_user_input("{{ usr_msg_1 }}") - stack.add_assistant_input("{{ model_msg_1 }}") - stack.add_user_input("{{ usr_msg_2 }}") - - return stack - - def test_init(self, driver): - assert driver.prompt_driver is not None - - def test_prompt_stack_to_model_input(self, driver, stack): - model_input = driver.prompt_stack_to_model_input(stack) - - assert isinstance(model_input, str) - assert ( - model_input - == "[INST] <>\n{{ system_prompt }}\n<>\n\n{{ usr_msg_1 }} [/INST] {{ model_msg_1 }} [INST] {{ usr_msg_2 }} [/INST]" - ) - - def test_prompt_stack_to_model_params(self, driver, stack): - assert driver.prompt_stack_to_model_params(stack)["max_gen_len"] == 2026 - assert driver.prompt_stack_to_model_params(stack)["temperature"] == 0.12345 - - def test_process_output(self, driver): - assert driver.process_output(json.dumps({"generation": "foobar"})).value == "foobar" diff --git a/tests/unit/drivers/prompt_models/test_bedrock_titan_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_bedrock_titan_prompt_model_driver.py deleted file mode 100644 index ae6d436b5..000000000 --- a/tests/unit/drivers/prompt_models/test_bedrock_titan_prompt_model_driver.py +++ /dev/null @@ -1,58 +0,0 @@ -from unittest import mock -import json -import boto3 -import pytest -from griptape.utils import PromptStack -from griptape.drivers import AmazonBedrockPromptDriver, BedrockTitanPromptModelDriver - - -class TestBedrockTitanPromptModelDriver: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_tokenization = '{"inputTextTokenCount": 13}' - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_tokenization - mock_client.invoke_model.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - return mock_session_object - - @pytest.fixture - def driver(self): - return AmazonBedrockPromptDriver( - model="amazon.titan", - session=boto3.Session(region_name="us-east-1"), - prompt_model_driver=BedrockTitanPromptModelDriver(), - temperature=0.12345, - ).prompt_model_driver - - @pytest.fixture - def stack(self): - stack = PromptStack() - - stack.add_system_input("foo") - stack.add_user_input("bar") - - return stack - - def test_init(self, driver): - assert driver.prompt_driver is not None - - def test_prompt_stack_to_model_input(self, driver, stack): - model_input = driver.prompt_stack_to_model_input(stack) - - assert isinstance(model_input, dict) - assert model_input["inputText"].startswith("Instructions: foo\n\nUser: bar\n\nBot:") - - def test_prompt_stack_to_model_params(self, driver, stack): - assert driver.prompt_stack_to_model_params(stack)["textGenerationConfig"]["maxTokenCount"] == 7994 - assert driver.prompt_stack_to_model_params(stack)["textGenerationConfig"]["temperature"] == 0.12345 - - def test_process_output(self, driver): - assert driver.process_output(json.dumps({"results": [{"outputText": "foobar"}]})).value == "foobar" diff --git a/tests/unit/tokenizers/test_bedrock_claude_tokenizer.py b/tests/unit/tokenizers/test_bedrock_claude_tokenizer.py deleted file mode 100644 index 4f6e6723f..000000000 --- a/tests/unit/tokenizers/test_bedrock_claude_tokenizer.py +++ /dev/null @@ -1,47 +0,0 @@ -import pytest -from griptape.tokenizers import BedrockClaudeTokenizer - - -class TestBedrockClaudeTokenizer: - @pytest.fixture - def tokenizer(self, request): - return BedrockClaudeTokenizer(model=request.param) - - @pytest.mark.parametrize( - "tokenizer,expected", - [ - ("anthropic.claude-v2:1", 5), - ("anthropic.claude-v2", 5), - ("anthropic.claude-3-sonnet-20240229-v1:0", 5), - ("anthropic.claude-3-haiku-20240307-v1:0", 5), - ], - indirect=["tokenizer"], - ) - def test_token_count(self, tokenizer, expected): - assert tokenizer.count_tokens("foo bar huzzah") == expected - - @pytest.mark.parametrize( - "tokenizer,expected", - [ - ("anthropic.claude-v2", 99995), - ("anthropic.claude-v2:1", 199995), - ("anthropic.claude-3-sonnet-20240229-v1:0", 199995), - ("anthropic.claude-3-haiku-20240307-v1:0", 199995), - ], - indirect=["tokenizer"], - ) - def test_input_tokens_left(self, tokenizer, expected): - assert tokenizer.count_input_tokens_left("foo bar huzzah") == expected - - @pytest.mark.parametrize( - "tokenizer,expected", - [ - ("anthropic.claude-v2", 4091), - ("anthropic.claude-v2:1", 4091), - ("anthropic.claude-3-sonnet-20240229-v1:0", 4091), - ("anthropic.claude-3-haiku-20240307-v1:0", 4091), - ], - indirect=["tokenizer"], - ) - def test_output_tokens_left(self, tokenizer, expected): - assert tokenizer.count_output_tokens_left("foo bar huzzah") == expected diff --git a/tests/unit/tokenizers/test_bedrock_cohere_tokenizer.py b/tests/unit/tokenizers/test_bedrock_cohere_tokenizer.py deleted file mode 100644 index 6238b0e54..000000000 --- a/tests/unit/tokenizers/test_bedrock_cohere_tokenizer.py +++ /dev/null @@ -1,25 +0,0 @@ -import pytest -from unittest import mock -from griptape.tokenizers import BedrockCohereTokenizer - - -class TestBedrockCohereTokenizer: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_tokenization = '{"inputTextTokenCount": 2}' - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_tokenization - mock_client.invoke_model.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - def test_input_tokens_left(self): - assert BedrockCohereTokenizer(model="cohere").count_input_tokens_left("foo bar") == 1022 - - def test_output_tokens_left(self): - assert BedrockCohereTokenizer(model="cohere").count_output_tokens_left("foo bar") == 4094 diff --git a/tests/unit/tokenizers/test_bedrock_jurassic_tokenizer.py b/tests/unit/tokenizers/test_bedrock_jurassic_tokenizer.py deleted file mode 100644 index 59c42493b..000000000 --- a/tests/unit/tokenizers/test_bedrock_jurassic_tokenizer.py +++ /dev/null @@ -1,39 +0,0 @@ -import pytest -from unittest import mock -from griptape.tokenizers import BedrockJurassicTokenizer - - -class TestBedrockJurassicTokenizer: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_tokenization = '{"prompt": {"tokens": [{}, {}, {}]}}' - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_tokenization - mock_client.invoke_model.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - @pytest.fixture - def tokenizer(self, request): - return BedrockJurassicTokenizer(model=request.param) - - @pytest.mark.parametrize( - "tokenizer,expected", - [("ai21.j2-mid-v1", 8186), ("ai21.j2-ultra-v1", 8186), ("ai21.j2-large-v1", 8186), ("ai21.j2-large-v2", 8186)], - indirect=["tokenizer"], - ) - def test_input_tokens_left(self, tokenizer, expected): - assert tokenizer.count_input_tokens_left("System: foo\nUser: bar\nAssistant:") == expected - - @pytest.mark.parametrize( - "tokenizer,expected", - [("ai21.j2-mid-v1", 8185), ("ai21.j2-ultra-v1", 8185), ("ai21.j2-large-v1", 8185), ("ai21.j2-large-v2", 2042)], - indirect=["tokenizer"], - ) - def test_output_tokens_left(self, tokenizer, expected): - assert tokenizer.count_output_tokens_left("System: foo\nUser: bar\nAssistant:") == expected diff --git a/tests/unit/tokenizers/test_bedrock_llama_tokenizer.py b/tests/unit/tokenizers/test_bedrock_llama_tokenizer.py deleted file mode 100644 index da842f0f3..000000000 --- a/tests/unit/tokenizers/test_bedrock_llama_tokenizer.py +++ /dev/null @@ -1,35 +0,0 @@ -import pytest -from unittest import mock -from griptape.tokenizers import BedrockLlamaTokenizer - - -class TestBedrockLlamaTokenizer: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_tokenization = '{"generation_token_count": 13}' - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_tokenization - mock_client.invoke_model.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - def test_input_tokens_left(self): - assert ( - BedrockLlamaTokenizer(model="meta.llama").count_input_tokens_left( - "[INST] <>\n{{ system_prompt }}\n<>\n\n{{ usr_msg_1 }} [/INST] {{ model_msg_1 }} [INST] {{ usr_msg_2 }} [/INST]" - ) - == 2026 - ) - - def test_ouput_tokens_left(self): - assert ( - BedrockLlamaTokenizer(model="meta.llama").count_output_tokens_left( - "[INST] <>\n{{ system_prompt }}\n<>\n\n{{ usr_msg_1 }} [/INST] {{ model_msg_1 }} [INST] {{ usr_msg_2 }} [/INST]" - ) - == 2026 - ) diff --git a/tests/unit/tokenizers/test_bedrock_titan_tokenizer.py b/tests/unit/tokenizers/test_bedrock_titan_tokenizer.py deleted file mode 100644 index c4f4f42ad..000000000 --- a/tests/unit/tokenizers/test_bedrock_titan_tokenizer.py +++ /dev/null @@ -1,31 +0,0 @@ -import pytest -from unittest import mock -from griptape.tokenizers import BedrockTitanTokenizer - - -class TestBedrockTitanTokenizer: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_tokenization = '{"inputTextTokenCount": 13}' - mock_session_class = mocker.patch("boto3.Session") - - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_tokenization - mock_client.invoke_model.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - def test_input_tokens_left(self): - assert ( - BedrockTitanTokenizer(model="amazon.titan").count_input_tokens_left("Instructions: foo\nUser: bar\nBot:") - == 4090 - ) - - def test_output_tokens_left(self): - assert ( - BedrockTitanTokenizer(model="amazon.titan").count_output_tokens_left("Instructions: foo\nUser: bar\nBot:") - == 7994 - ) diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index 4f111b8d8..592843279 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -14,10 +14,6 @@ BasePromptDriver, AmazonBedrockPromptDriver, AnthropicPromptDriver, - BedrockClaudePromptModelDriver, - BedrockJurassicPromptModelDriver, - BedrockTitanPromptModelDriver, - BedrockLlamaPromptModelDriver, CoherePromptDriver, OpenAiChatPromptDriver, OpenAiCompletionPromptDriver, @@ -142,70 +138,76 @@ class TesterPromptDriverOption: "COHERE_COMMAND": TesterPromptDriverOption( prompt_driver=CoherePromptDriver(model="command", api_key=os.environ["COHERE_API_KEY"]), enabled=True ), - "BEDROCK_TITAN": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="amazon.titan-tg1-large", prompt_model_driver=BedrockTitanPromptModelDriver() - ), - enabled=True, + "AMAZON_BEDROCK_ANTHROPIC_CLAUDE_3_SONNET": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="anthropic.claude-3-sonnet-20240229-v1:0"), enabled=True ), - "BEDROCK_CLAUDE_INSTANT": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-instant-v1", prompt_model_driver=BedrockClaudePromptModelDriver() - ), - enabled=True, + "AMAZON_BEDROCK_ANTHROPIC_CLAUDE_3_HAIKU": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="anthropic.claude-3-haiku-20240307-v1:0"), enabled=True ), - "BEDROCK_CLAUDE_2": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-v2", prompt_model_driver=BedrockClaudePromptModelDriver() - ), - enabled=True, + "AMAZON_BEDROCK_ANTHROPIC_CLAUDE_2": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="anthropic.claude-v2"), enabled=True ), - "BEDROCK_CLAUDE_2.1": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-v2:1", prompt_model_driver=BedrockClaudePromptModelDriver() - ), - enabled=True, + "AMAZON_BEDROCK_ANTHROPIC_CLAUDE_2.1": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="anthropic.claude-v2:1"), enabled=True ), - "BEDROCK_CLAUDE_3_SONNET": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-3-sonnet-20240229-v1:0", prompt_model_driver=BedrockClaudePromptModelDriver() - ), - enabled=True, + "AMAZON_BEDROCK_ANTHROPIC_CLAUDE_INSTANT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="anthropic.claude-instant-v1"), enabled=True ), - "BEDROCK_CLAUDE_3_HAIKU": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-3-haiku-20240307-v1:0", prompt_model_driver=BedrockClaudePromptModelDriver() - ), - enabled=True, + "AMAZON_BEDROCK_J2_ULTRA": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="ai21.j2-ultra"), enabled=True ), - "BEDROCK_J2": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="ai21.j2-ultra", prompt_model_driver=BedrockJurassicPromptModelDriver() - ), - enabled=True, + "AMAZON_BEDROCK_J2_MID": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="ai21.j2-mid"), enabled=True ), - "BEDROCK_LLAMA2_13B": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="meta.llama2-13b-chat-v1", prompt_model_driver=BedrockLlamaPromptModelDriver(), max_attempts=1 - ), - enabled=True, + "AMAZON_BEDROCK_TITAN_TEXT_LITE": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="amazon.titan-text-lite-v1"), enabled=True ), - "BEDROCK_LLAMA2_70B": TesterPromptDriverOption( - prompt_driver=AmazonBedrockPromptDriver( - model="meta.llama2-70b-chat-v1", prompt_model_driver=BedrockLlamaPromptModelDriver(), max_attempts=1 - ), - enabled=True, + "AMAZON_BEDROCK_TITAN_TEXT_EXPRESS": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="amazon.titan-text-express-v1"), enabled=True + ), + "AMAZON_BEDROCK_COHERE_COMMAND_R_PLUS": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="cohere.command-r-plus-v1:0"), enabled=True + ), + "AMAZON_BEDROCK_COHERE_COMMAND_R": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="cohere.command-r-v1:0"), enabled=True + ), + "AMAZON_BEDROCK_COHERE_COMMAND_TEXT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="cohere.command-text-v14"), enabled=True + ), + "AMAZON_BEDROCK_COHERE_COMMAND_LIGHT_TEXT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="cohere.command-light-text-v14"), enabled=True + ), + "AMAZON_BEDROCK_LLAMA3_8B_INSTRUCT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="meta.llama3-8b-instruct-v1:0"), enabled=True + ), + "AMAZON_BEDROCK_LLAMA2_13B_CHAT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="meta.llama2-13b-chat-v1"), enabled=True + ), + "AMAZON_BEDROCK_LLAMA2_70B_CHAT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="meta.llama2-70b-chat-v1"), enabled=True + ), + "AMAZON_BEDROCK_MISTRAL_7B_INSTRUCT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="mistral.mistral-7b-instruct-v0:2"), enabled=True + ), + "AMAZON_BEDROCK_MISTRAL_MIXTRAL_8X7B_INSTRUCT": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="mistral.mixtral-8x7b-instruct-v0:1"), enabled=True + ), + "AMAZON_BEDROCK_MISTRAL_LARGE_2402": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="mistral.mistral-large-2402-v1:0"), enabled=True + ), + "AMAZON_BEDROCK_MISTRAL_SMALL_2402": TesterPromptDriverOption( + prompt_driver=AmazonBedrockPromptDriver(model="mistral.mistral-small-2402-v1:0"), enabled=True ), "SAGEMAKER_LLAMA_7B": TesterPromptDriverOption( prompt_driver=AmazonSageMakerPromptDriver( - model=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], + endpoint=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], prompt_model_driver=SageMakerLlamaPromptModelDriver(max_tokens=4096), ), enabled=False, ), "SAGEMAKER_FALCON_7b": TesterPromptDriverOption( prompt_driver=AmazonSageMakerPromptDriver( - model=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], + endpoint=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], prompt_model_driver=SageMakerFalconPromptModelDriver(), ), enabled=False, @@ -221,6 +223,7 @@ class TesterPromptDriverOption: PROMPT_DRIVERS["AZURE_CHAT_4"], PROMPT_DRIVERS["AZURE_CHAT_4_32K"], PROMPT_DRIVERS["ANTHROPIC_CLAUDE_3_OPUS"], + PROMPT_DRIVERS["ANTHROPIC_CLAUDE_3_OPUS"], PROMPT_DRIVERS["GOOGLE_GEMINI_PRO"], ] ) From 8d6de30c70998b27e298d77c344600c58e1c15c3 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 6 Jun 2024 10:27:37 -0700 Subject: [PATCH 082/145] Remove un-used header extraction (#838) --- CHANGELOG.md | 1 + .../prompt/openai_chat_prompt_driver.py | 54 +-------------- poetry.lock | 10 +-- pyproject.toml | 1 - .../test_azure_openai_chat_prompt_driver.py | 4 +- .../prompt/test_openai_chat_prompt_driver.py | 67 +------------------ 6 files changed, 14 insertions(+), 123 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad589408c..0756ef35d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - `Workflow.insert_task()` no longer inserts duplicate tasks when given multiple parent tasks. +- Performance issue in `OpenAiChatPromptDriver` when extracting unused rate-limiting headers. ## [0.26.0] - 2024-06-04 diff --git a/griptape/drivers/prompt/openai_chat_prompt_driver.py b/griptape/drivers/prompt/openai_chat_prompt_driver.py index 3d19063d3..345545b6f 100644 --- a/griptape/drivers/prompt/openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/openai_chat_prompt_driver.py @@ -7,8 +7,6 @@ from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver from griptape.tokenizers import OpenAiTokenizer, BaseTokenizer -import dateparser -from datetime import datetime, timedelta @define @@ -25,12 +23,6 @@ class OpenAiChatPromptDriver(BasePromptDriver): response_format: An optional OpenAi Chat Completion response format. Currently only supports `json_object` which will enable OpenAi's JSON mode. seed: An optional OpenAi Chat Completion seed. ignored_exception_types: An optional tuple of exception types to ignore. Defaults to OpenAI's known exception types. - _ratelimit_request_limit: The maximum number of requests allowed in the current rate limit window. - _ratelimit_requests_remaining: The number of requests remaining in the current rate limit window. - _ratelimit_requests_reset_at: The time at which the current rate limit window resets. - _ratelimit_token_limit: The maximum number of tokens allowed in the current rate limit window. - _ratelimit_tokens_remaining: The number of tokens remaining in the current rate limit window. - _ratelimit_tokens_reset_at: The time at which the current rate limit window resets. """ base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) @@ -64,22 +56,12 @@ class OpenAiChatPromptDriver(BasePromptDriver): ), kw_only=True, ) - _ratelimit_request_limit: Optional[int] = field(init=False, default=None) - _ratelimit_requests_remaining: Optional[int] = field(init=False, default=None) - _ratelimit_requests_reset_at: Optional[datetime] = field(init=False, default=None) - _ratelimit_token_limit: Optional[int] = field(init=False, default=None) - _ratelimit_tokens_remaining: Optional[int] = field(init=False, default=None) - _ratelimit_tokens_reset_at: Optional[datetime] = field(init=False, default=None) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - result = self.client.chat.completions.with_raw_response.create(**self._base_params(prompt_stack)) + result = self.client.chat.completions.create(**self._base_params(prompt_stack)) - self._extract_ratelimit_metadata(result) - - parsed_result = result.parse() - - if len(parsed_result.choices) == 1: - return TextArtifact(value=parsed_result.choices[0].message.content.strip()) + if len(result.choices) == 1: + return TextArtifact(value=result.choices[0].message.content.strip()) else: raise Exception("Completion with more than one choice is not supported yet.") @@ -136,33 +118,3 @@ def __to_openai_role(self, prompt_input: PromptStack.Input) -> str: return "assistant" else: return "user" - - def _extract_ratelimit_metadata(self, response): - # The OpenAI SDK's requestssession variable is global, so this hook will fire for all API requests. - # The following headers are not reliably returned in every API call, so we check for the presence of the - # headers before reading and parsing their values to prevent other SDK users from encountering KeyErrors. - reset_requests_at = response.headers.get("x-ratelimit-reset-requests") - if reset_requests_at is not None: - self._ratelimit_requests_reset_at = dateparser.parse( - reset_requests_at, settings={"PREFER_DATES_FROM": "future"} - ) - - # The dateparser utility doesn't handle sub-second durations as are sometimes returned by OpenAI's API. - # If the API returns, for example, "13ms", dateparser.parse() returns None. In this case, we will set - # the time value to the current time plus a one second buffer. - if self._ratelimit_requests_reset_at is None: - self._ratelimit_requests_reset_at = datetime.now() + timedelta(seconds=1) - - reset_tokens_at = response.headers.get("x-ratelimit-reset-tokens") - if reset_tokens_at is not None: - self._ratelimit_tokens_reset_at = dateparser.parse( - reset_tokens_at, settings={"PREFER_DATES_FROM": "future"} - ) - - if self._ratelimit_tokens_reset_at is None: - self._ratelimit_tokens_reset_at = datetime.now() + timedelta(seconds=1) - - self._ratelimit_request_limit = response.headers.get("x-ratelimit-limit-requests") - self._ratelimit_requests_remaining = response.headers.get("x-ratelimit-remaining-requests") - self._ratelimit_token_limit = response.headers.get("x-ratelimit-limit-tokens") - self._ratelimit_tokens_remaining = response.headers.get("x-ratelimit-remaining-tokens") diff --git a/poetry.lock b/poetry.lock index 87b88792a..ed65bc07f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1127,7 +1127,7 @@ test-randomorder = ["pytest-randomly"] name = "dateparser" version = "1.2.0" description = "Date parsing library designed to parse dates from HTML pages" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "dateparser-1.2.0-py2.py3-none-any.whl", hash = "sha256:0b21ad96534e562920a0083e97fd45fa959882d4162acc358705144520a35830"}, @@ -4248,7 +4248,7 @@ six = ">=1.5" name = "pytz" version = "2024.1" description = "World timezone definitions, modern and historical" -optional = false +optional = true python-versions = "*" files = [ {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, @@ -5698,7 +5698,7 @@ files = [ name = "tzdata" version = "2024.1" description = "Provider of IANA time zone data" -optional = false +optional = true python-versions = ">=2" files = [ {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, @@ -5709,7 +5709,7 @@ files = [ name = "tzlocal" version = "5.2" description = "tzinfo object for the local timezone" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, @@ -6096,4 +6096,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "d0913fb4119f352710d722c55029eaa74e948d57e3fa5ffb345ca4e690f20ec2" +content-hash = "74de0d1e5ee382332635cea14dc0d39e288ab65adfec91569da0dbb06fd316e2" diff --git a/pyproject.toml b/pyproject.toml index 53c07257e..d58432b8f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,6 @@ numpy = ">=1" stringcase = "^1.2.0" docker = "^7.1.0" sqlalchemy = "~=1.0" -dateparser = "^1.1.8" requests = "^2" # drivers diff --git a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py index 9446d0520..f6bd12d80 100644 --- a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py @@ -7,11 +7,11 @@ class TestAzureOpenAiChatPromptDriver(TestOpenAiChatPromptDriverFixtureMixin): @pytest.fixture def mock_chat_completion_create(self, mocker): - mock_chat_create = mocker.patch("openai.AzureOpenAI").return_value.chat.completions.with_raw_response.create + mock_chat_create = mocker.patch("openai.AzureOpenAI").return_value.chat.completions.create mock_choice = Mock() mock_choice.message.content = "model-output" mock_chat_create.return_value.headers = {} - mock_chat_create.return_value.parse.return_value.choices = [mock_choice] + mock_chat_create.return_value.choices = [mock_choice] return mock_chat_create @pytest.fixture diff --git a/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py b/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py index fbc939005..1f8f07cf5 100644 --- a/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py @@ -1,5 +1,3 @@ -import datetime - from transformers import AutoTokenizer from griptape.drivers import OpenAiChatPromptDriver @@ -13,11 +11,11 @@ class TestOpenAiChatPromptDriverFixtureMixin: @pytest.fixture def mock_chat_completion_create(self, mocker): - mock_chat_create = mocker.patch("openai.OpenAI").return_value.chat.completions.with_raw_response.create + mock_chat_create = mocker.patch("openai.OpenAI").return_value.chat.completions.create mock_choice = Mock() mock_choice.message.content = "model-output" mock_chat_create.return_value.headers = {} - mock_chat_create.return_value.parse.return_value.choices = [mock_choice] + mock_chat_create.return_value.choices = [mock_choice] return mock_chat_create @pytest.fixture @@ -202,7 +200,7 @@ def test_try_run_throws_when_prompt_stack_is_string(self): def test_try_run_throws_when_multiple_choices_returned(self, choices, mock_chat_completion_create, prompt_stack): # Given driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, api_key="api-key") - mock_chat_completion_create.return_value.parse.return_value.choices = [choices] + mock_chat_completion_create.return_value.choices = [choices] # When with pytest.raises(Exception) as e: @@ -258,65 +256,6 @@ def test_max_output_tokens_with_max_tokens(self, messages): assert max_tokens == 42 - def test_extract_ratelimit_metadata(self): - response_with_headers = OpenAiApiResponseWithHeaders() - driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - driver._extract_ratelimit_metadata(response_with_headers) - - assert driver._ratelimit_requests_remaining == response_with_headers.remaining_requests - assert driver._ratelimit_tokens_remaining == response_with_headers.remaining_tokens - assert driver._ratelimit_request_limit == response_with_headers.limit_requests - assert driver._ratelimit_token_limit == response_with_headers.limit_tokens - - # Assert that the reset times are within one second of the expected value. - expected_request_reset_time = datetime.datetime.now() + datetime.timedelta( - seconds=response_with_headers.reset_requests_in - ) - expected_token_reset_time = datetime.datetime.now() + datetime.timedelta( - seconds=response_with_headers.reset_tokens_in - ) - - assert driver._ratelimit_requests_reset_at is not None - assert abs(driver._ratelimit_requests_reset_at - expected_request_reset_time) < datetime.timedelta(seconds=1) - assert driver._ratelimit_tokens_reset_at is not None - assert abs(driver._ratelimit_tokens_reset_at - expected_token_reset_time) < datetime.timedelta(seconds=1) - - def test_extract_ratelimit_metadata_with_subsecond_reset_times(self): - response_with_headers = OpenAiApiResponseWithHeaders( - reset_requests_in=1, reset_requests_in_unit="ms", reset_tokens_in=10, reset_tokens_in_unit="ms" - ) - driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, api_key="api-key") - driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - driver._extract_ratelimit_metadata(response_with_headers) - - # Assert that the reset times are within one second of the expected value. With a sub-second reset time, - # this is rounded up to one second in the future. - expected_request_reset_time = datetime.datetime.now() + datetime.timedelta(seconds=1) - expected_token_reset_time = datetime.datetime.now() + datetime.timedelta(seconds=1) - - assert driver._ratelimit_requests_reset_at is not None - assert abs(driver._ratelimit_requests_reset_at - expected_request_reset_time) < datetime.timedelta(seconds=1) - assert driver._ratelimit_tokens_reset_at is not None - assert abs(driver._ratelimit_tokens_reset_at - expected_token_reset_time) < datetime.timedelta(seconds=1) - - def test_extract_ratelimit_metadata_missing_headers(self): - class OpenAiApiResponseNoHeaders: - @property - def headers(self): - return {} - - response_without_headers = OpenAiApiResponseNoHeaders() - - driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - driver._extract_ratelimit_metadata(response_without_headers) - - assert driver._ratelimit_request_limit is None - assert driver._ratelimit_requests_remaining is None - assert driver._ratelimit_requests_reset_at is None - assert driver._ratelimit_token_limit is None - assert driver._ratelimit_tokens_remaining is None - assert driver._ratelimit_tokens_reset_at is None - def test_custom_tokenizer(self, mock_chat_completion_create, prompt_stack, messages): driver = OpenAiChatPromptDriver( model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, From 4e1f3b03c60f78a27cd05c3d02d73df12ce4d3d3 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 6 Jun 2024 10:55:00 -0700 Subject: [PATCH 083/145] Remove Legacy `OpenAiChatCompletionPromptDriver` (#835) --- CHANGELOG.md | 1 + .../drivers/prompt-drivers.md | 32 ----- griptape/drivers/__init__.py | 4 - .../azure_openai_completion_prompt_driver.py | 41 ------- .../prompt/openai_completion_prompt_driver.py | 83 ------------- ...t_azure_openai_completion_prompt_driver.py | 75 ------------ .../test_openai_completion_prompt_driver.py | 112 ------------------ tests/utils/structure_tester.py | 11 -- 8 files changed, 1 insertion(+), 358 deletions(-) delete mode 100644 griptape/drivers/prompt/azure_openai_completion_prompt_driver.py delete mode 100644 griptape/drivers/prompt/openai_completion_prompt_driver.py delete mode 100644 tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py delete mode 100644 tests/unit/drivers/prompt/test_openai_completion_prompt_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 0756ef35d..93d7b88ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Removed `BedrockJurassicTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `BedrockLlamaTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `BedrockTitanTokenizer`, use `SimpleTokenizer` instead. +- **BREAKING**: Removed `OpenAiChatCompletionPromptDriver` as it uses the legacy [OpenAi Completions API](https://platform.openai.com/docs/api-reference/completions). - Updated `AmazonBedrockPromptDriver` to use [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html). - `Structure.before_run()` now automatically resolves asymmetrically defined parent/child relationships using the new `Structure.resolve_relationships()`. - Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 859dcec03..befbbd13a 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -125,38 +125,6 @@ agent = Agent( agent.run("Artificial intelligence is a technology with great promise.") ``` -### Azure OpenAI Completion - -The [AzureOpenAiCompletionPromptDriver](../../reference/griptape/drivers/prompt/azure_openai_completion_prompt_driver.md) connects to Azure OpenAI [Text Completion](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference) API. - -```python -import os -from griptape.structures import Agent -from griptape.drivers import AzureOpenAiCompletionPromptDriver -from griptape.config import StructureConfig - -agent = Agent( - config=StructureConfig( - prompt_driver=AzureOpenAiCompletionPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY_1"], - model="text-davinci-003", - azure_deployment=os.environ["AZURE_OPENAI_DAVINCI_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], - temperature=1 - ) - ) -) - -agent.run( - """ - Write a product launch email for new AI-powered headphones that are priced at $79.99 and available at Best Buy, Target and Amazon.com. The target audience is tech-savvy music lovers and the tone is friendly and exciting. - - 1. What should be the subject line of the email? - 2. What should be the body of the email? - """ -) -``` - ### Cohere The [CoherePromptDriver](../../reference/griptape/drivers/prompt/cohere_prompt_driver.md) connects to the Cohere [Generate](https://docs.cohere.ai/reference/generate) API. diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 02a3882fb..f9f5302ea 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -1,8 +1,6 @@ from .prompt.base_prompt_driver import BasePromptDriver from .prompt.openai_chat_prompt_driver import OpenAiChatPromptDriver -from .prompt.openai_completion_prompt_driver import OpenAiCompletionPromptDriver from .prompt.azure_openai_chat_prompt_driver import AzureOpenAiChatPromptDriver -from .prompt.azure_openai_completion_prompt_driver import AzureOpenAiCompletionPromptDriver from .prompt.cohere_prompt_driver import CoherePromptDriver from .prompt.huggingface_pipeline_prompt_driver import HuggingFacePipelinePromptDriver from .prompt.huggingface_hub_prompt_driver import HuggingFaceHubPromptDriver @@ -112,9 +110,7 @@ __all__ = [ "BasePromptDriver", "OpenAiChatPromptDriver", - "OpenAiCompletionPromptDriver", "AzureOpenAiChatPromptDriver", - "AzureOpenAiCompletionPromptDriver", "CoherePromptDriver", "HuggingFacePipelinePromptDriver", "HuggingFaceHubPromptDriver", diff --git a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py b/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py deleted file mode 100644 index 4ff2a4902..000000000 --- a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py +++ /dev/null @@ -1,41 +0,0 @@ -from typing import Callable, Optional -from attrs import define, field, Factory -from griptape.drivers import OpenAiCompletionPromptDriver -import openai - - -@define -class AzureOpenAiCompletionPromptDriver(OpenAiCompletionPromptDriver): - """ - Attributes: - azure_deployment: An optional Azure OpenAi deployment id. Defaults to the model name. - azure_endpoint: An Azure OpenAi endpoint. - azure_ad_token: An optional Azure Active Directory token. - azure_ad_token_provider: An optional Azure Active Directory token provider. - api_version: An Azure OpenAi API version. - client: An `openai.AzureOpenAI` client. - """ - - azure_deployment: str = field( - kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={"serializable": True} - ) - azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) - azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) - azure_ad_token_provider: Optional[Callable[[], str]] = field( - kw_only=True, default=None, metadata={"serializable": False} - ) - api_version: str = field(default="2023-05-15", kw_only=True, metadata={"serializable": True}) - client: openai.AzureOpenAI = field( - default=Factory( - lambda self: openai.AzureOpenAI( - organization=self.organization, - api_key=self.api_key, - api_version=self.api_version, - azure_endpoint=self.azure_endpoint, - azure_deployment=self.azure_deployment, - azure_ad_token=self.azure_ad_token, - azure_ad_token_provider=self.azure_ad_token_provider, - ), - takes_self=True, - ) - ) diff --git a/griptape/drivers/prompt/openai_completion_prompt_driver.py b/griptape/drivers/prompt/openai_completion_prompt_driver.py deleted file mode 100644 index 1a738a487..000000000 --- a/griptape/drivers/prompt/openai_completion_prompt_driver.py +++ /dev/null @@ -1,83 +0,0 @@ -from typing import Optional -from collections.abc import Iterator -from attrs import define, field, Factory -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack -from griptape.drivers import BasePromptDriver -from griptape.tokenizers import OpenAiTokenizer -import openai - - -@define -class OpenAiCompletionPromptDriver(BasePromptDriver): - """ - Attributes: - base_url: An optional OpenAi API URL. - api_key: An optional OpenAi API key. If not provided, the `OPENAI_API_KEY` environment variable will be used. - organization: An optional OpenAI organization. If not provided, the `OPENAI_ORG_ID` environment variable will be used. - client: An `openai.OpenAI` client. - model: An OpenAI model name. - tokenizer: An `OpenAiTokenizer`. - user: A user id. Can be used to track requests by user. - ignored_exception_types: An optional tuple of exception types to ignore. Defaults to OpenAI's known exception types. - """ - - base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) - organization: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - client: openai.OpenAI = field( - default=Factory( - lambda self: openai.OpenAI(api_key=self.api_key, base_url=self.base_url, organization=self.organization), - takes_self=True, - ) - ) - model: str = field(kw_only=True, metadata={"serializable": True}) - tokenizer: OpenAiTokenizer = field( - default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True), kw_only=True - ) - user: str = field(default="", kw_only=True, metadata={"serializable": True}) - ignored_exception_types: tuple[type[Exception], ...] = field( - default=Factory( - lambda: ( - openai.BadRequestError, - openai.AuthenticationError, - openai.PermissionDeniedError, - openai.NotFoundError, - openai.ConflictError, - openai.UnprocessableEntityError, - ) - ), - kw_only=True, - ) - - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - result = self.client.completions.create(**self._base_params(prompt_stack)) - - if len(result.choices) == 1: - return TextArtifact(value=result.choices[0].text.strip()) - else: - raise Exception("completion with more than one choice is not supported yet") - - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - result = self.client.completions.create(**self._base_params(prompt_stack), stream=True) - - for chunk in result: - if len(chunk.choices) == 1: - choice = chunk.choices[0] - delta_content = choice.text - yield TextArtifact(value=delta_content) - - else: - raise Exception("completion with more than one choice is not supported yet") - - def _base_params(self, prompt_stack: PromptStack) -> dict: - prompt = self.prompt_stack_to_string(prompt_stack) - - return { - "model": self.model, - "max_tokens": self.max_output_tokens(prompt), - "temperature": self.temperature, - "stop": self.tokenizer.stop_sequences, - "user": self.user, - "prompt": prompt, - } diff --git a/tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py b/tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py deleted file mode 100644 index 65758843a..000000000 --- a/tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py +++ /dev/null @@ -1,75 +0,0 @@ -import pytest -from unittest.mock import Mock -from griptape.drivers import AzureOpenAiCompletionPromptDriver -from tests.unit.drivers.prompt.test_openai_completion_prompt_driver import TestOpenAiCompletionPromptDriverFixtureMixin -from unittest.mock import ANY - - -class TestAzureOpenAiCompletionPromptDriver(TestOpenAiCompletionPromptDriverFixtureMixin): - @pytest.fixture - def mock_completion_create(self, mocker): - mock_chat_create = mocker.patch("openai.AzureOpenAI").return_value.completions.create - mock_choice = Mock() - mock_choice.text = "model-output" - mock_chat_create.return_value.choices = [mock_choice] - return mock_chat_create - - @pytest.fixture - def mock_completion_stream_create(self, mocker): - mock_chat_create = mocker.patch("openai.AzureOpenAI").return_value.completions.create - mock_chunk = Mock() - mock_choice = Mock() - mock_choice.text = "model-output" - mock_chunk.choices = [mock_choice] - mock_chat_create.return_value = iter([mock_chunk]) - return mock_chat_create - - def test_init(self): - assert AzureOpenAiCompletionPromptDriver( - azure_endpoint="endpoint", azure_deployment="deployment", model="text-davinci-003" - ) - assert ( - AzureOpenAiCompletionPromptDriver(azure_endpoint="endpoint", model="text-davinci-003").azure_deployment - == "text-davinci-003" - ) - - def test_try_run(self, mock_completion_create, prompt_stack, prompt): - # Given - driver = AzureOpenAiCompletionPromptDriver( - azure_endpoint="endpoint", azure_deployment="deployment", model="text-davinci-003" - ) - - # When - text_artifact = driver.try_run(prompt_stack) - - # Then - mock_completion_create.assert_called_once_with( - model=driver.model, - max_tokens=ANY, - temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, - user=driver.user, - prompt=prompt, - ) - assert text_artifact.value == "model-output" - - def test_try_stream_run(self, mock_completion_stream_create, prompt_stack, prompt): - # Given - driver = AzureOpenAiCompletionPromptDriver( - azure_endpoint="endpoint", azure_deployment="deployment", model="text-davinci-003", stream=True - ) - - # When - text_artifact = next(driver.try_stream(prompt_stack)) - - # Then - mock_completion_stream_create.assert_called_once_with( - model=driver.model, - max_tokens=ANY, - temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, - user=driver.user, - stream=True, - prompt=prompt, - ) - assert text_artifact.value == "model-output" diff --git a/tests/unit/drivers/prompt/test_openai_completion_prompt_driver.py b/tests/unit/drivers/prompt/test_openai_completion_prompt_driver.py deleted file mode 100644 index 66998c261..000000000 --- a/tests/unit/drivers/prompt/test_openai_completion_prompt_driver.py +++ /dev/null @@ -1,112 +0,0 @@ -from griptape.drivers import OpenAiCompletionPromptDriver -from griptape.utils import PromptStack -from unittest.mock import ANY, Mock -from griptape.tokenizers import OpenAiTokenizer -import pytest - - -class TestOpenAiCompletionPromptDriverFixtureMixin: - @pytest.fixture - def mock_completion_create(self, mocker): - mock_chat_create = mocker.patch("openai.OpenAI").return_value.completions.create - mock_choice = Mock() - mock_choice.text = "model-output" - mock_chat_create.return_value.choices = [mock_choice] - return mock_chat_create - - @pytest.fixture - def mock_completion_stream_create(self, mocker): - mock_chat_create = mocker.patch("openai.OpenAI").return_value.completions.create - mock_chunk = Mock() - mock_choice = Mock() - mock_choice.text = "model-output" - mock_chunk.choices = [mock_choice] - mock_chat_create.return_value = iter([mock_chunk]) - return mock_chat_create - - @pytest.fixture - def prompt_stack(self): - prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") - return prompt_stack - - @pytest.fixture - def prompt(self): - return "".join( - [ - "generic-input\n\n", - "system-input\n\n", - "User: user-input\n\n", - "Assistant: assistant-input\n\n", - "Assistant:", - ] - ) - - -class TestOpenAiCompletionPromptDriver(TestOpenAiCompletionPromptDriverFixtureMixin): - def test_init(self): - assert OpenAiCompletionPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - - def test_try_run(self, mock_completion_create, prompt_stack, prompt): - # Given - driver = OpenAiCompletionPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - - # When - text_artifact = driver.try_run(prompt_stack) - - # Then - mock_completion_create.assert_called_once_with( - model=driver.model, - max_tokens=ANY, - temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, - user=driver.user, - prompt=prompt, - ) - assert text_artifact.value == "model-output" - - def test_try_stream_run(self, mock_completion_stream_create, prompt_stack, prompt): - # Given - driver = OpenAiCompletionPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, stream=True) - - # When - text_artifact = next(driver.try_stream(prompt_stack)) - - # Then - mock_completion_stream_create.assert_called_once_with( - model=driver.model, - max_tokens=ANY, - temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, - user=driver.user, - stream=True, - prompt=prompt, - ) - assert text_artifact.value == "model-output" - - def test_try_run_throws_when_prompt_stack_is_string(self): - # Given - driver = OpenAiCompletionPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - - # When - with pytest.raises(Exception) as e: - driver.try_run("prompt-stack") # pyright: ignore - - # Then - assert e.value.args[0] == "'str' object has no attribute 'inputs'" - - @pytest.mark.parametrize("choices", [[], [1, 2]]) - def test_try_run_throws_when_multiple_choices_returned(self, choices, mock_completion_create, prompt_stack): - # Given - driver = OpenAiCompletionPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - mock_completion_create.return_value.choices = choices - - # When - with pytest.raises(Exception) as e: - driver.try_run(prompt_stack) - - # Then - e.value.args[0] == "Completion with more than one choice is not supported yet." diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index 592843279..d21d52c93 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -16,7 +16,6 @@ AnthropicPromptDriver, CoherePromptDriver, OpenAiChatPromptDriver, - OpenAiCompletionPromptDriver, AzureOpenAiChatPromptDriver, AmazonSageMakerPromptDriver, SageMakerLlamaPromptModelDriver, @@ -49,12 +48,6 @@ class TesterPromptDriverOption: prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo-1106", api_key=os.environ["OPENAI_API_KEY"]), enabled=True, ), - "OPENAI_CHAT_35_TURBO_INSTRUCT": TesterPromptDriverOption( - prompt_driver=OpenAiCompletionPromptDriver( - model="gpt-3.5-turbo-instruct", api_key=os.environ["OPENAI_API_KEY"] - ), - enabled=True, - ), "OPENAI_CHAT_4": TesterPromptDriverOption( prompt_driver=OpenAiChatPromptDriver(model="gpt-4", api_key=os.environ["OPENAI_API_KEY"]), enabled=True ), @@ -65,10 +58,6 @@ class TesterPromptDriverOption: prompt_driver=OpenAiChatPromptDriver(model="gpt-4-1106-preview", api_key=os.environ["OPENAI_API_KEY"]), enabled=True, ), - "OPENAI_COMPLETION_DAVINCI": TesterPromptDriverOption( - prompt_driver=OpenAiCompletionPromptDriver(api_key=os.environ["OPENAI_API_KEY"], model="text-davinci-003"), - enabled=True, - ), "AZURE_CHAT_35_TURBO": TesterPromptDriverOption( prompt_driver=AzureOpenAiChatPromptDriver( api_key=os.environ["AZURE_OPENAI_API_KEY_1"], From 30aa370850e782e6f8a2e6c17ccb6146aaea5a6b Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 6 Jun 2024 13:01:56 -0700 Subject: [PATCH 084/145] Improve error when knowledgebase is missing a description (#839) --- CHANGELOG.md | 1 + .../tool.py | 4 +++- ...st_griptape_cloud_knowledge_base_client.py | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93d7b88ce..1e5436df6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Removed `BedrockLlamaTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `BedrockTitanTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `OpenAiChatCompletionPromptDriver` as it uses the legacy [OpenAi Completions API](https://platform.openai.com/docs/api-reference/completions). +- Improved error message when `GriptapeCloudKnowledgeBaseClient` does not have a description set. - Updated `AmazonBedrockPromptDriver` to use [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html). - `Structure.before_run()` now automatically resolves asymmetrically defined parent/child relationships using the new `Structure.resolve_relationships()`. - Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. diff --git a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py index 917406cdd..96d24cccf 100644 --- a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py +++ b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py @@ -52,4 +52,6 @@ def _get_knowledge_base_description(self) -> str: if "description" in response: return response["description"] else: - raise ValueError(f'Error getting Knowledge Base description: {response["message"]}') + raise ValueError( + f"No description found for Knowledge Base {self.knowledge_base_id}. Please set a description, or manually set the `GriptapeCloudKnowledgeBaseClient.description` attribute." + ) diff --git a/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py b/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py index 46270d216..a50929d66 100644 --- a/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py +++ b/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py @@ -19,6 +19,18 @@ def client(self, mocker): base_url="https://api.griptape.ai", api_key="foo bar", knowledge_base_id="1" ) + @pytest.fixture + def client_no_description(self, mocker): + from griptape.tools import GriptapeCloudKnowledgeBaseClient + + mock_response = mocker.Mock() + mock_response.json.return_value = {} + mocker.patch("requests.get", return_value=mock_response) + + return GriptapeCloudKnowledgeBaseClient( + base_url="https://api.griptape.ai", api_key="foo bar", knowledge_base_id="1" + ) + def test_query(self, client): assert isinstance(client.query({"values": {"query": "foo bar"}}), TextArtifact) @@ -27,3 +39,12 @@ def test_get_knowledge_base_description(self, client): client.description = "foo bar" assert client._get_knowledge_base_description() == "foo bar" + + def test_get_knowledge_base_description_error(self, client_no_description): + with pytest.raises(ValueError) as e: + client_no_description._get_knowledge_base_description() + + assert ( + str(e) + == f"No description found for Knowledge Base {client_no_description.knowledge_base_id}. Please set a description, or manually set the `GriptapeCloudKnowledgeBaseClient.description` attribute." + ) From 5e2e1a1bfd6a50703215226fe2cc401cc4c58f30 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 7 Jun 2024 11:13:06 -0700 Subject: [PATCH 085/145] Remove old tokenizer docs (#841) --- docs/griptape-framework/misc/tokenizers.md | 50 ---------------------- 1 file changed, 50 deletions(-) diff --git a/docs/griptape-framework/misc/tokenizers.md b/docs/griptape-framework/misc/tokenizers.md index aaf488187..1975fc977 100644 --- a/docs/griptape-framework/misc/tokenizers.md +++ b/docs/griptape-framework/misc/tokenizers.md @@ -78,56 +78,6 @@ print(tokenizer.count_input_tokens_left("Hello world!")) print(tokenizer.count_output_tokens_left("Hello world!")) ``` -### Bedrock - -#### Anthropic Claude -```python -from griptape.tokenizers import BedrockClaudeTokenizer - - -tokenizer = BedrockClaudeTokenizer(model="anthropic.claude-3-sonnet-20240229-v1:0") - -print(tokenizer.count_tokens("Hello world!")) -print(tokenizer.count_input_tokens_left("Hello world!")) -print(tokenizer.count_output_tokens_left("Hello world!")) -``` - -#### Amazon Titan -```python -from griptape.tokenizers import BedrockTitanTokenizer - - -tokenizer = BedrockTitanTokenizer(model="amazon.titan-text-express-v1") - -print(tokenizer.count_tokens("Hello world!")) -print(tokenizer.count_input_tokens_left("Hello world!")) -print(tokenizer.count_output_tokens_left("Hello world!")) -``` - -#### Meta Llama 2 -```python -from griptape.tokenizers import BedrockLlamaTokenizer - - -tokenizer = BedrockLlamaTokenizer(model="meta.llama2-13b-chat-v1") - -print(tokenizer.count_tokens("Hello world!")) -print(tokenizer.count_input_tokens_left("Hello world!")) -print(tokenizer.count_output_tokens_left("Hello world!")) -``` - -#### Ai21 Jurassic -```python -from griptape.tokenizers import BedrockJurassicTokenizer - - -tokenizer = BedrockJurassicTokenizer(model="ai21.j2-ultra-v1") - -print(tokenizer.count_tokens("Hello world!")) -print(tokenizer.count_input_tokens_left("Hello world!")) -print(tokenizer.count_output_tokens_left("Hello world!")) -``` - ### Simple Not all LLM providers have a public tokenizer API. In this case, you can use the `SimpleTokenizer` to count tokens based on a simple heuristic. From 839ffb812dea7aa47d53fb5d3dcbcf9c83d23d52 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 7 Jun 2024 11:22:41 -0700 Subject: [PATCH 086/145] Correctly Ignore TYPE_CHECKING in coverage (#845) --- .coveragerc | 33 ++++++++++----------------------- .gitignore | 5 ++++- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/.coveragerc b/.coveragerc index a55d8962f..6112755cc 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,28 +1,15 @@ [run] -data_file = coverage/.coverage branch = True [report] -; Regexes for lines to exclude from consideration exclude_also = - ; Don't complain about missing debug-only code: - def __repr__ - if self\.debug - - ; Don't complain if tests don't hit defensive assertion code: - raise AssertionError - raise NotImplementedError - - ; Don't complain if non-runnable code isn't run: - if 0: - if __name__ == .__main__.: - if TYPE_CHECKING: - - ; Don't complain about abstract methods, they aren't run: - @(abc\.)?abstractmethod - -[html] -directory = coverage/html - -[xml] -output = coverage/coverage.xml + def __repr__ + if self.debug: + if settings.DEBUG + raise AssertionError + raise NotImplementedError + if 0: + if __name__ == .__main__.: + if TYPE_CHECKING: + class .*\bProtocol\): + @(abc\.)?abstractmethod diff --git a/.gitignore b/.gitignore index ba63b4aca..c71d930a9 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ __pycache__ npm-debug.log **/.mypy_cache/** !yarn.lock -coverage/ cucumber-report.json **/.vscode-test/** **/.vscode test/** @@ -57,3 +56,7 @@ dist/** # mkdocs build output site reference + +# coverage.py +htmlcov/ +coverage.* From 029a65d2f6bb61ed8b6f74b8a2affd91f1f3741d Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 7 Jun 2024 12:53:38 -0700 Subject: [PATCH 087/145] Reduce scope of Amazon SageMaker Prompt Driver to only Jumpstart (#837) --- CHANGELOG.md | 12 +- .../drivers/embedding-drivers.md | 32 +---- .../drivers/prompt-drivers.md | 70 ++------- griptape/drivers/__init__.py | 26 +--- .../amazon_sagemaker_embedding_driver.py | 31 ---- ...on_sagemaker_jumpstart_embedding_driver.py | 53 +++++++ .../base_multi_model_embedding_driver.py | 15 -- griptape/drivers/embedding_model/__init__.py | 0 .../base_embedding_model_driver.py | 11 -- ...aker_huggingface_embedding_model_driver.py | 11 -- ...r_tensorflow_hub_embedding_model_driver.py | 11 -- ...mazon_sagemaker_jumpstart_prompt_driver.py | 95 +++++++++++++ .../prompt/amazon_sagemaker_prompt_driver.py | 52 ------- .../prompt/base_multi_model_prompt_driver.py | 38 ----- griptape/drivers/prompt_model/__init__.py | 0 .../prompt_model/base_prompt_model_driver.py | 29 ---- .../sagemaker_falcon_prompt_model_driver.py | 42 ------ .../sagemaker_llama_prompt_model_driver.py | 47 ------ griptape/schemas/base_schema.py | 3 +- .../test_sagemaker_embedding_driver.py | 33 ----- ...st_sagemaker_jumpstart_embedding_driver.py | 59 ++++++++ .../unit/drivers/embedding_model/__init__.py | 0 ...aker_huggingface_embedding_model_driver.py | 21 --- ...r_tensorflow_hub_embedding_model_driver.py | 21 --- ...mazon_sagemaker_jumpstart_prompt_driver.py | 134 ++++++++++++++++++ .../test_amazon_sagemaker_prompt_driver.py | 90 ------------ tests/unit/drivers/prompt_models/__init__.py | 0 ...st_sagemaker_falcon_prompt_model_driver.py | 43 ------ ...est_sagemaker_llama_prompt_model_driver.py | 67 --------- tests/utils/structure_tester.py | 14 +- 30 files changed, 374 insertions(+), 686 deletions(-) delete mode 100644 griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py create mode 100644 griptape/drivers/embedding/amazon_sagemaker_jumpstart_embedding_driver.py delete mode 100644 griptape/drivers/embedding/base_multi_model_embedding_driver.py delete mode 100644 griptape/drivers/embedding_model/__init__.py delete mode 100644 griptape/drivers/embedding_model/base_embedding_model_driver.py delete mode 100644 griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py delete mode 100644 griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py create mode 100644 griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py delete mode 100644 griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py delete mode 100644 griptape/drivers/prompt/base_multi_model_prompt_driver.py delete mode 100644 griptape/drivers/prompt_model/__init__.py delete mode 100644 griptape/drivers/prompt_model/base_prompt_model_driver.py delete mode 100644 griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py delete mode 100644 griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py delete mode 100644 tests/unit/drivers/embedding/test_sagemaker_embedding_driver.py create mode 100644 tests/unit/drivers/embedding/test_sagemaker_jumpstart_embedding_driver.py delete mode 100644 tests/unit/drivers/embedding_model/__init__.py delete mode 100644 tests/unit/drivers/embedding_model/test_sagemaker_huggingface_embedding_model_driver.py delete mode 100644 tests/unit/drivers/embedding_model/test_sagemaker_tensorflow_hub_embedding_model_driver.py create mode 100644 tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py delete mode 100644 tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py delete mode 100644 tests/unit/drivers/prompt_models/__init__.py delete mode 100644 tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py delete mode 100644 tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e5436df6..0d62a76cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Structure.resolve_relationships()` to resolve asymmetrically defined parent/child relationships. In other words, if a parent declares a child, but the child does not declare the parent, the parent will automatically be added as a parent of the child when running this method. The method is invoked automatically by `Structure.before_run()`. - `CohereEmbeddingDriver` for using Cohere's embeddings API. - `CohereStructureConfig` for providing Structures with quick Cohere configuration. +- `AmazonSageMakerJumpstartPromptDriver.inference_component_name` for setting the `InferenceComponentName` parameter when invoking an endpoint. +- `AmazonSageMakerJumpstartEmbeddingDriver.inference_component_name` for setting the `InferenceComponentName` parameter when invoking an endpoint. +- `AmazonSageMakerJumpstartEmbeddingDriver.custom_attributes` for setting custom attributes when invoking an endpoint. ### Changed - **BREAKING**: `Workflow` no longer modifies task relationships when adding tasks via `tasks` init param, `add_tasks()` or `add_task()`. Previously, adding a task would automatically add the previously added task as its parent. Existing code that relies on this behavior will need to be updated to explicitly add parent/child relationships using the API offered by `BaseTask`. @@ -27,6 +30,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Removed `BedrockLlamaTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `BedrockTitanTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `OpenAiChatCompletionPromptDriver` as it uses the legacy [OpenAi Completions API](https://platform.openai.com/docs/api-reference/completions). +- **BREAKING**: Renamed `AmazonSagemakerPromptDriver` to `AmazonSageMakerJumpstartPromptDriver`. +- **BREAKING**: Removed `SagemakerFalconPromptModelDriver`, use `AmazonSageMakerJumpstartPromptDriver` instead. +- **BREAKING**: Removed `SagemakerLlamaPromptModelDriver`, use `AmazonSageMakerJumpstartPromptDriver` instead. +- **BREAKING**: Renamed `AmazonSagemakerEmbeddingDriver` to `AmazonSageMakerJumpstartEmbeddingDriver`. +- **BREAKING**: Removed `SagemakerHuggingfaceEmbeddingModelDriver`, use `AmazonSageMakerJumpstartEmbeddingDriver` instead. +- **BREAKING**: Removed `SagemakerTensorflowHubEmbeddingModelDriver`, use `AmazonSageMakerJumpstartEmbeddingDriver` instead. +- **BREAKING**: `AmazonSageMakerJumpstartPromptDriver.model` parameter, which gets passed to `SageMakerRuntime.Client.invoke_endpoint` as `EndpointName`, is now renamed to `AmazonSageMakerPromptDriver.endpoint`. - Improved error message when `GriptapeCloudKnowledgeBaseClient` does not have a description set. - Updated `AmazonBedrockPromptDriver` to use [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html). - `Structure.before_run()` now automatically resolves asymmetrically defined parent/child relationships using the new `Structure.resolve_relationships()`. @@ -263,7 +273,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `ImageLoader` for loading images files into `ImageArtifact`s. - Support for all Tokenizers in `OpenAiChatPromptDriver`, enabling OpenAI drop-in clients such as Together AI. -- `AmazonSageMakerEmbeddingDriver` for using Amazon SageMaker to generate embeddings. Thanks @KaushikIyer16! +- `AmazonSageMakerJumpstartEmbeddingDriver` for using Amazon SageMaker to generate embeddings. Thanks @KaushikIyer16! - Claude 2.1 support in `AnthropicPromptDriver` and `AmazonBedrockPromptDriver` via `BedrockClaudePromptModelDriver`. - `CodeExecutionTask` for executing code as a Task without the need for an LLM. - `BedrockLlamaPromptModelDriver` for using Llama models on Amazon Bedrock. diff --git a/docs/griptape-framework/drivers/embedding-drivers.md b/docs/griptape-framework/drivers/embedding-drivers.md index 58182b03e..74a6f550e 100644 --- a/docs/griptape-framework/drivers/embedding-drivers.md +++ b/docs/griptape-framework/drivers/embedding-drivers.md @@ -99,43 +99,21 @@ embeddings = driver.embed_string("Hello world!") # display the first 3 embeddings print(embeddings[:3]) -``` -### Multi Model Embedding Drivers -Certain embeddings providers such as Amazon SageMaker support many types of models, each with their own slight differences in parameters and response formats. To support this variation across models, these Embedding Drivers takes a [Embedding Model Driver](../../reference/griptape/drivers/embedding_model/base_embedding_model_driver.md) -through the [embedding_model_driver](../../reference/griptape/drivers/embedding/base_multi_model_embedding_driver.md#griptape.drivers.embedding.base_multi_model_embedding_driver.BaseMultiModelEmbeddingDriver.embedding_model_driver) parameter. -[Embedding Model Driver](../../reference/griptape/drivers/embedding_model/base_embedding_model_driver.md)s allows for model-specific customization for Embedding Drivers. -#### SageMaker Embeddings +``` +### Amazon SageMaker Jumpstart Embeddings -The [AmazonSageMakerEmbeddingDriver](../../reference/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.md) uses the [Amazon SageMaker Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) to generate embeddings on AWS. +The [AmazonSageMakerJumpstartEmbeddingDriver](../../reference/griptape/drivers/embedding/amazon_sagemaker_jumpstart_embedding_driver.md) uses the [Amazon SageMaker Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) to generate embeddings on AWS. !!! info This driver requires the `drivers-embedding-amazon-sagemaker` [extra](../index.md#extras). -##### TensorFlow Hub Models ```python title="PYTEST_IGNORE" import os -from griptape.drivers import AmazonSageMakerEmbeddingDriver, SageMakerTensorFlowHubEmbeddingModelDriver +from griptape.drivers import AmazonSageMakerJumpstartEmbeddingDriver, SageMakerTensorFlowHubEmbeddingModelDriver -driver = AmazonSageMakerEmbeddingDriver( +driver = AmazonSageMakerJumpstartEmbeddingDriver( model=os.environ["SAGEMAKER_TENSORFLOW_HUB_MODEL"], - embedding_model_driver=SageMakerTensorFlowHubEmbeddingModelDriver(), -) - -embeddings = driver.embed_string("Hello world!") - -# display the first 3 embeddings -print(embeddings[:3]) -``` - -##### HuggingFace Models -```python title="PYTEST_IGNORE" -import os -from griptape.drivers import AmazonSageMakerEmbeddingDriver, SageMakerHuggingFaceEmbeddingModelDriver - -driver = AmazonSageMakerEmbeddingDriver( - model=os.environ["SAGEMAKER_HUGGINGFACE_MODEL"], - embedding_model_driver=SageMakerHuggingFaceEmbeddingModelDriver(), ) embeddings = driver.embed_string("Hello world!") diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index befbbd13a..0f376cd5f 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -347,87 +347,35 @@ agent = Agent( agent.run("How many helicopters can a human eat in one sitting?") ``` -### Multi Model Prompt Drivers -Certain LLM providers such as Amazon SageMaker support many types of models, each with their own slight differences in prompt structure and parameters. To support this variation across models, these Prompt Drivers takes a [Prompt Model Driver](../../reference/griptape/drivers/prompt_model/base_prompt_model_driver.md) -through the [prompt_model_driver](../../reference/griptape/drivers/prompt/base_multi_model_prompt_driver.md#griptape.drivers.prompt.base_multi_model_prompt_driver.BaseMultiModelPromptDriver.prompt_model_driver) parameter. -[Prompt Model Driver](../../reference/griptape/drivers/prompt_model/base_prompt_model_driver.md)s allows for model-specific customization for Prompt Drivers. - - -#### Amazon SageMaker +#### Amazon SageMaker Jumpstart !!! info This driver requires the `drivers-prompt-amazon-sagemaker` [extra](../index.md#extras). -The [AmazonSageMakerPromptDriver](../../reference/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.md) uses [Amazon SageMaker Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) for inference on AWS. - -!!! info - For single model endpoints, the `model` parameter does not need to be specified. - For multi-model endpoints, the `model` parameter should be the inference component name. - -!!! warning - Make sure that the selected prompt model driver is compatible with the selected model. Note that even the same - logical model can require different prompt model drivers depending on how it is bundled in the endpoint. For - example, the reponse format are different for `Meta-Llama-3-8B-Instruct` when deployed via - "Amazon SageMaker JumpStart" and "Hugging Face on Amazon SageMaker". - -##### Llama +The [AmazonSageMakerJumpstartPromptDriver](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.md) uses [Amazon SageMaker Jumpstart](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-jumpstart.html) for inference on AWS. -!!! info - `SageMakerLlamaPromptModelDriver` requires a tokenizer corresponding to a [Gated Model](https://huggingface.co/docs/hub/en/models-gated) on Hugging Face. +Amazon Sagemaker Jumpstart provides a wide range of models with varying capabilities. +This Driver has been primarily _chat-optimized_ models that have a [Huggingface Chat Template](https://huggingface.co/docs/transformers/en/chat_templating) available. +If your model does not fit this use-case, we suggest sub-classing [AmazonSageMakerJumpstartPromptDriver](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.md) and overriding the [_to_model_input](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver/#griptape.drivers.prompt.amazon_sagemaker_jumpstart_prompt_driver.AmazonSagemakerJumpstartPromptDriver._to_model_input) and [_to_model_params](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver/#griptape.drivers.prompt.amazon_sagemaker_jumpstart_prompt_driver.AmazonSagemakerJumpstartPromptDriver._to_model_params) methods. - Make sure to request access to the [Meta-Llama-3-8B-Instruct](https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct) model on Hugging Face and configure your environment for hugging face use. - -```python title="PYTEST_IGNORE" -import os -from griptape.structures import Agent -from griptape.drivers import ( - AmazonSageMakerPromptDriver, - SageMakerLlamaPromptModelDriver, -) -from griptape.rules import Rule -from griptape.config import StructureConfig - -agent = Agent( - config=StructureConfig( - prompt_driver=AmazonSageMakerPromptDriver( - endpoint=os.environ["SAGEMAKER_LLAMA_3_INSTRUCT_ENDPOINT_NAME"], - model=os.environ["SAGEMAKER_LLAMA_3_INSTRUCT_INFERENCE_COMPONENT_NAME"], - prompt_model_driver=SageMakerLlamaPromptModelDriver(), - temperature=0.75, - ) - ), - rules=[ - Rule( - value="You are a helpful, respectful and honest assistant who is also a swarthy pirate." - "You only speak like a pirate and you never break character." - ) - ], -) - -agent.run("Hello!") -``` - -##### Falcon ```python title="PYTEST_IGNORE" import os from griptape.structures import Agent from griptape.drivers import ( - AmazonSageMakerPromptDriver, + AmazonSageMakerJumpstartPromptDriver, SageMakerFalconPromptModelDriver, ) from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - prompt_driver=AmazonSageMakerPromptDriver( - endpoint=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], - model=os.environ["SAGEMAKER_FALCON_INFERENCE_COMPONENT_NAME"], - prompt_model_driver=SageMakerFalconPromptModelDriver(), + prompt_driver=AmazonSageMakerJumpstartPromptDriver( + endpoint=os.environ["SAGEMAKER_LLAMA_3_INSTRUCT_ENDPOINT_NAME"], + model="meta-llama/Meta-Llama-3-8B-Instruct", ) ) ) agent.run("What is a good lasagna recipe?") - ``` diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index f9f5302ea..44a2941c9 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -5,10 +5,9 @@ from .prompt.huggingface_pipeline_prompt_driver import HuggingFacePipelinePromptDriver from .prompt.huggingface_hub_prompt_driver import HuggingFaceHubPromptDriver from .prompt.anthropic_prompt_driver import AnthropicPromptDriver -from .prompt.amazon_sagemaker_prompt_driver import AmazonSageMakerPromptDriver +from .prompt.amazon_sagemaker_jumpstart_prompt_driver import AmazonSageMakerJumpstartPromptDriver from .prompt.amazon_bedrock_prompt_driver import AmazonBedrockPromptDriver from .prompt.google_prompt_driver import GooglePromptDriver -from .prompt.base_multi_model_prompt_driver import BaseMultiModelPromptDriver from .prompt.dummy_prompt_driver import DummyPromptDriver from .memory.conversation.base_conversation_memory_driver import BaseConversationMemoryDriver @@ -19,8 +18,7 @@ from .embedding.base_embedding_driver import BaseEmbeddingDriver from .embedding.openai_embedding_driver import OpenAiEmbeddingDriver from .embedding.azure_openai_embedding_driver import AzureOpenAiEmbeddingDriver -from .embedding.base_multi_model_embedding_driver import BaseMultiModelEmbeddingDriver -from .embedding.amazon_sagemaker_embedding_driver import AmazonSageMakerEmbeddingDriver +from .embedding.amazon_sagemaker_jumpstart_embedding_driver import AmazonSageMakerJumpstartEmbeddingDriver from .embedding.amazon_bedrock_titan_embedding_driver import AmazonBedrockTitanEmbeddingDriver from .embedding.amazon_bedrock_cohere_embedding_driver import AmazonBedrockCohereEmbeddingDriver from .embedding.voyageai_embedding_driver import VoyageAiEmbeddingDriver @@ -29,10 +27,6 @@ from .embedding.dummy_embedding_driver import DummyEmbeddingDriver from .embedding.cohere_embedding_driver import CohereEmbeddingDriver -from .embedding_model.base_embedding_model_driver import BaseEmbeddingModelDriver -from .embedding_model.sagemaker_huggingface_embedding_model_driver import SageMakerHuggingFaceEmbeddingModelDriver -from .embedding_model.sagemaker_tensorflow_hub_embedding_model_driver import SageMakerTensorFlowHubEmbeddingModelDriver - from .vector.base_vector_store_driver import BaseVectorStoreDriver from .vector.local_vector_store_driver import LocalVectorStoreDriver from .vector.pinecone_vector_store_driver import PineconeVectorStoreDriver @@ -50,10 +44,6 @@ from .sql.snowflake_sql_driver import SnowflakeSqlDriver from .sql.sql_driver import SqlDriver -from .prompt_model.base_prompt_model_driver import BasePromptModelDriver -from .prompt_model.sagemaker_llama_prompt_model_driver import SageMakerLlamaPromptModelDriver -from .prompt_model.sagemaker_falcon_prompt_model_driver import SageMakerFalconPromptModelDriver - from .image_generation_model.base_image_generation_model_driver import BaseImageGenerationModelDriver from .image_generation_model.bedrock_stable_diffusion_image_generation_model_driver import ( BedrockStableDiffusionImageGenerationModelDriver, @@ -115,10 +105,9 @@ "HuggingFacePipelinePromptDriver", "HuggingFaceHubPromptDriver", "AnthropicPromptDriver", - "AmazonSageMakerPromptDriver", + "AmazonSageMakerJumpstartPromptDriver", "AmazonBedrockPromptDriver", "GooglePromptDriver", - "BaseMultiModelPromptDriver", "DummyPromptDriver", "BaseConversationMemoryDriver", "LocalConversationMemoryDriver", @@ -127,18 +116,14 @@ "BaseEmbeddingDriver", "OpenAiEmbeddingDriver", "AzureOpenAiEmbeddingDriver", - "BaseMultiModelEmbeddingDriver", - "AmazonSageMakerEmbeddingDriver", + "AmazonSageMakerJumpstartEmbeddingDriver", "AmazonBedrockTitanEmbeddingDriver", "AmazonBedrockCohereEmbeddingDriver", "VoyageAiEmbeddingDriver", "HuggingFaceHubEmbeddingDriver", "GoogleEmbeddingDriver", "DummyEmbeddingDriver", - "BaseEmbeddingModelDriver", "CohereEmbeddingDriver", - "SageMakerHuggingFaceEmbeddingModelDriver", - "SageMakerTensorFlowHubEmbeddingModelDriver", "BaseVectorStoreDriver", "LocalVectorStoreDriver", "PineconeVectorStoreDriver", @@ -154,9 +139,6 @@ "AmazonRedshiftSqlDriver", "SnowflakeSqlDriver", "SqlDriver", - "BasePromptModelDriver", - "SageMakerLlamaPromptModelDriver", - "SageMakerFalconPromptModelDriver", "BaseImageGenerationModelDriver", "BedrockStableDiffusionImageGenerationModelDriver", "BedrockTitanImageGenerationModelDriver", diff --git a/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py b/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py deleted file mode 100644 index 4ab6d2bf7..000000000 --- a/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py +++ /dev/null @@ -1,31 +0,0 @@ -from __future__ import annotations -from typing import TYPE_CHECKING -import json -from typing import Any - -from attrs import Factory, define, field - -from griptape.drivers import BaseMultiModelEmbeddingDriver -from griptape.utils import import_optional_dependency - -if TYPE_CHECKING: - from griptape.drivers import BaseEmbeddingModelDriver - import boto3 - - -@define -class AmazonSageMakerEmbeddingDriver(BaseMultiModelEmbeddingDriver): - session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) - sagemaker_client: Any = field( - default=Factory(lambda self: self.session.client("sagemaker-runtime"), takes_self=True), kw_only=True - ) - embedding_model_driver: BaseEmbeddingModelDriver = field(kw_only=True) - - def try_embed_chunk(self, chunk: str) -> list[float]: - payload = self.embedding_model_driver.chunk_to_model_params(chunk) - endpoint_response = self.sagemaker_client.invoke_endpoint( - EndpointName=self.model, ContentType="application/x-text", Body=json.dumps(payload).encode("utf-8") - ) - - response = json.loads(endpoint_response.get("Body").read().decode("utf-8")) - return self.embedding_model_driver.process_output(response) diff --git a/griptape/drivers/embedding/amazon_sagemaker_jumpstart_embedding_driver.py b/griptape/drivers/embedding/amazon_sagemaker_jumpstart_embedding_driver.py new file mode 100644 index 000000000..2b764c2f4 --- /dev/null +++ b/griptape/drivers/embedding/amazon_sagemaker_jumpstart_embedding_driver.py @@ -0,0 +1,53 @@ +from __future__ import annotations +from typing import TYPE_CHECKING +import json +from typing import Any, Optional + +from attrs import Factory, define, field + +from griptape.drivers import BaseEmbeddingDriver +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + import boto3 + + +@define +class AmazonSageMakerJumpstartEmbeddingDriver(BaseEmbeddingDriver): + session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) + sagemaker_client: Any = field( + default=Factory(lambda self: self.session.client("sagemaker-runtime"), takes_self=True), kw_only=True + ) + endpoint: str = field(kw_only=True, metadata={"serializable": True}) + custom_attributes: str = field(default="accept_eula=true", kw_only=True, metadata={"serializable": True}) + inference_component_name: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + + def try_embed_chunk(self, chunk: str) -> list[float]: + payload = {"text_inputs": chunk, "mode": "embedding"} + + endpoint_response = self.sagemaker_client.invoke_endpoint( + EndpointName=self.endpoint, + ContentType="application/json", + Body=json.dumps(payload).encode("utf-8"), + CustomAttributes=self.custom_attributes, + **( + {"InferenceComponentName": self.inference_component_name} + if self.inference_component_name is not None + else {} + ), + ) + + response = json.loads(endpoint_response.get("Body").read().decode("utf-8")) + + if "embedding" in response: + embedding = response["embedding"] + + if embedding: + if isinstance(embedding[0], list): + return embedding[0] + else: + return embedding + else: + raise ValueError("model response is empty") + else: + raise ValueError("invalid response from model") diff --git a/griptape/drivers/embedding/base_multi_model_embedding_driver.py b/griptape/drivers/embedding/base_multi_model_embedding_driver.py deleted file mode 100644 index 90f827ad2..000000000 --- a/griptape/drivers/embedding/base_multi_model_embedding_driver.py +++ /dev/null @@ -1,15 +0,0 @@ -from __future__ import annotations -from abc import ABC -from typing import TYPE_CHECKING - -from attrs import define, field - -from griptape.drivers import BaseEmbeddingDriver - -if TYPE_CHECKING: - from griptape.drivers import BaseEmbeddingModelDriver - - -@define -class BaseMultiModelEmbeddingDriver(BaseEmbeddingDriver, ABC): - embedding_model_driver: BaseEmbeddingModelDriver = field(kw_only=True) diff --git a/griptape/drivers/embedding_model/__init__.py b/griptape/drivers/embedding_model/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/griptape/drivers/embedding_model/base_embedding_model_driver.py b/griptape/drivers/embedding_model/base_embedding_model_driver.py deleted file mode 100644 index ad7bf3bda..000000000 --- a/griptape/drivers/embedding_model/base_embedding_model_driver.py +++ /dev/null @@ -1,11 +0,0 @@ -from attrs import define -from abc import ABC, abstractmethod - - -@define -class BaseEmbeddingModelDriver(ABC): - @abstractmethod - def chunk_to_model_params(self, chunk: str) -> dict: ... - - @abstractmethod - def process_output(self, output: dict) -> list[float]: ... diff --git a/griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py b/griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py deleted file mode 100644 index dceffcd8a..000000000 --- a/griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py +++ /dev/null @@ -1,11 +0,0 @@ -from attrs import define -from griptape.drivers import BaseEmbeddingModelDriver - - -@define -class SageMakerHuggingFaceEmbeddingModelDriver(BaseEmbeddingModelDriver): - def chunk_to_model_params(self, chunk: str) -> dict: - return {"text_inputs": chunk} - - def process_output(self, output: dict) -> list[float]: - return output["embedding"][0] diff --git a/griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py b/griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py deleted file mode 100644 index 9d9632fb0..000000000 --- a/griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py +++ /dev/null @@ -1,11 +0,0 @@ -from attrs import define -from griptape.drivers import BaseEmbeddingModelDriver - - -@define -class SageMakerTensorFlowHubEmbeddingModelDriver(BaseEmbeddingModelDriver): - def chunk_to_model_params(self, chunk: str) -> dict: - return {"text_inputs": chunk} - - def process_output(self, output: dict) -> list[float]: - return output["embedding"] diff --git a/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py b/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py new file mode 100644 index 000000000..54247d001 --- /dev/null +++ b/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +import json +from collections.abc import Iterator +from typing import TYPE_CHECKING, Any, Optional + +from attrs import Factory, define, field + +from griptape.artifacts import TextArtifact +from griptape.drivers.prompt.base_prompt_driver import BasePromptDriver +from griptape.tokenizers import HuggingFaceTokenizer +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + import boto3 + + from griptape.utils import PromptStack + + +@define +class AmazonSageMakerJumpstartPromptDriver(BasePromptDriver): + session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) + sagemaker_client: Any = field( + default=Factory(lambda self: self.session.client("sagemaker-runtime"), takes_self=True), kw_only=True + ) + endpoint: str = field(kw_only=True, metadata={"serializable": True}) + custom_attributes: str = field(default="accept_eula=true", kw_only=True, metadata={"serializable": True}) + inference_component_name: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + stream: bool = field(default=False, kw_only=True, metadata={"serializable": True}) + max_tokens: int = field(default=250, kw_only=True, metadata={"serializable": True}) + tokenizer: HuggingFaceTokenizer = field( + default=Factory( + lambda self: HuggingFaceTokenizer( + tokenizer=import_optional_dependency("transformers").AutoTokenizer.from_pretrained(self.model), + max_output_tokens=self.max_tokens, + ), + takes_self=True, + ), + kw_only=True, + ) + + @stream.validator # pyright: ignore + def validate_stream(self, _, stream): + if stream: + raise ValueError("streaming is not supported") + + def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + payload = {"inputs": self._to_model_input(prompt_stack), "parameters": self._to_model_params(prompt_stack)} + + response = self.sagemaker_client.invoke_endpoint( + EndpointName=self.endpoint, + ContentType="application/json", + Body=json.dumps(payload), + CustomAttributes=self.custom_attributes, + **( + {"InferenceComponentName": self.inference_component_name} + if self.inference_component_name is not None + else {} + ), + ) + + decoded_body = json.loads(response["Body"].read().decode("utf8")) + + if isinstance(decoded_body, list): + if decoded_body: + return TextArtifact(decoded_body[0]["generated_text"]) + else: + raise ValueError("model response is empty") + else: + return TextArtifact(decoded_body["generated_text"]) + + def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + raise NotImplementedError("streaming is not supported") + + def _to_model_input(self, prompt_stack: PromptStack) -> str: + prompt = self.tokenizer.tokenizer.apply_chat_template( + [{"role": i.role, "content": i.content} for i in prompt_stack.inputs], + tokenize=False, + add_generation_prompt=True, + ) + + if isinstance(prompt, str): + return prompt + else: + raise ValueError("Invalid output type.") + + def _to_model_params(self, prompt_stack: PromptStack) -> dict: + return { + "temperature": self.temperature, + "max_new_tokens": self.max_tokens, + "do_sample": True, + "eos_token_id": self.tokenizer.tokenizer.eos_token_id, + "stop_strings": self.tokenizer.stop_sequences, + "return_full_text": False, + } diff --git a/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py b/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py deleted file mode 100644 index 2934ea642..000000000 --- a/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py +++ /dev/null @@ -1,52 +0,0 @@ -from __future__ import annotations -import json -from typing import TYPE_CHECKING, Any -from collections.abc import Iterator -from attrs import define, field, Factory -from griptape.artifacts import TextArtifact -from griptape.utils import import_optional_dependency -from .base_multi_model_prompt_driver import BaseMultiModelPromptDriver - -if TYPE_CHECKING: - from griptape.utils import PromptStack - import boto3 - - -@define -class AmazonSageMakerPromptDriver(BaseMultiModelPromptDriver): - session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) - sagemaker_client: Any = field( - default=Factory(lambda self: self.session.client("sagemaker-runtime"), takes_self=True), kw_only=True - ) - endpoint: str = field(kw_only=True, metadata={"serializable": True}) - model: str = field(default=None, kw_only=True, metadata={"serializable": True}) - custom_attributes: str = field(default="accept_eula=true", kw_only=True, metadata={"serializable": True}) - stream: bool = field(default=False, kw_only=True, metadata={"serializable": True}) - - @stream.validator # pyright: ignore - def validate_stream(self, _, stream): - if stream: - raise ValueError("streaming is not supported") - - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - payload = { - "inputs": self.prompt_model_driver.prompt_stack_to_model_input(prompt_stack), - "parameters": self.prompt_model_driver.prompt_stack_to_model_params(prompt_stack), - } - response = self.sagemaker_client.invoke_endpoint( - EndpointName=self.endpoint, - ContentType="application/json", - Body=json.dumps(payload), - CustomAttributes=self.custom_attributes, - **({"InferenceComponentName": self.model} if self.model is not None else {}), - ) - - decoded_body = json.loads(response["Body"].read().decode("utf8")) - - if decoded_body: - return self.prompt_model_driver.process_output(decoded_body) - else: - raise Exception("model response is empty") - - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - raise NotImplementedError("streaming is not supported") diff --git a/griptape/drivers/prompt/base_multi_model_prompt_driver.py b/griptape/drivers/prompt/base_multi_model_prompt_driver.py deleted file mode 100644 index 5411ea730..000000000 --- a/griptape/drivers/prompt/base_multi_model_prompt_driver.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import annotations -from attrs import define, field -from abc import ABC -from .base_prompt_driver import BasePromptDriver -from typing import TYPE_CHECKING, Optional - -if TYPE_CHECKING: - from griptape.tokenizers import BaseTokenizer - from griptape.drivers import BasePromptModelDriver - - -@define -class BaseMultiModelPromptDriver(BasePromptDriver, ABC): - """Prompt Driver for platforms like Amazon SageMaker, and Amazon Bedrock that host many LLM models. - - Instances of this Prompt Driver require a Prompt Model Driver which is used to convert the prompt stack - into a model input and parameters, and to process the model output. - - Attributes: - model: Name of the model to use. - tokenizer: Tokenizer to use. Defaults to the Tokenizer of the Prompt Model Driver. - prompt_model_driver: Prompt Model Driver to use. - """ - - tokenizer: Optional[BaseTokenizer] = field(default=None, kw_only=True) - prompt_model_driver: BasePromptModelDriver = field(kw_only=True, metadata={"serializable": True}) - stream: bool = field(default=False, kw_only=True, metadata={"serializable": True}) - - @stream.validator # pyright: ignore - def validate_stream(self, _, stream): - if stream and not self.prompt_model_driver.supports_streaming: - raise ValueError(f"{self.prompt_model_driver.__class__.__name__} does not support streaming") - - def __attrs_post_init__(self) -> None: - self.prompt_model_driver.prompt_driver = self - - if not self.tokenizer: - self.tokenizer = self.prompt_model_driver.tokenizer diff --git a/griptape/drivers/prompt_model/__init__.py b/griptape/drivers/prompt_model/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/griptape/drivers/prompt_model/base_prompt_model_driver.py b/griptape/drivers/prompt_model/base_prompt_model_driver.py deleted file mode 100644 index 096802370..000000000 --- a/griptape/drivers/prompt_model/base_prompt_model_driver.py +++ /dev/null @@ -1,29 +0,0 @@ -from __future__ import annotations -from abc import ABC, abstractmethod -from typing import Optional -from attrs import define, field -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack -from griptape.drivers import BasePromptDriver -from griptape.tokenizers import BaseTokenizer -from griptape.mixins import SerializableMixin - - -@define -class BasePromptModelDriver(SerializableMixin, ABC): - max_tokens: Optional[int] = field(default=None, kw_only=True) - prompt_driver: Optional[BasePromptDriver] = field(default=None, kw_only=True) - supports_streaming: bool = field(default=True, kw_only=True) - - @property - @abstractmethod - def tokenizer(self) -> BaseTokenizer: ... - - @abstractmethod - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str | list | dict: ... - - @abstractmethod - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: ... - - @abstractmethod - def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: ... diff --git a/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py b/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py deleted file mode 100644 index a5a8a4dc9..000000000 --- a/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py +++ /dev/null @@ -1,42 +0,0 @@ -from __future__ import annotations -from attrs import define, field -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack, import_optional_dependency -from griptape.drivers import BasePromptModelDriver -from griptape.tokenizers import HuggingFaceTokenizer - - -@define -class SageMakerFalconPromptModelDriver(BasePromptModelDriver): - DEFAULT_MAX_TOKENS = 600 - - _tokenizer: HuggingFaceTokenizer = field(default=None, kw_only=True) - - @property - def tokenizer(self) -> HuggingFaceTokenizer: - if self._tokenizer is None: - self._tokenizer = HuggingFaceTokenizer( - tokenizer=import_optional_dependency("transformers").AutoTokenizer.from_pretrained("tiiuae/falcon-40b"), - max_output_tokens=self.max_tokens or self.DEFAULT_MAX_TOKENS, - ) - return self._tokenizer - - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str: - return self.prompt_driver.prompt_stack_to_string(prompt_stack) - - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: - prompt = self.prompt_stack_to_model_input(prompt_stack) - stop_sequences = self.prompt_driver.tokenizer.stop_sequences - - return { - "max_new_tokens": self.prompt_driver.max_output_tokens(prompt), - "temperature": self.prompt_driver.temperature, - "do_sample": True, - "stop": stop_sequences, - } - - def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: - if isinstance(output, list): - return TextArtifact(output[0]["generated_text"].strip()) - else: - raise ValueError("output must be an instance of 'list'") diff --git a/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py b/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py deleted file mode 100644 index 7e934d4a6..000000000 --- a/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py +++ /dev/null @@ -1,47 +0,0 @@ -from __future__ import annotations -from attrs import define, field -from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack, import_optional_dependency -from griptape.drivers import BasePromptModelDriver -from griptape.tokenizers import HuggingFaceTokenizer - - -@define -class SageMakerLlamaPromptModelDriver(BasePromptModelDriver): - # Default context length for all Llama 3 models is 8K as per https://huggingface.co/blog/llama3 - DEFAULT_MAX_INPUT_TOKENS = 8000 - - _tokenizer: HuggingFaceTokenizer = field(default=None, kw_only=True) - - @property - def tokenizer(self) -> HuggingFaceTokenizer: - if self._tokenizer is None: - self._tokenizer = HuggingFaceTokenizer( - tokenizer=import_optional_dependency("transformers").AutoTokenizer.from_pretrained( - "meta-llama/Meta-Llama-3-8B-Instruct", model_max_length=self.DEFAULT_MAX_INPUT_TOKENS - ), - max_output_tokens=self.max_tokens or self.DEFAULT_MAX_INPUT_TOKENS, - ) - return self._tokenizer - - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str: - return self.tokenizer.tokenizer.apply_chat_template( # pyright: ignore - [{"role": i.role, "content": i.content} for i in prompt_stack.inputs], - tokenize=False, - add_generation_prompt=True, - ) - - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: - prompt = self.prompt_driver.prompt_stack_to_string(prompt_stack) - return { - "max_new_tokens": self.prompt_driver.max_output_tokens(prompt), - "temperature": self.prompt_driver.temperature, - "stop": self.tokenizer.tokenizer.eos_token, - } - - def process_output(self, output: dict | list[dict] | str | bytes) -> TextArtifact: - # This output format is specific to the Llama 3 Instruct models when deployed via SageMaker JumpStart. - if isinstance(output, dict): - return TextArtifact(output["generated_text"]) - else: - raise ValueError("Invalid output format.") diff --git a/griptape/schemas/base_schema.py b/griptape/schemas/base_schema.py index 2dd454b53..6ba23d6fe 100644 --- a/griptape/schemas/base_schema.py +++ b/griptape/schemas/base_schema.py @@ -103,7 +103,7 @@ def _resolve_types(cls, attrs_cls: type) -> None: from griptape.utils.import_utils import import_optional_dependency, is_dependency_installed # These modules are required to avoid `NameError`s when resolving types. - from griptape.drivers import BaseConversationMemoryDriver, BasePromptDriver, BasePromptModelDriver + from griptape.drivers import BaseConversationMemoryDriver, BasePromptDriver from griptape.structures import Structure from griptape.utils import PromptStack from griptape.tokenizers.base_tokenizer import BaseTokenizer @@ -121,7 +121,6 @@ def _resolve_types(cls, attrs_cls: type) -> None: "BaseConversationMemoryDriver": BaseConversationMemoryDriver, "BasePromptDriver": BasePromptDriver, "BaseTokenizer": BaseTokenizer, - "BasePromptModelDriver": BasePromptModelDriver, "boto3": boto3, "Client": Client, }, diff --git a/tests/unit/drivers/embedding/test_sagemaker_embedding_driver.py b/tests/unit/drivers/embedding/test_sagemaker_embedding_driver.py deleted file mode 100644 index 9ceb98557..000000000 --- a/tests/unit/drivers/embedding/test_sagemaker_embedding_driver.py +++ /dev/null @@ -1,33 +0,0 @@ -import pytest -from unittest import mock -from griptape.drivers import AmazonSageMakerEmbeddingDriver, SageMakerHuggingFaceEmbeddingModelDriver -from griptape.tokenizers.openai_tokenizer import OpenAiTokenizer - - -class TestAmazonSagemakerEmbeddingDriver: - @pytest.fixture(autouse=True) - def mock_session(self, mocker): - fake_embeddings = b'{"embedding": [[0, 1, 0]]}' - mock_session_class = mocker.patch("boto3.Session") - mock_session_object = mock.Mock() - mock_client = mock.Mock() - mock_response = mock.Mock() - - mock_response.get().read.return_value = fake_embeddings - mock_client.invoke_endpoint.return_value = mock_response - mock_session_object.client.return_value = mock_client - mock_session_class.return_value = mock_session_object - - def test_init(self): - assert AmazonSageMakerEmbeddingDriver( - model="test-endpoint", - tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), - embedding_model_driver=SageMakerHuggingFaceEmbeddingModelDriver(), - ) - - def test_try_embed_chunk(self): - assert AmazonSageMakerEmbeddingDriver( - model="test-endpoint", - tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), - embedding_model_driver=SageMakerHuggingFaceEmbeddingModelDriver(), - ).try_embed_chunk("foobar") == [0, 1, 0] diff --git a/tests/unit/drivers/embedding/test_sagemaker_jumpstart_embedding_driver.py b/tests/unit/drivers/embedding/test_sagemaker_jumpstart_embedding_driver.py new file mode 100644 index 000000000..268b47c54 --- /dev/null +++ b/tests/unit/drivers/embedding/test_sagemaker_jumpstart_embedding_driver.py @@ -0,0 +1,59 @@ +import pytest +from unittest import mock +from griptape.drivers import AmazonSageMakerJumpstartEmbeddingDriver +from griptape.tokenizers.openai_tokenizer import OpenAiTokenizer + + +class TestAmazonSageMakerJumpstartEmbeddingDriver: + @pytest.fixture(autouse=True) + def mock_client(self, mocker): + mock_session_class = mocker.patch("boto3.Session") + mock_session_object = mock.Mock() + mock_client = mock.Mock() + mock_response = mock.Mock() + + mock_client.invoke_endpoint.return_value = mock_response + mock_session_object.client.return_value = mock_client + mock_session_class.return_value = mock_session_object + + return mock_response + + def test_init(self): + assert AmazonSageMakerJumpstartEmbeddingDriver( + endpoint="test-endpoint", + model="test-endpoint", + tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), + ) + + def test_try_embed_chunk(self, mock_client): + mock_client.get().read.return_value = b'{"embedding": [[0, 1, 0]]}' + assert AmazonSageMakerJumpstartEmbeddingDriver( + endpoint="test-endpoint", + model="test-model", + tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), + ).try_embed_chunk("foobar") == [0, 1, 0] + + mock_client.get().read.return_value = b'{"embedding": [0, 2, 0]}' + assert AmazonSageMakerJumpstartEmbeddingDriver( + endpoint="test-endpoint", + model="test-model", + tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), + ).try_embed_chunk("foobar") == [0, 2, 0] + + mock_client.get().read.return_value = b'{"embedding": []}' + with pytest.raises(ValueError) as e: + assert AmazonSageMakerJumpstartEmbeddingDriver( + endpoint="test-endpoint", + model="test-model", + tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), + ).try_embed_chunk("foobar") == [0, 2, 0] + assert str(e) == "model response is empty" + + mock_client.get().read.return_value = b"{}" + with pytest.raises(ValueError) as e: + assert AmazonSageMakerJumpstartEmbeddingDriver( + endpoint="test-endpoint", + model="test-model", + tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), + ).try_embed_chunk("foobar") == [0, 2, 0] + assert str(e) == "invalid response from model" diff --git a/tests/unit/drivers/embedding_model/__init__.py b/tests/unit/drivers/embedding_model/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/unit/drivers/embedding_model/test_sagemaker_huggingface_embedding_model_driver.py b/tests/unit/drivers/embedding_model/test_sagemaker_huggingface_embedding_model_driver.py deleted file mode 100644 index b63e593b3..000000000 --- a/tests/unit/drivers/embedding_model/test_sagemaker_huggingface_embedding_model_driver.py +++ /dev/null @@ -1,21 +0,0 @@ -import boto3 -import pytest -from griptape.drivers import AmazonSageMakerEmbeddingDriver, SageMakerHuggingFaceEmbeddingModelDriver -from tests.mocks.mock_tokenizer import MockTokenizer - - -class TestSageMakerHuggingFaceEmbeddingModelDriver: - @pytest.fixture - def driver(self): - return AmazonSageMakerEmbeddingDriver( - model="foo", - session=boto3.Session(region_name="us-east-1"), - tokenizer=MockTokenizer(model="foo"), - embedding_model_driver=SageMakerHuggingFaceEmbeddingModelDriver(), - ).embedding_model_driver - - def test_chunk_to_model_params(self, driver): - assert driver.chunk_to_model_params("foobar")["text_inputs"] == "foobar" - - def test_process_output(self, driver): - assert driver.process_output({"embedding": [["foobar"]]}) == ["foobar"] diff --git a/tests/unit/drivers/embedding_model/test_sagemaker_tensorflow_hub_embedding_model_driver.py b/tests/unit/drivers/embedding_model/test_sagemaker_tensorflow_hub_embedding_model_driver.py deleted file mode 100644 index 7080b93fb..000000000 --- a/tests/unit/drivers/embedding_model/test_sagemaker_tensorflow_hub_embedding_model_driver.py +++ /dev/null @@ -1,21 +0,0 @@ -import boto3 -import pytest -from griptape.drivers import AmazonSageMakerEmbeddingDriver, SageMakerTensorFlowHubEmbeddingModelDriver -from tests.mocks.mock_tokenizer import MockTokenizer - - -class TestSageMakerTensorFlowHubFaceEmbeddingModelDriver: - @pytest.fixture - def driver(self): - return AmazonSageMakerEmbeddingDriver( - model="foo", - session=boto3.Session(region_name="us-east-1"), - tokenizer=MockTokenizer(model="foo"), - embedding_model_driver=SageMakerTensorFlowHubEmbeddingModelDriver(), - ).embedding_model_driver - - def test_chunk_to_model_params(self, driver): - assert driver.chunk_to_model_params("foobar")["text_inputs"] == "foobar" - - def test_process_output(self, driver): - assert driver.process_output({"embedding": ["foobar"]}) == ["foobar"] diff --git a/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py new file mode 100644 index 000000000..3ac9e5164 --- /dev/null +++ b/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py @@ -0,0 +1,134 @@ +from typing import Any +from botocore.response import StreamingBody +from griptape.tokenizers import HuggingFaceTokenizer +from griptape.drivers.prompt.amazon_sagemaker_jumpstart_prompt_driver import AmazonSageMakerJumpstartPromptDriver +from griptape.utils import PromptStack +from io import BytesIO +import json +import pytest + +from griptape.utils.constants import Constants + + +def to_streaming_body(data: Any) -> StreamingBody: + bytes = json.dumps(data).encode("utf-8") + + return StreamingBody(BytesIO(bytes), len(bytes)) + + +class TestAmazonSageMakerJumpstartPromptDriver: + @pytest.fixture(autouse=True) + def tokenizer(self, mocker): + from_pretrained = mocker.patch("transformers.AutoTokenizer").from_pretrained + from_pretrained.return_value.apply_chat_template.return_value = "foo\n\nUser: bar" + from_pretrained.return_value.model_max_length = 8000 + from_pretrained.return_value.eos_token_id = 1 + + return from_pretrained + + @pytest.fixture(autouse=True) + def mock_client(self, mocker): + return mocker.patch("boto3.Session").return_value.client.return_value + + def test_init(self): + assert AmazonSageMakerJumpstartPromptDriver(endpoint="foo", model="bar") + + def test_try_run(self, mock_client): + # Given + driver = AmazonSageMakerJumpstartPromptDriver(endpoint="model", model="model") + prompt_stack = PromptStack() + prompt_stack.add_user_input("prompt-stack") + + # When + response_body = [{"generated_text": "foobar"}] + mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body(response_body)} + text_artifact = driver.try_run(prompt_stack) + assert isinstance(driver.tokenizer, HuggingFaceTokenizer) + + # Then + mock_client.invoke_endpoint.assert_called_with( + EndpointName=driver.endpoint, + ContentType="application/json", + Body=json.dumps( + { + "inputs": "foo\n\nUser: bar", + "parameters": { + "temperature": driver.temperature, + "max_new_tokens": 250, + "do_sample": True, + "eos_token_id": 1, + "stop_strings": [Constants.RESPONSE_STOP_SEQUENCE], + "return_full_text": False, + }, + } + ), + CustomAttributes="accept_eula=true", + ) + + assert text_artifact.value == "foobar" + + # When + response_body = {"generated_text": "foobar"} + mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body(response_body)} + text_artifact = driver.try_run(prompt_stack) + assert isinstance(driver.tokenizer, HuggingFaceTokenizer) + + # Then + mock_client.invoke_endpoint.assert_called_with( + EndpointName=driver.endpoint, + ContentType="application/json", + Body=json.dumps( + { + "inputs": "foo\n\nUser: bar", + "parameters": { + "temperature": driver.temperature, + "max_new_tokens": 250, + "do_sample": True, + "eos_token_id": 1, + "stop_strings": [Constants.RESPONSE_STOP_SEQUENCE], + "return_full_text": False, + }, + } + ), + CustomAttributes="accept_eula=true", + ) + + assert text_artifact.value == "foobar" + + def test_try_stream(self, mock_client): + # Given + driver = AmazonSageMakerJumpstartPromptDriver(endpoint="model", model="model") + prompt_stack = PromptStack() + prompt_stack.add_user_input("prompt-stack") + + # When + with pytest.raises(NotImplementedError) as e: + driver.try_stream(prompt_stack) + + # Then + assert e.value.args[0] == "streaming is not supported" + + def test_stream_init(self): + # Given + driver = AmazonSageMakerJumpstartPromptDriver(endpoint="model", model="model") + + # When + with pytest.raises(ValueError) as e: + driver.stream = True + + # Then + assert e.value.args[0] == "streaming is not supported" + + def test_try_run_throws_on_empty_response(self, mock_client): + # Given + driver = AmazonSageMakerJumpstartPromptDriver(endpoint="model", model="model") + mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body([])} + prompt_stack = PromptStack() + prompt_stack.add_user_input("prompt-stack") + + # When + with pytest.raises(Exception) as e: + driver.try_run(prompt_stack) + + # Then + assert e.value.args[0] == "model response is empty" diff --git a/tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py deleted file mode 100644 index c6692e1ba..000000000 --- a/tests/unit/drivers/prompt/test_amazon_sagemaker_prompt_driver.py +++ /dev/null @@ -1,90 +0,0 @@ -from botocore.response import StreamingBody -from griptape.artifacts import TextArtifact -from griptape.drivers import AmazonSageMakerPromptDriver, SageMakerFalconPromptModelDriver -from griptape.tokenizers import HuggingFaceTokenizer, OpenAiTokenizer -from griptape.utils import PromptStack -from io import BytesIO -from unittest.mock import Mock -import json -import pytest - - -class TestAmazonSageMakerPromptDriver: - @pytest.fixture - def mock_model_driver(self): - mock_model_driver = Mock() - mock_model_driver.prompt_stack_to_model_input.return_value = "model-inputs" - mock_model_driver.prompt_stack_to_model_params.return_value = "model-params" - mock_model_driver.process_output.return_value = TextArtifact("model-output") - return mock_model_driver - - @pytest.fixture(autouse=True) - def mock_client(self, mocker): - return mocker.patch("boto3.Session").return_value.client.return_value - - def test_init(self): - assert AmazonSageMakerPromptDriver(endpoint="foo", prompt_model_driver=SageMakerFalconPromptModelDriver()) - - def test_custom_tokenizer(self): - assert isinstance( - AmazonSageMakerPromptDriver( - endpoint="foo", prompt_model_driver=SageMakerFalconPromptModelDriver() - ).tokenizer, - HuggingFaceTokenizer, - ) - - assert isinstance( - AmazonSageMakerPromptDriver( - endpoint="foo", - tokenizer=OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL), - prompt_model_driver=SageMakerFalconPromptModelDriver(), - ).tokenizer, - OpenAiTokenizer, - ) - - def test_try_run(self, mock_model_driver, mock_client): - # Given - driver = AmazonSageMakerPromptDriver(endpoint="model", prompt_model_driver=mock_model_driver) - prompt_stack = PromptStack() - prompt_stack.add_user_input("prompt-stack") - response_body = "invoke-endpoint-response-body" - mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body(response_body)} - - # When - text_artifact = driver.try_run(prompt_stack) - - # Then - mock_model_driver.prompt_stack_to_model_input.assert_called_once_with(prompt_stack) - mock_model_driver.prompt_stack_to_model_params.assert_called_once_with(prompt_stack) - mock_client.invoke_endpoint.assert_called_once_with( - EndpointName=driver.endpoint, - ContentType="application/json", - Body=json.dumps( - { - "inputs": mock_model_driver.prompt_stack_to_model_input.return_value, - "parameters": mock_model_driver.prompt_stack_to_model_params.return_value, - } - ), - CustomAttributes="accept_eula=true", - ) - mock_model_driver.process_output.assert_called_once_with(response_body) - assert text_artifact == mock_model_driver.process_output.return_value - - def test_try_run_throws_on_empty_response(self, mock_model_driver, mock_client): - # Given - driver = AmazonSageMakerPromptDriver(endpoint="model", prompt_model_driver=mock_model_driver) - mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body("")} - prompt_stack = PromptStack() - prompt_stack.add_user_input("prompt-stack") - - # When - with pytest.raises(Exception) as e: - driver.try_run(prompt_stack) - - # Then - assert e.value.args[0] == "model response is empty" - - -def to_streaming_body(text: str) -> StreamingBody: - bytes = json.dumps(text).encode("utf-8") - return StreamingBody(BytesIO(bytes), len(bytes)) diff --git a/tests/unit/drivers/prompt_models/__init__.py b/tests/unit/drivers/prompt_models/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py deleted file mode 100644 index 78d990229..000000000 --- a/tests/unit/drivers/prompt_models/test_sagemaker_falcon_prompt_model_driver.py +++ /dev/null @@ -1,43 +0,0 @@ -import boto3 -import pytest -from griptape.utils import PromptStack -from griptape.drivers import AmazonSageMakerPromptDriver, SageMakerFalconPromptModelDriver - - -class TestSageMakerFalconPromptModelDriver: - @pytest.fixture - def driver(self): - return AmazonSageMakerPromptDriver( - endpoint="endpoint-name", - session=boto3.Session(region_name="us-east-1"), - prompt_model_driver=SageMakerFalconPromptModelDriver(), - temperature=0.12345, - ).prompt_model_driver - - @pytest.fixture - def stack(self): - stack = PromptStack() - - stack.add_system_input("foo") - stack.add_user_input("bar") - - return stack - - def test_init(self, driver): - assert driver.prompt_driver is not None - - def test_prompt_stack_to_model_input(self, driver, stack): - model_input = driver.prompt_stack_to_model_input(stack) - - assert isinstance(model_input, str) - assert model_input.startswith("foo\n\nUser: bar") - - def test_prompt_stack_to_model_params(self, driver, stack): - assert driver.prompt_stack_to_model_params(stack)["max_new_tokens"] == 590 - assert driver.prompt_stack_to_model_params(stack)["temperature"] == 0.12345 - - def test_process_output(self, driver, stack): - assert driver.process_output([{"generated_text": "foobar"}]).value == "foobar" - - def test_tokenizer_max_model_length(self, driver): - assert driver.tokenizer.tokenizer.model_max_length == 2048 diff --git a/tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py b/tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py deleted file mode 100644 index b39ce458e..000000000 --- a/tests/unit/drivers/prompt_models/test_sagemaker_llama_prompt_model_driver.py +++ /dev/null @@ -1,67 +0,0 @@ -import boto3 -import pytest -from griptape.utils import PromptStack -from griptape.drivers import AmazonSageMakerPromptDriver, SageMakerLlamaPromptModelDriver - - -class TestSageMakerLlamaPromptModelDriver: - @pytest.fixture(autouse=True) - def llama3_instruct_tokenizer(self, mocker): - tokenizer = mocker.patch("transformers.AutoTokenizer").return_value - tokenizer.model_max_length = 8000 - - return tokenizer - - @pytest.fixture(autouse=True) - def hugging_face_tokenizer(self, mocker, llama3_instruct_tokenizer): - tokenizer = mocker.patch( - "griptape.drivers.prompt_model.sagemaker_llama_prompt_model_driver.HuggingFaceTokenizer" - ).return_value - tokenizer.count_output_tokens_left.return_value = 7991 - tokenizer.tokenizer = llama3_instruct_tokenizer - return tokenizer - - @pytest.fixture - def driver(self): - return AmazonSageMakerPromptDriver( - endpoint="endpoint-name", - model="inference-component-name", - session=boto3.Session(region_name="us-east-1"), - prompt_model_driver=SageMakerLlamaPromptModelDriver(), - temperature=0.12345, - ).prompt_model_driver - - @pytest.fixture - def stack(self): - stack = PromptStack() - - stack.add_system_input("foo") - stack.add_user_input("bar") - - return stack - - def test_init(self, driver): - assert driver.prompt_driver is not None - - def test_prompt_stack_to_model_input(self, driver, stack, hugging_face_tokenizer): - driver.prompt_stack_to_model_input(stack) - - hugging_face_tokenizer.tokenizer.apply_chat_template.assert_called_once_with( - [{"role": "system", "content": "foo"}, {"role": "user", "content": "bar"}], - tokenize=False, - add_generation_prompt=True, - ) - - def test_prompt_stack_to_model_params(self, driver, stack): - assert driver.prompt_stack_to_model_params(stack)["max_new_tokens"] == 7991 - assert driver.prompt_stack_to_model_params(stack)["temperature"] == 0.12345 - - def test_process_output(self, driver, stack): - assert driver.process_output({"generated_text": "foobar"}).value == "foobar" - - def test_process_output_invalid_format(self, driver, stack): - with pytest.raises(ValueError): - assert driver.process_output([{"generated_text": "foobar"}]) - - def test_tokenizer_max_model_length(self, driver): - assert driver.tokenizer.tokenizer.model_max_length == 8000 diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index d21d52c93..5206b6bd4 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -17,9 +17,7 @@ CoherePromptDriver, OpenAiChatPromptDriver, AzureOpenAiChatPromptDriver, - AmazonSageMakerPromptDriver, - SageMakerLlamaPromptModelDriver, - SageMakerFalconPromptModelDriver, + AmazonSageMakerJumpstartPromptDriver, GooglePromptDriver, ) @@ -188,17 +186,11 @@ class TesterPromptDriverOption: prompt_driver=AmazonBedrockPromptDriver(model="mistral.mistral-small-2402-v1:0"), enabled=True ), "SAGEMAKER_LLAMA_7B": TesterPromptDriverOption( - prompt_driver=AmazonSageMakerPromptDriver( - endpoint=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], - prompt_model_driver=SageMakerLlamaPromptModelDriver(max_tokens=4096), - ), + prompt_driver=AmazonSageMakerJumpstartPromptDriver(endpoint=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"]), enabled=False, ), "SAGEMAKER_FALCON_7b": TesterPromptDriverOption( - prompt_driver=AmazonSageMakerPromptDriver( - endpoint=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], - prompt_model_driver=SageMakerFalconPromptModelDriver(), - ), + prompt_driver=AmazonSageMakerJumpstartPromptDriver(endpoint=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"]), enabled=False, ), "GOOGLE_GEMINI_PRO": TesterPromptDriverOption( From fc9c9766a3e7ce5f66c3cea21ad64db5b153051d Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Mon, 10 Jun 2024 11:16:34 -0500 Subject: [PATCH 088/145] Update `GriptapeCloudKnowledgeBaseClient` description fetching (#846) --- .../tool.py | 16 ++++--- ...st_griptape_cloud_knowledge_base_client.py | 46 ++++++++++++++++--- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py index 96d24cccf..6fed6e618 100644 --- a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py +++ b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py @@ -48,10 +48,14 @@ def _get_knowledge_base_description(self) -> str: else: url = urljoin(self.base_url.strip("/"), f"/api/knowledge-bases/{self.knowledge_base_id}/") - response = get(url, headers=self.headers).json() - if "description" in response: - return response["description"] + response = get(url, headers=self.headers) + response_body = response.json() + if response.status_code == 200: + if "description" in response_body: + return response_body["description"] + else: + raise ValueError( + f"No description found for Knowledge Base {self.knowledge_base_id}. Please set a description, or manually set the `GriptapeCloudKnowledgeBaseClient.description` attribute." + ) else: - raise ValueError( - f"No description found for Knowledge Base {self.knowledge_base_id}. Please set a description, or manually set the `GriptapeCloudKnowledgeBaseClient.description` attribute." - ) + raise ValueError(f"Error accessing Knowledge Base {self.knowledge_base_id}.") diff --git a/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py b/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py index a50929d66..9feba9cbf 100644 --- a/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py +++ b/tests/unit/tools/test_griptape_cloud_knowledge_base_client.py @@ -1,5 +1,6 @@ import pytest -from griptape.artifacts import TextArtifact +from requests import exceptions +from griptape.artifacts import TextArtifact, ErrorArtifact class TestGriptapeCloudKnowledgeBaseClient: @@ -8,10 +9,12 @@ def client(self, mocker): from griptape.tools import GriptapeCloudKnowledgeBaseClient mock_response = mocker.Mock() + mock_response.status_code = 201 mock_response.text.return_value = "foo bar" mocker.patch("requests.post", return_value=mock_response) mock_response = mocker.Mock() + mock_response.status_code = 200 mock_response.json.return_value = {"description": "fizz buzz"} mocker.patch("requests.get", return_value=mock_response) @@ -25,15 +28,45 @@ def client_no_description(self, mocker): mock_response = mocker.Mock() mock_response.json.return_value = {} + mock_response.status_code = 200 mocker.patch("requests.get", return_value=mock_response) return GriptapeCloudKnowledgeBaseClient( base_url="https://api.griptape.ai", api_key="foo bar", knowledge_base_id="1" ) + @pytest.fixture + def client_kb_not_found(self, mocker): + from griptape.tools import GriptapeCloudKnowledgeBaseClient + + mock_response = mocker.Mock() + mock_response.json.return_value = {} + mock_response.status_code = 404 + mocker.patch("requests.get", return_value=mock_response) + + return GriptapeCloudKnowledgeBaseClient( + base_url="https://api.griptape.ai", api_key="foo bar", knowledge_base_id="1" + ) + + @pytest.fixture + def client_kb_error(self, mocker): + from griptape.tools import GriptapeCloudKnowledgeBaseClient + + mock_response = mocker.Mock() + mock_response.status_code = 500 + mocker.patch("requests.post", return_value=mock_response, side_effect=exceptions.RequestException("error")) + + return GriptapeCloudKnowledgeBaseClient( + base_url="https://api.griptape.ai", api_key="foo bar", knowledge_base_id="1" + ) + def test_query(self, client): assert isinstance(client.query({"values": {"query": "foo bar"}}), TextArtifact) + def test_query_error(self, client_kb_error): + assert isinstance(client_kb_error.query({"values": {"query": "foo bar"}}), ErrorArtifact) + assert client_kb_error.query({"values": {"query": "foo bar"}}).value == "error" + def test_get_knowledge_base_description(self, client): assert client._get_knowledge_base_description() == "fizz buzz" @@ -41,10 +74,11 @@ def test_get_knowledge_base_description(self, client): assert client._get_knowledge_base_description() == "foo bar" def test_get_knowledge_base_description_error(self, client_no_description): - with pytest.raises(ValueError) as e: + exception_match_text = f"No description found for Knowledge Base {client_no_description.knowledge_base_id}. Please set a description, or manually set the `GriptapeCloudKnowledgeBaseClient.description` attribute." + with pytest.raises(ValueError, match=exception_match_text) as e: client_no_description._get_knowledge_base_description() - assert ( - str(e) - == f"No description found for Knowledge Base {client_no_description.knowledge_base_id}. Please set a description, or manually set the `GriptapeCloudKnowledgeBaseClient.description` attribute." - ) + def test_get_knowledge_base_kb_error(self, client_kb_not_found): + exception_match_text = f"Error accessing Knowledge Base {client_kb_not_found.knowledge_base_id}." + with pytest.raises(ValueError, match=exception_match_text) as e: + client_kb_not_found._get_knowledge_base_description() From 9c0d36843ff01e3b14c7d3afaf31aa260f79cc47 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 10 Jun 2024 09:32:32 -0700 Subject: [PATCH 089/145] Fix streaming not working when using deprecated Structure.stream field (#849) --- CHANGELOG.md | 1 + griptape/structures/structure.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d62a76cf..047284ac5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - `Workflow.insert_task()` no longer inserts duplicate tasks when given multiple parent tasks. - Performance issue in `OpenAiChatPromptDriver` when extracting unused rate-limiting headers. +- Streaming not working when using deprecated `Structure.stream` field. ## [0.26.0] - 2024-06-04 diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 84058dc7a..6f2d857c4 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -133,7 +133,7 @@ def finished_tasks(self) -> list[BaseTask]: @property def default_config(self) -> BaseStructureConfig: - if self.prompt_driver is not None or self.embedding_driver is not None: + if self.prompt_driver is not None or self.embedding_driver is not None or self.stream is not None: config = StructureConfig() if self.prompt_driver is None: From b466356b6fd13f9ce39e7fa2c883989bd37285bd Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 11 Jun 2024 10:00:48 -0700 Subject: [PATCH 090/145] Add StructureVisualizer util (#844) --- CHANGELOG.md | 1 + .../structures/workflows.md | 6 +++ griptape/utils/__init__.py | 2 + griptape/utils/structure_visualizer.py | 42 +++++++++++++++ tests/unit/utils/test_structure_visualizer.py | 52 +++++++++++++++++++ 5 files changed, 103 insertions(+) create mode 100644 griptape/utils/structure_visualizer.py create mode 100644 tests/unit/utils/test_structure_visualizer.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 047284ac5..a1c92ba1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AmazonSageMakerJumpstartPromptDriver.inference_component_name` for setting the `InferenceComponentName` parameter when invoking an endpoint. - `AmazonSageMakerJumpstartEmbeddingDriver.inference_component_name` for setting the `InferenceComponentName` parameter when invoking an endpoint. - `AmazonSageMakerJumpstartEmbeddingDriver.custom_attributes` for setting custom attributes when invoking an endpoint. +- `griptape.utils.StructureVisualizer` for visualizing Workflow structures with Mermaid.js ### Changed - **BREAKING**: `Workflow` no longer modifies task relationships when adding tasks via `tasks` init param, `add_tasks()` or `add_task()`. Previously, adding a task would automatically add the previously added task as its parent. Existing code that relies on this behavior will need to be updated to explicitly add parent/child relationships using the API offered by `BaseTask`. diff --git a/docs/griptape-framework/structures/workflows.md b/docs/griptape-framework/structures/workflows.md index 74b6755a0..f545851a2 100644 --- a/docs/griptape-framework/structures/workflows.md +++ b/docs/griptape-framework/structures/workflows.md @@ -17,6 +17,7 @@ Let's build a simple workflow. Let's say, we want to write a story in a fantasy ```python from griptape.tasks import PromptTask from griptape.structures import Workflow +from griptape.utils import StructureVisualizer world_task = PromptTask( @@ -48,9 +49,14 @@ story_task = PromptTask( workflow = Workflow(tasks=[world_task, story_task, scotty_task, annie_task, story_task]) +print(StructureVisualizer(workflow).to_url()) + workflow.run() ``` +Note that we use the `StructureVisualizer` to get a visual representation of the workflow. If we visit the printed url, it should look like this: + +![Workflow](https://mermaid.ink/img/Z3JhcGggVEQ7OwoJd29ybGQtLT4gc3RvcnkgJiBzY290dHkgJiBhbm5pZTsKCXNjb3R0eS0tPiBzdG9yeTsKCWFubmllLS0+IHN0b3J5Ow==) !!! Info Output edited for brevity diff --git a/griptape/utils/__init__.py b/griptape/utils/__init__.py index 64ca9a9f7..d253dd514 100644 --- a/griptape/utils/__init__.py +++ b/griptape/utils/__init__.py @@ -17,6 +17,7 @@ from .constants import Constants as constants from .load_artifact_from_memory import load_artifact_from_memory from .deprecation import deprecation_warn +from .structure_visualizer import StructureVisualizer def minify_json(value: str) -> str: @@ -45,4 +46,5 @@ def minify_json(value: str) -> str: "deprecation_warn", "load_file", "load_files", + "StructureVisualizer", ] diff --git a/griptape/utils/structure_visualizer.py b/griptape/utils/structure_visualizer.py new file mode 100644 index 000000000..ede282761 --- /dev/null +++ b/griptape/utils/structure_visualizer.py @@ -0,0 +1,42 @@ +from __future__ import annotations +import base64 + +from attrs import define, field +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from griptape.tasks import BaseTask + from griptape.structures import Structure + + +@define +class StructureVisualizer: + """Utility class to visualize a Structure structure""" + + structure: Structure = field() + header: str = field(default="graph TD;", kw_only=True) + + def to_url(self) -> str: + """Generates a url that renders the Workflow structure as a Mermaid flowchart + Reference: https://mermaid.js.org/ecosystem/tutorials#jupyter-integration-with-mermaid-js + + Returns: + str: URL to the rendered image + """ + self.structure.resolve_relationships() + + tasks = "\n\t" + "\n\t".join([self.__render_task(task) for task in self.structure.tasks]) + graph = f"{self.header}{tasks}" + + graph_bytes = graph.encode("utf-8") + base64_string = base64.b64encode(graph_bytes).decode("utf-8") + + url = f"https://mermaid.ink/svg/{base64_string}" + + return url + + def __render_task(self, task: BaseTask) -> str: + if task.children: + return f'{task.id}--> {" & ".join([child.id for child in task.children])};' + else: + return f"{task.id};" diff --git a/tests/unit/utils/test_structure_visualizer.py b/tests/unit/utils/test_structure_visualizer.py new file mode 100644 index 000000000..d7177bf30 --- /dev/null +++ b/tests/unit/utils/test_structure_visualizer.py @@ -0,0 +1,52 @@ +from tests.mocks.mock_prompt_driver import MockPromptDriver +from griptape.utils import StructureVisualizer +from griptape.tasks import PromptTask +from griptape.structures import Agent, Workflow, Pipeline + + +class TestStructureVisualizer: + def test_agent(self): + agent = Agent(prompt_driver=MockPromptDriver(), tasks=[PromptTask("test1", id="task1")]) + + visualizer = StructureVisualizer(agent) + result = visualizer.to_url() + + assert result == "https://mermaid.ink/svg/Z3JhcGggVEQ7Cgl0YXNrMTs=" + + def test_pipeline(self): + pipeline = Pipeline( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1"), + PromptTask("test2", id="task2"), + PromptTask("test3", id="task3"), + PromptTask("test4", id="task4"), + ], + ) + + visualizer = StructureVisualizer(pipeline) + result = visualizer.to_url() + + assert ( + result + == "https://mermaid.ink/svg/Z3JhcGggVEQ7Cgl0YXNrMS0tPiB0YXNrMjsKCXRhc2syLS0+IHRhc2szOwoJdGFzazMtLT4gdGFzazQ7Cgl0YXNrNDs=" + ) + + def test_workflow(self): + workflow = Workflow( + prompt_driver=MockPromptDriver(), + tasks=[ + PromptTask("test1", id="task1"), + PromptTask("test2", id="task2", parent_ids=["task1"]), + PromptTask("test3", id="task3", parent_ids=["task1"]), + PromptTask("test4", id="task4", parent_ids=["task2", "task3"]), + ], + ) + + visualizer = StructureVisualizer(workflow) + result = visualizer.to_url() + + assert ( + result + == "https://mermaid.ink/svg/Z3JhcGggVEQ7Cgl0YXNrMS0tPiB0YXNrMiAmIHRhc2szOwoJdGFzazItLT4gdGFzazQ7Cgl0YXNrMy0tPiB0YXNrNDsKCXRhc2s0Ow==" + ) From 75c502ff0dc9ab3e911fbe55488aa447590d6fd3 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 11 Jun 2024 10:46:53 -0700 Subject: [PATCH 091/145] Add new Workflow/Task helper methods (#842) --- CHANGELOG.md | 3 ++ .../structures/workflows.md | 3 +- griptape/structures/workflow.py | 5 +-- griptape/tasks/base_task.py | 8 ++++ tests/unit/structures/test_workflow.py | 1 + tests/unit/tasks/test_base_task.py | 38 +++++++++++++++++++ 6 files changed, 54 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1c92ba1e..0349bbc93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AmazonSageMakerJumpstartEmbeddingDriver.inference_component_name` for setting the `InferenceComponentName` parameter when invoking an endpoint. - `AmazonSageMakerJumpstartEmbeddingDriver.custom_attributes` for setting custom attributes when invoking an endpoint. - `griptape.utils.StructureVisualizer` for visualizing Workflow structures with Mermaid.js +- `BaseTask.parents_outputs` to get the textual output of all parent tasks. +- `BaseTask.parents_output_text` to get a concatenated string of all parent tasks' outputs. +- `parents_output_text` to Workflow context. ### Changed - **BREAKING**: `Workflow` no longer modifies task relationships when adding tasks via `tasks` init param, `add_tasks()` or `add_task()`. Previously, adding a task would automatically add the previously added task as its parent. Existing code that relies on this behavior will need to be updated to explicitly add parent/child relationships using the API offered by `BaseTask`. diff --git a/docs/griptape-framework/structures/workflows.md b/docs/griptape-framework/structures/workflows.md index f545851a2..02ef8d148 100644 --- a/docs/griptape-framework/structures/workflows.md +++ b/docs/griptape-framework/structures/workflows.md @@ -7,7 +7,8 @@ A [Workflow](../../reference/griptape/structures/workflow.md) is a non-sequentia Workflows have access to the following [context](../../reference/griptape/structures/workflow.md#griptape.structures.workflow.Workflow.context) variables in addition to the [base context](./tasks.md#context): -* `parent_outputs`: outputs into the current task referenceable by parent task IDs. +* `parent_outputs`: dictionary containing mapping of parent ids to their outputs. +* `parents_output_text`: string containing the concatenated outputs of all parent tasks. * `parents`: parent tasks referenceable by IDs. * `children`: child tasks referenceable by IDs. diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 5927a1f4f..a9c571af2 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -127,9 +127,8 @@ def context(self, task: BaseTask) -> dict[str, Any]: context.update( { - "parent_outputs": { - parent.id: parent.output.to_text() if parent.output else "" for parent in task.parents - }, + "parent_outputs": task.parent_outputs, + "parents_output_text": task.parents_output_text, "parents": {parent.id: parent for parent in task.parents}, "children": {child.id: child for child in task.children}, } diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index c75978997..8a45cb14e 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -47,6 +47,14 @@ def parents(self) -> list[BaseTask]: def children(self) -> list[BaseTask]: return [self.structure.find_task(child_id) for child_id in self.child_ids] + @property + def parent_outputs(self) -> dict[str, str]: + return {parent.id: parent.output.to_text() if parent.output else "" for parent in self.parents} + + @property + def parents_output_text(self) -> str: + return "\n".join([parent.output.to_text() for parent in self.parents if parent.output]) + @property def meta_memories(self) -> list[BaseMetaEntry]: if self.structure and self.structure.meta_memory: diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index 4a493bdd8..c11c837b7 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -676,6 +676,7 @@ def test_context(self): context = workflow.context(task) assert context["parent_outputs"] == {parent.id: parent.output.to_text()} + assert context["parents_output_text"] == "mock output" assert context["structure"] == workflow assert context["parents"] == {parent.id: parent} assert context["children"] == {child.id: child} diff --git a/tests/unit/tasks/test_base_task.py b/tests/unit/tasks/test_base_task.py index 3048b7d7a..7fe2810f5 100644 --- a/tests/unit/tasks/test_base_task.py +++ b/tests/unit/tasks/test_base_task.py @@ -3,6 +3,7 @@ from griptape.artifacts import TextArtifact from griptape.structures import Agent from griptape.tasks import ActionsSubtask +from griptape.structures import Workflow from tests.mocks.mock_embedding_driver import MockEmbeddingDriver from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_task import MockTask @@ -30,3 +31,40 @@ def test_meta_memories(self, task): task.structure.task_memory.process_output(MockTool().test, subtask, TextArtifact("foo")) assert len(task.meta_memories) == 2 + + def test_parent_outputs(self, task): + parent_1 = MockTask("foobar1", id="foobar1") + parent_2 = MockTask("foobar2", id="foobar2") + parent_3 = MockTask("foobar3", id="foobar3") + child = MockTask("foobar", id="foobar") + + child.add_parent(parent_1) + child.add_parent(parent_2) + child.add_parent(parent_3) + + workflow = Workflow(tasks=[parent_1, parent_2, parent_3, child]) + workflow.run() + + parent_3.output = None + assert child.parent_outputs == { + parent_1.id: parent_1.output.to_text(), + parent_2.id: parent_2.output.to_text(), + parent_3.id: "", + } + + def test_parents_output(self, task): + parent_1 = MockTask("foobar1", id="foobar1") + parent_2 = MockTask("foobar2", id="foobar2") + parent_3 = MockTask("foobar3", id="foobar3") + child = MockTask("foobar", id="foobar") + + child.add_parent(parent_1) + child.add_parent(parent_2) + child.add_parent(parent_3) + + workflow = Workflow(tasks=[parent_1, parent_2, parent_3, child]) + workflow.run() + + parent_2.output = None + + assert child.parents_output_text == "foobar1\nfoobar3" From 331c331180d69f1e3fb5b7577bc75ecbced586ca Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 11 Jun 2024 12:37:00 -0700 Subject: [PATCH 092/145] Refactor/tokenizers (#840) --- CHANGELOG.md | 7 ++ .../drivers/embedding-drivers.md | 4 +- docs/griptape-framework/misc/tokenizers.md | 13 ++- .../amazon_bedrock_cohere_embedding_driver.py | 7 +- .../amazon_bedrock_titan_embedding_driver.py | 7 +- .../prompt/amazon_bedrock_prompt_driver.py | 44 +++++---- ...mazon_sagemaker_jumpstart_prompt_driver.py | 11 +-- .../drivers/prompt/anthropic_prompt_driver.py | 32 +++--- griptape/drivers/prompt/base_prompt_driver.py | 33 +++---- .../drivers/prompt/cohere_prompt_driver.py | 32 +++--- .../drivers/prompt/dummy_prompt_driver.py | 3 + .../drivers/prompt/google_prompt_driver.py | 24 ++--- .../prompt/huggingface_hub_prompt_driver.py | 31 +++--- .../huggingface_pipeline_prompt_driver.py | 26 +++-- .../prompt/openai_chat_prompt_driver.py | 27 ++--- griptape/engines/query/vector_query_engine.py | 14 +-- .../structure/base_conversation_memory.py | 49 ++++++++++ griptape/tasks/prompt_task.py | 2 +- griptape/tasks/toolkit_task.py | 13 ++- griptape/tokenizers/__init__.py | 2 + .../tokenizers/amazon_bedrock_tokenizer.py | 40 ++++++++ griptape/tokenizers/anthropic_tokenizer.py | 7 +- griptape/tokenizers/base_tokenizer.py | 25 +++-- griptape/tokenizers/cohere_tokenizer.py | 7 +- griptape/tokenizers/dummy_tokenizer.py | 5 +- griptape/tokenizers/google_tokenizer.py | 7 +- griptape/tokenizers/huggingface_tokenizer.py | 14 ++- griptape/tokenizers/openai_tokenizer.py | 11 ++- griptape/tokenizers/simple_tokenizer.py | 15 +-- griptape/tokenizers/voyageai_tokenizer.py | 7 +- griptape/utils/__init__.py | 2 - griptape/utils/constants.py | 4 - griptape/utils/prompt_stack.py | 51 ---------- tests/mocks/mock_prompt_driver.py | 1 + tests/mocks/mock_tokenizer.py | 8 +- .../config/test_anthropic_structure_config.py | 2 +- .../test_amazon_bedrock_prompt_driver.py | 4 +- ...mazon_sagemaker_jumpstart_prompt_driver.py | 6 +- .../prompt/test_anthropic_prompt_driver.py | 8 +- .../drivers/prompt/test_base_prompt_driver.py | 29 ------ .../prompt/test_google_prompt_driver.py | 43 +------- .../test_hugging_face_hub_prompt_driver.py | 7 ++ ...est_hugging_face_pipeline_prompt_driver.py | 12 +++ .../prompt/test_openai_chat_prompt_driver.py | 82 ++-------------- .../structure/test_conversation_memory.py | 97 ++++++++++++++++++ tests/unit/tokenizers/__init__.py | 0 .../test_amazon_bedrock_tokenizer.py | 47 +++++++++ tests/unit/tokenizers/test_base_tokenizer.py | 13 +++ .../unit/tokenizers/test_google_tokenizer.py | 2 + .../tokenizers/test_hugging_face_tokenizer.py | 7 +- .../unit/tokenizers/test_openai_tokenizer.py | 12 +++ .../unit/tokenizers/test_simple_tokenizer.py | 2 +- tests/unit/utils/test_prompt_stack.py | 98 ------------------- tests/utils/structure_tester.py | 12 ++- 54 files changed, 554 insertions(+), 514 deletions(-) create mode 100644 griptape/tokenizers/amazon_bedrock_tokenizer.py create mode 100644 tests/unit/tokenizers/__init__.py create mode 100644 tests/unit/tokenizers/test_amazon_bedrock_tokenizer.py create mode 100644 tests/unit/tokenizers/test_base_tokenizer.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 0349bbc93..bf643f4f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AmazonSageMakerJumpstartPromptDriver.inference_component_name` for setting the `InferenceComponentName` parameter when invoking an endpoint. - `AmazonSageMakerJumpstartEmbeddingDriver.inference_component_name` for setting the `InferenceComponentName` parameter when invoking an endpoint. - `AmazonSageMakerJumpstartEmbeddingDriver.custom_attributes` for setting custom attributes when invoking an endpoint. +- `ToolkitTask.response_stop_sequence` for overriding the default Chain of Thought stop sequence. - `griptape.utils.StructureVisualizer` for visualizing Workflow structures with Mermaid.js - `BaseTask.parents_outputs` to get the textual output of all parent tasks. - `BaseTask.parents_output_text` to get a concatenated string of all parent tasks' outputs. @@ -34,6 +35,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Removed `BedrockLlamaTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `BedrockTitanTokenizer`, use `SimpleTokenizer` instead. - **BREAKING**: Removed `OpenAiChatCompletionPromptDriver` as it uses the legacy [OpenAi Completions API](https://platform.openai.com/docs/api-reference/completions). +- **BREAKING**: Removed `BasePromptDriver.count_tokens()`. +- **BREAKING**: Removed `BasePromptDriver.max_output_tokens()`. +- **BREAKING**: Moved/renamed `PromptStack.add_to_conversation_memory` to `BaseConversationMemory.add_to_prompt_stack`. +- **BREAKING**: Moved `griptape.constants.RESPONSE_STOP_SEQUENCE` to `ToolkitTask`. - **BREAKING**: Renamed `AmazonSagemakerPromptDriver` to `AmazonSageMakerJumpstartPromptDriver`. - **BREAKING**: Removed `SagemakerFalconPromptModelDriver`, use `AmazonSageMakerJumpstartPromptDriver` instead. - **BREAKING**: Removed `SagemakerLlamaPromptModelDriver`, use `AmazonSageMakerJumpstartPromptDriver` instead. @@ -41,6 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Removed `SagemakerHuggingfaceEmbeddingModelDriver`, use `AmazonSageMakerJumpstartEmbeddingDriver` instead. - **BREAKING**: Removed `SagemakerTensorflowHubEmbeddingModelDriver`, use `AmazonSageMakerJumpstartEmbeddingDriver` instead. - **BREAKING**: `AmazonSageMakerJumpstartPromptDriver.model` parameter, which gets passed to `SageMakerRuntime.Client.invoke_endpoint` as `EndpointName`, is now renamed to `AmazonSageMakerPromptDriver.endpoint`. +- `ToolkitTask.RESPONSE_STOP_SEQUENCE` is now only added when using `ToolkitTask`. +- Updated Prompt Drivers to use `BasePromptDriver.max_tokens` instead of using `BasePromptDriver.max_output_tokens()`. - Improved error message when `GriptapeCloudKnowledgeBaseClient` does not have a description set. - Updated `AmazonBedrockPromptDriver` to use [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html). - `Structure.before_run()` now automatically resolves asymmetrically defined parent/child relationships using the new `Structure.resolve_relationships()`. diff --git a/docs/griptape-framework/drivers/embedding-drivers.md b/docs/griptape-framework/drivers/embedding-drivers.md index 74a6f550e..b7212e6ff 100644 --- a/docs/griptape-framework/drivers/embedding-drivers.md +++ b/docs/griptape-framework/drivers/embedding-drivers.md @@ -88,10 +88,8 @@ driver = HuggingFaceHubEmbeddingDriver( api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], model="sentence-transformers/all-MiniLM-L6-v2", tokenizer=HuggingFaceTokenizer( + model="sentence-transformers/all-MiniLM-L6-v2", max_output_tokens=512, - tokenizer=AutoTokenizer.from_pretrained( - "sentence-transformers/all-MiniLM-L6-v2" - ) ), ) diff --git a/docs/griptape-framework/misc/tokenizers.md b/docs/griptape-framework/misc/tokenizers.md index 1975fc977..1920e912e 100644 --- a/docs/griptape-framework/misc/tokenizers.md +++ b/docs/griptape-framework/misc/tokenizers.md @@ -69,8 +69,8 @@ from griptape.tokenizers import HuggingFaceTokenizer tokenizer = HuggingFaceTokenizer( + model="sentence-transformers/all-MiniLM-L6-v2", max_output_tokens=512, - tokenizer=AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2") ) print(tokenizer.count_tokens("Hello world!")) @@ -78,6 +78,17 @@ print(tokenizer.count_input_tokens_left("Hello world!")) print(tokenizer.count_output_tokens_left("Hello world!")) ``` +### Amazon Bedrock +```python +from griptape.tokenizers import AmazonBedrockTokenizer + + +tokenizer = AmazonBedrockTokenizer(model="amazon.titan-text-express-v1") + +print(tokenizer.count_tokens("Hello world!")) +print(tokenizer.count_input_tokens_left("Hello world!")) +print(tokenizer.count_output_tokens_left("Hello world!")) +``` ### Simple Not all LLM providers have a public tokenizer API. In this case, you can use the `SimpleTokenizer` to count tokens based on a simple heuristic. diff --git a/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py b/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py index 54ac78b45..903022f86 100644 --- a/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py +++ b/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py @@ -3,7 +3,8 @@ from typing import Any, TYPE_CHECKING from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver -from griptape.tokenizers.simple_tokenizer import SimpleTokenizer +from griptape.tokenizers.amazon_bedrock_tokenizer import AmazonBedrockTokenizer +from griptape.tokenizers.base_tokenizer import BaseTokenizer from griptape.utils import import_optional_dependency if TYPE_CHECKING: @@ -28,8 +29,8 @@ class AmazonBedrockCohereEmbeddingDriver(BaseEmbeddingDriver): model: str = field(default=DEFAULT_MODEL, kw_only=True) input_type: str = field(default="search_query", kw_only=True) session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) - tokenizer: SimpleTokenizer = field( - default=Factory(lambda self: SimpleTokenizer(characters_per_token=4), takes_self=True), kw_only=True + tokenizer: BaseTokenizer = field( + default=Factory(lambda self: AmazonBedrockTokenizer(model=self.model), takes_self=True), kw_only=True ) bedrock_client: Any = field( default=Factory(lambda self: self.session.client("bedrock-runtime"), takes_self=True), kw_only=True diff --git a/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py b/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py index c6a692bf3..b754b0608 100644 --- a/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py +++ b/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py @@ -3,7 +3,8 @@ from typing import Any, TYPE_CHECKING from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver -from griptape.tokenizers import SimpleTokenizer +from griptape.tokenizers.amazon_bedrock_tokenizer import AmazonBedrockTokenizer +from griptape.tokenizers.base_tokenizer import BaseTokenizer from griptape.utils import import_optional_dependency if TYPE_CHECKING: @@ -24,8 +25,8 @@ class AmazonBedrockTitanEmbeddingDriver(BaseEmbeddingDriver): model: str = field(default=DEFAULT_MODEL, kw_only=True, metadata={"serializable": True}) session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) - tokenizer: SimpleTokenizer = field( - default=Factory(lambda self: SimpleTokenizer(characters_per_token=4), takes_self=True), kw_only=True + tokenizer: BaseTokenizer = field( + default=Factory(lambda self: AmazonBedrockTokenizer(model=self.model), takes_self=True), kw_only=True ) bedrock_client: Any = field( default=Factory(lambda self: self.session.client("bedrock-runtime"), takes_self=True), kw_only=True diff --git a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py index f3d03a684..849ed0901 100644 --- a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py @@ -1,16 +1,20 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any + from collections.abc import Iterator -from attrs import define, field, Factory -from griptape.drivers import BasePromptDriver +from typing import TYPE_CHECKING, Any + +from attrs import Factory, define, field + from griptape.artifacts import TextArtifact +from griptape.drivers import BasePromptDriver +from griptape.tokenizers import AmazonBedrockTokenizer, BaseTokenizer from griptape.utils import import_optional_dependency -from griptape.tokenizers import SimpleTokenizer, BaseTokenizer if TYPE_CHECKING: - from griptape.utils import PromptStack import boto3 + from griptape.utils import PromptStack + @define class AmazonBedrockPromptDriver(BasePromptDriver): @@ -19,7 +23,9 @@ class AmazonBedrockPromptDriver(BasePromptDriver): default=Factory(lambda self: self.session.client("bedrock-runtime"), takes_self=True), kw_only=True ) additional_model_request_fields: dict = field(default=Factory(dict), kw_only=True) - tokenizer: BaseTokenizer = field(default=Factory(lambda: SimpleTokenizer(characters_per_token=4)), kw_only=True) + tokenizer: BaseTokenizer = field( + default=Factory(lambda self: AmazonBedrockTokenizer(model=self.model), takes_self=True), kw_only=True + ) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: response = self.bedrock_client.converse(**self._base_params(prompt_stack)) @@ -40,14 +46,24 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: else: raise Exception("model response is empty") + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + content = [{"text": prompt_input.content}] + + if prompt_input.is_system(): + return {"text": prompt_input.content} + elif prompt_input.is_assistant(): + return {"role": "assistant", "content": content} + else: + return {"role": "user", "content": content} + def _base_params(self, prompt_stack: PromptStack) -> dict: system_messages = [ - {"text": input.content} for input in prompt_stack.inputs if input.is_system() and input.content + self._prompt_stack_input_to_message(input) + for input in prompt_stack.inputs + if input.is_system() and input.content ] messages = [ - {"role": self.__to_amazon_bedrock_role(input), "content": [{"text": input.content}]} - for input in prompt_stack.inputs - if not input.is_system() + self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs if not input.is_system() ] return { @@ -57,11 +73,3 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: "inferenceConfig": {"temperature": self.temperature}, "additionalModelRequestFields": self.additional_model_request_fields, } - - def __to_amazon_bedrock_role(self, prompt_input: PromptStack.Input) -> str: - if prompt_input.is_system(): - return "system" - elif prompt_input.is_assistant(): - return "assistant" - else: - return "user" diff --git a/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py b/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py index 54247d001..18f8e4b77 100644 --- a/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py @@ -30,11 +30,7 @@ class AmazonSageMakerJumpstartPromptDriver(BasePromptDriver): max_tokens: int = field(default=250, kw_only=True, metadata={"serializable": True}) tokenizer: HuggingFaceTokenizer = field( default=Factory( - lambda self: HuggingFaceTokenizer( - tokenizer=import_optional_dependency("transformers").AutoTokenizer.from_pretrained(self.model), - max_output_tokens=self.max_tokens, - ), - takes_self=True, + lambda self: HuggingFaceTokenizer(model=self.model, max_output_tokens=self.max_tokens), takes_self=True ), kw_only=True, ) @@ -72,9 +68,12 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: raise NotImplementedError("streaming is not supported") + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + return {"role": prompt_input.role, "content": prompt_input.content} + def _to_model_input(self, prompt_stack: PromptStack) -> str: prompt = self.tokenizer.tokenizer.apply_chat_template( - [{"role": i.role, "content": i.content} for i in prompt_stack.inputs], + [self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs], tokenize=False, add_generation_prompt=True, ) diff --git a/griptape/drivers/prompt/anthropic_prompt_driver.py b/griptape/drivers/prompt/anthropic_prompt_driver.py index 486233643..b74a9d5f6 100644 --- a/griptape/drivers/prompt/anthropic_prompt_driver.py +++ b/griptape/drivers/prompt/anthropic_prompt_driver.py @@ -5,7 +5,7 @@ from griptape.artifacts import TextArtifact from griptape.utils import PromptStack, import_optional_dependency from griptape.drivers import BasePromptDriver -from griptape.tokenizers import AnthropicTokenizer +from griptape.tokenizers import AnthropicTokenizer, BaseTokenizer @define @@ -15,7 +15,6 @@ class AnthropicPromptDriver(BasePromptDriver): api_key: Anthropic API key. model: Anthropic model name. client: Custom `Anthropic` client. - tokenizer: Custom `AnthropicTokenizer`. """ api_key: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) @@ -26,11 +25,12 @@ class AnthropicPromptDriver(BasePromptDriver): ), kw_only=True, ) - tokenizer: AnthropicTokenizer = field( + tokenizer: BaseTokenizer = field( default=Factory(lambda self: AnthropicTokenizer(model=self.model), takes_self=True), kw_only=True ) top_p: float = field(default=0.999, kw_only=True, metadata={"serializable": True}) top_k: int = field(default=250, kw_only=True, metadata={"serializable": True}) + max_tokens: int = field(default=1000, kw_only=True, metadata={"serializable": True}) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: response = self.client.messages.create(**self._base_params(prompt_stack)) @@ -44,34 +44,36 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: if chunk.type == "content_block_delta": yield TextArtifact(value=chunk.delta.text) + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + content = prompt_input.content + + if prompt_input.is_system(): + return {"role": "system", "content": content} + elif prompt_input.is_assistant(): + return {"role": "assistant", "content": content} + else: + return {"role": "user", "content": content} + def _prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> dict: messages = [ - {"role": self.__to_anthropic_role(prompt_input), "content": prompt_input.content} + self._prompt_stack_input_to_message(prompt_input) for prompt_input in prompt_stack.inputs if not prompt_input.is_system() ] - system = next((i for i in prompt_stack.inputs if i.is_system()), None) + system = next((self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs if i.is_system()), None) if system is None: return {"messages": messages} else: - return {"messages": messages, "system": system.content} + return {"messages": messages, "system": system["content"]} def _base_params(self, prompt_stack: PromptStack) -> dict: return { "model": self.model, "temperature": self.temperature, "stop_sequences": self.tokenizer.stop_sequences, - "max_tokens": self.max_output_tokens(self.prompt_stack_to_string(prompt_stack)), "top_p": self.top_p, "top_k": self.top_k, + "max_tokens": self.max_tokens, **self._prompt_stack_to_model_input(prompt_stack), } - - def __to_anthropic_role(self, prompt_input: PromptStack.Input) -> str: - if prompt_input.is_system(): - return "system" - elif prompt_input.is_assistant(): - return "assistant" - else: - return "user" diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index 096035f8b..9ef076dbc 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Optional, Callable +from typing import TYPE_CHECKING, Optional from collections.abc import Iterator from attrs import define, field, Factory from griptape.events import StartPromptEvent, FinishPromptEvent, CompletionChunkEvent @@ -32,9 +32,6 @@ class BasePromptDriver(SerializableMixin, ExponentialBackoffMixin, ABC): temperature: float = field(default=0.1, kw_only=True, metadata={"serializable": True}) max_tokens: Optional[int] = field(default=None, kw_only=True, metadata={"serializable": True}) structure: Optional[Structure] = field(default=None, kw_only=True) - prompt_stack_to_string: Callable[[PromptStack], str] = field( - default=Factory(lambda self: self.default_prompt_stack_to_string_converter, takes_self=True), kw_only=True - ) ignored_exception_types: tuple[type[Exception], ...] = field( default=Factory(lambda: (ImportError, ValueError)), kw_only=True ) @@ -42,23 +39,12 @@ class BasePromptDriver(SerializableMixin, ExponentialBackoffMixin, ABC): tokenizer: BaseTokenizer stream: bool = field(default=False, kw_only=True, metadata={"serializable": True}) - def max_output_tokens(self, text: str | list) -> int: - tokens_left = self.tokenizer.count_output_tokens_left(text) - - if self.max_tokens: - return min(self.max_tokens, tokens_left) - else: - return tokens_left - - def token_count(self, prompt_stack: PromptStack) -> int: - return self.tokenizer.count_tokens(self.prompt_stack_to_string(prompt_stack)) - def before_run(self, prompt_stack: PromptStack) -> None: if self.structure: self.structure.publish_event( StartPromptEvent( model=self.model, - token_count=self.token_count(prompt_stack), + token_count=self.tokenizer.count_tokens(self.prompt_stack_to_string(prompt_stack)), prompt_stack=prompt_stack, prompt=self.prompt_stack_to_string(prompt_stack), ) @@ -67,7 +53,9 @@ def before_run(self, prompt_stack: PromptStack) -> None: def after_run(self, result: TextArtifact) -> None: if self.structure: self.structure.publish_event( - FinishPromptEvent(model=self.model, token_count=result.token_count(self.tokenizer), result=result.value) + FinishPromptEvent( + model=self.model, result=result.value, token_count=self.tokenizer.count_tokens(result.value) + ) ) def run(self, prompt_stack: PromptStack) -> TextArtifact: @@ -92,7 +80,16 @@ def run(self, prompt_stack: PromptStack) -> TextArtifact: else: raise Exception("prompt driver failed after all retry attempts") - def default_prompt_stack_to_string_converter(self, prompt_stack: PromptStack) -> str: + def prompt_stack_to_string(self, prompt_stack: PromptStack) -> str: + """Converts a Prompt Stack to a string for token counting or model input. + This base implementation is only a rough approximation, and should be overridden by subclasses with model-specific tokens. + + Args: + prompt_stack: The Prompt Stack to convert to a string. + + Returns: + A single string representation of the Prompt Stack. + """ prompt_lines = [] for i in prompt_stack.inputs: diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index 7a2f39cd6..3ff2c9e89 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -1,11 +1,11 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING from collections.abc import Iterator from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver -from griptape.tokenizers import CohereTokenizer from griptape.utils import PromptStack, import_optional_dependency +from griptape.tokenizers import BaseTokenizer, CohereTokenizer if TYPE_CHECKING: from cohere import Client @@ -18,7 +18,6 @@ class CoherePromptDriver(BasePromptDriver): api_key: Cohere API key. model: Cohere model name. client: Custom `cohere.Client`. - tokenizer: Custom `CohereTokenizer`. """ api_key: str = field(kw_only=True, metadata={"serializable": False}) @@ -27,7 +26,7 @@ class CoherePromptDriver(BasePromptDriver): default=Factory(lambda self: import_optional_dependency("cohere").Client(self.api_key), takes_self=True), kw_only=True, ) - tokenizer: CohereTokenizer = field( + tokenizer: BaseTokenizer = field( default=Factory(lambda self: CohereTokenizer(model=self.model, client=self.client), takes_self=True), kw_only=True, ) @@ -44,26 +43,23 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: if event.event_type == "text-generation": yield TextArtifact(value=event.text) + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + if prompt_input.is_system(): + return {"role": "SYSTEM", "text": prompt_input.content} + elif prompt_input.is_user(): + return {"role": "USER", "text": prompt_input.content} + else: + return {"role": "ASSISTANT", "text": prompt_input.content} + def _base_params(self, prompt_stack: PromptStack) -> dict: user_message = prompt_stack.inputs[-1].content - history_messages = [self.__to_cohere_message(input) for input in prompt_stack.inputs[:-1]] + + history_messages = [self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs[:-1]] return { "message": user_message, "chat_history": history_messages, "temperature": self.temperature, "stop_sequences": self.tokenizer.stop_sequences, + "max_tokens": self.max_tokens, } - - def __to_cohere_message(self, input: PromptStack.Input) -> dict[str, Any]: - return {"role": self.__to_cohere_role(input.role), "text": input.content} - - def __to_cohere_role(self, role: str) -> str: - if role == PromptStack.SYSTEM_ROLE: - return "SYSTEM" - if role == PromptStack.USER_ROLE: - return "USER" - elif role == PromptStack.ASSISTANT_ROLE: - return "CHATBOT" - else: - return "USER" diff --git a/griptape/drivers/prompt/dummy_prompt_driver.py b/griptape/drivers/prompt/dummy_prompt_driver.py index f92f9cbc1..a55ecd4fe 100644 --- a/griptape/drivers/prompt/dummy_prompt_driver.py +++ b/griptape/drivers/prompt/dummy_prompt_driver.py @@ -17,3 +17,6 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: raise DummyException(__class__.__name__, "try_stream") + + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + raise DummyException(__class__.__name__, "_prompt_stack_input_to_message") diff --git a/griptape/drivers/prompt/google_prompt_driver.py b/griptape/drivers/prompt/google_prompt_driver.py index 9f833c035..67bc19e24 100644 --- a/griptape/drivers/prompt/google_prompt_driver.py +++ b/griptape/drivers/prompt/google_prompt_driver.py @@ -19,7 +19,6 @@ class GooglePromptDriver(BasePromptDriver): api_key: Google API key. model: Google model name. model_client: Custom `GenerativeModel` client. - tokenizer: Custom `GoogleTokenizer`. top_p: Optional value for top_p. top_k: Optional value for top_k. """ @@ -42,7 +41,7 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: inputs, generation_config=GenerationConfig( stop_sequences=self.tokenizer.stop_sequences, - max_output_tokens=self.max_output_tokens(inputs), + max_output_tokens=self.max_tokens, temperature=self.temperature, top_p=self.top_p, top_k=self.top_k, @@ -60,7 +59,7 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: stream=True, generation_config=GenerationConfig( stop_sequences=self.tokenizer.stop_sequences, - max_output_tokens=self.max_output_tokens(inputs), + max_output_tokens=self.max_tokens, temperature=self.temperature, top_p=self.top_p, top_k=self.top_k, @@ -70,6 +69,14 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: for chunk in response: yield TextArtifact(value=chunk.text) + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + parts = [prompt_input.content] + + if prompt_input.is_assistant(): + return {"role": "model", "parts": parts} + else: + return {"role": "user", "parts": parts} + def _default_model_client(self) -> GenerativeModel: genai = import_optional_dependency("google.generativeai") genai.configure(api_key=self.api_key) @@ -90,13 +97,6 @@ def _prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> list[Conten def __to_content_dict(self, prompt_input: PromptStack.Input) -> ContentDict: ContentDict = import_optional_dependency("google.generativeai.types").ContentDict + message = self._prompt_stack_input_to_message(prompt_input) - return ContentDict({"role": self.__to_google_role(prompt_input), "parts": [prompt_input.content]}) - - def __to_google_role(self, prompt_input: PromptStack.Input) -> str: - if prompt_input.is_system(): - return "user" - elif prompt_input.is_assistant(): - return "model" - else: - return "user" + return ContentDict(message) diff --git a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py index d6b021f29..3edd252cb 100644 --- a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py @@ -42,37 +42,44 @@ class HuggingFaceHubPromptDriver(BasePromptDriver): ) tokenizer: HuggingFaceTokenizer = field( default=Factory( - lambda self: HuggingFaceTokenizer( - tokenizer=import_optional_dependency("transformers").AutoTokenizer.from_pretrained(self.model), - max_output_tokens=self.max_tokens, - ), - takes_self=True, + lambda self: HuggingFaceTokenizer(model=self.model, max_output_tokens=self.max_tokens), takes_self=True ), kw_only=True, ) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - prompt = self.__to_prompt(prompt_stack) + prompt = self.prompt_stack_to_string(prompt_stack) response = self.client.text_generation( - prompt, return_full_text=False, max_new_tokens=self.max_output_tokens(prompt), **self.params + prompt, return_full_text=False, max_new_tokens=self.max_tokens, **self.params ) return TextArtifact(value=response) def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - prompt = self.__to_prompt(prompt_stack) + prompt = self.prompt_stack_to_string(prompt_stack) response = self.client.text_generation( - prompt, return_full_text=False, max_new_tokens=self.max_output_tokens(prompt), stream=True, **self.params + prompt, return_full_text=False, max_new_tokens=self.max_tokens, stream=True, **self.params ) for token in response: yield TextArtifact(value=token) - def __to_prompt(self, prompt_stack: PromptStack) -> str: + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + return {"role": prompt_input.role, "content": prompt_input.content} + + def prompt_stack_to_string(self, prompt_stack: PromptStack) -> str: + return self.tokenizer.tokenizer.decode(self.__prompt_stack_to_tokens(prompt_stack)) + + def __prompt_stack_to_tokens(self, prompt_stack: PromptStack) -> list[int]: tokens = self.tokenizer.tokenizer.apply_chat_template( - [{"role": i.role, "content": i.content} for i in prompt_stack.inputs], add_generation_prompt=True + [self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs], + add_generation_prompt=True, + tokenize=True, ) - return self.tokenizer.tokenizer.decode(tokens) + if isinstance(tokens, list): + return tokens + else: + raise ValueError("Invalid output type.") diff --git a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py index 324ecd74f..4fa291877 100644 --- a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py @@ -27,11 +27,7 @@ class HuggingFacePipelinePromptDriver(BasePromptDriver): params: dict = field(factory=dict, kw_only=True, metadata={"serializable": True}) tokenizer: HuggingFaceTokenizer = field( default=Factory( - lambda self: HuggingFaceTokenizer( - tokenizer=import_optional_dependency("transformers").AutoTokenizer.from_pretrained(self.model), - max_output_tokens=self.max_tokens, - ), - takes_self=True, + lambda self: HuggingFaceTokenizer(model=self.model, max_output_tokens=self.max_tokens), takes_self=True ), kw_only=True, ) @@ -45,7 +41,7 @@ class HuggingFacePipelinePromptDriver(BasePromptDriver): ) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - messages = [{"role": input.role, "content": input.content} for input in prompt_stack.inputs] + messages = [self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs] result = self.pipe( messages, @@ -68,3 +64,21 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: raise NotImplementedError("streaming is not supported") + + def prompt_stack_to_string(self, prompt_stack: PromptStack) -> str: + return self.tokenizer.tokenizer.decode(self.__prompt_stack_to_tokens(prompt_stack)) + + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + return {"role": prompt_input.role, "content": prompt_input.content} + + def __prompt_stack_to_tokens(self, prompt_stack: PromptStack) -> list[int]: + tokens = self.tokenizer.tokenizer.apply_chat_template( + [self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs], + add_generation_prompt=True, + tokenize=True, + ) + + if isinstance(tokens, list): + return tokens + else: + raise ValueError("Invalid output type.") diff --git a/griptape/drivers/prompt/openai_chat_prompt_driver.py b/griptape/drivers/prompt/openai_chat_prompt_driver.py index 345545b6f..9545bd45a 100644 --- a/griptape/drivers/prompt/openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/openai_chat_prompt_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import Optional, Any, Literal +from typing import Optional, Literal from collections.abc import Iterator import openai from attrs import define, field, Factory @@ -79,14 +79,15 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: yield TextArtifact(value=delta_content) - def token_count(self, prompt_stack: PromptStack) -> int: - if isinstance(self.tokenizer, OpenAiTokenizer): - return self.tokenizer.count_tokens(self._prompt_stack_to_messages(prompt_stack)) - else: - return self.tokenizer.count_tokens(self.prompt_stack_to_string(prompt_stack)) + def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: + content = prompt_input.content - def _prompt_stack_to_messages(self, prompt_stack: PromptStack) -> list[dict[str, Any]]: - return [{"role": self.__to_openai_role(i), "content": i.content} for i in prompt_stack.inputs] + if prompt_input.is_system(): + return {"role": "system", "content": content} + elif prompt_input.is_assistant(): + return {"role": "assistant", "content": content} + else: + return {"role": "user", "content": content} def _base_params(self, prompt_stack: PromptStack) -> dict: params = { @@ -102,7 +103,7 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: # JSON mode still requires a system input instructing the LLM to output JSON. prompt_stack.add_system_input("Provide your response as a valid JSON object.") - messages = self._prompt_stack_to_messages(prompt_stack) + messages = [self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs] if self.max_tokens is not None: params["max_tokens"] = self.max_tokens @@ -110,11 +111,3 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: params["messages"] = messages return params - - def __to_openai_role(self, prompt_input: PromptStack.Input) -> str: - if prompt_input.is_system(): - return "system" - elif prompt_input.is_assistant(): - return "assistant" - else: - return "user" diff --git a/griptape/engines/query/vector_query_engine.py b/griptape/engines/query/vector_query_engine.py index adfa4b2db..24338b348 100644 --- a/griptape/engines/query/vector_query_engine.py +++ b/griptape/engines/query/vector_query_engine.py @@ -49,12 +49,14 @@ def query( ) user_message = self.user_template_generator.render(query=query) - message_token_count = self.prompt_driver.token_count( - PromptStack( - inputs=[ - PromptStack.Input(system_message, role=PromptStack.SYSTEM_ROLE), - PromptStack.Input(user_message, role=PromptStack.USER_ROLE), - ] + message_token_count = self.prompt_driver.tokenizer.count_input_tokens_left( + self.prompt_driver.prompt_stack_to_string( + PromptStack( + inputs=[ + PromptStack.Input(system_message, role=PromptStack.SYSTEM_ROLE), + PromptStack.Input(user_message, role=PromptStack.USER_ROLE), + ] + ) ) ) diff --git a/griptape/memory/structure/base_conversation_memory.py b/griptape/memory/structure/base_conversation_memory.py index 6db05c92c..f8cc51743 100644 --- a/griptape/memory/structure/base_conversation_memory.py +++ b/griptape/memory/structure/base_conversation_memory.py @@ -45,3 +45,52 @@ def try_add_run(self, run: Run) -> None: ... @abstractmethod def to_prompt_stack(self, last_n: Optional[int] = None) -> PromptStack: ... + + def add_to_prompt_stack(self, prompt_stack: PromptStack, index: Optional[int] = None) -> PromptStack: + """Add the Conversation Memory runs to the Prompt Stack by modifying the inputs in place. + + If autoprune is enabled, this will fit as many Conversation Memory runs into the Prompt Stack + as possible without exceeding the token limit. + + Args: + prompt_stack: The Prompt Stack to add the Conversation Memory to. + index: Optional index to insert the Conversation Memory runs at. + Defaults to appending to the end of the Prompt Stack. + """ + num_runs_to_fit_in_prompt = len(self.runs) + + if self.autoprune and hasattr(self, "structure"): + should_prune = True + prompt_driver = self.structure.config.prompt_driver + temp_stack = PromptStack() + + # Try to determine how many Conversation Memory runs we can + # fit into the Prompt Stack without exceeding the token limit. + while should_prune and num_runs_to_fit_in_prompt > 0: + temp_stack.inputs = prompt_stack.inputs.copy() + + # Add n runs from Conversation Memory. + # Where we insert into the Prompt Stack doesn't matter here + # since we only care about the total token count. + memory_inputs = self.to_prompt_stack(num_runs_to_fit_in_prompt).inputs + temp_stack.inputs.extend(memory_inputs) + + # Convert the prompt stack into tokens left. + tokens_left = prompt_driver.tokenizer.count_input_tokens_left( + prompt_driver.prompt_stack_to_string(temp_stack) + ) + if tokens_left > 0: + # There are still tokens left, no need to prune. + should_prune = False + else: + # There were not any tokens left, prune one run and try again. + num_runs_to_fit_in_prompt -= 1 + + if num_runs_to_fit_in_prompt: + memory_inputs = self.to_prompt_stack(num_runs_to_fit_in_prompt).inputs + if index: + prompt_stack.inputs[index:index] = memory_inputs + else: + prompt_stack.inputs.extend(memory_inputs) + + return prompt_stack diff --git a/griptape/tasks/prompt_task.py b/griptape/tasks/prompt_task.py index 75051db74..694a5050d 100644 --- a/griptape/tasks/prompt_task.py +++ b/griptape/tasks/prompt_task.py @@ -34,7 +34,7 @@ def prompt_stack(self) -> PromptStack: if memory: # inserting at index 1 to place memory right after system prompt - stack.add_conversation_memory(memory, 1) + memory.add_to_prompt_stack(stack, 1) return stack diff --git a/griptape/tasks/toolkit_task.py b/griptape/tasks/toolkit_task.py index 3a3727434..c99f9e23f 100644 --- a/griptape/tasks/toolkit_task.py +++ b/griptape/tasks/toolkit_task.py @@ -21,6 +21,9 @@ @define class ToolkitTask(PromptTask, ActionsSubtaskOriginMixin): DEFAULT_MAX_STEPS = 20 + # Stop sequence for chain-of-thought in the framework. Using this "token-like" string to make it more unique, + # so that it doesn't trigger on accident. + RESPONSE_STOP_SEQUENCE = "<|Response|>" tools: list[BaseTool] = field(factory=list, kw_only=True) max_subtasks: int = field(default=DEFAULT_MAX_STEPS, kw_only=True) @@ -32,6 +35,7 @@ class ToolkitTask(PromptTask, ActionsSubtaskOriginMixin): generate_user_subtask_template: Callable[[ActionsSubtask], str] = field( default=Factory(lambda self: self.default_user_subtask_template_generator, takes_self=True), kw_only=True ) + response_stop_sequence: str = field(default=RESPONSE_STOP_SEQUENCE, kw_only=True) def __attrs_post_init__(self) -> None: if self.task_memory: @@ -74,7 +78,7 @@ def prompt_stack(self) -> PromptStack: if memory: # inserting at index 1 to place memory right after system prompt - stack.add_conversation_memory(memory, 1) + memory.add_to_prompt_stack(stack, 1) return stack @@ -95,17 +99,17 @@ def default_system_template_generator(self, _: PromptTask) -> str: action_names=str.join(", ", [tool.name for tool in self.tools]), actions_schema=utils.minify_json(json.dumps(schema)), meta_memory=J2("memory/meta/meta_memory.j2").render(meta_memories=self.meta_memories), - stop_sequence=utils.constants.RESPONSE_STOP_SEQUENCE, + stop_sequence=self.response_stop_sequence, ) def default_assistant_subtask_template_generator(self, subtask: ActionsSubtask) -> str: return J2("tasks/toolkit_task/assistant_subtask.j2").render( - stop_sequence=utils.constants.RESPONSE_STOP_SEQUENCE, subtask=subtask + stop_sequence=self.response_stop_sequence, subtask=subtask ) def default_user_subtask_template_generator(self, subtask: ActionsSubtask) -> str: return J2("tasks/toolkit_task/user_subtask.j2").render( - stop_sequence=utils.constants.RESPONSE_STOP_SEQUENCE, subtask=subtask + stop_sequence=self.response_stop_sequence, subtask=subtask ) def actions_schema(self) -> Schema: @@ -126,6 +130,7 @@ def run(self) -> BaseArtifact: self.subtasks.clear() + self.prompt_driver.tokenizer.stop_sequences.extend([self.response_stop_sequence]) subtask = self.add_subtask(ActionsSubtask(self.prompt_driver.run(prompt_stack=self.prompt_stack).to_text())) while True: diff --git a/griptape/tokenizers/__init__.py b/griptape/tokenizers/__init__.py index e69473acd..03b0aefe5 100644 --- a/griptape/tokenizers/__init__.py +++ b/griptape/tokenizers/__init__.py @@ -7,6 +7,7 @@ from griptape.tokenizers.voyageai_tokenizer import VoyageAiTokenizer from griptape.tokenizers.simple_tokenizer import SimpleTokenizer from griptape.tokenizers.dummy_tokenizer import DummyTokenizer +from griptape.tokenizers.amazon_bedrock_tokenizer import AmazonBedrockTokenizer __all__ = [ @@ -19,4 +20,5 @@ "VoyageAiTokenizer", "SimpleTokenizer", "DummyTokenizer", + "AmazonBedrockTokenizer", ] diff --git a/griptape/tokenizers/amazon_bedrock_tokenizer.py b/griptape/tokenizers/amazon_bedrock_tokenizer.py new file mode 100644 index 000000000..670b5739a --- /dev/null +++ b/griptape/tokenizers/amazon_bedrock_tokenizer.py @@ -0,0 +1,40 @@ +from __future__ import annotations +from attrs import define, field +from griptape.tokenizers.base_tokenizer import BaseTokenizer + + +@define() +class AmazonBedrockTokenizer(BaseTokenizer): + MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = { + "anthropic.claude-3": 200000, + "anthropic.claude-v2:1": 200000, + "anthropic.claude": 100000, + "cohere.command-r": 128000, + "cohere.embed": 512, + "cohere.command": 4000, + "cohere": 1024, + "ai21": 8192, + "meta-llama3": 8000, + "meta-llama2": 4096, + "mistral": 32000, + "amazon": 4096, + } + MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = { + "anthropic.claude": 4096, + "cohere": 4096, + "ai21.j2": 8191, + "meta": 2048, + "amazon.titan-text-lite": 4096, + "amazon.titan-text-express": 8192, + "amazon.titan-text-premier": 3072, + "amazon": 4096, + "mistral": 8192, + } + + model: str = field(kw_only=True) + characters_per_token: int = field(default=4, kw_only=True) + + def count_tokens(self, text: str) -> int: + num_tokens = (len(text) + self.characters_per_token - 1) // self.characters_per_token + + return num_tokens diff --git a/griptape/tokenizers/anthropic_tokenizer.py b/griptape/tokenizers/anthropic_tokenizer.py index 577df7b93..f5fabab0e 100644 --- a/griptape/tokenizers/anthropic_tokenizer.py +++ b/griptape/tokenizers/anthropic_tokenizer.py @@ -17,8 +17,5 @@ class AnthropicTokenizer(BaseTokenizer): default=Factory(lambda: import_optional_dependency("anthropic").Anthropic()), kw_only=True ) - def count_tokens(self, text: str | list) -> int: - if isinstance(text, str): - return self.client.count_tokens(text) - else: - raise ValueError("Text must be a string.") + def count_tokens(self, text: str) -> int: + return self.client.count_tokens(text) diff --git a/griptape/tokenizers/base_tokenizer.py b/griptape/tokenizers/base_tokenizer.py index 179d2fb59..b7ae2a854 100644 --- a/griptape/tokenizers/base_tokenizer.py +++ b/griptape/tokenizers/base_tokenizer.py @@ -1,16 +1,18 @@ from __future__ import annotations -from abc import ABC, abstractmethod +import logging +from abc import ABC from attrs import define, field, Factory -from griptape import utils @define() class BaseTokenizer(ABC): + DEFAULT_MAX_INPUT_TOKENS = 4096 + DEFAULT_MAX_OUTPUT_TOKENS = 1000 MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = {} MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS = {} model: str = field(kw_only=True) - stop_sequences: list[str] = field(default=Factory(lambda: [utils.constants.RESPONSE_STOP_SEQUENCE]), kw_only=True) + stop_sequences: list[str] = field(default=Factory(list), kw_only=True) max_input_tokens: int = field(kw_only=True, default=None) max_output_tokens: int = field(kw_only=True, default=None) @@ -21,7 +23,7 @@ def __attrs_post_init__(self) -> None: if self.max_output_tokens is None: self.max_output_tokens = self._default_max_output_tokens() - def count_input_tokens_left(self, text: str | list) -> int: + def count_input_tokens_left(self, text: str) -> int: diff = self.max_input_tokens - self.count_tokens(text) if diff > 0: @@ -29,7 +31,7 @@ def count_input_tokens_left(self, text: str | list) -> int: else: return 0 - def count_output_tokens_left(self, text: str | list) -> int: + def count_output_tokens_left(self, text: str) -> int: diff = self.max_output_tokens - self.count_tokens(text) if diff > 0: @@ -37,14 +39,16 @@ def count_output_tokens_left(self, text: str | list) -> int: else: return 0 - @abstractmethod - def count_tokens(self, text: str | list[dict]) -> int: ... + def count_tokens(self, text: str) -> int: ... def _default_max_input_tokens(self) -> int: tokens = next((v for k, v in self.MODEL_PREFIXES_TO_MAX_INPUT_TOKENS.items() if self.model.startswith(k)), None) if tokens is None: - raise ValueError(f"Unknown model default max input tokens: {self.model}") + logging.warning( + f"Model {self.model} not found in MODEL_PREFIXES_TO_MAX_INPUT_TOKENS, using default value of {self.DEFAULT_MAX_INPUT_TOKENS}." + ) + return self.DEFAULT_MAX_INPUT_TOKENS else: return tokens @@ -54,6 +58,9 @@ def _default_max_output_tokens(self) -> int: ) if tokens is None: - raise ValueError(f"Unknown model for default max output tokens: {self.model}") + logging.warning( + f"Model {self.model} not found in MODEL_PREFIXES_TO_MAX_OUTPUT_TOKENS, using default value of {self.DEFAULT_MAX_OUTPUT_TOKENS}." + ) + return self.DEFAULT_MAX_OUTPUT_TOKENS else: return tokens diff --git a/griptape/tokenizers/cohere_tokenizer.py b/griptape/tokenizers/cohere_tokenizer.py index e6845d9ca..ae3bddd80 100644 --- a/griptape/tokenizers/cohere_tokenizer.py +++ b/griptape/tokenizers/cohere_tokenizer.py @@ -14,8 +14,5 @@ class CohereTokenizer(BaseTokenizer): client: Client = field(kw_only=True) - def count_tokens(self, text: str | list) -> int: - if isinstance(text, str): - return len(self.client.tokenize(text=text, model=self.model).tokens) - else: - raise ValueError("Text must be a string.") + def count_tokens(self, text: str) -> int: + return len(self.client.tokenize(text=text, model=self.model).tokens) diff --git a/griptape/tokenizers/dummy_tokenizer.py b/griptape/tokenizers/dummy_tokenizer.py index 74f6d104c..a36d0343e 100644 --- a/griptape/tokenizers/dummy_tokenizer.py +++ b/griptape/tokenizers/dummy_tokenizer.py @@ -1,14 +1,15 @@ from __future__ import annotations from attrs import define, field +from typing import Optional from griptape.exceptions import DummyException from griptape.tokenizers import BaseTokenizer @define class DummyTokenizer(BaseTokenizer): - model: None = field(init=False, default=None, kw_only=True) + model: Optional[str] = field(default=None, kw_only=True) max_input_tokens: int = field(init=False, default=0, kw_only=True) max_output_tokens: int = field(init=False, default=0, kw_only=True) - def count_tokens(self, text: str | list) -> int: + def count_tokens(self, text: str) -> int: raise DummyException(__class__.__name__, "count_tokens") diff --git a/griptape/tokenizers/google_tokenizer.py b/griptape/tokenizers/google_tokenizer.py index 55942f597..f99a0682f 100644 --- a/griptape/tokenizers/google_tokenizer.py +++ b/griptape/tokenizers/google_tokenizer.py @@ -18,11 +18,8 @@ class GoogleTokenizer(BaseTokenizer): default=Factory(lambda self: self._default_model_client(), takes_self=True), kw_only=True ) - def count_tokens(self, text: str | list) -> int: - if isinstance(text, str) or isinstance(text, list): - return self.model_client.count_tokens(text).total_tokens - else: - raise ValueError("Text must be a string or a list.") + def count_tokens(self, text: str) -> int: + return self.model_client.count_tokens(text).total_tokens def _default_model_client(self) -> GenerativeModel: genai = import_optional_dependency("google.generativeai") diff --git a/griptape/tokenizers/huggingface_tokenizer.py b/griptape/tokenizers/huggingface_tokenizer.py index 84023a378..a8312567d 100644 --- a/griptape/tokenizers/huggingface_tokenizer.py +++ b/griptape/tokenizers/huggingface_tokenizer.py @@ -1,6 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from attrs import define, field, Factory +from griptape.utils import import_optional_dependency from griptape.tokenizers import BaseTokenizer if TYPE_CHECKING: @@ -9,12 +10,17 @@ @define() class HuggingFaceTokenizer(BaseTokenizer): - tokenizer: PreTrainedTokenizerBase = field(kw_only=True) - model: None = field(init=False, default=None, kw_only=True) + tokenizer: PreTrainedTokenizerBase = field( + default=Factory( + lambda self: import_optional_dependency("transformers").AutoTokenizer.from_pretrained(self.model), + takes_self=True, + ), + kw_only=True, + ) max_input_tokens: int = field( default=Factory(lambda self: self.tokenizer.model_max_length, takes_self=True), kw_only=True ) - max_output_tokens: int = field(kw_only=True) # pyright: ignore[reportGeneralTypeIssues] + max_output_tokens: int = field(default=4096, kw_only=True) - def count_tokens(self, text: str | list) -> int: + def count_tokens(self, text: str) -> int: return len(self.tokenizer.encode(text)) diff --git a/griptape/tokenizers/openai_tokenizer.py b/griptape/tokenizers/openai_tokenizer.py index ec127ca1a..39a2a033e 100644 --- a/griptape/tokenizers/openai_tokenizer.py +++ b/griptape/tokenizers/openai_tokenizer.py @@ -1,9 +1,9 @@ from __future__ import annotations import logging -from attrs import define +from attrs import define, field, Factory import tiktoken -from griptape.tokenizers import BaseTokenizer from typing import Optional +from griptape.tokenizers import BaseTokenizer @define() @@ -41,6 +41,13 @@ class OpenAiTokenizer(BaseTokenizer): "text-embedding-3-large", ] + max_input_tokens: int = field( + kw_only=True, default=Factory(lambda self: self._default_max_input_tokens(), takes_self=True) + ) + max_output_tokens: int = field( + kw_only=True, default=Factory(lambda self: self._default_max_output_tokens(), takes_self=True) + ) + @property def encoding(self) -> tiktoken.Encoding: try: diff --git a/griptape/tokenizers/simple_tokenizer.py b/griptape/tokenizers/simple_tokenizer.py index 864b92f96..d1ddc8e2b 100644 --- a/griptape/tokenizers/simple_tokenizer.py +++ b/griptape/tokenizers/simple_tokenizer.py @@ -1,20 +1,15 @@ from __future__ import annotations -from typing import Optional from attrs import define, field +from typing import Optional from griptape.tokenizers import BaseTokenizer @define() class SimpleTokenizer(BaseTokenizer): - model: Optional[str] = field(init=False, kw_only=True, default=None) - max_input_tokens: int = field(kw_only=True, default=0) - max_output_tokens: int = field(kw_only=True, default=0) + model: Optional[str] = field(default=None, kw_only=True) characters_per_token: int = field(kw_only=True) - def count_tokens(self, text: str | list) -> int: - if isinstance(text, str): - num_tokens = (len(text) + self.characters_per_token - 1) // self.characters_per_token + def count_tokens(self, text: str) -> int: + num_tokens = (len(text) + self.characters_per_token - 1) // self.characters_per_token - return num_tokens - else: - raise ValueError("Text must be a string.") + return num_tokens diff --git a/griptape/tokenizers/voyageai_tokenizer.py b/griptape/tokenizers/voyageai_tokenizer.py index 565e53faa..d8fb5adf1 100644 --- a/griptape/tokenizers/voyageai_tokenizer.py +++ b/griptape/tokenizers/voyageai_tokenizer.py @@ -26,8 +26,5 @@ class VoyageAiTokenizer(BaseTokenizer): kw_only=True, ) - def count_tokens(self, text: str | list) -> int: - if isinstance(text, str): - return self.client.count_tokens([text]) - else: - raise ValueError("Text must be a str.") + def count_tokens(self, text: str) -> int: + return self.client.count_tokens([text]) diff --git a/griptape/utils/__init__.py b/griptape/utils/__init__.py index d253dd514..daac63f4e 100644 --- a/griptape/utils/__init__.py +++ b/griptape/utils/__init__.py @@ -14,7 +14,6 @@ from .import_utils import import_optional_dependency from .import_utils import is_dependency_installed from .stream import Stream -from .constants import Constants as constants from .load_artifact_from_memory import load_artifact_from_memory from .deprecation import deprecation_warn from .structure_visualizer import StructureVisualizer @@ -41,7 +40,6 @@ def minify_json(value: str) -> str: "remove_null_values_in_dict_recursively", "dict_merge", "Stream", - "constants", "load_artifact_from_memory", "deprecation_warn", "load_file", diff --git a/griptape/utils/constants.py b/griptape/utils/constants.py index 7bee76750..e69de29bb 100644 --- a/griptape/utils/constants.py +++ b/griptape/utils/constants.py @@ -1,4 +0,0 @@ -class Constants: - # Stop sequence for chain-of-thought in the framework. Using this "token-like" string to make it more unique, - # so that it doesn't trigger on accident. - RESPONSE_STOP_SEQUENCE = "<|Response|>" diff --git a/griptape/utils/prompt_stack.py b/griptape/utils/prompt_stack.py index f04cef486..378f9dd1e 100644 --- a/griptape/utils/prompt_stack.py +++ b/griptape/utils/prompt_stack.py @@ -1,12 +1,8 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional from attrs import define, field from griptape.mixins import SerializableMixin -if TYPE_CHECKING: - from griptape.memory.structure import BaseConversationMemory - @define class PromptStack(SerializableMixin): @@ -50,50 +46,3 @@ def add_user_input(self, content: str) -> Input: def add_assistant_input(self, content: str) -> Input: return self.add_input(content, self.ASSISTANT_ROLE) - - def add_conversation_memory(self, memory: BaseConversationMemory, index: Optional[int] = None) -> list[Input]: - """Add the Conversation Memory runs to the Prompt Stack. - - If autoprune is enabled, this will fit as many Conversation Memory runs into the Prompt Stack - as possible without exceeding the token limit. - - Args: - memory: The Conversation Memory to add the Prompt Stack to. - index: Optional index to insert the Conversation Memory runs at. - Defaults to appending to the end of the Prompt Stack. - """ - num_runs_to_fit_in_prompt = len(memory.runs) - - if memory.autoprune and hasattr(memory, "structure"): - should_prune = True - prompt_driver = memory.structure.config.prompt_driver - temp_stack = PromptStack() - - # Try to determine how many Conversation Memory runs we can - # fit into the Prompt Stack without exceeding the token limit. - while should_prune and num_runs_to_fit_in_prompt > 0: - temp_stack.inputs = self.inputs.copy() - - # Add n runs from Conversation Memory. - # Where we insert into the Prompt Stack doesn't matter here - # since we only care about the total token count. - memory_inputs = memory.to_prompt_stack(num_runs_to_fit_in_prompt).inputs - temp_stack.inputs.extend(memory_inputs) - - # Convert the prompt stack into tokens left. - prompt_string = prompt_driver.prompt_stack_to_string(temp_stack) - tokens_left = prompt_driver.tokenizer.count_input_tokens_left(prompt_string) - if tokens_left > 0: - # There are still tokens left, no need to prune. - should_prune = False - else: - # There were not any tokens left, prune one run and try again. - num_runs_to_fit_in_prompt -= 1 - - if num_runs_to_fit_in_prompt: - memory_inputs = memory.to_prompt_stack(num_runs_to_fit_in_prompt).inputs - if index: - self.inputs[index:index] = memory_inputs - else: - self.inputs.extend(memory_inputs) - return self.inputs diff --git a/tests/mocks/mock_prompt_driver.py b/tests/mocks/mock_prompt_driver.py index dc4cde69e..43d9a365f 100644 --- a/tests/mocks/mock_prompt_driver.py +++ b/tests/mocks/mock_prompt_driver.py @@ -13,6 +13,7 @@ class MockPromptDriver(BasePromptDriver): model: str = "test-model" tokenizer: BaseTokenizer = MockTokenizer(model="test-model", max_input_tokens=4096, max_output_tokens=4096) + mock_input: str | Callable[[], str] = field(default="mock input", kw_only=True) mock_output: str | Callable[[], str] = field(default="mock output", kw_only=True) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: diff --git a/tests/mocks/mock_tokenizer.py b/tests/mocks/mock_tokenizer.py index a333f9a13..eff103e99 100644 --- a/tests/mocks/mock_tokenizer.py +++ b/tests/mocks/mock_tokenizer.py @@ -1,13 +1,9 @@ from __future__ import annotations -from attrs import define, field +from attrs import define from griptape.tokenizers import BaseTokenizer @define() class MockTokenizer(BaseTokenizer): - model: str = field(kw_only=True) - max_input_tokens: int = field(default=1000, kw_only=True) - max_output_tokens: int = field(default=1000, kw_only=True) - - def count_tokens(self, text: str | list[dict]) -> int: + def count_tokens(self, text: str) -> int: return len(text) diff --git a/tests/unit/config/test_anthropic_structure_config.py b/tests/unit/config/test_anthropic_structure_config.py index 8279fb091..1dd83f96c 100644 --- a/tests/unit/config/test_anthropic_structure_config.py +++ b/tests/unit/config/test_anthropic_structure_config.py @@ -18,7 +18,7 @@ def test_to_dict(self, config): "prompt_driver": { "type": "AnthropicPromptDriver", "temperature": 0.1, - "max_tokens": None, + "max_tokens": 1000, "stream": False, "model": "claude-3-opus-20240229", "top_p": 0.999, diff --git a/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py index 28409cea1..8aa345595 100644 --- a/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py @@ -42,7 +42,7 @@ def messages(self): def test_try_run(self, mock_converse, prompt_stack, messages): # Given - driver = AmazonBedrockPromptDriver(model="foo bar") + driver = AmazonBedrockPromptDriver(model="ai21.j2") # When text_artifact = driver.try_run(prompt_stack) @@ -63,7 +63,7 @@ def test_try_run(self, mock_converse, prompt_stack, messages): def test_try_stream_run(self, mock_converse_stream, prompt_stack, messages): # Given - driver = AmazonBedrockPromptDriver(model="foo bar", stream=True) + driver = AmazonBedrockPromptDriver(model="ai21.j2", stream=True) # When text_artifact = next(driver.try_stream(prompt_stack)) diff --git a/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py index 3ac9e5164..4ae8fe944 100644 --- a/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py @@ -7,8 +7,6 @@ import json import pytest -from griptape.utils.constants import Constants - def to_streaming_body(data: Any) -> StreamingBody: bytes = json.dumps(data).encode("utf-8") @@ -57,7 +55,7 @@ def test_try_run(self, mock_client): "max_new_tokens": 250, "do_sample": True, "eos_token_id": 1, - "stop_strings": [Constants.RESPONSE_STOP_SEQUENCE], + "stop_strings": [], "return_full_text": False, }, } @@ -85,7 +83,7 @@ def test_try_run(self, mock_client): "max_new_tokens": 250, "do_sample": True, "eos_token_id": 1, - "stop_strings": [Constants.RESPONSE_STOP_SEQUENCE], + "stop_strings": [], "return_full_text": False, }, } diff --git a/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py b/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py index c5009afac..22178bbf3 100644 --- a/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py @@ -63,9 +63,9 @@ def test_try_run(self, mock_client, model, system_enabled): # Then mock_client.return_value.messages.create.assert_called_once_with( messages=expected_messages, - stop_sequences=["<|Response|>"], + stop_sequences=[], model=driver.model, - max_tokens=4091, + max_tokens=1000, temperature=0.1, top_p=0.999, top_k=250, @@ -106,9 +106,9 @@ def test_try_stream_run(self, mock_stream_client, model, system_enabled): # Then mock_stream_client.return_value.messages.create.assert_called_once_with( messages=expected_messages, - stop_sequences=["<|Response|>"], + stop_sequences=[], model=driver.model, - max_tokens=4091, + max_tokens=1000, temperature=0.1, stream=True, top_p=0.999, diff --git a/tests/unit/drivers/prompt/test_base_prompt_driver.py b/tests/unit/drivers/prompt/test_base_prompt_driver.py index 1a06b5907..0743402aa 100644 --- a/tests/unit/drivers/prompt/test_base_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_base_prompt_driver.py @@ -39,35 +39,6 @@ def test_run_via_pipeline_publishes_events(self, mocker): def test_run(self): assert isinstance(MockPromptDriver().run(PromptStack(inputs=[])), TextArtifact) - def test_token_count(self): - assert ( - MockPromptDriver().token_count( - PromptStack(inputs=[PromptStack.Input("foobar", role=PromptStack.USER_ROLE)]) - ) - == 24 - ) - - def test_max_output_tokens(self): - assert MockPromptDriver().max_output_tokens("foobar") == 4090 - assert MockPromptDriver(max_tokens=5000).max_output_tokens("foobar") == 4090 - assert MockPromptDriver(max_tokens=100).max_output_tokens("foobar") == 100 - - def test_prompt_stack_to_string(self): - assert ( - MockPromptDriver().prompt_stack_to_string( - PromptStack(inputs=[PromptStack.Input("foobar", role=PromptStack.USER_ROLE)]) - ) - == "User: foobar\n\nAssistant:" - ) - - def test_custom_prompt_stack_to_string(self): - assert ( - MockPromptDriver( - prompt_stack_to_string=lambda stack: f"Foo: {stack.inputs[0].content}" - ).prompt_stack_to_string(PromptStack(inputs=[PromptStack.Input("foobar", role=PromptStack.USER_ROLE)])) - == "Foo: foobar" - ) - def instance_count(instances, clazz): return len([instance for instance in instances if isinstance(instance, clazz)]) diff --git a/tests/unit/drivers/prompt/test_google_prompt_driver.py b/tests/unit/drivers/prompt/test_google_prompt_driver.py index 6e38bd503..f655d3e51 100644 --- a/tests/unit/drivers/prompt/test_google_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_google_prompt_driver.py @@ -2,7 +2,6 @@ from griptape.drivers import GooglePromptDriver from griptape.utils import PromptStack from unittest.mock import Mock -from tests.mocks.mock_tokenizer import MockTokenizer import pytest @@ -32,9 +31,7 @@ def test_try_run(self, mock_generative_model): prompt_stack.add_user_input("user-input") prompt_stack.add_assistant_input("assistant-input") prompt_stack.add_generic_input("generic-input") - driver = GooglePromptDriver( - model="gemini-pro", api_key="api-key", tokenizer=MockTokenizer(model="gemini-pro"), top_p=0.5, top_k=50 - ) + driver = GooglePromptDriver(model="gemini-pro", api_key="api-key", top_p=0.5, top_k=50) # When text_artifact = driver.try_run(prompt_stack) @@ -47,7 +44,7 @@ def test_try_run(self, mock_generative_model): {"parts": ["generic-input"], "role": "user"}, ], generation_config=GenerationConfig( - max_output_tokens=997, temperature=0.1, top_p=0.5, top_k=50, stop_sequences=["<|Response|>"] + max_output_tokens=None, temperature=0.1, top_p=0.5, top_k=50, stop_sequences=[] ), ) assert text_artifact.value == "model-output" @@ -59,14 +56,7 @@ def test_try_stream(self, mock_stream_generative_model): prompt_stack.add_user_input("user-input") prompt_stack.add_assistant_input("assistant-input") prompt_stack.add_generic_input("generic-input") - driver = GooglePromptDriver( - model="gemini-pro", - api_key="api-key", - stream=True, - tokenizer=MockTokenizer(model="gemini-pro"), - top_p=0.5, - top_k=50, - ) + driver = GooglePromptDriver(model="gemini-pro", api_key="api-key", stream=True, top_p=0.5, top_k=50) # When text_artifact_stream = driver.try_stream(prompt_stack) @@ -80,9 +70,7 @@ def test_try_stream(self, mock_stream_generative_model): {"parts": ["generic-input"], "role": "user"}, ], stream=True, - generation_config=GenerationConfig( - max_output_tokens=997, temperature=0.1, top_p=0.5, top_k=50, stop_sequences=["<|Response|>"] - ), + generation_config=GenerationConfig(temperature=0.1, top_p=0.5, top_k=50, stop_sequences=[]), ) assert text_artifact.value == "model-output" @@ -108,26 +96,3 @@ def test_prompt_stack_to_model_input(self): {"role": "model", "parts": ["assistant-input"]}, {"role": "user", "parts": ["user-input"]}, ] - - def test_to_content_dict(self): - # Given - driver = GooglePromptDriver(model="gemini-pro", api_key="1234") - - # When - assert driver._GooglePromptDriver__to_content_dict(PromptStack.Input("system-input", "system")) == { - "role": "user", - "parts": ["system-input"], - } - assert driver._GooglePromptDriver__to_content_dict(PromptStack.Input("user-input", "user")) == { - "role": "user", - "parts": ["user-input"], - } - assert driver._GooglePromptDriver__to_content_dict(PromptStack.Input("assistant-input", "assistant")) == { - "role": "model", - "parts": ["assistant-input"], - } - - assert driver._GooglePromptDriver__to_content_dict(PromptStack.Input("generic-input", "generic")) == { - "role": "user", - "parts": ["generic-input"], - } diff --git a/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py b/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py index 6b91b56cb..15bbb4ead 100644 --- a/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py @@ -10,6 +10,13 @@ def mock_client(self, mocker): mock_client.text_generation.return_value = "model-output" return mock_client + @pytest.fixture(autouse=True) + def tokenizer(self, mocker): + from_pretrained = tokenizer = mocker.patch("transformers.AutoTokenizer").from_pretrained + from_pretrained.return_value.apply_chat_template.return_value = [1, 2, 3] + + return tokenizer + @pytest.fixture def mock_client_stream(self, mocker): mock_client = mocker.patch("huggingface_hub.InferenceClient").return_value diff --git a/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py b/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py index b565ccf4d..b2746ca58 100644 --- a/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py @@ -20,6 +20,8 @@ def mock_generator(self, mock_pipeline): def mock_autotokenizer(self, mocker): mock_autotokenizer = mocker.patch("transformers.AutoTokenizer.from_pretrained").return_value mock_autotokenizer.model_max_length = 42 + mock_autotokenizer.apply_chat_template.return_value = [1, 2, 3] + mock_autotokenizer.decode.return_value = "model-output" return mock_autotokenizer @pytest.fixture @@ -78,3 +80,13 @@ def test_try_run_throws_when_non_list(self, mock_generator, prompt_stack): # Then assert e.value.args[0] == "invalid output format" + + def test_prompt_stack_to_string(self, prompt_stack): + # Given + driver = HuggingFacePipelinePromptDriver(model="foo", max_tokens=42) + + # When + result = driver.prompt_stack_to_string(prompt_stack) + + # Then + assert result == "model-output" diff --git a/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py b/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py index 1f8f07cf5..a2900d4d3 100644 --- a/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py @@ -1,5 +1,3 @@ -from transformers import AutoTokenizer - from griptape.drivers import OpenAiChatPromptDriver from griptape.tokenizers.huggingface_tokenizer import HuggingFaceTokenizer from griptape.utils import PromptStack @@ -161,30 +159,6 @@ def test_try_run_with_max_tokens(self, mock_chat_completion_create, prompt_stack ) assert text_artifact.value == "model-output" - def test_try_run_max_tokens_limited_by_tokenizer(self, mock_chat_completion_create, prompt_stack, messages): - # Given - max_tokens_request = 9999999 - driver = OpenAiChatPromptDriver( - model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, max_tokens=max_tokens_request - ) - tokens_left = driver.tokenizer.count_input_tokens_left(driver._prompt_stack_to_messages(prompt_stack)) - - # When - text_artifact = driver.try_run(prompt_stack) - - # Then - mock_chat_completion_create.assert_called_once_with( - model=driver.model, - temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, - user=driver.user, - messages=messages, - max_tokens=max_tokens_request, - seed=driver.seed, - ) - assert max_tokens_request > tokens_left - assert text_artifact.value == "model-output" - def test_try_run_throws_when_prompt_stack_is_string(self): # Given driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) @@ -209,57 +183,10 @@ def test_try_run_throws_when_multiple_choices_returned(self, choices, mock_chat_ # Then e.value.args[0] == "Completion with more than one choice is not supported yet." - def test_token_count(self, prompt_stack, messages): - # Given - mock_tokenizer = Mock(spec=OpenAiTokenizer) - mock_tokenizer.count_tokens.return_value = 42 - driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, tokenizer=mock_tokenizer) - - # When - token_count = driver.token_count(prompt_stack) - - # Then - mock_tokenizer.count_tokens.assert_called_once_with(messages) - assert token_count == 42 - - # Given - mock_tokenizer = Mock() - mock_tokenizer.count_tokens.return_value = 42 - driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, tokenizer=mock_tokenizer) - - # When - token_count = driver.token_count(prompt_stack) - - # Then - mock_tokenizer.count_tokens.assert_called_once_with(driver.prompt_stack_to_string(prompt_stack)) - assert token_count == 42 - - def test_max_output_tokens(self, messages): - # Given - mock_tokenizer = Mock() - mock_tokenizer.count_output_tokens_left.return_value = 42 - driver = OpenAiChatPromptDriver( - model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, tokenizer=mock_tokenizer, max_tokens=45 - ) - - # When - max_output_tokens = driver.max_output_tokens(messages) - - # Then - mock_tokenizer.count_output_tokens_left.assert_called_once_with(messages) - assert max_output_tokens == 42 - - def test_max_output_tokens_with_max_tokens(self, messages): - max_tokens = OpenAiChatPromptDriver( - model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, max_tokens=42 - ).max_output_tokens(messages) - - assert max_tokens == 42 - def test_custom_tokenizer(self, mock_chat_completion_create, prompt_stack, messages): driver = OpenAiChatPromptDriver( model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, - tokenizer=HuggingFaceTokenizer(tokenizer=AutoTokenizer.from_pretrained("gpt2"), max_output_tokens=1000), + tokenizer=HuggingFaceTokenizer(model="gpt2", max_output_tokens=1000), max_tokens=1, ) @@ -272,7 +199,12 @@ def test_custom_tokenizer(self, mock_chat_completion_create, prompt_stack, messa temperature=driver.temperature, stop=driver.tokenizer.stop_sequences, user=driver.user, - messages=messages, + messages=[ + {"role": "user", "content": "generic-input"}, + {"role": "system", "content": "system-input"}, + {"role": "user", "content": "user-input"}, + {"role": "assistant", "content": "assistant-input"}, + ], seed=driver.seed, max_tokens=1, ) diff --git a/tests/unit/memory/structure/test_conversation_memory.py b/tests/unit/memory/structure/test_conversation_memory.py index 665dca9b2..c6eba3df3 100644 --- a/tests/unit/memory/structure/test_conversation_memory.py +++ b/tests/unit/memory/structure/test_conversation_memory.py @@ -1,7 +1,10 @@ import json +from griptape.structures import Agent +from griptape.utils import PromptStack from griptape.memory.structure import ConversationMemory, Run, BaseConversationMemory from griptape.structures import Pipeline from tests.mocks.mock_prompt_driver import MockPromptDriver +from tests.mocks.mock_tokenizer import MockTokenizer from griptape.tasks import PromptTask @@ -69,3 +72,97 @@ def test_buffering(self): assert len(pipeline.conversation_memory.runs) == 2 assert pipeline.conversation_memory.runs[0].input == "run4" assert pipeline.conversation_memory.runs[1].input == "run5" + + def test_add_to_prompt_stack_autopruing_disabled(self): + agent = Agent(prompt_driver=MockPromptDriver()) + memory = ConversationMemory( + autoprune=False, + runs=[ + Run(input="foo1", output="bar1"), + Run(input="foo2", output="bar2"), + Run(input="foo3", output="bar3"), + Run(input="foo4", output="bar4"), + Run(input="foo5", output="bar5"), + ], + ) + memory.structure = agent + prompt_stack = PromptStack() + prompt_stack.add_user_input("foo") + prompt_stack.add_assistant_input("bar") + memory.add_to_prompt_stack(prompt_stack) + + assert len(prompt_stack.inputs) == 12 + + def test_add_to_prompt_stack_autopruing_enabled(self): + # All memory is pruned. + agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=0))) + memory = ConversationMemory( + autoprune=True, + runs=[ + Run(input="foo1", output="bar1"), + Run(input="foo2", output="bar2"), + Run(input="foo3", output="bar3"), + Run(input="foo4", output="bar4"), + Run(input="foo5", output="bar5"), + ], + ) + memory.structure = agent + prompt_stack = PromptStack() + prompt_stack.add_system_input("fizz") + prompt_stack.add_user_input("foo") + prompt_stack.add_assistant_input("bar") + memory.add_to_prompt_stack(prompt_stack) + + assert len(prompt_stack.inputs) == 3 + + # No memory is pruned. + agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=1000))) + memory = ConversationMemory( + autoprune=True, + runs=[ + Run(input="foo1", output="bar1"), + Run(input="foo2", output="bar2"), + Run(input="foo3", output="bar3"), + Run(input="foo4", output="bar4"), + Run(input="foo5", output="bar5"), + ], + ) + memory.structure = agent + prompt_stack = PromptStack() + prompt_stack.add_system_input("fizz") + prompt_stack.add_user_input("foo") + prompt_stack.add_assistant_input("bar") + memory.add_to_prompt_stack(prompt_stack) + + assert len(prompt_stack.inputs) == 13 + + # One memory is pruned. + # MockTokenizer's max_input_tokens set to one below the sum of memory + system prompt tokens + # so that a single memory is pruned. + agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=160))) + memory = ConversationMemory( + autoprune=True, + runs=[ + # All of these sum to 155 tokens with the MockTokenizer. + Run(input="foo1", output="bar1"), + Run(input="foo2", output="bar2"), + Run(input="foo3", output="bar3"), + Run(input="foo4", output="bar4"), + Run(input="foo5", output="bar5"), + ], + ) + memory.structure = agent + prompt_stack = PromptStack() + # And then another 6 tokens from fizz for a total of 161 tokens. + prompt_stack.add_system_input("fizz") + prompt_stack.add_user_input("foo") + prompt_stack.add_assistant_input("bar") + memory.add_to_prompt_stack(prompt_stack, 1) + + # We expect one run (2 prompt stack inputs) to be pruned. + assert len(prompt_stack.inputs) == 11 + assert prompt_stack.inputs[0].content == "fizz" + assert prompt_stack.inputs[1].content == "foo2" + assert prompt_stack.inputs[2].content == "bar2" + assert prompt_stack.inputs[-2].content == "foo" + assert prompt_stack.inputs[-1].content == "bar" diff --git a/tests/unit/tokenizers/__init__.py b/tests/unit/tokenizers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/tokenizers/test_amazon_bedrock_tokenizer.py b/tests/unit/tokenizers/test_amazon_bedrock_tokenizer.py new file mode 100644 index 000000000..2b77ba3dc --- /dev/null +++ b/tests/unit/tokenizers/test_amazon_bedrock_tokenizer.py @@ -0,0 +1,47 @@ +from griptape.tokenizers import AmazonBedrockTokenizer +import pytest + + +class TestAmazonBedrockTokenizer: + @pytest.fixture + def tokenizer(self, request): + return AmazonBedrockTokenizer(model=request.param) + + @pytest.mark.parametrize( + "tokenizer,expected", + [ + ("anthropic.claude-v2:1", 4), + ("anthropic.claude-v2", 4), + ("anthropic.claude-3-sonnet-20240229-v1:0", 4), + ("anthropic.claude-3-haiku-20240307-v1:0", 4), + ], + indirect=["tokenizer"], + ) + def test_token_count(self, tokenizer, expected): + assert tokenizer.count_tokens("foo bar huzzah") == expected + + @pytest.mark.parametrize( + "tokenizer,expected", + [ + ("anthropic.claude-v2", 99996), + ("anthropic.claude-v2:1", 199996), + ("anthropic.claude-3-sonnet-20240229-v1:0", 199996), + ("anthropic.claude-3-haiku-20240307-v1:0", 199996), + ], + indirect=["tokenizer"], + ) + def test_input_tokens_left(self, tokenizer, expected): + assert tokenizer.count_input_tokens_left("foo bar huzzah") == expected + + @pytest.mark.parametrize( + "tokenizer,expected", + [ + ("anthropic.claude-v2", 4092), + ("anthropic.claude-v2:1", 4092), + ("anthropic.claude-3-sonnet-20240229-v1:0", 4092), + ("anthropic.claude-3-haiku-20240307-v1:0", 4092), + ], + indirect=["tokenizer"], + ) + def test_output_tokens_left(self, tokenizer, expected): + assert tokenizer.count_output_tokens_left("foo bar huzzah") == expected diff --git a/tests/unit/tokenizers/test_base_tokenizer.py b/tests/unit/tokenizers/test_base_tokenizer.py new file mode 100644 index 000000000..eed15b9b2 --- /dev/null +++ b/tests/unit/tokenizers/test_base_tokenizer.py @@ -0,0 +1,13 @@ +import logging +from tests.mocks.mock_tokenizer import MockTokenizer + + +class TestBaseTokenizer: + def test_default_tokens(self, caplog): + with caplog.at_level(logging.WARNING): + tokenizer = MockTokenizer(model="gpt2") + + assert tokenizer.max_input_tokens == 4096 + assert tokenizer.max_output_tokens == 1000 + + assert "gpt2 not found" in caplog.text diff --git a/tests/unit/tokenizers/test_google_tokenizer.py b/tests/unit/tokenizers/test_google_tokenizer.py index 2b26ec6a6..955a0517f 100644 --- a/tests/unit/tokenizers/test_google_tokenizer.py +++ b/tests/unit/tokenizers/test_google_tokenizer.py @@ -1,5 +1,6 @@ import pytest from unittest.mock import Mock +from griptape.utils import PromptStack from griptape.tokenizers import GoogleTokenizer @@ -18,6 +19,7 @@ def tokenizer(self, request): @pytest.mark.parametrize("tokenizer,expected", [("gemini-pro", 5)], indirect=["tokenizer"]) def test_token_count(self, tokenizer, expected): assert tokenizer.count_tokens("foo bar huzzah") == expected + assert tokenizer.count_tokens(PromptStack(inputs=[PromptStack.Input(content="foo", role="user")])) == expected assert tokenizer.count_tokens(["foo", "bar", "huzzah"]) == expected @pytest.mark.parametrize("tokenizer,expected", [("gemini-pro", 30715)], indirect=["tokenizer"]) diff --git a/tests/unit/tokenizers/test_hugging_face_tokenizer.py b/tests/unit/tokenizers/test_hugging_face_tokenizer.py index 5be74f667..dcb309a84 100644 --- a/tests/unit/tokenizers/test_hugging_face_tokenizer.py +++ b/tests/unit/tokenizers/test_hugging_face_tokenizer.py @@ -2,15 +2,14 @@ environ["TRANSFORMERS_VERBOSITY"] = "error" -import pytest -from transformers import GPT2Tokenizer -from griptape.tokenizers import HuggingFaceTokenizer +import pytest # noqa: E402 +from griptape.tokenizers import HuggingFaceTokenizer # noqa: E402 class TestHuggingFaceTokenizer: @pytest.fixture def tokenizer(self): - return HuggingFaceTokenizer(tokenizer=GPT2Tokenizer.from_pretrained("gpt2"), max_output_tokens=1024) + return HuggingFaceTokenizer(model="gpt2", max_output_tokens=1024) def test_token_count(self, tokenizer): assert tokenizer.count_tokens("foo bar huzzah") == 5 diff --git a/tests/unit/tokenizers/test_openai_tokenizer.py b/tests/unit/tokenizers/test_openai_tokenizer.py index b27080aa3..4aa42a87a 100644 --- a/tests/unit/tokenizers/test_openai_tokenizer.py +++ b/tests/unit/tokenizers/test_openai_tokenizer.py @@ -13,6 +13,7 @@ def tokenizer(self, request): ("gpt-4-1106", 5), ("gpt-4-32k", 5), ("gpt-4", 5), + ("gpt-4o", 5), ("gpt-3.5-turbo-0301", 5), ("gpt-3.5-turbo-16k", 5), ("gpt-3.5-turbo", 5), @@ -38,11 +39,13 @@ def test_initialize_with_unknown_model(self): ("gpt-4-1106", 19), ("gpt-4-32k", 19), ("gpt-4", 19), + ("gpt-4o", 19), ("gpt-3.5-turbo-0301", 21), ("gpt-3.5-turbo-16k", 19), ("gpt-3.5-turbo", 19), ("gpt-35-turbo-16k", 19), ("gpt-35-turbo", 19), + ("gpt-35-turbo", 19), ], indirect=["tokenizer"], ) @@ -54,10 +57,18 @@ def test_token_count_for_messages(self, tokenizer, expected): == expected ) + @pytest.mark.parametrize("tokenizer,expected", [("not-real-model", 19)], indirect=["tokenizer"]) + def test_token_count_for_messages_unknown_model(self, tokenizer, expected): + with pytest.raises(NotImplementedError): + tokenizer.count_tokens( + [{"role": "system", "content": "foobar baz"}, {"role": "user", "content": "how foobar am I?"}] + ) + @pytest.mark.parametrize( "tokenizer,expected", [ ("gpt-4-1106", 127987), + ("gpt-4o", 127987), ("gpt-4-32k", 32755), ("gpt-4", 8179), ("gpt-3.5-turbo-16k", 16371), @@ -80,6 +91,7 @@ def test_input_tokens_left(self, tokenizer, expected): ("gpt-4-1106", 4091), ("gpt-4-32k", 4091), ("gpt-4", 4091), + ("gpt-4o", 4091), ("gpt-3.5-turbo-16k", 4091), ("gpt-3.5-turbo", 4091), ("gpt-35-turbo-16k", 4091), diff --git a/tests/unit/tokenizers/test_simple_tokenizer.py b/tests/unit/tokenizers/test_simple_tokenizer.py index a34c0d481..48fa1bdfb 100644 --- a/tests/unit/tokenizers/test_simple_tokenizer.py +++ b/tests/unit/tokenizers/test_simple_tokenizer.py @@ -5,7 +5,7 @@ class TestSimpleTokenizer: @pytest.fixture def tokenizer(self): - return SimpleTokenizer(max_input_tokens=1024, max_output_tokens=4096, characters_per_token=6) + return SimpleTokenizer(model="any model", max_input_tokens=1024, max_output_tokens=4096, characters_per_token=6) def test_token_count(self, tokenizer): assert tokenizer.count_tokens("foo bar huzzah") == 3 diff --git a/tests/unit/utils/test_prompt_stack.py b/tests/unit/utils/test_prompt_stack.py index 253e8cd44..80010abec 100644 --- a/tests/unit/utils/test_prompt_stack.py +++ b/tests/unit/utils/test_prompt_stack.py @@ -1,9 +1,5 @@ import pytest from griptape.utils import PromptStack -from tests.mocks.mock_prompt_driver import MockPromptDriver -from tests.mocks.mock_tokenizer import MockTokenizer -from griptape.structures.agent import Agent -from griptape.memory.structure import ConversationMemory, Run class TestPromptStack: @@ -43,97 +39,3 @@ def test_add_assistant_input(self, prompt_stack): assert prompt_stack.inputs[0].role == "assistant" assert prompt_stack.inputs[0].content == "foo" - - def test_add_conversation_memory_autopruing_disabled(self): - agent = Agent(prompt_driver=MockPromptDriver()) - memory = ConversationMemory( - autoprune=False, - runs=[ - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), - ], - ) - memory.structure = agent - prompt_stack = PromptStack() - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") - prompt_stack.add_conversation_memory(memory) - - assert len(prompt_stack.inputs) == 12 - - def test_add_conversation_memory_autopruing_enabled(self): - # All memory is pruned. - agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=0))) - memory = ConversationMemory( - autoprune=True, - runs=[ - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), - ], - ) - memory.structure = agent - prompt_stack = PromptStack() - prompt_stack.add_system_input("fizz") - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") - prompt_stack.add_conversation_memory(memory) - - assert len(prompt_stack.inputs) == 3 - - # No memory is pruned. - agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=1000))) - memory = ConversationMemory( - autoprune=True, - runs=[ - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), - ], - ) - memory.structure = agent - prompt_stack = PromptStack() - prompt_stack.add_system_input("fizz") - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") - prompt_stack.add_conversation_memory(memory) - - assert len(prompt_stack.inputs) == 13 - - # One memory is pruned. - # MockTokenizer's max_input_tokens set to one below the sum of memory + system prompt tokens - # so that a single memory is pruned. - agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=160))) - memory = ConversationMemory( - autoprune=True, - runs=[ - # All of these sum to 155 tokens with the MockTokenizer. - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), - ], - ) - memory.structure = agent - prompt_stack = PromptStack() - # And then another 6 tokens from fizz for a total of 161 tokens. - prompt_stack.add_system_input("fizz") - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") - prompt_stack.add_conversation_memory(memory, 1) - - # We expect one run (2 prompt stack inputs) to be pruned. - assert len(prompt_stack.inputs) == 11 - assert prompt_stack.inputs[0].content == "fizz" - assert prompt_stack.inputs[1].content == "foo2" - assert prompt_stack.inputs[2].content == "bar2" - assert prompt_stack.inputs[-2].content == "foo" - assert prompt_stack.inputs[-1].content == "bar" diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index 5206b6bd4..43e397cb1 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -67,10 +67,10 @@ class TesterPromptDriverOption: ), "AZURE_CHAT_35_TURBO_16K": TesterPromptDriverOption( prompt_driver=AzureOpenAiChatPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY_1"], + api_key=os.environ["AZURE_OPENAI_API_KEY_2"], model="gpt-35-turbo-16k", azure_deployment=os.environ["AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_2"], ), enabled=True, ), @@ -186,11 +186,15 @@ class TesterPromptDriverOption: prompt_driver=AmazonBedrockPromptDriver(model="mistral.mistral-small-2402-v1:0"), enabled=True ), "SAGEMAKER_LLAMA_7B": TesterPromptDriverOption( - prompt_driver=AmazonSageMakerJumpstartPromptDriver(endpoint=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"]), + prompt_driver=AmazonSageMakerJumpstartPromptDriver( + endpoint=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], model="meta-llama/Llama-2-7b-chat-hf" + ), enabled=False, ), "SAGEMAKER_FALCON_7b": TesterPromptDriverOption( - prompt_driver=AmazonSageMakerJumpstartPromptDriver(endpoint=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"]), + prompt_driver=AmazonSageMakerJumpstartPromptDriver( + endpoint=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], model="tiiuae/falcon-7b-instruct" + ), enabled=False, ), "GOOGLE_GEMINI_PRO": TesterPromptDriverOption( From 331c64305bedfe8e48f8aa06dfaf136af1d4144b Mon Sep 17 00:00:00 2001 From: Emily Danielson <2302515+emjay07@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:12:38 -0700 Subject: [PATCH 093/145] adding a link out to sample repo for multi-agents hosted in gtc (#850) --- docs/examples/multi-agent-workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/examples/multi-agent-workflow.md b/docs/examples/multi-agent-workflow.md index 2678bf3ab..36048272f 100644 --- a/docs/examples/multi-agent-workflow.md +++ b/docs/examples/multi-agent-workflow.md @@ -1,7 +1,7 @@ In this example we implement a multi-agent Workflow. We have a single "Researcher" Agent that conducts research on a topic, and then fans out to multiple "Writer" Agents to write blog posts based on the research. By splitting up our workloads across multiple Structures, we can parallelize the work and leverage the strengths of each Agent. The Researcher can focus on gathering data and insights, while the Writers can focus on crafting engaging narratives. -Additionally, this architecture opens us up to using services such as [Griptape Cloud](https://www.griptape.ai/cloud) to have each Agent run on a separate machine, allowing us to scale our Workflow as needed 🤯. +Additionally, this architecture opens us up to using services such as [Griptape Cloud](https://www.griptape.ai/cloud) to have each Agent run on a separate machine, allowing us to scale our Workflow as needed 🤯. To try out how this would work, you can deploy this example as multiple structures from our [Sample Structures](https://github.com/griptape-ai/griptape-sample-structures/tree/main/griptape-multi-agent-workflows) repo. ```python From ff6ddfd79614d97ea03d7e1c1dc1965f469d3ca2 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Tue, 11 Jun 2024 18:28:30 -0500 Subject: [PATCH 094/145] Fix `ActionSubtask` output value (#853) --- CHANGELOG.md | 1 + griptape/tasks/actions_subtask.py | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf643f4f5..988d2c6c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Workflow.insert_task()` no longer inserts duplicate tasks when given multiple parent tasks. - Performance issue in `OpenAiChatPromptDriver` when extracting unused rate-limiting headers. - Streaming not working when using deprecated `Structure.stream` field. +- Raw Tool output being lost when being executed by ActionsSubtask. ## [0.26.0] - 2024-06-04 diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index dfc54aca6..1546a825d 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -101,7 +101,13 @@ def run(self) -> BaseArtifact: else: results = self.execute_actions(self.actions) - self.output = ListArtifact([TextArtifact(name=f"{r[0]} output", value=r[1].to_text()) for r in results]) + actions_output = [] + for result in results: + tag, output = result + output.name = f"{tag} output" + + actions_output.append(output) + self.output = ListArtifact(actions_output) except Exception as e: self.structure.logger.error(f"Subtask {self.id}\n{e}", exc_info=True) From b634598f8b10783c81ec514738ddfd1355419e07 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 12 Jun 2024 10:07:16 -0700 Subject: [PATCH 095/145] Fix/standardize all links, enable docs strict mode (#852) --- docs/examples/amazon-dynamodb-sessions.md | 4 +-- docs/griptape-framework/data/artifacts.md | 4 +-- docs/griptape-framework/data/loaders.md | 20 +++++------ .../drivers/conversation-memory-drivers.md | 6 ++-- .../drivers/embedding-drivers.md | 16 ++++----- .../drivers/event-listener-drivers.md | 8 ++--- .../drivers/image-generation-drivers.md | 4 +-- .../drivers/image-query-drivers.md | 10 +++--- .../drivers/prompt-drivers.md | 2 +- .../griptape-framework/drivers/sql-drivers.md | 8 ++--- .../drivers/structure-run-drivers.md | 4 +-- .../drivers/vector-store-drivers.md | 18 +++++----- .../drivers/web-scraper-drivers.md | 4 +-- .../engines/audio-engines.md | 4 +-- .../engines/extraction-engines.md | 4 +-- .../engines/image-generation-engines.md | 8 ++--- .../engines/image-query-engines.md | 25 ------------- .../engines/query-engines.md | 35 ++++++++++++++++--- .../engines/summary-engines.md | 4 +-- docs/griptape-framework/structures/config.md | 2 +- .../structures/conversation-memory.md | 2 +- .../griptape-framework/structures/rulesets.md | 2 +- docs/griptape-framework/structures/tasks.md | 2 +- docs/griptape-framework/tools/index.md | 2 +- mkdocs.yml | 3 +- 25 files changed, 101 insertions(+), 100 deletions(-) delete mode 100644 docs/griptape-framework/engines/image-query-engines.md diff --git a/docs/examples/amazon-dynamodb-sessions.md b/docs/examples/amazon-dynamodb-sessions.md index 279cced2a..69e9fb815 100644 --- a/docs/examples/amazon-dynamodb-sessions.md +++ b/docs/examples/amazon-dynamodb-sessions.md @@ -1,8 +1,8 @@ Griptape provides [Conversation Memory](../griptape-framework/structures/conversation-memory.md) as a means of persisting conversation context across multiple Structure runs. If you provide it with a suitable Driver, the memory of the previous conversation can be preserved between run of a Structure, giving it additional context for how to respond. -While we can use the [LocalConversationMemoryDriver](../griptape-framework/drivers/conversation-memory-drivers.md#localconversationmemorydriver) to store the conversation history in a local file, this may not be suitable for production use cases. +While we can use the [LocalConversationMemoryDriver](../griptape-framework/drivers/conversation-memory-drivers.md#local) to store the conversation history in a local file, this may not be suitable for production use cases. -In this example, we will show you how to use the [AmazonDynamoDbConversationMemoryDriver](../griptape-framework/drivers/conversation-memory-drivers.md#amazondynamodbconversationmemorydriver) to persist the memory in an [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) table. Please refer to the [Amazon DynamoDB documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) for information on setting up DynamoDB. +In this example, we will show you how to use the [AmazonDynamoDbConversationMemoryDriver](../griptape-framework/drivers/conversation-memory-drivers.md#amazon-dynamodb) to persist the memory in an [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) table. Please refer to the [Amazon DynamoDB documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) for information on setting up DynamoDB. This code implements the idea of a generic "Session" that represents a Conversation Memory entry. For example, a "Session" could be used to represent an individual user's conversation, or a group conversation thread. diff --git a/docs/griptape-framework/data/artifacts.md b/docs/griptape-framework/data/artifacts.md index 18d5cb61f..5b69b120a 100644 --- a/docs/griptape-framework/data/artifacts.md +++ b/docs/griptape-framework/data/artifacts.md @@ -14,7 +14,7 @@ and access it with [embedding](../../reference/griptape/artifacts/text_artifact. ## CsvRowArtifact Used for passing structured row data around the framework. It inherits from [TextArtifact](../../reference/griptape/artifacts/text_artifact.md) and overrides the -[to_text()](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.to_text) method, which always returns a valid CSV row. +[to_text()](../../reference/griptape/artifacts/csv_row_artifact.md#griptape.artifacts.csv_row_artifact.CsvRowArtifact.to_text) method, which always returns a valid CSV row. ## InfoArtifact @@ -29,7 +29,7 @@ Used for passing errors back to the LLM without task memory storing them. Used for passing binary large objects (blobs) back to the LLM. Treat it as a way to return unstructured data, such as images, videos, audio, and other files back from tools. Each blob has a [name](../../reference/griptape/artifacts/base_artifact.md#griptape.artifacts.base_artifact.BaseArtifact.name) and -[dir](../../reference/griptape/artifacts/blob_artifact.md#griptape.artifacts.blob_artifact.BlobArtifact.dir) to uniquely identify stored objects. +[dir](../../reference/griptape/artifacts/blob_artifact.md#griptape.artifacts.blob_artifact.BlobArtifact.dir_name) to uniquely identify stored objects. [TaskMemory](../../reference/griptape/memory/task/task_memory.md) automatically stores [BlobArtifact](../../reference/griptape/artifacts/blob_artifact.md)s returned by tool activities that can be reused by other tools. diff --git a/docs/griptape-framework/data/loaders.md b/docs/griptape-framework/data/loaders.md index 69ffeda06..dbc578ccd 100644 --- a/docs/griptape-framework/data/loaders.md +++ b/docs/griptape-framework/data/loaders.md @@ -4,7 +4,7 @@ Loaders are used to load textual data from different sources and chunk it into [ Each loader can be used to load a single "document" with [load()](../../reference/griptape/loaders/base_loader.md#griptape.loaders.base_loader.BaseLoader.load) or multiple documents with [load_collection()](../../reference/griptape/loaders/base_loader.md#griptape.loaders.base_loader.BaseLoader.load_collection). -## Pdf Loader +## PDF !!! info This driver requires the `loaders-pdf` [extra](../index.md#extras). @@ -33,7 +33,7 @@ with open("attention.pdf", "rb") as attention, open("CoT.pdf", "rb") as cot: PdfLoader().load_collection(list(load_files(["attention.pdf", "CoT.pdf"]).values())) ``` -## Sql Loader +## SQL Can be used to load data from a SQL database into [CsvRowArtifact](../../reference/griptape/artifacts/csv_row_artifact.md)s: @@ -54,7 +54,7 @@ SqlLoader( ).load_collection(["SELECT 'foo', 'bar';", "SELECT 'fizz', 'buzz';"]) ``` -## Csv Loader +## CSV Can be used to load CSV files into [CsvRowArtifact](../../reference/griptape/artifacts/csv_row_artifact.md)s: @@ -76,7 +76,7 @@ CsvLoader().load_collection(list(load_files(["tests/resources/cities.csv", "test ``` -## DataFrame Loader +## DataFrame !!! info This driver requires the `loaders-dataframe` [extra](../index.md#extras). @@ -100,7 +100,7 @@ DataFrameLoader().load_collection( ``` -## Text Loader +## Text Used to load arbitrary text and text files: @@ -124,9 +124,9 @@ with open("example.txt", "r") as f: ) ``` -You can set a custom [tokenizer](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.tokenizer.md), [max_tokens](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.max_tokens.md) parameter, and [chunker](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.chunker.md). +You can set a custom [tokenizer](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.tokenizer), [max_tokens](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.max_tokens) parameter, and [chunker](../../reference/griptape/loaders/text_loader.md#griptape.loaders.text_loader.TextLoader.chunker). -## Web Loader +## Web !!! info This driver requires the `loaders-web` [extra](../index.md#extras). @@ -145,7 +145,7 @@ WebLoader().load_collection( ) ``` -## Image Loader +## Image !!! info This driver requires the `loaders-image` [extra](../index.md#extras). @@ -183,7 +183,7 @@ ImageLoader().load_collection(list(load_files(["tests/resources/mountain.png", " ``` -## Email Loader +## Email !!! info This driver requires the `loaders-email` [extra](../index.md#extras). @@ -200,7 +200,7 @@ loader.load(EmailLoader.EmailQuery(label="INBOX")) loader.load_collection([EmailLoader.EmailQuery(label="INBOX"), EmailLoader.EmailQuery(label="SENT")]) ``` -## Audio Loader +## Audio !!! info This driver requires the `loaders-audio` [extra](../index.md#extras). diff --git a/docs/griptape-framework/drivers/conversation-memory-drivers.md b/docs/griptape-framework/drivers/conversation-memory-drivers.md index 4c3de1e65..2ca5f8dd3 100644 --- a/docs/griptape-framework/drivers/conversation-memory-drivers.md +++ b/docs/griptape-framework/drivers/conversation-memory-drivers.md @@ -2,7 +2,7 @@ You can persist and load memory by using Conversation Memory Drivers. You can build drivers for your own data stores by extending [BaseConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/base_conversation_memory_driver.md). -### LocalConversationMemoryDriver +### Local The [LocalConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/local_conversation_memory_driver.md) allows you to persist Conversation Memory in a local JSON file. @@ -18,7 +18,7 @@ agent.run("Surfing is my favorite sport.") agent.run("What is my favorite sport?") ``` -### AmazonDynamoDbConversationMemoryDriver +### Amazon DynamoDb !!! info This driver requires the `drivers-memory-conversation-amazon-dynamodb` [extra](../index.md#extras). @@ -47,7 +47,7 @@ agent.run("What is my name?") ``` -### Redis Conversation Memory Driver +### Redis !!! info This driver requires the `drivers-memory-conversation-redis` [extra](../index.md#extras). diff --git a/docs/griptape-framework/drivers/embedding-drivers.md b/docs/griptape-framework/drivers/embedding-drivers.md index b7212e6ff..3f0135ac3 100644 --- a/docs/griptape-framework/drivers/embedding-drivers.md +++ b/docs/griptape-framework/drivers/embedding-drivers.md @@ -10,7 +10,7 @@ You can optionally provide a [Tokenizer](../misc/tokenizers.md) via the [tokeniz ## Embedding Drivers -### OpenAI Embeddings +### OpenAI The [OpenAiEmbeddingDriver](../../reference/griptape/drivers/embedding/openai_embedding_driver.md) uses the [OpenAI Embeddings API](https://platform.openai.com/docs/guides/embeddings). @@ -27,12 +27,12 @@ print(embeddings[:3]) [0.0017853748286142945, 0.006118456833064556, -0.005811543669551611] ``` -### Azure OpenAI Embeddings +### Azure OpenAI The [AzureOpenAiEmbeddingDriver](../../reference/griptape/drivers/embedding/azure_openai_embedding_driver.md) uses the same parameters as [OpenAiEmbeddingDriver](../../reference/griptape/drivers/embedding/openai_embedding_driver.md) with updated defaults. -### Bedrock Titan Embeddings +### Bedrock Titan !!! info This driver requires the `drivers-embedding-amazon-bedrock` [extra](../index.md#extras). @@ -51,7 +51,7 @@ print(embeddings[:3]) [-0.234375, -0.024902344, -0.14941406] ``` -### Google Embeddings +### Google !!! info This driver requires the `drivers-embedding-google` [extra](../index.md#extras). @@ -69,7 +69,7 @@ print(embeddings[:3]) [0.0588633, 0.0033929371, -0.072810836] ``` -### Hugging Face Hub Embeddings +### Hugging Face Hub !!! info This driver requires the `drivers-embedding-huggingface` [extra](../index.md#extras). @@ -99,7 +99,7 @@ embeddings = driver.embed_string("Hello world!") print(embeddings[:3]) ``` -### Amazon SageMaker Jumpstart Embeddings +### Amazon SageMaker Jumpstart The [AmazonSageMakerJumpstartEmbeddingDriver](../../reference/griptape/drivers/embedding/amazon_sagemaker_jumpstart_embedding_driver.md) uses the [Amazon SageMaker Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) to generate embeddings on AWS. @@ -120,7 +120,7 @@ embeddings = driver.embed_string("Hello world!") print(embeddings[:3]) ``` -### VoyageAI Embeddings +### VoyageAI The [VoyageAiEmbeddingDriver](../../reference/griptape/drivers/embedding/voyageai_embedding_driver.md) uses the [VoyageAI Embeddings API](https://www.voyageai.com/). !!! info @@ -140,7 +140,7 @@ embeddings = driver.embed_string("Hello world!") print(embeddings[:3]) ``` -### Cohere Embeddings +### Cohere The [CohereEmbeddingDriver](../../reference/griptape/drivers/embedding/cohere_embedding_driver.md) uses the [Cohere Embeddings API](https://docs.cohere.com/docs/embeddings). diff --git a/docs/griptape-framework/drivers/event-listener-drivers.md b/docs/griptape-framework/drivers/event-listener-drivers.md index 6e8f59b22..4a85bc9a4 100644 --- a/docs/griptape-framework/drivers/event-listener-drivers.md +++ b/docs/griptape-framework/drivers/event-listener-drivers.md @@ -66,7 +66,7 @@ event_driver.publish_event(done_event) Griptape offers the following Event Listener Drivers for forwarding Griptape Events. -### Amazon SQS Event Listener Driver +### Amazon SQS !!! info This driver requires the `drivers-event-listener-amazon-sqs` [extra](../index.md#extras). @@ -108,7 +108,7 @@ agent.run( ) ``` -### AWS IoT Event Listener Driver +### AWS IoT !!! info This driver requires the `drivers-event-listener-amazon-iot` [extra](../index.md#extras). @@ -152,7 +152,7 @@ agent = Agent( agent.run("I want to fly from Orlando to Boston") ``` -### Griptape Cloud Event Listener Driver +### Griptape Cloud The [GriptapeCloudEventListenerDriver](../../reference/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.md) sends Events to [Griptape Cloud](https://www.griptape.ai/cloud). @@ -212,7 +212,7 @@ agent = Agent( agent.run("Analyze the pros and cons of remote work vs. office work") ``` -### Pusher Event Listener Driver +### Pusher !!! info This driver requires the `drivers-event-listener-pusher` [extra](../index.md#extras). diff --git a/docs/griptape-framework/drivers/image-generation-drivers.md b/docs/griptape-framework/drivers/image-generation-drivers.md index 7389ff711..25572ba9c 100644 --- a/docs/griptape-framework/drivers/image-generation-drivers.md +++ b/docs/griptape-framework/drivers/image-generation-drivers.md @@ -27,7 +27,7 @@ agent.run("Generate a watercolor painting of a dog riding a skateboard") The [Amazon Bedrock Image Generation Driver](../../reference/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.md) provides multi-model access to image generation models hosted by Amazon Bedrock. This Driver manages API calls to the Bedrock API, while the specific Model Drivers below format the API requests and parse the responses. -#### Bedrock Stable Diffusion Model Driver +#### Stable Diffusion The [Bedrock Stable Diffusion Model Driver](../../reference/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.md) provides support for Stable Diffusion models hosted by Amazon Bedrock. This Model Driver supports configurations specific to Stable Diffusion, like style presets, clip guidance presets, and sampler. @@ -58,7 +58,7 @@ agent = Agent(tools=[ agent.run("Generate an image of a dog riding a skateboard") ``` -#### Bedrock Titan Image Generator Model Driver +#### Titan The [Bedrock Titan Image Generator Model Driver](../../reference/griptape/drivers/image_generation_model/bedrock_titan_image_generation_model_driver.md) provides support for Titan Image Generator models hosted by Amazon Bedrock. This Model Driver supports configurations specific to Titan Image Generator, like quality, seed, and cfg_scale. diff --git a/docs/griptape-framework/drivers/image-query-drivers.md b/docs/griptape-framework/drivers/image-query-drivers.md index d795838d4..8003924b1 100644 --- a/docs/griptape-framework/drivers/image-query-drivers.md +++ b/docs/griptape-framework/drivers/image-query-drivers.md @@ -1,11 +1,11 @@ # Image Query Drivers -Image Query Drivers are used by [Image Query Engines](../engines/image-query-engines.md) to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular Image Query Driver. +Image Query Drivers are used by [Image Query Engines](../engines/query-engines.md#image) to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular Image Query Driver. !!! info All Image Query Drivers default to a `max_tokens` of 256. It is recommended that you set this value to correspond to the desired response length. -## AnthropicImageQueryDriver +## Anthropic !!! info To tune `max_tokens`, see [Anthropic's documentation on image tokens](https://docs.anthropic.com/claude/docs/vision#image-costs) for more information on how to relate token count to response length. @@ -59,7 +59,7 @@ result = engine.run("Describe the weather in the image", [image_artifact1, image print(result) ``` -## OpenAiVisionImageQueryDriver +## OpenAI !!! info While the `max_tokens` field is optional, it is recommended to set this to a value that corresponds to the desired response length. Without an explicit value, the model will default to very short responses. See [OpenAI's documentation](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information on how to relate token count to response length. @@ -86,7 +86,7 @@ with open("tests/resources/mountain.png", "rb") as f: engine.run("Describe the weather in the image", [image_artifact]) ``` -## AzureOpenAiVisionImageQueryDriver +## Azure OpenAI !!! info In order to use the `gpt-4-vision-preview` model on Azure OpenAI, the `gpt-4` model must be deployed with the version set to `vision-preview`. More information can be found in the [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/gpt-with-vision). @@ -117,7 +117,7 @@ with open("tests/resources/mountain.png", "rb") as f: engine.run("Describe the weather in the image", [image_artifact]) ``` -## AmazonBedrockImageQueryDriver +## Amazon Bedrock The [Amazon Bedrock Image Query Driver](../../reference/griptape/drivers/image_query/amazon_bedrock_image_query_driver.md) provides multi-model access to image query models hosted by Amazon Bedrock. This Driver manages API calls to the Bedrock API, while the specific Model Drivers below format the API requests and parse the responses. diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 0f376cd5f..8d8877871 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -356,7 +356,7 @@ The [AmazonSageMakerJumpstartPromptDriver](../../reference/griptape/drivers/prom Amazon Sagemaker Jumpstart provides a wide range of models with varying capabilities. This Driver has been primarily _chat-optimized_ models that have a [Huggingface Chat Template](https://huggingface.co/docs/transformers/en/chat_templating) available. -If your model does not fit this use-case, we suggest sub-classing [AmazonSageMakerJumpstartPromptDriver](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.md) and overriding the [_to_model_input](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver/#griptape.drivers.prompt.amazon_sagemaker_jumpstart_prompt_driver.AmazonSagemakerJumpstartPromptDriver._to_model_input) and [_to_model_params](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver/#griptape.drivers.prompt.amazon_sagemaker_jumpstart_prompt_driver.AmazonSagemakerJumpstartPromptDriver._to_model_params) methods. +If your model does not fit this use-case, we suggest sub-classing [AmazonSageMakerJumpstartPromptDriver](../../reference/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.md) and overriding the `_to_model_input` and `_to_model_params` methods. ```python title="PYTEST_IGNORE" diff --git a/docs/griptape-framework/drivers/sql-drivers.md b/docs/griptape-framework/drivers/sql-drivers.md index 35377849a..c4b7dbcca 100644 --- a/docs/griptape-framework/drivers/sql-drivers.md +++ b/docs/griptape-framework/drivers/sql-drivers.md @@ -1,14 +1,14 @@ ## Overview SQL drivers can be used to make SQL queries and load table schemas. They are used by the [SqlLoader](../../reference/griptape/loaders/sql_loader.md) to process data. All loaders implement the following methods: -* `execute_query()` executes a query and returns [RowResult](../../reference/griptape/drivers/sql/base_sql_driver.md#griptape.drivers.sql.base_sql_driver.BaseSqlDriver.RowResult.md)s. +* `execute_query()` executes a query and returns [RowResult](../../reference/griptape/drivers/sql/base_sql_driver.md#griptape.drivers.sql.base_sql_driver.BaseSqlDriver.RowResult)s. * `execute_query_row()` executes a query and returns a raw result from SQL. * `get_table_schema()` returns a table schema. !!! info More database-specific SQL drivers are coming soon. -## SqlDriver +## SQL This is a basic SQL loader based on [SQLAlchemy 1.x](https://docs.sqlalchemy.org/en/14/). Here is an example of how to use it: @@ -22,7 +22,7 @@ driver = SqlDriver( driver.execute_query("select 'foo', 'bar';") ``` -## AmazonRedshiftSqlDriver +## Amazon Redshift !!! info This driver requires the `drivers-sql-redshift` [extra](../index.md#extras). @@ -46,7 +46,7 @@ driver = AmazonRedshiftSqlDriver( driver.execute_query("select * from people;") ``` -## SnowflakeSqlDriver +## Snowflake !!! info This driver requires the `drivers-sql-snowflake` [extra](../index.md#extras). diff --git a/docs/griptape-framework/drivers/structure-run-drivers.md b/docs/griptape-framework/drivers/structure-run-drivers.md index c2b94190c..54413c3a2 100644 --- a/docs/griptape-framework/drivers/structure-run-drivers.md +++ b/docs/griptape-framework/drivers/structure-run-drivers.md @@ -2,7 +2,7 @@ Structure Run Drivers can be used to run Griptape Structures in a variety of runtime environments. When combined with the [Structure Run Task](../../griptape-framework/structures/tasks.md#structure-run-task) or [Structure Run Client](../../griptape-tools/official-tools/structure-run-client.md) you can create complex, multi-agent pipelines that span multiple runtime environments. -## Local Structure Run Driver +## Local The [LocalStructureRunDriver](../../reference/griptape/drivers/structure_run/local_structure_run_driver.md) is used to run Griptape Structures in the same runtime environment as the code that is running the Structure. @@ -53,7 +53,7 @@ joke_coordinator = Pipeline( joke_coordinator.run("Tell me a joke") ``` -## Griptape Cloud Structure Run Driver +## Griptape Cloud The [GriptapeCloudStructureRunDriver](../../reference/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.md) is used to run Griptape Structures in the Griptape Cloud. diff --git a/docs/griptape-framework/drivers/vector-store-drivers.md b/docs/griptape-framework/drivers/vector-store-drivers.md index 73a416c84..481a2dd84 100644 --- a/docs/griptape-framework/drivers/vector-store-drivers.md +++ b/docs/griptape-framework/drivers/vector-store-drivers.md @@ -16,7 +16,7 @@ Each vector driver takes a [BaseEmbeddingDriver](../../reference/griptape/driver !!! info More vector drivers are coming soon. -## Local Vector Store Driver +## Local The [LocalVectorStoreDriver](../../reference/griptape/drivers/vector/local_vector_store_driver.md) can be used to load and query data from memory. Here is a complete example of how the driver can be used to load a webpage into the driver and query it later: @@ -47,7 +47,7 @@ print("\n\n".join(values)) ``` -## Pinecone Vector Store Driver +## Pinecone !!! info This driver requires the `drivers-vector-pinecone` [extra](../index.md#extras). @@ -103,7 +103,7 @@ result = vector_store_driver.query( ) ``` -## Marqo Vector Store Driver +## Marqo !!! info This driver requires the `drivers-vector-marqo` [extra](../index.md#extras). @@ -157,7 +157,7 @@ result = vector_store.query(query="What is griptape?") print(result) ``` -## Mongodb Atlas Vector Store Driver +## Mongodb Atlas !!! info This driver requires the `drivers-vector-mongodb` [extra](../index.md#extras). @@ -225,14 +225,14 @@ The format for creating a vector index should look similar to the following: ``` Replace `path_to_vector` with the expected field name where the vector content will be. -## Azure MongoDB Vector Store Driver +## Azure MongoDB !!! info This driver requires the `drivers-vector-mongodb` [extra](../index.md#extras). The [AzureMongoDbVectorStoreDriver](../../reference/griptape/drivers/vector/azure_mongodb_vector_store_driver.md) provides support for storing vector data in an Azure CosmosDb database account using the MongoDb vCore API -Here is an example of how the driver can be used to load and query information in an Azure CosmosDb MongoDb vCore database. It is almost the same as the [MongodbAtlasVectorStoreDriver](#mongodb-atlas-vector-store-driver): +Here is an example of how the driver can be used to load and query information in an Azure CosmosDb MongoDb vCore database. It is very similar to the Driver for [MongoDb Atlas](#mongodb-atlas): ```python from griptape.drivers import AzureMongoDbVectorStoreDriver, OpenAiEmbeddingDriver @@ -274,7 +274,7 @@ result = vector_store.query(query="What is griptape?") print(result) ``` -## Redis Vector Store Driver +## Redis !!! info This driver requires the `drivers-vector-redis` [extra](../index.md#extras). @@ -319,7 +319,7 @@ The format for creating a vector index should be similar to the following: FT.CREATE idx:griptape ON hash PREFIX 1 "griptape:" SCHEMA namespace TAG vector VECTOR FLAT 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE ``` -## OpenSearch Vector Store Driver +## OpenSearch !!! info This driver requires the `drivers-vector-opensearch` [extra](../index.md#extras). @@ -372,7 +372,7 @@ The body mappings for creating a vector index should look similar to the followi } ``` -## PGVector Vector Store Driver +## PGVector !!! info This driver requires the `drivers-vector-postgresql` [extra](../index.md#extras). diff --git a/docs/griptape-framework/drivers/web-scraper-drivers.md b/docs/griptape-framework/drivers/web-scraper-drivers.md index 888605b73..a02365b67 100644 --- a/docs/griptape-framework/drivers/web-scraper-drivers.md +++ b/docs/griptape-framework/drivers/web-scraper-drivers.md @@ -4,7 +4,7 @@ Web Scraper Drivers can be used to scrape text from the web. They are used by [W * `scrape_url()` scrapes text from a website and returns a [TextArtifact](../../reference/griptape/artifacts/text_artifact.md). The format of the scrapped text is determined by the Driver. -## Markdownify Web Scraper Driver +## Markdownify !!! info This driver requires the `drivers-web-scraper-markdownify` [extra](../index.md#extras) and the @@ -64,7 +64,7 @@ agent = Agent( agent.run("List all email addresses on griptape.ai in a flat numbered markdown list.") ``` -## Trafilatura Web Scraper Driver +## Trafilatura !!! info This driver requires the `drivers-web-scraper-trafilatura` [extra](../index.md#extras). diff --git a/docs/griptape-framework/engines/audio-engines.md b/docs/griptape-framework/engines/audio-engines.md index cbef1ef23..6494d5365 100644 --- a/docs/griptape-framework/engines/audio-engines.md +++ b/docs/griptape-framework/engines/audio-engines.md @@ -2,7 +2,7 @@ [Audio Generation Engines](../../reference/griptape/engines/audio/index.md) facilitate audio generation. Audio Generation Engines provides a `run` method that accepts the necessary inputs for its particular mode and provides the request to the configured [Driver](../drivers/text-to-speech-drivers.md). -### Text to Speech Engine +### Text to Speech This Engine facilitates synthesizing speech from text inputs. @@ -28,7 +28,7 @@ engine.run( ) ``` -### Audio Transcription Engine +### Audio Transcription The [Audio Transcription Engine](../../reference/griptape/engines/audio/audio_transcription_engine.md) facilitates transcribing speech from audio inputs. diff --git a/docs/griptape-framework/engines/extraction-engines.md b/docs/griptape-framework/engines/extraction-engines.md index f7969ff4a..101f81ba8 100644 --- a/docs/griptape-framework/engines/extraction-engines.md +++ b/docs/griptape-framework/engines/extraction-engines.md @@ -3,7 +3,7 @@ Extraction Engines in Griptape facilitate the extraction of data from text forma These engines play a crucial role in the functionality of [Extraction Tasks](../../griptape-framework/structures/tasks.md). As of now, Griptape supports two types of Extraction Engines: the CSV Extraction Engine and the JSON Extraction Engine. -## CSV Extraction Engine +## CSV The CSV Extraction Engine is designed specifically for extracting data from CSV-formatted content. @@ -39,7 +39,7 @@ Bob,35,California Charlie,40,Texas ``` -## JSON Extraction Engine +## JSON The JSON Extraction Engine is tailored for extracting data from JSON-formatted content. diff --git a/docs/griptape-framework/engines/image-generation-engines.md b/docs/griptape-framework/engines/image-generation-engines.md index 0c3997fa9..9d38fd197 100644 --- a/docs/griptape-framework/engines/image-generation-engines.md +++ b/docs/griptape-framework/engines/image-generation-engines.md @@ -39,7 +39,7 @@ engine.run( ) ``` -### Prompt Image Generation Engine +### Prompt Image This Engine facilitates generating images from text prompts. @@ -65,7 +65,7 @@ engine.run( ) ``` -### Variation Image Generation Engine +### Variation This Engine facilitates generating variations of an input image according to a text prompt. The input image is used as a reference for the model's generation. @@ -95,7 +95,7 @@ engine.run( ) ``` -### Inpainting Image Generation Engine +### Inpainting This Engine facilitates inpainting, or modifying an input image according to a text prompt within the bounds of a mask defined by mask image. After inpainting, the area specified by the mask is replaced with the model's generation, while the rest of the input image remains the same. @@ -130,7 +130,7 @@ engine.run( ) ``` -### Outpainting Image Generation Engine +### Outpainting This Engine facilitates outpainting, or modifying an input image according to a text prompt outside the bounds of a mask defined by a mask image. After outpainting, the area of the input image specified by the mask remains the same, while the rest is replaced with the model's generation. diff --git a/docs/griptape-framework/engines/image-query-engines.md b/docs/griptape-framework/engines/image-query-engines.md deleted file mode 100644 index 0457657f8..000000000 --- a/docs/griptape-framework/engines/image-query-engines.md +++ /dev/null @@ -1,25 +0,0 @@ -# ImageQueryEngine - -The [Image Query Engine](../../reference/griptape/engines/image_query/image_query_engine.md) is used to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular [Image Query Driver](../drivers/image-query-drivers.md). - -All Image Query Drivers default to a `max_tokens` of 256. You can tune this value based on your use case and the [Image Query Driver](../drivers/image-query-drivers.md) you are providing. - -```python -from griptape.drivers import OpenAiImageQueryDriver -from griptape.engines import ImageQueryEngine -from griptape.loaders import ImageLoader - -driver = OpenAiImageQueryDriver( - model="gpt-4o", - max_tokens=256 -) - -engine = ImageQueryEngine( - image_query_driver=driver -) - -with open("tests/resources/mountain.png", "rb") as f: - image_artifact = ImageLoader().load(f.read()) - -engine.run("Describe the weather in the image", [image_artifact]) -``` diff --git a/docs/griptape-framework/engines/query-engines.md b/docs/griptape-framework/engines/query-engines.md index 8acd4686d..71aab6416 100644 --- a/docs/griptape-framework/engines/query-engines.md +++ b/docs/griptape-framework/engines/query-engines.md @@ -1,13 +1,13 @@ ## Overview -Query engines are used to search collections of text. +Query engines are used to perform text queries against various modalities. -## VectorQueryEngine +## Vector -Used to query vector storages. You can set a custom [prompt_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.prompt_driver.md) and [vector_store_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.vector_store_driver.md). Uses [LocalVectorStoreDriver](../../reference/griptape/drivers/vector/local_vector_store_driver.md) by default. +Used to query vector storages. You can set a custom [prompt_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.prompt_driver) and [vector_store_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.vector_store_driver). Uses [LocalVectorStoreDriver](../../reference/griptape/drivers/vector/local_vector_store_driver.md) by default. -Use the [upsert_text_artifact](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.upsert_text_artifact.md) method to insert [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s into vector storage with an optional `namespace`. +Use the [upsert_text_artifact](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.upsert_text_artifact)s into vector storage with an optional `namespace`. -Use the [VectorQueryEngine](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.query.md) method to query the vector storage. +Use the [VectorQueryEngine](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.query) method to query the vector storage. ```python from griptape.drivers import OpenAiChatPromptDriver, LocalVectorStoreDriver, OpenAiEmbeddingDriver @@ -25,3 +25,28 @@ engine.upsert_text_artifacts( engine.query("what is griptape?", namespace="griptape") ``` + +## Image +The [Image Query Engine](../../reference/griptape/engines/image_query/image_query_engine.md) is used to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular [Image Query Driver](../drivers/image-query-drivers.md). + +All Image Query Drivers default to a `max_tokens` of 256. You can tune this value based on your use case and the [Image Query Driver](../drivers/image-query-drivers.md) you are providing. + +```python +from griptape.drivers import OpenAiImageQueryDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader + +driver = OpenAiImageQueryDriver( + model="gpt-4o", + max_tokens=256 +) + +engine = ImageQueryEngine( + image_query_driver=driver +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +engine.run("Describe the weather in the image", [image_artifact]) +``` diff --git a/docs/griptape-framework/engines/summary-engines.md b/docs/griptape-framework/engines/summary-engines.md index 8ecc1ad09..936c12a7c 100644 --- a/docs/griptape-framework/engines/summary-engines.md +++ b/docs/griptape-framework/engines/summary-engines.md @@ -2,11 +2,11 @@ Summary engines are used to summarize text and collections of [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s. -## PromptSummaryEngine +## Prompt Used to summarize texts with LLMs. You can set a custom [prompt_driver](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.prompt_driver), [template_generator](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.template_generator), and [chunker](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.chunker). -Use the [summarize_artifacts](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.summarize_artifacts) method to summarize a list of artifacts or [summarize_text](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.summarize_text) to summarize an arbitrary string. +Use the [summarize_artifacts](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.summarize_artifacts) method to summarize a list of artifacts or [summarize_text](../../reference/griptape/engines/summary/base_summary_engine.md#griptape.engines.summary.base_summary_engine.BaseSummaryEngine.summarize_text) to summarize an arbitrary string. ```python import io diff --git a/docs/griptape-framework/structures/config.md b/docs/griptape-framework/structures/config.md index 9637eaf35..d75354768 100644 --- a/docs/griptape-framework/structures/config.md +++ b/docs/griptape-framework/structures/config.md @@ -89,7 +89,7 @@ agent = Agent( ### Custom Configs -You can create your own [StructureConfig](../../reference/griptape/config/structure_config.md) by overriding the Drivers in [default_config](../../reference/griptape/config/structure_config.md#griptape.config.structure_config.StructureConfig.default_config). +You can create your own [StructureConfig](../../reference/griptape/config/structure_config.md) by overriding relevant Drivers. The [StructureConfig](../../reference/griptape/config/structure_config.md) class includes "Dummy" Drivers for all types, which throw a [DummyException](../../reference/griptape/exceptions/dummy_exception.md) if invoked without being overridden. This approach ensures that you are informed through clear error messages if you attempt to use Structures without proper Driver configurations. diff --git a/docs/griptape-framework/structures/conversation-memory.md b/docs/griptape-framework/structures/conversation-memory.md index 92fdf98c4..1707a2ad9 100644 --- a/docs/griptape-framework/structures/conversation-memory.md +++ b/docs/griptape-framework/structures/conversation-memory.md @@ -57,7 +57,7 @@ agent.run("Hello!") print(agent.conversation_memory) ``` -You can set the [max_runs](../../reference/griptape/memory/structure/conversation_memory.md#griptape.memory.structure.conversation_memory.ConversationMemory.max_runs) parameter to limit how many runs are kept in memory. +You can set the [max_runs](../../reference/griptape/memory/structure/base_conversation_memory.md#griptape.memory.structure.base_conversation_memory.BaseConversationMemory.max_runs) parameter to limit how many runs are kept in memory. ```python from griptape.structures import Agent diff --git a/docs/griptape-framework/structures/rulesets.md b/docs/griptape-framework/structures/rulesets.md index d97ea65cb..f245579b7 100644 --- a/docs/griptape-framework/structures/rulesets.md +++ b/docs/griptape-framework/structures/rulesets.md @@ -154,7 +154,7 @@ pipeline.run("I love skateboarding!") ### Rules -You can pass [rules](../../reference/griptape/tasks/prompt_task.md#griptape.tasks.prompt_task.PromptTask.rules) directly to the Task to have a Ruleset created for you. +You can pass [rules](../../reference/griptape/mixins/rule_mixin.md#griptape.mixins.rule_mixin.RuleMixin.rules) directly to the Task to have a Ruleset created for you. ```python from griptape.structures import Pipeline diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index 0f05ea3e2..c356ee0c7 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -627,7 +627,7 @@ pipeline.run("An image of a mountain shrouded by clouds") ## Image Query Task -The [Image Query Task](../../reference/griptape/tasks/image_query_task.md) executes a natural language query on one or more input images. This Task uses an [Image Query Engine](../engines/image-query-engines.md) configured with an [Image Query Driver](../drivers/image-query-drivers.md) to perform the query. The functionality provided by this Task depend on the capabilities of the model provided by the Driver. +The [Image Query Task](../../reference/griptape/tasks/image_query_task.md) executes a natural language query on one or more input images. This Task uses an [Image Query Engine](../engines/query-engines.md#image) configured with an [Image Query Driver](../drivers/image-query-drivers.md) to perform the query. The functionality provided by this Task depend on the capabilities of the model provided by the Driver. This Task accepts two inputs: a query (represented by either a string or a [Text Artifact](../data/artifacts.md#textartifact)) and a list of [Image Artifacts](../data/artifacts.md#imageartifact) or a Callable returning these two values. diff --git a/docs/griptape-framework/tools/index.md b/docs/griptape-framework/tools/index.md index 0ae8054af..4d604a77c 100644 --- a/docs/griptape-framework/tools/index.md +++ b/docs/griptape-framework/tools/index.md @@ -1,4 +1,4 @@ -# Overview +## Overview One of the most powerful features of Griptape is the ability for Toolkit Tasks to generate _chains of thought_ (CoT) and use tools that can interact with the outside world. We use the [ReAct](https://arxiv.org/abs/2210.03629) technique to implement CoT reasoning and acting in the underlying LLMs without using any fine-tuning. diff --git a/mkdocs.yml b/mkdocs.yml index 99231cce7..317409c55 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,7 @@ site_name: Griptape Docs hooks: - docs/plugins/swagger_ui_plugin.py +strict: true plugins: - glightbox - search @@ -96,7 +97,6 @@ nav: - Extraction Engines: "griptape-framework/engines/extraction-engines.md" - Summary Engines: "griptape-framework/engines/summary-engines.md" - Image Generation Engines: "griptape-framework/engines/image-generation-engines.md" - - Image Query Engines: "griptape-framework/engines/image-query-engines.md" - Audio Engines: "griptape-framework/engines/audio-engines.md" - Drivers: - Prompt Drivers: "griptape-framework/drivers/prompt-drivers.md" @@ -148,6 +148,7 @@ nav: - ImageQueryClient: "griptape-tools/official-tools/image-query-client.md" - TextToSpeechClient: "griptape-tools/official-tools/text-to-speech-client.md" - AudioTranscriptionClient: "griptape-tools/official-tools/audio-transcription-client.md" + - GriptapeCloudKnowledgeBaseClient: "griptape-tools/official-tools/griptape-cloud-knowledge-base-client.md" - Custom Tools: - Building Custom Tools: "griptape-tools/custom-tools/index.md" - Recipes: From 71c8d4dd950b88f47fc26cbc8d074919d21b93af Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 12 Jun 2024 14:39:34 -0700 Subject: [PATCH 096/145] Fix header indents (#855) --- docs/griptape-framework/drivers/prompt-drivers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 8d8877871..c765030d8 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -347,7 +347,7 @@ agent = Agent( agent.run("How many helicopters can a human eat in one sitting?") ``` -#### Amazon SageMaker Jumpstart +### Amazon SageMaker Jumpstart !!! info This driver requires the `drivers-prompt-amazon-sagemaker` [extra](../index.md#extras). From bfd7896ff90f4febe1c13cfc9c4a2e594a74aa36 Mon Sep 17 00:00:00 2001 From: CJ Kindel Date: Wed, 12 Jun 2024 15:02:54 -0700 Subject: [PATCH 097/145] Re-order Workflow tasks on every task execution wave (#857) --- CHANGELOG.md | 1 + griptape/structures/workflow.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 988d2c6c6..6fef1a154 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Performance issue in `OpenAiChatPromptDriver` when extracting unused rate-limiting headers. - Streaming not working when using deprecated `Structure.stream` field. - Raw Tool output being lost when being executed by ActionsSubtask. +- Re-order Workflow tasks on every task execution wave. ## [0.26.0] - 2024-06-04 diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index a9c571af2..417dd313f 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -92,11 +92,11 @@ def insert_task( def try_run(self, *args) -> Workflow: self._execution_args = args - ordered_tasks = self.order_tasks() exit_loop = False while not self.is_finished() and not exit_loop: futures_list = {} + ordered_tasks = self.order_tasks() for task in ordered_tasks: if task.can_execute(): From 7c36226f4efdc3ea4c161f9224183250383fb6ec Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Thu, 13 Jun 2024 13:00:34 -0400 Subject: [PATCH 098/145] Handle errors in web loader and return ErrorArtifact (#858) --- CHANGELOG.md | 1 + griptape/loaders/web_loader.py | 7 +++++-- tests/unit/loaders/test_web_loader.py | 19 +++++++++++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6fef1a154..709bea35d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,6 +61,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Streaming not working when using deprecated `Structure.stream` field. - Raw Tool output being lost when being executed by ActionsSubtask. - Re-order Workflow tasks on every task execution wave. +- Web Loader to catch Exceptions and properly return an ErrorArtifact. ## [0.26.0] - 2024-06-04 diff --git a/griptape/loaders/web_loader.py b/griptape/loaders/web_loader.py index f8862f7cd..64a52b65f 100644 --- a/griptape/loaders/web_loader.py +++ b/griptape/loaders/web_loader.py @@ -13,5 +13,8 @@ class WebLoader(BaseTextLoader): ) def load(self, source: str, *args, **kwargs) -> ErrorArtifact | list[TextArtifact]: - single_chunk_text_artifact = self.web_scraper_driver.scrape_url(source) - return self._text_to_artifacts(single_chunk_text_artifact.value) + try: + single_chunk_text_artifact = self.web_scraper_driver.scrape_url(source) + return self._text_to_artifacts(single_chunk_text_artifact.value) + except Exception as e: + return ErrorArtifact(f"Error loading from source: {source}", exception=e) diff --git a/tests/unit/loaders/test_web_loader.py b/tests/unit/loaders/test_web_loader.py index fb63e87eb..e26573539 100644 --- a/tests/unit/loaders/test_web_loader.py +++ b/tests/unit/loaders/test_web_loader.py @@ -1,4 +1,5 @@ import pytest +from griptape.artifacts.error_artifact import ErrorArtifact from griptape.loaders import WebLoader from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -22,6 +23,14 @@ def test_load(self, loader): assert artifacts[0].embedding == [0, 1] + def test_load_exception(self, mocker, loader): + mocker.patch("trafilatura.fetch_url", side_effect=Exception("error")) + source = "https://github.com/griptape-ai/griptape" + artifact = loader.load(source) + + assert isinstance(artifact, ErrorArtifact) + assert f"Error loading from source: {source}" == artifact.value + def test_load_collection(self, loader): artifacts = loader.load_collection( ["https://github.com/griptape-ai/griptape", "https://github.com/griptape-ai/griptape-docs"] @@ -38,11 +47,13 @@ def test_load_collection(self, loader): def test_empty_page_string_response(self, loader, mocker): mocker.patch("trafilatura.extract", return_value="") - with pytest.raises(Exception, match="can't extract page"): - loader.load("https://example.com/") + artifact = loader.load("https://example.com/") + assert isinstance(artifact, ErrorArtifact) + assert str(artifact.exception) == "can't extract page" def test_empty_page_none_response(self, loader, mocker): mocker.patch("trafilatura.extract", return_value=None) - with pytest.raises(Exception, match="can't extract page"): - loader.load("https://example.com/") + artifact = loader.load("https://example.com/") + assert isinstance(artifact, ErrorArtifact) + assert str(artifact.exception) == "can't extract page" From e54a04ba6adfe9b78d9e3901f06f2802396793c9 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Thu, 13 Jun 2024 14:15:05 -0500 Subject: [PATCH 099/145] Add structure property `output`; add `output_task.output` check (#862) --- CHANGELOG.md | 4 +++- griptape/structures/agent.py | 2 +- griptape/structures/pipeline.py | 4 ++-- griptape/structures/structure.py | 6 +++++- griptape/structures/workflow.py | 2 +- tests/unit/structures/test_agent.py | 10 +++++++++ tests/unit/structures/test_workflow.py | 28 +++++++++++++++++++++++++- tests/utils/structure_tester.py | 2 +- 8 files changed, 50 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 709bea35d..5b42fba26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Raw Tool output being lost when being executed by ActionsSubtask. - Re-order Workflow tasks on every task execution wave. - Web Loader to catch Exceptions and properly return an ErrorArtifact. +- Conversation Memory entry only added if `output_task.output` is not `None` on all `Structures` ## [0.26.0] - 2024-06-04 @@ -72,7 +73,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AudioTranscriptionTask` and `AudioTranscriptionClient` for transcribing audio content in Structures. - `OpenAiAudioTranscriptionDriver` for integration with OpenAI's speech-to-text models, including Whisper. - Parameter `env` to `BaseStructureRunDriver` to set environment variables for a Structure Run. -- `PusherEventListenerDriver` to enable sending of framework events over a Pusher WebSocket. +- `PusherEventListenerDriver` to enable sending of framework events over a Pusher WebSocket. +- Parameter `output` on `Structure` as a convenience for `output_task.output` ### Changed - **BREAKING**: Updated OpenAI-based image query drivers to remove Vision from the name. diff --git a/griptape/structures/agent.py b/griptape/structures/agent.py index 79b831f63..2348002b5 100644 --- a/griptape/structures/agent.py +++ b/griptape/structures/agent.py @@ -53,7 +53,7 @@ def try_run(self, *args) -> Agent: self.task.execute() - if self.conversation_memory: + if self.conversation_memory and self.output is not None: if isinstance(self.task.input, tuple): input_text = self.task.input[0].to_text() else: diff --git a/griptape/structures/pipeline.py b/griptape/structures/pipeline.py index 00c5f1d09..1d0aebd91 100644 --- a/griptape/structures/pipeline.py +++ b/griptape/structures/pipeline.py @@ -49,13 +49,13 @@ def try_run(self, *args) -> Pipeline: self.__run_from_task(self.input_task) - if self.conversation_memory: + if self.conversation_memory and self.output is not None: if isinstance(self.input_task.input, tuple): input_text = self.input_task.input[0].to_text() else: input_text = self.input_task.input.to_text() - run = Run(input=input_text, output=self.output_task.output.to_text()) + run = Run(input=input_text, output=self.output.to_text()) self.conversation_memory.add_run(run) diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 6f2d857c4..0632b9328 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -9,7 +9,7 @@ from attrs import Factory, define, field from rich.logging import RichHandler -from griptape.artifacts import BlobArtifact, TextArtifact +from griptape.artifacts import BlobArtifact, TextArtifact, BaseArtifact from griptape.config import BaseStructureConfig, OpenAiStructureConfig, StructureConfig from griptape.drivers import BaseEmbeddingDriver, BasePromptDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.drivers.vector.local_vector_store_driver import LocalVectorStoreDriver @@ -127,6 +127,10 @@ def input_task(self) -> Optional[BaseTask]: def output_task(self) -> Optional[BaseTask]: return self.tasks[-1] if self.tasks else None + @property + def output(self) -> Optional[BaseArtifact]: + return self.output_task.output if self.output_task is not None else None + @property def finished_tasks(self) -> list[BaseTask]: return [s for s in self.tasks if s.is_finished()] diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 417dd313f..7073fa43b 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -110,7 +110,7 @@ def try_run(self, *args) -> Workflow: break - if self.conversation_memory: + if self.conversation_memory and self.output is not None: if isinstance(self.input_task.input, tuple): input_text = self.input_task.input[0].to_text() else: diff --git a/tests/unit/structures/test_agent.py b/tests/unit/structures/test_agent.py index 371aee8a8..e6c2a1f01 100644 --- a/tests/unit/structures/test_agent.py +++ b/tests/unit/structures/test_agent.py @@ -252,3 +252,13 @@ def test_deprecation(self): with pytest.deprecated_call(): Agent(stream=True) + + def finished_tasks(self): + task = PromptTask("test prompt") + agent = Agent(prompt_driver=MockPromptDriver()) + + agent.add_task(task) + + agent.run("hello") + + assert len(agent.finished_tasks) == 1 diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index c11c837b7..14661036d 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -1,16 +1,34 @@ +import time import pytest +from pytest import fixture from griptape.memory.task.storage import TextArtifactStorage from tests.mocks.mock_prompt_driver import MockPromptDriver from griptape.rules import Rule, Ruleset -from griptape.tasks import PromptTask, BaseTask, ToolkitTask +from griptape.tasks import PromptTask, BaseTask, ToolkitTask, CodeExecutionTask from griptape.structures import Workflow +from griptape.artifacts import ErrorArtifact, TextArtifact from griptape.memory.structure import ConversationMemory from tests.mocks.mock_tool.tool import MockTool from tests.mocks.mock_embedding_driver import MockEmbeddingDriver class TestWorkflow: + @fixture + def waiting_task(self): + def fn(task): + time.sleep(10) + return TextArtifact("done") + + return CodeExecutionTask(run_fn=fn) + + @fixture + def error_artifact_task(self): + def fn(task): + return ErrorArtifact("error") + + return CodeExecutionTask(run_fn=fn) + def test_init(self): driver = MockPromptDriver() workflow = Workflow(prompt_driver=driver, rulesets=[Ruleset("TestRuleset", [Rule("test")])]) @@ -691,6 +709,14 @@ def test_deprecation(self): with pytest.deprecated_call(): Workflow(stream=True) + def test_run_with_error_artifact(self, error_artifact_task, waiting_task): + end_task = PromptTask("end") + end_task.add_parents([error_artifact_task, waiting_task]) + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[waiting_task, error_artifact_task, end_task]) + workflow.run() + + assert workflow.output is None + @staticmethod def _validate_topology_1(workflow): assert len(workflow.tasks) == 4 diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index 43e397cb1..8d62bc835 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -237,7 +237,7 @@ def verify_structure_output(self, structure) -> dict: ) task_names = [task.__class__.__name__ for task in structure.tasks] prompt = structure.input_task.input.to_text() - actual = structure.output_task.output.to_text() + actual = structure.output.to_text() rules = [rule.value for ruleset in structure.input_task.all_rulesets for rule in ruleset.rules] agent = Agent( From 9b934ee192deccbd682ee15305e7228be207aac8 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Thu, 13 Jun 2024 14:25:35 -0500 Subject: [PATCH 100/145] Fix `WebSearch.search` output (#854) --- CHANGELOG.md | 1 + griptape/tools/web_search/tool.py | 3 ++- tests/unit/tools/test_web_search.py | 33 +++++++++++++++++++++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b42fba26..a34ff5f73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,6 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Re-order Workflow tasks on every task execution wave. - Web Loader to catch Exceptions and properly return an ErrorArtifact. - Conversation Memory entry only added if `output_task.output` is not `None` on all `Structures` +- `TextArtifacts` contained in `ListArtifact` returned by `WebSearch.search` to properly formatted stringified JSON. ## [0.26.0] - 2024-06-04 diff --git a/griptape/tools/web_search/tool.py b/griptape/tools/web_search/tool.py index 6ad25ebf0..acc358342 100644 --- a/griptape/tools/web_search/tool.py +++ b/griptape/tools/web_search/tool.py @@ -5,6 +5,7 @@ from griptape.tools import BaseTool from griptape.utils.decorators import activity import requests +import json @define @@ -32,7 +33,7 @@ def search(self, props: dict) -> ListArtifact | ErrorArtifact: query = props["values"]["query"] try: - return ListArtifact([TextArtifact(str(result)) for result in self._search_google(query)]) + return ListArtifact([TextArtifact(json.dumps(result)) for result in self._search_google(query)]) except Exception as e: return ErrorArtifact(f"error searching Google: {e}") diff --git a/tests/unit/tools/test_web_search.py b/tests/unit/tools/test_web_search.py index faa1056b7..c9a79b452 100644 --- a/tests/unit/tools/test_web_search.py +++ b/tests/unit/tools/test_web_search.py @@ -1,9 +1,34 @@ -from griptape.artifacts import BaseArtifact +from griptape.artifacts import BaseArtifact, ErrorArtifact from griptape.tools import WebSearch +from pytest import fixture +import json class TestWebSearch: - def test_search(self): - tool = WebSearch(google_api_key="foo", google_api_search_id="bar") + @fixture + def websearch_tool(self, mocker): + mock_response = mocker.Mock() + mock_response.status_code = 200 + mock_response.json.return_value = {"items": [{"title": "foo", "link": "bar", "snippet": "baz"}]} + mocker.patch("requests.get", return_value=mock_response) - assert isinstance(tool.search({"values": {"query": "foo bar"}}), BaseArtifact) + return WebSearch(google_api_key="foo", google_api_search_id="bar") + + @fixture + def websearch_tool_with_error(self, mocker): + mock_response = mocker.Mock() + mock_response.status_code = 500 + mocker.patch("requests.get", return_value=mock_response) + + return WebSearch(google_api_key="foo", google_api_search_id="bar") + + def test_search(self, websearch_tool): + assert isinstance(websearch_tool.search({"values": {"query": "foo bar"}}), BaseArtifact) + assert json.loads(websearch_tool.search({"values": {"query": "foo bar"}}).value[0].value) == { + "title": "foo", + "url": "bar", + "description": "baz", + } + + def test_search_with_error(self, websearch_tool_with_error): + assert isinstance(websearch_tool_with_error.search({"values": {"query": "foo bar"}}), ErrorArtifact) From 5fe8c635ab139bc2a121ae1365c041d98d2b0728 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 13 Jun 2024 17:26:54 -0700 Subject: [PATCH 101/145] Reset Tasks and set Structure args before run (#865) --- CHANGELOG.md | 2 ++ griptape/structures/agent.py | 4 ---- griptape/structures/pipeline.py | 4 ---- griptape/structures/structure.py | 8 ++++++-- griptape/structures/workflow.py | 1 - 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a34ff5f73..62265868d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated `HuggingFaceHubPromptDriver` to use `transformers`'s `apply_chat_template`. - Updated `HuggingFacePipelinePromptDriver` to use chat features of `transformers.TextGenerationPipeline`. - Updated `CoherePromptDriver` to use Cohere's latest SDK. +- Moved Task reset logic for all Structures to `Structure.before_run`. ### Fixed - `Workflow.insert_task()` no longer inserts duplicate tasks when given multiple parent tasks. @@ -64,6 +65,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Web Loader to catch Exceptions and properly return an ErrorArtifact. - Conversation Memory entry only added if `output_task.output` is not `None` on all `Structures` - `TextArtifacts` contained in `ListArtifact` returned by `WebSearch.search` to properly formatted stringified JSON. +- Structure run args not being set immediately. ## [0.26.0] - 2024-06-04 diff --git a/griptape/structures/agent.py b/griptape/structures/agent.py index 2348002b5..d0446aff0 100644 --- a/griptape/structures/agent.py +++ b/griptape/structures/agent.py @@ -47,10 +47,6 @@ def add_tasks(self, *tasks: BaseTask) -> list[BaseTask]: return super().add_tasks(*tasks) def try_run(self, *args) -> Agent: - self._execution_args = args - - self.task.reset() - self.task.execute() if self.conversation_memory and self.output is not None: diff --git a/griptape/structures/pipeline.py b/griptape/structures/pipeline.py index 1d0aebd91..d5724244e 100644 --- a/griptape/structures/pipeline.py +++ b/griptape/structures/pipeline.py @@ -43,10 +43,6 @@ def insert_task(self, parent_task: BaseTask, task: BaseTask) -> BaseTask: return task def try_run(self, *args) -> Pipeline: - self._execution_args = args - - [task.reset() for task in self.tasks] - self.__run_from_task(self.input_task) if self.conversation_memory and self.output is not None: diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 0632b9328..78dd69633 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -233,7 +233,11 @@ def resolve_relationships(self) -> None: if task.id not in child.parent_ids: child.parent_ids.append(task.id) - def before_run(self) -> None: + def before_run(self, args: Any) -> None: + self._execution_args = args + + [task.reset() for task in self.tasks] + self.publish_event( StartStructureRunEvent( structure_id=self.id, input_task_input=self.input_task.input, input_task_output=self.input_task.output @@ -256,7 +260,7 @@ def after_run(self) -> None: def add_task(self, task: BaseTask) -> BaseTask: ... def run(self, *args) -> Structure: - self.before_run() + self.before_run(args) result = self.try_run(*args) diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 7073fa43b..f9570edc0 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -91,7 +91,6 @@ def insert_task( return task def try_run(self, *args) -> Workflow: - self._execution_args = args exit_loop = False while not self.is_finished() and not exit_loop: From 76f55940adce5a03ac9511bacaca1a1298b06006 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Fri, 14 Jun 2024 18:08:05 -0500 Subject: [PATCH 102/145] Split `PromptSummaryEngine` prompt stack template (#866) --- CHANGELOG.md | 4 +++ .../engines/summary/prompt_summary_engine.py | 32 +++++++++++++------ .../engines/summary/prompt_summary.j2 | 27 ---------------- griptape/templates/engines/summary/system.j2 | 14 ++++++++ griptape/templates/engines/summary/user.j2 | 5 +++ griptape/templates/tasks/tool_task/system.j2 | 3 +- .../summary/test_prompt_summary_engine.py | 18 +++++++++++ 7 files changed, 65 insertions(+), 38 deletions(-) delete mode 100644 griptape/templates/engines/summary/prompt_summary.j2 create mode 100644 griptape/templates/engines/summary/system.j2 create mode 100644 griptape/templates/engines/summary/user.j2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 62265868d..d7b4e4480 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Removed `SagemakerHuggingfaceEmbeddingModelDriver`, use `AmazonSageMakerJumpstartEmbeddingDriver` instead. - **BREAKING**: Removed `SagemakerTensorflowHubEmbeddingModelDriver`, use `AmazonSageMakerJumpstartEmbeddingDriver` instead. - **BREAKING**: `AmazonSageMakerJumpstartPromptDriver.model` parameter, which gets passed to `SageMakerRuntime.Client.invoke_endpoint` as `EndpointName`, is now renamed to `AmazonSageMakerPromptDriver.endpoint`. +- **BREAKING**: Removed parameter `template_generator` on `PromptSummaryEngine` and added parameters `system_template_generator` and `user_template_generator`. +- **BREAKING**: Removed template `engines/summary/prompt_summary.j2` and added templates `engines/summary/system.j2` and `engines/summary/user.j2`. - `ToolkitTask.RESPONSE_STOP_SEQUENCE` is now only added when using `ToolkitTask`. - Updated Prompt Drivers to use `BasePromptDriver.max_tokens` instead of using `BasePromptDriver.max_output_tokens()`. - Improved error message when `GriptapeCloudKnowledgeBaseClient` does not have a description set. @@ -55,6 +57,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated `HuggingFacePipelinePromptDriver` to use chat features of `transformers.TextGenerationPipeline`. - Updated `CoherePromptDriver` to use Cohere's latest SDK. - Moved Task reset logic for all Structures to `Structure.before_run`. +- Updated default prompt templates for `PromptSummaryEngine`. +- Updated template `templates/tasks/tool_task/system.j2`. ### Fixed - `Workflow.insert_task()` no longer inserts duplicate tasks when given multiple parent tasks. diff --git a/griptape/engines/summary/prompt_summary_engine.py b/griptape/engines/summary/prompt_summary_engine.py index 0da99cb0a..9d3e8db78 100644 --- a/griptape/engines/summary/prompt_summary_engine.py +++ b/griptape/engines/summary/prompt_summary_engine.py @@ -13,7 +13,8 @@ class PromptSummaryEngine(BaseSummaryEngine): chunk_joiner: str = field(default="\n\n", kw_only=True) max_token_multiplier: float = field(default=0.5, kw_only=True) - template_generator: J2 = field(default=Factory(lambda: J2("engines/summary/prompt_summary.j2")), kw_only=True) + system_template_generator: J2 = field(default=Factory(lambda: J2("engines/summary/system.j2")), kw_only=True) + user_template_generator: J2 = field(default=Factory(lambda: J2("engines/summary/user.j2")), kw_only=True) prompt_driver: BasePromptDriver = field(kw_only=True) chunker: BaseChunker = field( default=Factory( @@ -49,25 +50,38 @@ def summarize_artifacts_rec( ) -> TextArtifact: artifacts_text = self.chunk_joiner.join([a.to_text() for a in artifacts]) - full_text = self.template_generator.render( - summary=summary, text=artifacts_text, rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets) + system_prompt = self.system_template_generator.render( + summary=summary, rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets) ) - if self.prompt_driver.tokenizer.count_input_tokens_left(full_text) >= self.min_response_tokens: + user_prompt = self.user_template_generator.render(text=artifacts_text) + + if ( + self.prompt_driver.tokenizer.count_input_tokens_left(user_prompt + system_prompt) + >= self.min_response_tokens + ): return self.prompt_driver.run( - PromptStack(inputs=[PromptStack.Input(full_text, role=PromptStack.USER_ROLE)]) + PromptStack( + inputs=[ + PromptStack.Input(system_prompt, role=PromptStack.SYSTEM_ROLE), + PromptStack.Input(user_prompt, role=PromptStack.USER_ROLE), + ] + ) ) else: chunks = self.chunker.chunk(artifacts_text) - partial_text = self.template_generator.render( - summary=summary, text=chunks[0].value, rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets) - ) + partial_text = self.user_template_generator.render(text=chunks[0].value) return self.summarize_artifacts_rec( chunks[1:], self.prompt_driver.run( - PromptStack(inputs=[PromptStack.Input(partial_text, role=PromptStack.USER_ROLE)]) + PromptStack( + inputs=[ + PromptStack.Input(system_prompt, role=PromptStack.SYSTEM_ROLE), + PromptStack.Input(partial_text, role=PromptStack.USER_ROLE), + ] + ) ).value, rulesets=rulesets, ) diff --git a/griptape/templates/engines/summary/prompt_summary.j2 b/griptape/templates/engines/summary/prompt_summary.j2 deleted file mode 100644 index 717810de6..000000000 --- a/griptape/templates/engines/summary/prompt_summary.j2 +++ /dev/null @@ -1,27 +0,0 @@ -{% if summary %} -Current text summary: """ -{{ summary }} -""" - -Rewrite the current text summary to include the following additional text: """ -{{ text }} -""" -{% if rulesets %} - -{{ rulesets }} -{% endif %} - -Rewritten summary: -{% else %} - -Summarize the following text: """ -{{ text }} -""" - -{% if rulesets %} - -{{ rulesets }} -{% endif %} - -Summary: -{% endif %} diff --git a/griptape/templates/engines/summary/system.j2 b/griptape/templates/engines/summary/system.j2 new file mode 100644 index 000000000..b5e132aa0 --- /dev/null +++ b/griptape/templates/engines/summary/system.j2 @@ -0,0 +1,14 @@ +You are an expert in text summarization. +{% if rulesets %} + +{{ rulesets }} + +{% endif %} + +{% if summary %} +Use the current text summary to help summarize the additional text. +Current text summary: """ +{{ summary }} +""" + +{% endif %} diff --git a/griptape/templates/engines/summary/user.j2 b/griptape/templates/engines/summary/user.j2 new file mode 100644 index 000000000..d6a40e412 --- /dev/null +++ b/griptape/templates/engines/summary/user.j2 @@ -0,0 +1,5 @@ +Summarize the following text: """ +{{ text }} +""" + +Summary: diff --git a/griptape/templates/tasks/tool_task/system.j2 b/griptape/templates/tasks/tool_task/system.j2 index eaf858037..7a802d989 100644 --- a/griptape/templates/tasks/tool_task/system.j2 +++ b/griptape/templates/tasks/tool_task/system.j2 @@ -1,5 +1,4 @@ -When appropriate, respond to requests by using the following Action Schema. Your response should be a plain JSON object that successfully validates against the schema. The schema is provided below. If you can't use the Action Schema, say "I don't know how to respond." - +You must respond to requests by using the following Action Schema. Your response should be a plain JSON object that successfully validates against the schema. The schema is provided below. If you can't use the Action Schema, say "I don't know how to respond." Action Schema: {{ action_schema }} {% if meta_memory %} diff --git a/tests/unit/engines/summary/test_prompt_summary_engine.py b/tests/unit/engines/summary/test_prompt_summary_engine.py index 52179bdfb..cc4b94000 100644 --- a/tests/unit/engines/summary/test_prompt_summary_engine.py +++ b/tests/unit/engines/summary/test_prompt_summary_engine.py @@ -2,6 +2,7 @@ from griptape.artifacts import TextArtifact, ListArtifact from griptape.engines import PromptSummaryEngine from tests.mocks.mock_prompt_driver import MockPromptDriver +import os class TestPromptSummaryEngine: @@ -16,3 +17,20 @@ def test_summarize_artifacts(self, engine): assert ( engine.summarize_artifacts(ListArtifact([TextArtifact("foo"), TextArtifact("bar")])).value == "mock output" ) + + def test_max_token_multiplier_invalid(self, engine): + with pytest.raises(ValueError): + PromptSummaryEngine(prompt_driver=MockPromptDriver(), max_token_multiplier=0) + + with pytest.raises(ValueError): + PromptSummaryEngine(prompt_driver=MockPromptDriver(), max_token_multiplier=10000) + + def test_chunked_summary(self, engine): + engine = PromptSummaryEngine(prompt_driver=MockPromptDriver(), max_token_multiplier=0.03) + + def copy_test_resource(resource_path: str): + file_dir = os.path.dirname(__file__) + full_path = os.path.join(file_dir, "../../../resources", resource_path) + full_path = os.path.normpath(full_path) + + assert engine.summarize_text(copy_test_resource("test.txt")) From f2342e603e425d92323fc22a1ee2c13661b01394 Mon Sep 17 00:00:00 2001 From: Andrew French Date: Mon, 17 Jun 2024 09:32:45 -0700 Subject: [PATCH 103/145] Small improvements to Audio tasks/tools (#843) --- CHANGELOG.md | 1 + griptape/tasks/audio_transcription_task.py | 23 +---------- griptape/tasks/base_audio_generation_task.py | 11 +++++- griptape/tasks/base_audio_input_task.py | 38 +++++++++++++++++++ griptape/tools/__init__.py | 4 ++ tests/mocks/mock_audio_input_task.py | 9 +++++ .../tasks/test_audio_transcription_task.py | 19 +++++++++- .../unit/tasks/test_base_audio_input_task.py | 26 +++++++++++++ tests/unit/tasks/test_text_to_speech_task.py | 21 +++++++++- 9 files changed, 126 insertions(+), 26 deletions(-) create mode 100644 griptape/tasks/base_audio_input_task.py create mode 100644 tests/mocks/mock_audio_input_task.py create mode 100644 tests/unit/tasks/test_base_audio_input_task.py diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b4e4480..6c0fefc61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -70,6 +70,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Conversation Memory entry only added if `output_task.output` is not `None` on all `Structures` - `TextArtifacts` contained in `ListArtifact` returned by `WebSearch.search` to properly formatted stringified JSON. - Structure run args not being set immediately. +- Input and output logging in BaseAudioInputTasks and BaseAudioGenerationTasks ## [0.26.0] - 2024-06-04 diff --git a/griptape/tasks/audio_transcription_task.py b/griptape/tasks/audio_transcription_task.py index c75faa0d4..57dbf6782 100644 --- a/griptape/tasks/audio_transcription_task.py +++ b/griptape/tasks/audio_transcription_task.py @@ -1,37 +1,18 @@ from __future__ import annotations -from abc import ABC -from typing import Callable - from attrs import define, field -from griptape.artifacts.audio_artifact import AudioArtifact from griptape.engines import AudioTranscriptionEngine from griptape.artifacts import TextArtifact -from griptape.mixins import RuleMixin -from griptape.tasks import BaseTask +from griptape.tasks.base_audio_input_task import BaseAudioInputTask @define -class AudioTranscriptionTask(RuleMixin, BaseTask, ABC): - _input: AudioArtifact | Callable[[BaseTask], AudioArtifact] = field() +class AudioTranscriptionTask(BaseAudioInputTask): _audio_transcription_engine: AudioTranscriptionEngine = field( default=None, kw_only=True, alias="audio_transcription_engine" ) - @property - def input(self) -> AudioArtifact: - if isinstance(self._input, AudioArtifact): - return self._input - elif isinstance(self._input, Callable): - return self._input(self) - else: - raise ValueError("Input must be an AudioArtifact.") - - @input.setter - def input(self, value: AudioArtifact | Callable[[BaseTask], AudioArtifact]) -> None: - self._input = value - @property def audio_transcription_engine(self) -> AudioTranscriptionEngine: if self._audio_transcription_engine is None: diff --git a/griptape/tasks/base_audio_generation_task.py b/griptape/tasks/base_audio_generation_task.py index d401af0a5..71c2fbdf4 100644 --- a/griptape/tasks/base_audio_generation_task.py +++ b/griptape/tasks/base_audio_generation_task.py @@ -9,4 +9,13 @@ @define -class BaseAudioGenerationTask(BlobArtifactFileOutputMixin, RuleMixin, BaseTask, ABC): ... +class BaseAudioGenerationTask(BlobArtifactFileOutputMixin, RuleMixin, BaseTask, ABC): + def before_run(self) -> None: + super().before_run() + + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nInput: {self.input.to_text()}") + + def after_run(self) -> None: + super().after_run() + + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nOutput: {self.output.to_text()}") diff --git a/griptape/tasks/base_audio_input_task.py b/griptape/tasks/base_audio_input_task.py new file mode 100644 index 000000000..0991a6014 --- /dev/null +++ b/griptape/tasks/base_audio_input_task.py @@ -0,0 +1,38 @@ +from __future__ import annotations + +from abc import ABC +from typing import Callable + +from attrs import define, field + +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.mixins import RuleMixin +from griptape.tasks import BaseTask + + +@define +class BaseAudioInputTask(RuleMixin, BaseTask, ABC): + _input: AudioArtifact | Callable[[BaseTask], AudioArtifact] = field(alias="input") + + @property + def input(self) -> AudioArtifact: + if isinstance(self._input, AudioArtifact): + return self._input + elif isinstance(self._input, Callable): + return self._input(self) + else: + raise ValueError("Input must be an AudioArtifact.") + + @input.setter + def input(self, value: AudioArtifact | Callable[[BaseTask], AudioArtifact]) -> None: + self._input = value + + def before_run(self) -> None: + super().before_run() + + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nInput: {self.input.to_text()}") + + def after_run(self) -> None: + super().after_run() + + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nOutput: {self.output.to_text()}") diff --git a/griptape/tools/__init__.py b/griptape/tools/__init__.py index 0c9b6e01d..1c152c95a 100644 --- a/griptape/tools/__init__.py +++ b/griptape/tools/__init__.py @@ -26,6 +26,8 @@ from .griptape_cloud_knowledge_base_client.tool import GriptapeCloudKnowledgeBaseClient from .structure_run_client.tool import StructureRunClient from .image_query_client.tool import ImageQueryClient +from .text_to_speech_client.tool import TextToSpeechClient +from .audio_transcription_client.tool import AudioTranscriptionClient __all__ = [ "BaseTool", @@ -56,4 +58,6 @@ "GriptapeCloudKnowledgeBaseClient", "StructureRunClient", "ImageQueryClient", + "TextToSpeechClient", + "AudioTranscriptionClient", ] diff --git a/tests/mocks/mock_audio_input_task.py b/tests/mocks/mock_audio_input_task.py new file mode 100644 index 000000000..d6a27d968 --- /dev/null +++ b/tests/mocks/mock_audio_input_task.py @@ -0,0 +1,9 @@ +from attrs import define +from griptape.artifacts import TextArtifact +from griptape.tasks.base_audio_input_task import BaseAudioInputTask + + +@define +class MockAudioInputTask(BaseAudioInputTask): + def run(self) -> TextArtifact: + return TextArtifact(self.input.to_text()) diff --git a/tests/unit/tasks/test_audio_transcription_task.py b/tests/unit/tasks/test_audio_transcription_task.py index fdab5f730..3a53fd49d 100644 --- a/tests/unit/tasks/test_audio_transcription_task.py +++ b/tests/unit/tasks/test_audio_transcription_task.py @@ -2,10 +2,11 @@ import pytest -from griptape.artifacts import AudioArtifact +from griptape.artifacts import AudioArtifact, TextArtifact from griptape.engines import AudioTranscriptionEngine -from griptape.structures import Agent +from griptape.structures import Agent, Pipeline from griptape.tasks import BaseTask, AudioTranscriptionTask +from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_structure_config import MockStructureConfig @@ -36,3 +37,17 @@ def test_config_audio_transcription_engine(self, audio_artifact): Agent(config=MockStructureConfig()).add_task(task) assert isinstance(task.audio_transcription_engine, AudioTranscriptionEngine) + + def test_run(self, audio_artifact, audio_transcription_engine): + audio_transcription_engine.run.return_value = TextArtifact("mock transcription") + logger = Mock() + + task = AudioTranscriptionTask(audio_artifact, audio_transcription_engine=audio_transcription_engine) + pipeline = Pipeline(prompt_driver=MockPromptDriver(), logger=logger) + pipeline.add_task(task) + + assert pipeline.run().output.to_text() == "mock transcription" + + def test_before_run(self, audio_artifact, audio_transcription_engine): + task = AudioTranscriptionTask(audio_artifact, audio_transcription_engine=audio_transcription_engine) + task diff --git a/tests/unit/tasks/test_base_audio_input_task.py b/tests/unit/tasks/test_base_audio_input_task.py new file mode 100644 index 000000000..e11074880 --- /dev/null +++ b/tests/unit/tasks/test_base_audio_input_task.py @@ -0,0 +1,26 @@ +import pytest + +from tests.mocks.mock_audio_input_task import MockAudioInputTask +from griptape.artifacts import AudioArtifact, TextArtifact +from tests.mocks.mock_text_input_task import MockTextInputTask + + +class TestBaseAudioInputTask: + @pytest.fixture + def audio_artifact(self): + return AudioArtifact(b"audio content", format="mp3") + + def test_audio_artifact_input(self, audio_artifact): + task = MockAudioInputTask(audio_artifact) + assert task.input.value == audio_artifact.value + + audio_artifact.value = b"new audio content" + task.input = audio_artifact + assert task.input.value == audio_artifact.value + + def test_callable_input(self, audio_artifact): + assert MockTextInputTask(lambda _: audio_artifact).input.value == audio_artifact.value + + def test_bad_input(self): + with pytest.raises(ValueError): + assert MockAudioInputTask(TextArtifact("foobar")).input.value == "foobar" diff --git a/tests/unit/tasks/test_text_to_speech_task.py b/tests/unit/tasks/test_text_to_speech_task.py index f30893e8a..7a8e49364 100644 --- a/tests/unit/tasks/test_text_to_speech_task.py +++ b/tests/unit/tasks/test_text_to_speech_task.py @@ -1,9 +1,10 @@ from unittest.mock import Mock -from griptape.artifacts import TextArtifact +from griptape.artifacts import TextArtifact, AudioArtifact from griptape.engines import TextToSpeechEngine -from griptape.structures import Agent +from griptape.structures import Agent, Pipeline from griptape.tasks import BaseTask, TextToSpeechTask +from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_structure_config import MockStructureConfig @@ -28,3 +29,19 @@ def test_config_text_to_speech_engine(self): Agent(config=MockStructureConfig()).add_task(task) assert isinstance(task.text_to_speech_engine, TextToSpeechEngine) + + def test_calls(self): + text_to_speech_engine = Mock() + text_to_speech_engine.run.return_value = AudioArtifact(b"audio content", format="mp3") + + assert TextToSpeechTask("test", text_to_speech_engine=text_to_speech_engine).run().value == b"audio content" + + def test_run(self): + text_to_speech_engine = Mock() + text_to_speech_engine.run.return_value = AudioArtifact(b"audio content", format="mp3") + + task = TextToSpeechTask("some text", text_to_speech_engine=text_to_speech_engine) + pipeline = Pipeline(prompt_driver=MockPromptDriver()) + pipeline.add_task(task) + + assert isinstance(pipeline.run().output, AudioArtifact) From 53ca5b104c935f2725eab8b9c4313c8d1d463751 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Mon, 17 Jun 2024 20:50:15 -0500 Subject: [PATCH 104/145] Validate `max_tokens`, fix tests (#868) --- CHANGELOG.md | 1 + griptape/chunkers/base_chunker.py | 5 +++++ tests/mocks/mock_prompt_driver.py | 10 +++++++--- tests/unit/chunkers/test_text_chunker.py | 4 ++++ .../structure_run/test_local_structure_run_driver.py | 2 +- .../unit/engines/summary/test_prompt_summary_engine.py | 10 ++++++++-- .../unit/memory/structure/test_conversation_memory.py | 2 +- 7 files changed, 27 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c0fefc61..b75df462e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -102,6 +102,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Extra fields being excluded when using `SerializableMixin.from_dict`. +- Validation of `max_tokens` < 0 on `BaseChunker` ## [0.25.1] - 2024-05-15 diff --git a/griptape/chunkers/base_chunker.py b/griptape/chunkers/base_chunker.py index f2cc452ad..793bf24ad 100644 --- a/griptape/chunkers/base_chunker.py +++ b/griptape/chunkers/base_chunker.py @@ -21,6 +21,11 @@ class BaseChunker(ABC): default=Factory(lambda self: self.tokenizer.max_input_tokens, takes_self=True), kw_only=True ) + @max_tokens.validator # pyright: ignore + def validate_max_tokens(self, _, max_tokens: int) -> None: + if max_tokens < 0: + raise ValueError("max_tokens must be 0 or greater.") + def chunk(self, text: TextArtifact | str) -> list[TextArtifact]: text = text.value if isinstance(text, TextArtifact) else text diff --git a/tests/mocks/mock_prompt_driver.py b/tests/mocks/mock_prompt_driver.py index 43d9a365f..3235f7cd5 100644 --- a/tests/mocks/mock_prompt_driver.py +++ b/tests/mocks/mock_prompt_driver.py @@ -14,10 +14,14 @@ class MockPromptDriver(BasePromptDriver): model: str = "test-model" tokenizer: BaseTokenizer = MockTokenizer(model="test-model", max_input_tokens=4096, max_output_tokens=4096) mock_input: str | Callable[[], str] = field(default="mock input", kw_only=True) - mock_output: str | Callable[[], str] = field(default="mock output", kw_only=True) + mock_output: str | Callable[[PromptStack], str] = field(default="mock output", kw_only=True) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - return TextArtifact(value=self.mock_output() if isinstance(self.mock_output, Callable) else self.mock_output) + return TextArtifact( + value=self.mock_output(prompt_stack) if isinstance(self.mock_output, Callable) else self.mock_output + ) def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - yield TextArtifact(value=self.mock_output() if isinstance(self.mock_output, Callable) else self.mock_output) + yield TextArtifact( + value=self.mock_output(prompt_stack) if isinstance(self.mock_output, Callable) else self.mock_output + ) diff --git a/tests/unit/chunkers/test_text_chunker.py b/tests/unit/chunkers/test_text_chunker.py index c1fb40137..243b287e1 100644 --- a/tests/unit/chunkers/test_text_chunker.py +++ b/tests/unit/chunkers/test_text_chunker.py @@ -106,3 +106,7 @@ def test_separators(self, chunker): assert chunks[5].value.endswith("? foo-12?") assert chunks[6].value.endswith(" foo-5") assert chunks[7].value.endswith(" foo-16") + + def test_chunk_with_max_tokens(self, chunker): + with pytest.raises(ValueError): + TextChunker(max_tokens=-1) diff --git a/tests/unit/drivers/structure_run/test_local_structure_run_driver.py b/tests/unit/drivers/structure_run/test_local_structure_run_driver.py index 921a4b013..cb7b3058e 100644 --- a/tests/unit/drivers/structure_run/test_local_structure_run_driver.py +++ b/tests/unit/drivers/structure_run/test_local_structure_run_driver.py @@ -22,7 +22,7 @@ def test_run(self): def test_run_with_env(self): pipeline = Pipeline() - agent = Agent(prompt_driver=MockPromptDriver(mock_output=lambda: os.environ["key"])) + agent = Agent(prompt_driver=MockPromptDriver(mock_output=lambda _: os.environ["key"])) driver = LocalStructureRunDriver(structure_factory_fn=lambda: agent, env={"key": "value"}) task = StructureRunTask(driver=driver) diff --git a/tests/unit/engines/summary/test_prompt_summary_engine.py b/tests/unit/engines/summary/test_prompt_summary_engine.py index cc4b94000..59b36f48e 100644 --- a/tests/unit/engines/summary/test_prompt_summary_engine.py +++ b/tests/unit/engines/summary/test_prompt_summary_engine.py @@ -1,6 +1,7 @@ import pytest from griptape.artifacts import TextArtifact, ListArtifact from griptape.engines import PromptSummaryEngine +from griptape.utils import PromptStack from tests.mocks.mock_prompt_driver import MockPromptDriver import os @@ -26,11 +27,16 @@ def test_max_token_multiplier_invalid(self, engine): PromptSummaryEngine(prompt_driver=MockPromptDriver(), max_token_multiplier=10000) def test_chunked_summary(self, engine): - engine = PromptSummaryEngine(prompt_driver=MockPromptDriver(), max_token_multiplier=0.03) + def smaller_input(prompt_stack: PromptStack): + return prompt_stack.inputs[0].content[: (len(prompt_stack.inputs[0].content) // 2)] + + engine = PromptSummaryEngine(prompt_driver=MockPromptDriver(mock_output="smaller_input")) def copy_test_resource(resource_path: str): file_dir = os.path.dirname(__file__) full_path = os.path.join(file_dir, "../../../resources", resource_path) full_path = os.path.normpath(full_path) + with open(full_path) as f: + return f.read() - assert engine.summarize_text(copy_test_resource("test.txt")) + assert engine.summarize_text(copy_test_resource("test.txt") * 50) diff --git a/tests/unit/memory/structure/test_conversation_memory.py b/tests/unit/memory/structure/test_conversation_memory.py index c6eba3df3..298e5ac3f 100644 --- a/tests/unit/memory/structure/test_conversation_memory.py +++ b/tests/unit/memory/structure/test_conversation_memory.py @@ -93,7 +93,7 @@ def test_add_to_prompt_stack_autopruing_disabled(self): assert len(prompt_stack.inputs) == 12 - def test_add_to_prompt_stack_autopruing_enabled(self): + def test_add_to_prompt_stack_autopruning_enabled(self): # All memory is pruned. agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=0))) memory = ConversationMemory( From 6ceadf6446e33ae3a7769f41afd22b23fba977cf Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Tue, 18 Jun 2024 11:38:16 -0500 Subject: [PATCH 105/145] Add 'self.order_tasks()' before getting 'output_task' (#873) --- griptape/structures/workflow.py | 6 +++++- tests/unit/structures/test_workflow.py | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index f9570edc0..6552fba89 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -1,7 +1,7 @@ from __future__ import annotations import concurrent.futures as futures from graphlib import TopologicalSorter -from typing import Any +from typing import Any, Optional from attrs import define, field, Factory from griptape.artifacts import ErrorArtifact from griptape.structures import Structure @@ -13,6 +13,10 @@ class Workflow(Structure): futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + @property + def output_task(self) -> Optional[BaseTask]: + return self.order_tasks()[-1] if self.tasks else None + def add_task(self, task: BaseTask) -> BaseTask: task.preprocess(self) diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index 14661036d..bbcf5138e 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -637,6 +637,15 @@ def test_output_task(self): assert task4 == workflow.output_task + task4.add_parents([task2, task3]) + task1.add_children([task2, task3]) + + # task4 is the final task, but its defined at index 0 + workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[task4, task1, task2, task3]) + + # ouput_task topologically should be task4 + assert task4 == workflow.output_task + def test_to_graph(self): task1 = PromptTask("prompt1", id="task1") task2 = PromptTask("prompt2", id="task2") From 3a203eda77b4cea1f2c7b672b637f40f2ffdcde6 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 18 Jun 2024 12:12:16 -0700 Subject: [PATCH 106/145] Feature/ollama (#847) --- CHANGELOG.md | 1 + .../drivers/prompt-drivers.md | 23 +++++ griptape/drivers/__init__.py | 2 + .../drivers/prompt/ollama_prompt_driver.py | 69 +++++++++++++ griptape/tokenizers/base_tokenizer.py | 9 +- griptape/tokenizers/simple_tokenizer.py | 3 +- poetry.lock | 19 +++- pyproject.toml | 3 + .../prompt/test_ollama_prompt_driver.py | 96 +++++++++++++++++++ .../unit/tokenizers/test_simple_tokenizer.py | 2 +- 10 files changed, 218 insertions(+), 9 deletions(-) create mode 100644 griptape/drivers/prompt/ollama_prompt_driver.py create mode 100644 tests/unit/drivers/prompt/test_ollama_prompt_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index b75df462e..4f2aef205 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `BaseTask.parents_outputs` to get the textual output of all parent tasks. - `BaseTask.parents_output_text` to get a concatenated string of all parent tasks' outputs. - `parents_output_text` to Workflow context. +- `OllamaPromptModelDriver` for using models with Ollama. ### Changed - **BREAKING**: `Workflow` no longer modifies task relationships when adding tasks via `tasks` init param, `add_tasks()` or `add_task()`. Previously, adding a task would automatically add the previously added task as its parent. Existing code that relies on this behavior will need to be updated to explicitly add parent/child relationships using the API offered by `BaseTask`. diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index c765030d8..0100ccbac 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -241,6 +241,29 @@ agent.run( ) ``` +### Ollama + +!!! info + This driver requires the `drivers-prompt-ollama` [extra](../index.md#extras). + +The [OllamaPromptDriver](../../reference/griptape/drivers/prompt/ollama_prompt_driver.md) connects to the [Ollama Chat Completion API](https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-chat-completion). + +```python +from griptape.config import StructureConfig +from griptape.drivers import OllamaPromptDriver +from griptape.structures import Agent + + +agent = Agent( + config=StructureConfig( + prompt_driver=OllamaPromptDriver( + model="llama3", + ), + ), +) +agent.run("What color is the sky at different times of the day?") +``` + ### Hugging Face Hub !!! info diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 44a2941c9..8e8128d7a 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -9,6 +9,7 @@ from .prompt.amazon_bedrock_prompt_driver import AmazonBedrockPromptDriver from .prompt.google_prompt_driver import GooglePromptDriver from .prompt.dummy_prompt_driver import DummyPromptDriver +from .prompt.ollama_prompt_driver import OllamaPromptDriver from .memory.conversation.base_conversation_memory_driver import BaseConversationMemoryDriver from .memory.conversation.local_conversation_memory_driver import LocalConversationMemoryDriver @@ -109,6 +110,7 @@ "AmazonBedrockPromptDriver", "GooglePromptDriver", "DummyPromptDriver", + "OllamaPromptDriver", "BaseConversationMemoryDriver", "LocalConversationMemoryDriver", "AmazonDynamoDbConversationMemoryDriver", diff --git a/griptape/drivers/prompt/ollama_prompt_driver.py b/griptape/drivers/prompt/ollama_prompt_driver.py new file mode 100644 index 000000000..b21176e82 --- /dev/null +++ b/griptape/drivers/prompt/ollama_prompt_driver.py @@ -0,0 +1,69 @@ +from __future__ import annotations +from collections.abc import Iterator +from typing import TYPE_CHECKING, Optional +from attrs import define, field, Factory +from griptape.artifacts import TextArtifact +from griptape.drivers import BasePromptDriver +from griptape.tokenizers.base_tokenizer import BaseTokenizer +from griptape.utils import PromptStack, import_optional_dependency +from griptape.tokenizers import SimpleTokenizer + +if TYPE_CHECKING: + from ollama import Client + + +@define +class OllamaPromptDriver(BasePromptDriver): + """ + Attributes: + model: Model name. + """ + + model: str = field(kw_only=True, metadata={"serializable": True}) + host: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + client: Client = field( + default=Factory(lambda self: import_optional_dependency("ollama").Client(host=self.host), takes_self=True), + kw_only=True, + ) + tokenizer: BaseTokenizer = field( + default=Factory( + lambda self: SimpleTokenizer( + characters_per_token=4, max_input_tokens=2000, max_output_tokens=self.max_tokens + ), + takes_self=True, + ), + kw_only=True, + ) + options: dict = field( + default=Factory( + lambda self: { + "temperature": self.temperature, + "stop": self.tokenizer.stop_sequences, + "num_predict": self.max_tokens, + }, + takes_self=True, + ), + kw_only=True, + ) + + def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + response = self.client.chat(**self._base_params(prompt_stack)) + + if isinstance(response, dict): + return TextArtifact(value=response["message"]["content"]) + else: + raise Exception("invalid model response") + + def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + stream = self.client.chat(**self._base_params(prompt_stack), stream=True) + + if isinstance(stream, Iterator): + for chunk in stream: + yield TextArtifact(value=chunk["message"]["content"]) + else: + raise Exception("invalid model response") + + def _base_params(self, prompt_stack: PromptStack) -> dict: + messages = [{"role": input.role, "content": input.content} for input in prompt_stack.inputs] + + return {"messages": messages, "model": self.model, "options": self.options} diff --git a/griptape/tokenizers/base_tokenizer.py b/griptape/tokenizers/base_tokenizer.py index b7ae2a854..474ccbaa5 100644 --- a/griptape/tokenizers/base_tokenizer.py +++ b/griptape/tokenizers/base_tokenizer.py @@ -17,11 +17,12 @@ class BaseTokenizer(ABC): max_output_tokens: int = field(kw_only=True, default=None) def __attrs_post_init__(self) -> None: - if self.max_input_tokens is None: - self.max_input_tokens = self._default_max_input_tokens() + if hasattr(self, "model"): + if self.max_input_tokens is None: + self.max_input_tokens = self._default_max_input_tokens() - if self.max_output_tokens is None: - self.max_output_tokens = self._default_max_output_tokens() + if self.max_output_tokens is None: + self.max_output_tokens = self._default_max_output_tokens() def count_input_tokens_left(self, text: str) -> int: diff = self.max_input_tokens - self.count_tokens(text) diff --git a/griptape/tokenizers/simple_tokenizer.py b/griptape/tokenizers/simple_tokenizer.py index d1ddc8e2b..b4e125680 100644 --- a/griptape/tokenizers/simple_tokenizer.py +++ b/griptape/tokenizers/simple_tokenizer.py @@ -1,12 +1,11 @@ from __future__ import annotations from attrs import define, field -from typing import Optional from griptape.tokenizers import BaseTokenizer @define() class SimpleTokenizer(BaseTokenizer): - model: Optional[str] = field(default=None, kw_only=True) + model: str = field(init=False, kw_only=True) characters_per_token: int = field(kw_only=True) def count_tokens(self, text: str) -> int: diff --git a/poetry.lock b/poetry.lock index ed65bc07f..b94c05b2a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3235,6 +3235,20 @@ files = [ {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, ] +[[package]] +name = "ollama" +version = "0.2.1" +description = "The official Python client for Ollama." +optional = true +python-versions = "<4.0,>=3.8" +files = [ + {file = "ollama-0.2.1-py3-none-any.whl", hash = "sha256:b6e2414921c94f573a903d1069d682ba2fb2607070ea9e19ca4a7872f2a460ec"}, + {file = "ollama-0.2.1.tar.gz", hash = "sha256:fa316baa9a81eac3beb4affb0a17deb3008fdd6ed05b123c26306cfbe4c349b6"}, +] + +[package.dependencies] +httpx = ">=0.27.0,<0.28.0" + [[package]] name = "openai" version = "1.30.1" @@ -6056,7 +6070,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] +all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "ollama", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-cohere = ["cohere"] @@ -6075,6 +6089,7 @@ drivers-prompt-cohere = ["cohere"] drivers-prompt-google = ["google-generativeai"] drivers-prompt-huggingface = ["huggingface-hub", "transformers"] drivers-prompt-huggingface-pipeline = ["huggingface-hub", "torch", "transformers"] +drivers-prompt-ollama = ["ollama"] drivers-sql-postgres = ["pgvector", "psycopg2-binary"] drivers-sql-redshift = ["boto3", "sqlalchemy-redshift"] drivers-sql-snowflake = ["snowflake-sqlalchemy"] @@ -6096,4 +6111,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "74de0d1e5ee382332635cea14dc0d39e288ab65adfec91569da0dbb06fd316e2" +content-hash = "6ccbbba60b534e4756d1c36e37ce1379ee2126d37b822f186b5dbb8e8f701ff3" diff --git a/pyproject.toml b/pyproject.toml index d58432b8f..418098522 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,6 +53,7 @@ voyageai = {version = "^0.2.1", optional = true} elevenlabs = {version = "^1.1.2", optional = true} torch = {version = "^2.3.0", optional = true} pusher = {version = "^3.3.2", optional = true} +ollama = {version = "^0.2.1", optional = true} # loaders pandas = {version = "^1.3", optional = true} @@ -69,6 +70,7 @@ drivers-prompt-huggingface-pipeline = ["huggingface-hub", "transformers", "torch drivers-prompt-amazon-bedrock = ["boto3", "anthropic"] drivers-prompt-amazon-sagemaker = ["boto3", "transformers"] drivers-prompt-google = ["google-generativeai"] +drivers-prompt-ollama = ["ollama"] drivers-sql-redshift = ["sqlalchemy-redshift", "boto3"] drivers-sql-snowflake = ["snowflake-sqlalchemy", "snowflake", "snowflake-connector-python"] @@ -131,6 +133,7 @@ all = [ "elevenlabs", "torch", "pusher", + "ollama", # loaders "pandas", diff --git a/tests/unit/drivers/prompt/test_ollama_prompt_driver.py b/tests/unit/drivers/prompt/test_ollama_prompt_driver.py new file mode 100644 index 000000000..d42a8b45d --- /dev/null +++ b/tests/unit/drivers/prompt/test_ollama_prompt_driver.py @@ -0,0 +1,96 @@ +from griptape.drivers import OllamaPromptDriver +from griptape.utils import PromptStack +import pytest + + +class TestOllamaPromptDriver: + @pytest.fixture + def mock_client(self, mocker): + mock_client = mocker.patch("ollama.Client") + + mock_client.return_value.chat.return_value = {"message": {"content": "model-output"}} + + return mock_client + + @pytest.fixture + def mock_stream_client(self, mocker): + mock_stream_client = mocker.patch("ollama.Client") + mock_stream_client.return_value.chat.return_value = iter([{"message": {"content": "model-output"}}]) + + return mock_stream_client + + def test_init(self): + assert OllamaPromptDriver(model="llama") + + def test_try_run(self, mock_client): + # Given + prompt_stack = PromptStack() + prompt_stack.add_generic_input("generic-input") + prompt_stack.add_system_input("system-input") + prompt_stack.add_user_input("user-input") + prompt_stack.add_assistant_input("assistant-input") + driver = OllamaPromptDriver(model="llama") + expected_messages = [ + {"role": "generic", "content": "generic-input"}, + {"role": "system", "content": "system-input"}, + {"role": "user", "content": "user-input"}, + {"role": "assistant", "content": "assistant-input"}, + ] + + # When + text_artifact = driver.try_run(prompt_stack) + + # Then + mock_client.return_value.chat.assert_called_once_with( + messages=expected_messages, + model=driver.model, + options={"temperature": driver.temperature, "stop": [], "num_predict": driver.max_tokens}, + ) + assert text_artifact.value == "model-output" + + def test_try_run_bad_response(self, mock_client): + # Given + prompt_stack = PromptStack() + driver = OllamaPromptDriver(model="llama") + mock_client.return_value.chat.return_value = "bad-response" + + # When/Then + with pytest.raises(Exception, match="invalid model response"): + driver.try_run(prompt_stack) + + def test_try_stream_run(self, mock_stream_client): + # Given + prompt_stack = PromptStack() + prompt_stack.add_generic_input("generic-input") + prompt_stack.add_system_input("system-input") + prompt_stack.add_user_input("user-input") + prompt_stack.add_assistant_input("assistant-input") + expected_messages = [ + {"role": "generic", "content": "generic-input"}, + {"role": "system", "content": "system-input"}, + {"role": "user", "content": "user-input"}, + {"role": "assistant", "content": "assistant-input"}, + ] + driver = OllamaPromptDriver(model="llama", stream=True) + + # When + text_artifact = next(driver.try_stream(prompt_stack)) + + # Then + mock_stream_client.return_value.chat.assert_called_once_with( + messages=expected_messages, + model=driver.model, + options={"temperature": driver.temperature, "stop": [], "num_predict": driver.max_tokens}, + stream=True, + ) + assert text_artifact.value == "model-output" + + def test_try_stream_bad_response(self, mock_stream_client): + # Given + prompt_stack = PromptStack() + driver = OllamaPromptDriver(model="llama", stream=True) + mock_stream_client.return_value.chat.return_value = "bad-response" + + # When/Then + with pytest.raises(Exception, match="invalid model response"): + next(driver.try_stream(prompt_stack)) diff --git a/tests/unit/tokenizers/test_simple_tokenizer.py b/tests/unit/tokenizers/test_simple_tokenizer.py index 48fa1bdfb..a34c0d481 100644 --- a/tests/unit/tokenizers/test_simple_tokenizer.py +++ b/tests/unit/tokenizers/test_simple_tokenizer.py @@ -5,7 +5,7 @@ class TestSimpleTokenizer: @pytest.fixture def tokenizer(self): - return SimpleTokenizer(model="any model", max_input_tokens=1024, max_output_tokens=4096, characters_per_token=6) + return SimpleTokenizer(max_input_tokens=1024, max_output_tokens=4096, characters_per_token=6) def test_token_count(self, tokenizer): assert tokenizer.count_tokens("foo bar huzzah") == 3 From 0f196f5b47e8bb8308b4d7feba7a44f6c78d6db4 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Tue, 18 Jun 2024 13:48:02 -0700 Subject: [PATCH 107/145] Add insert_tasks example (#877) --- .../structures/workflows.md | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/docs/griptape-framework/structures/workflows.md b/docs/griptape-framework/structures/workflows.md index 02ef8d148..0d31b6f9e 100644 --- a/docs/griptape-framework/structures/workflows.md +++ b/docs/griptape-framework/structures/workflows.md @@ -299,3 +299,60 @@ workflow = Workflow( workflow.run() ``` + +### Insert Parallel Tasks + +`Workflow.insert_tasks()` provides a convenient way to insert parallel tasks between parents and children. + +!!! info + By default, all children are removed from the parent task and all parent tasks are removed from the child task. If you want to keep these parent-child relationships, then set the `preserve_relationship` parameter to `True`. + +Imperatively insert parallel tasks between a parent and child: + +```python +from griptape.tasks import PromptTask +from griptape.structures import Workflow +from griptape.rules import Rule + +workflow = Workflow( + rules=[Rule("output a single lowercase word")], +) + +animal_task = PromptTask("Name an animal", id="animal") +adjective_task = PromptTask("Describe {{ parent_outputs['animal'] }} with an adjective", id="adjective") +color_task = PromptTask("Describe {{ parent_outputs['animal'] }} with a color", id="color") +new_animal_task = PromptTask("Name an animal described as: \n{{ parents_output_text }}", id="new-animal") + +# The following workflow runs animal_task, then (adjective_task, and color_task) +# in parallel, then finally new_animal_task. +# +# In other words, the output of animal_task is passed to both adjective_task and color_task +# and the outputs of adjective_task and color_task are then passed to new_animal_task. +workflow.add_task(animal_task) +workflow.add_task(new_animal_task) +workflow.insert_tasks(animal_task, [adjective_task, color_task], new_animal_task) + +workflow.run() +``` + +output: +``` +[06/18/24 09:52:21] INFO PromptTask animal + Input: Name an animal +[06/18/24 09:52:22] INFO PromptTask animal + Output: elephant + INFO PromptTask adjective + Input: Describe elephant with an adjective + INFO PromptTask color + Input: Describe elephant with a color + INFO PromptTask color + Output: gray + INFO PromptTask adjective + Output: majestic + INFO PromptTask new-animal + Input: Name an animal described as: + majestic + gray +[06/18/24 09:52:23] INFO PromptTask new-animal + Output: elephant +``` From 68d9daee4e70426e24028f868b0c82ba554b4078 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 19 Jun 2024 12:28:11 -0700 Subject: [PATCH 108/145] Don't include "v" in tag name (#879) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 61d91e6a1..b4f3d0068 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ version: ## Bump version and push to release branch. .PHONY: publish publish: ## Push git tag and publish version to PyPI. - @git tag v$$(poetry version -s) + @git tag $$(poetry version -s) @git push --tags @poetry build @poetry publish From 28a8a14a23f7e4a1d95ab8202dc2a52601531692 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Wed, 19 Jun 2024 18:18:11 -0500 Subject: [PATCH 109/145] Update `WebSearch` to use a driver; add drivers for Google and DuckDuckGo (#869) --- CHANGELOG.md | 7 + docs/examples/multi-agent-workflow.md | 8 +- .../drivers/web-search-drivers.md | 62 +++++++++ docs/griptape-framework/structures/tasks.md | 8 +- .../official-tools/web-search.md | 13 +- griptape/drivers/__init__.py | 7 + griptape/drivers/web_search/__init__.py | 0 .../web_search/base_web_search_driver.py | 14 ++ .../duck_duck_go_web_search_driver.py | 29 ++++ .../web_search/google_web_search_driver.py | 39 ++++++ griptape/tools/web_search/tool.py | 40 +----- poetry.lock | 131 +++++++++++++++++- pyproject.toml | 4 + tests/integration/tasks/test_toolkit_task.py | 6 +- tests/unit/drivers/web_search/__init__.py | 0 .../test_duck_duck_go_web_search_driver.py | 36 +++++ .../test_google_web_search_driver.py | 43 ++++++ tests/unit/tools/test_web_search.py | 36 +++-- 18 files changed, 413 insertions(+), 70 deletions(-) create mode 100644 docs/griptape-framework/drivers/web-search-drivers.md create mode 100644 griptape/drivers/web_search/__init__.py create mode 100644 griptape/drivers/web_search/base_web_search_driver.py create mode 100644 griptape/drivers/web_search/duck_duck_go_web_search_driver.py create mode 100644 griptape/drivers/web_search/google_web_search_driver.py create mode 100644 tests/unit/drivers/web_search/__init__.py create mode 100644 tests/unit/drivers/web_search/test_duck_duck_go_web_search_driver.py create mode 100644 tests/unit/drivers/web_search/test_google_web_search_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index feec674b5..62846b623 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added +- `GoogleWebSearchDriver` to web search with the Google Customsearch API. +- `DuckDuckGoWebSearchDriver` to web search with the DuckDuckGo search SDK. + +### Changed +- **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. + ## [0.27.0] - 2024-06-19 ### Added diff --git a/docs/examples/multi-agent-workflow.md b/docs/examples/multi-agent-workflow.md index d0fa65232..4a26625b3 100644 --- a/docs/examples/multi-agent-workflow.md +++ b/docs/examples/multi-agent-workflow.md @@ -7,7 +7,7 @@ Additionally, this architecture opens us up to using services such as [Griptape ```python import os -from griptape.drivers import WebhookEventListenerDriver, LocalStructureRunDriver +from griptape.drivers import WebhookEventListenerDriver, LocalStructureRunDriver, GoogleWebSearchDriver from griptape.events import EventListener, FinishStructureRunEvent from griptape.rules import Rule, Ruleset from griptape.structures import Agent, Workflow @@ -38,8 +38,10 @@ def build_researcher(): id="researcher", tools=[ WebSearch( - google_api_key=os.environ["GOOGLE_API_KEY"], - google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], + web_search_driver=GoogleWebSearchDriver( + api_key=os.environ["GOOGLE_API_KEY"], + search_id=os.environ["GOOGLE_API_SEARCH_ID"], + ), ), WebScraper( off_prompt=True, diff --git a/docs/griptape-framework/drivers/web-search-drivers.md b/docs/griptape-framework/drivers/web-search-drivers.md new file mode 100644 index 000000000..332ce2c2b --- /dev/null +++ b/docs/griptape-framework/drivers/web-search-drivers.md @@ -0,0 +1,62 @@ +## Overview + +Web Search Drivers can be used to search for links from a search query. They are used by [WebSearch](../../reference/griptape/tools/web_search/tool.md) to provide its functionality. All Web Search Drivers implement the following methods: + +* `search()` searchs the web and returns a [ListArtifact](../../reference/griptape/artifacts/list_artifact.md) that contains JSON-serializable [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s with the search results. + +## Google + +The [GoogleWebSearchDriver](../../reference/griptape/drivers/web_search/google_web_search_driver.md) uses the [Google Custom Search JSON API](https://developers.google.com/custom-search/v1/reference/rest/v1/cse/list) for web searching. + +Example using `GoogleWebSearchDriver` directly: + +```python +import os +from griptape.drivers import GoogleWebSearchDriver + +driver = GoogleWebSearchDriver( + api_key=os.environ["GOOGLE_API_KEY"], + search_id=os.environ["GOOGLE_API_SEARCH_ID"], +) + +driver.search("griptape ai") +``` + +Example of using `GoogleWebSearchDriver` with an agent: + +```python +import os +from griptape.drivers import GoogleWebSearchDriver +from griptape.tools import TaskMemoryClient, WebSearch +from griptape.structures import Agent + +agent = Agent( + tools=[ + WebSearch( + web_search_driver=GoogleWebSearchDriver( + api_key=os.environ["GOOGLE_API_KEY"], + search_id=os.environ["GOOGLE_API_SEARCH_ID"], + ), + ), + TaskMemoryClient(off_prompt=False), + ], +) +agent.run("Give me some websites with information about AI frameworks.") +``` + +## DuckDuckGo + +!!! info + This driver requires the `drivers-web-search-duckduckgo` [extra](../index.md#extras). + +The [DuckDuckGoWebSearchDriver](../../reference/griptape/drivers/web_search/duck_duck_go_web_search_driver.md) uses the [duckduckgo_search](https://github.com/deedy5/duckduckgo_search) SDK for web searching. + +Example of using `DuckDuckGoWebSearchDriver` directly: + +```python +from griptape.drivers import DuckDuckGoWebSearchDriver + +driver = DuckDuckGoWebSearchDriver() + +driver.search("griptape ai") +``` diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index 53b1b702e..c43603b1b 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -677,7 +677,7 @@ import os from griptape.rules import Rule, Ruleset from griptape.structures import Agent, Pipeline from griptape.tasks import StructureRunTask -from griptape.drivers import LocalStructureRunDriver +from griptape.drivers import LocalStructureRunDriver, GoogleWebSearchDriver from griptape.tools import ( TaskMemoryClient, WebScraper, @@ -689,8 +689,10 @@ def build_researcher(): researcher = Agent( tools=[ WebSearch( - google_api_key=os.environ["GOOGLE_API_KEY"], - google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], + web_search_driver=GoogleWebSearchDriver( + api_key=os.environ["GOOGLE_API_KEY"], + search_id=os.environ["GOOGLE_API_SEARCH_ID"], + ), ), WebScraper( off_prompt=True, diff --git a/docs/griptape-tools/official-tools/web-search.md b/docs/griptape-tools/official-tools/web-search.md index 2e2ea276d..b30c76038 100644 --- a/docs/griptape-tools/official-tools/web-search.md +++ b/docs/griptape-tools/official-tools/web-search.md @@ -6,14 +6,17 @@ This tool enables LLMs to search the web. import os from griptape.tools import WebSearch from griptape.structures import Agent +from griptape.drivers import GoogleWebSearchDriver # Initialize the WebSearch tool with necessary parameters web_search_tool = WebSearch( - results_count=5, - google_api_lang="lang_en", - google_api_key=os.environ["GOOGLE_API_KEY"], - google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], - google_api_country="us", + web_search_driver=GoogleWebSearchDriver( + api_key=os.environ["GOOGLE_API_KEY"], + search_id=os.environ["GOOGLE_API_SEARCH_ID"], + results_count=5, + language="en", + country="us", + ), ) # Set up an agent using the WebSearch tool diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 8e8128d7a..3576b66bb 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -74,6 +74,10 @@ from .web_scraper.trafilatura_web_scraper_driver import TrafilaturaWebScraperDriver from .web_scraper.markdownify_web_scraper_driver import MarkdownifyWebScraperDriver +from .web_search.base_web_search_driver import BaseWebSearchDriver +from .web_search.google_web_search_driver import GoogleWebSearchDriver +from .web_search.duck_duck_go_web_search_driver import DuckDuckGoWebSearchDriver + from .event_listener.base_event_listener_driver import BaseEventListenerDriver from .event_listener.amazon_sqs_event_listener_driver import AmazonSqsEventListenerDriver from .event_listener.webhook_event_listener_driver import WebhookEventListenerDriver @@ -163,6 +167,9 @@ "BaseWebScraperDriver", "TrafilaturaWebScraperDriver", "MarkdownifyWebScraperDriver", + "BaseWebSearchDriver", + "GoogleWebSearchDriver", + "DuckDuckGoWebSearchDriver", "BaseEventListenerDriver", "AmazonSqsEventListenerDriver", "WebhookEventListenerDriver", diff --git a/griptape/drivers/web_search/__init__.py b/griptape/drivers/web_search/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/drivers/web_search/base_web_search_driver.py b/griptape/drivers/web_search/base_web_search_driver.py new file mode 100644 index 000000000..2b5662155 --- /dev/null +++ b/griptape/drivers/web_search/base_web_search_driver.py @@ -0,0 +1,14 @@ +from abc import ABC, abstractmethod +from attrs import field, define + +from griptape.artifacts import ListArtifact + + +@define +class BaseWebSearchDriver(ABC): + results_count: int = field(default=5, kw_only=True) + language: str = field(default="en", kw_only=True) + country: str = field(default="us", kw_only=True) + + @abstractmethod + def search(self, query: str, **kwargs) -> ListArtifact: ... diff --git a/griptape/drivers/web_search/duck_duck_go_web_search_driver.py b/griptape/drivers/web_search/duck_duck_go_web_search_driver.py new file mode 100644 index 000000000..9b90bf5ff --- /dev/null +++ b/griptape/drivers/web_search/duck_duck_go_web_search_driver.py @@ -0,0 +1,29 @@ +from __future__ import annotations +import json +from typing import TYPE_CHECKING +from attrs import define, field, Factory +from griptape.artifacts import TextArtifact, ListArtifact +from griptape.drivers import BaseWebSearchDriver +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + from duckduckgo_search import DDGS + + +@define +class DuckDuckGoWebSearchDriver(BaseWebSearchDriver): + client: DDGS = field(default=Factory(lambda: import_optional_dependency("duckduckgo_search").DDGS()), kw_only=True) + + def search(self, query: str, **kwargs) -> ListArtifact: + try: + results = self.client.text(query, region=f"{self.language}-{self.country}", max_results=self.results_count) + return ListArtifact( + [ + TextArtifact( + json.dumps({"title": result["title"], "url": result["href"], "description": result["body"]}) + ) + for result in results + ] + ) + except Exception as e: + raise Exception(f"Error searching '{query}' with DuckDuckGo: {e}") diff --git a/griptape/drivers/web_search/google_web_search_driver.py b/griptape/drivers/web_search/google_web_search_driver.py new file mode 100644 index 000000000..631170532 --- /dev/null +++ b/griptape/drivers/web_search/google_web_search_driver.py @@ -0,0 +1,39 @@ +from attrs import define, field +from griptape.artifacts import TextArtifact, ListArtifact +from griptape.drivers import BaseWebSearchDriver +import requests +import json + + +@define +class GoogleWebSearchDriver(BaseWebSearchDriver): + api_key: str = field(default=None, kw_only=True) + search_id: str = field(default=None, kw_only=True) + + def search(self, query: str, **kwargs) -> ListArtifact: + return ListArtifact([TextArtifact(json.dumps(result)) for result in self._search_google(query, **kwargs)]) + + def _search_google(self, query: str, **kwargs) -> list[dict]: + url = ( + f"https://www.googleapis.com/customsearch/v1?" + f"key={self.api_key}&" + f"cx={self.search_id}&" + f"q={query}&" + f"start=0&" + f"lr=lang_{self.language}&" + f"num={self.results_count}&" + f"gl={self.country}" + ) + response = requests.get(url) + + if response.status_code == 200: + data = response.json() + + links = [{"url": r["link"], "title": r["title"], "description": r["snippet"]} for r in data["items"]] + + return links + else: + raise Exception( + f"Google Search API returned an error with status code " + f"{response.status_code} and reason '{response.reason}'" + ) diff --git a/griptape/tools/web_search/tool.py b/griptape/tools/web_search/tool.py index acc358342..e5dc9add7 100644 --- a/griptape/tools/web_search/tool.py +++ b/griptape/tools/web_search/tool.py @@ -1,20 +1,15 @@ from __future__ import annotations from attrs import define, field -from griptape.artifacts import TextArtifact, ErrorArtifact, ListArtifact +from griptape.artifacts import ErrorArtifact, ListArtifact from schema import Schema, Literal from griptape.tools import BaseTool from griptape.utils.decorators import activity -import requests -import json +from griptape.drivers import BaseWebSearchDriver @define class WebSearch(BaseTool): - results_count: int = field(default=5, kw_only=True) - google_api_lang: str = field(default="lang_en", kw_only=True) - google_api_key: str = field(kw_only=True) - google_api_search_id: str = field(kw_only=True) - google_api_country: str = field(default="us", kw_only=True) + web_search_driver: BaseWebSearchDriver = field(default=None, kw_only=True) @activity( config={ @@ -33,31 +28,6 @@ def search(self, props: dict) -> ListArtifact | ErrorArtifact: query = props["values"]["query"] try: - return ListArtifact([TextArtifact(json.dumps(result)) for result in self._search_google(query)]) + return self.web_search_driver.search(query) except Exception as e: - return ErrorArtifact(f"error searching Google: {e}") - - def _search_google(self, query: str) -> list[dict]: - url = ( - f"https://www.googleapis.com/customsearch/v1?" - f"key={self.google_api_key}&" - f"cx={self.google_api_search_id}&" - f"q={query}&" - f"start=0&" - f"lr={self.google_api_lang}&" - f"num={self.results_count}&" - f"gl={self.google_api_country}" - ) - response = requests.get(url) - - if response.status_code == 200: - data = response.json() - - links = [{"url": r["link"], "title": r["title"], "description": r["snippet"]} for r in data["items"]] - - return links - else: - raise Exception( - f"Google Search API returned an error with status code " - f"{response.status_code} and reason '{response.reason}'" - ) + return ErrorArtifact(f"Error searching '{query}' with {self.web_search_driver.__class__.__name__}: {e}") diff --git a/poetry.lock b/poetry.lock index b94c05b2a..fd27e153b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1231,6 +1231,26 @@ files = [ {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] +[[package]] +name = "duckduckgo-search" +version = "6.1.7" +description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." +optional = true +python-versions = ">=3.8" +files = [ + {file = "duckduckgo_search-6.1.7-py3-none-any.whl", hash = "sha256:ec7d5becb8c392c0293ff9464938c1014896e1e14725c05adc306290a636fab2"}, + {file = "duckduckgo_search-6.1.7.tar.gz", hash = "sha256:c6fd8ba17fe9cd0a4f32e5b96984e959c3da865f9c2864bfcf82bf7ff9b7e8f0"}, +] + +[package.dependencies] +click = ">=8.1.7" +orjson = ">=3.10.5" +pyreqwest-impersonate = ">=0.4.8" + +[package.extras] +dev = ["mypy (>=1.10.0)", "pytest (>=8.2.2)", "pytest-asyncio (>=0.23.7)", "ruff (>=0.4.8)"] +lxml = ["lxml (>=5.2.2)"] + [[package]] name = "elevenlabs" version = "1.1.2" @@ -3296,6 +3316,61 @@ develop = ["black", "botocore", "coverage (<8.0.0)", "jinja2", "mock", "myst-par docs = ["aiohttp (>=3,<4)", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] kerberos = ["requests-kerberos"] +[[package]] +name = "orjson" +version = "3.10.5" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = true +python-versions = ">=3.8" +files = [ + {file = "orjson-3.10.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:545d493c1f560d5ccfc134803ceb8955a14c3fcb47bbb4b2fee0232646d0b932"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4324929c2dd917598212bfd554757feca3e5e0fa60da08be11b4aa8b90013c1"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c13ca5e2ddded0ce6a927ea5a9f27cae77eee4c75547b4297252cb20c4d30e6"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6c8e30adfa52c025f042a87f450a6b9ea29649d828e0fec4858ed5e6caecf63"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338fd4f071b242f26e9ca802f443edc588fa4ab60bfa81f38beaedf42eda226c"}, + {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6970ed7a3126cfed873c5d21ece1cd5d6f83ca6c9afb71bbae21a0b034588d96"}, + {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:235dadefb793ad12f7fa11e98a480db1f7c6469ff9e3da5e73c7809c700d746b"}, + {file = "orjson-3.10.5-cp310-none-win32.whl", hash = "sha256:be79e2393679eda6a590638abda16d167754393f5d0850dcbca2d0c3735cebe2"}, + {file = "orjson-3.10.5-cp310-none-win_amd64.whl", hash = "sha256:c4a65310ccb5c9910c47b078ba78e2787cb3878cdded1702ac3d0da71ddc5228"}, + {file = "orjson-3.10.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cdf7365063e80899ae3a697def1277c17a7df7ccfc979990a403dfe77bb54d40"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b68742c469745d0e6ca5724506858f75e2f1e5b59a4315861f9e2b1df77775a"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d10cc1b594951522e35a3463da19e899abe6ca95f3c84c69e9e901e0bd93d38"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcbe82b35d1ac43b0d84072408330fd3295c2896973112d495e7234f7e3da2e1"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c0eb7e0c75e1e486c7563fe231b40fdd658a035ae125c6ba651ca3b07936f5"}, + {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:53ed1c879b10de56f35daf06dbc4a0d9a5db98f6ee853c2dbd3ee9d13e6f302f"}, + {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:099e81a5975237fda3100f918839af95f42f981447ba8f47adb7b6a3cdb078fa"}, + {file = "orjson-3.10.5-cp311-none-win32.whl", hash = "sha256:1146bf85ea37ac421594107195db8bc77104f74bc83e8ee21a2e58596bfb2f04"}, + {file = "orjson-3.10.5-cp311-none-win_amd64.whl", hash = "sha256:36a10f43c5f3a55c2f680efe07aa93ef4a342d2960dd2b1b7ea2dd764fe4a37c"}, + {file = "orjson-3.10.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:68f85ecae7af14a585a563ac741b0547a3f291de81cd1e20903e79f25170458f"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28afa96f496474ce60d3340fe8d9a263aa93ea01201cd2bad844c45cd21f5268"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cd684927af3e11b6e754df80b9ffafd9fb6adcaa9d3e8fdd5891be5a5cad51e"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d21b9983da032505f7050795e98b5d9eee0df903258951566ecc358f6696969"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad1de7fef79736dde8c3554e75361ec351158a906d747bd901a52a5c9c8d24b"}, + {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d97531cdfe9bdd76d492e69800afd97e5930cb0da6a825646667b2c6c6c0211"}, + {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d69858c32f09c3e1ce44b617b3ebba1aba030e777000ebdf72b0d8e365d0b2b3"}, + {file = "orjson-3.10.5-cp312-none-win32.whl", hash = "sha256:64c9cc089f127e5875901ac05e5c25aa13cfa5dbbbd9602bda51e5c611d6e3e2"}, + {file = "orjson-3.10.5-cp312-none-win_amd64.whl", hash = "sha256:b2efbd67feff8c1f7728937c0d7f6ca8c25ec81373dc8db4ef394c1d93d13dc5"}, + {file = "orjson-3.10.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:03b565c3b93f5d6e001db48b747d31ea3819b89abf041ee10ac6988886d18e01"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:584c902ec19ab7928fd5add1783c909094cc53f31ac7acfada817b0847975f26"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a35455cc0b0b3a1eaf67224035f5388591ec72b9b6136d66b49a553ce9eb1e6"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1670fe88b116c2745a3a30b0f099b699a02bb3482c2591514baf5433819e4f4d"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185c394ef45b18b9a7d8e8f333606e2e8194a50c6e3c664215aae8cf42c5385e"}, + {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ca0b3a94ac8d3886c9581b9f9de3ce858263865fdaa383fbc31c310b9eac07c9"}, + {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dfc91d4720d48e2a709e9c368d5125b4b5899dced34b5400c3837dadc7d6271b"}, + {file = "orjson-3.10.5-cp38-none-win32.whl", hash = "sha256:c05f16701ab2a4ca146d0bca950af254cb7c02f3c01fca8efbbad82d23b3d9d4"}, + {file = "orjson-3.10.5-cp38-none-win_amd64.whl", hash = "sha256:8a11d459338f96a9aa7f232ba95679fc0c7cedbd1b990d736467894210205c09"}, + {file = "orjson-3.10.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:85c89131d7b3218db1b24c4abecea92fd6c7f9fab87441cfc342d3acc725d807"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66215277a230c456f9038d5e2d84778141643207f85336ef8d2a9da26bd7ca"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51bbcdea96cdefa4a9b4461e690c75ad4e33796530d182bdd5c38980202c134a"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbead71dbe65f959b7bd8cf91e0e11d5338033eba34c114f69078d59827ee139"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df58d206e78c40da118a8c14fc189207fffdcb1f21b3b4c9c0c18e839b5a214"}, + {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c4057c3b511bb8aef605616bd3f1f002a697c7e4da6adf095ca5b84c0fd43595"}, + {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b39e006b00c57125ab974362e740c14a0c6a66ff695bff44615dcf4a70ce2b86"}, + {file = "orjson-3.10.5-cp39-none-win32.whl", hash = "sha256:eded5138cc565a9d618e111c6d5c2547bbdd951114eb822f7f6309e04db0fb47"}, + {file = "orjson-3.10.5-cp39-none-win_amd64.whl", hash = "sha256:cc28e90a7cae7fcba2493953cff61da5a52950e78dc2dacfe931a317ee3d8de7"}, + {file = "orjson-3.10.5.tar.gz", hash = "sha256:7a5baef8a4284405d96c90c7c62b755e9ef1ada84c2406c24a9ebec86b89f46d"}, +] + [[package]] name = "packaging" version = "24.0" @@ -4116,6 +4191,55 @@ docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] full = ["Pillow (>=8.0.0)", "PyCryptodome", "cryptography"] image = ["Pillow (>=8.0.0)"] +[[package]] +name = "pyreqwest-impersonate" +version = "0.4.8" +description = "HTTP client that can impersonate web browsers, mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:45cad57afe4e6f56078ed9a7a90d0dc839d19d3e7a70175c80af21017f383bfb"}, + {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1986600253baf38f25fd07b8bdc1903359c26e5d34beb7d7d084845554b5664d"}, + {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cca4e6e59b9ad0cd20bad6caed3ac96992cd9c1d3126ecdfcab2c0ac2b75376"}, + {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab6b32544491ee655264dab86fc8a58e47c4f87d196b28022d4007faf971a50"}, + {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:64bd6299e7fc888bb7f7292cf3e29504c406e5d5d04afd37ca994ab8142d8ee4"}, + {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e914b650dd953b8d9b24ef56aa4ecbfc16e399227b68accd818f8bf159e0c558"}, + {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f62620e023490902feca0109f306e122e427feff7d59e03ecd22c69a89452367"}, + {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:08d4c01d76da88cfe3d7d03b311b375ce3fb5a59130f93f0637bb755d6e56ff1"}, + {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524e276bc460176c79d7ba4b9131d9db73c534586660371ebdf067749252a33"}, + {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22863bc0aaf02ca2f5d76c8130929ae680b7d82dfc1c28c1ed5f306ff626928"}, + {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8cc82d57f6a91037e64a7aa9122f909576ef2a141a42ce599958ef9f8c4bc033"}, + {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:da8a053308210e44fd8349f07f45442a0691ac932f2881e98b05cf9ac404b091"}, + {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:78db05deed0b32c9c75f2b3168a3a9b7d5e36487b218cb839bfe7e2a143450cb"}, + {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9af9446d605903c2b4e94621a9093f8d8a403729bc9cbfbcb62929f8238c838f"}, + {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c55890181d8d81e66cac25a95e215dc9680645d01e9091b64449d5407ad9bc6"}, + {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69344e7ae9964502a8693da7ad77ebc3e1418ee197e2e394bc23c5d4970772a"}, + {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b5db5c957a10d8cc2815085ba0b8fe09245b2f94c2225d9653a854a03b4217e1"}, + {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03c19c21f63f9c91c590c4bbcc32cc2d8066b508c683a1d163b8c7d9816a01d5"}, + {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b8cb9471ab4b2fa7e80d3ac4e580249ff988d782f2938ad1f0428433652b170d"}, + {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8081a5ace2658be91519902bde9ddc5f94e1f850a39be196007a25e3da5bbfdc"}, + {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69eababfa3200459276acd780a0f3eaf41d1fe7c02bd169e714cba422055b5b9"}, + {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:632957fa671ebb841166e40913015de457225cb73600ef250c436c280e68bf45"}, + {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2ce7ddef334b4e5c68f5ea1da1d65f686b8d84f4443059d128e0f069d3fa499a"}, + {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2503277f2a95a30e28e498570e2ed03ef4302f873054e8e21d6c0e607cbbc1d1"}, + {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8260395ef4ddae325e8b30cef0391adde7bd35e1a1decf8c729e26391f09b52d"}, + {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d8066b46d82bbaff5402d767e2f13d3449b8191c37bf8283e91d301a7159869"}, + {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9c42f6343cfbd6663fb53edc9eb9feb4ebf6186b284e22368adc1eeb6a33854"}, + {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ff534f491a059e74fb7f994876df86078b4b125dbecc53c098a298ecd55fa9c6"}, + {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24a16b8d55309f0af0db9d04ff442b0c91afccf078a94809e7c3a71747a5c214"}, + {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c8fada56465fc19179404cc9d5d5e1064f5dfe27405cb052f57a5b4fe06aed1"}, + {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a3d48d5abc146fd804395713427d944757a99254350e6a651e7d776818074aee"}, + {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ef1ec0e97623bc0e18469418cc4dd2c59a2d5fddcae944de61e13c0b46f910e"}, + {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91857b196de89e9b36d3f8629aa8772c0bbe7efef8334fe266956b1c192ec31c"}, + {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:63831e407487b8a21bb51f97cd86a616c291d5138f8caec16ab6019cf6423935"}, + {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6c72c37b03bce9900f5dbb4f476af17253ec60c13bf7a7259f71a8dc1b036cb"}, + {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1f1096165741b5c2178ab15b0eb09b5de16dd39b1cc135767d72471f0a69ce"}, + {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:70c940c0e4ef335e22a6c705b01f286ee44780b5909065d212d94d82ea2580cb"}, +] + +[package.extras] +dev = ["pytest (>=8.1.1)"] + [[package]] name = "pyright" version = "1.1.363" @@ -6070,7 +6194,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "ollama", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] +all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "duckduckgo-search", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "ollama", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-cohere = ["cohere"] @@ -6102,6 +6226,7 @@ drivers-vector-postgresql = ["pgvector", "psycopg2-binary"] drivers-vector-redis = ["redis"] drivers-web-scraper-markdownify = ["beautifulsoup4", "markdownify", "playwright"] drivers-web-scraper-trafilatura = ["trafilatura"] +drivers-web-search-duckduckgo = ["duckduckgo-search"] loaders-audio = ["filetype"] loaders-dataframe = ["pandas"] loaders-email = ["mail-parser"] @@ -6111,4 +6236,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "6ccbbba60b534e4756d1c36e37ce1379ee2126d37b822f186b5dbb8e8f701ff3" +content-hash = "a10478cb634e28faa788c568ec9e1ab8bd8e86b09a4e3fb96d08071e76f54c7f" diff --git a/pyproject.toml b/pyproject.toml index 0869256a9..bc2fe0451 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,7 @@ elevenlabs = {version = "^1.1.2", optional = true} torch = {version = "^2.3.0", optional = true} pusher = {version = "^3.3.2", optional = true} ollama = {version = "^0.2.1", optional = true} +duckduckgo-search = {version = "^6.1.6", optional = true} # loaders pandas = {version = "^1.3", optional = true} @@ -97,6 +98,8 @@ drivers-embedding-cohere = ["cohere"] drivers-web-scraper-trafilatura = ["trafilatura"] drivers-web-scraper-markdownify = ["playwright", "beautifulsoup4", "markdownify"] +drivers-web-search-duckduckgo = ["duckduckgo-search"] + drivers-event-listener-amazon-sqs = ["boto3"] drivers-event-listener-amazon-iot = ["boto3"] drivers-event-listener-pusher = ["pusher"] @@ -134,6 +137,7 @@ all = [ "torch", "pusher", "ollama", + "duckduckgo-search", # loaders "pandas", diff --git a/tests/integration/tasks/test_toolkit_task.py b/tests/integration/tasks/test_toolkit_task.py index 97f068c5b..a4d8c30c3 100644 --- a/tests/integration/tasks/test_toolkit_task.py +++ b/tests/integration/tasks/test_toolkit_task.py @@ -12,13 +12,15 @@ def structure_tester(self, request): import os from griptape.structures import Agent from griptape.tools import WebScraper, WebSearch, TaskMemoryClient + from griptape.drivers import GoogleWebSearchDriver return StructureTester( Agent( tools=[ WebSearch( - google_api_key=os.environ["GOOGLE_API_KEY"], - google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], + web_search_driver=GoogleWebSearchDriver( + api_key=os.environ["GOOGLE_API_KEY"], search_id=os.environ["GOOGLE_API_SEARCH_ID"] + ) ), WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=False), diff --git a/tests/unit/drivers/web_search/__init__.py b/tests/unit/drivers/web_search/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/drivers/web_search/test_duck_duck_go_web_search_driver.py b/tests/unit/drivers/web_search/test_duck_duck_go_web_search_driver.py new file mode 100644 index 000000000..fcacc274c --- /dev/null +++ b/tests/unit/drivers/web_search/test_duck_duck_go_web_search_driver.py @@ -0,0 +1,36 @@ +import pytest +import json +from griptape.drivers import DuckDuckGoWebSearchDriver +from griptape.artifacts import ListArtifact + + +class TestDuckDuckGoWebSearchDriver: + @pytest.fixture + def driver(self, mocker): + mock_response = [ + {"title": "foo", "href": "bar", "body": "baz"}, + {"title": "foo2", "href": "bar2", "body": "baz2"}, + ] + + mocker.patch("duckduckgo_search.DDGS.text", return_value=mock_response) + + return DuckDuckGoWebSearchDriver() + + @pytest.fixture + def driver_with_error(self, mocker): + mocker.patch("duckduckgo_search.DDGS.text", side_effect=Exception("test_error")) + + return DuckDuckGoWebSearchDriver() + + def test_search_returns_results(self, driver): + results = driver.search("test") + assert isinstance(results, ListArtifact) + output = [json.loads(result.value) for result in results] + assert len(output) == 2 + assert output[0]["title"] == "foo" + assert output[0]["url"] == "bar" + assert output[0]["description"] == "baz" + + def test_search_raises_error(self, driver_with_error): + with pytest.raises(Exception, match="Error searching 'test' with DuckDuckGo: test_error"): + driver_with_error.search("test") diff --git a/tests/unit/drivers/web_search/test_google_web_search_driver.py b/tests/unit/drivers/web_search/test_google_web_search_driver.py new file mode 100644 index 000000000..9ecb92f46 --- /dev/null +++ b/tests/unit/drivers/web_search/test_google_web_search_driver.py @@ -0,0 +1,43 @@ +from pytest import fixture +import pytest +from griptape.drivers import GoogleWebSearchDriver +from griptape.artifacts import ErrorArtifact +import json +from pytest_mock import MockerFixture + + +class TestGoogleWebSearchDriver: + @fixture + def driver(self, mocker: MockerFixture): + mock_response = mocker.Mock() + mocker.patch.object( + mock_response, "json", return_value={"items": [{"title": "foo", "link": "bar", "snippet": "baz"}]} + ) + mock_response.status_code = 200 + + mocker.patch("requests.get", return_value=mock_response) + + return GoogleWebSearchDriver(api_key="test", search_id="test") + + @fixture + def driver_with_error(self, mocker: MockerFixture): + mock_response = mocker.Mock() + mock_response.status_code = 500 + mock_response.reason = "test_reason" + mocker.patch("requests.get", return_value=mock_response) + + return GoogleWebSearchDriver(api_key="test", search_id="test") + + def test_search_returns_results(self, driver): + results = driver.search("test") + output = [json.loads(result.value) for result in results] + assert len(output) == 1 + assert output[0]["title"] == "foo" + assert output[0]["url"] == "bar" + assert output[0]["description"] == "baz" + + def test_search_raises_error(self, driver_with_error): + with pytest.raises( + Exception, match="Google Search API returned an error with status code 500 and reason 'test_reason'" + ): + driver_with_error.search("test") diff --git a/tests/unit/tools/test_web_search.py b/tests/unit/tools/test_web_search.py index c9a79b452..0abc880c8 100644 --- a/tests/unit/tools/test_web_search.py +++ b/tests/unit/tools/test_web_search.py @@ -1,34 +1,32 @@ -from griptape.artifacts import BaseArtifact, ErrorArtifact +import pytest +from griptape.artifacts import BaseArtifact, ErrorArtifact, TextArtifact from griptape.tools import WebSearch -from pytest import fixture -import json class TestWebSearch: - @fixture + @pytest.fixture def websearch_tool(self, mocker): - mock_response = mocker.Mock() - mock_response.status_code = 200 - mock_response.json.return_value = {"items": [{"title": "foo", "link": "bar", "snippet": "baz"}]} - mocker.patch("requests.get", return_value=mock_response) + mock_response = TextArtifact("test_response") + driver = mocker.Mock() + mocker.patch.object(driver, "search", return_value=mock_response) - return WebSearch(google_api_key="foo", google_api_search_id="bar") + return WebSearch(web_search_driver=driver) - @fixture + @pytest.fixture def websearch_tool_with_error(self, mocker): - mock_response = mocker.Mock() - mock_response.status_code = 500 - mocker.patch("requests.get", return_value=mock_response) + mock_response = Exception("test_error") + driver = mocker.Mock() + mocker.patch.object(driver, "search", side_effect=mock_response) - return WebSearch(google_api_key="foo", google_api_search_id="bar") + return WebSearch(web_search_driver=driver) def test_search(self, websearch_tool): assert isinstance(websearch_tool.search({"values": {"query": "foo bar"}}), BaseArtifact) - assert json.loads(websearch_tool.search({"values": {"query": "foo bar"}}).value[0].value) == { - "title": "foo", - "url": "bar", - "description": "baz", - } + assert websearch_tool.search({"values": {"query": "foo bar"}}).value == "test_response" def test_search_with_error(self, websearch_tool_with_error): assert isinstance(websearch_tool_with_error.search({"values": {"query": "foo bar"}}), ErrorArtifact) + assert ( + websearch_tool_with_error.search({"values": {"query": "foo bar"}}).value + == "Error searching 'foo bar' with Mock: test_error" + ) From 73c1d51bfb1ae110bae12f5e79c8e0cf0ca40016 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 19 Jun 2024 16:42:28 -0700 Subject: [PATCH 110/145] Fix/drivers headers (#881) --- .../drivers/audio-transcription-drivers.md | 2 ++ .../drivers/conversation-memory-drivers.md | 2 ++ .../drivers/image-generation-drivers.md | 2 ++ .../drivers/image-query-drivers.md | 14 ++++++++------ docs/griptape-framework/drivers/sql-drivers.md | 8 +++++--- .../drivers/structure-run-drivers.md | 6 ++++-- .../drivers/text-to-speech-drivers.md | 2 ++ .../drivers/vector-store-drivers.md | 18 ++++++++++-------- .../drivers/web-scraper-drivers.md | 6 ++++-- .../engines/summary-engines.md | 2 +- 10 files changed, 40 insertions(+), 22 deletions(-) diff --git a/docs/griptape-framework/drivers/audio-transcription-drivers.md b/docs/griptape-framework/drivers/audio-transcription-drivers.md index ddadcb89a..c89ef9699 100644 --- a/docs/griptape-framework/drivers/audio-transcription-drivers.md +++ b/docs/griptape-framework/drivers/audio-transcription-drivers.md @@ -6,6 +6,8 @@ This driver acts as a critical bridge between audio transcription Engines and th This capability is essential for enhancing accessibility, improving content discoverability, and automating tasks that traditionally relied on manual transcription, thereby streamlining operations and enhancing efficiency across various industries. +## Audio Transcription Drivers + ### OpenAI The [OpenAI Audio Transcription Driver](../../reference/griptape/drivers/audio_transcription/openai_audio_transcription_driver.md) utilizes OpenAI's sophisticated `whisper` model to accurately transcribe spoken audio into text. This model supports multiple languages, ensuring precise transcription across a wide range of dialects. diff --git a/docs/griptape-framework/drivers/conversation-memory-drivers.md b/docs/griptape-framework/drivers/conversation-memory-drivers.md index 2ca5f8dd3..4e437a3f5 100644 --- a/docs/griptape-framework/drivers/conversation-memory-drivers.md +++ b/docs/griptape-framework/drivers/conversation-memory-drivers.md @@ -2,6 +2,8 @@ You can persist and load memory by using Conversation Memory Drivers. You can build drivers for your own data stores by extending [BaseConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/base_conversation_memory_driver.md). +## Conversation Memory Drivers + ### Local The [LocalConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/local_conversation_memory_driver.md) allows you to persist Conversation Memory in a local JSON file. diff --git a/docs/griptape-framework/drivers/image-generation-drivers.md b/docs/griptape-framework/drivers/image-generation-drivers.md index 25572ba9c..95a8bf49b 100644 --- a/docs/griptape-framework/drivers/image-generation-drivers.md +++ b/docs/griptape-framework/drivers/image-generation-drivers.md @@ -23,6 +23,8 @@ agent = Agent(tools=[ agent.run("Generate a watercolor painting of a dog riding a skateboard") ``` +## Image Generation Drivers + ### Amazon Bedrock The [Amazon Bedrock Image Generation Driver](../../reference/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.md) provides multi-model access to image generation models hosted by Amazon Bedrock. This Driver manages API calls to the Bedrock API, while the specific Model Drivers below format the API requests and parse the responses. diff --git a/docs/griptape-framework/drivers/image-query-drivers.md b/docs/griptape-framework/drivers/image-query-drivers.md index 8003924b1..720aa1819 100644 --- a/docs/griptape-framework/drivers/image-query-drivers.md +++ b/docs/griptape-framework/drivers/image-query-drivers.md @@ -1,11 +1,13 @@ -# Image Query Drivers +## Overview Image Query Drivers are used by [Image Query Engines](../engines/query-engines.md#image) to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular Image Query Driver. !!! info All Image Query Drivers default to a `max_tokens` of 256. It is recommended that you set this value to correspond to the desired response length. -## Anthropic +## Image Query Drivers + +### Anthropic !!! info To tune `max_tokens`, see [Anthropic's documentation on image tokens](https://docs.anthropic.com/claude/docs/vision#image-costs) for more information on how to relate token count to response length. @@ -59,7 +61,7 @@ result = engine.run("Describe the weather in the image", [image_artifact1, image print(result) ``` -## OpenAI +### OpenAI !!! info While the `max_tokens` field is optional, it is recommended to set this to a value that corresponds to the desired response length. Without an explicit value, the model will default to very short responses. See [OpenAI's documentation](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information on how to relate token count to response length. @@ -86,7 +88,7 @@ with open("tests/resources/mountain.png", "rb") as f: engine.run("Describe the weather in the image", [image_artifact]) ``` -## Azure OpenAI +### Azure OpenAI !!! info In order to use the `gpt-4-vision-preview` model on Azure OpenAI, the `gpt-4` model must be deployed with the version set to `vision-preview`. More information can be found in the [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/gpt-with-vision). @@ -117,11 +119,11 @@ with open("tests/resources/mountain.png", "rb") as f: engine.run("Describe the weather in the image", [image_artifact]) ``` -## Amazon Bedrock +### Amazon Bedrock The [Amazon Bedrock Image Query Driver](../../reference/griptape/drivers/image_query/amazon_bedrock_image_query_driver.md) provides multi-model access to image query models hosted by Amazon Bedrock. This Driver manages API calls to the Bedrock API, while the specific Model Drivers below format the API requests and parse the responses. -### Claude +#### Claude The [BedrockClaudeImageQueryModelDriver](../../reference/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.md) provides support for Claude models hosted by Bedrock. diff --git a/docs/griptape-framework/drivers/sql-drivers.md b/docs/griptape-framework/drivers/sql-drivers.md index c4b7dbcca..c0f8e9f99 100644 --- a/docs/griptape-framework/drivers/sql-drivers.md +++ b/docs/griptape-framework/drivers/sql-drivers.md @@ -8,7 +8,9 @@ SQL drivers can be used to make SQL queries and load table schemas. They are use !!! info More database-specific SQL drivers are coming soon. -## SQL +## SQL Drivers + +### SQL This is a basic SQL loader based on [SQLAlchemy 1.x](https://docs.sqlalchemy.org/en/14/). Here is an example of how to use it: @@ -22,7 +24,7 @@ driver = SqlDriver( driver.execute_query("select 'foo', 'bar';") ``` -## Amazon Redshift +### Amazon Redshift !!! info This driver requires the `drivers-sql-redshift` [extra](../index.md#extras). @@ -46,7 +48,7 @@ driver = AmazonRedshiftSqlDriver( driver.execute_query("select * from people;") ``` -## Snowflake +### Snowflake !!! info This driver requires the `drivers-sql-snowflake` [extra](../index.md#extras). diff --git a/docs/griptape-framework/drivers/structure-run-drivers.md b/docs/griptape-framework/drivers/structure-run-drivers.md index 54413c3a2..bba3de524 100644 --- a/docs/griptape-framework/drivers/structure-run-drivers.md +++ b/docs/griptape-framework/drivers/structure-run-drivers.md @@ -2,7 +2,9 @@ Structure Run Drivers can be used to run Griptape Structures in a variety of runtime environments. When combined with the [Structure Run Task](../../griptape-framework/structures/tasks.md#structure-run-task) or [Structure Run Client](../../griptape-tools/official-tools/structure-run-client.md) you can create complex, multi-agent pipelines that span multiple runtime environments. -## Local +## Structure Run Drivers + +### Local The [LocalStructureRunDriver](../../reference/griptape/drivers/structure_run/local_structure_run_driver.md) is used to run Griptape Structures in the same runtime environment as the code that is running the Structure. @@ -53,7 +55,7 @@ joke_coordinator = Pipeline( joke_coordinator.run("Tell me a joke") ``` -## Griptape Cloud +### Griptape Cloud The [GriptapeCloudStructureRunDriver](../../reference/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.md) is used to run Griptape Structures in the Griptape Cloud. diff --git a/docs/griptape-framework/drivers/text-to-speech-drivers.md b/docs/griptape-framework/drivers/text-to-speech-drivers.md index a37d4d33e..5f1823fdc 100644 --- a/docs/griptape-framework/drivers/text-to-speech-drivers.md +++ b/docs/griptape-framework/drivers/text-to-speech-drivers.md @@ -4,6 +4,8 @@ Provide a Driver when building an [Engine](../engines/audio-engines.md), then pass it to a [Tool](../tools/index.md) for use by an [Agent](../structures/agents.md): +## Text to Speech Drivers + ### Eleven Labs The [Eleven Labs Text to Speech Driver](../../reference/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.md) provides support for text-to-speech models hosted by Eleven Labs. This Driver supports configurations specific to Eleven Labs, like voice selection and output format. diff --git a/docs/griptape-framework/drivers/vector-store-drivers.md b/docs/griptape-framework/drivers/vector-store-drivers.md index 481a2dd84..96480527a 100644 --- a/docs/griptape-framework/drivers/vector-store-drivers.md +++ b/docs/griptape-framework/drivers/vector-store-drivers.md @@ -16,7 +16,9 @@ Each vector driver takes a [BaseEmbeddingDriver](../../reference/griptape/driver !!! info More vector drivers are coming soon. -## Local +## Vector Store Drivers + +### Local The [LocalVectorStoreDriver](../../reference/griptape/drivers/vector/local_vector_store_driver.md) can be used to load and query data from memory. Here is a complete example of how the driver can be used to load a webpage into the driver and query it later: @@ -47,7 +49,7 @@ print("\n\n".join(values)) ``` -## Pinecone +### Pinecone !!! info This driver requires the `drivers-vector-pinecone` [extra](../index.md#extras). @@ -103,7 +105,7 @@ result = vector_store_driver.query( ) ``` -## Marqo +### Marqo !!! info This driver requires the `drivers-vector-marqo` [extra](../index.md#extras). @@ -157,7 +159,7 @@ result = vector_store.query(query="What is griptape?") print(result) ``` -## Mongodb Atlas +### Mongodb Atlas !!! info This driver requires the `drivers-vector-mongodb` [extra](../index.md#extras). @@ -225,7 +227,7 @@ The format for creating a vector index should look similar to the following: ``` Replace `path_to_vector` with the expected field name where the vector content will be. -## Azure MongoDB +### Azure MongoDB !!! info This driver requires the `drivers-vector-mongodb` [extra](../index.md#extras). @@ -274,7 +276,7 @@ result = vector_store.query(query="What is griptape?") print(result) ``` -## Redis +### Redis !!! info This driver requires the `drivers-vector-redis` [extra](../index.md#extras). @@ -319,7 +321,7 @@ The format for creating a vector index should be similar to the following: FT.CREATE idx:griptape ON hash PREFIX 1 "griptape:" SCHEMA namespace TAG vector VECTOR FLAT 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE ``` -## OpenSearch +### OpenSearch !!! info This driver requires the `drivers-vector-opensearch` [extra](../index.md#extras). @@ -372,7 +374,7 @@ The body mappings for creating a vector index should look similar to the followi } ``` -## PGVector +### PGVector !!! info This driver requires the `drivers-vector-postgresql` [extra](../index.md#extras). diff --git a/docs/griptape-framework/drivers/web-scraper-drivers.md b/docs/griptape-framework/drivers/web-scraper-drivers.md index a02365b67..c6835e1b5 100644 --- a/docs/griptape-framework/drivers/web-scraper-drivers.md +++ b/docs/griptape-framework/drivers/web-scraper-drivers.md @@ -4,7 +4,9 @@ Web Scraper Drivers can be used to scrape text from the web. They are used by [W * `scrape_url()` scrapes text from a website and returns a [TextArtifact](../../reference/griptape/artifacts/text_artifact.md). The format of the scrapped text is determined by the Driver. -## Markdownify +## Web Scraper Drivers + +### Markdownify !!! info This driver requires the `drivers-web-scraper-markdownify` [extra](../index.md#extras) and the @@ -64,7 +66,7 @@ agent = Agent( agent.run("List all email addresses on griptape.ai in a flat numbered markdown list.") ``` -## Trafilatura +### Trafilatura !!! info This driver requires the `drivers-web-scraper-trafilatura` [extra](../index.md#extras). diff --git a/docs/griptape-framework/engines/summary-engines.md b/docs/griptape-framework/engines/summary-engines.md index 936c12a7c..e6960c0fb 100644 --- a/docs/griptape-framework/engines/summary-engines.md +++ b/docs/griptape-framework/engines/summary-engines.md @@ -4,7 +4,7 @@ Summary engines are used to summarize text and collections of [TextArtifact](../ ## Prompt -Used to summarize texts with LLMs. You can set a custom [prompt_driver](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.prompt_driver), [template_generator](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.template_generator), and [chunker](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.chunker). +Used to summarize texts with LLMs. You can set a custom [prompt_driver](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.prompt_driver), [system_template_generator](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.system_template_generator), [user_template_generator](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.user_template_generator), and [chunker](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.chunker). Use the [summarize_artifacts](../../reference/griptape/engines/summary/prompt_summary_engine.md#griptape.engines.summary.prompt_summary_engine.PromptSummaryEngine.summarize_artifacts) method to summarize a list of artifacts or [summarize_text](../../reference/griptape/engines/summary/base_summary_engine.md#griptape.engines.summary.base_summary_engine.BaseSummaryEngine.summarize_text) to summarize an arbitrary string. From ab82f3c7d5f3b7911e5a4ab1c9b6906e05bda718 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Fri, 21 Jun 2024 12:25:10 -0500 Subject: [PATCH 111/145] Add `ProxyWebScraperDriver` (#886) --- .github/workflows/docs-integration-tests.yml | 1 + CHANGELOG.md | 1 + .../drivers/web-scraper-drivers.md | 30 ++++++++++++++++ griptape/drivers/__init__.py | 2 ++ .../web_scraper/proxy_web_scraper_driver.py | 17 ++++++++++ .../test_proxy_web_scraper_driver.py | 34 +++++++++++++++++++ 6 files changed, 85 insertions(+) create mode 100644 griptape/drivers/web_scraper/proxy_web_scraper_driver.py create mode 100644 tests/unit/drivers/web_scraper/test_proxy_web_scraper_driver.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index f752aa90d..79e0c9f3a 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -119,6 +119,7 @@ jobs: PUSHER_KEY: ${{ secrets.INTEG_PUSHER_KEY }} PUSHER_SECRET: ${{ secrets.INTEG_PUSHER_SECRET }} PUSHER_CLUSTER: ${{ secrets.INTEG_PUSHER_CLUSTER }} + ZENROWS_API_KEY: ${{ secrets.INTEG_ZENROWS_API_KEY }} services: postgres: image: ankane/pgvector:v0.5.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 62846b623..6632b97fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `GoogleWebSearchDriver` to web search with the Google Customsearch API. - `DuckDuckGoWebSearchDriver` to web search with the DuckDuckGo search SDK. +- `ProxyWebScraperDriver` to web scrape using proxies. ### Changed - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. diff --git a/docs/griptape-framework/drivers/web-scraper-drivers.md b/docs/griptape-framework/drivers/web-scraper-drivers.md index c6835e1b5..8c05a3df2 100644 --- a/docs/griptape-framework/drivers/web-scraper-drivers.md +++ b/docs/griptape-framework/drivers/web-scraper-drivers.md @@ -6,6 +6,36 @@ Web Scraper Drivers can be used to scrape text from the web. They are used by [W ## Web Scraper Drivers +### Proxy + +The [ProxyWebScraperDriver](../../reference/griptape/drivers/web_scraper/proxy_web_scraper_driver.md) uses the `requests` library with a provided set of proxies to do web scraping. Paid webscraping services like [ZenRows](https://www.zenrows.com/) or [ScraperAPI](https://www.scraperapi.com/) offer a way to use their API via a set of proxies passed to `requests.get()` + +Example using `ProxyWebScraperDriver` directly: + +```python +import os +from griptape.drivers import ProxyWebScraperDriver + +query_params = [ + "markdown_response=true", + "js_render=false", + "premium_proxy=false", +] +proxy_url = f'http://{os.environ["ZENROWS_API_KEY"]}:{"&".join(query_params)}@proxy.zenrows.com:8001' + +driver = ProxyWebScraperDriver( + proxies={ + "http": proxy_url, + "https": proxy_url, + }, + params={ + "verify": False + } +) + +driver.scrape_url("https://griptape.ai") +``` + ### Markdownify !!! info diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 3576b66bb..94198b734 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -73,6 +73,7 @@ from .web_scraper.base_web_scraper_driver import BaseWebScraperDriver from .web_scraper.trafilatura_web_scraper_driver import TrafilaturaWebScraperDriver from .web_scraper.markdownify_web_scraper_driver import MarkdownifyWebScraperDriver +from .web_scraper.proxy_web_scraper_driver import ProxyWebScraperDriver from .web_search.base_web_search_driver import BaseWebSearchDriver from .web_search.google_web_search_driver import GoogleWebSearchDriver @@ -167,6 +168,7 @@ "BaseWebScraperDriver", "TrafilaturaWebScraperDriver", "MarkdownifyWebScraperDriver", + "ProxyWebScraperDriver", "BaseWebSearchDriver", "GoogleWebSearchDriver", "DuckDuckGoWebSearchDriver", diff --git a/griptape/drivers/web_scraper/proxy_web_scraper_driver.py b/griptape/drivers/web_scraper/proxy_web_scraper_driver.py new file mode 100644 index 000000000..4a9213365 --- /dev/null +++ b/griptape/drivers/web_scraper/proxy_web_scraper_driver.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +from attrs import field, Factory, define +import requests + +from griptape.artifacts import TextArtifact +from griptape.drivers import BaseWebScraperDriver + + +@define +class ProxyWebScraperDriver(BaseWebScraperDriver): + proxies: dict = field(kw_only=True, metadata={"serializable": False}) + params: dict = field(default=Factory(dict), kw_only=True, metadata={"serializable": True}) + + def scrape_url(self, url: str) -> TextArtifact: + response = requests.get(url, proxies=self.proxies, **self.params) + return TextArtifact(response.text) diff --git a/tests/unit/drivers/web_scraper/test_proxy_web_scraper_driver.py b/tests/unit/drivers/web_scraper/test_proxy_web_scraper_driver.py new file mode 100644 index 000000000..569800c6a --- /dev/null +++ b/tests/unit/drivers/web_scraper/test_proxy_web_scraper_driver.py @@ -0,0 +1,34 @@ +import pytest + +from griptape.drivers import ProxyWebScraperDriver +from griptape.artifacts import TextArtifact + + +class TestProxyWebScraperDriver: + @pytest.fixture(autouse=True) + def mock_client(self, mocker): + mock_response = mocker.Mock() + mock_response.text = "test_scrape" + return mocker.patch("requests.get", return_value=mock_response) + + @pytest.fixture + def mock_client_error(self, mocker): + return mocker.patch("requests.get", side_effect=Exception("test_error")) + + @pytest.fixture + def web_scraper(self, mocker): + return ProxyWebScraperDriver( + proxies={"http": "http://localhost:8080", "https": "http://localhost:8080"}, + params={"test_param": "test_param"}, + ) + + def test_scrape_url(self, web_scraper, mock_client): + output = web_scraper.scrape_url("https://example.com/") + mock_client.assert_called_with("https://example.com/", proxies=web_scraper.proxies, test_param="test_param") + assert isinstance(output, TextArtifact) + assert "test_scrape" == output.value + + def test_scrape_url_error(self, web_scraper, mock_client_error): + with pytest.raises(Exception, match="test_error"): + web_scraper.scrape_url("https://example.com/") + assert mock_client_error.called From cff3f79196971c01e6c06d28fbfb45cdb511b518 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Fri, 21 Jun 2024 12:40:23 -0500 Subject: [PATCH 112/145] Update `AmazonBedrockStructureConfig` with helper params (#882) --- CHANGELOG.md | 1 + docs/griptape-framework/structures/config.md | 10 +++- .../config/amazon_bedrock_structure_config.py | 55 ++++++++++++----- .../test_amazon_bedrock_structure_config.py | 59 +++++++++++++++++++ 4 files changed, 108 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6632b97fe..683698785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `GoogleWebSearchDriver` to web search with the Google Customsearch API. - `DuckDuckGoWebSearchDriver` to web search with the DuckDuckGo search SDK. - `ProxyWebScraperDriver` to web scrape using proxies. +- Parameter `session` on `AmazonBedrockStructureConfig`. ### Changed - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. diff --git a/docs/griptape-framework/structures/config.md b/docs/griptape-framework/structures/config.md index d75354768..1a69d70c0 100644 --- a/docs/griptape-framework/structures/config.md +++ b/docs/griptape-framework/structures/config.md @@ -48,11 +48,19 @@ agent = Agent( The [Amazon Bedrock Structure Config](../../reference/griptape/config/amazon_bedrock_structure_config.md) provides default Drivers for Amazon Bedrock's APIs. ```python +import os +import boto3 from griptape.structures import Agent from griptape.config import AmazonBedrockStructureConfig agent = Agent( - config=AmazonBedrockStructureConfig() + config=AmazonBedrockStructureConfig( + session=boto3.Session( + region_name=os.environ["AWS_DEFAULT_REGION"], + aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"], + aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"], + ) + ) ) ``` diff --git a/griptape/config/amazon_bedrock_structure_config.py b/griptape/config/amazon_bedrock_structure_config.py index e70d9c819..3addf3b36 100644 --- a/griptape/config/amazon_bedrock_structure_config.py +++ b/griptape/config/amazon_bedrock_structure_config.py @@ -1,5 +1,9 @@ +from __future__ import annotations +from typing import TYPE_CHECKING from attrs import Factory, define, field +from griptape.drivers import BasePromptDriver +from griptape.utils import import_optional_dependency from griptape.config import StructureConfig from griptape.drivers import ( AmazonBedrockImageGenerationDriver, @@ -8,49 +12,68 @@ AmazonBedrockTitanEmbeddingDriver, BaseEmbeddingDriver, BaseImageGenerationDriver, - BasePromptDriver, BaseVectorStoreDriver, BedrockClaudeImageQueryModelDriver, BedrockTitanImageGenerationModelDriver, LocalVectorStoreDriver, ) +if TYPE_CHECKING: + import boto3 -@define() + +@define class AmazonBedrockStructureConfig(StructureConfig): + session: boto3.Session = field( + default=Factory(lambda: import_optional_dependency("boto3").Session()), + kw_only=True, + metadata={"serializable": False}, + ) + prompt_driver: BasePromptDriver = field( default=Factory( - lambda: AmazonBedrockPromptDriver(model="anthropic.claude-3-sonnet-20240229-v1:0", stream=False) + lambda self: AmazonBedrockPromptDriver( + session=self.session, model="anthropic.claude-3-sonnet-20240229-v1:0" + ), + takes_self=True, ), + kw_only=True, + metadata={"serializable": True}, + ) + embedding_driver: BaseEmbeddingDriver = field( + default=Factory( + lambda self: AmazonBedrockTitanEmbeddingDriver(session=self.session, model="amazon.titan-embed-text-v1"), + takes_self=True, + ), + kw_only=True, metadata={"serializable": True}, ) image_generation_driver: BaseImageGenerationDriver = field( default=Factory( - lambda: AmazonBedrockImageGenerationDriver( + lambda self: AmazonBedrockImageGenerationDriver( + session=self.session, model="amazon.titan-image-generator-v1", image_generation_model_driver=BedrockTitanImageGenerationModelDriver(), - ) + ), + takes_self=True, ), + kw_only=True, metadata={"serializable": True}, ) image_query_driver: BaseImageGenerationDriver = field( default=Factory( - lambda: AmazonBedrockImageQueryDriver( + lambda self: AmazonBedrockImageQueryDriver( + session=self.session, model="anthropic.claude-3-sonnet-20240229-v1:0", image_query_model_driver=BedrockClaudeImageQueryModelDriver(), - ) + ), + takes_self=True, ), - metadata={"serializable": True}, - ) - embedding_driver: BaseEmbeddingDriver = field( - default=Factory(lambda: AmazonBedrockTitanEmbeddingDriver(model="amazon.titan-embed-text-v1")), + kw_only=True, metadata={"serializable": True}, ) vector_store_driver: BaseVectorStoreDriver = field( - default=Factory( - lambda: LocalVectorStoreDriver( - embedding_driver=AmazonBedrockTitanEmbeddingDriver(model="amazon.titan-embed-text-v1") - ) - ), + default=Factory(lambda self: LocalVectorStoreDriver(embedding_driver=self.embedding_driver), takes_self=True), + kw_only=True, metadata={"serializable": True}, ) diff --git a/tests/unit/config/test_amazon_bedrock_structure_config.py b/tests/unit/config/test_amazon_bedrock_structure_config.py index 33b286f94..209c28f26 100644 --- a/tests/unit/config/test_amazon_bedrock_structure_config.py +++ b/tests/unit/config/test_amazon_bedrock_structure_config.py @@ -1,3 +1,4 @@ +import boto3 from pytest import fixture from griptape.config import AmazonBedrockStructureConfig from tests.utils.aws import mock_aws_credentials @@ -10,8 +11,17 @@ def run_before_and_after_tests(self): @fixture def config(self): + mock_aws_credentials() return AmazonBedrockStructureConfig() + @fixture + def config_with_values(self): + return AmazonBedrockStructureConfig( + session=boto3.Session( + aws_access_key_id="testing", aws_secret_access_key="testing", region_name="region-value" + ) + ) + def test_to_dict(self, config): assert config.to_dict() == { "conversation_memory_driver": None, @@ -56,3 +66,52 @@ def test_to_dict(self, config): def test_from_dict(self, config): assert AmazonBedrockStructureConfig.from_dict(config.to_dict()).to_dict() == config.to_dict() + + def test_from_dict_with_values(self, config_with_values): + assert ( + AmazonBedrockStructureConfig.from_dict(config_with_values.to_dict()).to_dict() + == config_with_values.to_dict() + ) + + def test_to_dict_with_values(self, config_with_values): + assert config_with_values.to_dict() == { + "conversation_memory_driver": None, + "embedding_driver": {"model": "amazon.titan-embed-text-v1", "type": "AmazonBedrockTitanEmbeddingDriver"}, + "image_generation_driver": { + "image_generation_model_driver": { + "cfg_scale": 7, + "outpainting_mode": "PRECISE", + "quality": "standard", + "type": "BedrockTitanImageGenerationModelDriver", + }, + "image_height": 512, + "image_width": 512, + "model": "amazon.titan-image-generator-v1", + "seed": None, + "type": "AmazonBedrockImageGenerationDriver", + }, + "image_query_driver": { + "type": "AmazonBedrockImageQueryDriver", + "model": "anthropic.claude-3-sonnet-20240229-v1:0", + "max_tokens": 256, + "image_query_model_driver": {"type": "BedrockClaudeImageQueryModelDriver"}, + }, + "prompt_driver": { + "max_tokens": None, + "model": "anthropic.claude-3-sonnet-20240229-v1:0", + "stream": False, + "temperature": 0.1, + "type": "AmazonBedrockPromptDriver", + }, + "vector_store_driver": { + "embedding_driver": { + "model": "amazon.titan-embed-text-v1", + "type": "AmazonBedrockTitanEmbeddingDriver", + }, + "type": "LocalVectorStoreDriver", + }, + "type": "AmazonBedrockStructureConfig", + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, + "audio_transcription_driver": {"type": "DummyAudioTranscriptionDriver"}, + } + assert config_with_values.session.region_name == "region-value" From 535380cccc49079991ea5a3e692f8cb4f6b772ae Mon Sep 17 00:00:00 2001 From: Vasily Vasinov Date: Fri, 21 Jun 2024 17:44:32 -0600 Subject: [PATCH 113/145] Replace `VectorQueryEngine` with `RagEngine` (#860) ### Added - `RagEngine` is an abstraction for implementing modular RAG pipelines. - `RagContext` is a container object for passing around RAG context. - RAG stages: - `QueryRagStage` for parsing and expanding queries. - `RetrievalRagStage` for retrieving content. - `GenerationRagStage` for augmenting and generating outputs. - RAG modules: - Query: - `RelatedQueryGenerationRagModule` for generating related queries. - Retrieval: - `TextRetrievalRagModule` for retrieving text chunks. - `TextRerankRagModule` for re-ranking retrieved results. - Generation: - `MetadataGenerationRagModule` for appending metadata. - `RulesetsGenerationRagModule` for appending rulesets. - `PromptGenerationRagModule` for generating responses based on retrieved text chunks. - `RagClient` tool for exposing `RagEngines` to LLM agents. - `RagTask` task for including `RagEngines` in any structure. - Rerank drivers: - `CohereRerankDriver` for using the Cohere rerank API. - `utils.execute_futures_list()` for executing a list of futures. - `LocalVectorStoreDriver.persist_file` for persisting vectors and chunks in a text file. - `Entry.to_artifact()` for easy vector store entry conversions into Griptape artifacts. - `BaseVectorStoreDriver.does_entry_exist()` to check if an entry exists in the vector store. ### Changed - **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. - **BREAKING**: Removed `VectorQueryEngine` in favor of `RagEngine`. - **BREAKING**: Removed `TextQueryTask` in favor of `RagTask`. - **BREAKING**: `TextArtifactStorage` now requires `vector_store_driver` and `rag_engine` in place of `vector_query_engine`. - **BREAKING**: Moved `load_artifacts()` from `BaseQueryEngine` to `BaseVectorStoreDriver`. - **BREAKING**: Merged `BaseVectorStoreDriver.QueryResult` into `BaseVectorStoreDriver.Entry`. - **BREAKING**: Replaced `query_engine` with `vector_store_driver` in `VectorStoreClient`. --- CHANGELOG.md | 31 +++++ README.md | 2 +- docs/examples/load-query-and-chat-marqo.md | 7 +- docs/examples/multiple-agent-shared-memory.md | 6 +- docs/examples/query-webpage.md | 2 +- docs/examples/talk-to-a-pdf.md | 49 ++++---- docs/examples/talk-to-a-webpage.md | 39 +++--- docs/griptape-framework/data/index.md | 12 +- .../drivers/image-query-drivers.md | 2 +- .../drivers/vector-store-drivers.md | 17 +-- .../engines/image-query-engines.md | 25 ++++ .../engines/query-engines.md | 52 -------- .../griptape-framework/engines/rag-engines.md | 66 ++++++++++ .../structures/task-memory.md | 113 ++++++++++++------ docs/griptape-framework/structures/tasks.md | 74 ++++++------ .../official-tools/rag-client.md | 49 ++++++++ .../official-tools/vector-store-client.md | 23 ++-- griptape/artifacts/media_artifact.py | 2 +- griptape/drivers/__init__.py | 5 + griptape/drivers/prompt/base_prompt_driver.py | 14 +-- .../drivers/prompt/cohere_prompt_driver.py | 12 +- .../query => drivers/rerank}/__init__.py | 0 griptape/drivers/rerank/base_rerank_driver.py | 9 ++ .../drivers/rerank/cohere_rerank_driver.py | 31 +++++ .../azure_mongodb_vector_store_driver.py | 4 +- .../vector/base_vector_store_driver.py | 87 +++++++++----- .../vector/dummy_vector_store_driver.py | 2 +- .../vector/local_vector_store_driver.py | 69 ++++++++--- .../vector/marqo_vector_store_driver.py | 16 ++- .../mongodb_atlas_vector_store_driver.py | 4 +- .../vector/opensearch_vector_store_driver.py | 6 +- .../vector/pgvector_vector_store_driver.py | 4 +- .../vector/pinecone_vector_store_driver.py | 4 +- .../vector/redis_vector_store_driver.py | 9 +- griptape/engines/__init__.py | 4 - griptape/engines/query/base_query_engine.py | 29 ----- griptape/engines/query/vector_query_engine.py | 95 --------------- griptape/engines/rag/__init__.py | 4 + griptape/engines/rag/modules/__init__.py | 29 +++++ .../engines/rag/modules/base_rag_module.py | 18 +++ .../rag/modules/generation}/__init__.py | 0 .../base_after_generation_rag_module.py | 10 ++ .../base_before_generation_rag_module.py | 10 ++ .../generation/base_generation_rag_module.py | 10 ++ .../metadata_generation_rag_module.py | 20 ++++ .../prompt_generation_rag_module.py | 54 +++++++++ .../rulesets_generation_rag_module.py | 15 +++ .../engines/rag/modules/query/__init__.py | 0 .../modules/query/base_query_rag_module.py | 10 ++ .../related_query_generation_rag_module.py | 33 +++++ .../engines/rag/modules/retrieval/__init__.py | 0 .../retrieval/base_rerank_rag_module.py | 16 +++ .../retrieval/base_retrieval_rag_module.py | 12 ++ .../retrieval/text_rerank_rag_module.py | 12 ++ .../retrieval/text_retrieval_rag_module.py | 35 ++++++ griptape/engines/rag/rag_context.py | 29 +++++ griptape/engines/rag/rag_engine.py | 26 ++++ griptape/engines/rag/stages/__init__.py | 6 + griptape/engines/rag/stages/base_rag_stage.py | 12 ++ .../rag/stages/generation_rag_stage.py | 33 +++++ .../engines/rag/stages/query_rag_stage.py | 23 ++++ .../engines/rag/stages/retrieval_rag_stage.py | 49 ++++++++ .../task/storage/text_artifact_storage.py | 36 ++++-- griptape/structures/structure.py | 36 ++++-- griptape/tasks/__init__.py | 4 +- griptape/tasks/rag_task.py | 31 +++++ griptape/tasks/text_query_task.py | 35 ------ .../rag/modules/metadata_generation/system.j2 | 5 + .../rag/modules/prompt_generation/system.j2 | 15 +++ .../rag/modules/query_generation/system.j2 | 3 + griptape/tools/__init__.py | 2 + griptape/tools/rag_client/__init__.py | 0 griptape/tools/rag_client/manifest.yml | 5 + griptape/tools/rag_client/requirements.txt | 0 griptape/tools/rag_client/tool.py | 38 ++++++ griptape/tools/vector_store_client/tool.py | 18 +-- griptape/utils/__init__.py | 2 + griptape/utils/futures.py | 6 + mkdocs.yml | 5 +- poetry.lock | 5 +- pyproject.toml | 2 + ...st_text_query_task.py => test_rag_task.py} | 16 ++- .../test_amazon_bedrock_structure_config.py | 4 +- tests/unit/drivers/rerank/__init__.py | 0 .../rerank/test_cohere_rerank_driver.py | 19 +++ ...r.py => base_local_vector_store_driver.py} | 32 +++-- .../test_azure_mongodb_vector_store_driver.py | 6 +- tests/unit/drivers/vector/test_entry.py | 12 ++ ...est_in_memory_local_vector_store_driver.py | 10 ++ .../test_mongodb_atlas_vector_store_driver.py | 6 +- ...st_persistent_local_vector_store_driver.py | 29 +++++ .../test_pinecone_vector_storage_driver.py | 4 +- .../engines/query/test_vector_query_engine.py | 58 --------- tests/unit/engines/rag/__init__.py | 0 tests/unit/engines/rag/modules/__init__.py | 0 .../rag/modules/generation/__init__.py | 0 .../test_metadata_generation_rag_module.py | 14 +++ .../test_prompt_generation_rag_module.py | 25 ++++ .../test_rulesets_generation_rag_module.py | 10 ++ .../engines/rag/modules/query/__init__.py | 0 ...est_related_query_generation_rag_module.py | 13 ++ .../engines/rag/modules/retrieval/__init__.py | 0 .../retrieval/test_text_rerank_rag_module.py | 20 ++++ .../test_text_retrieval_rag_module.py | 20 ++++ tests/unit/engines/rag/test_rag_engine.py | 30 +++++ tests/unit/memory/tool/test_task_memory.py | 2 +- tests/unit/structures/test_agent.py | 15 ++- tests/unit/structures/test_pipeline.py | 4 +- tests/unit/structures/test_workflow.py | 4 +- tests/unit/tasks/test_rag_task.py | 35 ++++++ tests/unit/tasks/test_text_query_task.py | 48 -------- tests/unit/tasks/test_toolkit_task.py | 16 +-- tests/unit/tools/test_rag_client.py | 13 ++ tests/unit/tools/test_vector_store_client.py | 19 +-- tests/unit/utils/test_futures.py | 9 ++ tests/utils/defaults.py | 22 +++- 116 files changed, 1550 insertions(+), 654 deletions(-) create mode 100644 docs/griptape-framework/engines/image-query-engines.md delete mode 100644 docs/griptape-framework/engines/query-engines.md create mode 100644 docs/griptape-framework/engines/rag-engines.md create mode 100644 docs/griptape-tools/official-tools/rag-client.md rename griptape/{engines/query => drivers/rerank}/__init__.py (100%) create mode 100644 griptape/drivers/rerank/base_rerank_driver.py create mode 100644 griptape/drivers/rerank/cohere_rerank_driver.py delete mode 100644 griptape/engines/query/base_query_engine.py delete mode 100644 griptape/engines/query/vector_query_engine.py create mode 100644 griptape/engines/rag/__init__.py create mode 100644 griptape/engines/rag/modules/__init__.py create mode 100644 griptape/engines/rag/modules/base_rag_module.py rename {tests/unit/engines/query => griptape/engines/rag/modules/generation}/__init__.py (100%) create mode 100644 griptape/engines/rag/modules/generation/base_after_generation_rag_module.py create mode 100644 griptape/engines/rag/modules/generation/base_before_generation_rag_module.py create mode 100644 griptape/engines/rag/modules/generation/base_generation_rag_module.py create mode 100644 griptape/engines/rag/modules/generation/metadata_generation_rag_module.py create mode 100644 griptape/engines/rag/modules/generation/prompt_generation_rag_module.py create mode 100644 griptape/engines/rag/modules/generation/rulesets_generation_rag_module.py create mode 100644 griptape/engines/rag/modules/query/__init__.py create mode 100644 griptape/engines/rag/modules/query/base_query_rag_module.py create mode 100644 griptape/engines/rag/modules/query/related_query_generation_rag_module.py create mode 100644 griptape/engines/rag/modules/retrieval/__init__.py create mode 100644 griptape/engines/rag/modules/retrieval/base_rerank_rag_module.py create mode 100644 griptape/engines/rag/modules/retrieval/base_retrieval_rag_module.py create mode 100644 griptape/engines/rag/modules/retrieval/text_rerank_rag_module.py create mode 100644 griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py create mode 100644 griptape/engines/rag/rag_context.py create mode 100644 griptape/engines/rag/rag_engine.py create mode 100644 griptape/engines/rag/stages/__init__.py create mode 100644 griptape/engines/rag/stages/base_rag_stage.py create mode 100644 griptape/engines/rag/stages/generation_rag_stage.py create mode 100644 griptape/engines/rag/stages/query_rag_stage.py create mode 100644 griptape/engines/rag/stages/retrieval_rag_stage.py create mode 100644 griptape/tasks/rag_task.py delete mode 100644 griptape/tasks/text_query_task.py create mode 100644 griptape/templates/engines/rag/modules/metadata_generation/system.j2 create mode 100644 griptape/templates/engines/rag/modules/prompt_generation/system.j2 create mode 100644 griptape/templates/engines/rag/modules/query_generation/system.j2 create mode 100644 griptape/tools/rag_client/__init__.py create mode 100644 griptape/tools/rag_client/manifest.yml create mode 100644 griptape/tools/rag_client/requirements.txt create mode 100644 griptape/tools/rag_client/tool.py rename tests/integration/tasks/{test_text_query_task.py => test_rag_task.py} (65%) create mode 100644 tests/unit/drivers/rerank/__init__.py create mode 100644 tests/unit/drivers/rerank/test_cohere_rerank_driver.py rename tests/unit/drivers/vector/{test_local_vector_store_driver.py => base_local_vector_store_driver.py} (62%) create mode 100644 tests/unit/drivers/vector/test_entry.py create mode 100644 tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py create mode 100644 tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py delete mode 100644 tests/unit/engines/query/test_vector_query_engine.py create mode 100644 tests/unit/engines/rag/__init__.py create mode 100644 tests/unit/engines/rag/modules/__init__.py create mode 100644 tests/unit/engines/rag/modules/generation/__init__.py create mode 100644 tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py create mode 100644 tests/unit/engines/rag/modules/generation/test_prompt_generation_rag_module.py create mode 100644 tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py create mode 100644 tests/unit/engines/rag/modules/query/__init__.py create mode 100644 tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py create mode 100644 tests/unit/engines/rag/modules/retrieval/__init__.py create mode 100644 tests/unit/engines/rag/modules/retrieval/test_text_rerank_rag_module.py create mode 100644 tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py create mode 100644 tests/unit/engines/rag/test_rag_engine.py create mode 100644 tests/unit/tasks/test_rag_task.py delete mode 100644 tests/unit/tasks/test_text_query_task.py create mode 100644 tests/unit/tools/test_rag_client.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 66104a6e1..e920f5a5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,12 +7,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Added +- `RagEngine` is an abstraction for implementing modular RAG pipelines. + - `RagContext` is a container object for passing around RAG context. + - RAG stages: + - `QueryRagStage` for parsing and expanding queries. + - `RetrievalRagStage` for retrieving content. + - `GenerationRagStage` for augmenting and generating outputs. + - RAG modules: + - Query: + - `RelatedQueryGenerationRagModule` for generating related queries. + - Retrieval: + - `TextRetrievalRagModule` for retrieving text chunks. + - `TextRerankRagModule` for re-ranking retrieved results. + - Generation: + - `MetadataGenerationRagModule` for appending metadata. + - `RulesetsGenerationRagModule` for appending rulesets. + - `PromptGenerationRagModule` for generating responses based on retrieved text chunks. +- `RagClient` tool for exposing `RagEngines` to LLM agents. +- `RagTask` task for including `RagEngines` in any structure. +- Rerank drivers: + - `CohereRerankDriver` for using the Cohere rerank API. +- `utils.execute_futures_list()` for executing a list of futures. +- `LocalVectorStoreDriver.persist_file` for persisting vectors and chunks in a text file. +- `Entry.to_artifact()` for easy vector store entry conversions into Griptape artifacts. +- `BaseVectorStoreDriver.does_entry_exist()` to check if an entry exists in the vector store. - `GoogleWebSearchDriver` to web search with the Google Customsearch API. - `DuckDuckGoWebSearchDriver` to web search with the DuckDuckGo search SDK. - `ProxyWebScraperDriver` to web scrape using proxies. - Parameter `session` on `AmazonBedrockStructureConfig`. ### Changed +- **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. +- **BREAKING**: Removed `VectorQueryEngine` in favor of `RagEngine`. +- **BREAKING**: Removed `TextQueryTask` in favor of `RagTask`. +- **BREAKING**: `TextArtifactStorage` now requires `vector_store_driver` and `rag_engine` in place of `vector_query_engine`. +- **BREAKING**: Moved `load_artifacts()` from `BaseQueryEngine` to `BaseVectorStoreDriver`. +- **BREAKING**: Merged `BaseVectorStoreDriver.QueryResult` into `BaseVectorStoreDriver.Entry`. +- **BREAKING**: Replaced `query_engine` with `vector_store_driver` in `VectorStoreClient`. - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. ## [0.27.1] - 2024-06-20 diff --git a/README.md b/README.md index b5e4f7bcb..f9eb2aa5c 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Drivers facilitate interactions with external resources and services: Engines wrap Drivers and provide use-case-specific functionality: -- 📊 **Query Engines** execute Retrieval Augmented Generation (RAG) queries. +- 📊 **RAG Engine** is an abstraction for implementing modular Retrieval Augmented Generation (RAG) pipelines. - 🛠️ **Extraction Engines** extract JSON or CSV data from unstructured text. - 📝 **Summary Engines** generate summaries from textual content. - 🖼️ **Image Generation Engines** generate images from textual descriptions. diff --git a/docs/examples/load-query-and-chat-marqo.md b/docs/examples/load-query-and-chat-marqo.md index 718b42729..fb5906e9e 100644 --- a/docs/examples/load-query-and-chat-marqo.md +++ b/docs/examples/load-query-and-chat-marqo.md @@ -2,11 +2,10 @@ import os from griptape import utils from griptape.drivers import MarqoVectorStoreDriver -from griptape.engines import VectorQueryEngine from griptape.loaders import WebLoader from griptape.structures import Agent from griptape.tools import VectorStoreClient -from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.drivers import OpenAiEmbeddingDriver # Define the namespace namespace = "griptape-ai" @@ -18,14 +17,12 @@ vector_store = MarqoVectorStoreDriver( index=os.environ["MARQO_INDEX_NAME"], embedding_driver=OpenAiEmbeddingDriver() ) -# Initialize the query engine -query_engine = VectorQueryEngine(vector_store_driver=vector_store, prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo")) # Initialize the knowledge base tool vector_store_tool = VectorStoreClient( description="Contains information about the Griptape Framework from www.griptape.ai", - query_engine=query_engine, namespace=namespace, + vector_store_driver=vector_store ) # Load artifacts from the web diff --git a/docs/examples/multiple-agent-shared-memory.md b/docs/examples/multiple-agent-shared-memory.md index cc5498d7e..109394d49 100644 --- a/docs/examples/multiple-agent-shared-memory.md +++ b/docs/examples/multiple-agent-shared-memory.md @@ -8,13 +8,9 @@ The `MongoDbAtlasVectorStoreDriver` assumes that you have a vector index configu ```python import os -from griptape.tools import WebScraper, VectorStoreClient, TaskMemoryClient +from griptape.tools import WebScraper, TaskMemoryClient from griptape.structures import Agent from griptape.drivers import AzureOpenAiEmbeddingDriver, AzureMongoDbVectorStoreDriver -from griptape.engines import VectorQueryEngine, PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine -from griptape.memory import TaskMemory -from griptape.artifacts import TextArtifact -from griptape.memory.task.storage import TextArtifactStorage from griptape.config import AzureOpenAiStructureConfig diff --git a/docs/examples/query-webpage.md b/docs/examples/query-webpage.md index d11c5d9c4..07801b32c 100644 --- a/docs/examples/query-webpage.md +++ b/docs/examples/query-webpage.md @@ -22,7 +22,7 @@ results = vector_store.query( namespace="griptape" ) -values = [BaseArtifact.from_json(r.meta["artifact"]).value for r in results] +values = [r.to_artifact().value for r in results] print("\n\n".join(values)) ``` \ No newline at end of file diff --git a/docs/examples/talk-to-a-pdf.md b/docs/examples/talk-to-a-pdf.md index 51f71b4f6..a39832961 100644 --- a/docs/examples/talk-to-a-pdf.md +++ b/docs/examples/talk-to-a-pdf.md @@ -1,48 +1,53 @@ This example demonstrates how to vectorize a PDF of the [Attention Is All You Need](https://arxiv.org/pdf/1706.03762.pdf) paper and setup a Griptape agent with rules and the [VectorStoreClient](../reference/griptape/tools/vector_store_client/tool.md) tool to use it during conversations. ```python -import os -import io import requests -from griptape.engines import VectorQueryEngine +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage from griptape.loaders import PdfLoader from griptape.structures import Agent -from griptape.tools import VectorStoreClient +from griptape.tools import RagClient from griptape.utils import Chat -from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver - namespace = "attention" - response = requests.get("https://arxiv.org/pdf/1706.03762.pdf") - -engine = VectorQueryEngine( - prompt_driver=OpenAiChatPromptDriver( - model="gpt-3.5-turbo", +vector_store = LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver() +) +engine = RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + TextRetrievalRagModule( + namespace=namespace, + vector_store_driver=vector_store, + top_n=20 + ) + ] ), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=OpenAiEmbeddingDriver( - api_key=os.environ["OPENAI_API_KEY"] + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) ) +vector_store_tool = RagClient( + description="Contains information about the Attention Is All You Need paper. " + "Use it to answer any related questions.", + rag_engine=engine +) -engine.vector_store_driver.upsert_text_artifacts( +vector_store.upsert_text_artifacts( { namespace: PdfLoader().load(response.content) } ) -vector_store_tool = VectorStoreClient( - description="Contains information about the Attention Is All You Need paper. " - "Use it to answer any related questions.", - query_engine=engine, - namespace=namespace, -) - agent = Agent( tools=[vector_store_tool] ) Chat(agent).start() + ``` diff --git a/docs/examples/talk-to-a-webpage.md b/docs/examples/talk-to-a-webpage.md index 2f2cbf209..ddd1a18c9 100644 --- a/docs/examples/talk-to-a-webpage.md +++ b/docs/examples/talk-to-a-webpage.md @@ -1,25 +1,33 @@ -This example demonstrates how to vectorize a webpage and setup a Griptape agent with rules and the [VectorStoreClient](../reference/griptape/tools/vector_store_client/tool.md) tool to use it during conversations. +This example demonstrates how to vectorize a webpage and setup a Griptape agent with rules and the [RagClient](../reference/griptape/tools/rag_client/tool.md) tool to use it during conversations. ```python -import os -from griptape.engines import VectorQueryEngine +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage from griptape.loaders import WebLoader from griptape.rules import Ruleset, Rule from griptape.structures import Agent -from griptape.tools import VectorStoreClient +from griptape.tools import RagClient from griptape.utils import Chat -from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver - namespace = "physics-wiki" -engine = VectorQueryEngine( - prompt_driver=OpenAiChatPromptDriver( - model="gpt-3.5-turbo", +vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) + +engine = RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + TextRetrievalRagModule( + namespace=namespace, + vector_store_driver=vector_store_driver, + top_n=20 + ) + ] ), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=OpenAiEmbeddingDriver( - api_key=os.environ["OPENAI_API_KEY"] + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) ) @@ -28,16 +36,15 @@ artifacts = WebLoader().load( "https://en.wikipedia.org/wiki/Physics" ) -engine.vector_store_driver.upsert_text_artifacts( +vector_store_driver.upsert_text_artifacts( {namespace: artifacts} ) -vector_store_tool = VectorStoreClient( +vector_store_tool = RagClient( description="Contains information about physics. " "Use it to answer any physics-related questions.", - query_engine=engine, - namespace=namespace, + rag_engine=engine ) agent = Agent( diff --git a/docs/griptape-framework/data/index.md b/docs/griptape-framework/data/index.md index 73dfe4c66..3e4359737 100644 --- a/docs/griptape-framework/data/index.md +++ b/docs/griptape-framework/data/index.md @@ -14,7 +14,17 @@ Griptape provides several abstractions for working with data. **Tokenizers** are used to tokenize and detokenize text in order to track LLM token limits. -[Query Engines](../engines/query-engines.md) are used to search text storages. +[Audio Engines](../engines/audio-engines.md) are used for working with audio. + +[Extraction Engines](../engines/extraction-engines.md) are used for extracting structured content. + +[Image Query Engines](../engines/image-query-engines.md) are used for querying images with text. + +[Image Generation Engines](../engines/image-generation-engines.md) are used for generating images. + +[Summary Engines](../engines/summary-engines.md) are used for summarizing text content. + +[RAG Engines](../engines/rag-engines.md) are used for implementing modular RAG pipelines. [Vector Store Drivers](../drivers/vector-store-drivers.md) are used to store and query vector databases. diff --git a/docs/griptape-framework/drivers/image-query-drivers.md b/docs/griptape-framework/drivers/image-query-drivers.md index 720aa1819..6fde89b80 100644 --- a/docs/griptape-framework/drivers/image-query-drivers.md +++ b/docs/griptape-framework/drivers/image-query-drivers.md @@ -1,6 +1,6 @@ ## Overview -Image Query Drivers are used by [Image Query Engines](../engines/query-engines.md#image) to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular Image Query Driver. +Image Query Drivers are used by [Image Query Engines](../engines/image-query-engines.md) to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular Image Query Driver. !!! info All Image Query Drivers default to a `max_tokens` of 256. It is recommended that you set this value to correspond to the desired response length. diff --git a/docs/griptape-framework/drivers/vector-store-drivers.md b/docs/griptape-framework/drivers/vector-store-drivers.md index 96480527a..095c14f22 100644 --- a/docs/griptape-framework/drivers/vector-store-drivers.md +++ b/docs/griptape-framework/drivers/vector-store-drivers.md @@ -43,7 +43,7 @@ results = vector_store_driver.query( namespace="griptape" ) -values = [BaseArtifact.from_json(r.meta["artifact"]).value for r in results] +values = [r.to_artifact().value for r in results] print("\n\n".join(values)) @@ -117,9 +117,7 @@ Here is an example of how the driver can be used to load and query information i ```python import os from griptape.drivers import MarqoVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver -from griptape.engines import VectorQueryEngine from griptape.loaders import WebLoader -from griptape.tools import VectorStoreClient # Initialize an embedding driver embedding_driver = OpenAiEmbeddingDriver(api_key=os.environ["OPENAI_API_KEY"]) @@ -136,25 +134,16 @@ vector_store = MarqoVectorStoreDriver( embedding_driver=embedding_driver, ) -# Initialize the query engine -query_engine = VectorQueryEngine(vector_store_driver=vector_store, prompt_driver=prompt_driver) - -# Initialize the knowledge base tool -VectorStoreClient( - description="Contains information about the Griptape Framework from www.griptape.ai", - query_engine=query_engine, - namespace=namespace, -) - # Load artifacts from the web artifacts = WebLoader(max_tokens=200).load("https://www.griptape.ai") # Upsert the artifacts into the vector store vector_store.upsert_text_artifacts( { - namespace: artifacts, + "griptape": artifacts, } ) + result = vector_store.query(query="What is griptape?") print(result) ``` diff --git a/docs/griptape-framework/engines/image-query-engines.md b/docs/griptape-framework/engines/image-query-engines.md new file mode 100644 index 000000000..def6cbd5d --- /dev/null +++ b/docs/griptape-framework/engines/image-query-engines.md @@ -0,0 +1,25 @@ +## Image Query Engines + +The [Image Query Engine](../../reference/griptape/engines/image_query/image_query_engine.md) allows you to perform natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular [Image Query Driver](../drivers/image-query-drivers.md). + +All Image Query Drivers default to a `max_tokens` of 256. You can tune this value based on your use case and the [Image Query Driver](../drivers/image-query-drivers.md) you are providing. + +```python +from griptape.drivers import OpenAiImageQueryDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader + +driver = OpenAiImageQueryDriver( + model="gpt-4o", + max_tokens=256 +) + +engine = ImageQueryEngine( + image_query_driver=driver +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +engine.run("Describe the weather in the image", [image_artifact]) +``` diff --git a/docs/griptape-framework/engines/query-engines.md b/docs/griptape-framework/engines/query-engines.md deleted file mode 100644 index 38f5f6610..000000000 --- a/docs/griptape-framework/engines/query-engines.md +++ /dev/null @@ -1,52 +0,0 @@ -## Overview -Query engines are used to perform text queries against various modalities. - -## Vector - -Used to query vector storages. You can set a custom [prompt_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.prompt_driver) and [vector_store_driver](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.vector_store_driver). Uses [LocalVectorStoreDriver](../../reference/griptape/drivers/vector/local_vector_store_driver.md) by default. - -Use the [upsert_text_artifact](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.upsert_text_artifact)s into vector storage with an optional `namespace`. - -Use the [VectorQueryEngine](../../reference/griptape/engines/query/vector_query_engine.md#griptape.engines.query.vector_query_engine.VectorQueryEngine.query) method to query the vector storage. - -```python -from griptape.drivers import OpenAiChatPromptDriver, LocalVectorStoreDriver, OpenAiEmbeddingDriver -from griptape.engines import VectorQueryEngine -from griptape.loaders import WebLoader - -engine = VectorQueryEngine( - prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), - vector_store_driver=LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) -) - -engine.upsert_text_artifacts( - WebLoader().load("https://www.griptape.ai"), namespace="griptape" -) - -engine.query("what is griptape?", namespace="griptape") -``` - -## Image -The [Image Query Engine](../../reference/griptape/engines/image_query/image_query_engine.md) allows you to perform natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular [Image Query Driver](../drivers/image-query-drivers.md). - -All Image Query Drivers default to a `max_tokens` of 256. You can tune this value based on your use case and the [Image Query Driver](../drivers/image-query-drivers.md) you are providing. - -```python -from griptape.drivers import OpenAiImageQueryDriver -from griptape.engines import ImageQueryEngine -from griptape.loaders import ImageLoader - -driver = OpenAiImageQueryDriver( - model="gpt-4o", - max_tokens=256 -) - -engine = ImageQueryEngine( - image_query_driver=driver -) - -with open("tests/resources/mountain.png", "rb") as f: - image_artifact = ImageLoader().load(f.read()) - -engine.run("Describe the weather in the image", [image_artifact]) -``` diff --git a/docs/griptape-framework/engines/rag-engines.md b/docs/griptape-framework/engines/rag-engines.md new file mode 100644 index 000000000..600b91d03 --- /dev/null +++ b/docs/griptape-framework/engines/rag-engines.md @@ -0,0 +1,66 @@ +## RAG Engines + +!!! note + This section is a work in progress. + +`RagEngine` is an abstraction for implementing modular RAG pipelines. + +`RagContext` is a container object for passing around RAG context. + +### RAG Stages +- `QueryRagStage` is for parsing and expanding queries. +- `RetrievalRagStage` is for retrieving content. +- `GenerationRagStage` is for augmenting and generating outputs. + +### RAG Modules + +#### Query +- `RelatedQueryGenerationRagModule` is for generating related queries. + +#### Retrieval +- `TextRetrievalRagModule` is for retrieving text chunks. +- `TextRerankRagModule` is for re-ranking retrieved results. + +#### Generation +- `MetadataGenerationRagModule` is for appending metadata. +- `RulesetsGenerationRagModule` is for appending rulesets. +- `PromptGenerationRagModule` is for generating responses based on retrieved text chunks. + +### Example + +```python +from griptape.artifacts import TextArtifact +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage + +vector_store = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) + +artifacts = [ + TextArtifact("Griptape builds AI-powered applications that connect securely to your enterprise data and APIs."), + TextArtifact("Griptape Agents provide incredible power and flexibility when working with large language models.") +] +vector_store.upsert_text_artifacts({"griptape": artifacts}) + +engine = RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + TextRetrievalRagModule( + namespace="griptape", + vector_store_driver=vector_store, + top_n=20 + ) + ] + ), + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") + ) + ) +) + +print( + engine.process_query("what are Griptape agents?").output.to_text() +) +``` \ No newline at end of file diff --git a/docs/griptape-framework/structures/task-memory.md b/docs/griptape-framework/structures/task-memory.md index 219fd4412..4597b6402 100644 --- a/docs/griptape-framework/structures/task-memory.md +++ b/docs/griptape-framework/structures/task-memory.md @@ -198,24 +198,26 @@ Because Task Memory splits up the storage and retrieval of data, you can use dif Here is an example where we use GPT-4 to orchestrate the Tools and store the data in Task Memory, and Amazon Bedrock's Titan model to query the raw content. In this example, GPT-4 _never_ sees the contents of the page, only that it was stored in Task Memory. Even the query results generated by the Titan model are stored in Task Memory so that the `FileManager` can save the results to disk without GPT-4 ever seeing them. - ```python from griptape.artifacts import TextArtifact from griptape.config import ( OpenAiStructureConfig, ) from griptape.drivers import ( - AmazonBedrockPromptDriver, - AmazonBedrockTitanEmbeddingDriver, LocalVectorStoreDriver, - OpenAiChatPromptDriver, + OpenAiChatPromptDriver, OpenAiEmbeddingDriver, ) -from griptape.engines import VectorQueryEngine +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage from griptape.memory import TaskMemory from griptape.memory.task.storage import TextArtifactStorage from griptape.structures import Agent from griptape.tools import FileManager, TaskMemoryClient, WebScraper + +vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) + agent = Agent( config=OpenAiStructureConfig( prompt_driver=OpenAiChatPromptDriver(model="gpt-4"), @@ -223,21 +225,30 @@ agent = Agent( task_memory=TaskMemory( artifact_storages={ TextArtifact: TextArtifactStorage( - query_engine=VectorQueryEngine( - prompt_driver=AmazonBedrockPromptDriver( - model="amazon.titan-text-express-v1", - ), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=AmazonBedrockTitanEmbeddingDriver() + rag_engine=RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + TextRetrievalRagModule( + namespace="griptape", + vector_store_driver=vector_store_driver, + top_n=20 + ) + ] ), + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") + ) + ) ), - ), + vector_store_driver=vector_store_driver + ) } ), tools=[ WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=True, allowlist=["query"]), - FileManager(off_prompt=True), # FileManager returns an InfoArtifact which will not be stored in Task Memory regardless of the off_prompt setting + FileManager(off_prompt=True), ], ) @@ -247,27 +258,61 @@ agent.run( ``` ``` -[04/30/24 16:36:45] INFO ToolkitTask 3d3c5f5a98a44f32ad9533621c036604 - Input: According to this page https://en.wikipedia.org/wiki/Elden_Ring, find how many copies of Elden Ring have been sold and then save the - result to a file. -[04/30/24 16:36:52] INFO Subtask 61ec822bfe49472c9ed874fad07d13a1 - Thought: First, I need to scrape the content of the provided URL. Then, I will search the scraped content for the number of copies of Elden Ring that have been sold. Finally, I will save this information to a file. - - Actions: [{"name": "WebScraper", "path": "get_content", "input": {"values": {"url": "https://en.wikipedia.org/wiki/Elden_Ring"}}, "tag": "scrape_elden_ring"}] -[04/30/24 16:37:04] INFO Subtask 61ec822bfe49472c9ed874fad07d13a1 - Response: Output of "WebScraper.get_content" was stored in memory with memory_name "TaskMemory" and artifact_namespace "c7a01e8202e24869b7be559e0daff110" -[04/30/24 16:37:10] INFO Subtask 32f9cb73d8944e5ca36bd68a90e4f4b2 - Thought: Now that the webpage content is stored in memory, I need to query this memory to find the number of copies of Elden Ring that have been sold. - Actions: [{"tag": "query_sales", "name": "TaskMemoryClient", "path": "query", "input": {"values": {"memory_name": "TaskMemory", "artifact_namespace": "c7a01e8202e24869b7be559e0daff110", "query": "How many copies of Elden Ring have been sold?"}}}] -[04/30/24 16:37:18] INFO Subtask 32f9cb73d8944e5ca36bd68a90e4f4b2 - Response: Output of "TaskMemoryClient.query" was stored in memory with memory_name "TaskMemory" and artifact_namespace "f8dd40fb302a47d7862c8b76eeaf61c2" -[04/30/24 16:37:25] INFO Subtask 74a5fd392b044956842a56b76d09183e - Thought: Now that I have the number of copies sold stored in memory, I need to save this information to a file. - Actions: [{"tag": "save_sales", "name": "FileManager", "path": "save_memory_artifacts_to_disk", "input": {"values": {"dir_name": "sales_data", "file_name": "elden_ring_sales.txt", "memory_name": "TaskMemory", "artifact_namespace": "f8dd40fb302a47d7862c8b76eeaf61c2"}}}] - INFO Subtask 74a5fd392b044956842a56b76d09183e - Response: Successfully saved memory artifacts to disk -[04/30/24 16:37:27] INFO ToolkitTask 3d3c5f5a98a44f32ad9533621c036604 - Output: The number of copies of Elden Ring sold has been successfully saved to the file "elden_ring_sales.txt" in the "sales_data" directory. +[06/21/24 16:00:01] INFO ToolkitTask 17f30ac14701490c8ef71508f420ea9f + Input: Use this page + https://en.wikipedia.org/wiki/Elden_Ring to find + how many copies of Elden Ring have been sold, and + then save the result to a file. +[06/21/24 16:00:05] INFO Subtask cb06889205334ec9afd7e97f7f231ab5 + Thought: First, I need to scrape the content of the + provided URL to find the information about how many + copies of Elden Ring have been sold. Then, I will + save this information to a file. + + Actions: [{"name": "WebScraper", "path": + "get_content", "input": {"values": {"url": + "https://en.wikipedia.org/wiki/Elden_Ring"}}, + "tag": "scrape_elden_ring"}] +[06/21/24 16:00:12] INFO Subtask cb06889205334ec9afd7e97f7f231ab5 + Response: Output of "WebScraper.get_content" was + stored in memory with memory_name "TaskMemory" and + artifact_namespace + "7e48bcff0da94ad3b06aa4e173f8f37b" +[06/21/24 16:00:17] INFO Subtask 56102d42475d413299ce52a0230506b7 + Thought: Now that the webpage content is stored in + memory, I need to query this memory to find the + information about how many copies of Elden Ring + have been sold. + Actions: [{"tag": "query_sales", "name": + "TaskMemoryClient", "path": "query", "input": + {"values": {"memory_name": "TaskMemory", + "artifact_namespace": + "7e48bcff0da94ad3b06aa4e173f8f37b", "query": "How + many copies of Elden Ring have been sold?"}}}] +[06/21/24 16:00:19] INFO Subtask 56102d42475d413299ce52a0230506b7 + Response: Output of "TaskMemoryClient.query" was + stored in memory with memory_name "TaskMemory" and + artifact_namespace + "9ecf4d7b7d0c46149dfc46ba236f178e" +[06/21/24 16:00:25] INFO Subtask ed2921791dcf46b68c9d8d2f8dbeddbd + Thought: Now that I have the sales information + stored in memory, I need to save this information + to a file. + Actions: [{"tag": "save_sales_info", "name": + "FileManager", "path": + "save_memory_artifacts_to_disk", "input": + {"values": {"dir_name": "sales_info", "file_name": + "elden_ring_sales.txt", "memory_name": + "TaskMemory", "artifact_namespace": + "9ecf4d7b7d0c46149dfc46ba236f178e"}}}] + INFO Subtask ed2921791dcf46b68c9d8d2f8dbeddbd + Response: Successfully saved memory artifacts to + disk +[06/21/24 16:00:27] INFO ToolkitTask 17f30ac14701490c8ef71508f420ea9f + Output: The information about how many copies of + Elden Ring have been sold has been successfully + saved to the file "elden_ring_sales.txt" in the + "sales_info" directory. ``` ## Tools That Can Read From Task Memory diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index c43603b1b..6bb517fa2 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -72,7 +72,7 @@ from griptape.structures import Agent agent = Agent() agent.add_task( # take the first argument from the agent `run` method - PromptTask("Respond to the users following request: {{ args[0] }}"), + PromptTask("Respond to the following request: {{ args[0] }}"), ) agent.run("Write me a haiku") @@ -80,7 +80,7 @@ agent.run("Write me a haiku") ``` [10/20/23 15:27:26] INFO PromptTask f5025c6352914e9f80ef730e5269985a - Input: Respond to the users following request: + Input: Respond to the following request: Write me a haiku [10/20/23 15:27:28] INFO PromptTask f5025c6352914e9f80ef730e5269985a Output: Gentle morning dew, @@ -350,40 +350,50 @@ agent.run( senses, bringing a revolution in technology. ``` -## Text Query Task +## RAG Task -To query text, use the [TextQueryTask](../../reference/griptape/tasks/text_query_task.md). -This Task takes a [Query Engine](../../griptape-framework/engines/query-engines.md), and a set of arguments specific to the engine. +To query text, use the [RagTask](../../reference/griptape/tasks/rag_task.md). +This task takes a [RAG Engine](../../griptape-framework/engines/rag-engines.md), and a set of arguments specific to the engine. ```python -from griptape.drivers import OpenAiChatPromptDriver from griptape.structures import Agent -from griptape.tasks import TextQueryTask -from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver -from griptape.engines import VectorQueryEngine +from griptape.tasks import RagTask +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.artifacts import TextArtifact +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage # Initialize Embedding Driver and Vector Store Driver vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) -artifact = TextArtifact( - "Griptape builds AI-powered applications that connect securely to your enterprise data and APIs." - "Griptape Agents provide incredible power and flexibility when working with large language models." -) - -# Create a VectorQueryEngine using the LocalVectorStoreDriver -vector_query_engine = VectorQueryEngine( - vector_store_driver=vector_store_driver, - prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo") -) -vector_query_engine.upsert_text_artifact(artifact=artifact) +artifacts = [ + TextArtifact("Griptape builds AI-powered applications that connect securely to your enterprise data and APIs."), + TextArtifact("Griptape Agents provide incredible power and flexibility when working with large language models.") +] +vector_store_driver.upsert_text_artifacts({"griptape": artifacts}) -# Instantiate the agent and add TextQueryTask with the VectorQueryEngine +# Instantiate the agent and add RagTask with the RagEngine agent = Agent() agent.add_task( - TextQueryTask( - "Respond to the users following query: {{ args[0] }}", - query_engine=vector_query_engine, + RagTask( + "Respond to the following query: {{ args[0] }}", + rag_engine=RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + TextRetrievalRagModule( + namespace="griptape", + vector_store_driver=vector_store_driver, + top_n=20 + ) + ] + ), + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") + ) + ) + ), ) ) @@ -391,21 +401,9 @@ agent.add_task( agent.run("Give me information about Griptape") ``` -``` -[10/20/23 15:32:39] INFO TextQueryTask a1d2eceab9204679b3f701f6ea821606 - Input: Respond to the users following query: Give - me information about Griptape -[10/20/23 15:32:41] INFO TextQueryTask a1d2eceab9204679b3f701f6ea821606 - Output: Griptape builds AI-powered applications - that connect securely to your enterprise data and - APIs. Griptape Agents provide incredible power and - flexibility when working with large language - models. -``` - ## Code Execution Task -To execute an arbitrary Python function, use the [CodeExecutionTask](../../reference/griptape/tasks/text_query_task.md). +To execute an arbitrary Python function, use the [CodeExecutionTask](../../reference/griptape/tasks/code_execution_task.md). This task takes a python function, and authors can elect to return a custom artifact. ```python @@ -627,7 +625,7 @@ pipeline.run("An image of a mountain shrouded by clouds") ## Image Query Task -The [Image Query Task](../../reference/griptape/tasks/image_query_task.md) performs a natural language query on one or more input images. This Task uses an [Image Query Engine](../engines/query-engines.md#image) configured with an [Image Query Driver](../drivers/image-query-drivers.md) to perform the query. The functionality provided by this Task depend on the capabilities of the model provided by the Driver. +The [Image Query Task](../../reference/griptape/tasks/image_query_task.md) performs a natural language query on one or more input images. This Task uses an [Image Query Engine](../engines/image-query-engines.md) configured with an [Image Query Driver](../drivers/image-query-drivers.md) to perform the query. The functionality provided by this Task depend on the capabilities of the model provided by the Driver. This Task accepts two inputs: a query (represented by either a string or a [Text Artifact](../data/artifacts.md#textartifact)) and a list of [Image Artifacts](../data/artifacts.md#imageartifact) or a Callable returning these two values. diff --git a/docs/griptape-tools/official-tools/rag-client.md b/docs/griptape-tools/official-tools/rag-client.md new file mode 100644 index 000000000..75bc5dee7 --- /dev/null +++ b/docs/griptape-tools/official-tools/rag-client.md @@ -0,0 +1,49 @@ +The [RagClient](../../reference/griptape/tools/rag_client/tool.md) enables LLMs to query modular RAG engines. + +Here is an example of how it can be used with a local vector store driver: + +```python +from griptape.structures import Agent +from griptape.tasks import RagTask +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.artifacts import TextArtifact +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage + +# Initialize Embedding Driver and Vector Store Driver +vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) + +artifact = TextArtifact( + "Griptape builds AI-powered applications that connect securely to your enterprise data and APIs." + "Griptape Agents provide incredible power and flexibility when working with large language models." +) +vector_store_driver.upsert_text_artifact(artifact=artifact, namespace="griptape") + +# Instantiate the agent and add RagTask with the RagEngine +agent = Agent() +agent.add_task( + RagTask( + "Respond to the following query: {{ args[0] }}", + rag_engine=RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + TextRetrievalRagModule( + namespace="griptape", + vector_store_driver=vector_store_driver, + top_n=20 + ) + ] + ), + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") + ) + ) + ), + ) +) + +# Run the agent with a query string +agent.run("Give me information about Griptape") +``` diff --git a/docs/griptape-tools/official-tools/vector-store-client.md b/docs/griptape-tools/official-tools/vector-store-client.md index 5af8cee88..ffdbbba91 100644 --- a/docs/griptape-tools/official-tools/vector-store-client.md +++ b/docs/griptape-tools/official-tools/vector-store-client.md @@ -1,29 +1,26 @@ -The [VectorStoreClient](../../reference/griptape/tools/vector_store_client/tool.md) enables LLMs to dynamically query task memory. +The [VectorStoreClient](../../reference/griptape/tools/vector_store_client/tool.md) enables LLMs to query vector stores. -Here is an example of how it can be used with the Pincone storage driver: +Here is an example of how it can be used with a local vector store driver: ```python from griptape.structures import Agent from griptape.tools import VectorStoreClient, TaskMemoryClient from griptape.loaders import WebLoader -from griptape.engines import VectorQueryEngine -from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver -engine = VectorQueryEngine( - prompt_driver=OpenAiChatPromptDriver(model="gpt-3.5-turbo"), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=OpenAiEmbeddingDriver(), - ), +vector_store_driver = LocalVectorStoreDriver( + embedding_driver=OpenAiEmbeddingDriver(), ) -engine.upsert_text_artifacts( - WebLoader().load("https://www.griptape.ai"), - namespace="griptape" +vector_store_driver.upsert_text_artifacts( + { + "griptape": WebLoader().load("https://www.griptape.ai") + } ) vector_db = VectorStoreClient( description="This DB has information about the Griptape Python framework", - query_engine=engine, + vector_store_driver=vector_store_driver, namespace="griptape", off_prompt=True ) diff --git a/griptape/artifacts/media_artifact.py b/griptape/artifacts/media_artifact.py index 92cc0d9cd..2848ec1bb 100644 --- a/griptape/artifacts/media_artifact.py +++ b/griptape/artifacts/media_artifact.py @@ -29,7 +29,7 @@ class MediaArtifact(BlobArtifact): model: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) prompt: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) - def __attrs_post_init__(self): + def __attrs_post_init__(self) -> None: # Generating the name string requires attributes set by child classes. # This waits until all attributes are available before generating a name. if self.name == self.id: diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 94198b734..34b43103b 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -90,6 +90,9 @@ from .file_manager.local_file_manager_driver import LocalFileManagerDriver from .file_manager.amazon_s3_file_manager_driver import AmazonS3FileManagerDriver +from .rerank.base_rerank_driver import BaseRerankDriver +from .rerank.cohere_rerank_driver import CohereRerankDriver + from .text_to_speech.base_text_to_speech_driver import BaseTextToSpeechDriver from .text_to_speech.dummy_text_to_speech_driver import DummyTextToSpeechDriver from .text_to_speech.elevenlabs_text_to_speech_driver import ElevenLabsTextToSpeechDriver @@ -181,6 +184,8 @@ "BaseFileManagerDriver", "LocalFileManagerDriver", "AmazonS3FileManagerDriver", + "BaseRerankDriver", + "CohereRerankDriver", "BaseTextToSpeechDriver", "DummyTextToSpeechDriver", "ElevenLabsTextToSpeechDriver", diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index 9ef076dbc..45f95d544 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -14,7 +14,7 @@ from griptape.structures import Structure -@define +@define(kw_only=True) class BasePromptDriver(SerializableMixin, ExponentialBackoffMixin, ABC): """Base class for Prompt Drivers. @@ -29,15 +29,13 @@ class BasePromptDriver(SerializableMixin, ExponentialBackoffMixin, ABC): stream: Whether to stream the completion or not. `CompletionChunkEvent`s will be published to the `Structure` if one is provided. """ - temperature: float = field(default=0.1, kw_only=True, metadata={"serializable": True}) - max_tokens: Optional[int] = field(default=None, kw_only=True, metadata={"serializable": True}) - structure: Optional[Structure] = field(default=None, kw_only=True) - ignored_exception_types: tuple[type[Exception], ...] = field( - default=Factory(lambda: (ImportError, ValueError)), kw_only=True - ) + temperature: float = field(default=0.1, metadata={"serializable": True}) + max_tokens: Optional[int] = field(default=None, metadata={"serializable": True}) + structure: Optional[Structure] = field(default=None) + ignored_exception_types: tuple[type[Exception], ...] = field(default=Factory(lambda: (ImportError, ValueError))) model: str = field(metadata={"serializable": True}) tokenizer: BaseTokenizer - stream: bool = field(default=False, kw_only=True, metadata={"serializable": True}) + stream: bool = field(default=False, metadata={"serializable": True}) def before_run(self, prompt_stack: PromptStack) -> None: if self.structure: diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index 3ff2c9e89..ca199011a 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -11,7 +11,7 @@ from cohere import Client -@define +@define(kw_only=True) class CoherePromptDriver(BasePromptDriver): """ Attributes: @@ -20,15 +20,13 @@ class CoherePromptDriver(BasePromptDriver): client: Custom `cohere.Client`. """ - api_key: str = field(kw_only=True, metadata={"serializable": False}) - model: str = field(kw_only=True, metadata={"serializable": True}) + api_key: str = field(metadata={"serializable": False}) + model: str = field(metadata={"serializable": True}) client: Client = field( - default=Factory(lambda self: import_optional_dependency("cohere").Client(self.api_key), takes_self=True), - kw_only=True, + default=Factory(lambda self: import_optional_dependency("cohere").Client(self.api_key), takes_self=True) ) tokenizer: BaseTokenizer = field( - default=Factory(lambda self: CohereTokenizer(model=self.model, client=self.client), takes_self=True), - kw_only=True, + default=Factory(lambda self: CohereTokenizer(model=self.model, client=self.client), takes_self=True) ) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: diff --git a/griptape/engines/query/__init__.py b/griptape/drivers/rerank/__init__.py similarity index 100% rename from griptape/engines/query/__init__.py rename to griptape/drivers/rerank/__init__.py diff --git a/griptape/drivers/rerank/base_rerank_driver.py b/griptape/drivers/rerank/base_rerank_driver.py new file mode 100644 index 000000000..975575d49 --- /dev/null +++ b/griptape/drivers/rerank/base_rerank_driver.py @@ -0,0 +1,9 @@ +from abc import ABC, abstractmethod +from attrs import define +from griptape.artifacts import TextArtifact + + +@define(kw_only=True) +class BaseRerankDriver(ABC): + @abstractmethod + def run(self, query: str, artifacts: list[TextArtifact]) -> list[TextArtifact]: ... diff --git a/griptape/drivers/rerank/cohere_rerank_driver.py b/griptape/drivers/rerank/cohere_rerank_driver.py new file mode 100644 index 000000000..206706476 --- /dev/null +++ b/griptape/drivers/rerank/cohere_rerank_driver.py @@ -0,0 +1,31 @@ +from __future__ import annotations +from typing import TYPE_CHECKING, Optional +from attrs import define, field, Factory +from griptape.artifacts import TextArtifact +from griptape.drivers import BaseRerankDriver +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + from cohere import Client + + +@define(kw_only=True) +class CohereRerankDriver(BaseRerankDriver): + model: str = field(default="rerank-english-v3.0", metadata={"serializable": True}) + top_n: Optional[int] = field(default=None) + + api_key: str = field(metadata={"serializable": True}) + client: Client = field( + default=Factory(lambda self: import_optional_dependency("cohere").Client(self.api_key), takes_self=True) + ) + + def run(self, query: str, artifacts: list[TextArtifact]) -> list[TextArtifact]: + response = self.client.rerank( + model=self.model, + query=query, + documents=[a.value for a in artifacts], + return_documents=True, + top_n=self.top_n, + ) + + return [TextArtifact(r.document.text) for r in response.results] diff --git a/griptape/drivers/vector/azure_mongodb_vector_store_driver.py b/griptape/drivers/vector/azure_mongodb_vector_store_driver.py index 2e9968b63..e29a7fa70 100644 --- a/griptape/drivers/vector/azure_mongodb_vector_store_driver.py +++ b/griptape/drivers/vector/azure_mongodb_vector_store_driver.py @@ -16,7 +16,7 @@ def query( include_vectors: bool = False, offset: Optional[int] = None, **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: """Queries the MongoDB collection for documents that match the provided query string. Results can be customized based on parameters like count, namespace, inclusion of vectors, offset, and index. @@ -50,7 +50,7 @@ def query( pipeline.append({"$project": {"similarityScore": {"$meta": "searchScore"}, "document": "$$ROOT"}}) return [ - BaseVectorStoreDriver.QueryResult( + BaseVectorStoreDriver.Entry( id=str(doc["_id"]), vector=doc[self.vector_path] if include_vectors else [], score=doc["similarityScore"], diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 55a758da1..71f1c1061 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -2,33 +2,34 @@ from abc import ABC, abstractmethod from concurrent import futures from dataclasses import dataclass -from attrs import define, field, Factory +from typing import Any from typing import Optional +from attrs import define, field, Factory from griptape import utils -from griptape.mixins import SerializableMixin -from griptape.artifacts import TextArtifact +from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact from griptape.drivers import BaseEmbeddingDriver +from griptape.mixins import SerializableMixin @define class BaseVectorStoreDriver(SerializableMixin, ABC): DEFAULT_QUERY_COUNT = 5 - @dataclass - class QueryResult: - id: str - vector: Optional[list[float]] - score: float - meta: Optional[dict] = None - namespace: Optional[str] = None - @dataclass class Entry: id: str - vector: list[float] + vector: Optional[list[float]] = None + score: Optional[float] = None meta: Optional[dict] = None namespace: Optional[str] = None + @staticmethod + def from_dict(data: dict[str, Any]) -> BaseVectorStoreDriver.Entry: + return BaseVectorStoreDriver.Entry(**data) + + def to_artifact(self) -> BaseArtifact: + return BaseArtifact.from_json(self.meta["artifact"]) # pyright: ignore[reportOptionalSubscript] + embedding_driver: BaseEmbeddingDriver = field(kw_only=True, metadata={"serializable": True}) futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) @@ -44,22 +45,30 @@ def upsert_text_artifacts( ) def upsert_text_artifact( - self, artifact: TextArtifact, namespace: Optional[str] = None, meta: Optional[dict] = None, **kwargs + self, + artifact: TextArtifact, + namespace: Optional[str] = None, + meta: Optional[dict] = None, + vector_id: Optional[str] = None, + **kwargs, ) -> str: - if not meta: - meta = {} + meta = {} if meta is None else meta + vector_id = utils.str_to_hash(artifact.value) if vector_id is None else vector_id - meta["artifact"] = artifact.to_json() - - if artifact.embedding: - vector = artifact.embedding + if self.does_entry_exist(vector_id, namespace): + return vector_id else: - vector = artifact.generate_embedding(self.embedding_driver) + meta["artifact"] = artifact.to_json() - if isinstance(vector, list): - return self.upsert_vector(vector, vector_id=artifact.id, namespace=namespace, meta=meta, **kwargs) - else: - raise ValueError("Vector must be an instance of 'list'.") + if artifact.embedding: + vector = artifact.embedding + else: + vector = artifact.generate_embedding(self.embedding_driver) + + if isinstance(vector, list): + return self.upsert_vector(vector, vector_id=vector_id, namespace=namespace, meta=meta, **kwargs) + else: + raise ValueError("Vector must be an instance of 'list'.") def upsert_text( self, @@ -69,13 +78,27 @@ def upsert_text( meta: Optional[dict] = None, **kwargs, ) -> str: - return self.upsert_vector( - self.embedding_driver.embed_string(string), - vector_id=vector_id, - namespace=namespace, - meta=meta if meta else {}, - **kwargs, - ) + vector_id = utils.str_to_hash(string) if vector_id is None else vector_id + + if self.does_entry_exist(vector_id, namespace): + return vector_id + else: + return self.upsert_vector( + self.embedding_driver.embed_string(string), + vector_id=vector_id, + namespace=namespace, + meta=meta if meta else {}, + **kwargs, + ) + + def does_entry_exist(self, vector_id: str, namespace: Optional[str] = None) -> bool: + return self.load_entry(vector_id, namespace) is not None + + def load_artifacts(self, namespace: Optional[str] = None) -> ListArtifact: + result = self.load_entries(namespace) + artifacts = [r.to_artifact() for r in result] + + return ListArtifact([a for a in artifacts if isinstance(a, TextArtifact)]) @abstractmethod def delete_vector(self, vector_id: str) -> None: ... @@ -104,4 +127,4 @@ def query( namespace: Optional[str] = None, include_vectors: bool = False, **kwargs, - ) -> list[QueryResult]: ... + ) -> list[Entry]: ... diff --git a/griptape/drivers/vector/dummy_vector_store_driver.py b/griptape/drivers/vector/dummy_vector_store_driver.py index f53a5eb90..04dea2181 100644 --- a/griptape/drivers/vector/dummy_vector_store_driver.py +++ b/griptape/drivers/vector/dummy_vector_store_driver.py @@ -36,5 +36,5 @@ def query( namespace: Optional[str] = None, include_vectors: bool = False, **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: raise DummyException(__class__.__name__, "query") diff --git a/griptape/drivers/vector/local_vector_store_driver.py b/griptape/drivers/vector/local_vector_store_driver.py index 4b9dae00f..1a86225c6 100644 --- a/griptape/drivers/vector/local_vector_store_driver.py +++ b/griptape/drivers/vector/local_vector_store_driver.py @@ -1,15 +1,49 @@ -from typing import Optional, Callable +import json +import os +import threading +from dataclasses import asdict +from typing import Optional, Callable, TextIO +from attrs import define, field, Factory from numpy import dot from numpy.linalg import norm from griptape import utils from griptape.drivers import BaseVectorStoreDriver -from attrs import define, field -@define +@define(kw_only=True) class LocalVectorStoreDriver(BaseVectorStoreDriver): - entries: dict[str, BaseVectorStoreDriver.Entry] = field(factory=dict, kw_only=True) - relatedness_fn: Callable = field(default=lambda x, y: dot(x, y) / (norm(x) * norm(y)), kw_only=True) + entries: dict[str, BaseVectorStoreDriver.Entry] = field(factory=dict) + persist_file: Optional[str] = field(default=None) + relatedness_fn: Callable = field(default=lambda x, y: dot(x, y) / (norm(x) * norm(y))) + thread_lock: threading.Lock = field(default=Factory(lambda: threading.Lock())) + + def __attrs_post_init__(self) -> None: + if self.persist_file is not None: + directory = os.path.dirname(self.persist_file) + + if directory and not os.path.exists(directory): + os.makedirs(directory) + + if not os.path.isfile(self.persist_file): + with open(self.persist_file, "w") as file: + self.save_entries_to_file(file) + + with open(self.persist_file, "r+") as file: + if os.path.getsize(self.persist_file) > 0: + self.entries = self.load_entries_from_file(file) + else: + self.save_entries_to_file(file) + + def save_entries_to_file(self, json_file: TextIO) -> None: + with self.thread_lock: + serialized_data = {k: asdict(v) for k, v in self.entries.items()} + + json.dump(serialized_data, json_file) + + def load_entries_from_file(self, json_file: TextIO) -> dict[str, BaseVectorStoreDriver.Entry]: + data = json.load(json_file) + + return {k: BaseVectorStoreDriver.Entry.from_dict(v) for k, v in data.items()} def upsert_vector( self, @@ -21,9 +55,16 @@ def upsert_vector( ) -> str: vector_id = vector_id if vector_id else utils.str_to_hash(str(vector)) - self.entries[self._namespaced_vector_id(vector_id, namespace)] = self.Entry( - id=vector_id, vector=vector, meta=meta, namespace=namespace - ) + with self.thread_lock: + self.entries[self._namespaced_vector_id(vector_id, namespace)] = self.Entry( + id=vector_id, vector=vector, meta=meta, namespace=namespace + ) + + if self.persist_file is not None: + # TODO: optimize later since it reserializes all entries from memory and stores them in the JSON file + # every time a new vector is inserted + with open(self.persist_file, "w") as file: + self.save_entries_to_file(file) return vector_id @@ -40,7 +81,7 @@ def query( namespace: Optional[str] = None, include_vectors: bool = False, **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: query_embedding = self.embedding_driver.embed_string(query) if namespace: @@ -54,7 +95,7 @@ def query( entries_and_relatednesses.sort(key=lambda x: x[1], reverse=True) result = [ - BaseVectorStoreDriver.QueryResult(id=er[0].id, vector=er[0].vector, score=er[1], meta=er[0].meta) + BaseVectorStoreDriver.Entry(id=er[0].id, vector=er[0].vector, score=er[1], meta=er[0].meta) for er in entries_and_relatednesses ][:count] @@ -62,12 +103,12 @@ def query( return result else: return [ - BaseVectorStoreDriver.QueryResult(id=r.id, vector=[], score=r.score, meta=r.meta, namespace=r.namespace) + BaseVectorStoreDriver.Entry(id=r.id, vector=[], score=r.score, meta=r.meta, namespace=r.namespace) for r in result ] - def _namespaced_vector_id(self, vector_id: str, namespace: Optional[str]): - return vector_id if namespace is None else f"{namespace}-{vector_id}" - def delete_vector(self, vector_id: str): raise NotImplementedError(f"{self.__class__.__name__} does not support deletion.") + + def _namespaced_vector_id(self, vector_id: str, namespace: Optional[str]): + return vector_id if namespace is None else f"{namespace}-{vector_id}" diff --git a/griptape/drivers/vector/marqo_vector_store_driver.py b/griptape/drivers/vector/marqo_vector_store_driver.py index cccc716f8..f20530cff 100644 --- a/griptape/drivers/vector/marqo_vector_store_driver.py +++ b/griptape/drivers/vector/marqo_vector_store_driver.py @@ -1,5 +1,6 @@ from __future__ import annotations from typing import Optional, Any, TYPE_CHECKING +from griptape import utils from griptape.utils import import_optional_dependency from griptape.drivers import BaseVectorStoreDriver from griptape.artifacts import TextArtifact @@ -65,7 +66,12 @@ def upsert_text( raise ValueError(f"Failed to upsert text: {response}") def upsert_text_artifact( - self, artifact: TextArtifact, namespace: Optional[str] = None, meta: Optional[dict] = None, **kwargs + self, + artifact: TextArtifact, + namespace: Optional[str] = None, + meta: Optional[dict] = None, + vector_id: Optional[str] = None, + **kwargs, ) -> str: """Upsert a text artifact into the Marqo index. @@ -73,15 +79,17 @@ def upsert_text_artifact( artifact: The text artifact to be indexed. namespace: An optional namespace for the artifact. meta: An optional dictionary of metadata for the artifact. + vector_id: An optional explicit vector_id. Returns: str: The ID of the artifact that was added. """ artifact_json = artifact.to_json() + vector_id = utils.str_to_hash(artifact.value) if vector_id is None else vector_id doc = { - "_id": artifact.id, + "_id": vector_id, "Description": artifact.value, # Description will be treated as tensor field "artifact": str(artifact_json), "namespace": namespace, @@ -160,7 +168,7 @@ def query( include_vectors: bool = False, include_metadata: bool = True, **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: """Query the Marqo index for documents. Args: @@ -188,7 +196,7 @@ def query( ] return [ - BaseVectorStoreDriver.QueryResult( + BaseVectorStoreDriver.Entry( id=r["_id"], vector=r["_tensor_facets"][0]["_embedding"] if include_vectors else [], score=r["_score"], diff --git a/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py b/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py index c5368de3d..73bcc02c7 100644 --- a/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py +++ b/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py @@ -110,7 +110,7 @@ def query( include_vectors: bool = False, offset: Optional[int] = None, **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: """Queries the MongoDB collection for documents that match the provided query string. Results can be customized based on parameters like count, namespace, inclusion of vectors, offset, and index. @@ -148,7 +148,7 @@ def query( pipeline[0]["$vectorSearch"]["filter"] = {"namespace": namespace} results = [ - BaseVectorStoreDriver.QueryResult( + BaseVectorStoreDriver.Entry( id=str(doc["_id"]), vector=doc[self.vector_path] if include_vectors else [], score=doc["score"], diff --git a/griptape/drivers/vector/opensearch_vector_store_driver.py b/griptape/drivers/vector/opensearch_vector_store_driver.py index 7ff00d2de..81add74aa 100644 --- a/griptape/drivers/vector/opensearch_vector_store_driver.py +++ b/griptape/drivers/vector/opensearch_vector_store_driver.py @@ -127,13 +127,13 @@ def query( include_metadata=True, field_name: str = "vector", **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: """Performs a nearest neighbor search on OpenSearch to find vectors similar to the provided query string. Results can be limited using the count parameter and optionally filtered by a namespace. Returns: - A list of BaseVectorStoreDriver.QueryResult objects, each encapsulating the retrieved vector, its similarity score, metadata, and namespace. + A list of BaseVectorStoreDriver.Entry objects, each encapsulating the retrieved vector, its similarity score, metadata, and namespace. """ count = count if count else BaseVectorStoreDriver.DEFAULT_QUERY_COUNT vector = self.embedding_driver.embed_string(query) @@ -150,7 +150,7 @@ def query( response = self.client.search(index=self.index_name, body=query_body) return [ - BaseVectorStoreDriver.QueryResult( + BaseVectorStoreDriver.Entry( id=hit["_id"], namespace=hit["_source"].get("namespace") if namespace else None, score=hit["_score"], diff --git a/griptape/drivers/vector/pgvector_vector_store_driver.py b/griptape/drivers/vector/pgvector_vector_store_driver.py index 8058c8774..29c657589 100644 --- a/griptape/drivers/vector/pgvector_vector_store_driver.py +++ b/griptape/drivers/vector/pgvector_vector_store_driver.py @@ -127,7 +127,7 @@ def query( include_vectors: bool = False, distance_metric: str = "cosine_distance", **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: """Performs a search on the collection to find vectors similar to the provided input vector, optionally filtering to only those that match the provided namespace. """ @@ -163,7 +163,7 @@ def query( results = query_result.limit(count).all() return [ - BaseVectorStoreDriver.QueryResult( + BaseVectorStoreDriver.Entry( id=str(result[0].id), vector=result[0].vector if include_vectors else None, score=result[1], diff --git a/griptape/drivers/vector/pinecone_vector_store_driver.py b/griptape/drivers/vector/pinecone_vector_store_driver.py index daf378087..6da2f2418 100644 --- a/griptape/drivers/vector/pinecone_vector_store_driver.py +++ b/griptape/drivers/vector/pinecone_vector_store_driver.py @@ -77,7 +77,7 @@ def query( # PineconeVectorStorageDriver-specific params: include_metadata=True, **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: vector = self.embedding_driver.embed_string(query) params = { @@ -90,7 +90,7 @@ def query( results = self.index.query(vector=vector, **params) return [ - BaseVectorStoreDriver.QueryResult( + BaseVectorStoreDriver.Entry( id=r["id"], vector=r["values"], score=r["score"], meta=r["metadata"], namespace=results["namespace"] ) for r in results["matches"] diff --git a/griptape/drivers/vector/redis_vector_store_driver.py b/griptape/drivers/vector/redis_vector_store_driver.py index 6e39775b7..e58e4b3ea 100644 --- a/griptape/drivers/vector/redis_vector_store_driver.py +++ b/griptape/drivers/vector/redis_vector_store_driver.py @@ -1,14 +1,11 @@ from __future__ import annotations import json -import logging import numpy as np from griptape.utils import import_optional_dependency, str_to_hash from typing import Optional, TYPE_CHECKING from attrs import define, field, Factory from griptape.drivers import BaseVectorStoreDriver -logging.basicConfig(level=logging.WARNING) - if TYPE_CHECKING: from redis import Redis @@ -111,13 +108,13 @@ def query( namespace: Optional[str] = None, include_vectors: bool = False, **kwargs, - ) -> list[BaseVectorStoreDriver.QueryResult]: + ) -> list[BaseVectorStoreDriver.Entry]: """Performs a nearest neighbor search on Redis to find vectors similar to the provided input vector. Results can be limited using the count parameter and optionally filtered by a namespace. Returns: - A list of BaseVectorStoreDriver.QueryResult objects, each encapsulating the retrieved vector, its similarity score, metadata, and namespace. + A list of BaseVectorStoreDriver.Entry objects, each encapsulating the retrieved vector, its similarity score, metadata, and namespace. """ Query = import_optional_dependency("redis.commands.search.query").Query @@ -143,7 +140,7 @@ def query( vector_id = document.id.split(":")[1] if ":" in document.id else document.id vector_float_list = json.loads(document.vec_string) if include_vectors else None query_results.append( - BaseVectorStoreDriver.QueryResult( + BaseVectorStoreDriver.Entry( id=vector_id, vector=vector_float_list, score=float(document.score), diff --git a/griptape/engines/__init__.py b/griptape/engines/__init__.py index 17adaa53d..7835b2238 100644 --- a/griptape/engines/__init__.py +++ b/griptape/engines/__init__.py @@ -1,8 +1,6 @@ from .extraction.base_extraction_engine import BaseExtractionEngine from .extraction.csv_extraction_engine import CsvExtractionEngine from .extraction.json_extraction_engine import JsonExtractionEngine -from .query.base_query_engine import BaseQueryEngine -from .query.vector_query_engine import VectorQueryEngine from .summary.base_summary_engine import BaseSummaryEngine from .summary.prompt_summary_engine import PromptSummaryEngine from .image.base_image_generation_engine import BaseImageGenerationEngine @@ -15,8 +13,6 @@ from .audio.audio_transcription_engine import AudioTranscriptionEngine __all__ = [ - "BaseQueryEngine", - "VectorQueryEngine", "BaseSummaryEngine", "PromptSummaryEngine", "BaseExtractionEngine", diff --git a/griptape/engines/query/base_query_engine.py b/griptape/engines/query/base_query_engine.py deleted file mode 100644 index 61a488547..000000000 --- a/griptape/engines/query/base_query_engine.py +++ /dev/null @@ -1,29 +0,0 @@ -from __future__ import annotations -from abc import ABC, abstractmethod -from attrs import define -from typing import Optional -from griptape.artifacts import TextArtifact, ListArtifact -from griptape.rules import Ruleset - - -@define -class BaseQueryEngine(ABC): - @abstractmethod - def query( - self, - query: str, - namespace: Optional[str] = None, - *, - rulesets: Optional[list[Ruleset]] = None, - top_n: Optional[int] = None, - filter: Optional[dict] = None, - ) -> TextArtifact: ... - - @abstractmethod - def load_artifacts(self, namespace: str) -> ListArtifact: ... - - @abstractmethod - def upsert_text_artifact(self, artifact: TextArtifact, namespace: Optional[str] = None) -> str: ... - - @abstractmethod - def upsert_text_artifacts(self, artifacts: list[TextArtifact], namespace: str) -> None: ... diff --git a/griptape/engines/query/vector_query_engine.py b/griptape/engines/query/vector_query_engine.py deleted file mode 100644 index 24338b348..000000000 --- a/griptape/engines/query/vector_query_engine.py +++ /dev/null @@ -1,95 +0,0 @@ -from __future__ import annotations -from typing import TYPE_CHECKING, Optional -from attrs import define, field, Factory -from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact -from griptape.utils import PromptStack -from griptape.engines import BaseQueryEngine -from griptape.utils.j2 import J2 -from griptape.rules import Ruleset - -if TYPE_CHECKING: - from griptape.drivers import BaseVectorStoreDriver, BasePromptDriver - - -@define -class VectorQueryEngine(BaseQueryEngine): - answer_token_offset: int = field(default=400, kw_only=True) - vector_store_driver: BaseVectorStoreDriver = field(kw_only=True) - prompt_driver: BasePromptDriver = field(kw_only=True) - user_template_generator: J2 = field(default=Factory(lambda: J2("engines/query/user.j2")), kw_only=True) - system_template_generator: J2 = field(default=Factory(lambda: J2("engines/query/system.j2")), kw_only=True) - - def query( - self, - query: str, - namespace: Optional[str] = None, - *, - rulesets: Optional[list[Ruleset]] = None, - metadata: Optional[str] = None, - top_n: Optional[int] = None, - filter: Optional[dict] = None, - ) -> TextArtifact: - tokenizer = self.prompt_driver.tokenizer - result = self.vector_store_driver.query(query, top_n, namespace, filter=filter) - artifacts = [ - artifact - for artifact in [BaseArtifact.from_json(r.meta["artifact"]) for r in result if r.meta] - if isinstance(artifact, TextArtifact) - ] - text_segments = [] - user_message = "" - system_message = "" - - for artifact in artifacts: - text_segments.append(artifact.value) - system_message = self.system_template_generator.render( - rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets), - metadata=metadata, - text_segments=text_segments, - ) - user_message = self.user_template_generator.render(query=query) - - message_token_count = self.prompt_driver.tokenizer.count_input_tokens_left( - self.prompt_driver.prompt_stack_to_string( - PromptStack( - inputs=[ - PromptStack.Input(system_message, role=PromptStack.SYSTEM_ROLE), - PromptStack.Input(user_message, role=PromptStack.USER_ROLE), - ] - ) - ) - ) - - if message_token_count + self.answer_token_offset >= tokenizer.max_input_tokens: - text_segments.pop() - - system_message = self.system_template_generator.render( - rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets), - metadata=metadata, - text_segments=text_segments, - ) - - break - - return self.prompt_driver.run( - PromptStack( - inputs=[ - PromptStack.Input(system_message, role=PromptStack.SYSTEM_ROLE), - PromptStack.Input(user_message, role=PromptStack.USER_ROLE), - ] - ) - ) - - def upsert_text_artifact(self, artifact: TextArtifact, namespace: Optional[str] = None) -> str: - result = self.vector_store_driver.upsert_text_artifact(artifact, namespace=namespace) - - return result - - def upsert_text_artifacts(self, artifacts: list[TextArtifact], namespace: str) -> None: - self.vector_store_driver.upsert_text_artifacts({namespace: artifacts}) - - def load_artifacts(self, namespace: str) -> ListArtifact: - result = self.vector_store_driver.load_entries(namespace) - artifacts = [BaseArtifact.from_json(r.meta["artifact"]) for r in result if r.meta and r.meta.get("artifact")] - - return ListArtifact([a for a in artifacts if isinstance(a, TextArtifact)]) diff --git a/griptape/engines/rag/__init__.py b/griptape/engines/rag/__init__.py new file mode 100644 index 000000000..f009772fb --- /dev/null +++ b/griptape/engines/rag/__init__.py @@ -0,0 +1,4 @@ +from .rag_context import RagContext +from .rag_engine import RagEngine + +__all__ = ["RagContext", "RagEngine"] diff --git a/griptape/engines/rag/modules/__init__.py b/griptape/engines/rag/modules/__init__.py new file mode 100644 index 000000000..a9550d8bb --- /dev/null +++ b/griptape/engines/rag/modules/__init__.py @@ -0,0 +1,29 @@ +from .base_rag_module import BaseRagModule +from .query.base_query_rag_module import BaseQueryRagModule +from .query.related_query_generation_rag_module import RelatedQueryGenerationRagModule +from .retrieval.base_retrieval_rag_module import BaseRetrievalRagModule +from .retrieval.base_rerank_rag_module import BaseRerankRagModule +from .retrieval.text_rerank_rag_module import TextRerankRagModule +from .retrieval.text_retrieval_rag_module import TextRetrievalRagModule +from .generation.base_before_generation_rag_module import BaseBeforeGenerationRagModule +from .generation.base_after_generation_rag_module import BaseAfterGenerationRagModule +from .generation.base_generation_rag_module import BaseGenerationRagModule +from .generation.prompt_generation_rag_module import PromptGenerationRagModule +from .generation.rulesets_generation_rag_module import RulesetsGenerationRagModule +from .generation.metadata_generation_rag_module import MetadataGenerationRagModule + +__all__ = [ + "BaseRagModule", + "BaseQueryRagModule", + "RelatedQueryGenerationRagModule", + "BaseRetrievalRagModule", + "BaseRerankRagModule", + "TextRerankRagModule", + "TextRetrievalRagModule", + "BaseBeforeGenerationRagModule", + "BaseAfterGenerationRagModule", + "BaseGenerationRagModule", + "PromptGenerationRagModule", + "RulesetsGenerationRagModule", + "MetadataGenerationRagModule", +] diff --git a/griptape/engines/rag/modules/base_rag_module.py b/griptape/engines/rag/modules/base_rag_module.py new file mode 100644 index 000000000..958cbd46c --- /dev/null +++ b/griptape/engines/rag/modules/base_rag_module.py @@ -0,0 +1,18 @@ +from abc import ABC +from concurrent import futures +from attrs import define, field, Factory + +from griptape.utils import PromptStack + + +@define(kw_only=True) +class BaseRagModule(ABC): + futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor())) + + def generate_query_prompt_stack(self, system_prompt: str, query: str) -> PromptStack: + return PromptStack( + inputs=[ + PromptStack.Input(system_prompt, role=PromptStack.SYSTEM_ROLE), + PromptStack.Input(query, role=PromptStack.USER_ROLE), + ] + ) diff --git a/tests/unit/engines/query/__init__.py b/griptape/engines/rag/modules/generation/__init__.py similarity index 100% rename from tests/unit/engines/query/__init__.py rename to griptape/engines/rag/modules/generation/__init__.py diff --git a/griptape/engines/rag/modules/generation/base_after_generation_rag_module.py b/griptape/engines/rag/modules/generation/base_after_generation_rag_module.py new file mode 100644 index 000000000..f3a26e9db --- /dev/null +++ b/griptape/engines/rag/modules/generation/base_after_generation_rag_module.py @@ -0,0 +1,10 @@ +from abc import ABC, abstractmethod +from attrs import define +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRagModule + + +@define(kw_only=True) +class BaseAfterGenerationRagModule(BaseRagModule, ABC): + @abstractmethod + def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/modules/generation/base_before_generation_rag_module.py b/griptape/engines/rag/modules/generation/base_before_generation_rag_module.py new file mode 100644 index 000000000..6a57bd6af --- /dev/null +++ b/griptape/engines/rag/modules/generation/base_before_generation_rag_module.py @@ -0,0 +1,10 @@ +from abc import ABC, abstractmethod +from attrs import define +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRagModule + + +@define(kw_only=True) +class BaseBeforeGenerationRagModule(BaseRagModule, ABC): + @abstractmethod + def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/modules/generation/base_generation_rag_module.py b/griptape/engines/rag/modules/generation/base_generation_rag_module.py new file mode 100644 index 000000000..08f1b5323 --- /dev/null +++ b/griptape/engines/rag/modules/generation/base_generation_rag_module.py @@ -0,0 +1,10 @@ +from abc import ABC, abstractmethod +from attrs import define +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRagModule + + +@define(kw_only=True) +class BaseGenerationRagModule(BaseRagModule, ABC): + @abstractmethod + def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/modules/generation/metadata_generation_rag_module.py b/griptape/engines/rag/modules/generation/metadata_generation_rag_module.py new file mode 100644 index 000000000..1ce689960 --- /dev/null +++ b/griptape/engines/rag/modules/generation/metadata_generation_rag_module.py @@ -0,0 +1,20 @@ +from typing import Optional +from attrs import define, field +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseBeforeGenerationRagModule +from griptape.utils import J2 + + +@define(kw_only=True) +class MetadataGenerationRagModule(BaseBeforeGenerationRagModule): + metadata: Optional[str] = field(default=None) + + def run(self, context: RagContext) -> RagContext: + metadata = context.metadata if self.metadata is None else self.metadata + + if metadata is not None: + context.before_query.append( + J2("engines/rag/modules/metadata_generation/system.j2").render(metadata=metadata) + ) + + return context diff --git a/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py b/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py new file mode 100644 index 000000000..9e7c3b08f --- /dev/null +++ b/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py @@ -0,0 +1,54 @@ +from typing import Callable +from attrs import define, field, Factory +from griptape.drivers import BasePromptDriver +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseGenerationRagModule +from griptape.utils import J2 + + +@define(kw_only=True) +class PromptGenerationRagModule(BaseGenerationRagModule): + answer_token_offset: int = field(default=400) + prompt_driver: BasePromptDriver = field() + generate_system_template: Callable[[list[str], list[str], list[str]], str] = field( + default=Factory(lambda self: self.default_system_template_generator, takes_self=True) + ) + + def run(self, context: RagContext) -> RagContext: + query = context.initial_query + before_query = context.before_query + after_query = context.after_query + text_artifact_chunks = context.text_chunks + + if query: + tokenizer = self.prompt_driver.tokenizer + text_chunks = [] + system_prompt = "" + + for artifact in text_artifact_chunks: + text_chunks.append(artifact.value) + + system_prompt = self.generate_system_template(text_chunks, before_query, after_query) + message_token_count = self.prompt_driver.tokenizer.count_tokens( + self.prompt_driver.prompt_stack_to_string(self.generate_query_prompt_stack(system_prompt, query)) + ) + + if message_token_count + self.answer_token_offset >= tokenizer.max_input_tokens: + text_chunks.pop() + + system_prompt = self.generate_system_template(text_chunks, before_query, after_query) + + break + + context.output = self.prompt_driver.run(self.generate_query_prompt_stack(system_prompt, query)) + + return context + + def default_system_template_generator( + self, text_chunks: list[str], before_system_prompt: list, after_system_prompt: list + ) -> str: + return J2("engines/rag/modules/prompt_generation/system.j2").render( + text_chunks=text_chunks, + before_system_prompt="\n\n".join(before_system_prompt), + after_system_prompt="\n\n".join(after_system_prompt), + ) diff --git a/griptape/engines/rag/modules/generation/rulesets_generation_rag_module.py b/griptape/engines/rag/modules/generation/rulesets_generation_rag_module.py new file mode 100644 index 000000000..ff29c379a --- /dev/null +++ b/griptape/engines/rag/modules/generation/rulesets_generation_rag_module.py @@ -0,0 +1,15 @@ +from attrs import define, field +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseBeforeGenerationRagModule +from griptape.rules import Ruleset +from griptape.utils import J2 + + +@define +class RulesetsGenerationRagModule(BaseBeforeGenerationRagModule): + rulesets: list[Ruleset] = field(kw_only=True) + + def run(self, context: RagContext) -> RagContext: + context.before_query.append(J2("rulesets/rulesets.j2").render(rulesets=self.rulesets)) + + return context diff --git a/griptape/engines/rag/modules/query/__init__.py b/griptape/engines/rag/modules/query/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/engines/rag/modules/query/base_query_rag_module.py b/griptape/engines/rag/modules/query/base_query_rag_module.py new file mode 100644 index 000000000..c9eace864 --- /dev/null +++ b/griptape/engines/rag/modules/query/base_query_rag_module.py @@ -0,0 +1,10 @@ +from abc import ABC, abstractmethod +from attrs import define +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRagModule + + +@define(kw_only=True) +class BaseQueryRagModule(BaseRagModule, ABC): + @abstractmethod + def run(self, context: RagContext) -> list[str]: ... diff --git a/griptape/engines/rag/modules/query/related_query_generation_rag_module.py b/griptape/engines/rag/modules/query/related_query_generation_rag_module.py new file mode 100644 index 000000000..4661e24a2 --- /dev/null +++ b/griptape/engines/rag/modules/query/related_query_generation_rag_module.py @@ -0,0 +1,33 @@ +from typing import Callable +from attrs import define, field, Factory +from griptape import utils +from griptape.drivers import BasePromptDriver +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseQueryRagModule +from griptape.utils import J2 + + +@define(kw_only=True) +class RelatedQueryGenerationRagModule(BaseQueryRagModule): + query_count: int = field(default=5) + prompt_driver: BasePromptDriver = field() + generate_system_template: Callable[[str], str] = field( + default=Factory(lambda self: self.default_system_template_generator, takes_self=True), kw_only=True + ) + + def run(self, context: RagContext) -> list[str]: + system_prompt = self.generate_system_template(context.initial_query) + + results = utils.execute_futures_list( + [ + self.futures_executor.submit( + self.prompt_driver.run, self.generate_query_prompt_stack(system_prompt, "Alternative query: ") + ) + for _ in range(self.query_count) + ] + ) + + return [r.value for r in results] + + def default_system_template_generator(self, initial_query: str) -> str: + return J2("engines/rag/modules/query_generation/system.j2").render(initial_query=initial_query) diff --git a/griptape/engines/rag/modules/retrieval/__init__.py b/griptape/engines/rag/modules/retrieval/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/engines/rag/modules/retrieval/base_rerank_rag_module.py b/griptape/engines/rag/modules/retrieval/base_rerank_rag_module.py new file mode 100644 index 000000000..8ecf9f046 --- /dev/null +++ b/griptape/engines/rag/modules/retrieval/base_rerank_rag_module.py @@ -0,0 +1,16 @@ +from abc import ABC, abstractmethod +from typing import Sequence + +from attrs import define, field +from griptape.artifacts import BaseArtifact +from griptape.drivers import BaseRerankDriver +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRagModule + + +@define(kw_only=True) +class BaseRerankRagModule(BaseRagModule, ABC): + rerank_driver: BaseRerankDriver = field() + + @abstractmethod + def run(self, context: RagContext) -> Sequence[BaseArtifact]: ... diff --git a/griptape/engines/rag/modules/retrieval/base_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/base_retrieval_rag_module.py new file mode 100644 index 000000000..f11537d9f --- /dev/null +++ b/griptape/engines/rag/modules/retrieval/base_retrieval_rag_module.py @@ -0,0 +1,12 @@ +from abc import ABC, abstractmethod +from typing import Sequence +from attrs import define +from griptape.artifacts import BaseArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRagModule + + +@define(kw_only=True) +class BaseRetrievalRagModule(BaseRagModule, ABC): + @abstractmethod + def run(self, context: RagContext) -> Sequence[BaseArtifact]: ... diff --git a/griptape/engines/rag/modules/retrieval/text_rerank_rag_module.py b/griptape/engines/rag/modules/retrieval/text_rerank_rag_module.py new file mode 100644 index 000000000..a766d0cb6 --- /dev/null +++ b/griptape/engines/rag/modules/retrieval/text_rerank_rag_module.py @@ -0,0 +1,12 @@ +from typing import Sequence + +from attrs import define +from griptape.artifacts import BaseArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRerankRagModule + + +@define(kw_only=True) +class TextRerankRagModule(BaseRerankRagModule): + def run(self, context: RagContext) -> Sequence[BaseArtifact]: + return self.rerank_driver.run(context.initial_query, context.text_chunks) diff --git a/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py new file mode 100644 index 000000000..5c6bedac4 --- /dev/null +++ b/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py @@ -0,0 +1,35 @@ +from __future__ import annotations +import itertools +from typing import TYPE_CHECKING, Optional, Sequence +from attrs import define, field +from griptape import utils +from griptape.artifacts import TextArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRetrievalRagModule + +if TYPE_CHECKING: + from griptape.drivers import BaseVectorStoreDriver + + +@define(kw_only=True) +class TextRetrievalRagModule(BaseRetrievalRagModule): + vector_store_driver: BaseVectorStoreDriver = field() + namespace: Optional[str] = field(default=None) + top_n: Optional[int] = field(default=None) + + def run(self, context: RagContext) -> Sequence[TextArtifact]: + all_queries = [context.initial_query] + context.alternative_queries + namespace = self.namespace or context.namespace + + results = utils.execute_futures_list( + [ + self.futures_executor.submit(self.vector_store_driver.query, query, self.top_n, namespace, False) + for query in all_queries + ] + ) + + return [ + artifact + for artifact in [r.to_artifact() for r in list(itertools.chain.from_iterable(results))] + if isinstance(artifact, TextArtifact) + ] diff --git a/griptape/engines/rag/rag_context.py b/griptape/engines/rag/rag_context.py new file mode 100644 index 000000000..5f8ce9d6a --- /dev/null +++ b/griptape/engines/rag/rag_context.py @@ -0,0 +1,29 @@ +from typing import Optional +from attrs import define, field +from griptape.artifacts import TextArtifact + + +@define(kw_only=True) +class RagContext: + """Used by RagEngine stages and module to pass context that individual modules are expected to update in the `run` + method. + + Attributes: + initial_query: Query provided by the user. + namespace: Optional namespace override for modules with an explicit namespace parameter. + metadata: Optional metadata override for modules with an explicit metadata parameter. + alternative_queries: Optional queries to expand retrieval results. + before_query: An optional list of strings to add before the query in generation modules. + after_query: An optional list of strings to add after the query in generation modules. + text_chunks: A list of text chunks to pass around from the retrieval stage to the generation stage. + output: Final output from the generation stage. + """ + + initial_query: str = field() + namespace: Optional[str] = field(default=None) + metadata: Optional[str] = field(default=None) + alternative_queries: list[str] = field(factory=list) + before_query: list[str] = field(factory=list) + after_query: list[str] = field(factory=list) + text_chunks: list[TextArtifact] = field(factory=list) + output: Optional[TextArtifact] = field(default=None) diff --git a/griptape/engines/rag/rag_engine.py b/griptape/engines/rag/rag_engine.py new file mode 100644 index 000000000..1c2176128 --- /dev/null +++ b/griptape/engines/rag/rag_engine.py @@ -0,0 +1,26 @@ +from typing import Optional +from attrs import define, field +from griptape.engines.rag import RagContext +from griptape.engines.rag.stages import QueryRagStage, GenerationRagStage, RetrievalRagStage + + +@define(kw_only=True) +class RagEngine: + query_stage: Optional[QueryRagStage] = field(default=None) + retrieval_stage: Optional[RetrievalRagStage] = field(default=None) + generation_stage: Optional[GenerationRagStage] = field(default=None) + + def process_query(self, query: str) -> RagContext: + return self.process(RagContext(initial_query=query)) + + def process(self, context: RagContext) -> RagContext: + if self.query_stage: + context = self.query_stage.run(context) + + if self.retrieval_stage: + context = self.retrieval_stage.run(context) + + if self.generation_stage: + context = self.generation_stage.run(context) + + return context diff --git a/griptape/engines/rag/stages/__init__.py b/griptape/engines/rag/stages/__init__.py new file mode 100644 index 000000000..85a603d03 --- /dev/null +++ b/griptape/engines/rag/stages/__init__.py @@ -0,0 +1,6 @@ +from .base_rag_stage import BaseRagStage +from .retrieval_rag_stage import RetrievalRagStage +from .query_rag_stage import QueryRagStage +from .generation_rag_stage import GenerationRagStage + +__all__ = ["BaseRagStage", "RetrievalRagStage", "QueryRagStage", "GenerationRagStage"] diff --git a/griptape/engines/rag/stages/base_rag_stage.py b/griptape/engines/rag/stages/base_rag_stage.py new file mode 100644 index 000000000..786975b82 --- /dev/null +++ b/griptape/engines/rag/stages/base_rag_stage.py @@ -0,0 +1,12 @@ +from abc import ABC, abstractmethod +from concurrent import futures +from attrs import define, field, Factory +from griptape.engines.rag import RagContext + + +@define(kw_only=True) +class BaseRagStage(ABC): + futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor())) + + @abstractmethod + def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/stages/generation_rag_stage.py b/griptape/engines/rag/stages/generation_rag_stage.py new file mode 100644 index 000000000..60102889a --- /dev/null +++ b/griptape/engines/rag/stages/generation_rag_stage.py @@ -0,0 +1,33 @@ +import logging +from attrs import define, field +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import ( + BaseGenerationRagModule, + BaseBeforeGenerationRagModule, + BaseAfterGenerationRagModule, +) +from griptape.engines.rag.stages import BaseRagStage + + +@define(kw_only=True) +class GenerationRagStage(BaseRagStage): + before_generator_modules: list[BaseBeforeGenerationRagModule] = field(factory=list) + generation_module: BaseGenerationRagModule = field() + after_generator_modules: list[BaseAfterGenerationRagModule] = field(factory=list) + + def run(self, context: RagContext) -> RagContext: + logging.info(f"GenerationStage: running {len(self.before_generator_modules)} before modules sequentially") + + for generator in self.before_generator_modules: + context = generator.run(context) + + logging.info("GenerationStage: running generation module") + + context = self.generation_module.run(context) + + logging.info(f"GenerationStage: running {len(self.after_generator_modules)} after modules sequentially") + + for generator in self.after_generator_modules: + context = generator.run(context) + + return context diff --git a/griptape/engines/rag/stages/query_rag_stage.py b/griptape/engines/rag/stages/query_rag_stage.py new file mode 100644 index 000000000..b122fa7a6 --- /dev/null +++ b/griptape/engines/rag/stages/query_rag_stage.py @@ -0,0 +1,23 @@ +import itertools +import logging +from attrs import define, field +from griptape import utils +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseQueryRagModule +from griptape.engines.rag.stages import BaseRagStage + + +@define(kw_only=True) +class QueryRagStage(BaseRagStage): + query_generation_modules: list[BaseQueryRagModule] = field() + + def run(self, context: RagContext) -> RagContext: + logging.info(f"QueryStage: running {len(self.query_generation_modules)} query generation modules in parallel") + + results = utils.execute_futures_list( + [self.futures_executor.submit(r.run, context) for r in self.query_generation_modules] + ) + + context.alternative_queries = list(itertools.chain.from_iterable(results)) + + return context diff --git a/griptape/engines/rag/stages/retrieval_rag_stage.py b/griptape/engines/rag/stages/retrieval_rag_stage.py new file mode 100644 index 000000000..8a0ceca44 --- /dev/null +++ b/griptape/engines/rag/stages/retrieval_rag_stage.py @@ -0,0 +1,49 @@ +import itertools +import logging +from typing import Optional +from attrs import define, field +from griptape import utils +from griptape.artifacts import TextArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRerankRagModule +from griptape.engines.rag.modules import BaseRetrievalRagModule +from griptape.engines.rag.stages import BaseRagStage + + +@define(kw_only=True) +class RetrievalRagStage(BaseRagStage): + retrieval_modules: list[BaseRetrievalRagModule] = field() + rerank_module: Optional[BaseRerankRagModule] = field(default=None) + max_chunks: Optional[int] = field(default=None) + + def run(self, context: RagContext) -> RagContext: + logging.info(f"RetrievalStage: running {len(self.retrieval_modules)} retrieval modules in parallel") + + results = utils.execute_futures_list( + [self.futures_executor.submit(r.run, context) for r in self.retrieval_modules] + ) + + # flatten the list of lists + results = list(itertools.chain.from_iterable(results)) + + # deduplicate the list + chunks_before_dedup = len(results) + results = list({str(c.value): c for c in results}.values()) + chunks_after_dedup = len(results) + + logging.info( + f"RetrievalStage: deduplicated {chunks_before_dedup - chunks_after_dedup} " + f"chunks ({chunks_before_dedup} - {chunks_after_dedup})" + ) + + context.text_chunks = [a for a in results if isinstance(a, TextArtifact)] + + if self.rerank_module: + logging.info(f"RetrievalStage: running rerank module on {chunks_after_dedup} chunks") + + context.text_chunks = [a for a in self.rerank_module.run(context) if isinstance(a, TextArtifact)] + + if self.max_chunks: + context.text_chunks = context.text_chunks[: self.max_chunks] + + return context diff --git a/griptape/memory/task/storage/text_artifact_storage.py b/griptape/memory/task/storage/text_artifact_storage.py index 3b3162751..34d65a0c5 100644 --- a/griptape/memory/task/storage/text_artifact_storage.py +++ b/griptape/memory/task/storage/text_artifact_storage.py @@ -1,36 +1,50 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Optional from attrs import define, field -from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact +from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact, InfoArtifact +from griptape.drivers import BaseVectorStoreDriver +from griptape.engines.rag import RagEngine, RagContext from griptape.memory.task.storage import BaseArtifactStorage if TYPE_CHECKING: - from griptape.engines import BaseSummaryEngine, CsvExtractionEngine, JsonExtractionEngine, VectorQueryEngine + from griptape.engines import BaseSummaryEngine, CsvExtractionEngine, JsonExtractionEngine -@define +@define(kw_only=True) class TextArtifactStorage(BaseArtifactStorage): - query_engine: VectorQueryEngine = field(kw_only=True) - summary_engine: Optional[BaseSummaryEngine] = field(kw_only=True, default=None) - csv_extraction_engine: Optional[CsvExtractionEngine] = field(kw_only=True, default=None) - json_extraction_engine: Optional[JsonExtractionEngine] = field(kw_only=True, default=None) + vector_store_driver: BaseVectorStoreDriver = field() + rag_engine: Optional[RagEngine] = field(default=None) + summary_engine: Optional[BaseSummaryEngine] = field(default=None) + csv_extraction_engine: Optional[CsvExtractionEngine] = field(default=None) + json_extraction_engine: Optional[JsonExtractionEngine] = field(default=None) def can_store(self, artifact: BaseArtifact) -> bool: return isinstance(artifact, TextArtifact) def store_artifact(self, namespace: str, artifact: BaseArtifact) -> None: if isinstance(artifact, TextArtifact): - self.query_engine.upsert_text_artifact(artifact, namespace) + self.vector_store_driver.upsert_text_artifact(artifact, namespace) else: raise ValueError("Artifact must be of instance TextArtifact") def load_artifacts(self, namespace: str) -> ListArtifact: - return self.query_engine.load_artifacts(namespace) + return self.vector_store_driver.load_artifacts(namespace) def summarize(self, namespace: str) -> TextArtifact: if self.summary_engine is None: raise ValueError("Summary engine is not set.") + return self.summary_engine.summarize_artifacts(self.load_artifacts(namespace)) - def query(self, namespace: str, query: str, metadata: Any = None) -> TextArtifact: - return self.query_engine.query(namespace=namespace, query=query, metadata=str(metadata) if metadata else None) + def query(self, namespace: str, query: str, metadata: Any = None) -> TextArtifact | InfoArtifact: + if self.rag_engine is None: + raise ValueError("RAG engine is not set.") + + result = self.rag_engine.process( + RagContext(initial_query=query, namespace=namespace, metadata=None if metadata is None else str(metadata)) + ).output + + if result is None: + return InfoArtifact("Empty output") + else: + return result diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 78dd69633..036e47cc8 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -1,19 +1,24 @@ from __future__ import annotations - import logging import uuid from abc import ABC, abstractmethod from logging import Logger from typing import TYPE_CHECKING, Any, Optional - from attrs import Factory, define, field from rich.logging import RichHandler - from griptape.artifacts import BlobArtifact, TextArtifact, BaseArtifact from griptape.config import BaseStructureConfig, OpenAiStructureConfig, StructureConfig from griptape.drivers import BaseEmbeddingDriver, BasePromptDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.drivers.vector.local_vector_store_driver import LocalVectorStoreDriver -from griptape.engines import CsvExtractionEngine, JsonExtractionEngine, PromptSummaryEngine, VectorQueryEngine +from griptape.engines import CsvExtractionEngine, JsonExtractionEngine, PromptSummaryEngine +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import ( + TextRetrievalRagModule, + RulesetsGenerationRagModule, + PromptGenerationRagModule, + MetadataGenerationRagModule, +) +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage from griptape.events import BaseEvent, EventListener from griptape.events.finish_structure_run_event import FinishStructureRunEvent from griptape.events.start_structure_run_event import StartStructureRunEvent @@ -52,7 +57,8 @@ class Structure(ABC): ), kw_only=True, ) - task_memory: Optional[TaskMemory] = field( + rag_engine: RagEngine = field(default=Factory(lambda self: self.default_rag_engine, takes_self=True), kw_only=True) + task_memory: TaskMemory = field( default=Factory(lambda self: self.default_task_memory, takes_self=True), kw_only=True ) meta_memory: MetaMemory = field(default=Factory(lambda: MetaMemory()), kw_only=True) @@ -163,14 +169,28 @@ def default_config(self) -> BaseStructureConfig: return config + @property + def default_rag_engine(self) -> RagEngine: + return RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[TextRetrievalRagModule(vector_store_driver=self.config.vector_store_driver)] + ), + generation_stage=GenerationRagStage( + before_generator_modules=[ + RulesetsGenerationRagModule(rulesets=self.rulesets), + MetadataGenerationRagModule(), + ], + generation_module=PromptGenerationRagModule(prompt_driver=self.config.prompt_driver), + ), + ) + @property def default_task_memory(self) -> TaskMemory: return TaskMemory( artifact_storages={ TextArtifact: TextArtifactStorage( - query_engine=VectorQueryEngine( - prompt_driver=self.config.prompt_driver, vector_store_driver=self.config.vector_store_driver - ), + rag_engine=self.rag_engine, + vector_store_driver=self.config.vector_store_driver, summary_engine=PromptSummaryEngine(prompt_driver=self.config.prompt_driver), csv_extraction_engine=CsvExtractionEngine(prompt_driver=self.config.prompt_driver), json_extraction_engine=JsonExtractionEngine(prompt_driver=self.config.prompt_driver), diff --git a/griptape/tasks/__init__.py b/griptape/tasks/__init__.py index 2c282adff..764d1669a 100644 --- a/griptape/tasks/__init__.py +++ b/griptape/tasks/__init__.py @@ -6,7 +6,7 @@ from .toolkit_task import ToolkitTask from .text_summary_task import TextSummaryTask from .tool_task import ToolTask -from .text_query_task import TextQueryTask +from .rag_task import RagTask from .extraction_task import ExtractionTask from .csv_extraction_task import CsvExtractionTask from .json_extraction_task import JsonExtractionTask @@ -31,7 +31,7 @@ "ToolkitTask", "TextSummaryTask", "ToolTask", - "TextQueryTask", + "RagTask", "ExtractionTask", "CsvExtractionTask", "JsonExtractionTask", diff --git a/griptape/tasks/rag_task.py b/griptape/tasks/rag_task.py new file mode 100644 index 000000000..d50e881c1 --- /dev/null +++ b/griptape/tasks/rag_task.py @@ -0,0 +1,31 @@ +from __future__ import annotations +from attrs import define, field +from griptape.artifacts import TextArtifact, ErrorArtifact +from griptape.engines.rag import RagEngine +from griptape.tasks import BaseTextInputTask + + +@define +class RagTask(BaseTextInputTask): + _rag_engine: RagEngine = field(kw_only=True, default=None, alias="rag_engine") + + @property + def rag_engine(self) -> RagEngine: + if self._rag_engine is None: + if self.structure is not None: + self._rag_engine = self.structure.rag_engine + else: + raise ValueError("rag_engine is not set.") + return self._rag_engine + + @rag_engine.setter + def rag_engine(self, value: RagEngine) -> None: + self._rag_engine = value + + def run(self) -> TextArtifact | ErrorArtifact: + result = self.rag_engine.process_query(self.input.to_text()).output + + if result is None: + return ErrorArtifact("empty output") + else: + return result diff --git a/griptape/tasks/text_query_task.py b/griptape/tasks/text_query_task.py deleted file mode 100644 index f35161c17..000000000 --- a/griptape/tasks/text_query_task.py +++ /dev/null @@ -1,35 +0,0 @@ -from attrs import define, field, Factory -from typing import Optional -from griptape.artifacts import TextArtifact -from griptape.engines import BaseQueryEngine, VectorQueryEngine -from griptape.loaders import TextLoader -from griptape.tasks import BaseTextInputTask - - -@define -class TextQueryTask(BaseTextInputTask): - _query_engine: BaseQueryEngine = field(kw_only=True, default=None, alias="query_engine") - loader: TextLoader = field(default=Factory(lambda: TextLoader()), kw_only=True) - namespace: Optional[str] = field(default=None, kw_only=True) - top_n: Optional[int] = field(default=None, kw_only=True) - - @property - def query_engine(self) -> BaseQueryEngine: - if self._query_engine is None: - if self.structure is not None: - self._query_engine = VectorQueryEngine( - prompt_driver=self.structure.config.prompt_driver, - vector_store_driver=self.structure.config.vector_store_driver, - ) - else: - raise ValueError("Query Engine is not set.") - return self._query_engine - - @query_engine.setter - def query_engine(self, value: BaseQueryEngine) -> None: - self._query_engine = value - - def run(self) -> TextArtifact: - return self.query_engine.query( - self.input.to_text(), namespace=self.namespace, rulesets=self.all_rulesets, top_n=self.top_n - ) diff --git a/griptape/templates/engines/rag/modules/metadata_generation/system.j2 b/griptape/templates/engines/rag/modules/metadata_generation/system.j2 new file mode 100644 index 000000000..601fc7a13 --- /dev/null +++ b/griptape/templates/engines/rag/modules/metadata_generation/system.j2 @@ -0,0 +1,5 @@ +{% if metadata %} +Metadata: """ +{{ metadata }} +""" +{% endif %} \ No newline at end of file diff --git a/griptape/templates/engines/rag/modules/prompt_generation/system.j2 b/griptape/templates/engines/rag/modules/prompt_generation/system.j2 new file mode 100644 index 000000000..85c1b9fa8 --- /dev/null +++ b/griptape/templates/engines/rag/modules/prompt_generation/system.j2 @@ -0,0 +1,15 @@ +{% if before_system_prompt %} +{{ before_system_prompt }} + +{% endif %} +You can answer questions by searching through text chunks. Always be truthful. Don't make up facts. Use the below list of text chunks to respond. If the answer cannot be found in the chunks, say "I could not find an answer." + +{% for chunk in text_chunks %} +Text chunk: """ +{{ chunk }} +""" +{% endfor %} +{% if after_system_prompt %} + +{{ after_system_prompt }} +{% endif %} \ No newline at end of file diff --git a/griptape/templates/engines/rag/modules/query_generation/system.j2 b/griptape/templates/engines/rag/modules/query_generation/system.j2 new file mode 100644 index 000000000..dd2a8e4bd --- /dev/null +++ b/griptape/templates/engines/rag/modules/query_generation/system.j2 @@ -0,0 +1,3 @@ +Given the following query, generate an alternative query that has the same meaning but uses different words and introduces other related terms. Don't say anything else. Only output an alternative query and nothing else. + +Query: {{ initial_query }} \ No newline at end of file diff --git a/griptape/tools/__init__.py b/griptape/tools/__init__.py index 1c152c95a..0bacdb303 100644 --- a/griptape/tools/__init__.py +++ b/griptape/tools/__init__.py @@ -26,6 +26,7 @@ from .griptape_cloud_knowledge_base_client.tool import GriptapeCloudKnowledgeBaseClient from .structure_run_client.tool import StructureRunClient from .image_query_client.tool import ImageQueryClient +from .rag_client.tool import RagClient from .text_to_speech_client.tool import TextToSpeechClient from .audio_transcription_client.tool import AudioTranscriptionClient @@ -58,6 +59,7 @@ "GriptapeCloudKnowledgeBaseClient", "StructureRunClient", "ImageQueryClient", + "RagClient", "TextToSpeechClient", "AudioTranscriptionClient", ] diff --git a/griptape/tools/rag_client/__init__.py b/griptape/tools/rag_client/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/tools/rag_client/manifest.yml b/griptape/tools/rag_client/manifest.yml new file mode 100644 index 000000000..86998feb4 --- /dev/null +++ b/griptape/tools/rag_client/manifest.yml @@ -0,0 +1,5 @@ +version: "v1" +name: RAG Client +description: Tool for querying RAG engines +contact_email: hello@griptape.ai +legal_info_url: https://www.griptape.ai/legal \ No newline at end of file diff --git a/griptape/tools/rag_client/requirements.txt b/griptape/tools/rag_client/requirements.txt new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/tools/rag_client/tool.py b/griptape/tools/rag_client/tool.py new file mode 100644 index 000000000..78d716008 --- /dev/null +++ b/griptape/tools/rag_client/tool.py @@ -0,0 +1,38 @@ +from __future__ import annotations +from attrs import define, field +from schema import Schema, Literal +from griptape.artifacts import ErrorArtifact, TextArtifact +from griptape.engines.rag import RagEngine +from griptape.tools import BaseTool +from griptape.utils.decorators import activity + + +@define(kw_only=True) +class RagClient(BaseTool): + """ + Attributes: + description: LLM-friendly RAG engine description. + rag_engine: `RagEngine`. + """ + + description: str = field() + rag_engine: RagEngine = field() + + @activity( + config={ + "description": "{{ _self.description }}", + "schema": Schema({Literal("query", description="A natural language search query"): str}), + } + ) + def search(self, params: dict) -> TextArtifact | ErrorArtifact: + query = params["values"]["query"] + + try: + result = self.rag_engine.process_query(query) + + if result.output is None: + return ErrorArtifact("query output is empty") + else: + return result.output + except Exception as e: + return ErrorArtifact(f"error querying: {e}") diff --git a/griptape/tools/vector_store_client/tool.py b/griptape/tools/vector_store_client/tool.py index f2dc785b0..38d7784c2 100644 --- a/griptape/tools/vector_store_client/tool.py +++ b/griptape/tools/vector_store_client/tool.py @@ -1,8 +1,10 @@ +from __future__ import annotations from typing import Optional -from griptape.engines import VectorQueryEngine -from schema import Schema, Literal from attrs import define, field -from griptape.artifacts import BaseArtifact, ErrorArtifact +from schema import Schema, Literal +from griptape.artifacts import ErrorArtifact +from griptape.artifacts import ListArtifact +from griptape.drivers import BaseVectorStoreDriver from griptape.tools import BaseTool from griptape.utils.decorators import activity @@ -13,14 +15,14 @@ class VectorStoreClient(BaseTool): Attributes: description: LLM-friendly vector DB description. namespace: Vector storage namespace. - query_engine: `BaseQueryEngine`. + vector_store_driver: `BaseVectorStoreDriver`. top_n: Max number of results returned for the query engine query. """ DEFAULT_TOP_N = 5 description: str = field(kw_only=True) - query_engine: VectorQueryEngine = field(kw_only=True) + vector_store_driver: BaseVectorStoreDriver = field(kw_only=True) top_n: int = field(default=DEFAULT_TOP_N, kw_only=True) namespace: Optional[str] = field(default=None, kw_only=True) @@ -36,10 +38,12 @@ class VectorStoreClient(BaseTool): ), } ) - def search(self, params: dict) -> BaseArtifact: + def search(self, params: dict) -> ListArtifact | ErrorArtifact: query = params["values"]["query"] try: - return self.query_engine.query(query, top_n=self.top_n, namespace=self.namespace) + entries = self.vector_store_driver.query(query, namespace=self.namespace, count=self.top_n) + + return ListArtifact([e.to_artifact() for e in entries]) except Exception as e: return ErrorArtifact(f"error querying vector store: {e}") diff --git a/griptape/utils/__init__.py b/griptape/utils/__init__.py index daac63f4e..5ca129993 100644 --- a/griptape/utils/__init__.py +++ b/griptape/utils/__init__.py @@ -6,6 +6,7 @@ from .command_runner import CommandRunner from .chat import Chat from .futures import execute_futures_dict +from .futures import execute_futures_list from .token_counter import TokenCounter from .prompt_stack import PromptStack from .dict_utils import remove_null_values_in_dict_recursively, dict_merge @@ -35,6 +36,7 @@ def minify_json(value: str) -> str: "import_optional_dependency", "is_dependency_installed", "execute_futures_dict", + "execute_futures_list", "TokenCounter", "PromptStack", "remove_null_values_in_dict_recursively", diff --git a/griptape/utils/futures.py b/griptape/utils/futures.py index 55a4e5d55..d69f4ea48 100644 --- a/griptape/utils/futures.py +++ b/griptape/utils/futures.py @@ -8,3 +8,9 @@ def execute_futures_dict(fs_dict: dict[str, futures.Future[T]]) -> dict[str, T]: futures.wait(fs_dict.values(), timeout=None, return_when=futures.ALL_COMPLETED) return {key: future.result() for key, future in fs_dict.items()} + + +def execute_futures_list(fs_list: list[futures.Future[T]]) -> list[T]: + futures.wait(fs_list, timeout=None, return_when=futures.ALL_COMPLETED) + + return [future.result() for future in fs_list] diff --git a/mkdocs.yml b/mkdocs.yml index 317409c55..337b75f31 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -93,7 +93,8 @@ nav: - Overview: "griptape-framework/tools/index.md" - Building Custom Tools: "griptape-tools/custom-tools/index.md" - Engines: - - Query Engines: "griptape-framework/engines/query-engines.md" + - RAG Engines: "griptape-framework/engines/rag-engines.md" + - Image Query Engines: "griptape-framework/engines/image-query-engines.md" - Extraction Engines: "griptape-framework/engines/extraction-engines.md" - Summary Engines: "griptape-framework/engines/summary-engines.md" - Image Generation Engines: "griptape-framework/engines/image-generation-engines.md" @@ -111,6 +112,7 @@ nav: - Structure Run Drivers: "griptape-framework/drivers/structure-run-drivers.md" - Text to Speech Drivers: "griptape-framework/drivers/text-to-speech-drivers.md" - Audio Transcription Drivers: "griptape-framework/drivers/audio-transcription-drivers.md" + - Web Search Drivers: "griptape-framework/drivers/web-search-drivers.md" - Data: - Overview: "griptape-framework/data/index.md" - Artifacts: "griptape-framework/data/artifacts.md" @@ -149,6 +151,7 @@ nav: - TextToSpeechClient: "griptape-tools/official-tools/text-to-speech-client.md" - AudioTranscriptionClient: "griptape-tools/official-tools/audio-transcription-client.md" - GriptapeCloudKnowledgeBaseClient: "griptape-tools/official-tools/griptape-cloud-knowledge-base-client.md" + - RagClient: "griptape-tools/official-tools/rag-client.md" - Custom Tools: - Building Custom Tools: "griptape-tools/custom-tools/index.md" - Recipes: diff --git a/poetry.lock b/poetry.lock index b71ad227b..1b70d0c93 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3311,6 +3311,7 @@ description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ + {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83"}, {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, ] @@ -4534,6 +4535,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -6296,6 +6298,7 @@ drivers-prompt-google = ["google-generativeai"] drivers-prompt-huggingface = ["huggingface-hub", "transformers"] drivers-prompt-huggingface-pipeline = ["huggingface-hub", "torch", "transformers"] drivers-prompt-ollama = ["ollama"] +drivers-rerank-cohere = ["cohere"] drivers-sql-postgres = ["pgvector", "psycopg2-binary"] drivers-sql-redshift = ["boto3", "sqlalchemy-redshift"] drivers-sql-snowflake = ["snowflake-sqlalchemy"] @@ -6318,4 +6321,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "ea8512a93be36ad1076915c5751167e3088b035deab1650182f72b842c5f8372" +content-hash = "a5e1a9aaf0fa253d904eee8803dab5f943be59c872c2449b73aea917ecb1c543" diff --git a/pyproject.toml b/pyproject.toml index 377ba46f9..972f0fe81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,6 +104,8 @@ drivers-event-listener-amazon-sqs = ["boto3"] drivers-event-listener-amazon-iot = ["boto3"] drivers-event-listener-pusher = ["pusher"] +drivers-rerank-cohere = ["cohere"] + loaders-dataframe = ["pandas"] loaders-pdf = ["pypdf"] loaders-image = ["pillow"] diff --git a/tests/integration/tasks/test_text_query_task.py b/tests/integration/tasks/test_rag_task.py similarity index 65% rename from tests/integration/tasks/test_text_query_task.py rename to tests/integration/tasks/test_rag_task.py index beb478b33..c0383002c 100644 --- a/tests/integration/tasks/test_text_query_task.py +++ b/tests/integration/tasks/test_rag_task.py @@ -1,8 +1,10 @@ +from tests.mocks.mock_prompt_driver import MockPromptDriver +from tests.utils.defaults import rag_engine from tests.utils.structure_tester import StructureTester import pytest -class TestTextQueryTask: +class TestRagTask: @pytest.fixture( autouse=True, params=StructureTester.TEXT_SUMMARY_TASK_CAPABLE_PROMPT_DRIVERS, @@ -10,22 +12,18 @@ class TestTextQueryTask: ) def structure_tester(self, request): from griptape.structures import Agent - from griptape.tasks import TextQueryTask + from griptape.tasks import RagTask from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver - from griptape.engines import VectorQueryEngine from griptape.artifacts import TextArtifact vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) - artifact = TextArtifact("John Doe works as as software engineer at Griptape.") + rag_engine_instance = rag_engine(MockPromptDriver(), vector_store_driver) - vector_query_engine = VectorQueryEngine(prompt_driver=request.param, vector_store_driver=vector_store_driver) - vector_query_engine.upsert_text_artifact(artifact=artifact) + vector_store_driver.upsert_text_artifact(artifact=artifact) agent = Agent(prompt_driver=request.param) - agent.add_task( - TextQueryTask("Respond to the users following query: {{ args[0] }}", query_engine=vector_query_engine) - ) + agent.add_task(RagTask("Respond to the users following query: {{ args[0] }}", rag_engine=rag_engine_instance)) return StructureTester(agent) diff --git a/tests/unit/config/test_amazon_bedrock_structure_config.py b/tests/unit/config/test_amazon_bedrock_structure_config.py index d13f103cb..d75684829 100644 --- a/tests/unit/config/test_amazon_bedrock_structure_config.py +++ b/tests/unit/config/test_amazon_bedrock_structure_config.py @@ -92,13 +92,13 @@ def test_to_dict_with_values(self, config_with_values): }, "image_query_driver": { "type": "AmazonBedrockImageQueryDriver", - "model": "anthropic.claude-3-sonnet-20240229-v1:0", + "model": "anthropic.claude-3-5-sonnet-20240620-v1:0", "max_tokens": 256, "image_query_model_driver": {"type": "BedrockClaudeImageQueryModelDriver"}, }, "prompt_driver": { "max_tokens": None, - "model": "anthropic.claude-3-sonnet-20240229-v1:0", + "model": "anthropic.claude-3-5-sonnet-20240620-v1:0", "stream": False, "temperature": 0.1, "type": "AmazonBedrockPromptDriver", diff --git a/tests/unit/drivers/rerank/__init__.py b/tests/unit/drivers/rerank/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/drivers/rerank/test_cohere_rerank_driver.py b/tests/unit/drivers/rerank/test_cohere_rerank_driver.py new file mode 100644 index 000000000..f7b050551 --- /dev/null +++ b/tests/unit/drivers/rerank/test_cohere_rerank_driver.py @@ -0,0 +1,19 @@ +from unittest.mock import Mock +import pytest +from griptape.artifacts import TextArtifact +from griptape.drivers import CohereRerankDriver + + +class TestCohereRerankDriver: + @pytest.fixture + def mock_client(self, mocker): + mock_client = mocker.patch("cohere.Client").return_value + mock_client.rerank.return_value.results = [Mock(), Mock()] + + return mock_client + + def test_run(self, mock_client): + driver = CohereRerankDriver(api_key="api-key") + result = driver.run("hello", artifacts=[TextArtifact("foo"), TextArtifact("bar")]) + + assert len(result) == 2 diff --git a/tests/unit/drivers/vector/test_local_vector_store_driver.py b/tests/unit/drivers/vector/base_local_vector_store_driver.py similarity index 62% rename from tests/unit/drivers/vector/test_local_vector_store_driver.py rename to tests/unit/drivers/vector/base_local_vector_store_driver.py index 8def2c94f..07cf284f8 100644 --- a/tests/unit/drivers/vector/test_local_vector_store_driver.py +++ b/tests/unit/drivers/vector/base_local_vector_store_driver.py @@ -1,21 +1,24 @@ +from abc import ABC, abstractmethod import pytest from griptape.artifacts import TextArtifact, BaseArtifact -from griptape.drivers import LocalVectorStoreDriver -from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -class TestLocalVectorStoreDriver: +class BaseLocalVectorStoreDriver(ABC): @pytest.fixture - def driver(self): - return LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + @abstractmethod + def driver(self): ... def test_upsert(self, driver): - namespace = driver.upsert_text_artifact(TextArtifact("foobar")) + namespace = driver.upsert_text_artifact(TextArtifact(id="foo1", value="foobar")) assert len(driver.entries) == 1 assert list(driver.entries.keys())[0] == namespace - driver.upsert_text_artifact(TextArtifact("foobar")) + driver.upsert_text_artifact(TextArtifact(id="foo1", value="foobar")) + + assert len(driver.entries) == 1 + + driver.upsert_text_artifact(TextArtifact(id="foo2", value="foobar2")) assert len(driver.entries) == 2 @@ -26,8 +29,8 @@ def test_upsert_multiple(self, driver): bar_entries = driver.load_entries("bar") assert len(driver.entries) == 2 - assert BaseArtifact.from_json(foo_entries[0].meta["artifact"]).value == "foo" - assert BaseArtifact.from_json(bar_entries[0].meta["artifact"]).value == "bar" + assert foo_entries[0].to_artifact().value == "foo" + assert bar_entries[0].to_artifact().value == "bar" def test_query(self, driver): vector_id = driver.upsert_text_artifact(TextArtifact("foobar"), namespace="test-namespace") @@ -37,7 +40,7 @@ def test_query(self, driver): assert len(driver.query("foobar", namespace="test-namespace")) == 1 assert driver.query("foobar")[0].vector == [] assert driver.query("foobar", include_vectors=True)[0].vector == [0, 1] - assert BaseArtifact.from_json(driver.query("foobar")[0].meta["artifact"]).value == "foobar" + assert driver.query("foobar")[0].to_artifact().value == "foobar" assert driver.query("foobar")[0].id == vector_id def test_load_entry(self, driver): @@ -53,3 +56,12 @@ def test_load_entries(self, driver): assert len(driver.load_entries()) == 3 assert len(driver.load_entries("test-namespace-1")) == 2 assert len(driver.load_entries("test-namespace-2")) == 1 + + def test_load_artifacts(self, driver): + driver.upsert_text_artifact(TextArtifact("foobar 1"), namespace="test-namespace-1") + driver.upsert_text_artifact(TextArtifact("foobar 2"), namespace="test-namespace-1") + driver.upsert_text_artifact(TextArtifact("foobar 3"), namespace="test-namespace-2") + + assert len(driver.load_artifacts()) == 3 + assert len(driver.load_artifacts("test-namespace-1")) == 2 + assert len(driver.load_artifacts("test-namespace-2")) == 1 diff --git a/tests/unit/drivers/vector/test_azure_mongodb_vector_store_driver.py b/tests/unit/drivers/vector/test_azure_mongodb_vector_store_driver.py index 53fce635e..b68486914 100644 --- a/tests/unit/drivers/vector/test_azure_mongodb_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_azure_mongodb_vector_store_driver.py @@ -40,8 +40,8 @@ def test_upsert_text(self, driver): def test_query(self, driver, monkeypatch): mock_query_result = [ - BaseVectorStoreDriver.QueryResult("foo", [0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), - BaseVectorStoreDriver.QueryResult("foo", vector=[0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), + BaseVectorStoreDriver.Entry("foo", [0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), + BaseVectorStoreDriver.Entry("foo", vector=[0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), ] monkeypatch.setattr(AzureMongoDbVectorStoreDriver, "query", lambda *args, **kwargs: mock_query_result) @@ -52,7 +52,7 @@ def test_query(self, driver, monkeypatch): for result, expected in zip(results, mock_query_result): assert result.id == expected.id assert result.vector == expected.vector - assert isinstance(result, BaseVectorStoreDriver.QueryResult) + assert isinstance(result, BaseVectorStoreDriver.Entry) def test_load_entry(self, driver): vector_id_str = "123" diff --git a/tests/unit/drivers/vector/test_entry.py b/tests/unit/drivers/vector/test_entry.py new file mode 100644 index 000000000..56ee468e1 --- /dev/null +++ b/tests/unit/drivers/vector/test_entry.py @@ -0,0 +1,12 @@ +from griptape.artifacts import TextArtifact +from griptape.drivers import BaseVectorStoreDriver + + +class TestEntry: + def test_from_dict(self): + entry_dict = {"id": "test", "vector": [], "meta": {"artifact": TextArtifact("foo").to_json()}} + assert BaseVectorStoreDriver.Entry.from_dict(entry_dict).id == "test" + + def test_to_artifact(self): + entry = BaseVectorStoreDriver.Entry(id="test", vector=[], meta={"artifact": TextArtifact("foo").to_json()}) + assert entry.to_artifact().value == "foo" diff --git a/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py b/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py new file mode 100644 index 000000000..c426ea5b4 --- /dev/null +++ b/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py @@ -0,0 +1,10 @@ +import pytest +from griptape.drivers import LocalVectorStoreDriver +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver +from tests.unit.drivers.vector.base_local_vector_store_driver import BaseLocalVectorStoreDriver + + +class TestInMemoryLocalVectorStoreDriver(BaseLocalVectorStoreDriver): + @pytest.fixture + def driver(self): + return LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) diff --git a/tests/unit/drivers/vector/test_mongodb_atlas_vector_store_driver.py b/tests/unit/drivers/vector/test_mongodb_atlas_vector_store_driver.py index 28cddcfbc..5b9aeed06 100644 --- a/tests/unit/drivers/vector/test_mongodb_atlas_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_mongodb_atlas_vector_store_driver.py @@ -40,8 +40,8 @@ def test_upsert_text(self, driver): def test_query(self, driver, monkeypatch): mock_query_result = [ - BaseVectorStoreDriver.QueryResult("foo", [0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), - BaseVectorStoreDriver.QueryResult("foo", vector=[0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), + BaseVectorStoreDriver.Entry("foo", [0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), + BaseVectorStoreDriver.Entry("foo", vector=[0.5, 0.5, 0.5], score=0.0, meta={}, namespace=None), ] monkeypatch.setattr(MongoDbAtlasVectorStoreDriver, "query", lambda *args, **kwargs: mock_query_result) @@ -52,7 +52,7 @@ def test_query(self, driver, monkeypatch): for result, expected in zip(results, mock_query_result): assert result.id == expected.id assert result.vector == expected.vector - assert isinstance(result, BaseVectorStoreDriver.QueryResult) + assert isinstance(result, BaseVectorStoreDriver.Entry) def test_load_entry(self, driver): vector_id_str = "123" diff --git a/tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py b/tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py new file mode 100644 index 000000000..1f800967a --- /dev/null +++ b/tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py @@ -0,0 +1,29 @@ +import os +import tempfile +import pytest +from griptape.artifacts import TextArtifact, BaseArtifact +from griptape.drivers import LocalVectorStoreDriver +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver +from tests.unit.drivers.vector.base_local_vector_store_driver import BaseLocalVectorStoreDriver + + +class TestPersistentLocalVectorStoreDriver(BaseLocalVectorStoreDriver): + @pytest.fixture + def temp_dir(self): + with tempfile.TemporaryDirectory() as temp_dir: + yield temp_dir + + @pytest.fixture + def driver(self, temp_dir): + persist_file = os.path.join(temp_dir, "store.json") + + return LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver(), persist_file=persist_file) + + def test_persistence(self, driver, temp_dir): + persist_file = os.path.join(temp_dir, "store.json") + + driver.upsert_text_artifact(TextArtifact("persistent foobar")) + + new_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver(), persist_file=persist_file) + + assert new_driver.query("persistent foobar")[0].to_artifact().value == "persistent foobar" diff --git a/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py b/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py index defbe8e3b..c0477fe97 100644 --- a/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py +++ b/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py @@ -1,4 +1,6 @@ import pytest + +from griptape import utils from griptape.artifacts import TextArtifact from griptape.drivers import PineconeVectorStoreDriver from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -32,7 +34,7 @@ def driver(self): def test_upsert_text_artifact(self, driver): artifact = TextArtifact("foo") - assert driver.upsert_text_artifact(artifact) == artifact.id + assert driver.upsert_text_artifact(artifact) == utils.str_to_hash(artifact.value) def test_upsert_vector(self, driver): assert driver.upsert_vector([0, 1, 2], vector_id="foo") == "foo" diff --git a/tests/unit/engines/query/test_vector_query_engine.py b/tests/unit/engines/query/test_vector_query_engine.py deleted file mode 100644 index 17bde6888..000000000 --- a/tests/unit/engines/query/test_vector_query_engine.py +++ /dev/null @@ -1,58 +0,0 @@ -import pytest -from griptape.artifacts import TextArtifact, BaseArtifact -from griptape.drivers import LocalVectorStoreDriver -from griptape.engines import VectorQueryEngine -from griptape.loaders import TextLoader -from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.mocks.mock_prompt_driver import MockPromptDriver -from tests.unit.chunkers.utils import gen_paragraph - -MAX_TOKENS = 50 - - -class TestVectorQueryEngine: - @pytest.fixture - def engine(self): - return VectorQueryEngine( - vector_store_driver=LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()), - prompt_driver=MockPromptDriver(), - ) - - def test_query(self, engine): - artifacts = TextLoader(max_tokens=MAX_TOKENS).load( - gen_paragraph(MAX_TOKENS, engine.prompt_driver.tokenizer, ". ") - ) - - [engine.upsert_text_artifact(a) for a in artifacts] - - assert engine.query("foo").value.startswith("mock output") - - def test_upsert_text_artifact(self, engine): - engine.upsert_text_artifact(TextArtifact("foobar"), namespace="test") - - assert BaseArtifact.from_json(engine.vector_store_driver.load_entries()[0].meta["artifact"]).value == "foobar" - - def test_prompt_creation(self, engine): - system_message = engine.system_template_generator.render( - rulesets=["*RULESET*"], metadata="*META*", text_segments=["*TEXT SEGMENT 1*", "*TEXT SEGMENT 2*"] - ) - user_message = engine.user_template_generator.render(query="*QUESTION*") - - assert "*RULESET*" in system_message - - assert "*META*" in system_message - assert "*QUESTION*" in user_message - assert "*TEXT SEGMENT 1*" in system_message - assert "*TEXT SEGMENT 2*" in system_message - - def test_upsert_text_artifacts(self, engine): - engine.upsert_text_artifacts(artifacts=[TextArtifact("foobar1"), TextArtifact("foobar2")], namespace="test") - - assert BaseArtifact.from_json(engine.vector_store_driver.load_entries()[0].meta["artifact"]).value == "foobar1" - assert BaseArtifact.from_json(engine.vector_store_driver.load_entries()[1].meta["artifact"]).value == "foobar2" - - def test_load_artifacts(self, engine): - engine.upsert_text_artifacts(artifacts=[TextArtifact("foobar1"), TextArtifact("foobar2")], namespace="test") - - assert len(engine.load_artifacts("doesntexist")) == 0 - assert len(engine.load_artifacts("test")) == 2 diff --git a/tests/unit/engines/rag/__init__.py b/tests/unit/engines/rag/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/engines/rag/modules/__init__.py b/tests/unit/engines/rag/modules/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/engines/rag/modules/generation/__init__.py b/tests/unit/engines/rag/modules/generation/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py b/tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py new file mode 100644 index 000000000..0bd9f1f85 --- /dev/null +++ b/tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py @@ -0,0 +1,14 @@ +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import MetadataGenerationRagModule + + +class TestMetadataGenerationModule: + def test_run(self): + module = MetadataGenerationRagModule() + + assert "foo" in module.run(RagContext(metadata="foo", initial_query="test")).before_query[0] + + def test_run_with_override(self): + module = MetadataGenerationRagModule(metadata="bar") + + assert "bar" in module.run(RagContext(metadata="foo", initial_query="test")).before_query[0] diff --git a/tests/unit/engines/rag/modules/generation/test_prompt_generation_rag_module.py b/tests/unit/engines/rag/modules/generation/test_prompt_generation_rag_module.py new file mode 100644 index 000000000..0227e2783 --- /dev/null +++ b/tests/unit/engines/rag/modules/generation/test_prompt_generation_rag_module.py @@ -0,0 +1,25 @@ +import pytest +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import PromptGenerationRagModule +from tests.mocks.mock_prompt_driver import MockPromptDriver + + +class TestPromptGenerationRagModule: + @pytest.fixture + def module(self): + return PromptGenerationRagModule(prompt_driver=MockPromptDriver()) + + def test_run(self, module): + assert module.run(RagContext(initial_query="test")).output.value == "mock output" + + def test_prompt(self, module): + system_message = module.default_system_template_generator( + text_chunks=["*TEXT SEGMENT 1*", "*TEXT SEGMENT 2*"], + before_system_prompt=["*RULESET*", "*META*"], + after_system_prompt=[], + ) + + assert "*RULESET*" in system_message + assert "*META*" in system_message + assert "*TEXT SEGMENT 1*" in system_message + assert "*TEXT SEGMENT 2*" in system_message diff --git a/tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py b/tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py new file mode 100644 index 000000000..6e0fe725a --- /dev/null +++ b/tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py @@ -0,0 +1,10 @@ +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import RulesetsGenerationRagModule +from griptape.rules import Ruleset, Rule + + +class TestRulesetsGenerationRagModule: + def test_run(self): + module = RulesetsGenerationRagModule(rulesets=[Ruleset(name="test ruleset", rules=[Rule("test rule")])]) + + assert "test rule" in module.run(RagContext(initial_query="test")).before_query[0] diff --git a/tests/unit/engines/rag/modules/query/__init__.py b/tests/unit/engines/rag/modules/query/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py b/tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py new file mode 100644 index 000000000..699d73de5 --- /dev/null +++ b/tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py @@ -0,0 +1,13 @@ +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import RelatedQueryGenerationRagModule +from tests.mocks.mock_prompt_driver import MockPromptDriver + + +class TestRelatedQueryGenerationRagModule: + def test_run(self): + result = RelatedQueryGenerationRagModule(prompt_driver=MockPromptDriver(), query_count=10).run( + RagContext(initial_query="test") + ) + + assert len(result) == 10 + assert all(r == "mock output" for r in result) diff --git a/tests/unit/engines/rag/modules/retrieval/__init__.py b/tests/unit/engines/rag/modules/retrieval/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/engines/rag/modules/retrieval/test_text_rerank_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_text_rerank_rag_module.py new file mode 100644 index 000000000..dc3e46a0a --- /dev/null +++ b/tests/unit/engines/rag/modules/retrieval/test_text_rerank_rag_module.py @@ -0,0 +1,20 @@ +from unittest.mock import Mock +import pytest +from griptape.drivers import CohereRerankDriver +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import TextRerankRagModule + + +class TestTextRerankRagModule: + @pytest.fixture + def mock_client(self, mocker): + mock_client = mocker.patch("cohere.Client").return_value + mock_client.rerank.return_value.results = [Mock(), Mock()] + + return mock_client + + def test_run(self, mock_client): + module = TextRerankRagModule(rerank_driver=CohereRerankDriver(api_key="api-key")) + result = module.run(RagContext(initial_query="test")) + + assert len(result) == 2 diff --git a/tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py new file mode 100644 index 000000000..5b69012d1 --- /dev/null +++ b/tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py @@ -0,0 +1,20 @@ +from griptape.artifacts import TextArtifact +from griptape.drivers import LocalVectorStoreDriver +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import TextRetrievalRagModule +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver + + +class TestTextRetrievalRagModule: + def test_run(self): + vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + module = TextRetrievalRagModule(vector_store_driver=vector_store_driver) + + vector_store_driver.upsert_text_artifact(TextArtifact("foobar1"), namespace="test") + vector_store_driver.upsert_text_artifact(TextArtifact("foobar2"), namespace="test") + + result = module.run(RagContext(initial_query="test")) + + assert len(result) == 2 + assert result[0].value == "foobar1" + assert result[1].value == "foobar2" diff --git a/tests/unit/engines/rag/test_rag_engine.py b/tests/unit/engines/rag/test_rag_engine.py new file mode 100644 index 000000000..b03ab9a1c --- /dev/null +++ b/tests/unit/engines/rag/test_rag_engine.py @@ -0,0 +1,30 @@ +import pytest +from griptape.drivers import LocalVectorStoreDriver +from griptape.engines.rag import RagEngine, RagContext +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver +from tests.mocks.mock_prompt_driver import MockPromptDriver + + +class TestRagEngine: + @pytest.fixture + def engine(self): + return RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + TextRetrievalRagModule( + vector_store_driver=LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + ) + ] + ), + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule(prompt_driver=MockPromptDriver()) + ), + ) + + def test_process_query(self, engine): + assert engine.process_query("test").output.value == "mock output" + + def test_process(self, engine): + assert engine.process(RagContext(initial_query="test")).output.value == "mock output" diff --git a/tests/unit/memory/tool/test_task_memory.py b/tests/unit/memory/tool/test_task_memory.py index ad7401fbb..fc1cf75c7 100644 --- a/tests/unit/memory/tool/test_task_memory.py +++ b/tests/unit/memory/tool/test_task_memory.py @@ -83,7 +83,7 @@ def test_load_artifacts_for_text_list_artifact(self, memory): memory.process_output( MockTool().test, ActionsSubtask(), - ListArtifact([TextArtifact("foo", name="test1"), TextArtifact("foo", name="test2")], name="test"), + ListArtifact([TextArtifact("foo1", name="test1"), TextArtifact("foo2", name="test2")], name="test"), ) assert len(memory.load_artifacts("test")) == 2 diff --git a/tests/unit/structures/test_agent.py b/tests/unit/structures/test_agent.py index e6c2a1f01..37c8da5a6 100644 --- a/tests/unit/structures/test_agent.py +++ b/tests/unit/structures/test_agent.py @@ -80,9 +80,11 @@ def test_embedding_driver(self): embedding_driver = MockEmbeddingDriver() agent = Agent(tools=[MockTool()], embedding_driver=embedding_driver) - artifact_storage = list(agent.task_memory.artifact_storages.values())[0] - assert isinstance(artifact_storage, TextArtifactStorage) - memory_embedding_driver = artifact_storage.query_engine.vector_store_driver.embedding_driver + storage = list(agent.task_memory.artifact_storages.values())[0] + assert isinstance(storage, TextArtifactStorage) + memory_embedding_driver = storage.rag_engine.retrieval_stage.retrieval_modules[ + 0 + ].vector_store_driver.embedding_driver assert memory_embedding_driver == embedding_driver @@ -236,8 +238,11 @@ def test_task_memory_defaults(self): storage = list(agent.task_memory.artifact_storages.values())[0] assert isinstance(storage, TextArtifactStorage) - assert storage.query_engine.prompt_driver == prompt_driver - assert storage.query_engine.vector_store_driver.embedding_driver == embedding_driver + assert storage.rag_engine.generation_stage.generation_module.prompt_driver == prompt_driver + assert ( + storage.rag_engine.retrieval_stage.retrieval_modules[0].vector_store_driver.embedding_driver + == embedding_driver + ) assert isinstance(storage.summary_engine, PromptSummaryEngine) assert storage.summary_engine.prompt_driver == prompt_driver assert storage.csv_extraction_engine.prompt_driver == prompt_driver diff --git a/tests/unit/structures/test_pipeline.py b/tests/unit/structures/test_pipeline.py index 8c1cd8511..098709f0e 100644 --- a/tests/unit/structures/test_pipeline.py +++ b/tests/unit/structures/test_pipeline.py @@ -94,7 +94,9 @@ def test_embedding_driver(self): storage = list(pipeline.task_memory.artifact_storages.values())[0] assert isinstance(storage, TextArtifactStorage) - memory_embedding_driver = storage.query_engine.vector_store_driver.embedding_driver + memory_embedding_driver = storage.rag_engine.retrieval_stage.retrieval_modules[ + 0 + ].vector_store_driver.embedding_driver assert memory_embedding_driver == embedding_driver diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index bbcf5138e..2646c7b43 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -108,7 +108,9 @@ def test_embedding_driver(self): storage = list(workflow.task_memory.artifact_storages.values())[0] assert isinstance(storage, TextArtifactStorage) - memory_embedding_driver = storage.query_engine.vector_store_driver.embedding_driver + memory_embedding_driver = storage.rag_engine.retrieval_stage.retrieval_modules[ + 0 + ].vector_store_driver.embedding_driver assert memory_embedding_driver == embedding_driver diff --git a/tests/unit/tasks/test_rag_task.py b/tests/unit/tasks/test_rag_task.py new file mode 100644 index 000000000..75e5007ad --- /dev/null +++ b/tests/unit/tasks/test_rag_task.py @@ -0,0 +1,35 @@ +import pytest +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import PromptGenerationRagModule +from griptape.engines.rag.stages import GenerationRagStage +from griptape.structures import Agent +from griptape.tasks import RagTask +from tests.mocks.mock_prompt_driver import MockPromptDriver + + +class TestRagTask: + @pytest.fixture + def task(self): + return RagTask( + input="test", + rag_engine=RagEngine( + generation_stage=GenerationRagStage( + generation_module=PromptGenerationRagModule(prompt_driver=MockPromptDriver()) + ) + ), + ) + + def test_run(self, task): + agent = Agent() + + agent.add_task(task) + + assert task.run().to_text() == "mock output" + + def test_context_propagation(self, task): + task._input = "{{ test }}" + task.context = {"test": "test value"} + + Agent().add_task(task) + + assert task.input.to_text() == "test value" diff --git a/tests/unit/tasks/test_text_query_task.py b/tests/unit/tasks/test_text_query_task.py deleted file mode 100644 index 6ab0524be..000000000 --- a/tests/unit/tasks/test_text_query_task.py +++ /dev/null @@ -1,48 +0,0 @@ -from tests.mocks.mock_structure_config import MockStructureConfig -import pytest -from griptape.drivers import LocalVectorStoreDriver -from griptape.engines import VectorQueryEngine -from griptape.structures import Agent -from griptape.tasks import TextQueryTask -from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.mocks.mock_prompt_driver import MockPromptDriver - - -class TestTextQueryTask: - @pytest.fixture - def task(self): - return TextQueryTask( - "test", - query_engine=VectorQueryEngine( - vector_store_driver=LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()), - prompt_driver=MockPromptDriver(), - ), - namespace="test", - ) - - def test_run(self, task): - agent = Agent() - - agent.add_task(task) - - assert task.run().to_text() == "mock output" - - def test_context_propagation(self, task): - task._input = "{{ test }}" - task.context = {"test": "test value"} - - Agent().add_task(task) - - assert task.input.to_text() == "test value" - - def test_config_query_engine(self, task): - Agent(config=MockStructureConfig()).add_task(task) - - assert isinstance(task.query_engine, VectorQueryEngine) - assert isinstance(task.query_engine.prompt_driver, MockPromptDriver) - - def test_missing_summary_engine(self): - task = TextQueryTask("test") - - with pytest.raises(ValueError): - task.query_engine diff --git a/tests/unit/tasks/test_toolkit_task.py b/tests/unit/tasks/test_toolkit_task.py index f63b06d5b..28cc56ec9 100644 --- a/tests/unit/tasks/test_toolkit_task.py +++ b/tests/unit/tasks/test_toolkit_task.py @@ -1,11 +1,6 @@ -import pytest from griptape.artifacts import ErrorArtifact, TextArtifact -from griptape.drivers import LocalVectorStoreDriver -from griptape.engines import VectorQueryEngine from griptape.structures import Agent from griptape.tasks import ToolkitTask, ActionsSubtask, PromptTask -from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_tool.tool import MockTool from tests.mocks.mock_value_prompt_driver import MockValuePromptDriver from tests.utils import defaults @@ -141,13 +136,6 @@ class TestToolkitSubtask: "$schema": "http://json-schema.org/draft-07/schema#", } - @pytest.fixture - def query_engine(self): - return VectorQueryEngine( - prompt_driver=MockPromptDriver(), - vector_store_driver=LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()), - ) - def test_init(self): assert len(ToolkitTask("test", tools=[MockTool(name="Tool1"), MockTool(name="Tool2")]).tools) == 2 @@ -279,7 +267,7 @@ def test_find_tool(self): assert task.find_tool(tool.name) == tool - def test_find_memory(self, query_engine): + def test_find_memory(self): m1 = defaults.text_task_memory("Memory1") m2 = defaults.text_task_memory("Memory2") @@ -291,7 +279,7 @@ def test_find_memory(self, query_engine): assert task.find_memory("Memory1") == m1 assert task.find_memory("Memory2") == m2 - def test_memory(self, query_engine): + def test_memory(self): tool1 = MockTool( name="Tool1", output_memory={"test": [defaults.text_task_memory("Memory1"), defaults.text_task_memory("Memory2")]}, diff --git a/tests/unit/tools/test_rag_client.py b/tests/unit/tools/test_rag_client.py new file mode 100644 index 000000000..9c6497b02 --- /dev/null +++ b/tests/unit/tools/test_rag_client.py @@ -0,0 +1,13 @@ +from griptape.drivers import LocalVectorStoreDriver +from griptape.tools import RagClient +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver +from tests.mocks.mock_prompt_driver import MockPromptDriver +from tests.utils.defaults import rag_engine + + +class TestRagClient: + def test_search(self): + vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + tool = RagClient(description="Test", rag_engine=rag_engine(MockPromptDriver(), vector_store_driver)) + + assert tool.search({"values": {"query": "test"}}).value == "mock output" diff --git a/tests/unit/tools/test_vector_store_client.py b/tests/unit/tools/test_vector_store_client.py index ef54ed024..9503501b5 100644 --- a/tests/unit/tools/test_vector_store_client.py +++ b/tests/unit/tools/test_vector_store_client.py @@ -1,26 +1,19 @@ import pytest from griptape.artifacts import TextArtifact from griptape.drivers import LocalVectorStoreDriver -from griptape.engines import VectorQueryEngine from griptape.tools import VectorStoreClient from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.mocks.mock_prompt_driver import MockPromptDriver class TestVectorStoreClient: @pytest.fixture(autouse=True) - def mock_try_runt(self, mocker): - mocker.patch("griptape.drivers.OpenAiChatPromptDriver.try_run", return_value=TextArtifact("foobar")) - + def mock_try_run(self, mocker): mocker.patch("griptape.drivers.OpenAiEmbeddingDriver.try_embed_chunk", return_value=[0, 1]) def test_search(self): - tool = VectorStoreClient( - description="Test", - query_engine=VectorQueryEngine( - prompt_driver=MockPromptDriver(mock_output="foobar"), - vector_store_driver=LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()), - ), - ) + driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + tool = VectorStoreClient(description="Test", vector_store_driver=driver) + + driver.upsert_text_artifacts({"test": [TextArtifact("foo"), TextArtifact("bar")]}) - assert tool.search({"values": {"query": "test"}}).value == "foobar" + assert set([a.value for a in tool.search({"values": {"query": "test"}})]) == {"foo", "bar"} diff --git a/tests/unit/utils/test_futures.py b/tests/unit/utils/test_futures.py index d50416f58..5e30148a9 100644 --- a/tests/unit/utils/test_futures.py +++ b/tests/unit/utils/test_futures.py @@ -12,5 +12,14 @@ def test_execute_futures_dict(self): assert result["foo"] == "foo-bar" assert result["baz"] == "baz-bar" + def test_execute_futures_list(self): + with futures.ThreadPoolExecutor() as executor: + result = utils.execute_futures_list( + [executor.submit(self.foobar, "foo"), executor.submit(self.foobar, "baz")] + ) + + assert result[0] == "foo-bar" + assert result[1] == "baz-bar" + def foobar(self, foo): return f"{foo}-bar" diff --git a/tests/utils/defaults.py b/tests/utils/defaults.py index 801eed7de..f27410308 100644 --- a/tests/utils/defaults.py +++ b/tests/utils/defaults.py @@ -1,6 +1,9 @@ from griptape.artifacts import TextArtifact, BlobArtifact from griptape.drivers import LocalVectorStoreDriver -from griptape.engines import VectorQueryEngine, PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine +from griptape.engines import PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine +from griptape.engines.rag import RagEngine +from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule +from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage from griptape.memory import TaskMemory from griptape.memory.task.storage import TextArtifactStorage, BlobArtifactStorage from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -8,11 +11,11 @@ def text_tool_artifact_storage(): + vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + return TextArtifactStorage( - query_engine=VectorQueryEngine( - vector_store_driver=LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()), - prompt_driver=MockPromptDriver(), - ), + rag_engine=rag_engine(MockPromptDriver(), vector_store_driver), + vector_store_driver=vector_store_driver, summary_engine=PromptSummaryEngine(prompt_driver=MockPromptDriver()), csv_extraction_engine=CsvExtractionEngine(prompt_driver=MockPromptDriver()), json_extraction_engine=JsonExtractionEngine(prompt_driver=MockPromptDriver()), @@ -23,3 +26,12 @@ def text_task_memory(name): return TaskMemory( name=name, artifact_storages={TextArtifact: text_tool_artifact_storage(), BlobArtifact: BlobArtifactStorage()} ) + + +def rag_engine(prompt_driver, vector_store_driver): + return RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[TextRetrievalRagModule(vector_store_driver=vector_store_driver)] + ), + generation_stage=GenerationRagStage(generation_module=PromptGenerationRagModule(prompt_driver=prompt_driver)), + ) From 095d12f9d458f283375920a4bc65f8d81e1fc4e8 Mon Sep 17 00:00:00 2001 From: CJ Kindel Date: Mon, 24 Jun 2024 11:55:02 -0700 Subject: [PATCH 114/145] Change GriptapeCloudKnowledgeBaseClient to use /search API (#888) --- CHANGELOG.md | 1 + griptape/tools/griptape_cloud_knowledge_base_client/tool.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e920f5a5e..710a1c76f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Merged `BaseVectorStoreDriver.QueryResult` into `BaseVectorStoreDriver.Entry`. - **BREAKING**: Replaced `query_engine` with `vector_store_driver` in `VectorStoreClient`. - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. +- `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. ## [0.27.1] - 2024-06-20 diff --git a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py index 6fed6e618..7c94cda5d 100644 --- a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py +++ b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py @@ -31,7 +31,7 @@ def query(self, params: dict) -> TextArtifact | ErrorArtifact: from requests import post, exceptions query = params["values"]["query"] - url = urljoin(self.base_url.strip("/"), f"/api/knowledge-bases/{self.knowledge_base_id}/query") + url = urljoin(self.base_url.strip("/"), f"/api/knowledge-bases/{self.knowledge_base_id}/search") try: response = post(url, json={"query": query}, headers=self.headers) From 9010fdc7e30cf1d1501013c560d53e917ec0029e Mon Sep 17 00:00:00 2001 From: CJ Kindel Date: Mon, 24 Jun 2024 12:45:31 -0700 Subject: [PATCH 115/145] `meta` parameter added to TextArtifact (#891) --- CHANGELOG.md | 1 + griptape/artifacts/text_artifact.py | 3 ++- tests/unit/artifacts/test_text_artifact.py | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 710a1c76f..435b62505 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `DuckDuckGoWebSearchDriver` to web search with the DuckDuckGo search SDK. - `ProxyWebScraperDriver` to web scrape using proxies. - Parameter `session` on `AmazonBedrockStructureConfig`. +- Parameter `meta` on `TextArtifact`. ### Changed - **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. diff --git a/griptape/artifacts/text_artifact.py b/griptape/artifacts/text_artifact.py index e8a2bb2a7..8b83303f0 100644 --- a/griptape/artifacts/text_artifact.py +++ b/griptape/artifacts/text_artifact.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Any, Optional from attrs import define, field from griptape.artifacts import BaseArtifact @@ -13,6 +13,7 @@ class TextArtifact(BaseArtifact): value: str = field(converter=str, metadata={"serializable": True}) encoding: str = field(default="utf-8", kw_only=True) encoding_error_handler: str = field(default="strict", kw_only=True) + meta: dict[str, Any] = field(factory=dict, kw_only=True, metadata={"serializable": True}) _embedding: list[float] = field(factory=list, kw_only=True) @property diff --git a/tests/unit/artifacts/test_text_artifact.py b/tests/unit/artifacts/test_text_artifact.py index f913429d7..6ea2c6697 100644 --- a/tests/unit/artifacts/test_text_artifact.py +++ b/tests/unit/artifacts/test_text_artifact.py @@ -61,3 +61,11 @@ def test_name(self): assert artifact.name == artifact.id assert TextArtifact("foo", name="bar").name == "bar" + + def test_meta(self): + artifact = TextArtifact("foo") + + assert artifact.meta == {} + + meta = {"foo": "bar"} + assert TextArtifact("foo", meta=meta).meta == meta From c2575f5318fccb7d11efd83d909ec248e9a7a28e Mon Sep 17 00:00:00 2001 From: CJ Kindel Date: Tue, 25 Jun 2024 08:05:38 -0700 Subject: [PATCH 116/145] Handle error on vector entry not existing (#893) --- griptape/drivers/vector/base_vector_store_driver.py | 5 ++++- ...re_driver.py => test_base_local_vector_store_driver.py} | 7 ++++++- .../vector/test_in_memory_local_vector_store_driver.py | 2 +- .../vector/test_persistent_local_vector_store_driver.py | 4 ++-- 4 files changed, 13 insertions(+), 5 deletions(-) rename tests/unit/drivers/vector/{base_local_vector_store_driver.py => test_base_local_vector_store_driver.py} (91%) diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 71f1c1061..b1d9ed6d0 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -92,7 +92,10 @@ def upsert_text( ) def does_entry_exist(self, vector_id: str, namespace: Optional[str] = None) -> bool: - return self.load_entry(vector_id, namespace) is not None + try: + return self.load_entry(vector_id, namespace) is not None + except Exception: + return False def load_artifacts(self, namespace: Optional[str] = None) -> ListArtifact: result = self.load_entries(namespace) diff --git a/tests/unit/drivers/vector/base_local_vector_store_driver.py b/tests/unit/drivers/vector/test_base_local_vector_store_driver.py similarity index 91% rename from tests/unit/drivers/vector/base_local_vector_store_driver.py rename to tests/unit/drivers/vector/test_base_local_vector_store_driver.py index 07cf284f8..c34a54d98 100644 --- a/tests/unit/drivers/vector/base_local_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_base_local_vector_store_driver.py @@ -1,6 +1,7 @@ from abc import ABC, abstractmethod import pytest -from griptape.artifacts import TextArtifact, BaseArtifact +from unittest.mock import patch +from griptape.artifacts import TextArtifact class BaseLocalVectorStoreDriver(ABC): @@ -65,3 +66,7 @@ def test_load_artifacts(self, driver): assert len(driver.load_artifacts()) == 3 assert len(driver.load_artifacts("test-namespace-1")) == 2 assert len(driver.load_artifacts("test-namespace-2")) == 1 + + def test_does_entry_exist_exception(self, driver): + with patch.object(driver, "load_entry", side_effect=Exception): + assert driver.does_entry_exist("does_not_exist") is False diff --git a/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py b/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py index c426ea5b4..cb8fcbefe 100644 --- a/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py @@ -1,7 +1,7 @@ import pytest from griptape.drivers import LocalVectorStoreDriver from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.unit.drivers.vector.base_local_vector_store_driver import BaseLocalVectorStoreDriver +from tests.unit.drivers.vector.test_base_local_vector_store_driver import BaseLocalVectorStoreDriver class TestInMemoryLocalVectorStoreDriver(BaseLocalVectorStoreDriver): diff --git a/tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py b/tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py index 1f800967a..8f6773fc1 100644 --- a/tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_persistent_local_vector_store_driver.py @@ -1,10 +1,10 @@ import os import tempfile import pytest -from griptape.artifacts import TextArtifact, BaseArtifact +from griptape.artifacts import TextArtifact from griptape.drivers import LocalVectorStoreDriver from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.unit.drivers.vector.base_local_vector_store_driver import BaseLocalVectorStoreDriver +from tests.unit.drivers.vector.test_base_local_vector_store_driver import BaseLocalVectorStoreDriver class TestPersistentLocalVectorStoreDriver(BaseLocalVectorStoreDriver): From 2df58d551963d214892642bc6645b407d45d2219 Mon Sep 17 00:00:00 2001 From: Emily Danielson <2302515+emjay07@users.noreply.github.com> Date: Tue, 25 Jun 2024 11:56:09 -0700 Subject: [PATCH 117/145] Bumping gemini to latest version (#892) --- poetry.lock | 92 +++++++++++++++++++++++++++++++++++++++++++++----- pyproject.toml | 2 +- 2 files changed, 84 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1b70d0c93..e030c8906 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1543,17 +1543,18 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "google-ai-generativelanguage" -version = "0.4.0" +version = "0.6.5" description = "Google Ai Generativelanguage API client library" optional = true python-versions = ">=3.7" files = [ - {file = "google-ai-generativelanguage-0.4.0.tar.gz", hash = "sha256:c8199066c08f74c4e91290778329bb9f357ba1ea5d6f82de2bc0d10552bf4f8c"}, - {file = "google_ai_generativelanguage-0.4.0-py3-none-any.whl", hash = "sha256:e4c425376c1ee26c78acbc49a24f735f90ebfa81bf1a06495fae509a2433232c"}, + {file = "google-ai-generativelanguage-0.6.5.tar.gz", hash = "sha256:c4089c277fa4e26722f76ab03ee3039f28be8bf1c9be282948b9583a154c6d79"}, + {file = "google_ai_generativelanguage-0.6.5-py3-none-any.whl", hash = "sha256:236875bb4a6d6ebdba2f12bd9d5e776100fd913402157a47b5e9fb80a13f25a7"}, ] [package.dependencies] -google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0dev" proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" @@ -1588,6 +1589,24 @@ grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +[[package]] +name = "google-api-python-client" +version = "2.134.0" +description = "Google API Client Library for Python" +optional = true +python-versions = ">=3.7" +files = [ + {file = "google-api-python-client-2.134.0.tar.gz", hash = "sha256:4a8f0bea651a212997cc83c0f271fc86f80ef93d1cee9d84de7dfaeef2a858b6"}, + {file = "google_api_python_client-2.134.0-py2.py3-none-any.whl", hash = "sha256:ba05d60f6239990b7994f6328f17bb154c602d31860fb553016dc9f8ce886945"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.32.0,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0.dev0" +google-auth-httplib2 = ">=0.2.0,<1.0.0" +httplib2 = ">=0.19.0,<1.dev0" +uritemplate = ">=3.0.1,<5" + [[package]] name = "google-auth" version = "2.29.0" @@ -1611,19 +1630,35 @@ pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +[[package]] +name = "google-auth-httplib2" +version = "0.2.0" +description = "Google Authentication Library: httplib2 transport" +optional = true +python-versions = "*" +files = [ + {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, + {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, +] + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.19.0" + [[package]] name = "google-generativeai" -version = "0.4.1" +version = "0.7.0" description = "Google Generative AI High level API client library and tools." optional = true python-versions = ">=3.9" files = [ - {file = "google_generativeai-0.4.1-py3-none-any.whl", hash = "sha256:89be3c00c2e688108fccefc50f47f45fc9d37ecd53c1ade9d86b5d982919c24a"}, + {file = "google_generativeai-0.7.0-py3-none-any.whl", hash = "sha256:7be4b634afeb8b6bebde1af7271e94d2af84d2d28b5988c7ed9921733c40fe63"}, ] [package.dependencies] -google-ai-generativelanguage = "0.4.0" +google-ai-generativelanguage = "0.6.5" google-api-core = "*" +google-api-python-client = "*" google-auth = ">=2.15.0" protobuf = "*" pydantic = "*" @@ -1863,6 +1898,20 @@ http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] trio = ["trio (>=0.22.0,<0.26.0)"] +[[package]] +name = "httplib2" +version = "0.22.0" +description = "A comprehensive HTTP client library." +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, + {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, +] + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + [[package]] name = "httpx" version = "0.27.0" @@ -4242,6 +4291,20 @@ cryptography = ">=41.0.5,<43" docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx-rtd-theme"] test = ["pretend", "pytest (>=3.0.1)", "pytest-rerunfailures"] +[[package]] +name = "pyparsing" +version = "3.1.2" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = true +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "pypdf" version = "3.17.4" @@ -5944,6 +6007,17 @@ tzdata = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +optional = true +python-versions = ">=3.6" +files = [ + {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, + {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, +] + [[package]] name = "urllib3" version = "1.26.18" @@ -6321,4 +6395,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "a5e1a9aaf0fa253d904eee8803dab5f943be59c872c2449b73aea917ecb1c543" +content-hash = "ce26764ee2c4a9a99d24ef4afc7efa6aa894a7560a725388ff24db15f6014e9a" diff --git a/pyproject.toml b/pyproject.toml index 972f0fe81..29d4fda44 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,7 +44,7 @@ redis = { version = "^4.6.0", optional = true } opensearch-py = { version = "^2.3.1", optional = true } pgvector = { version = "^0.2.3", optional = true } psycopg2-binary = { version = "^2.9.9", optional = true } -google-generativeai = { version = "^0.4.1", optional = true } +google-generativeai = { version = "^0.7.0", optional = true } trafilatura = {version = "^1.6", optional = true} playwright = {version = "^1.42", optional = true} beautifulsoup4 = {version = "^4.12.3", optional = true} From 80c27cb1fff80a4d3c9200f6a95db28c59de71ca Mon Sep 17 00:00:00 2001 From: Vasily Vasinov Date: Tue, 25 Jun 2024 15:06:43 -0600 Subject: [PATCH 118/145] VectorStoreClient improvements (#899) --- CHANGELOG.md | 4 +++ .../official-tools/vector-store-client.md | 2 +- griptape/tools/vector_store_client/tool.py | 30 +++++++++---------- tests/unit/tools/test_vector_store_client.py | 25 +++++++++++++++- 4 files changed, 44 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 435b62505..818211d8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `ProxyWebScraperDriver` to web scrape using proxies. - Parameter `session` on `AmazonBedrockStructureConfig`. - Parameter `meta` on `TextArtifact`. +- `VectorStoreClient` improvements: + - `VectorStoreClient.query_params` dict for custom query params. + - `VectorStoreClient.process_query_output_fn` for custom query output processing logic. ### Changed - **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. @@ -46,6 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Merged `BaseVectorStoreDriver.QueryResult` into `BaseVectorStoreDriver.Entry`. - **BREAKING**: Replaced `query_engine` with `vector_store_driver` in `VectorStoreClient`. - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. +- **BREAKING**: removed `VectorStoreClient.top_n` and `VectorStoreClient.namespace` in favor of `VectorStoreClient.query_params`. - `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. ## [0.27.1] - 2024-06-20 diff --git a/docs/griptape-tools/official-tools/vector-store-client.md b/docs/griptape-tools/official-tools/vector-store-client.md index ffdbbba91..f3cab2065 100644 --- a/docs/griptape-tools/official-tools/vector-store-client.md +++ b/docs/griptape-tools/official-tools/vector-store-client.md @@ -21,7 +21,7 @@ vector_store_driver.upsert_text_artifacts( vector_db = VectorStoreClient( description="This DB has information about the Griptape Python framework", vector_store_driver=vector_store_driver, - namespace="griptape", + query_params={"namespace": "griptape"}, off_prompt=True ) diff --git a/griptape/tools/vector_store_client/tool.py b/griptape/tools/vector_store_client/tool.py index 38d7784c2..8d4e73022 100644 --- a/griptape/tools/vector_store_client/tool.py +++ b/griptape/tools/vector_store_client/tool.py @@ -1,34 +1,36 @@ from __future__ import annotations -from typing import Optional -from attrs import define, field +from typing import Callable, Any +from attrs import define, field, Factory from schema import Schema, Literal -from griptape.artifacts import ErrorArtifact +from griptape.artifacts import ErrorArtifact, BaseArtifact from griptape.artifacts import ListArtifact from griptape.drivers import BaseVectorStoreDriver from griptape.tools import BaseTool from griptape.utils.decorators import activity -@define +@define(kw_only=True) class VectorStoreClient(BaseTool): """ Attributes: description: LLM-friendly vector DB description. - namespace: Vector storage namespace. vector_store_driver: `BaseVectorStoreDriver`. - top_n: Max number of results returned for the query engine query. + query_params: Optional dictionary of vector store driver query parameters. + process_query_output_fn: Optional lambda for processing vector store driver query output `Entry`s. """ DEFAULT_TOP_N = 5 - description: str = field(kw_only=True) - vector_store_driver: BaseVectorStoreDriver = field(kw_only=True) - top_n: int = field(default=DEFAULT_TOP_N, kw_only=True) - namespace: Optional[str] = field(default=None, kw_only=True) + description: str = field() + vector_store_driver: BaseVectorStoreDriver = field() + query_params: dict[str, Any] = field(factory=dict) + process_query_output_fn: Callable[[list[BaseVectorStoreDriver.Entry]], BaseArtifact] = field( + default=Factory(lambda: lambda es: ListArtifact([e.to_artifact() for e in es])) + ) @activity( config={ - "description": "Can be used to search a vector database with the following description: {{ _self.description }}", + "description": "Can be used to search a database with the following description: {{ _self.description }}", "schema": Schema( { Literal( @@ -38,12 +40,10 @@ class VectorStoreClient(BaseTool): ), } ) - def search(self, params: dict) -> ListArtifact | ErrorArtifact: + def search(self, params: dict) -> BaseArtifact: query = params["values"]["query"] try: - entries = self.vector_store_driver.query(query, namespace=self.namespace, count=self.top_n) - - return ListArtifact([e.to_artifact() for e in entries]) + return self.process_query_output_fn(self.vector_store_driver.query(query, **self.query_params)) except Exception as e: return ErrorArtifact(f"error querying vector store: {e}") diff --git a/tests/unit/tools/test_vector_store_client.py b/tests/unit/tools/test_vector_store_client.py index 9503501b5..45018b847 100644 --- a/tests/unit/tools/test_vector_store_client.py +++ b/tests/unit/tools/test_vector_store_client.py @@ -1,5 +1,5 @@ import pytest -from griptape.artifacts import TextArtifact +from griptape.artifacts import TextArtifact, ListArtifact from griptape.drivers import LocalVectorStoreDriver from griptape.tools import VectorStoreClient from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -17,3 +17,26 @@ def test_search(self): driver.upsert_text_artifacts({"test": [TextArtifact("foo"), TextArtifact("bar")]}) assert set([a.value for a in tool.search({"values": {"query": "test"}})]) == {"foo", "bar"} + + def test_search_with_namespace(self): + driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + tool1 = VectorStoreClient(description="Test", vector_store_driver=driver, query_params={"namespace": "test"}) + tool2 = VectorStoreClient(description="Test", vector_store_driver=driver, query_params={"namespace": "test2"}) + + driver.upsert_text_artifacts({"test": [TextArtifact("foo"), TextArtifact("bar")]}) + + assert len(tool1.search({"values": {"query": "test"}})) == 2 + assert len(tool2.search({"values": {"query": "test"}})) == 0 + + def test_custom_process_query_output_fn(self): + driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + tool1 = VectorStoreClient( + description="Test", + vector_store_driver=driver, + process_query_output_fn=lambda es: ListArtifact([e.vector for e in es]), + query_params={"include_vectors": True}, + ) + + driver.upsert_text_artifacts({"test": [TextArtifact("foo"), TextArtifact("bar")]}) + + assert tool1.search({"values": {"query": "test"}}).value == [[0, 1], [0, 1]] From 22981b12529eadb96842d601e7eedf99d9d1bf6d Mon Sep 17 00:00:00 2001 From: Vasily Vasinov Date: Tue, 25 Jun 2024 15:19:37 -0600 Subject: [PATCH 119/145] Wrap future execution with context managers (#898) --- CHANGELOG.md | 1 + .../drivers/vector/base_vector_store_driver.py | 15 ++++++++------- .../related_query_generation_rag_module.py | 17 +++++++++-------- .../retrieval/text_retrieval_rag_module.py | 13 +++++++------ griptape/engines/rag/stages/query_rag_stage.py | 9 +++++---- .../engines/rag/stages/retrieval_rag_stage.py | 5 ++--- griptape/loaders/base_loader.py | 11 +++++------ griptape/tasks/actions_subtask.py | 5 ++--- griptape/utils/file_utils.py | 7 ++++--- 9 files changed, 43 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 818211d8f..d1e581b4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. - **BREAKING**: removed `VectorStoreClient.top_n` and `VectorStoreClient.namespace` in favor of `VectorStoreClient.query_params`. - `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. +- Wrapped all future `submit` calls with the `with` block to address future executor shutdown issues. ## [0.27.1] - 2024-06-20 diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index b1d9ed6d0..8002101b7 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -36,13 +36,14 @@ def to_artifact(self) -> BaseArtifact: def upsert_text_artifacts( self, artifacts: dict[str, list[TextArtifact]], meta: Optional[dict] = None, **kwargs ) -> None: - utils.execute_futures_dict( - { - namespace: self.futures_executor.submit(self.upsert_text_artifact, a, namespace, meta, **kwargs) - for namespace, artifact_list in artifacts.items() - for a in artifact_list - } - ) + with self.futures_executor as executor: + utils.execute_futures_dict( + { + namespace: executor.submit(self.upsert_text_artifact, a, namespace, meta, **kwargs) + for namespace, artifact_list in artifacts.items() + for a in artifact_list + } + ) def upsert_text_artifact( self, diff --git a/griptape/engines/rag/modules/query/related_query_generation_rag_module.py b/griptape/engines/rag/modules/query/related_query_generation_rag_module.py index 4661e24a2..9f610c0e5 100644 --- a/griptape/engines/rag/modules/query/related_query_generation_rag_module.py +++ b/griptape/engines/rag/modules/query/related_query_generation_rag_module.py @@ -18,14 +18,15 @@ class RelatedQueryGenerationRagModule(BaseQueryRagModule): def run(self, context: RagContext) -> list[str]: system_prompt = self.generate_system_template(context.initial_query) - results = utils.execute_futures_list( - [ - self.futures_executor.submit( - self.prompt_driver.run, self.generate_query_prompt_stack(system_prompt, "Alternative query: ") - ) - for _ in range(self.query_count) - ] - ) + with self.futures_executor as executor: + results = utils.execute_futures_list( + [ + executor.submit( + self.prompt_driver.run, self.generate_query_prompt_stack(system_prompt, "Alternative query: ") + ) + for _ in range(self.query_count) + ] + ) return [r.value for r in results] diff --git a/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py index 5c6bedac4..1434b9880 100644 --- a/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py +++ b/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py @@ -21,12 +21,13 @@ def run(self, context: RagContext) -> Sequence[TextArtifact]: all_queries = [context.initial_query] + context.alternative_queries namespace = self.namespace or context.namespace - results = utils.execute_futures_list( - [ - self.futures_executor.submit(self.vector_store_driver.query, query, self.top_n, namespace, False) - for query in all_queries - ] - ) + with self.futures_executor as executor: + results = utils.execute_futures_list( + [ + executor.submit(self.vector_store_driver.query, query, self.top_n, namespace, False) + for query in all_queries + ] + ) return [ artifact diff --git a/griptape/engines/rag/stages/query_rag_stage.py b/griptape/engines/rag/stages/query_rag_stage.py index b122fa7a6..8c93ad763 100644 --- a/griptape/engines/rag/stages/query_rag_stage.py +++ b/griptape/engines/rag/stages/query_rag_stage.py @@ -14,10 +14,11 @@ class QueryRagStage(BaseRagStage): def run(self, context: RagContext) -> RagContext: logging.info(f"QueryStage: running {len(self.query_generation_modules)} query generation modules in parallel") - results = utils.execute_futures_list( - [self.futures_executor.submit(r.run, context) for r in self.query_generation_modules] - ) + with self.futures_executor as executor: + results = utils.execute_futures_list( + [executor.submit(r.run, context) for r in self.query_generation_modules] + ) - context.alternative_queries = list(itertools.chain.from_iterable(results)) + context.alternative_queries = list(itertools.chain.from_iterable(results)) return context diff --git a/griptape/engines/rag/stages/retrieval_rag_stage.py b/griptape/engines/rag/stages/retrieval_rag_stage.py index 8a0ceca44..77443fb2f 100644 --- a/griptape/engines/rag/stages/retrieval_rag_stage.py +++ b/griptape/engines/rag/stages/retrieval_rag_stage.py @@ -19,9 +19,8 @@ class RetrievalRagStage(BaseRagStage): def run(self, context: RagContext) -> RagContext: logging.info(f"RetrievalStage: running {len(self.retrieval_modules)} retrieval modules in parallel") - results = utils.execute_futures_list( - [self.futures_executor.submit(r.run, context) for r in self.retrieval_modules] - ) + with self.futures_executor as executor: + results = utils.execute_futures_list([executor.submit(r.run, context) for r in self.retrieval_modules]) # flatten the list of lists results = list(itertools.chain.from_iterable(results)) diff --git a/griptape/loaders/base_loader.py b/griptape/loaders/base_loader.py index 1648b8f26..40121067c 100644 --- a/griptape/loaders/base_loader.py +++ b/griptape/loaders/base_loader.py @@ -26,12 +26,11 @@ def load_collection( # Create a dictionary before actually submitting the jobs to the executor # to avoid duplicate work. sources_by_key = {self.to_key(source): source for source in sources} - return execute_futures_dict( - { - key: self.futures_executor.submit(self.load, source, *args, **kwargs) - for key, source in sources_by_key.items() - } - ) + + with self.futures_executor as executor: + return execute_futures_dict( + {key: executor.submit(self.load, source, *args, **kwargs) for key, source in sources_by_key.items()} + ) def to_key(self, source: Any, *args, **kwargs) -> str: if isinstance(source, bytes): diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index 1546a825d..ae3893abb 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -119,9 +119,8 @@ def run(self) -> BaseArtifact: return ErrorArtifact("no tool output") def execute_actions(self, actions: list[Action]) -> list[tuple[str, BaseArtifact]]: - results = utils.execute_futures_dict( - {a.tag: self.futures_executor.submit(self.execute_action, a) for a in actions} - ) + with self.futures_executor as executor: + results = utils.execute_futures_dict({a.tag: executor.submit(self.execute_action, a) for a in actions}) return [r for r in results.values()] diff --git a/griptape/utils/file_utils.py b/griptape/utils/file_utils.py index 402436a2f..ebe5ba456 100644 --- a/griptape/utils/file_utils.py +++ b/griptape/utils/file_utils.py @@ -30,6 +30,7 @@ def load_files(paths: list[str], futures_executor: Optional[futures.ThreadPoolEx if futures_executor is None: futures_executor = futures.ThreadPoolExecutor() - return utils.execute_futures_dict( - {utils.str_to_hash(str(path)): futures_executor.submit(load_file, path) for path in paths} - ) + with futures_executor as executor: + return utils.execute_futures_dict( + {utils.str_to_hash(str(path)): executor.submit(load_file, path) for path in paths} + ) From 2a347f32ed1ce948ce4e1bf8654c13640ee342a5 Mon Sep 17 00:00:00 2001 From: Emily Danielson <2302515+emjay07@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:39:12 -0700 Subject: [PATCH 120/145] Bug Fix: Cohere prompts with no history (#900) --- CHANGELOG.md | 1 + .../drivers/prompt-drivers.md | 2 +- docs/griptape-framework/structures/config.md | 13 ++++++ .../drivers/prompt/cohere_prompt_driver.py | 12 ++++-- .../prompt/test_cohere_prompt_driver.py | 41 +++++++++++++++++-- 5 files changed, 61 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1e581b4b..183c3a34a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: removed `VectorStoreClient.top_n` and `VectorStoreClient.namespace` in favor of `VectorStoreClient.query_params`. - `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. - Wrapped all future `submit` calls with the `with` block to address future executor shutdown issues. +- Fixed bug in `CoherePromptDriver` to properly handle empty history ## [0.27.1] - 2024-06-20 diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 0100ccbac..96a1be4e1 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -141,7 +141,7 @@ from griptape.config import StructureConfig agent = Agent( config=StructureConfig( prompt_driver=CoherePromptDriver( - model="command", + model="command-r", api_key=os.environ['COHERE_API_KEY'], ) ) diff --git a/docs/griptape-framework/structures/config.md b/docs/griptape-framework/structures/config.md index 1a69d70c0..969163bf6 100644 --- a/docs/griptape-framework/structures/config.md +++ b/docs/griptape-framework/structures/config.md @@ -95,6 +95,19 @@ agent = Agent( ) ``` +#### Cohere + +The [Cohere Structure Config](../../reference/griptape/config/cohere_structure_config.md) provides default Drivers for Cohere's APIs. + + +```python +import os +from griptape.config import CohereStructureConfig +from griptape.structures import Agent + +agent = Agent(config=CohereStructureConfig(api_key=os.environ["COHERE_API_KEY"])) +``` + ### Custom Configs You can create your own [StructureConfig](../../reference/griptape/config/structure_config.md) by overriding relevant Drivers. diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index ca199011a..f4a306ebe 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -52,12 +52,18 @@ def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dic def _base_params(self, prompt_stack: PromptStack) -> dict: user_message = prompt_stack.inputs[-1].content - history_messages = [self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs[:-1]] + history_messages = [ + self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs[:-1] if input.content + ] - return { + params = { "message": user_message, - "chat_history": history_messages, "temperature": self.temperature, "stop_sequences": self.tokenizer.stop_sequences, "max_tokens": self.max_tokens, } + + if history_messages: + params["chat_history"] = history_messages + + return params diff --git a/tests/unit/drivers/prompt/test_cohere_prompt_driver.py b/tests/unit/drivers/prompt/test_cohere_prompt_driver.py index b3ceb11a4..6e5063b26 100644 --- a/tests/unit/drivers/prompt/test_cohere_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_cohere_prompt_driver.py @@ -7,16 +7,16 @@ class TestCoherePromptDriver: @pytest.fixture def mock_client(self, mocker): - mock_client = mocker.patch("cohere.Client").return_value - mock_client.chat.return_value = Mock(text="model-output") + mock_client = mocker.patch("cohere.Client") + mock_client.return_value.chat.return_value = Mock(text="model-output") return mock_client @pytest.fixture def mock_stream_client(self, mocker): - mock_client = mocker.patch("cohere.Client").return_value + mock_client = mocker.patch("cohere.Client") mock_chunk = Mock(text="model-output", event_type="text-generation") - mock_client.chat_stream.return_value = iter([mock_chunk]) + mock_client.return_value.chat_stream.return_value = iter([mock_chunk]) return mock_client @@ -42,8 +42,41 @@ def test_try_run(self, mock_client, prompt_stack): # pyright: ignore # When text_artifact = driver.try_run(prompt_stack) + print(f"Called methods: {mock_client}") # Then + expected_message = "assistant-input" + expected_history = [ + {"role": "ASSISTANT", "text": "generic-input"}, + {"role": "SYSTEM", "text": "system-input"}, + {"role": "USER", "text": "user-input"}, + ] + mock_client.return_value.chat.assert_called_once_with( + message=expected_message, + temperature=driver.temperature, + stop_sequences=driver.tokenizer.stop_sequences, + max_tokens=driver.max_tokens, + chat_history=expected_history, + ) + assert text_artifact.value == "model-output" + + def test_try_run_no_history(self, mock_client, prompt_stack): + # Given + prompt_stack_no_history = PromptStack() + prompt_stack_no_history.add_user_input("user-input") + driver = CoherePromptDriver(model="command", api_key="api-key") + + # When + text_artifact = driver.try_run(prompt_stack_no_history) + + # Then + expected_message = "user-input" + mock_client.return_value.chat.assert_called_once_with( + message=expected_message, + temperature=driver.temperature, + stop_sequences=driver.tokenizer.stop_sequences, + max_tokens=driver.max_tokens, + ) assert text_artifact.value == "model-output" def test_try_stream_run(self, mock_stream_client, prompt_stack): # pyright: ignore From 6d08c20a2d50ace70595480cf58a2d54bef678aa Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Thu, 27 Jun 2024 11:19:19 -0500 Subject: [PATCH 121/145] Fix `StructureVisualizer.to_url()` (#903) --- CHANGELOG.md | 5 ++++- griptape/utils/structure_visualizer.py | 6 +++--- tests/unit/utils/test_structure_visualizer.py | 6 +++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 183c3a34a..3d79f92f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,7 +52,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: removed `VectorStoreClient.top_n` and `VectorStoreClient.namespace` in favor of `VectorStoreClient.query_params`. - `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. - Wrapped all future `submit` calls with the `with` block to address future executor shutdown issues. -- Fixed bug in `CoherePromptDriver` to properly handle empty history + +### Fixed +- `CoherePromptDriver` to properly handle empty history. +- `StructureVisualizer.to_url()` by wrapping task IDs in single quotes. ## [0.27.1] - 2024-06-20 diff --git a/griptape/utils/structure_visualizer.py b/griptape/utils/structure_visualizer.py index ede282761..999519cf1 100644 --- a/griptape/utils/structure_visualizer.py +++ b/griptape/utils/structure_visualizer.py @@ -32,11 +32,11 @@ def to_url(self) -> str: base64_string = base64.b64encode(graph_bytes).decode("utf-8") url = f"https://mermaid.ink/svg/{base64_string}" - return url def __render_task(self, task: BaseTask) -> str: if task.children: - return f'{task.id}--> {" & ".join([child.id for child in task.children])};' + children = " & ".join([f"'{child.id}'" for child in task.children]) + return f"'{task.id}'--> {children};" else: - return f"{task.id};" + return f"'{task.id}';" diff --git a/tests/unit/utils/test_structure_visualizer.py b/tests/unit/utils/test_structure_visualizer.py index d7177bf30..396b81166 100644 --- a/tests/unit/utils/test_structure_visualizer.py +++ b/tests/unit/utils/test_structure_visualizer.py @@ -11,7 +11,7 @@ def test_agent(self): visualizer = StructureVisualizer(agent) result = visualizer.to_url() - assert result == "https://mermaid.ink/svg/Z3JhcGggVEQ7Cgl0YXNrMTs=" + assert result == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgkndGFzazEnOw==" def test_pipeline(self): pipeline = Pipeline( @@ -29,7 +29,7 @@ def test_pipeline(self): assert ( result - == "https://mermaid.ink/svg/Z3JhcGggVEQ7Cgl0YXNrMS0tPiB0YXNrMjsKCXRhc2syLS0+IHRhc2szOwoJdGFzazMtLT4gdGFzazQ7Cgl0YXNrNDs=" + == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgkndGFzazEnLS0+ICd0YXNrMic7CgkndGFzazInLS0+ICd0YXNrMyc7CgkndGFzazMnLS0+ICd0YXNrNCc7CgkndGFzazQnOw==" ) def test_workflow(self): @@ -48,5 +48,5 @@ def test_workflow(self): assert ( result - == "https://mermaid.ink/svg/Z3JhcGggVEQ7Cgl0YXNrMS0tPiB0YXNrMiAmIHRhc2szOwoJdGFzazItLT4gdGFzazQ7Cgl0YXNrMy0tPiB0YXNrNDsKCXRhc2s0Ow==" + == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgkndGFzazEnLS0+ICd0YXNrMicgJiAndGFzazMnOwoJJ3Rhc2syJy0tPiAndGFzazQnOwoJJ3Rhc2szJy0tPiAndGFzazQnOwoJJ3Rhc2s0Jzs=" ) From ef070023ec28de4af8150145ef34048d25f07f77 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Thu, 27 Jun 2024 13:46:05 -0500 Subject: [PATCH 122/145] Add `fail_fast` parameter to `Structure` (#908) --- CHANGELOG.md | 1 + griptape/structures/agent.py | 6 +++++ griptape/structures/pipeline.py | 2 +- griptape/structures/structure.py | 1 + griptape/structures/workflow.py | 2 +- tests/unit/structures/test_agent.py | 4 +++ tests/unit/structures/test_pipeline.py | 36 ++++++++++++++++++++++++-- tests/unit/structures/test_workflow.py | 12 ++++++++- 8 files changed, 59 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d79f92f8..3de99e54f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `VectorStoreClient` improvements: - `VectorStoreClient.query_params` dict for custom query params. - `VectorStoreClient.process_query_output_fn` for custom query output processing logic. +- Parameter `fail_fast` to `Structure`. ### Changed - **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. diff --git a/griptape/structures/agent.py b/griptape/structures/agent.py index d0446aff0..2840d5c46 100644 --- a/griptape/structures/agent.py +++ b/griptape/structures/agent.py @@ -15,6 +15,12 @@ class Agent(Structure): input_template: str = field(default=PromptTask.DEFAULT_INPUT_TEMPLATE) tools: list[BaseTool] = field(factory=list, kw_only=True) max_meta_memory_entries: Optional[int] = field(default=20, kw_only=True) + fail_fast: bool = field(default=False, kw_only=True) + + @fail_fast.validator # pyright: ignore + def validate_fail_fast(self, _, fail_fast: bool) -> None: + if fail_fast: + raise ValueError("Agents cannot fail fast, as they can only have 1 task.") def __attrs_post_init__(self) -> None: super().__attrs_post_init__() diff --git a/griptape/structures/pipeline.py b/griptape/structures/pipeline.py index d5724244e..4fc784974 100644 --- a/griptape/structures/pipeline.py +++ b/griptape/structures/pipeline.py @@ -74,7 +74,7 @@ def __run_from_task(self, task: Optional[BaseTask]) -> None: if task is None: return else: - if isinstance(task.execute(), ErrorArtifact): + if isinstance(task.execute(), ErrorArtifact) and self.fail_fast: return else: self.__run_from_task(next(iter(task.children), None)) diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 036e47cc8..c5854ccac 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -62,6 +62,7 @@ class Structure(ABC): default=Factory(lambda self: self.default_task_memory, takes_self=True), kw_only=True ) meta_memory: MetaMemory = field(default=Factory(lambda: MetaMemory()), kw_only=True) + fail_fast: bool = field(default=True, kw_only=True) _execution_args: tuple = () _logger: Optional[Logger] = None diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 6552fba89..dd76597d8 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -108,7 +108,7 @@ def try_run(self, *args) -> Workflow: # Wait for all tasks to complete for future in futures.as_completed(futures_list): - if isinstance(future.result(), ErrorArtifact): + if isinstance(future.result(), ErrorArtifact) and self.fail_fast: exit_loop = True break diff --git a/tests/unit/structures/test_agent.py b/tests/unit/structures/test_agent.py index 37c8da5a6..8bcadb753 100644 --- a/tests/unit/structures/test_agent.py +++ b/tests/unit/structures/test_agent.py @@ -267,3 +267,7 @@ def finished_tasks(self): agent.run("hello") assert len(agent.finished_tasks) == 1 + + def test_fail_fast(self): + with pytest.raises(ValueError): + Agent(prompt_driver=MockPromptDriver(), fail_fast=True) diff --git a/tests/unit/structures/test_pipeline.py b/tests/unit/structures/test_pipeline.py index 098709f0e..d94616165 100644 --- a/tests/unit/structures/test_pipeline.py +++ b/tests/unit/structures/test_pipeline.py @@ -1,10 +1,11 @@ import pytest +import time -from griptape.artifacts import TextArtifact +from griptape.artifacts import TextArtifact, ErrorArtifact from griptape.memory.task.storage import TextArtifactStorage from griptape.rules import Rule, Ruleset from griptape.tokenizers import OpenAiTokenizer -from griptape.tasks import PromptTask, BaseTask, ToolkitTask +from griptape.tasks import PromptTask, BaseTask, ToolkitTask, CodeExecutionTask from griptape.memory.structure import ConversationMemory from tests.mocks.mock_prompt_driver import MockPromptDriver from griptape.structures import Pipeline @@ -13,6 +14,21 @@ class TestPipeline: + @pytest.fixture + def waiting_task(self): + def fn(task): + time.sleep(2) + return TextArtifact("done") + + return CodeExecutionTask(run_fn=fn) + + @pytest.fixture + def error_artifact_task(self): + def fn(task): + return ErrorArtifact("error") + + return CodeExecutionTask(run_fn=fn) + def test_init(self): driver = MockPromptDriver() pipeline = Pipeline(prompt_driver=driver, rulesets=[Ruleset("TestRuleset", [Rule("test")])]) @@ -357,3 +373,19 @@ def test_deprecation(self): with pytest.deprecated_call(): Pipeline(stream=True) + + def test_run_with_error_artifact(self, error_artifact_task, waiting_task): + end_task = PromptTask("end") + pipeline = Pipeline(prompt_driver=MockPromptDriver(), tasks=[waiting_task, error_artifact_task, end_task]) + pipeline.run() + + assert pipeline.output is None + + def test_run_with_error_artifact_no_fail_fast(self, error_artifact_task, waiting_task): + end_task = PromptTask("end") + pipeline = Pipeline( + prompt_driver=MockPromptDriver(), tasks=[waiting_task, error_artifact_task, end_task], fail_fast=False + ) + pipeline.run() + + assert pipeline.output is not None diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index 2646c7b43..4d44fceb8 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -17,7 +17,7 @@ class TestWorkflow: @fixture def waiting_task(self): def fn(task): - time.sleep(10) + time.sleep(2) return TextArtifact("done") return CodeExecutionTask(run_fn=fn) @@ -728,6 +728,16 @@ def test_run_with_error_artifact(self, error_artifact_task, waiting_task): assert workflow.output is None + def test_run_with_error_artifact_no_fail_fast(self, error_artifact_task, waiting_task): + end_task = PromptTask("end") + end_task.add_parents([error_artifact_task, waiting_task]) + workflow = Workflow( + prompt_driver=MockPromptDriver(), tasks=[waiting_task, error_artifact_task, end_task], fail_fast=False + ) + workflow.run() + + assert workflow.output is not None + @staticmethod def _validate_topology_1(workflow): assert len(workflow.tasks) == 4 From 3858cdc50c912606f86e1d401ef96d8fdf18e574 Mon Sep 17 00:00:00 2001 From: Emily Danielson <2302515+emjay07@users.noreply.github.com> Date: Thu, 27 Jun 2024 12:14:11 -0700 Subject: [PATCH 123/145] fixing bug for upserting csv artifacts (#909) --- .../drivers/vector/base_vector_store_driver.py | 2 +- .../vector/test_base_local_vector_store_driver.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 8002101b7..219406d0b 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -54,7 +54,7 @@ def upsert_text_artifact( **kwargs, ) -> str: meta = {} if meta is None else meta - vector_id = utils.str_to_hash(artifact.value) if vector_id is None else vector_id + vector_id = utils.str_to_hash(artifact.to_text()) if vector_id is None else vector_id if self.does_entry_exist(vector_id, namespace): return vector_id diff --git a/tests/unit/drivers/vector/test_base_local_vector_store_driver.py b/tests/unit/drivers/vector/test_base_local_vector_store_driver.py index c34a54d98..6cd1763f6 100644 --- a/tests/unit/drivers/vector/test_base_local_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_base_local_vector_store_driver.py @@ -2,6 +2,7 @@ import pytest from unittest.mock import patch from griptape.artifacts import TextArtifact +from griptape.artifacts.csv_row_artifact import CsvRowArtifact class BaseLocalVectorStoreDriver(ABC): @@ -23,6 +24,20 @@ def test_upsert(self, driver): assert len(driver.entries) == 2 + def test_upsert_csv_row(self, driver): + namespace = driver.upsert_text_artifact(CsvRowArtifact(id="foo1", value={"col": "value"})) + + assert len(driver.entries) == 1 + assert list(driver.entries.keys())[0] == namespace + + driver.upsert_text_artifact(CsvRowArtifact(id="foo1", value={"col": "value"})) + + assert len(driver.entries) == 1 + + driver.upsert_text_artifact(CsvRowArtifact(id="foo2", value={"col": "value2"})) + + assert len(driver.entries) == 2 + def test_upsert_multiple(self, driver): driver.upsert_text_artifacts({"foo": [TextArtifact("foo")], "bar": [TextArtifact("bar")]}) From b93f209e458039fcd546e6dbb90a97869259ec2a Mon Sep 17 00:00:00 2001 From: Vasily Vasinov Date: Thu, 27 Jun 2024 15:31:26 -0600 Subject: [PATCH 124/145] All `futures_executor` fields renamed to `futures_executor_fn` and now accept callables instead of futures (#910) --- CHANGELOG.md | 2 +- .../event_listener/base_event_listener_driver.py | 10 +++++----- griptape/drivers/vector/base_vector_store_driver.py | 8 +++++--- griptape/engines/rag/modules/base_rag_module.py | 6 +++++- .../query/related_query_generation_rag_module.py | 2 +- .../rag/modules/retrieval/text_retrieval_rag_module.py | 2 +- griptape/engines/rag/stages/base_rag_stage.py | 5 ++++- griptape/engines/rag/stages/query_rag_stage.py | 2 +- griptape/engines/rag/stages/retrieval_rag_stage.py | 2 +- griptape/loaders/base_loader.py | 8 +++++--- griptape/structures/workflow.py | 8 +++++--- griptape/tasks/actions_subtask.py | 2 +- griptape/tasks/base_task.py | 6 ++++-- 13 files changed, 39 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3de99e54f..1a4655652 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,7 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. - **BREAKING**: removed `VectorStoreClient.top_n` and `VectorStoreClient.namespace` in favor of `VectorStoreClient.query_params`. - `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. -- Wrapped all future `submit` calls with the `with` block to address future executor shutdown issues. +- **BREAKING**: All `futures_executor` fields renamed to `futures_executor_fn` and now accept callables instead of futures; wrapped all future `submit` calls with the `with` block to address future executor shutdown issues. ### Fixed - `CoherePromptDriver` to properly handle empty history. diff --git a/griptape/drivers/event_listener/base_event_listener_driver.py b/griptape/drivers/event_listener/base_event_listener_driver.py index b6d2d9b12..17a754b65 100644 --- a/griptape/drivers/event_listener/base_event_listener_driver.py +++ b/griptape/drivers/event_listener/base_event_listener_driver.py @@ -1,11 +1,9 @@ from __future__ import annotations - from abc import ABC, abstractmethod from concurrent import futures from logging import Logger - +from typing import Callable from attrs import Factory, define, field - from griptape.events import BaseEvent logger = Logger(__name__) @@ -13,7 +11,9 @@ @define class BaseEventListenerDriver(ABC): - futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + futures_executor_fn: Callable[[], futures.Executor] = field( + default=Factory(lambda: lambda: futures.ThreadPoolExecutor()), kw_only=True + ) batched: bool = field(default=True, kw_only=True) batch_size: int = field(default=10, kw_only=True) @@ -24,7 +24,7 @@ def batch(self) -> list[dict]: return self._batch def publish_event(self, event: BaseEvent | dict, flush: bool = False) -> None: - self.futures_executor.submit(self._safe_try_publish_event, event, flush) + self.futures_executor_fn().submit(self._safe_try_publish_event, event, flush) @abstractmethod def try_publish_event_payload(self, event_payload: dict) -> None: ... diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 219406d0b..2c0962328 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -2,7 +2,7 @@ from abc import ABC, abstractmethod from concurrent import futures from dataclasses import dataclass -from typing import Any +from typing import Any, Callable from typing import Optional from attrs import define, field, Factory from griptape import utils @@ -31,12 +31,14 @@ def to_artifact(self) -> BaseArtifact: return BaseArtifact.from_json(self.meta["artifact"]) # pyright: ignore[reportOptionalSubscript] embedding_driver: BaseEmbeddingDriver = field(kw_only=True, metadata={"serializable": True}) - futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + futures_executor_fn: Callable[[], futures.Executor] = field( + default=Factory(lambda: lambda: futures.ThreadPoolExecutor()), kw_only=True + ) def upsert_text_artifacts( self, artifacts: dict[str, list[TextArtifact]], meta: Optional[dict] = None, **kwargs ) -> None: - with self.futures_executor as executor: + with self.futures_executor_fn() as executor: utils.execute_futures_dict( { namespace: executor.submit(self.upsert_text_artifact, a, namespace, meta, **kwargs) diff --git a/griptape/engines/rag/modules/base_rag_module.py b/griptape/engines/rag/modules/base_rag_module.py index 958cbd46c..8e9b42e93 100644 --- a/griptape/engines/rag/modules/base_rag_module.py +++ b/griptape/engines/rag/modules/base_rag_module.py @@ -1,5 +1,7 @@ from abc import ABC from concurrent import futures +from typing import Callable + from attrs import define, field, Factory from griptape.utils import PromptStack @@ -7,7 +9,9 @@ @define(kw_only=True) class BaseRagModule(ABC): - futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor())) + futures_executor_fn: Callable[[], futures.Executor] = field( + default=Factory(lambda: lambda: futures.ThreadPoolExecutor()) + ) def generate_query_prompt_stack(self, system_prompt: str, query: str) -> PromptStack: return PromptStack( diff --git a/griptape/engines/rag/modules/query/related_query_generation_rag_module.py b/griptape/engines/rag/modules/query/related_query_generation_rag_module.py index 9f610c0e5..138e5f034 100644 --- a/griptape/engines/rag/modules/query/related_query_generation_rag_module.py +++ b/griptape/engines/rag/modules/query/related_query_generation_rag_module.py @@ -18,7 +18,7 @@ class RelatedQueryGenerationRagModule(BaseQueryRagModule): def run(self, context: RagContext) -> list[str]: system_prompt = self.generate_system_template(context.initial_query) - with self.futures_executor as executor: + with self.futures_executor_fn() as executor: results = utils.execute_futures_list( [ executor.submit( diff --git a/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py index 1434b9880..9c756bfea 100644 --- a/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py +++ b/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py @@ -21,7 +21,7 @@ def run(self, context: RagContext) -> Sequence[TextArtifact]: all_queries = [context.initial_query] + context.alternative_queries namespace = self.namespace or context.namespace - with self.futures_executor as executor: + with self.futures_executor_fn() as executor: results = utils.execute_futures_list( [ executor.submit(self.vector_store_driver.query, query, self.top_n, namespace, False) diff --git a/griptape/engines/rag/stages/base_rag_stage.py b/griptape/engines/rag/stages/base_rag_stage.py index 786975b82..ca19e1bb4 100644 --- a/griptape/engines/rag/stages/base_rag_stage.py +++ b/griptape/engines/rag/stages/base_rag_stage.py @@ -1,12 +1,15 @@ from abc import ABC, abstractmethod from concurrent import futures +from typing import Callable from attrs import define, field, Factory from griptape.engines.rag import RagContext @define(kw_only=True) class BaseRagStage(ABC): - futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor())) + futures_executor_fn: Callable[[], futures.Executor] = field( + default=Factory(lambda: lambda: futures.ThreadPoolExecutor()) + ) @abstractmethod def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/stages/query_rag_stage.py b/griptape/engines/rag/stages/query_rag_stage.py index 8c93ad763..c2216aea8 100644 --- a/griptape/engines/rag/stages/query_rag_stage.py +++ b/griptape/engines/rag/stages/query_rag_stage.py @@ -14,7 +14,7 @@ class QueryRagStage(BaseRagStage): def run(self, context: RagContext) -> RagContext: logging.info(f"QueryStage: running {len(self.query_generation_modules)} query generation modules in parallel") - with self.futures_executor as executor: + with self.futures_executor_fn() as executor: results = utils.execute_futures_list( [executor.submit(r.run, context) for r in self.query_generation_modules] ) diff --git a/griptape/engines/rag/stages/retrieval_rag_stage.py b/griptape/engines/rag/stages/retrieval_rag_stage.py index 77443fb2f..cbc90a43e 100644 --- a/griptape/engines/rag/stages/retrieval_rag_stage.py +++ b/griptape/engines/rag/stages/retrieval_rag_stage.py @@ -19,7 +19,7 @@ class RetrievalRagStage(BaseRagStage): def run(self, context: RagContext) -> RagContext: logging.info(f"RetrievalStage: running {len(self.retrieval_modules)} retrieval modules in parallel") - with self.futures_executor as executor: + with self.futures_executor_fn() as executor: results = utils.execute_futures_list([executor.submit(r.run, context) for r in self.retrieval_modules]) # flatten the list of lists diff --git a/griptape/loaders/base_loader.py b/griptape/loaders/base_loader.py index 40121067c..00fbf07ec 100644 --- a/griptape/loaders/base_loader.py +++ b/griptape/loaders/base_loader.py @@ -2,7 +2,7 @@ from abc import ABC, abstractmethod from concurrent import futures -from typing import Any, Optional +from typing import Any, Optional, Callable from collections.abc import Mapping, Sequence from attrs import define, field, Factory @@ -14,7 +14,9 @@ @define class BaseLoader(ABC): - futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + futures_executor_fn: Callable[[], futures.Executor] = field( + default=Factory(lambda: lambda: futures.ThreadPoolExecutor()), kw_only=True + ) encoding: Optional[str] = field(default=None, kw_only=True) @abstractmethod @@ -27,7 +29,7 @@ def load_collection( # to avoid duplicate work. sources_by_key = {self.to_key(source): source for source in sources} - with self.futures_executor as executor: + with self.futures_executor_fn() as executor: return execute_futures_dict( {key: executor.submit(self.load, source, *args, **kwargs) for key, source in sources_by_key.items()} ) diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index dd76597d8..7e65fbf5a 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -1,7 +1,7 @@ from __future__ import annotations import concurrent.futures as futures from graphlib import TopologicalSorter -from typing import Any, Optional +from typing import Any, Optional, Callable from attrs import define, field, Factory from griptape.artifacts import ErrorArtifact from griptape.structures import Structure @@ -11,7 +11,9 @@ @define class Workflow(Structure): - futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + futures_executor_fn: Callable[[], futures.Executor] = field( + default=Factory(lambda: lambda: futures.ThreadPoolExecutor()), kw_only=True + ) @property def output_task(self) -> Optional[BaseTask]: @@ -103,7 +105,7 @@ def try_run(self, *args) -> Workflow: for task in ordered_tasks: if task.can_execute(): - future = self.futures_executor.submit(task.execute) + future = self.futures_executor_fn().submit(task.execute) futures_list[future] = task # Wait for all tasks to complete diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index ae3893abb..fa2aff822 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -119,7 +119,7 @@ def run(self) -> BaseArtifact: return ErrorArtifact("no tool output") def execute_actions(self, actions: list[Action]) -> list[tuple[str, BaseArtifact]]: - with self.futures_executor as executor: + with self.futures_executor_fn() as executor: results = utils.execute_futures_dict({a.tag: executor.submit(self.execute_action, a) for a in actions}) return [r for r in results.values()] diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index 8a45cb14e..be5ff94d8 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -4,7 +4,7 @@ from abc import ABC, abstractmethod from concurrent import futures from enum import Enum -from typing import TYPE_CHECKING, Any, Optional +from typing import TYPE_CHECKING, Any, Optional, Callable from attrs import define, field, Factory @@ -33,7 +33,9 @@ class State(Enum): output: Optional[BaseArtifact] = field(default=None, init=False) structure: Optional[Structure] = field(default=None, init=False) context: dict[str, Any] = field(factory=dict, kw_only=True) - futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + futures_executor_fn: Callable[[], futures.Executor] = field( + default=Factory(lambda: lambda: futures.ThreadPoolExecutor()), kw_only=True + ) @property @abstractmethod From 3ee8c3556a3bcd270088e210ea4fdc12bbf490ab Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Fri, 28 Jun 2024 11:50:03 -0500 Subject: [PATCH 125/145] Add `BooleanArtifact` (#905) --- CHANGELOG.md | 1 + docs/griptape-framework/data/artifacts.md | 19 ++++++---- griptape/artifacts/__init__.py | 2 ++ griptape/artifacts/boolean_artifact.py | 31 ++++++++++++++++ tests/unit/artifacts/test_boolean_artifact.py | 35 +++++++++++++++++++ 5 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 griptape/artifacts/boolean_artifact.py create mode 100644 tests/unit/artifacts/test_boolean_artifact.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a4655652..33824f753 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `VectorStoreClient.query_params` dict for custom query params. - `VectorStoreClient.process_query_output_fn` for custom query output processing logic. - Parameter `fail_fast` to `Structure`. +- `BooleanArtifact` for handling boolean values. ### Changed - **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. diff --git a/docs/griptape-framework/data/artifacts.md b/docs/griptape-framework/data/artifacts.md index 5b69b120a..6fe77574b 100644 --- a/docs/griptape-framework/data/artifacts.md +++ b/docs/griptape-framework/data/artifacts.md @@ -1,11 +1,11 @@ ## Overview -**Artifacts** are used for passing different types of data between Griptape components. All tools return artifacts that are later consumed by tasks and task memory. +**[Artifacts](../../reference/griptape/artifacts/base_artifact.md)** are used for passing different types of data between Griptape components. All tools return artifacts that are later consumed by tasks and task memory. Artifacts make sure framework components enforce contracts when passing and consuming data. ## TextArtifact -Used for passing text data of arbitrary size around the framework. It can be used to count tokens with [token_count()](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.token_count) with a tokenizer. +A [TextArtifact](../../reference/griptape/artifacts/text_artifact.md) for passing text data of arbitrary size around the framework. It can be used to count tokens with [token_count()](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.token_count) with a tokenizer. It can also be used to generate a text embedding with [generate_embedding()](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.generate_embedding) and access it with [embedding](../../reference/griptape/artifacts/text_artifact.md#griptape.artifacts.text_artifact.TextArtifact.embedding). @@ -13,20 +13,20 @@ and access it with [embedding](../../reference/griptape/artifacts/text_artifact. ## CsvRowArtifact -Used for passing structured row data around the framework. It inherits from [TextArtifact](../../reference/griptape/artifacts/text_artifact.md) and overrides the +A [CsvRowArtifact](../../reference/griptape/artifacts/csv_row_artifact.md) for passing structured row data around the framework. It inherits from [TextArtifact](../../reference/griptape/artifacts/text_artifact.md) and overrides the [to_text()](../../reference/griptape/artifacts/csv_row_artifact.md#griptape.artifacts.csv_row_artifact.CsvRowArtifact.to_text) method, which always returns a valid CSV row. ## InfoArtifact -Used for passing short notifications back to the LLM without task memory storing them. +An [InfoArtifact](../../reference/griptape/artifacts/info_artifact.md) for passing short notifications back to the LLM without task memory storing them. ## ErrorArtifact -Used for passing errors back to the LLM without task memory storing them. +An [ErrorArtifact](../../reference/griptape/artifacts/error_artifact.md) is used for passing errors back to the LLM without task memory storing them. ## BlobArtifact -Used for passing binary large objects (blobs) back to the LLM. +A [BlobArtifact](../../reference/griptape/artifacts/blob_artifact.md) for passing binary large objects (blobs) back to the LLM. Treat it as a way to return unstructured data, such as images, videos, audio, and other files back from tools. Each blob has a [name](../../reference/griptape/artifacts/base_artifact.md#griptape.artifacts.base_artifact.BaseArtifact.name) and [dir](../../reference/griptape/artifacts/blob_artifact.md#griptape.artifacts.blob_artifact.BlobArtifact.dir_name) to uniquely identify stored objects. @@ -40,3 +40,10 @@ An [ImageArtifact](../../reference/griptape/artifacts/image_artifact.md) is used ## AudioArtifact An [AudioArtifact](../../reference/griptape/artifacts/audio_artifact.md) allows the Framework to interact with audio content. An Audio Artifact includes binary audio content as well as metadata like format, duration, and prompt and model information for audio returned generative models. It inherits from [BlobArtifact](#blobartifact). + +## BooleanArtifact + +A [BooleanArtifact](../../reference/griptape/artifacts/boolean_artifact.md) is used for passing boolean values around the framework. + +!!! info + Any object passed on init to `BooleanArtifact` will be coerced into a `bool` type. This might lead to unintended behavior: `BooleanArtifact("False").value is True`. Use [BooleanArtifact.parse_bool](../../reference/griptape/artifacts/boolean_artifact.md#griptape.artifacts.boolean_artifact.BooleanArtifact.parse_bool) to convert case-insensitive string literal values `"True"` and `"False"` into a `BooleanArtifact`: `BooleanArtifact.parse_bool("False").value is False`. diff --git a/griptape/artifacts/__init__.py b/griptape/artifacts/__init__.py index e57177ac4..00c19519f 100644 --- a/griptape/artifacts/__init__.py +++ b/griptape/artifacts/__init__.py @@ -3,6 +3,7 @@ from .info_artifact import InfoArtifact from .text_artifact import TextArtifact from .blob_artifact import BlobArtifact +from .boolean_artifact import BooleanArtifact from .csv_row_artifact import CsvRowArtifact from .list_artifact import ListArtifact from .media_artifact import MediaArtifact @@ -16,6 +17,7 @@ "InfoArtifact", "TextArtifact", "BlobArtifact", + "BooleanArtifact", "CsvRowArtifact", "ListArtifact", "MediaArtifact", diff --git a/griptape/artifacts/boolean_artifact.py b/griptape/artifacts/boolean_artifact.py new file mode 100644 index 000000000..a7a84da18 --- /dev/null +++ b/griptape/artifacts/boolean_artifact.py @@ -0,0 +1,31 @@ +from __future__ import annotations +from typing import Any, Union +from attrs import define, field +from griptape.artifacts import BaseArtifact + + +@define +class BooleanArtifact(BaseArtifact): + value: bool = field(converter=bool, metadata={"serializable": True}) + meta: dict[str, Any] = field(factory=dict, kw_only=True, metadata={"serializable": True}) + + @classmethod + def parse_bool(cls, value: Union[str, bool]) -> BooleanArtifact: + """ + Convert a string literal or bool to a BooleanArtifact. The string must be either "true" or "false" with any casing. + """ + if value is not None: + if isinstance(value, str): + if value.lower() == "true": + return BooleanArtifact(True) + elif value.lower() == "false": + return BooleanArtifact(False) + elif isinstance(value, bool): + return BooleanArtifact(value) + raise ValueError(f"Cannot convert '{value}' to BooleanArtifact") + + def __add__(self, other: BaseArtifact) -> BooleanArtifact: + raise ValueError("Cannot add BooleanArtifact with other artifacts") + + def __eq__(self, value: object) -> bool: + return self.value is value diff --git a/tests/unit/artifacts/test_boolean_artifact.py b/tests/unit/artifacts/test_boolean_artifact.py new file mode 100644 index 000000000..bcad67673 --- /dev/null +++ b/tests/unit/artifacts/test_boolean_artifact.py @@ -0,0 +1,35 @@ +import pytest +from griptape.artifacts import BooleanArtifact + + +class TestBooleanArtifact: + def test_parse_bool(self): + assert BooleanArtifact.parse_bool("true").value is True + assert BooleanArtifact.parse_bool("false").value is False + assert BooleanArtifact.parse_bool("True").value is True + assert BooleanArtifact.parse_bool("False").value is False + + with pytest.raises(ValueError): + BooleanArtifact.parse_bool("foo") + + with pytest.raises(ValueError): + BooleanArtifact.parse_bool(None) + + assert BooleanArtifact.parse_bool(True).value is True + assert BooleanArtifact.parse_bool(False).value is False + + def test_add(self): + with pytest.raises(ValueError): + BooleanArtifact(True) + BooleanArtifact(True) + + def test_value_type_conversion(self): + assert BooleanArtifact(1).value is True + assert BooleanArtifact(0).value is False + assert BooleanArtifact(True).value is True + assert BooleanArtifact(False).value is False + assert BooleanArtifact("true").value is True + assert BooleanArtifact("false").value is True + assert BooleanArtifact([1]).value is True + assert BooleanArtifact([]).value is False + assert BooleanArtifact(False) == False + assert BooleanArtifact(True) == True From becdc1dfeffe9883190a4b8e1ba9a054eb4dd7fd Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 1 Jul 2024 17:23:23 -0500 Subject: [PATCH 126/145] Add pull request template (#921) --- .github/pull_request_template.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..3a3496ef6 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,8 @@ +## Describe your changes + +## Issue ticket number and link + +## Checklist before requesting a review +- [ ] I have performed a self-review of my code. +- [ ] I have added thorough tests. +- [ ] Is this a notable change? If so, please update the [changelog](https://github.com/griptape-ai/griptape/blob/dev/CHANGELOG.md). From 1cd558852372aa6ff6a5a25a73fccf4f049fc6f3 Mon Sep 17 00:00:00 2001 From: CJ Kindel Date: Mon, 1 Jul 2024 15:48:59 -0700 Subject: [PATCH 127/145] Fix missing parent error handling in Workflow task insertion (#856) Co-authored-by: Collin Dutter --- CHANGELOG.md | 1 + griptape/structures/workflow.py | 10 +++++-- tests/unit/structures/test_workflow.py | 38 ++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33824f753..ddb48c4f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -133,6 +133,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Streaming not working when using deprecated `Structure.stream` field. - Raw Tool output being lost when being executed by ActionsSubtask. - Re-order Workflow tasks on every task execution wave. +- `Workflow.insert_task()` enumerates by parent id equality, opposed to object equality. - Web Loader to catch Exceptions and properly return an ErrorArtifact. - Conversation Memory entry only added if `output_task.output` is not `None` on all `Structures` - `TextArtifacts` contained in `ListArtifact` returned by `WebSearch.search` to properly formatted stringified JSON. diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 7e65fbf5a..204650c41 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -87,9 +87,13 @@ def insert_task( if task.id not in parent_task.child_ids: parent_task.child_ids.append(task.id) - parent_index = self.tasks.index(parent_task) - if parent_index > last_parent_index: - last_parent_index = parent_index + try: + parent_index = self.tasks.index(parent_task) + except ValueError: + raise ValueError(f"Parent task {parent_task.id} not found in workflow.") + else: + if parent_index > last_parent_index: + last_parent_index = parent_index # Insert the new task once, just after the last parent task self.tasks.insert(last_parent_index + 1, task) diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index 4d44fceb8..2b89684d3 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -351,6 +351,44 @@ def test_run_topology_1_imperative_insert(self): self._validate_topology_1(workflow) + def test_run_topology_1_missing_parent(self): + task1 = PromptTask("test1", id="task1") + task2 = PromptTask("test2", id="task2") + task3 = PromptTask("test3", id="task3") + task4 = PromptTask("test4", id="task4") + workflow = Workflow(prompt_driver=MockPromptDriver()) + + # task1 never added to workflow + workflow + task4 + with pytest.raises(ValueError): + workflow.insert_tasks(task1, [task2, task3], task4) + + def test_run_topology_1_id_equality(self): + task1 = PromptTask("test1", id="task1") + task2 = PromptTask("test2", id="task2") + task3 = PromptTask("test3", id="task3") + task4 = PromptTask("test4", id="task4") + workflow = Workflow(prompt_driver=MockPromptDriver()) + + # task4 never added to workflow + workflow + task1 + workflow.insert_tasks(task1, [task2, task3], task4) + + with pytest.raises(ValueError): + workflow.run() + + def test_run_topology_1_object_equality(self): + task1 = PromptTask("test1", id="task1") + task2 = PromptTask("test2", id="task2") + task3 = PromptTask("test3", id="task3") + task4 = PromptTask("test4", id="task4") + workflow = Workflow(prompt_driver=MockPromptDriver()) + + workflow + task1 + workflow + task4 + with pytest.raises(ValueError): + workflow.insert_tasks(PromptTask("test1", id="task1"), [task2, task3], task4) + def test_run_topology_2_declarative_parents(self): workflow = Workflow( prompt_driver=MockPromptDriver(), From f8be8ee6078938fa51838fd658bf1d0acae6f861 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Mon, 1 Jul 2024 16:35:00 -0700 Subject: [PATCH 128/145] Ensure Executor.shutdown() called after task submission in BaseEventListenerDriver.publish_event() (#919) --- .../event_listener/base_event_listener_driver.py | 3 ++- .../test_base_event_listener_driver.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/griptape/drivers/event_listener/base_event_listener_driver.py b/griptape/drivers/event_listener/base_event_listener_driver.py index 17a754b65..b433ed755 100644 --- a/griptape/drivers/event_listener/base_event_listener_driver.py +++ b/griptape/drivers/event_listener/base_event_listener_driver.py @@ -24,7 +24,8 @@ def batch(self) -> list[dict]: return self._batch def publish_event(self, event: BaseEvent | dict, flush: bool = False) -> None: - self.futures_executor_fn().submit(self._safe_try_publish_event, event, flush) + with self.futures_executor_fn() as executor: + executor.submit(self._safe_try_publish_event, event, flush) @abstractmethod def try_publish_event_payload(self, event_payload: dict) -> None: ... diff --git a/tests/unit/drivers/event_listener/test_base_event_listener_driver.py b/tests/unit/drivers/event_listener/test_base_event_listener_driver.py index 6d33dd2a0..383c0be89 100644 --- a/tests/unit/drivers/event_listener/test_base_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_base_event_listener_driver.py @@ -1,8 +1,20 @@ +from unittest.mock import MagicMock from tests.mocks.mock_event import MockEvent from tests.mocks.mock_event_listener_driver import MockEventListenerDriver class TestBaseEventListenerDriver: + def test_publish_event(self): + executor = MagicMock() + executor.__enter__.return_value = executor + driver = MockEventListenerDriver(futures_executor_fn=lambda: executor) + + driver.publish_event(MockEvent().to_dict()) + + executor.__enter__.assert_called_once() + executor.submit.assert_called_once() + executor.__exit__.assert_called_once() + def test__safe_try_publish_event(self): driver = MockEventListenerDriver(batched=False) From db9051d107d47d6df9756211d2f80dba7920d19c Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 1 Jul 2024 19:27:00 -0500 Subject: [PATCH 129/145] `typos` to dev dependencies to catch typos in code/docs. (#923) --- .github/workflows/code-checks.yml | 13 ++++++++++ .pre-commit-config.yaml | 7 ++++++ CHANGELOG.md | 1 + Makefile | 6 ++++- _typos.toml | 8 ++++++ .../drivers/prompt-drivers.md | 2 +- .../drivers/web-search-drivers.md | 2 +- docs/griptape-framework/misc/tokenizers.md | 2 +- docs/griptape-framework/structures/tasks.md | 2 +- .../file_manager/base_file_manager_driver.py | 2 +- griptape/drivers/prompt/base_prompt_driver.py | 2 +- poetry.lock | 25 ++++++++++++++++--- pyproject.toml | 1 + .../test_amazon_s3_file_manager_driver.py | 4 +-- .../test_local_file_manager_driver.py | 4 +-- .../test_redis_conversation_memory_driver.py | 2 +- .../vector/test_redis_vector_store_driver.py | 1 - tests/unit/structures/test_workflow.py | 2 +- 18 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 _typos.toml diff --git a/.github/workflows/code-checks.yml b/.github/workflows/code-checks.yml index 03b1f0a17..51ffc543f 100644 --- a/.github/workflows/code-checks.yml +++ b/.github/workflows/code-checks.yml @@ -70,3 +70,16 @@ jobs: verbose: true env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + spell-check: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: [ "3.12" ] + steps: + - name: Checkout actions + uses: actions/checkout@v3 + - name: Init environment + uses: ./.github/actions/init-environment + - name: Run linter + run: make check/spell diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a54182464..33a90d824 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,3 +25,10 @@ repos: entry: make check/types language: system types: [python] +- repo: local + hooks: + - id: typos + name: Typos + entry: make check/spell + language: system + types: [python] diff --git a/CHANGELOG.md b/CHANGELOG.md index ddb48c4f5..273fe5429 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `VectorStoreClient.process_query_output_fn` for custom query output processing logic. - Parameter `fail_fast` to `Structure`. - `BooleanArtifact` for handling boolean values. +- `typos` to dev dependencies to catch typos in code/docs. ### Changed - **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. diff --git a/Makefile b/Makefile index b4f3d0068..57d1869ce 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ format: ## Format project. @poetry run ruff format . .PHONY: check -check: check/format check/lint check/types ## Run all checks. +check: check/format check/lint check/types check/spell ## Run all checks. .PHONY: check/format check/format: @@ -53,6 +53,10 @@ check/lint: .PHONY: check/types check/types: @poetry run pyright griptape/ + +.PHONY: check/spell +check/spell: + @poetry run typos .DEFAULT_GOAL := help .PHONY: help diff --git a/_typos.toml b/_typos.toml new file mode 100644 index 000000000..1819b51ef --- /dev/null +++ b/_typos.toml @@ -0,0 +1,8 @@ +[default.extend-words] +# Don't correct the state ND +ND = "ND" +# Don't correct pirates using acronyms +mornin = "mornin" + +[files] +extend-exclude = ["docs/assets", "tests/resources/"] diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 96a1be4e1..9d5b6fc4a 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -57,7 +57,7 @@ print(result.value) Griptape offers the following Prompt Drivers for interacting with LLMs. !!! warning - When overriding a default Prompt Driver, take care to ensure you've updated the Structure's configured Embedding Driver as well. If Task Memory isn't needed, you can avoid compatability issues by setting `task_memory=None` to disable Task Memory in your Structure. + When overriding a default Prompt Driver, take care to ensure you've updated the Structure's configured Embedding Driver as well. If Task Memory isn't needed, you can avoid compatibility issues by setting `task_memory=None` to disable Task Memory in your Structure. ### OpenAI Chat diff --git a/docs/griptape-framework/drivers/web-search-drivers.md b/docs/griptape-framework/drivers/web-search-drivers.md index 332ce2c2b..18ba1e21c 100644 --- a/docs/griptape-framework/drivers/web-search-drivers.md +++ b/docs/griptape-framework/drivers/web-search-drivers.md @@ -2,7 +2,7 @@ Web Search Drivers can be used to search for links from a search query. They are used by [WebSearch](../../reference/griptape/tools/web_search/tool.md) to provide its functionality. All Web Search Drivers implement the following methods: -* `search()` searchs the web and returns a [ListArtifact](../../reference/griptape/artifacts/list_artifact.md) that contains JSON-serializable [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s with the search results. +* `search()` searches the web and returns a [ListArtifact](../../reference/griptape/artifacts/list_artifact.md) that contains JSON-serializable [TextArtifact](../../reference/griptape/artifacts/text_artifact.md)s with the search results. ## Google diff --git a/docs/griptape-framework/misc/tokenizers.md b/docs/griptape-framework/misc/tokenizers.md index 1920e912e..a6df1c388 100644 --- a/docs/griptape-framework/misc/tokenizers.md +++ b/docs/griptape-framework/misc/tokenizers.md @@ -1,7 +1,7 @@ ## Overview Tokenizers are used throughout Griptape to calculate the number of [tokens](https://learn.microsoft.com/en-us/semantic-kernel/prompt-engineering/tokens) in a piece of text. -They are particulary useful for ensuring that the LLM token limits are not exceeded. +They are particularly useful for ensuring that the LLM token limits are not exceeded. Tokenizers are a low level abstraction that you will rarely interact with directly. diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index 6bb517fa2..e8f75b453 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -516,7 +516,7 @@ engine = VariationImageGenerationEngine( with open("tests/resources/mountain.png", "rb") as f: image_artifact = ImageLoader().load(f.read()) -# Instatiate a pipeline. +# Instantiate a pipeline. pipeline = Pipeline() # Add a VariationImageGenerationTask to the pipeline. diff --git a/griptape/drivers/file_manager/base_file_manager_driver.py b/griptape/drivers/file_manager/base_file_manager_driver.py index 56f19b3cc..562d8be4c 100644 --- a/griptape/drivers/file_manager/base_file_manager_driver.py +++ b/griptape/drivers/file_manager/base_file_manager_driver.py @@ -12,7 +12,7 @@ class BaseFileManagerDriver(ABC): Attributes: default_loader: The default loader to use for loading file contents into artifacts. - loaders: Dictionary of file extension specifc loaders to use for loading file contents into artifacts. + loaders: Dictionary of file extension specific loaders to use for loading file contents into artifacts. """ default_loader: loaders.BaseLoader = field(default=Factory(lambda: loaders.BlobLoader()), kw_only=True) diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index 45f95d544..90e5259ac 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -16,7 +16,7 @@ @define(kw_only=True) class BasePromptDriver(SerializableMixin, ExponentialBackoffMixin, ABC): - """Base class for Prompt Drivers. + """Base class for the Prompt Drivers. Attributes: temperature: The temperature to use for the completion. diff --git a/poetry.lock b/poetry.lock index e030c8906..768a4e8ae 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -3360,7 +3360,6 @@ description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83"}, {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, ] @@ -4598,7 +4597,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -5979,6 +5977,25 @@ files = [ {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] +[[package]] +name = "typos" +version = "1.22.9" +description = "Source Code Spelling Correction" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typos-1.22.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6221400b82554f853e1d1a0f26bcfddf9f36008114d3441c566e1b5edf20d27d"}, + {file = "typos-1.22.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a57b5f0acd1596034fdc333f94d4713adbc181c545fb526cf2119d2af4c007ec"}, + {file = "typos-1.22.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77e2d9dfee24cccf177b09d8ace6d6012fa8c453aa092d869426bfef3dd8c67e"}, + {file = "typos-1.22.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38886031f4570d546b63ec112aed6b323762022ca5cc64d52537724a1529257"}, + {file = "typos-1.22.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8577b482256538822f76c9825d36f76b7b1e7cbccf2842279a7b46f0494796a5"}, + {file = "typos-1.22.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:63f7ae86eb7dccc43845bf0ef72a3746b1022889a178809c028f809081c6f20d"}, + {file = "typos-1.22.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5f290b85f1dddc875d4efa0b22802413f86532b99fa0ac2cb8d2e70eda68acfd"}, + {file = "typos-1.22.9-py3-none-win32.whl", hash = "sha256:76a58b1d54ee00ef8d90c3166b149e70d84b0414617a34abf5ded1db76feecef"}, + {file = "typos-1.22.9-py3-none-win_amd64.whl", hash = "sha256:53f31a9c0d321132f680ab92d80f7c520e163c53c9042fb009feaa91d9b4a7c4"}, + {file = "typos-1.22.9.tar.gz", hash = "sha256:c7b5feada41ce26e34eea1145141887257e59384d0ceea00f0f03349335ff688"}, +] + [[package]] name = "tzdata" version = "2024.1" @@ -6395,4 +6412,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "ce26764ee2c4a9a99d24ef4afc7efa6aa894a7560a725388ff24db15f6014e9a" +content-hash = "937d5e870407a493038178b3060c663feb9a1b6e6fc16e55fa380a18d02b0c80" diff --git a/pyproject.toml b/pyproject.toml index 29d4fda44..7fc62d6af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -174,6 +174,7 @@ ruff = "^0.4.6" pyright = "^1.1.363" pre-commit = "^3.7.1" boto3-stubs = {extras = ["bedrock", "iam", "opensearch", "s3", "sagemaker"], version = "^1.34.105"} +typos = "^1.22.9" [tool.poetry.group.docs] diff --git a/tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py b/tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py index 285cf9510..8d1693ade 100644 --- a/tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py +++ b/tests/unit/drivers/file_manager/test_amazon_s3_file_manager_driver.py @@ -84,7 +84,7 @@ def test_validate_workdir(self, workdir, session, bucket): @pytest.mark.parametrize( "workdir,path,expected", [ - # Valid non-empty directories (witout trailing slash) + # Valid non-empty directories (without trailing slash) ("/", "", ["foo", "foo.txt", "foo-empty", "resources"]), ("/", "foo", ["bar", "bar.txt", "bar-empty"]), ("/", "foo/bar", ["baz.txt", "baz-empty"]), @@ -111,7 +111,7 @@ def test_validate_workdir(self, workdir, session, bucket): ("/./..", "bar/..", ["foo", "foo.txt", "foo-empty", "resources"]), ("/./..", "foo/.", ["bar", "bar.txt", "bar-empty"]), ("/./..", "foo/bar/.", ["baz.txt", "baz-empty"]), - # Empty folders (witout trailing slash) + # Empty folders (without trailing slash) ("/", "foo-empty", []), ("/", "foo/bar-empty", []), ("/", "foo/bar/baz-empty", []), diff --git a/tests/unit/drivers/file_manager/test_local_file_manager_driver.py b/tests/unit/drivers/file_manager/test_local_file_manager_driver.py index 236281739..b3f4ec561 100644 --- a/tests/unit/drivers/file_manager/test_local_file_manager_driver.py +++ b/tests/unit/drivers/file_manager/test_local_file_manager_driver.py @@ -57,7 +57,7 @@ def test_validate_workdir(self): @pytest.mark.parametrize( "workdir,path,expected", [ - # Valid non-empty directories (witout trailing slash) + # Valid non-empty directories (without trailing slash) ("/", "", ["foo", "foo.txt", "foo-empty", "resources"]), ("/", "foo", ["bar", "bar.txt", "bar-empty"]), ("/", "foo/bar", ["baz.txt", "baz-empty"]), @@ -84,7 +84,7 @@ def test_validate_workdir(self): ("/./..", "bar/..", ["foo", "foo.txt", "foo-empty", "resources"]), ("/./..", "foo/.", ["bar", "bar.txt", "bar-empty"]), ("/./..", "foo/bar/.", ["baz.txt", "baz-empty"]), - # Empty folders (witout trailing slash) + # Empty folders (without trailing slash) ("/", "foo-empty", []), ("/", "foo/bar-empty", []), ("/", "foo/bar/baz-empty", []), diff --git a/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py index dee840508..13f75d464 100644 --- a/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py +++ b/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py @@ -5,7 +5,7 @@ TEST_CONVERSATION = '{"type": "ConversationMemory", "runs": [{"type": "Run", "id": "729ca6be5d79433d9762eb06dfd677e2", "input": "Hi There, Hello", "output": "Hello! How can I assist you today?"}], "max_runs": 2}' CONVERSATION_ID = "117151897f344ff684b553d0655d8f39" -INDEX = "griptape_converstaion" +INDEX = "griptape_conversation" HOST = "127.0.0.1" PORT = 6379 PASSWORD = "" diff --git a/tests/unit/drivers/vector/test_redis_vector_store_driver.py b/tests/unit/drivers/vector/test_redis_vector_store_driver.py index 3c98180e7..18759a2d7 100644 --- a/tests/unit/drivers/vector/test_redis_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_redis_vector_store_driver.py @@ -1,6 +1,5 @@ from unittest.mock import MagicMock import pytest -import redis from tests.mocks.mock_embedding_driver import MockEmbeddingDriver from griptape.drivers import RedisVectorStoreDriver diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index 2b89684d3..bf55e852f 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -683,7 +683,7 @@ def test_output_task(self): # task4 is the final task, but its defined at index 0 workflow = Workflow(prompt_driver=MockPromptDriver(), tasks=[task4, task1, task2, task3]) - # ouput_task topologically should be task4 + # output_task topologically should be task4 assert task4 == workflow.output_task def test_to_graph(self): From 2dcfe2d55c06fcf0c53ae259aae8c393019d46ef Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 2 Jul 2024 09:48:39 -0500 Subject: [PATCH 130/145] Refactor prompt stack (#861) --- CHANGELOG.md | 26 ++++ README.md | 2 +- .../drivers/prompt-drivers.md | 24 ++-- docs/griptape-framework/misc/events.md | 8 +- docs/griptape-framework/structures/agents.md | 2 +- docs/griptape-framework/structures/tasks.md | 27 +++- griptape/common/__init__.py | 23 +++ griptape/common/prompt_stack/__init__.py | 0 .../common/prompt_stack/contents/__init__.py | 0 .../contents/base_delta_message_content.py | 12 ++ .../contents/base_message_content.py | 31 ++++ .../contents/image_message_content.py | 17 +++ .../contents/text_delta_message_content.py | 9 ++ .../contents/text_message_content.py | 20 +++ .../common/prompt_stack/messages/__init__.py | 0 .../prompt_stack/messages/base_message.py | 44 ++++++ .../prompt_stack/messages/delta_message.py | 15 ++ .../common/prompt_stack/messages/message.py | 38 +++++ griptape/common/prompt_stack/prompt_stack.py | 56 ++++++++ griptape/config/google_structure_config.py | 4 +- .../prompt/amazon_bedrock_prompt_driver.py | 78 ++++++++--- ...mazon_sagemaker_jumpstart_prompt_driver.py | 61 +++++--- .../drivers/prompt/anthropic_prompt_driver.py | 118 +++++++++++----- .../prompt/azure_openai_chat_prompt_driver.py | 2 +- griptape/drivers/prompt/base_prompt_driver.py | 101 +++++++++----- .../drivers/prompt/cohere_prompt_driver.py | 81 ++++++++--- .../drivers/prompt/dummy_prompt_driver.py | 17 ++- .../drivers/prompt/google_prompt_driver.py | 108 ++++++++++---- .../prompt/huggingface_hub_prompt_driver.py | 43 ++++-- .../huggingface_pipeline_prompt_driver.py | 44 +++--- .../drivers/prompt/ollama_prompt_driver.py | 38 ++++- .../prompt/openai_chat_prompt_driver.py | 132 +++++++++++++----- .../extraction/csv_extraction_engine.py | 11 +- .../extraction/json_extraction_engine.py | 11 +- .../engines/rag/modules/base_rag_module.py | 7 +- .../prompt_generation_rag_module.py | 8 +- .../engines/summary/prompt_summary_engine.py | 24 ++-- griptape/events/base_prompt_event.py | 1 - griptape/events/finish_prompt_event.py | 3 + griptape/events/start_prompt_event.py | 3 +- .../structure/base_conversation_memory.py | 18 +-- .../memory/structure/conversation_memory.py | 6 +- griptape/memory/structure/run.py | 5 +- .../structure/summary_conversation_memory.py | 12 +- griptape/schemas/base_schema.py | 4 +- griptape/structures/agent.py | 21 ++- griptape/structures/pipeline.py | 7 +- griptape/structures/workflow.py | 7 +- griptape/tasks/prompt_task.py | 69 +++++++-- griptape/tasks/toolkit_task.py | 12 +- .../tokenizers/amazon_bedrock_tokenizer.py | 1 + griptape/tokenizers/huggingface_tokenizer.py | 1 + griptape/tokenizers/openai_tokenizer.py | 7 +- griptape/tokenizers/voyageai_tokenizer.py | 7 +- .../prompt_image_generation_client/tool.py | 9 +- griptape/utils/__init__.py | 2 - griptape/utils/conversation.py | 4 +- griptape/utils/prompt_stack.py | 48 ------- tests/mocks/mock_failing_prompt_driver.py | 26 ++-- tests/mocks/mock_prompt_driver.py | 28 ++-- tests/mocks/mock_value_prompt_driver.py | 21 --- .../config/test_google_structure_config.py | 2 +- ...est_dynamodb_conversation_memory_driver.py | 4 +- .../test_local_conversation_memory_driver.py | 8 +- .../test_redis_conversation_memory_driver.py | 2 +- .../test_amazon_bedrock_prompt_driver.py | 61 ++++---- ...mazon_sagemaker_jumpstart_prompt_driver.py | 14 +- .../prompt/test_anthropic_prompt_driver.py | 98 +++++++++---- .../test_azure_openai_chat_prompt_driver.py | 40 +++--- .../drivers/prompt/test_base_prompt_driver.py | 11 +- .../prompt/test_cohere_prompt_driver.py | 105 +++++++------- .../prompt/test_google_prompt_driver.py | 106 +++++++------- .../test_hugging_face_hub_prompt_driver.py | 27 ++-- ...est_hugging_face_pipeline_prompt_driver.py | 16 ++- .../prompt/test_ollama_prompt_driver.py | 41 ++++-- .../prompt/test_openai_chat_prompt_driver.py | 107 +++++++------- .../summary/test_prompt_summary_engine.py | 4 +- tests/unit/events/test_base_event.py | 43 ++++-- tests/unit/events/test_finish_prompt_event.py | 5 +- tests/unit/events/test_start_prompt_event.py | 18 ++- .../structure/test_conversation_memory.py | 113 +++++++-------- .../test_summary_conversation_memory.py | 28 ++-- tests/unit/structures/test_agent.py | 12 +- tests/unit/structures/test_pipeline.py | 24 ++-- tests/unit/tasks/test_prompt_task.py | 86 ++++++++++++ tests/unit/tasks/test_toolkit_task.py | 8 +- .../unit/tokenizers/test_google_tokenizer.py | 5 +- tests/unit/utils/test_base_tokenizer.py | 13 ++ tests/unit/utils/test_message_stack.py | 55 ++++++++ tests/unit/utils/test_prompt_stack.py | 41 ------ 90 files changed, 1787 insertions(+), 874 deletions(-) create mode 100644 griptape/common/__init__.py create mode 100644 griptape/common/prompt_stack/__init__.py create mode 100644 griptape/common/prompt_stack/contents/__init__.py create mode 100644 griptape/common/prompt_stack/contents/base_delta_message_content.py create mode 100644 griptape/common/prompt_stack/contents/base_message_content.py create mode 100644 griptape/common/prompt_stack/contents/image_message_content.py create mode 100644 griptape/common/prompt_stack/contents/text_delta_message_content.py create mode 100644 griptape/common/prompt_stack/contents/text_message_content.py create mode 100644 griptape/common/prompt_stack/messages/__init__.py create mode 100644 griptape/common/prompt_stack/messages/base_message.py create mode 100644 griptape/common/prompt_stack/messages/delta_message.py create mode 100644 griptape/common/prompt_stack/messages/message.py create mode 100644 griptape/common/prompt_stack/prompt_stack.py delete mode 100644 griptape/utils/prompt_stack.py delete mode 100644 tests/mocks/mock_value_prompt_driver.py create mode 100644 tests/unit/utils/test_base_tokenizer.py create mode 100644 tests/unit/utils/test_message_stack.py delete mode 100644 tests/unit/utils/test_prompt_stack.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 273fe5429..1d270363c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,32 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +### Added +- `Message` for storing messages in a `PromptStack`. Messages consist of a role, content, and usage. +- `DeltaMessage` for storing partial messages in a `PromptStack`. Multiple `DeltaMessage` can be combined to form a `Message`. +- `TextMessageContent` for storing textual content in a `Message`. +- `ImageMessageContent` for storing image content in a `Message`. +- Support for adding `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s to `PromptStack`. +- Support for image inputs to `OpenAiChatPromptDriver`, `AzureOpenAiChatPromptDriver`, `AmazonBedrockPromptDriver`, `AnthropicPromptDriver`, and `GooglePromptDriver`. +- Input/output token usage metrics to all Prompt Drivers. +- `FinishPromptEvent.input_token_count` and `FinishPromptEvent.output_token_count`. +- Support for storing Artifacts as inputs/outputs in Conversation Memory Runs. +- `Agent.input` for passing Artifacts as input. +- Support for `PromptTask`s to take `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s as input. + +### Changed +- **BREAKING**: Moved/renamed `griptape.utils.PromptStack` to `griptape.common.PromptStack`. +- **BREAKING**: Renamed `PromptStack.inputs` to `PromptStack.messages`. +- **BREAKING**: Moved `PromptStack.USER_ROLE`, `PromptStack.ASSISTANT_ROLE`, and `PromptStack.SYSTEM_ROLE` to `Message`. +- **BREAKING**: Updated return type of `PromptDriver.try_run` from `TextArtifact` to `Message`. +- **BREAKING**: Updated return type of `PromptDriver.try_stream` from `Iterator[TextArtifact]` to `Iterator[DeltaMessage]`. +- **BREAKING**: Removed `BasePromptEvent.token_count` in favor of `FinishPromptEvent.input_token_count` and `FinishPromptEvent.output_token_count`. +- **BREAKING**: Removed `StartPromptEvent.prompt`. Use `StartPromptEvent.prompt_stack` instead. +- **BREAKING**: Removed `Agent.input_template` in favor of `Agent.input`. +- **BREAKING**: `BasePromptDriver.run` now returns a `Message` instead of a `TextArtifact`. For compatibility, `Message.value` contains the Message's Artifact value +- Default Prompt Driver model in `GoogleStructureConfig` to `gemini-1.5-pro`. + + ### Added - `RagEngine` is an abstraction for implementing modular RAG pipelines. diff --git a/README.md b/README.md index f9eb2aa5c..6905903a3 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ from griptape.structures import Agent from griptape.tools import WebScraper, FileManager, TaskMemoryClient agent = Agent( - input_template="Load {{ args[0] }}, summarize it, and store it in a file called {{ args[1] }}.", + input="Load {{ args[0] }}, summarize it, and store it in a file called {{ args[1] }}.", tools=[ WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=True), diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index 9d5b6fc4a..f95a0ba4e 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -14,7 +14,7 @@ agent = Agent( config=StructureConfig( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o", temperature=0.3), ), - input_template="You will be provided with a tweet, and your task is to classify its sentiment as positive, neutral, or negative. Tweet: {{ args[0] }}", + input="You will be provided with a tweet, and your task is to classify its sentiment as positive, neutral, or negative. Tweet: {{ args[0] }}", rules=[ Rule( value="Output only the sentiment." @@ -28,23 +28,23 @@ agent.run("I loved the new Batman movie!") Or use them independently: ```python -from griptape.utils import PromptStack +from griptape.common import PromptStack from griptape.drivers import OpenAiChatPromptDriver stack = PromptStack() -stack.add_system_input( +stack.add_system_message( "You will be provided with Python code, and your task is to calculate its time complexity." ) stack.add_user_input( -""" -def foo(n, k): - accum = 0 - for i in range(n): - for l in range(k): - accum += i - return accum -""" + """ + def foo(n, k): + accum = 0 + for i in range(n): + for l in range(k): + accum += i + return accum + """ ) result = OpenAiChatPromptDriver(model="gpt-3.5-turbo-16k", temperature=0).run(stack) @@ -80,7 +80,7 @@ agent = Agent( seed=42, ) ), - input_template="You will be provided with a description of a mood, and your task is to generate the CSS code for a color that matches it. Description: {{ args[0] }}", + input="You will be provided with a description of a mood, and your task is to generate the CSS code for a color that matches it. Description: {{ args[0] }}", rules=[ Rule( value='Write your output in json with a single key called "css_code".' diff --git a/docs/griptape-framework/misc/events.md b/docs/griptape-framework/misc/events.md index 0921676fb..2d3645e94 100644 --- a/docs/griptape-framework/misc/events.md +++ b/docs/griptape-framework/misc/events.md @@ -244,9 +244,9 @@ from griptape.events import BaseEvent, StartPromptEvent, EventListener def handler(event: BaseEvent): if isinstance(event, StartPromptEvent): - print("Prompt Stack Inputs:") - for input in event.prompt_stack.inputs: - print(f"{input.role}: {input.content}") + print("Prompt Stack PromptStack:") + for message in event.prompt_stack.messages: + print(f"{message.role}: {message.content}") print("Final Prompt String:") print(event.prompt) @@ -259,7 +259,7 @@ agent.run("Write me a poem.") ``` ``` ... -Prompt Stack Inputs: +Prompt Stack Messages: system: user: Write me a poem. Final Prompt String: diff --git a/docs/griptape-framework/structures/agents.md b/docs/griptape-framework/structures/agents.md index 8737d2a59..b36db72d3 100644 --- a/docs/griptape-framework/structures/agents.md +++ b/docs/griptape-framework/structures/agents.md @@ -15,7 +15,7 @@ from griptape.structures import Agent agent = Agent( - input_template="Calculate the following: {{ args[0] }}", + input="Calculate the following: {{ args[0] }}", tools=[Calculator()] ) diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index e8f75b453..c385df6cd 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -88,6 +88,31 @@ agent.run("Write me a haiku") Day begins anew. ``` +If the model supports it, you can also pass image inputs: + +```python +from griptape.structures import Agent +from griptape.loaders import ImageLoader + +agent = Agent() +with open("tests/resources/mountain.jpg", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +agent.run(["What's in this image?", image_artifact]) +``` + +``` +[06/21/24 10:01:08] INFO PromptTask c229d1792da34ab1a7c45768270aada9 + Input: What's in this image? + + Media, type: image/jpeg, size: 82351 bytes +[06/21/24 10:01:12] INFO PromptTask c229d1792da34ab1a7c45768270aada9 + Output: The image depicts a stunning mountain landscape at sunrise or sunset. The sun is partially visible on the left side of the image, + casting a warm golden light over the scene. The mountains are covered with snow at their peaks, and a layer of clouds or fog is settled in the + valleys between them. The sky is a mix of warm colors near the horizon, transitioning to cooler blues higher up, with some scattered clouds + adding texture to the sky. The overall scene is serene and majestic, highlighting the natural beauty of the mountainous terrain. +``` + ## Toolkit Task To use [Griptape Tools](../../griptape-framework/tools/index.md), use a [Toolkit Task](../../reference/griptape/tasks/toolkit_task.md). @@ -740,7 +765,7 @@ def build_researcher(): def build_writer(): writer = Agent( - input_template="Instructions: {{args[0]}}\nContext: {{args[1]}}", + input="Instructions: {{args[0]}}\nContext: {{args[1]}}", rulesets=[ Ruleset( name="Position", diff --git a/griptape/common/__init__.py b/griptape/common/__init__.py new file mode 100644 index 000000000..2b1189472 --- /dev/null +++ b/griptape/common/__init__.py @@ -0,0 +1,23 @@ +from .prompt_stack.contents.base_message_content import BaseMessageContent +from .prompt_stack.contents.base_delta_message_content import BaseDeltaMessageContent +from .prompt_stack.contents.text_delta_message_content import TextDeltaMessageContent +from .prompt_stack.contents.text_message_content import TextMessageContent +from .prompt_stack.contents.image_message_content import ImageMessageContent + +from .prompt_stack.messages.base_message import BaseMessage +from .prompt_stack.messages.delta_message import DeltaMessage +from .prompt_stack.messages.message import Message + +from .prompt_stack.prompt_stack import PromptStack + +__all__ = [ + "BaseMessage", + "BaseDeltaMessageContent", + "BaseMessageContent", + "DeltaMessage", + "Message", + "TextDeltaMessageContent", + "TextMessageContent", + "ImageMessageContent", + "PromptStack", +] diff --git a/griptape/common/prompt_stack/__init__.py b/griptape/common/prompt_stack/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/common/prompt_stack/contents/__init__.py b/griptape/common/prompt_stack/contents/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/common/prompt_stack/contents/base_delta_message_content.py b/griptape/common/prompt_stack/contents/base_delta_message_content.py new file mode 100644 index 000000000..344f0bb7a --- /dev/null +++ b/griptape/common/prompt_stack/contents/base_delta_message_content.py @@ -0,0 +1,12 @@ +from __future__ import annotations + +from abc import ABC + +from attrs import define, field + +from griptape.mixins.serializable_mixin import SerializableMixin + + +@define +class BaseDeltaMessageContent(ABC, SerializableMixin): + index: int = field(kw_only=True, default=0, metadata={"serializable": True}) diff --git a/griptape/common/prompt_stack/contents/base_message_content.py b/griptape/common/prompt_stack/contents/base_message_content.py new file mode 100644 index 000000000..cd4d5bd92 --- /dev/null +++ b/griptape/common/prompt_stack/contents/base_message_content.py @@ -0,0 +1,31 @@ +from __future__ import annotations + +from abc import ABC +from collections.abc import Sequence + +from attrs import define, field + +from griptape.artifacts.base_artifact import BaseArtifact +from griptape.mixins import SerializableMixin + +from .base_delta_message_content import BaseDeltaMessageContent + + +@define +class BaseMessageContent(ABC, SerializableMixin): + artifact: BaseArtifact = field(metadata={"serializable": True}) + + def to_text(self) -> str: + return str(self.artifact) + + def __str__(self) -> str: + return self.artifact.to_text() + + def __bool__(self) -> bool: + return bool(self.artifact) + + def __len__(self) -> int: + return len(self.artifact) + + @classmethod + def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> BaseMessageContent: ... diff --git a/griptape/common/prompt_stack/contents/image_message_content.py b/griptape/common/prompt_stack/contents/image_message_content.py new file mode 100644 index 000000000..0192a2cb4 --- /dev/null +++ b/griptape/common/prompt_stack/contents/image_message_content.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +from collections.abc import Sequence + +from attrs import define, field + +from griptape.artifacts import ImageArtifact +from griptape.common import BaseDeltaMessageContent, BaseMessageContent + + +@define +class ImageMessageContent(BaseMessageContent): + artifact: ImageArtifact = field(metadata={"serializable": True}) + + @classmethod + def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> ImageMessageContent: + raise NotImplementedError() diff --git a/griptape/common/prompt_stack/contents/text_delta_message_content.py b/griptape/common/prompt_stack/contents/text_delta_message_content.py new file mode 100644 index 000000000..ab5313df6 --- /dev/null +++ b/griptape/common/prompt_stack/contents/text_delta_message_content.py @@ -0,0 +1,9 @@ +from __future__ import annotations +from attrs import define, field + +from griptape.common import BaseDeltaMessageContent + + +@define +class TextDeltaMessageContent(BaseDeltaMessageContent): + text: str = field(metadata={"serializable": True}) diff --git a/griptape/common/prompt_stack/contents/text_message_content.py b/griptape/common/prompt_stack/contents/text_message_content.py new file mode 100644 index 000000000..1d7b2bd5b --- /dev/null +++ b/griptape/common/prompt_stack/contents/text_message_content.py @@ -0,0 +1,20 @@ +from __future__ import annotations + +from attrs import define, field +from collections.abc import Sequence + +from griptape.artifacts import TextArtifact +from griptape.common import BaseMessageContent, BaseDeltaMessageContent, TextDeltaMessageContent + + +@define +class TextMessageContent(BaseMessageContent): + artifact: TextArtifact = field(metadata={"serializable": True}) + + @classmethod + def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> TextMessageContent: + text_deltas = [delta for delta in deltas if isinstance(delta, TextDeltaMessageContent)] + + artifact = TextArtifact(value="".join(delta.text for delta in text_deltas)) + + return cls(artifact=artifact) diff --git a/griptape/common/prompt_stack/messages/__init__.py b/griptape/common/prompt_stack/messages/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/common/prompt_stack/messages/base_message.py b/griptape/common/prompt_stack/messages/base_message.py new file mode 100644 index 000000000..3cc8e532a --- /dev/null +++ b/griptape/common/prompt_stack/messages/base_message.py @@ -0,0 +1,44 @@ +from __future__ import annotations + +from abc import ABC +from typing import Optional, Union +from attrs import Factory, define, field + + +from griptape.common import BaseMessageContent, BaseDeltaMessageContent +from griptape.mixins import SerializableMixin + + +@define +class BaseMessage(ABC, SerializableMixin): + @define + class Usage(SerializableMixin): + input_tokens: Optional[float] = field(kw_only=True, default=None, metadata={"serializable": True}) + output_tokens: Optional[float] = field(kw_only=True, default=None, metadata={"serializable": True}) + + @property + def total_tokens(self) -> float: + return (self.input_tokens or 0) + (self.output_tokens or 0) + + def __add__(self, other: BaseMessage.Usage) -> BaseMessage.Usage: + return BaseMessage.Usage( + input_tokens=(self.input_tokens or 0) + (other.input_tokens or 0), + output_tokens=(self.output_tokens or 0) + (other.output_tokens or 0), + ) + + USER_ROLE = "user" + ASSISTANT_ROLE = "assistant" + SYSTEM_ROLE = "system" + + content: list[Union[BaseMessageContent, BaseDeltaMessageContent]] = field(metadata={"serializable": True}) + role: str = field(kw_only=True, metadata={"serializable": True}) + usage: Usage = field(kw_only=True, default=Factory(lambda: BaseMessage.Usage()), metadata={"serializable": True}) + + def is_system(self) -> bool: + return self.role == self.SYSTEM_ROLE + + def is_user(self) -> bool: + return self.role == self.USER_ROLE + + def is_assistant(self) -> bool: + return self.role == self.ASSISTANT_ROLE diff --git a/griptape/common/prompt_stack/messages/delta_message.py b/griptape/common/prompt_stack/messages/delta_message.py new file mode 100644 index 000000000..7ff90b08f --- /dev/null +++ b/griptape/common/prompt_stack/messages/delta_message.py @@ -0,0 +1,15 @@ +from __future__ import annotations +from typing import Optional + +from attrs import define, field + +from griptape.common.prompt_stack.contents.text_delta_message_content import TextDeltaMessageContent + + +from .base_message import BaseMessage + + +@define +class DeltaMessage(BaseMessage): + role: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + content: Optional[TextDeltaMessageContent] = field(kw_only=True, default=None, metadata={"serializable": True}) diff --git a/griptape/common/prompt_stack/messages/message.py b/griptape/common/prompt_stack/messages/message.py new file mode 100644 index 000000000..fcf6750ea --- /dev/null +++ b/griptape/common/prompt_stack/messages/message.py @@ -0,0 +1,38 @@ +from __future__ import annotations + +from typing import Any + +from attrs import define, field + +from griptape.artifacts import BaseArtifact, ListArtifact, TextArtifact +from griptape.common import BaseMessageContent, TextMessageContent + +from .base_message import BaseMessage + + +@define +class Message(BaseMessage): + def __init__(self, content: str | list[BaseMessageContent], **kwargs: Any): + if isinstance(content, str): + content = [TextMessageContent(TextArtifact(value=content))] + self.__attrs_init__(content, **kwargs) # pyright: ignore[reportAttributeAccessIssue] + + content: list[BaseMessageContent] = field(metadata={"serializable": True}) + + @property + def value(self) -> Any: + return self.to_artifact().value + + def __str__(self) -> str: + return self.to_text() + + def to_text(self) -> str: + return "".join( + [content.artifact.to_text() for content in self.content if isinstance(content, TextMessageContent)] + ) + + def to_artifact(self) -> BaseArtifact: + if len(self.content) == 1: + return self.content[0].artifact + else: + return ListArtifact([content.artifact for content in self.content]) diff --git a/griptape/common/prompt_stack/prompt_stack.py b/griptape/common/prompt_stack/prompt_stack.py new file mode 100644 index 000000000..ce19696e3 --- /dev/null +++ b/griptape/common/prompt_stack/prompt_stack.py @@ -0,0 +1,56 @@ +from __future__ import annotations +from attrs import define, field + +from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact, ImageArtifact +from griptape.mixins import SerializableMixin +from griptape.common import Message, TextMessageContent, BaseMessageContent, ImageMessageContent + + +@define +class PromptStack(SerializableMixin): + messages: list[Message] = field(factory=list, kw_only=True, metadata={"serializable": True}) + + @property + def system_messages(self) -> list[Message]: + return [message for message in self.messages if message.is_system()] + + @property + def user_messages(self) -> list[Message]: + return [message for message in self.messages if message.is_user()] + + @property + def assistant_messages(self) -> list[Message]: + return [message for message in self.messages if message.is_assistant()] + + def add_message(self, artifact: str | BaseArtifact, role: str) -> Message: + new_content = self.__process_artifact(artifact) + + self.messages.append(Message(content=new_content, role=role)) + + return self.messages[-1] + + def add_system_message(self, artifact: str | BaseArtifact) -> Message: + return self.add_message(artifact, Message.SYSTEM_ROLE) + + def add_user_message(self, artifact: str | BaseArtifact) -> Message: + return self.add_message(artifact, Message.USER_ROLE) + + def add_assistant_message(self, artifact: str | BaseArtifact) -> Message: + return self.add_message(artifact, Message.ASSISTANT_ROLE) + + def __process_artifact(self, artifact: str | BaseArtifact) -> list[BaseMessageContent]: + if isinstance(artifact, str): + return [TextMessageContent(TextArtifact(artifact))] + elif isinstance(artifact, TextArtifact): + return [TextMessageContent(artifact)] + elif isinstance(artifact, ImageArtifact): + return [ImageMessageContent(artifact)] + elif isinstance(artifact, ListArtifact): + processed_contents = [self.__process_artifact(artifact) for artifact in artifact.value] + flattened_content = [ + sub_content for processed_content in processed_contents for sub_content in processed_content + ] + + return flattened_content + else: + raise ValueError(f"Unsupported artifact type: {type(artifact)}") diff --git a/griptape/config/google_structure_config.py b/griptape/config/google_structure_config.py index 744d08782..fc0548ff7 100644 --- a/griptape/config/google_structure_config.py +++ b/griptape/config/google_structure_config.py @@ -14,7 +14,9 @@ @define class GoogleStructureConfig(StructureConfig): prompt_driver: BasePromptDriver = field( - default=Factory(lambda: GooglePromptDriver(model="gemini-pro")), kw_only=True, metadata={"serializable": True} + default=Factory(lambda: GooglePromptDriver(model="gemini-1.5-pro")), + kw_only=True, + metadata={"serializable": True}, ) embedding_driver: BaseEmbeddingDriver = field( default=Factory(lambda: GoogleEmbeddingDriver(model="models/embedding-001")), diff --git a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py index 849ed0901..21d81724d 100644 --- a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py @@ -6,6 +6,14 @@ from attrs import Factory, define, field from griptape.artifacts import TextArtifact +from griptape.common import ( + DeltaMessage, + Message, + TextDeltaMessageContent, + BaseMessageContent, + TextMessageContent, + ImageMessageContent, +) from griptape.drivers import BasePromptDriver from griptape.tokenizers import AmazonBedrockTokenizer, BaseTokenizer from griptape.utils import import_optional_dependency @@ -13,7 +21,7 @@ if TYPE_CHECKING: import boto3 - from griptape.utils import PromptStack + from griptape.common import PromptStack @define @@ -27,44 +35,54 @@ class AmazonBedrockPromptDriver(BasePromptDriver): default=Factory(lambda self: AmazonBedrockTokenizer(model=self.model), takes_self=True), kw_only=True ) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: response = self.bedrock_client.converse(**self._base_params(prompt_stack)) + usage = response["usage"] output_message = response["output"]["message"] - output_content = output_message["content"][0]["text"] - return TextArtifact(output_content) + return Message( + content=[TextMessageContent(TextArtifact(content["text"])) for content in output_message["content"]], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=usage["inputTokens"], output_tokens=usage["outputTokens"]), + ) - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: response = self.bedrock_client.converse_stream(**self._base_params(prompt_stack)) stream = response.get("stream") if stream is not None: for event in stream: if "contentBlockDelta" in event: - yield TextArtifact(event["contentBlockDelta"]["delta"]["text"]) + content_block_delta = event["contentBlockDelta"] + yield DeltaMessage( + content=TextDeltaMessageContent( + content_block_delta["delta"]["text"], index=content_block_delta["contentBlockIndex"] + ) + ) + elif "metadata" in event: + usage = event["metadata"]["usage"] + yield DeltaMessage( + usage=DeltaMessage.Usage(input_tokens=usage["inputTokens"], output_tokens=usage["outputTokens"]) + ) else: raise Exception("model response is empty") - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - content = [{"text": prompt_input.content}] - - if prompt_input.is_system(): - return {"text": prompt_input.content} - elif prompt_input.is_assistant(): - return {"role": "assistant", "content": content} - else: - return {"role": "user", "content": content} + def _prompt_stack_messages_to_messages(self, messages: list[Message]) -> list[dict]: + return [ + { + "role": self.__to_role(message), + "content": [self.__prompt_stack_content_message_content(content) for content in message.content], + } + for message in messages + ] def _base_params(self, prompt_stack: PromptStack) -> dict: - system_messages = [ - self._prompt_stack_input_to_message(input) - for input in prompt_stack.inputs - if input.is_system() and input.content - ] - messages = [ - self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs if not input.is_system() - ] + system_messages = [{"text": message.to_text()} for message in prompt_stack.system_messages] + + messages = self._prompt_stack_messages_to_messages( + [message for message in prompt_stack.messages if not message.is_system()] + ) return { "modelId": self.model, @@ -73,3 +91,17 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: "inferenceConfig": {"temperature": self.temperature}, "additionalModelRequestFields": self.additional_model_request_fields, } + + def __prompt_stack_content_message_content(self, content: BaseMessageContent) -> dict: + if isinstance(content, TextMessageContent): + return {"text": content.artifact.to_text()} + elif isinstance(content, ImageMessageContent): + return {"image": {"format": content.artifact.format, "source": {"bytes": content.artifact.value}}} + else: + raise ValueError(f"Unsupported content type: {type(content)}") + + def __to_role(self, message: Message) -> str: + if message.is_assistant(): + return "assistant" + else: + return "user" diff --git a/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py b/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py index 18f8e4b77..dacaa62b0 100644 --- a/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_sagemaker_jumpstart_prompt_driver.py @@ -7,14 +7,15 @@ from attrs import Factory, define, field from griptape.artifacts import TextArtifact -from griptape.drivers.prompt.base_prompt_driver import BasePromptDriver +from griptape.common import PromptStack, Message, TextMessageContent, DeltaMessage +from griptape.drivers import BasePromptDriver from griptape.tokenizers import HuggingFaceTokenizer from griptape.utils import import_optional_dependency if TYPE_CHECKING: import boto3 - from griptape.utils import PromptStack + from griptape.common import PromptStack @define @@ -40,8 +41,11 @@ def validate_stream(self, _, stream): if stream: raise ValueError("streaming is not supported") - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - payload = {"inputs": self._to_model_input(prompt_stack), "parameters": self._to_model_params(prompt_stack)} + def try_run(self, prompt_stack: PromptStack) -> Message: + payload = { + "inputs": self.prompt_stack_to_string(prompt_stack), + "parameters": {**self._base_params(prompt_stack)}, + } response = self.sagemaker_client.invoke_endpoint( EndpointName=self.endpoint, @@ -59,31 +63,28 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: if isinstance(decoded_body, list): if decoded_body: - return TextArtifact(decoded_body[0]["generated_text"]) + generated_text = decoded_body[0]["generated_text"] else: raise ValueError("model response is empty") else: - return TextArtifact(decoded_body["generated_text"]) - - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - raise NotImplementedError("streaming is not supported") + generated_text = decoded_body["generated_text"] - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - return {"role": prompt_input.role, "content": prompt_input.content} + input_tokens = len(self.__prompt_stack_to_tokens(prompt_stack)) + output_tokens = len(self.tokenizer.tokenizer.encode(generated_text)) - def _to_model_input(self, prompt_stack: PromptStack) -> str: - prompt = self.tokenizer.tokenizer.apply_chat_template( - [self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs], - tokenize=False, - add_generation_prompt=True, + return Message( + content=[TextMessageContent(TextArtifact(generated_text))], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=input_tokens, output_tokens=output_tokens), ) - if isinstance(prompt, str): - return prompt - else: - raise ValueError("Invalid output type.") + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: + raise NotImplementedError("streaming is not supported") - def _to_model_params(self, prompt_stack: PromptStack) -> dict: + def prompt_stack_to_string(self, prompt_stack: PromptStack) -> str: + return self.tokenizer.tokenizer.decode(self.__prompt_stack_to_tokens(prompt_stack)) + + def _base_params(self, prompt_stack: PromptStack) -> dict: return { "temperature": self.temperature, "max_new_tokens": self.max_tokens, @@ -92,3 +93,21 @@ def _to_model_params(self, prompt_stack: PromptStack) -> dict: "stop_strings": self.tokenizer.stop_sequences, "return_full_text": False, } + + def _prompt_stack_to_messages(self, prompt_stack: PromptStack) -> list[dict]: + messages = [] + + for message in prompt_stack.messages: + messages.append({"role": message.role, "content": message.to_text()}) + + return messages + + def __prompt_stack_to_tokens(self, prompt_stack: PromptStack) -> list[int]: + messages = self._prompt_stack_to_messages(prompt_stack) + + tokens = self.tokenizer.tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=True) + + if isinstance(tokens, list): + return tokens + else: + raise ValueError("Invalid output type.") diff --git a/griptape/drivers/prompt/anthropic_prompt_driver.py b/griptape/drivers/prompt/anthropic_prompt_driver.py index b74a9d5f6..1dd7bb7f9 100644 --- a/griptape/drivers/prompt/anthropic_prompt_driver.py +++ b/griptape/drivers/prompt/anthropic_prompt_driver.py @@ -1,11 +1,27 @@ from __future__ import annotations -from typing import Optional, Any + from collections.abc import Iterator -from attrs import define, field, Factory +from typing import Any, Optional, TYPE_CHECKING + +from attrs import Factory, define, field + from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack, import_optional_dependency +from griptape.common import ( + BaseMessageContent, + DeltaMessage, + TextDeltaMessageContent, + ImageMessageContent, + PromptStack, + Message, + TextMessageContent, +) from griptape.drivers import BasePromptDriver from griptape.tokenizers import AnthropicTokenizer, BaseTokenizer +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + from anthropic.types import ContentBlockDeltaEvent + from anthropic.types import ContentBlock @define @@ -32,42 +48,40 @@ class AnthropicPromptDriver(BasePromptDriver): top_k: int = field(default=250, kw_only=True, metadata={"serializable": True}) max_tokens: int = field(default=1000, kw_only=True, metadata={"serializable": True}) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: response = self.client.messages.create(**self._base_params(prompt_stack)) - return TextArtifact(value=response.content[0].text) + return Message( + content=[self.__message_content_to_prompt_stack_content(content) for content in response.content], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=response.usage.input_tokens, output_tokens=response.usage.output_tokens), + ) - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - response = self.client.messages.create(**self._base_params(prompt_stack), stream=True) + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: + events = self.client.messages.create(**self._base_params(prompt_stack), stream=True) - for chunk in response: - if chunk.type == "content_block_delta": - yield TextArtifact(value=chunk.delta.text) + for event in events: + if event.type == "content_block_delta": + yield DeltaMessage(content=self.__message_content_delta_to_prompt_stack_content_delta(event)) + elif event.type == "message_start": + yield DeltaMessage(usage=DeltaMessage.Usage(input_tokens=event.message.usage.input_tokens)) + elif event.type == "message_delta": + yield DeltaMessage(usage=DeltaMessage.Usage(output_tokens=event.usage.output_tokens)) - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - content = prompt_input.content + def _prompt_stack_messages_to_messages(self, messages: list[Message]) -> list[dict]: + return [{"role": self.__to_role(message), "content": self.__to_content(message)} for message in messages] - if prompt_input.is_system(): - return {"role": "system", "content": content} - elif prompt_input.is_assistant(): - return {"role": "assistant", "content": content} - else: - return {"role": "user", "content": content} - - def _prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> dict: - messages = [ - self._prompt_stack_input_to_message(prompt_input) - for prompt_input in prompt_stack.inputs - if not prompt_input.is_system() - ] - system = next((self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs if i.is_system()), None) - - if system is None: - return {"messages": messages} + def _base_params(self, prompt_stack: PromptStack) -> dict: + messages = self._prompt_stack_messages_to_messages( + [message for message in prompt_stack.messages if not message.is_system()] + ) + + system_messages = prompt_stack.system_messages + if system_messages: + system_message = system_messages[0].to_text() else: - return {"messages": messages, "system": system["content"]} + system_message = None - def _base_params(self, prompt_stack: PromptStack) -> dict: return { "model": self.model, "temperature": self.temperature, @@ -75,5 +89,45 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: "top_p": self.top_p, "top_k": self.top_k, "max_tokens": self.max_tokens, - **self._prompt_stack_to_model_input(prompt_stack), + "messages": messages, + **({"system": system_message} if system_message else {}), } + + def __to_role(self, message: Message) -> str: + if message.is_assistant(): + return "assistant" + else: + return "user" + + def __to_content(self, message: Message) -> str | list[dict]: + if all(isinstance(content, TextMessageContent) for content in message.content): + return message.to_text() + else: + return [self.__prompt_stack_content_message_content(content) for content in message.content] + + def __prompt_stack_content_message_content(self, content: BaseMessageContent) -> dict: + if isinstance(content, TextMessageContent): + return {"type": "text", "text": content.artifact.to_text()} + elif isinstance(content, ImageMessageContent): + return { + "type": "image", + "source": {"type": "base64", "media_type": content.artifact.mime_type, "data": content.artifact.base64}, + } + else: + raise ValueError(f"Unsupported prompt content type: {type(content)}") + + def __message_content_to_prompt_stack_content(self, content: ContentBlock) -> BaseMessageContent: + if content.type == "text": + return TextMessageContent(TextArtifact(content.text)) + else: + raise ValueError(f"Unsupported message content type: {content.type}") + + def __message_content_delta_to_prompt_stack_content_delta( + self, content_delta: ContentBlockDeltaEvent + ) -> TextDeltaMessageContent: + index = content_delta.index + + if content_delta.delta.type == "text_delta": + return TextDeltaMessageContent(content_delta.delta.text, index=index) + else: + raise ValueError(f"Unsupported message content delta type : {content_delta.delta.type}") diff --git a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py index 41c91cb65..50e9effe6 100644 --- a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py @@ -1,6 +1,6 @@ from attrs import define, field, Factory from typing import Callable, Optional -from griptape.utils import PromptStack +from griptape.common import PromptStack from griptape.drivers import OpenAiChatPromptDriver import openai diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index 90e5259ac..f42e57081 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -1,14 +1,22 @@ from __future__ import annotations + from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Optional from collections.abc import Iterator -from attrs import define, field, Factory -from griptape.events import StartPromptEvent, FinishPromptEvent, CompletionChunkEvent -from griptape.mixins.serializable_mixin import SerializableMixin -from griptape.utils import PromptStack -from griptape.mixins import ExponentialBackoffMixin +from typing import TYPE_CHECKING, Optional + +from attrs import Factory, define, field + +from griptape.common import ( + BaseDeltaMessageContent, + DeltaMessage, + TextDeltaMessageContent, + PromptStack, + Message, + TextMessageContent, +) +from griptape.events import CompletionChunkEvent, FinishPromptEvent, StartPromptEvent +from griptape.mixins import ExponentialBackoffMixin, SerializableMixin from griptape.tokenizers import BaseTokenizer -from griptape.artifacts import TextArtifact if TYPE_CHECKING: from griptape.structures import Structure @@ -39,38 +47,28 @@ class BasePromptDriver(SerializableMixin, ExponentialBackoffMixin, ABC): def before_run(self, prompt_stack: PromptStack) -> None: if self.structure: - self.structure.publish_event( - StartPromptEvent( - model=self.model, - token_count=self.tokenizer.count_tokens(self.prompt_stack_to_string(prompt_stack)), - prompt_stack=prompt_stack, - prompt=self.prompt_stack_to_string(prompt_stack), - ) - ) + self.structure.publish_event(StartPromptEvent(model=self.model, prompt_stack=prompt_stack)) - def after_run(self, result: TextArtifact) -> None: + def after_run(self, result: Message) -> None: if self.structure: self.structure.publish_event( FinishPromptEvent( - model=self.model, result=result.value, token_count=self.tokenizer.count_tokens(result.value) + model=self.model, + result=result.value, + input_token_count=result.usage.input_tokens, + output_token_count=result.usage.output_tokens, ) ) - def run(self, prompt_stack: PromptStack) -> TextArtifact: + def run(self, prompt_stack: PromptStack) -> Message: for attempt in self.retrying(): with attempt: self.before_run(prompt_stack) if self.stream: - tokens = [] - completion_chunks = self.try_stream(prompt_stack) - for chunk in completion_chunks: - self.structure.publish_event(CompletionChunkEvent(token=chunk.value)) - tokens.append(chunk.value) - result = TextArtifact(value="".join(tokens).strip()) + result = self.__process_stream(prompt_stack) else: - result = self.try_run(prompt_stack) - result.value = result.value.strip() + result = self.__process_run(prompt_stack) self.after_run(result) @@ -90,20 +88,59 @@ def prompt_stack_to_string(self, prompt_stack: PromptStack) -> str: """ prompt_lines = [] - for i in prompt_stack.inputs: + for i in prompt_stack.messages: + content = i.to_text() if i.is_user(): - prompt_lines.append(f"User: {i.content}") + prompt_lines.append(f"User: {content}") elif i.is_assistant(): - prompt_lines.append(f"Assistant: {i.content}") + prompt_lines.append(f"Assistant: {content}") else: - prompt_lines.append(i.content) + prompt_lines.append(content) prompt_lines.append("Assistant:") return "\n\n".join(prompt_lines) @abstractmethod - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: ... + def try_run(self, prompt_stack: PromptStack) -> Message: ... @abstractmethod - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: ... + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: ... + + def __process_run(self, prompt_stack: PromptStack) -> Message: + result = self.try_run(prompt_stack) + + return result + + def __process_stream(self, prompt_stack: PromptStack) -> Message: + delta_contents: dict[int, list[BaseDeltaMessageContent]] = {} + usage = DeltaMessage.Usage() + + # Aggregate all content deltas from the stream + deltas = self.try_stream(prompt_stack) + for delta in deltas: + usage += delta.usage + + if delta.content is not None: + if delta.content.index in delta_contents: + delta_contents[delta.content.index].append(delta.content) + else: + delta_contents[delta.content.index] = [delta.content] + + if isinstance(delta.content, TextDeltaMessageContent): + self.structure.publish_event(CompletionChunkEvent(token=delta.content.text)) + + # Build a complete content from the content deltas + content = [] + for deltas in delta_contents.values(): + text_deltas = [delta for delta in deltas if isinstance(delta, TextDeltaMessageContent)] + if text_deltas: + content.append(TextMessageContent.from_deltas(text_deltas)) + + result = Message( + content=content, + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=usage.input_tokens, output_tokens=usage.output_tokens), + ) + + return result diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index f4a306ebe..331c2c039 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -4,8 +4,17 @@ from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver -from griptape.utils import PromptStack, import_optional_dependency -from griptape.tokenizers import BaseTokenizer, CohereTokenizer +from griptape.tokenizers import CohereTokenizer +from griptape.common import ( + PromptStack, + Message, + DeltaMessage, + TextMessageContent, + BaseMessageContent, + TextDeltaMessageContent, +) +from griptape.utils import import_optional_dependency +from griptape.tokenizers import BaseTokenizer if TYPE_CHECKING: from cohere import Client @@ -29,41 +38,71 @@ class CoherePromptDriver(BasePromptDriver): default=Factory(lambda self: CohereTokenizer(model=self.model, client=self.client), takes_self=True) ) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: result = self.client.chat(**self._base_params(prompt_stack)) + usage = result.meta.tokens - return TextArtifact(value=result.text) + return Message( + content=[TextMessageContent(TextArtifact(result.text))], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=usage.input_tokens, output_tokens=usage.output_tokens), + ) - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: result = self.client.chat_stream(**self._base_params(prompt_stack)) for event in result: if event.event_type == "text-generation": - yield TextArtifact(value=event.text) + yield DeltaMessage(content=TextDeltaMessageContent(event.text, index=0)) + elif event.event_type == "stream-end": + usage = event.response.meta.tokens - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - if prompt_input.is_system(): - return {"role": "SYSTEM", "text": prompt_input.content} - elif prompt_input.is_user(): - return {"role": "USER", "text": prompt_input.content} - else: - return {"role": "ASSISTANT", "text": prompt_input.content} + yield DeltaMessage( + usage=DeltaMessage.Usage(input_tokens=usage.input_tokens, output_tokens=usage.output_tokens) + ) + + def _prompt_stack_messages_to_messages(self, messages: list[Message]) -> list[dict]: + return [ + { + "role": self.__to_role(message), + "content": [self.__prompt_stack_content_message_content(content) for content in message.content], + } + for message in messages + ] def _base_params(self, prompt_stack: PromptStack) -> dict: - user_message = prompt_stack.inputs[-1].content + last_input = prompt_stack.messages[-1] + user_message = last_input.to_text() - history_messages = [ - self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs[:-1] if input.content - ] + history_messages = self._prompt_stack_messages_to_messages( + [message for message in prompt_stack.messages[:-1] if not message.is_system()] + ) - params = { + system_messages = prompt_stack.system_messages + if system_messages: + preamble = system_messages[0].to_text() + else: + preamble = None + + return { "message": user_message, + "chat_history": history_messages, "temperature": self.temperature, "stop_sequences": self.tokenizer.stop_sequences, "max_tokens": self.max_tokens, + **({"preamble": preamble} if preamble else {}), } - if history_messages: - params["chat_history"] = history_messages + def __prompt_stack_content_message_content(self, content: BaseMessageContent) -> dict: + if isinstance(content, TextMessageContent): + return {"text": content.artifact.to_text()} + else: + raise ValueError(f"Unsupported content type: {type(content)}") - return params + def __to_role(self, message: Message) -> str: + if message.is_system(): + return "SYSTEM" + elif message.is_user(): + return "USER" + else: + return "CHATBOT" diff --git a/griptape/drivers/prompt/dummy_prompt_driver.py b/griptape/drivers/prompt/dummy_prompt_driver.py index a55ecd4fe..72757624d 100644 --- a/griptape/drivers/prompt/dummy_prompt_driver.py +++ b/griptape/drivers/prompt/dummy_prompt_driver.py @@ -1,10 +1,12 @@ +from __future__ import annotations from collections.abc import Iterator -from attrs import field, Factory, define -from griptape.tokenizers import DummyTokenizer + +from attrs import Factory, define, field + +from griptape.common import PromptStack, Message, DeltaMessage from griptape.drivers import BasePromptDriver -from griptape.artifacts import TextArtifact from griptape.exceptions import DummyException -from griptape.utils.prompt_stack import PromptStack +from griptape.tokenizers import DummyTokenizer @define @@ -12,11 +14,8 @@ class DummyPromptDriver(BasePromptDriver): model: None = field(init=False, default=None, kw_only=True) tokenizer: DummyTokenizer = field(default=Factory(lambda: DummyTokenizer()), kw_only=True) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: raise DummyException(__class__.__name__, "try_run") - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: raise DummyException(__class__.__name__, "try_stream") - - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - raise DummyException(__class__.__name__, "_prompt_stack_input_to_message") diff --git a/griptape/drivers/prompt/google_prompt_driver.py b/griptape/drivers/prompt/google_prompt_driver.py index 67bc19e24..ff4b07a93 100644 --- a/griptape/drivers/prompt/google_prompt_driver.py +++ b/griptape/drivers/prompt/google_prompt_driver.py @@ -1,15 +1,27 @@ from __future__ import annotations + from collections.abc import Iterator -from typing import TYPE_CHECKING, Optional, Any -from attrs import define, field, Factory -from griptape.utils import PromptStack, import_optional_dependency +from typing import TYPE_CHECKING, Any, Optional + +from attrs import Factory, define, field + from griptape.artifacts import TextArtifact +from griptape.common import ( + BaseMessageContent, + DeltaMessage, + TextDeltaMessageContent, + ImageMessageContent, + PromptStack, + Message, + TextMessageContent, +) from griptape.drivers import BasePromptDriver -from griptape.tokenizers import GoogleTokenizer, BaseTokenizer +from griptape.tokenizers import BaseTokenizer, GoogleTokenizer +from griptape.utils import import_optional_dependency if TYPE_CHECKING: from google.generativeai import GenerativeModel - from google.generativeai.types import ContentDict + from google.generativeai.types import ContentDict, GenerateContentResponse @define @@ -33,12 +45,12 @@ class GooglePromptDriver(BasePromptDriver): top_p: Optional[float] = field(default=None, kw_only=True, metadata={"serializable": True}) top_k: Optional[int] = field(default=None, kw_only=True, metadata={"serializable": True}) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: GenerationConfig = import_optional_dependency("google.generativeai.types").GenerationConfig - inputs = self._prompt_stack_to_model_input(prompt_stack) - response = self.model_client.generate_content( - inputs, + messages = self._prompt_stack_to_messages(prompt_stack) + response: GenerateContentResponse = self.model_client.generate_content( + messages, generation_config=GenerationConfig( stop_sequences=self.tokenizer.stop_sequences, max_output_tokens=self.max_tokens, @@ -48,14 +60,22 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: ), ) - return TextArtifact(value=response.text) + usage_metadata = response.usage_metadata - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + return Message( + content=[TextMessageContent(TextArtifact(response.text))], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage( + input_tokens=usage_metadata.prompt_token_count, output_tokens=usage_metadata.candidates_token_count + ), + ) + + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: GenerationConfig = import_optional_dependency("google.generativeai.types").GenerationConfig - inputs = self._prompt_stack_to_model_input(prompt_stack) - response = self.model_client.generate_content( - inputs, + messages = self._prompt_stack_to_messages(prompt_stack) + response: Iterator[GenerateContentResponse] = self.model_client.generate_content( + messages, stream=True, generation_config=GenerationConfig( stop_sequences=self.tokenizer.stop_sequences, @@ -66,16 +86,27 @@ def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: ), ) + prompt_token_count = None for chunk in response: - yield TextArtifact(value=chunk.text) - - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - parts = [prompt_input.content] - - if prompt_input.is_assistant(): - return {"role": "model", "parts": parts} - else: - return {"role": "user", "parts": parts} + usage_metadata = chunk.usage_metadata + + # Only want to output the prompt token count once since it is static each chunk + if prompt_token_count is None: + prompt_token_count = usage_metadata.prompt_token_count + yield DeltaMessage( + content=TextDeltaMessageContent(chunk.text), + role=Message.ASSISTANT_ROLE, + usage=DeltaMessage.Usage( + input_tokens=usage_metadata.prompt_token_count, + output_tokens=usage_metadata.candidates_token_count, + ), + ) + else: + yield DeltaMessage( + content=TextDeltaMessageContent(chunk.text), + role=Message.ASSISTANT_ROLE, + usage=DeltaMessage.Usage(output_tokens=usage_metadata.candidates_token_count), + ) def _default_model_client(self) -> GenerativeModel: genai = import_optional_dependency("google.generativeai") @@ -83,20 +114,35 @@ def _default_model_client(self) -> GenerativeModel: return genai.GenerativeModel(self.model) - def _prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> list[ContentDict]: + def _prompt_stack_to_messages(self, prompt_stack: PromptStack) -> list[dict]: inputs = [ - self.__to_content_dict(prompt_input) for prompt_input in prompt_stack.inputs if not prompt_input.is_system() + {"role": self.__to_role(message), "parts": self.__to_content(message)} + for message in prompt_stack.messages + if not message.is_system() ] # Gemini does not have the notion of a system message, so we insert it as part of the first message in the history. - system = next((i for i in prompt_stack.inputs if i.is_system()), None) - if system is not None: - inputs[0]["parts"].insert(0, system.content) + system_messages = prompt_stack.system_messages + if system_messages: + inputs[0]["parts"].insert(0, system_messages[0].to_text()) return inputs - def __to_content_dict(self, prompt_input: PromptStack.Input) -> ContentDict: + def __prompt_stack_content_message_content(self, content: BaseMessageContent) -> ContentDict | str: ContentDict = import_optional_dependency("google.generativeai.types").ContentDict - message = self._prompt_stack_input_to_message(prompt_input) - return ContentDict(message) + if isinstance(content, TextMessageContent): + return content.artifact.to_text() + elif isinstance(content, ImageMessageContent): + return ContentDict(mime_type=content.artifact.mime_type, data=content.artifact.value) + else: + raise ValueError(f"Unsupported content type: {type(content)}") + + def __to_role(self, message: Message) -> str: + if message.is_assistant(): + return "model" + else: + return "user" + + def __to_content(self, message: Message) -> list[ContentDict | str]: + return [self.__prompt_stack_content_message_content(content) for content in message.content] diff --git a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py index 3edd252cb..f327010c4 100644 --- a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py @@ -5,10 +5,10 @@ from attrs import Factory, define, field -from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver from griptape.tokenizers import HuggingFaceTokenizer -from griptape.utils import PromptStack, import_optional_dependency +from griptape.common import PromptStack, Message, DeltaMessage, TextDeltaMessageContent +from griptape.utils import import_optional_dependency if TYPE_CHECKING: from huggingface_hub import InferenceClient @@ -47,37 +47,54 @@ class HuggingFaceHubPromptDriver(BasePromptDriver): kw_only=True, ) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: prompt = self.prompt_stack_to_string(prompt_stack) response = self.client.text_generation( prompt, return_full_text=False, max_new_tokens=self.max_tokens, **self.params ) + input_tokens = len(self.__prompt_stack_to_tokens(prompt_stack)) + output_tokens = len(self.tokenizer.tokenizer.encode(response)) - return TextArtifact(value=response) + return Message( + content=response, + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=input_tokens, output_tokens=output_tokens), + ) - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: prompt = self.prompt_stack_to_string(prompt_stack) response = self.client.text_generation( prompt, return_full_text=False, max_new_tokens=self.max_tokens, stream=True, **self.params ) + input_tokens = len(self.__prompt_stack_to_tokens(prompt_stack)) + + full_text = "" for token in response: - yield TextArtifact(value=token) + full_text += token + yield DeltaMessage(content=TextDeltaMessageContent(token, index=0)) - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - return {"role": prompt_input.role, "content": prompt_input.content} + output_tokens = len(self.tokenizer.tokenizer.encode(full_text)) + yield DeltaMessage(usage=DeltaMessage.Usage(input_tokens=input_tokens, output_tokens=output_tokens)) def prompt_stack_to_string(self, prompt_stack: PromptStack) -> str: return self.tokenizer.tokenizer.decode(self.__prompt_stack_to_tokens(prompt_stack)) + def _prompt_stack_to_messages(self, prompt_stack: PromptStack) -> list[dict]: + messages = [] + for message in prompt_stack.messages: + if len(message.content) == 1: + messages.append({"role": message.role, "content": message.to_text()}) + else: + raise ValueError("Invalid input content length.") + + return messages + def __prompt_stack_to_tokens(self, prompt_stack: PromptStack) -> list[int]: - tokens = self.tokenizer.tokenizer.apply_chat_template( - [self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs], - add_generation_prompt=True, - tokenize=True, - ) + messages = self._prompt_stack_to_messages(prompt_stack) + tokens = self.tokenizer.tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=True) if isinstance(tokens, list): return tokens diff --git a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py index 4fa291877..6dabc3e20 100644 --- a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py @@ -1,13 +1,15 @@ from __future__ import annotations -from collections.abc import Iterator +from collections.abc import Iterator from typing import TYPE_CHECKING + from attrs import Factory, define, field from griptape.artifacts import TextArtifact +from griptape.common import DeltaMessage, PromptStack, Message, TextMessageContent from griptape.drivers import BasePromptDriver from griptape.tokenizers import HuggingFaceTokenizer -from griptape.utils import PromptStack, import_optional_dependency +from griptape.utils import import_optional_dependency if TYPE_CHECKING: from transformers import TextGenerationPipeline @@ -40,43 +42,47 @@ class HuggingFacePipelinePromptDriver(BasePromptDriver): ) ) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - messages = [self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs] + def try_run(self, prompt_stack: PromptStack) -> Message: + messages = self._prompt_stack_to_messages(prompt_stack) result = self.pipe( - messages, - max_new_tokens=self.max_tokens, - tokenizer=self.tokenizer.tokenizer, - stop_strings=self.tokenizer.stop_sequences, - temperature=self.temperature, - do_sample=True, + messages, max_new_tokens=self.max_tokens, temperature=self.temperature, do_sample=True, **self.params ) if isinstance(result, list): if len(result) == 1: generated_text = result[0]["generated_text"][-1]["content"] - return TextArtifact(value=generated_text) + input_tokens = len(self.__prompt_stack_to_tokens(prompt_stack)) + output_tokens = len(self.tokenizer.tokenizer.encode(generated_text)) + + return Message( + content=[TextMessageContent(TextArtifact(generated_text))], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=input_tokens, output_tokens=output_tokens), + ) else: raise Exception("completion with more than one choice is not supported yet") else: raise Exception("invalid output format") - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: raise NotImplementedError("streaming is not supported") def prompt_stack_to_string(self, prompt_stack: PromptStack) -> str: return self.tokenizer.tokenizer.decode(self.__prompt_stack_to_tokens(prompt_stack)) - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - return {"role": prompt_input.role, "content": prompt_input.content} + def _prompt_stack_to_messages(self, prompt_stack: PromptStack) -> list[dict]: + messages = [] + + for message in prompt_stack.messages: + messages.append({"role": message.role, "content": message.to_text()}) + + return messages def __prompt_stack_to_tokens(self, prompt_stack: PromptStack) -> list[int]: - tokens = self.tokenizer.tokenizer.apply_chat_template( - [self._prompt_stack_input_to_message(i) for i in prompt_stack.inputs], - add_generation_prompt=True, - tokenize=True, - ) + messages = self._prompt_stack_to_messages(prompt_stack) + tokens = self.tokenizer.tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=True) if isinstance(tokens, list): return tokens diff --git a/griptape/drivers/prompt/ollama_prompt_driver.py b/griptape/drivers/prompt/ollama_prompt_driver.py index b21176e82..5a78abf29 100644 --- a/griptape/drivers/prompt/ollama_prompt_driver.py +++ b/griptape/drivers/prompt/ollama_prompt_driver.py @@ -5,8 +5,11 @@ from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver from griptape.tokenizers.base_tokenizer import BaseTokenizer -from griptape.utils import PromptStack, import_optional_dependency +from griptape.common import PromptStack, TextMessageContent +from griptape.utils import import_optional_dependency from griptape.tokenizers import SimpleTokenizer +from griptape.common import Message, DeltaMessage, TextDeltaMessageContent +from griptape.common import ImageMessageContent if TYPE_CHECKING: from ollama import Client @@ -46,24 +49,47 @@ class OllamaPromptDriver(BasePromptDriver): kw_only=True, ) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: response = self.client.chat(**self._base_params(prompt_stack)) if isinstance(response, dict): - return TextArtifact(value=response["message"]["content"]) + return Message( + content=[TextMessageContent(TextArtifact(value=response["message"]["content"]))], + role=Message.ASSISTANT_ROLE, + ) else: raise Exception("invalid model response") - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: stream = self.client.chat(**self._base_params(prompt_stack), stream=True) if isinstance(stream, Iterator): for chunk in stream: - yield TextArtifact(value=chunk["message"]["content"]) + yield DeltaMessage(content=TextDeltaMessageContent(chunk["message"]["content"])) else: raise Exception("invalid model response") def _base_params(self, prompt_stack: PromptStack) -> dict: - messages = [{"role": input.role, "content": input.content} for input in prompt_stack.inputs] + messages = self._prompt_stack_to_messages(prompt_stack) return {"messages": messages, "model": self.model, "options": self.options} + + def _prompt_stack_to_messages(self, prompt_stack: PromptStack) -> list[dict]: + return [ + { + "role": message.role, + "content": message.to_text(), + **( + { + "images": [ + content.artifact.base64 + for content in message.content + if isinstance(content, ImageMessageContent) + ] + } + if any(isinstance(content, ImageMessageContent) for content in message.content) + else {} + ), + } + for message in prompt_stack.messages + ] diff --git a/griptape/drivers/prompt/openai_chat_prompt_driver.py b/griptape/drivers/prompt/openai_chat_prompt_driver.py index 9545bd45a..e1e046d11 100644 --- a/griptape/drivers/prompt/openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/openai_chat_prompt_driver.py @@ -1,12 +1,28 @@ from __future__ import annotations -from typing import Optional, Literal + from collections.abc import Iterator +from typing import Literal, Optional, TYPE_CHECKING + import openai -from attrs import define, field, Factory +from attrs import Factory, define, field + from griptape.artifacts import TextArtifact -from griptape.utils import PromptStack +from griptape.common import ( + BaseMessageContent, + DeltaMessage, + TextDeltaMessageContent, + ImageMessageContent, + PromptStack, + Message, + TextMessageContent, +) from griptape.drivers import BasePromptDriver -from griptape.tokenizers import OpenAiTokenizer, BaseTokenizer +from griptape.tokenizers import BaseTokenizer, OpenAiTokenizer + + +if TYPE_CHECKING: + from openai.types.chat.chat_completion_message import ChatCompletionMessage + from openai.types.chat.chat_completion_chunk import ChoiceDelta @define @@ -57,57 +73,105 @@ class OpenAiChatPromptDriver(BasePromptDriver): kw_only=True, ) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: result = self.client.chat.completions.create(**self._base_params(prompt_stack)) if len(result.choices) == 1: - return TextArtifact(value=result.choices[0].message.content.strip()) + message = result.choices[0].message + + return Message( + content=[self.__message_to_prompt_stack_content(message)], + role=message.role, + usage=Message.Usage( + input_tokens=result.usage.prompt_tokens, output_tokens=result.usage.completion_tokens + ), + ) else: raise Exception("Completion with more than one choice is not supported yet.") - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - result = self.client.chat.completions.create(**self._base_params(prompt_stack), stream=True) + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: + result = self.client.chat.completions.create( + **self._base_params(prompt_stack), stream=True, stream_options={"include_usage": True} + ) for chunk in result: - if len(chunk.choices) == 1: - delta = chunk.choices[0].delta - else: - raise Exception("Completion with more than one choice is not supported yet.") - - if delta.content is not None: - delta_content = delta.content - - yield TextArtifact(value=delta_content) - - def _prompt_stack_input_to_message(self, prompt_input: PromptStack.Input) -> dict: - content = prompt_input.content - - if prompt_input.is_system(): - return {"role": "system", "content": content} - elif prompt_input.is_assistant(): - return {"role": "assistant", "content": content} - else: - return {"role": "user", "content": content} + if chunk.usage is not None: + yield DeltaMessage( + usage=DeltaMessage.Usage( + input_tokens=chunk.usage.prompt_tokens, output_tokens=chunk.usage.completion_tokens + ) + ) + elif chunk.choices is not None: + if len(chunk.choices) == 1: + choice = chunk.choices[0] + delta = choice.delta + + yield DeltaMessage(content=self.__message_delta_to_prompt_stack_content_delta(delta)) + else: + raise Exception("Completion with more than one choice is not supported yet.") + + def _prompt_stack_to_messages(self, prompt_stack: PromptStack) -> list[dict]: + return [ + {"role": self.__to_role(message), "content": self.__to_content(message)} + for message in prompt_stack.messages + ] def _base_params(self, prompt_stack: PromptStack) -> dict: params = { "model": self.model, "temperature": self.temperature, - "stop": self.tokenizer.stop_sequences, "user": self.user, "seed": self.seed, + **({"stop": self.tokenizer.stop_sequences} if self.tokenizer.stop_sequences else {}), + **({"max_tokens": self.max_tokens} if self.max_tokens is not None else {}), } if self.response_format == "json_object": params["response_format"] = {"type": "json_object"} - # JSON mode still requires a system input instructing the LLM to output JSON. - prompt_stack.add_system_input("Provide your response as a valid JSON object.") + # JSON mode still requires a system message instructing the LLM to output JSON. + prompt_stack.add_system_message("Provide your response as a valid JSON object.") - messages = [self._prompt_stack_input_to_message(input) for input in prompt_stack.inputs] - - if self.max_tokens is not None: - params["max_tokens"] = self.max_tokens + messages = self._prompt_stack_to_messages(prompt_stack) params["messages"] = messages return params + + def __to_role(self, message: Message) -> str: + if message.is_system(): + return "system" + elif message.is_assistant(): + return "assistant" + else: + return "user" + + def __to_content(self, message: Message) -> str | list[dict]: + if all(isinstance(content, TextMessageContent) for content in message.content): + return message.to_text() + else: + return [self.__prompt_stack_content_message_content(content) for content in message.content] + + def __prompt_stack_content_message_content(self, content: BaseMessageContent) -> dict: + if isinstance(content, TextMessageContent): + return {"type": "text", "text": content.artifact.to_text()} + elif isinstance(content, ImageMessageContent): + return { + "type": "image_url", + "image_url": {"url": f"data:{content.artifact.mime_type};base64,{content.artifact.base64}"}, + } + else: + raise ValueError(f"Unsupported content type: {type(content)}") + + def __message_to_prompt_stack_content(self, message: ChatCompletionMessage) -> BaseMessageContent: + if message.content is not None: + return TextMessageContent(TextArtifact(message.content)) + else: + raise ValueError(f"Unsupported message type: {message}") + + def __message_delta_to_prompt_stack_content_delta(self, content_delta: ChoiceDelta) -> TextDeltaMessageContent: + if content_delta.content is None: + return TextDeltaMessageContent("") + else: + delta_content = content_delta.content + + return TextDeltaMessageContent(delta_content) diff --git a/griptape/engines/extraction/csv_extraction_engine.py b/griptape/engines/extraction/csv_extraction_engine.py index fe4d0e6c7..6fe9bb879 100644 --- a/griptape/engines/extraction/csv_extraction_engine.py +++ b/griptape/engines/extraction/csv_extraction_engine.py @@ -4,7 +4,8 @@ import io from attrs import field, Factory, define from griptape.artifacts import TextArtifact, CsvRowArtifact, ListArtifact, ErrorArtifact -from griptape.utils import PromptStack +from griptape.common import PromptStack +from griptape.common.prompt_stack.messages.message import Message from griptape.engines import BaseExtractionEngine from griptape.utils import J2 from griptape.rules import Ruleset @@ -63,9 +64,7 @@ def _extract_rec( if self.prompt_driver.tokenizer.count_input_tokens_left(full_text) >= self.min_response_tokens: rows.extend( self.text_to_csv_rows( - self.prompt_driver.run( - PromptStack(inputs=[PromptStack.Input(full_text, role=PromptStack.USER_ROLE)]) - ).value, + self.prompt_driver.run(PromptStack(messages=[Message(full_text, role=Message.USER_ROLE)])).value, column_names, ) ) @@ -81,9 +80,7 @@ def _extract_rec( rows.extend( self.text_to_csv_rows( - self.prompt_driver.run( - PromptStack(inputs=[PromptStack.Input(partial_text, role=PromptStack.USER_ROLE)]) - ).value, + self.prompt_driver.run(PromptStack(messages=[Message(partial_text, role=Message.USER_ROLE)])).value, column_names, ) ) diff --git a/griptape/engines/extraction/json_extraction_engine.py b/griptape/engines/extraction/json_extraction_engine.py index 05db19d40..830092dab 100644 --- a/griptape/engines/extraction/json_extraction_engine.py +++ b/griptape/engines/extraction/json_extraction_engine.py @@ -3,9 +3,10 @@ import json from attrs import field, Factory, define from griptape.artifacts import TextArtifact, ListArtifact, ErrorArtifact +from griptape.common.prompt_stack.messages.message import Message from griptape.engines import BaseExtractionEngine from griptape.utils import J2 -from griptape.utils import PromptStack +from griptape.common import PromptStack from griptape.rules import Ruleset @@ -58,9 +59,7 @@ def _extract_rec( if self.prompt_driver.tokenizer.count_input_tokens_left(full_text) >= self.min_response_tokens: extractions.extend( self.json_to_text_artifacts( - self.prompt_driver.run( - PromptStack(inputs=[PromptStack.Input(full_text, role=PromptStack.USER_ROLE)]) - ).value + self.prompt_driver.run(PromptStack(messages=[Message(full_text, role=Message.USER_ROLE)])).value ) ) @@ -75,9 +74,7 @@ def _extract_rec( extractions.extend( self.json_to_text_artifacts( - self.prompt_driver.run( - PromptStack(inputs=[PromptStack.Input(partial_text, role=PromptStack.USER_ROLE)]) - ).value + self.prompt_driver.run(PromptStack(messages=[Message(partial_text, role=Message.USER_ROLE)])).value ) ) diff --git a/griptape/engines/rag/modules/base_rag_module.py b/griptape/engines/rag/modules/base_rag_module.py index 8e9b42e93..13563970d 100644 --- a/griptape/engines/rag/modules/base_rag_module.py +++ b/griptape/engines/rag/modules/base_rag_module.py @@ -4,7 +4,7 @@ from attrs import define, field, Factory -from griptape.utils import PromptStack +from griptape.common import PromptStack, Message @define(kw_only=True) @@ -15,8 +15,5 @@ class BaseRagModule(ABC): def generate_query_prompt_stack(self, system_prompt: str, query: str) -> PromptStack: return PromptStack( - inputs=[ - PromptStack.Input(system_prompt, role=PromptStack.SYSTEM_ROLE), - PromptStack.Input(query, role=PromptStack.USER_ROLE), - ] + messages=[Message(system_prompt, role=Message.SYSTEM_ROLE), Message(query, role=Message.USER_ROLE)] ) diff --git a/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py b/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py index 9e7c3b08f..26d95bdd1 100644 --- a/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py +++ b/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py @@ -1,5 +1,6 @@ from typing import Callable from attrs import define, field, Factory +from griptape.artifacts.text_artifact import TextArtifact from griptape.drivers import BasePromptDriver from griptape.engines.rag import RagContext from griptape.engines.rag.modules import BaseGenerationRagModule @@ -40,7 +41,12 @@ def run(self, context: RagContext) -> RagContext: break - context.output = self.prompt_driver.run(self.generate_query_prompt_stack(system_prompt, query)) + output = self.prompt_driver.run(self.generate_query_prompt_stack(system_prompt, query)).to_artifact() + + if isinstance(output, TextArtifact): + context.output = output + else: + raise ValueError("Prompt driver did not return a TextArtifact") return context diff --git a/griptape/engines/summary/prompt_summary_engine.py b/griptape/engines/summary/prompt_summary_engine.py index 9d3e8db78..51259e444 100644 --- a/griptape/engines/summary/prompt_summary_engine.py +++ b/griptape/engines/summary/prompt_summary_engine.py @@ -2,7 +2,8 @@ from attrs import define, Factory, field from griptape.artifacts import TextArtifact, ListArtifact from griptape.chunkers import BaseChunker, TextChunker -from griptape.utils import PromptStack +from griptape.common import PromptStack +from griptape.common.prompt_stack.messages.message import Message from griptape.drivers import BasePromptDriver from griptape.engines import BaseSummaryEngine from griptape.utils import J2 @@ -60,14 +61,19 @@ def summarize_artifacts_rec( self.prompt_driver.tokenizer.count_input_tokens_left(user_prompt + system_prompt) >= self.min_response_tokens ): - return self.prompt_driver.run( + result = self.prompt_driver.run( PromptStack( - inputs=[ - PromptStack.Input(system_prompt, role=PromptStack.SYSTEM_ROLE), - PromptStack.Input(user_prompt, role=PromptStack.USER_ROLE), + messages=[ + Message(system_prompt, role=Message.SYSTEM_ROLE), + Message(user_prompt, role=Message.USER_ROLE), ] ) - ) + ).to_artifact() + + if isinstance(result, TextArtifact): + return result + else: + raise ValueError("Prompt driver did not return a TextArtifact") else: chunks = self.chunker.chunk(artifacts_text) @@ -77,9 +83,9 @@ def summarize_artifacts_rec( chunks[1:], self.prompt_driver.run( PromptStack( - inputs=[ - PromptStack.Input(system_prompt, role=PromptStack.SYSTEM_ROLE), - PromptStack.Input(partial_text, role=PromptStack.USER_ROLE), + messages=[ + Message(system_prompt, role=Message.SYSTEM_ROLE), + Message(partial_text, role=Message.USER_ROLE), ] ) ).value, diff --git a/griptape/events/base_prompt_event.py b/griptape/events/base_prompt_event.py index b9dcd0c57..4a44599cc 100644 --- a/griptape/events/base_prompt_event.py +++ b/griptape/events/base_prompt_event.py @@ -7,4 +7,3 @@ @define class BasePromptEvent(BaseEvent, ABC): model: str = field(kw_only=True, metadata={"serializable": True}) - token_count: int = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/finish_prompt_event.py b/griptape/events/finish_prompt_event.py index 83bc1b9ef..79e338871 100644 --- a/griptape/events/finish_prompt_event.py +++ b/griptape/events/finish_prompt_event.py @@ -1,7 +1,10 @@ from attrs import define, field +from typing import Optional from griptape.events.base_prompt_event import BasePromptEvent @define class FinishPromptEvent(BasePromptEvent): result: str = field(kw_only=True, metadata={"serializable": True}) + input_token_count: Optional[float] = field(kw_only=True, metadata={"serializable": True}) + output_token_count: Optional[float] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/start_prompt_event.py b/griptape/events/start_prompt_event.py index 7ab418adb..35dae95d6 100644 --- a/griptape/events/start_prompt_event.py +++ b/griptape/events/start_prompt_event.py @@ -5,10 +5,9 @@ from griptape.events.base_prompt_event import BasePromptEvent if TYPE_CHECKING: - from griptape.utils import PromptStack + from griptape.common import PromptStack @define class StartPromptEvent(BasePromptEvent): prompt_stack: PromptStack = field(kw_only=True, metadata={"serializable": True}) - prompt: str = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/memory/structure/base_conversation_memory.py b/griptape/memory/structure/base_conversation_memory.py index f8cc51743..a8133d64b 100644 --- a/griptape/memory/structure/base_conversation_memory.py +++ b/griptape/memory/structure/base_conversation_memory.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING, Optional from attrs import define, field from griptape.memory.structure import Run -from griptape.utils import PromptStack +from griptape.common import PromptStack from griptape.mixins import SerializableMixin from abc import ABC, abstractmethod @@ -47,7 +47,7 @@ def try_add_run(self, run: Run) -> None: ... def to_prompt_stack(self, last_n: Optional[int] = None) -> PromptStack: ... def add_to_prompt_stack(self, prompt_stack: PromptStack, index: Optional[int] = None) -> PromptStack: - """Add the Conversation Memory runs to the Prompt Stack by modifying the inputs in place. + """Add the Conversation Memory runs to the Prompt Stack by modifying the messages in place. If autoprune is enabled, this will fit as many Conversation Memory runs into the Prompt Stack as possible without exceeding the token limit. @@ -67,15 +67,15 @@ def add_to_prompt_stack(self, prompt_stack: PromptStack, index: Optional[int] = # Try to determine how many Conversation Memory runs we can # fit into the Prompt Stack without exceeding the token limit. while should_prune and num_runs_to_fit_in_prompt > 0: - temp_stack.inputs = prompt_stack.inputs.copy() + temp_stack.messages = prompt_stack.messages.copy() # Add n runs from Conversation Memory. # Where we insert into the Prompt Stack doesn't matter here # since we only care about the total token count. - memory_inputs = self.to_prompt_stack(num_runs_to_fit_in_prompt).inputs - temp_stack.inputs.extend(memory_inputs) + memory_inputs = self.to_prompt_stack(num_runs_to_fit_in_prompt).messages + temp_stack.messages.extend(memory_inputs) - # Convert the prompt stack into tokens left. + # Convert the Prompt Stack into tokens left. tokens_left = prompt_driver.tokenizer.count_input_tokens_left( prompt_driver.prompt_stack_to_string(temp_stack) ) @@ -87,10 +87,10 @@ def add_to_prompt_stack(self, prompt_stack: PromptStack, index: Optional[int] = num_runs_to_fit_in_prompt -= 1 if num_runs_to_fit_in_prompt: - memory_inputs = self.to_prompt_stack(num_runs_to_fit_in_prompt).inputs + memory_inputs = self.to_prompt_stack(num_runs_to_fit_in_prompt).messages if index: - prompt_stack.inputs[index:index] = memory_inputs + prompt_stack.messages[index:index] = memory_inputs else: - prompt_stack.inputs.extend(memory_inputs) + prompt_stack.messages.extend(memory_inputs) return prompt_stack diff --git a/griptape/memory/structure/conversation_memory.py b/griptape/memory/structure/conversation_memory.py index 94e73d80c..42d160abd 100644 --- a/griptape/memory/structure/conversation_memory.py +++ b/griptape/memory/structure/conversation_memory.py @@ -2,7 +2,7 @@ from attrs import define from typing import Optional from griptape.memory.structure import Run, BaseConversationMemory -from griptape.utils import PromptStack +from griptape.common import PromptStack @define @@ -18,6 +18,6 @@ def to_prompt_stack(self, last_n: Optional[int] = None) -> PromptStack: prompt_stack = PromptStack() runs = self.runs[-last_n:] if last_n else self.runs for run in runs: - prompt_stack.add_user_input(run.input) - prompt_stack.add_assistant_input(run.output) + prompt_stack.add_user_message(run.input) + prompt_stack.add_assistant_message(run.output) return prompt_stack diff --git a/griptape/memory/structure/run.py b/griptape/memory/structure/run.py index c5a2b9b55..b91df2ae9 100644 --- a/griptape/memory/structure/run.py +++ b/griptape/memory/structure/run.py @@ -1,10 +1,11 @@ import uuid from attrs import define, field, Factory +from griptape.artifacts.base_artifact import BaseArtifact from griptape.mixins import SerializableMixin @define class Run(SerializableMixin): id: str = field(default=Factory(lambda: uuid.uuid4().hex), kw_only=True, metadata={"serializable": True}) - input: str = field(kw_only=True, metadata={"serializable": True}) - output: str = field(kw_only=True, metadata={"serializable": True}) + input: BaseArtifact = field(kw_only=True, metadata={"serializable": True}) + output: BaseArtifact = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/memory/structure/summary_conversation_memory.py b/griptape/memory/structure/summary_conversation_memory.py index e4d5597d5..b88a4b4e6 100644 --- a/griptape/memory/structure/summary_conversation_memory.py +++ b/griptape/memory/structure/summary_conversation_memory.py @@ -2,7 +2,9 @@ import logging from typing import TYPE_CHECKING, Optional from attrs import define, field, Factory -from griptape.utils import J2, PromptStack +from griptape.common.prompt_stack.messages.message import Message +from griptape.utils import J2 +from griptape.common import PromptStack from griptape.memory.structure import ConversationMemory if TYPE_CHECKING: @@ -37,11 +39,11 @@ def prompt_driver(self, value: BasePromptDriver) -> None: def to_prompt_stack(self, last_n: Optional[int] = None) -> PromptStack: stack = PromptStack() if self.summary: - stack.add_user_input(self.summary_template_generator.render(summary=self.summary)) + stack.add_user_message(self.summary_template_generator.render(summary=self.summary)) for r in self.unsummarized_runs(last_n): - stack.add_user_input(r.input) - stack.add_assistant_input(r.output) + stack.add_user_message(r.input) + stack.add_assistant_message(r.output) return stack @@ -73,7 +75,7 @@ def summarize_runs(self, previous_summary: str | None, runs: list[Run]) -> str | if len(runs) > 0: summary = self.summarize_conversation_template_generator.render(summary=previous_summary, runs=runs) return self.prompt_driver.run( - prompt_stack=PromptStack(inputs=[PromptStack.Input(summary, role=PromptStack.USER_ROLE)]) + prompt_stack=PromptStack(messages=[Message(summary, role=Message.USER_ROLE)]) ).to_text() else: return previous_summary diff --git a/griptape/schemas/base_schema.py b/griptape/schemas/base_schema.py index 6ba23d6fe..1099e1bf7 100644 --- a/griptape/schemas/base_schema.py +++ b/griptape/schemas/base_schema.py @@ -105,7 +105,7 @@ def _resolve_types(cls, attrs_cls: type) -> None: # These modules are required to avoid `NameError`s when resolving types. from griptape.drivers import BaseConversationMemoryDriver, BasePromptDriver from griptape.structures import Structure - from griptape.utils import PromptStack + from griptape.common import PromptStack, Message from griptape.tokenizers.base_tokenizer import BaseTokenizer from typing import Any @@ -116,7 +116,7 @@ def _resolve_types(cls, attrs_cls: type) -> None: attrs_cls, localns={ "PromptStack": PromptStack, - "Input": PromptStack.Input, + "Usage": Message.Usage, "Structure": Structure, "BaseConversationMemoryDriver": BaseConversationMemoryDriver, "BasePromptDriver": BasePromptDriver, diff --git a/griptape/structures/agent.py b/griptape/structures/agent.py index 2840d5c46..598aae37c 100644 --- a/griptape/structures/agent.py +++ b/griptape/structures/agent.py @@ -1,10 +1,12 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, Callable from attrs import define, field +from griptape.artifacts.text_artifact import TextArtifact from griptape.tools import BaseTool from griptape.memory.structure import Run from griptape.structures import Structure from griptape.tasks import PromptTask, ToolkitTask +from griptape.artifacts import BaseArtifact if TYPE_CHECKING: from griptape.tasks import BaseTask @@ -12,7 +14,9 @@ @define class Agent(Structure): - input_template: str = field(default=PromptTask.DEFAULT_INPUT_TEMPLATE) + input: str | list | tuple | BaseArtifact | Callable[[BaseTask], BaseArtifact] = field( + default=lambda task: task.full_context["args"][0] if task.full_context["args"] else TextArtifact(value="") + ) tools: list[BaseTool] = field(factory=list, kw_only=True) max_meta_memory_entries: Optional[int] = field(default=20, kw_only=True) fail_fast: bool = field(default=False, kw_only=True) @@ -26,11 +30,9 @@ def __attrs_post_init__(self) -> None: super().__attrs_post_init__() if len(self.tasks) == 0: if self.tools: - task = ToolkitTask( - self.input_template, tools=self.tools, max_meta_memory_entries=self.max_meta_memory_entries - ) + task = ToolkitTask(self.input, tools=self.tools, max_meta_memory_entries=self.max_meta_memory_entries) else: - task = PromptTask(self.input_template, max_meta_memory_entries=self.max_meta_memory_entries) + task = PromptTask(self.input, max_meta_memory_entries=self.max_meta_memory_entries) self.add_task(task) @@ -56,12 +58,7 @@ def try_run(self, *args) -> Agent: self.task.execute() if self.conversation_memory and self.output is not None: - if isinstance(self.task.input, tuple): - input_text = self.task.input[0].to_text() - else: - input_text = self.task.input.to_text() - - run = Run(input=input_text, output=self.task.output.to_text()) + run = Run(input=self.input_task.input, output=self.output) self.conversation_memory.add_run(run) diff --git a/griptape/structures/pipeline.py b/griptape/structures/pipeline.py index 4fc784974..408a42225 100644 --- a/griptape/structures/pipeline.py +++ b/griptape/structures/pipeline.py @@ -46,12 +46,7 @@ def try_run(self, *args) -> Pipeline: self.__run_from_task(self.input_task) if self.conversation_memory and self.output is not None: - if isinstance(self.input_task.input, tuple): - input_text = self.input_task.input[0].to_text() - else: - input_text = self.input_task.input.to_text() - - run = Run(input=input_text, output=self.output.to_text()) + run = Run(input=self.input_task.input, output=self.output) self.conversation_memory.add_run(run) diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 204650c41..3689f7330 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -120,12 +120,7 @@ def try_run(self, *args) -> Workflow: break if self.conversation_memory and self.output is not None: - if isinstance(self.input_task.input, tuple): - input_text = self.input_task.input[0].to_text() - else: - input_text = self.input_task.input.to_text() - - run = Run(input=input_text, output=self.output_task.output.to_text()) + run = Run(input=self.input_task.input, output=self.output) self.conversation_memory.add_run(run) diff --git a/griptape/tasks/prompt_task.py b/griptape/tasks/prompt_task.py index 694a5050d..f10899f76 100644 --- a/griptape/tasks/prompt_task.py +++ b/griptape/tasks/prompt_task.py @@ -1,10 +1,15 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Callable -from attrs import define, field, Factory -from griptape.utils import PromptStack -from griptape.utils import J2 -from griptape.tasks import BaseTextInputTask + +from typing import TYPE_CHECKING, Callable, Optional + +from attrs import Factory, define, field + from griptape.artifacts import BaseArtifact +from griptape.common import PromptStack +from griptape.tasks import BaseTask +from griptape.utils import J2 +from griptape.artifacts import TextArtifact, ListArtifact +from griptape.mixins import RuleMixin if TYPE_CHECKING: from griptape.drivers import BasePromptDriver @@ -12,11 +17,23 @@ @define -class PromptTask(BaseTextInputTask): +class PromptTask(RuleMixin, BaseTask): _prompt_driver: Optional[BasePromptDriver] = field(default=None, kw_only=True, alias="prompt_driver") generate_system_template: Callable[[PromptTask], str] = field( default=Factory(lambda self: self.default_system_template_generator, takes_self=True), kw_only=True ) + _input: str | list | tuple | BaseArtifact | Callable[[BaseTask], BaseArtifact] = field( + default=lambda task: task.full_context["args"][0] if task.full_context["args"] else TextArtifact(value=""), + alias="input", + ) + + @property + def input(self) -> BaseArtifact: + return self._process_task_input(self._input) + + @input.setter + def input(self, value: str | list | tuple | BaseArtifact | Callable[[BaseTask], BaseArtifact]) -> None: + self._input = value output: Optional[BaseArtifact] = field(default=None, init=False) @@ -25,12 +42,12 @@ def prompt_stack(self) -> PromptStack: stack = PromptStack() memory = self.structure.conversation_memory - stack.add_system_input(self.generate_system_template(self)) + stack.add_system_message(self.generate_system_template(self)) - stack.add_user_input(self.input.to_text()) + stack.add_user_message(self.input) if self.output: - stack.add_assistant_input(self.output.to_text()) + stack.add_assistant_message(self.output) if memory: # inserting at index 1 to place memory right after system prompt @@ -59,7 +76,35 @@ def default_system_template_generator(self, _: PromptTask) -> str: rulesets=J2("rulesets/rulesets.j2").render(rulesets=self.all_rulesets) ) - def run(self) -> BaseArtifact: - self.output = self.prompt_driver.run(self.prompt_stack) + def before_run(self) -> None: + super().before_run() + + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nInput: {self.input.to_text()}") - return self.output + def after_run(self) -> None: + super().after_run() + + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nOutput: {self.output.to_text()}") + + def run(self) -> BaseArtifact: + message = self.prompt_driver.run(self.prompt_stack) + + return message.to_artifact() + + def _process_task_input( + self, task_input: str | tuple | list | BaseArtifact | Callable[[BaseTask], BaseArtifact] + ) -> BaseArtifact: + if isinstance(task_input, TextArtifact): + task_input.value = J2().render_from_string(task_input.value, **self.full_context) + + return task_input + elif isinstance(task_input, Callable): + return self._process_task_input(task_input(self)) + elif isinstance(task_input, str): + return self._process_task_input(TextArtifact(task_input)) + elif isinstance(task_input, BaseArtifact): + return task_input + elif isinstance(task_input, list) or isinstance(task_input, tuple): + return ListArtifact([self._process_task_input(elem) for elem in task_input]) + else: + raise ValueError(f"Invalid input type: {type(task_input)} ") diff --git a/griptape/tasks/toolkit_task.py b/griptape/tasks/toolkit_task.py index c99f9e23f..58300b529 100644 --- a/griptape/tasks/toolkit_task.py +++ b/griptape/tasks/toolkit_task.py @@ -10,7 +10,7 @@ from griptape.tasks import ActionsSubtask from griptape.tasks import PromptTask from griptape.utils import J2 -from griptape.utils import PromptStack +from griptape.common import PromptStack if TYPE_CHECKING: from griptape.tools import BaseTool @@ -65,16 +65,16 @@ def prompt_stack(self) -> PromptStack: stack = PromptStack() memory = self.structure.conversation_memory - stack.add_system_input(self.generate_system_template(self)) + stack.add_system_message(self.generate_system_template(self)) - stack.add_user_input(self.input.to_text()) + stack.add_user_message(self.input) if self.output: - stack.add_assistant_input(self.output.to_text()) + stack.add_assistant_message(self.output.to_text()) else: for s in self.subtasks: - stack.add_assistant_input(self.generate_assistant_subtask_template(s)) - stack.add_user_input(self.generate_user_subtask_template(s)) + stack.add_assistant_message(self.generate_assistant_subtask_template(s)) + stack.add_user_message(self.generate_user_subtask_template(s)) if memory: # inserting at index 1 to place memory right after system prompt diff --git a/griptape/tokenizers/amazon_bedrock_tokenizer.py b/griptape/tokenizers/amazon_bedrock_tokenizer.py index 670b5739a..951802d59 100644 --- a/griptape/tokenizers/amazon_bedrock_tokenizer.py +++ b/griptape/tokenizers/amazon_bedrock_tokenizer.py @@ -1,4 +1,5 @@ from __future__ import annotations + from attrs import define, field from griptape.tokenizers.base_tokenizer import BaseTokenizer diff --git a/griptape/tokenizers/huggingface_tokenizer.py b/griptape/tokenizers/huggingface_tokenizer.py index a8312567d..fdebd23da 100644 --- a/griptape/tokenizers/huggingface_tokenizer.py +++ b/griptape/tokenizers/huggingface_tokenizer.py @@ -1,4 +1,5 @@ from __future__ import annotations + from typing import TYPE_CHECKING from attrs import define, field, Factory from griptape.utils import import_optional_dependency diff --git a/griptape/tokenizers/openai_tokenizer.py b/griptape/tokenizers/openai_tokenizer.py index 39a2a033e..a58ec5ce5 100644 --- a/griptape/tokenizers/openai_tokenizer.py +++ b/griptape/tokenizers/openai_tokenizer.py @@ -1,8 +1,11 @@ from __future__ import annotations + import logging -from attrs import define, field, Factory -import tiktoken from typing import Optional + +import tiktoken +from attrs import Factory, define, field + from griptape.tokenizers import BaseTokenizer diff --git a/griptape/tokenizers/voyageai_tokenizer.py b/griptape/tokenizers/voyageai_tokenizer.py index d8fb5adf1..649f6e0cc 100644 --- a/griptape/tokenizers/voyageai_tokenizer.py +++ b/griptape/tokenizers/voyageai_tokenizer.py @@ -1,8 +1,11 @@ from __future__ import annotations -from attrs import define, field, Factory + from typing import TYPE_CHECKING, Optional -from griptape.utils import import_optional_dependency + +from attrs import Factory, define, field + from griptape.tokenizers import BaseTokenizer +from griptape.utils import import_optional_dependency if TYPE_CHECKING: from voyageai import Client diff --git a/griptape/tools/prompt_image_generation_client/tool.py b/griptape/tools/prompt_image_generation_client/tool.py index 50020a1ea..6f4ce0e1f 100644 --- a/griptape/tools/prompt_image_generation_client/tool.py +++ b/griptape/tools/prompt_image_generation_client/tool.py @@ -30,20 +30,15 @@ class PromptImageGenerationClient(BlobArtifactFileOutputMixin, BaseTool): Literal( "prompts", description="A detailed list of features and descriptions to include in the generated image.", - ): list[str], - Literal( - "negative_prompts", - description="A detailed list of features and descriptions to avoid in the generated image.", - ): list[str], + ): list[str] } ), } ) def generate_image(self, params: dict[str, dict[str, list[str]]]) -> ImageArtifact | ErrorArtifact: prompts = params["values"]["prompts"] - negative_prompts = params["values"]["negative_prompts"] - output_artifact = self.engine.run(prompts=prompts, negative_prompts=negative_prompts) + output_artifact = self.engine.run(prompts=prompts) if self.output_dir or self.output_file: self._write_to_file(output_artifact) diff --git a/griptape/utils/__init__.py b/griptape/utils/__init__.py index 5ca129993..a84703f39 100644 --- a/griptape/utils/__init__.py +++ b/griptape/utils/__init__.py @@ -8,7 +8,6 @@ from .futures import execute_futures_dict from .futures import execute_futures_list from .token_counter import TokenCounter -from .prompt_stack import PromptStack from .dict_utils import remove_null_values_in_dict_recursively, dict_merge from .file_utils import load_file, load_files from .hash import str_to_hash @@ -38,7 +37,6 @@ def minify_json(value: str) -> str: "execute_futures_dict", "execute_futures_list", "TokenCounter", - "PromptStack", "remove_null_values_in_dict_recursively", "dict_merge", "Stream", diff --git a/griptape/utils/conversation.py b/griptape/utils/conversation.py index 2d87563ae..ae05e8b99 100644 --- a/griptape/utils/conversation.py +++ b/griptape/utils/conversation.py @@ -22,8 +22,8 @@ def lines(self) -> list[str]: def prompt_stack(self) -> list[str]: lines = [] - for stack in self.memory.to_prompt_stack().inputs: - lines.append(f"{stack.role}: {stack.content}") + for stack in self.memory.to_prompt_stack().messages: + lines.append(f"{stack.role}: {stack.to_text()}") return lines diff --git a/griptape/utils/prompt_stack.py b/griptape/utils/prompt_stack.py deleted file mode 100644 index 378f9dd1e..000000000 --- a/griptape/utils/prompt_stack.py +++ /dev/null @@ -1,48 +0,0 @@ -from __future__ import annotations -from attrs import define, field - -from griptape.mixins import SerializableMixin - - -@define -class PromptStack(SerializableMixin): - GENERIC_ROLE = "generic" - USER_ROLE = "user" - ASSISTANT_ROLE = "assistant" - SYSTEM_ROLE = "system" - - @define - class Input(SerializableMixin): - content: str = field(metadata={"serializable": True}) - role: str = field(metadata={"serializable": True}) - - def is_generic(self) -> bool: - return self.role == PromptStack.GENERIC_ROLE - - def is_system(self) -> bool: - return self.role == PromptStack.SYSTEM_ROLE - - def is_user(self) -> bool: - return self.role == PromptStack.USER_ROLE - - def is_assistant(self) -> bool: - return self.role == PromptStack.ASSISTANT_ROLE - - inputs: list[Input] = field(factory=list, kw_only=True, metadata={"serializable": True}) - - def add_input(self, content: str, role: str) -> Input: - self.inputs.append(self.Input(content=content, role=role)) - - return self.inputs[-1] - - def add_generic_input(self, content: str) -> Input: - return self.add_input(content, self.GENERIC_ROLE) - - def add_system_input(self, content: str) -> Input: - return self.add_input(content, self.SYSTEM_ROLE) - - def add_user_input(self, content: str) -> Input: - return self.add_input(content, self.USER_ROLE) - - def add_assistant_input(self, content: str) -> Input: - return self.add_input(content, self.ASSISTANT_ROLE) diff --git a/tests/mocks/mock_failing_prompt_driver.py b/tests/mocks/mock_failing_prompt_driver.py index c97b25d86..0dbeb8fda 100644 --- a/tests/mocks/mock_failing_prompt_driver.py +++ b/tests/mocks/mock_failing_prompt_driver.py @@ -1,10 +1,11 @@ +from __future__ import annotations from collections.abc import Iterator from attrs import define -from griptape.utils import PromptStack -from griptape.drivers import BasePromptDriver -from griptape.tokenizers import OpenAiTokenizer, BaseTokenizer from griptape.artifacts import TextArtifact +from griptape.common import PromptStack, Message, TextMessageContent, DeltaMessage, TextDeltaMessageContent +from griptape.drivers import BasePromptDriver +from griptape.tokenizers import BaseTokenizer, OpenAiTokenizer @define @@ -14,18 +15,25 @@ class MockFailingPromptDriver(BasePromptDriver): model: str = "test-model" tokenizer: BaseTokenizer = OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: + def try_run(self, prompt_stack: PromptStack) -> Message: if self.current_attempt < self.max_failures: self.current_attempt += 1 - raise Exception(f"failed attempt") + raise Exception("failed attempt") else: - return TextArtifact("success") + return Message( + content=[TextMessageContent(TextArtifact("success"))], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=100, output_tokens=100), + ) - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: if self.current_attempt < self.max_failures: self.current_attempt += 1 - raise Exception(f"failed attempt") + raise Exception("failed attempt") else: - yield TextArtifact("success") + yield DeltaMessage( + content=TextDeltaMessageContent("success"), + usage=DeltaMessage.Usage(input_tokens=100, output_tokens=100), + ) diff --git a/tests/mocks/mock_prompt_driver.py b/tests/mocks/mock_prompt_driver.py index 3235f7cd5..4786b78a6 100644 --- a/tests/mocks/mock_prompt_driver.py +++ b/tests/mocks/mock_prompt_driver.py @@ -1,11 +1,15 @@ from __future__ import annotations + from collections.abc import Iterator from typing import Callable + from attrs import define, field -from griptape.utils import PromptStack + +from griptape.artifacts import TextArtifact +from griptape.common import PromptStack, Message, DeltaMessage, TextMessageContent, TextDeltaMessageContent from griptape.drivers import BasePromptDriver from griptape.tokenizers import BaseTokenizer -from griptape.artifacts import TextArtifact + from tests.mocks.mock_tokenizer import MockTokenizer @@ -16,12 +20,18 @@ class MockPromptDriver(BasePromptDriver): mock_input: str | Callable[[], str] = field(default="mock input", kw_only=True) mock_output: str | Callable[[PromptStack], str] = field(default="mock output", kw_only=True) - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - return TextArtifact( - value=self.mock_output(prompt_stack) if isinstance(self.mock_output, Callable) else self.mock_output - ) + def try_run(self, prompt_stack: PromptStack) -> Message: + output = self.mock_output(prompt_stack) if isinstance(self.mock_output, Callable) else self.mock_output - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - yield TextArtifact( - value=self.mock_output(prompt_stack) if isinstance(self.mock_output, Callable) else self.mock_output + return Message( + content=[TextMessageContent(TextArtifact(output))], + role=Message.ASSISTANT_ROLE, + usage=Message.Usage(input_tokens=100, output_tokens=100), ) + + def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: + output = self.mock_output(prompt_stack) if isinstance(self.mock_output, Callable) else self.mock_output + + yield DeltaMessage(content=TextDeltaMessageContent(output)) + + yield DeltaMessage(usage=DeltaMessage.Usage(input_tokens=100, output_tokens=100)) diff --git a/tests/mocks/mock_value_prompt_driver.py b/tests/mocks/mock_value_prompt_driver.py deleted file mode 100644 index 12ddeec9f..000000000 --- a/tests/mocks/mock_value_prompt_driver.py +++ /dev/null @@ -1,21 +0,0 @@ -from collections.abc import Iterator -from attrs import define, field, Factory -from griptape.drivers import BasePromptDriver -from griptape.tokenizers import OpenAiTokenizer, BaseTokenizer -from griptape.artifacts import TextArtifact -from griptape.utils.prompt_stack import PromptStack - - -@define -class MockValuePromptDriver(BasePromptDriver): - value: str = field(kw_only=True) - model: str = field(default="test-model") - tokenizer: BaseTokenizer = field( - default=Factory(lambda: OpenAiTokenizer(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL)) - ) - - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - return TextArtifact(value=self.value) - - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - yield TextArtifact(value=self.value) diff --git a/tests/unit/config/test_google_structure_config.py b/tests/unit/config/test_google_structure_config.py index 72e623ff0..ad96f2a35 100644 --- a/tests/unit/config/test_google_structure_config.py +++ b/tests/unit/config/test_google_structure_config.py @@ -19,7 +19,7 @@ def test_to_dict(self, config): "temperature": 0.1, "max_tokens": None, "stream": False, - "model": "gemini-pro", + "model": "gemini-1.5-pro", "top_p": None, "top_k": None, }, diff --git a/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py index ef3b0e1df..80d77d24d 100644 --- a/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py +++ b/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py @@ -81,5 +81,5 @@ def test_load(self): assert new_memory.type == "ConversationMemory" assert len(new_memory.runs) == 2 - assert new_memory.runs[0].input == "test" - assert new_memory.runs[0].output == "mock output" + assert new_memory.runs[0].input.value == "test" + assert new_memory.runs[0].output.value == "mock output" diff --git a/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py index d12d5d3d2..c794afd0e 100644 --- a/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py +++ b/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py @@ -52,8 +52,8 @@ def test_load(self): assert new_memory.type == "ConversationMemory" assert len(new_memory.runs) == 2 - assert new_memory.runs[0].input == "test" - assert new_memory.runs[0].output == "mock output" + assert new_memory.runs[0].input.value == "test" + assert new_memory.runs[0].output.value == "mock output" assert new_memory.max_runs == 5 def test_autoload(self): @@ -71,8 +71,8 @@ def test_autoload(self): assert autoloaded_memory.type == "ConversationMemory" assert len(autoloaded_memory.runs) == 2 - assert autoloaded_memory.runs[0].input == "test" - assert autoloaded_memory.runs[0].output == "mock output" + assert autoloaded_memory.runs[0].input.value == "test" + assert autoloaded_memory.runs[0].output.value == "mock output" def __delete_file(self, file_path): try: diff --git a/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py index 13f75d464..1af9d74dc 100644 --- a/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py +++ b/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py @@ -3,7 +3,7 @@ from griptape.memory.structure.base_conversation_memory import BaseConversationMemory from griptape.drivers.memory.conversation.redis_conversation_memory_driver import RedisConversationMemoryDriver -TEST_CONVERSATION = '{"type": "ConversationMemory", "runs": [{"type": "Run", "id": "729ca6be5d79433d9762eb06dfd677e2", "input": "Hi There, Hello", "output": "Hello! How can I assist you today?"}], "max_runs": 2}' +TEST_CONVERSATION = '{"type": "ConversationMemory", "runs": [{"type": "Run", "id": "729ca6be5d79433d9762eb06dfd677e2", "input": {"type": "TextArtifact", "id": "1234", "value": "Hi There, Hello"}, "output": {"type": "TextArtifact", "id": "123", "value": "Hello! How can I assist you today?"}}], "max_runs": 2}' CONVERSATION_ID = "117151897f344ff684b553d0655d8f39" INDEX = "griptape_conversation" HOST = "127.0.0.1" diff --git a/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py index 8aa345595..3cd165140 100644 --- a/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_amazon_bedrock_prompt_driver.py @@ -1,6 +1,7 @@ import pytest -from griptape.utils import PromptStack +from griptape.artifacts import ImageArtifact, TextArtifact +from griptape.common import PromptStack from griptape.drivers import AmazonBedrockPromptDriver @@ -9,7 +10,10 @@ class TestAmazonBedrockPromptDriver: def mock_converse(self, mocker): mock_converse = mocker.patch("boto3.Session").return_value.client.return_value.converse - mock_converse.return_value = {"output": {"message": {"content": [{"text": "model-output"}]}}} + mock_converse.return_value = { + "output": {"message": {"content": [{"text": "model-output"}]}}, + "usage": {"inputTokens": 5, "outputTokens": 10}, + } return mock_converse @@ -17,26 +21,33 @@ def mock_converse(self, mocker): def mock_converse_stream(self, mocker): mock_converse_stream = mocker.patch("boto3.Session").return_value.client.return_value.converse_stream - mock_converse_stream.return_value = {"stream": [{"contentBlockDelta": {"delta": {"text": "model-output"}}}]} + mock_converse_stream.return_value = { + "stream": [ + {"contentBlockDelta": {"contentBlockIndex": 0, "delta": {"text": "model-output"}}}, + {"metadata": {"usage": {"inputTokens": 5, "outputTokens": 10}}}, + ] + } return mock_converse_stream - @pytest.fixture - def prompt_stack(self): + @pytest.fixture(params=[True, False]) + def prompt_stack(self, request): prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + if request.param: + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message(TextArtifact("user-input")) + prompt_stack.add_user_message(ImageArtifact(value=b"image-data", format="png", width=100, height=100)) + prompt_stack.add_assistant_message("assistant-input") return prompt_stack @pytest.fixture def messages(self): return [ - {"role": "user", "content": [{"text": "generic-input"}]}, - {"role": "system", "content": [{"text": "system-input"}]}, {"role": "user", "content": [{"text": "user-input"}]}, + {"role": "user", "content": [{"text": "user-input"}]}, + {"role": "user", "content": [{"image": {"format": "png", "source": {"bytes": b"image-data"}}}]}, {"role": "assistant", "content": [{"text": "assistant-input"}]}, ] @@ -50,34 +61,34 @@ def test_try_run(self, mock_converse, prompt_stack, messages): # Then mock_converse.assert_called_once_with( modelId=driver.model, - messages=[ - {"role": "user", "content": [{"text": "generic-input"}]}, - {"role": "user", "content": [{"text": "user-input"}]}, - {"role": "assistant", "content": [{"text": "assistant-input"}]}, - ], - system=[{"text": "system-input"}], + messages=messages, + **({"system": [{"text": "system-input"}]} if prompt_stack.system_messages else {"system": []}), inferenceConfig={"temperature": driver.temperature}, additionalModelRequestFields={}, ) assert text_artifact.value == "model-output" + assert text_artifact.usage.input_tokens == 5 + assert text_artifact.usage.output_tokens == 10 def test_try_stream_run(self, mock_converse_stream, prompt_stack, messages): # Given driver = AmazonBedrockPromptDriver(model="ai21.j2", stream=True) # When - text_artifact = next(driver.try_stream(prompt_stack)) + stream = driver.try_stream(prompt_stack) + event = next(stream) # Then mock_converse_stream.assert_called_once_with( modelId=driver.model, - messages=[ - {"role": "user", "content": [{"text": "generic-input"}]}, - {"role": "user", "content": [{"text": "user-input"}]}, - {"role": "assistant", "content": [{"text": "assistant-input"}]}, - ], - system=[{"text": "system-input"}], + messages=messages, + **({"system": [{"text": "system-input"}]} if prompt_stack.system_messages else {"system": []}), inferenceConfig={"temperature": driver.temperature}, additionalModelRequestFields={}, ) - assert text_artifact.value == "model-output" + + assert event.content.text == "model-output" + + event = next(stream) + assert event.usage.input_tokens == 5 + assert event.usage.output_tokens == 10 diff --git a/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py b/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py index 4ae8fe944..a75fc6ed0 100644 --- a/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_amazon_sagemaker_jumpstart_prompt_driver.py @@ -2,7 +2,7 @@ from botocore.response import StreamingBody from griptape.tokenizers import HuggingFaceTokenizer from griptape.drivers.prompt.amazon_sagemaker_jumpstart_prompt_driver import AmazonSageMakerJumpstartPromptDriver -from griptape.utils import PromptStack +from griptape.common import PromptStack from io import BytesIO import json import pytest @@ -18,7 +18,9 @@ class TestAmazonSageMakerJumpstartPromptDriver: @pytest.fixture(autouse=True) def tokenizer(self, mocker): from_pretrained = mocker.patch("transformers.AutoTokenizer").from_pretrained - from_pretrained.return_value.apply_chat_template.return_value = "foo\n\nUser: bar" + from_pretrained.return_value.decode.return_value = "foo\n\nUser: bar" + from_pretrained.return_value.apply_chat_template.return_value = [1, 2, 3] + from_pretrained.return_value.encode.return_value = [1, 2, 3] from_pretrained.return_value.model_max_length = 8000 from_pretrained.return_value.eos_token_id = 1 @@ -35,7 +37,7 @@ def test_try_run(self, mock_client): # Given driver = AmazonSageMakerJumpstartPromptDriver(endpoint="model", model="model") prompt_stack = PromptStack() - prompt_stack.add_user_input("prompt-stack") + prompt_stack.add_user_message("prompt-stack") # When response_body = [{"generated_text": "foobar"}] @@ -64,6 +66,8 @@ def test_try_run(self, mock_client): ) assert text_artifact.value == "foobar" + assert text_artifact.usage.input_tokens == 3 + assert text_artifact.usage.output_tokens == 3 # When response_body = {"generated_text": "foobar"} @@ -97,7 +101,7 @@ def test_try_stream(self, mock_client): # Given driver = AmazonSageMakerJumpstartPromptDriver(endpoint="model", model="model") prompt_stack = PromptStack() - prompt_stack.add_user_input("prompt-stack") + prompt_stack.add_user_message("prompt-stack") # When with pytest.raises(NotImplementedError) as e: @@ -122,7 +126,7 @@ def test_try_run_throws_on_empty_response(self, mock_client): driver = AmazonSageMakerJumpstartPromptDriver(endpoint="model", model="model") mock_client.invoke_endpoint.return_value = {"Body": to_streaming_body([])} prompt_stack = PromptStack() - prompt_stack.add_user_input("prompt-stack") + prompt_stack.add_user_message("prompt-stack") # When with pytest.raises(Exception) as e: diff --git a/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py b/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py index 22178bbf3..858c05ee6 100644 --- a/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_anthropic_prompt_driver.py @@ -1,5 +1,6 @@ from griptape.drivers import AnthropicPromptDriver -from griptape.utils import PromptStack +from griptape.common import PromptStack +from griptape.artifacts import TextArtifact, ImageArtifact, ListArtifact from unittest.mock import Mock import pytest @@ -8,21 +9,36 @@ class TestAnthropicPromptDriver: @pytest.fixture def mock_client(self, mocker): mock_client = mocker.patch("anthropic.Anthropic") - mock_content = Mock() - mock_content.text = "model-output" - mock_client.return_value.messages.create.return_value.content = [mock_content] - mock_client.return_value.count_tokens.return_value = 5 + + mock_client.return_value = Mock( + messages=Mock( + create=Mock( + return_value=Mock( + usage=Mock(input_tokens=5, output_tokens=10), content=[Mock(type="text", text="model-output")] + ) + ) + ) + ) return mock_client @pytest.fixture def mock_stream_client(self, mocker): mock_stream_client = mocker.patch("anthropic.Anthropic") - mock_chunk = Mock() - mock_chunk.type = "content_block_delta" - mock_chunk.delta.text = "model-output" - mock_stream_client.return_value.messages.create.return_value = iter([mock_chunk]) - mock_stream_client.return_value.count_tokens.return_value = 5 + + mock_stream_client.return_value = Mock( + messages=Mock( + create=Mock( + return_value=iter( + [ + Mock(type="message_start", message=Mock(usage=Mock(input_tokens=5))), + Mock(type="content_block_delta", delta=Mock(type="text_delta", text="model-output")), + Mock(type="message_delta", usage=Mock(output_tokens=10)), + ] + ) + ) + ) + ) return mock_stream_client @@ -45,20 +61,30 @@ def test_init(self, model): def test_try_run(self, mock_client, model, system_enabled): # Given prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") if system_enabled: - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message(TextArtifact("user-input")) + prompt_stack.add_user_message(ImageArtifact(value=b"image-data", format="png", width=100, height=100)) + prompt_stack.add_assistant_message("assistant-input") driver = AnthropicPromptDriver(model=model, api_key="api-key") expected_messages = [ - {"role": "user", "content": "generic-input"}, {"role": "user", "content": "user-input"}, + {"role": "user", "content": "user-input"}, + { + "content": [ + { + "source": {"data": "aW1hZ2UtZGF0YQ==", "media_type": "image/png", "type": "base64"}, + "type": "image", + } + ], + "role": "user", + }, {"role": "assistant", "content": "assistant-input"}, ] # When - text_artifact = driver.try_run(prompt_stack) + message = driver.try_run(prompt_stack) # Then mock_client.return_value.messages.create.assert_called_once_with( @@ -71,7 +97,9 @@ def test_try_run(self, mock_client, model, system_enabled): top_k=250, **{"system": "system-input"} if system_enabled else {}, ) - assert text_artifact.value == "model-output" + assert message.value == "model-output" + assert message.usage.input_tokens == 5 + assert message.usage.output_tokens == 10 @pytest.mark.parametrize( "model", @@ -88,20 +116,34 @@ def test_try_run(self, mock_client, model, system_enabled): def test_try_stream_run(self, mock_stream_client, model, system_enabled): # Given prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") if system_enabled: - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message( + ListArtifact( + [TextArtifact("user-input"), ImageArtifact(value=b"image-data", format="png", width=100, height=100)] + ) + ) + prompt_stack.add_assistant_message("assistant-input") expected_messages = [ - {"role": "user", "content": "generic-input"}, {"role": "user", "content": "user-input"}, + { + "content": [ + {"type": "text", "text": "user-input"}, + { + "source": {"data": "aW1hZ2UtZGF0YQ==", "media_type": "image/png", "type": "base64"}, + "type": "image", + }, + ], + "role": "user", + }, {"role": "assistant", "content": "assistant-input"}, ] driver = AnthropicPromptDriver(model=model, api_key="api-key", stream=True) # When - text_artifact = next(driver.try_stream(prompt_stack)) + stream = driver.try_stream(prompt_stack) + event = next(stream) # Then mock_stream_client.return_value.messages.create.assert_called_once_with( @@ -115,7 +157,13 @@ def test_try_stream_run(self, mock_stream_client, model, system_enabled): top_k=250, **{"system": "system-input"} if system_enabled else {}, ) - assert text_artifact.value == "model-output" + assert event.usage.input_tokens == 5 + + event = next(stream) + assert event.content.text == "model-output" + + event = next(stream) + assert event.usage.output_tokens == 10 def test_try_run_throws_when_prompt_stack_is_string(self): # Given @@ -127,4 +175,4 @@ def test_try_run_throws_when_prompt_stack_is_string(self): driver.try_run(prompt_stack) # pyright: ignore # Then - assert e.value.args[0] == "'str' object has no attribute 'inputs'" + assert e.value.args[0] == "'str' object has no attribute 'messages'" diff --git a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py index f6bd12d80..92544a74e 100644 --- a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py @@ -8,20 +8,22 @@ class TestAzureOpenAiChatPromptDriver(TestOpenAiChatPromptDriverFixtureMixin): @pytest.fixture def mock_chat_completion_create(self, mocker): mock_chat_create = mocker.patch("openai.AzureOpenAI").return_value.chat.completions.create - mock_choice = Mock() - mock_choice.message.content = "model-output" - mock_chat_create.return_value.headers = {} - mock_chat_create.return_value.choices = [mock_choice] + mock_chat_create.return_value = Mock( + headers={}, + choices=[Mock(message=Mock(content="model-output"))], + usage=Mock(prompt_tokens=5, completion_tokens=10), + ) return mock_chat_create @pytest.fixture def mock_chat_completion_stream_create(self, mocker): mock_chat_create = mocker.patch("openai.AzureOpenAI").return_value.chat.completions.create - mock_chunk = Mock() - mock_choice = Mock() - mock_choice.delta.content = "model-output" - mock_chunk.choices = [mock_choice] - mock_chat_create.return_value = iter([mock_chunk]) + mock_chat_create.return_value = iter( + [ + Mock(choices=[Mock(delta=Mock(content="model-output"))], usage=None), + Mock(choices=None, usage=Mock(prompt_tokens=5, completion_tokens=10)), + ] + ) return mock_chat_create def test_init(self): @@ -37,13 +39,11 @@ def test_try_run(self, mock_chat_completion_create, prompt_stack, messages): # Then mock_chat_completion_create.assert_called_once_with( - model=driver.model, - temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, - user=driver.user, - messages=messages, + model=driver.model, temperature=driver.temperature, user=driver.user, messages=messages ) assert text_artifact.value == "model-output" + assert text_artifact.usage.input_tokens == 5 + assert text_artifact.usage.output_tokens == 10 def test_try_stream_run(self, mock_chat_completion_stream_create, prompt_stack, messages): # Given @@ -52,15 +52,21 @@ def test_try_stream_run(self, mock_chat_completion_stream_create, prompt_stack, ) # When - text_artifact = next(driver.try_stream(prompt_stack)) + stream = driver.try_stream(prompt_stack) + event = next(stream) # Then mock_chat_completion_stream_create.assert_called_once_with( model=driver.model, temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, user=driver.user, stream=True, messages=messages, + stream_options={"include_usage": True}, ) - assert text_artifact.value == "model-output" + + assert event.content.text == "model-output" + + event = next(stream) + assert event.usage.input_tokens == 5 + assert event.usage.output_tokens == 10 diff --git a/tests/unit/drivers/prompt/test_base_prompt_driver.py b/tests/unit/drivers/prompt/test_base_prompt_driver.py index 0743402aa..6eb000e1f 100644 --- a/tests/unit/drivers/prompt/test_base_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_base_prompt_driver.py @@ -1,5 +1,6 @@ +from griptape.common.prompt_stack.messages.message import Message from griptape.events import FinishPromptEvent, StartPromptEvent -from griptape.utils import PromptStack +from griptape.common import PromptStack from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_failing_prompt_driver import MockFailingPromptDriver from griptape.artifacts import ErrorArtifact, TextArtifact @@ -37,7 +38,13 @@ def test_run_via_pipeline_publishes_events(self, mocker): assert instance_count(events, FinishPromptEvent) == 1 def test_run(self): - assert isinstance(MockPromptDriver().run(PromptStack(inputs=[])), TextArtifact) + assert isinstance(MockPromptDriver().run(PromptStack(messages=[])), Message) + + def test_run_with_stream(self): + pipeline = Pipeline() + result = MockPromptDriver(stream=True, structure=pipeline).run(PromptStack(messages=[])) + assert isinstance(result, Message) + assert result.value == "mock output" def instance_count(instances, clazz): diff --git a/tests/unit/drivers/prompt/test_cohere_prompt_driver.py b/tests/unit/drivers/prompt/test_cohere_prompt_driver.py index 6e5063b26..d65775e8b 100644 --- a/tests/unit/drivers/prompt/test_cohere_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_cohere_prompt_driver.py @@ -1,22 +1,30 @@ -from griptape.drivers import CoherePromptDriver -from griptape.utils import PromptStack from unittest.mock import Mock + import pytest +from griptape.common import PromptStack +from griptape.drivers import CoherePromptDriver + class TestCoherePromptDriver: @pytest.fixture def mock_client(self, mocker): - mock_client = mocker.patch("cohere.Client") - mock_client.return_value.chat.return_value = Mock(text="model-output") + mock_client = mocker.patch("cohere.Client").return_value + mock_client.chat.return_value = Mock( + text="model-output", meta=Mock(tokens=Mock(input_tokens=5, output_tokens=10)) + ) return mock_client @pytest.fixture def mock_stream_client(self, mocker): - mock_client = mocker.patch("cohere.Client") - mock_chunk = Mock(text="model-output", event_type="text-generation") - mock_client.return_value.chat_stream.return_value = iter([mock_chunk]) + mock_client = mocker.patch("cohere.Client").return_value + mock_client.chat_stream.return_value = iter( + [ + Mock(text="model-output", event_type="text-generation"), + Mock(response=Mock(meta=Mock(tokens=Mock(input_tokens=5, output_tokens=10))), event_type="stream-end"), + ] + ) return mock_client @@ -24,67 +32,70 @@ def mock_stream_client(self, mocker): def mock_tokenizer(self, mocker): return mocker.patch("griptape.tokenizers.CohereTokenizer").return_value - @pytest.fixture - def prompt_stack(self): + @pytest.fixture(params=[True, False]) + def prompt_stack(self, request): prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + if request.param: + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_assistant_message("assistant-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_assistant_message("assistant-input") return prompt_stack def test_init(self): assert CoherePromptDriver(model="command", api_key="foobar") - def test_try_run(self, mock_client, prompt_stack): # pyright: ignore + def test_try_run(self, mock_client, prompt_stack): # Given driver = CoherePromptDriver(model="command", api_key="api-key") # When text_artifact = driver.try_run(prompt_stack) - print(f"Called methods: {mock_client}") # Then - expected_message = "assistant-input" - expected_history = [ - {"role": "ASSISTANT", "text": "generic-input"}, - {"role": "SYSTEM", "text": "system-input"}, - {"role": "USER", "text": "user-input"}, - ] - mock_client.return_value.chat.assert_called_once_with( - message=expected_message, - temperature=driver.temperature, - stop_sequences=driver.tokenizer.stop_sequences, - max_tokens=driver.max_tokens, - chat_history=expected_history, + mock_client.chat.assert_called_once_with( + chat_history=[ + {"content": [{"text": "user-input"}], "role": "USER"}, + {"content": [{"text": "assistant-input"}], "role": "CHATBOT"}, + {"content": [{"text": "user-input"}], "role": "USER"}, + ], + max_tokens=None, + message="assistant-input", + **({"preamble": "system-input"} if prompt_stack.system_messages else {}), + stop_sequences=[], + temperature=0.1, ) - assert text_artifact.value == "model-output" - - def test_try_run_no_history(self, mock_client, prompt_stack): - # Given - prompt_stack_no_history = PromptStack() - prompt_stack_no_history.add_user_input("user-input") - driver = CoherePromptDriver(model="command", api_key="api-key") - - # When - text_artifact = driver.try_run(prompt_stack_no_history) - # Then - expected_message = "user-input" - mock_client.return_value.chat.assert_called_once_with( - message=expected_message, - temperature=driver.temperature, - stop_sequences=driver.tokenizer.stop_sequences, - max_tokens=driver.max_tokens, - ) assert text_artifact.value == "model-output" + assert text_artifact.usage.input_tokens == 5 + assert text_artifact.usage.output_tokens == 10 def test_try_stream_run(self, mock_stream_client, prompt_stack): # pyright: ignore # Given driver = CoherePromptDriver(model="command", api_key="api-key", stream=True) # When - text_artifact = next(driver.try_stream(prompt_stack)) + stream = driver.try_stream(prompt_stack) + event = next(stream) # Then - assert text_artifact.value == "model-output" + + mock_stream_client.chat_stream.assert_called_once_with( + chat_history=[ + {"content": [{"text": "user-input"}], "role": "USER"}, + {"content": [{"text": "assistant-input"}], "role": "CHATBOT"}, + {"content": [{"text": "user-input"}], "role": "USER"}, + ], + max_tokens=None, + message="assistant-input", + **({"preamble": "system-input"} if prompt_stack.system_messages else {}), + stop_sequences=[], + temperature=0.1, + ) + + assert event.content.text == "model-output" + + event = next(stream) + assert event.usage.input_tokens == 5 + assert event.usage.output_tokens == 10 diff --git a/tests/unit/drivers/prompt/test_google_prompt_driver.py b/tests/unit/drivers/prompt/test_google_prompt_driver.py index f655d3e51..6a25ec3d3 100644 --- a/tests/unit/drivers/prompt/test_google_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_google_prompt_driver.py @@ -1,6 +1,7 @@ from google.generativeai.types import GenerationConfig +from griptape.artifacts import TextArtifact, ImageArtifact from griptape.drivers import GooglePromptDriver -from griptape.utils import PromptStack +from griptape.common import PromptStack from unittest.mock import Mock import pytest @@ -9,14 +10,21 @@ class TestGooglePromptDriver: @pytest.fixture def mock_generative_model(self, mocker): mock_generative_model = mocker.patch("google.generativeai.GenerativeModel") - mock_generative_model.return_value.generate_content.return_value = Mock(text="model-output") + mock_generative_model.return_value.generate_content.return_value = Mock( + text="model-output", usage_metadata=Mock(prompt_token_count=5, candidates_token_count=10) + ) return mock_generative_model @pytest.fixture def mock_stream_generative_model(self, mocker): mock_generative_model = mocker.patch("google.generativeai.GenerativeModel") - mock_generative_model.return_value.generate_content.return_value = iter([Mock(text="model-output")]) + mock_generative_model.return_value.generate_content.return_value = iter( + [ + Mock(text="model-output", usage_metadata=Mock(prompt_token_count=5, candidates_token_count=5)), + Mock(text="model-output", usage_metadata=Mock(prompt_token_count=5, candidates_token_count=5)), + ] + ) return mock_generative_model @@ -24,75 +32,77 @@ def test_init(self): driver = GooglePromptDriver(model="gemini-pro", api_key="1234") assert driver - def test_try_run(self, mock_generative_model): + @pytest.mark.parametrize("system_enabled", [True, False]) + def test_try_run(self, mock_generative_model, system_enabled): # Given prompt_stack = PromptStack() - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") - prompt_stack.add_generic_input("generic-input") + if system_enabled: + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message(TextArtifact("user-input")) + prompt_stack.add_user_message(ImageArtifact(value=b"image-data", format="png", width=100, height=100)) + prompt_stack.add_assistant_message("assistant-input") driver = GooglePromptDriver(model="gemini-pro", api_key="api-key", top_p=0.5, top_k=50) # When text_artifact = driver.try_run(prompt_stack) # Then + messages = [ + *( + [{"parts": ["system-input", "user-input"], "role": "user"}] + if system_enabled + else [{"parts": ["user-input"], "role": "user"}] + ), + {"parts": ["user-input"], "role": "user"}, + {"parts": [{"data": b"image-data", "mime_type": "image/png"}], "role": "user"}, + {"parts": ["assistant-input"], "role": "model"}, + ] mock_generative_model.return_value.generate_content.assert_called_once_with( - [ - {"parts": ["system-input", "user-input"], "role": "user"}, - {"parts": ["assistant-input"], "role": "model"}, - {"parts": ["generic-input"], "role": "user"}, - ], + messages, generation_config=GenerationConfig( max_output_tokens=None, temperature=0.1, top_p=0.5, top_k=50, stop_sequences=[] ), ) assert text_artifact.value == "model-output" + assert text_artifact.usage.input_tokens == 5 + assert text_artifact.usage.output_tokens == 10 - def test_try_stream(self, mock_stream_generative_model): + @pytest.mark.parametrize("system_enabled", [True, False]) + def test_try_stream(self, mock_stream_generative_model, system_enabled): # Given prompt_stack = PromptStack() - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") - prompt_stack.add_generic_input("generic-input") + if system_enabled: + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message(TextArtifact("user-input")) + prompt_stack.add_user_message(ImageArtifact(value=b"image-data", format="png", width=100, height=100)) + prompt_stack.add_assistant_message("assistant-input") driver = GooglePromptDriver(model="gemini-pro", api_key="api-key", stream=True, top_p=0.5, top_k=50) # When - text_artifact_stream = driver.try_stream(prompt_stack) + stream = driver.try_stream(prompt_stack) # Then - text_artifact = next(text_artifact_stream) + event = next(stream) + messages = [ + *( + [{"parts": ["system-input", "user-input"], "role": "user"}] + if system_enabled + else [{"parts": ["user-input"], "role": "user"}] + ), + {"parts": ["user-input"], "role": "user"}, + {"parts": [{"data": b"image-data", "mime_type": "image/png"}], "role": "user"}, + {"parts": ["assistant-input"], "role": "model"}, + ] mock_stream_generative_model.return_value.generate_content.assert_called_once_with( - [ - {"parts": ["system-input", "user-input"], "role": "user"}, - {"parts": ["assistant-input"], "role": "model"}, - {"parts": ["generic-input"], "role": "user"}, - ], + messages, stream=True, generation_config=GenerationConfig(temperature=0.1, top_p=0.5, top_k=50, stop_sequences=[]), ) - assert text_artifact.value == "model-output" - - def test_prompt_stack_to_model_input(self): - # Given - driver = GooglePromptDriver(model="gemini-pro", api_key="1234") - prompt_stack = PromptStack() - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_assistant_input("assistant-input") - prompt_stack.add_user_input("user-input") + assert event.content.text == "model-output" + assert event.usage.input_tokens == 5 + assert event.usage.output_tokens == 5 - # When - model_input = driver._prompt_stack_to_model_input(prompt_stack) - - # Then - assert model_input == [ - {"role": "user", "parts": ["system-input", "user-input"]}, - {"role": "model", "parts": ["assistant-input"]}, - {"role": "user", "parts": ["generic-input"]}, - {"role": "model", "parts": ["assistant-input"]}, - {"role": "user", "parts": ["user-input"]}, - ] + event = next(stream) + assert event.usage.output_tokens == 5 diff --git a/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py b/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py index 15bbb4ead..4618e1de3 100644 --- a/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_hugging_face_hub_prompt_driver.py @@ -1,5 +1,5 @@ from griptape.drivers import HuggingFaceHubPromptDriver -from griptape.utils import PromptStack +from griptape.common import PromptStack import pytest @@ -7,6 +7,7 @@ class TestHuggingFaceHubPromptDriver: @pytest.fixture def mock_client(self, mocker): mock_client = mocker.patch("huggingface_hub.InferenceClient").return_value + mock_client.text_generation.return_value = "model-output" return mock_client @@ -14,6 +15,8 @@ def mock_client(self, mocker): def tokenizer(self, mocker): from_pretrained = tokenizer = mocker.patch("transformers.AutoTokenizer").from_pretrained from_pretrained.return_value.apply_chat_template.return_value = [1, 2, 3] + from_pretrained.return_value.decode.return_value = "foo\n\nUser: bar" + from_pretrained.return_value.encode.return_value = [1, 2, 3] return tokenizer @@ -27,10 +30,9 @@ def mock_client_stream(self, mocker): @pytest.fixture def prompt_stack(self): prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_assistant_message("assistant-input") return prompt_stack @pytest.fixture(autouse=True) @@ -47,17 +49,24 @@ def test_try_run(self, prompt_stack, mock_client): driver = HuggingFaceHubPromptDriver(api_token="api-token", model="repo-id") # When - text_artifact = driver.try_run(prompt_stack) + message = driver.try_run(prompt_stack) # Then - assert text_artifact.value == "model-output" + assert message.value == "model-output" + assert message.usage.input_tokens == 3 + assert message.usage.output_tokens == 3 def test_try_stream(self, prompt_stack, mock_client_stream): # Given driver = HuggingFaceHubPromptDriver(api_token="api-token", model="repo-id", stream=True) # When - text_artifact = next(driver.try_stream(prompt_stack)) + stream = driver.try_stream(prompt_stack) + event = next(stream) # Then - assert text_artifact.value == "model-output" + assert event.content.text == "model-output" + + event = next(stream) + assert event.usage.input_tokens == 3 + assert event.usage.output_tokens == 3 diff --git a/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py b/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py index b2746ca58..a63d697fb 100644 --- a/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_hugging_face_pipeline_prompt_driver.py @@ -1,5 +1,5 @@ from griptape.drivers import HuggingFacePipelinePromptDriver -from griptape.utils import PromptStack +from griptape.common import PromptStack import pytest @@ -22,15 +22,15 @@ def mock_autotokenizer(self, mocker): mock_autotokenizer.model_max_length = 42 mock_autotokenizer.apply_chat_template.return_value = [1, 2, 3] mock_autotokenizer.decode.return_value = "model-output" + mock_autotokenizer.encode.return_value = [1, 2, 3] return mock_autotokenizer @pytest.fixture def prompt_stack(self): prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_assistant_message("assistant-input") return prompt_stack def test_init(self): @@ -41,10 +41,12 @@ def test_try_run(self, prompt_stack): driver = HuggingFacePipelinePromptDriver(model="foo", max_tokens=42) # When - text_artifact = driver.try_run(prompt_stack) + message = driver.try_run(prompt_stack) # Then - assert text_artifact.value == "model-output" + assert message.value == "model-output" + assert message.usage.input_tokens == 3 + assert message.usage.output_tokens == 3 def test_try_stream(self, prompt_stack): # Given diff --git a/tests/unit/drivers/prompt/test_ollama_prompt_driver.py b/tests/unit/drivers/prompt/test_ollama_prompt_driver.py index d42a8b45d..a247a77ab 100644 --- a/tests/unit/drivers/prompt/test_ollama_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_ollama_prompt_driver.py @@ -1,5 +1,7 @@ +from griptape.common.prompt_stack.contents.text_delta_message_content import TextDeltaMessageContent from griptape.drivers import OllamaPromptDriver -from griptape.utils import PromptStack +from griptape.common import PromptStack +from griptape.artifacts import ImageArtifact, ListArtifact, TextArtifact import pytest @@ -25,20 +27,24 @@ def test_init(self): def test_try_run(self, mock_client): # Given prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message( + ListArtifact( + [TextArtifact("user-input"), ImageArtifact(value=b"image-data", format="png", width=100, height=100)] + ) + ) + prompt_stack.add_assistant_message("assistant-input") driver = OllamaPromptDriver(model="llama") expected_messages = [ - {"role": "generic", "content": "generic-input"}, {"role": "system", "content": "system-input"}, {"role": "user", "content": "user-input"}, + {"role": "user", "content": "user-input", "images": ["aW1hZ2UtZGF0YQ=="]}, {"role": "assistant", "content": "assistant-input"}, ] # When - text_artifact = driver.try_run(prompt_stack) + message = driver.try_run(prompt_stack) # Then mock_client.return_value.chat.assert_called_once_with( @@ -46,7 +52,9 @@ def test_try_run(self, mock_client): model=driver.model, options={"temperature": driver.temperature, "stop": [], "num_predict": driver.max_tokens}, ) - assert text_artifact.value == "model-output" + assert message.value == "model-output" + assert message.usage.input_tokens is None + assert message.usage.output_tokens is None def test_try_run_bad_response(self, mock_client): # Given @@ -61,14 +69,18 @@ def test_try_run_bad_response(self, mock_client): def test_try_stream_run(self, mock_stream_client): # Given prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message( + ListArtifact( + [TextArtifact("user-input"), ImageArtifact(value=b"image-data", format="png", width=100, height=100)] + ) + ) + prompt_stack.add_assistant_message("assistant-input") expected_messages = [ - {"role": "generic", "content": "generic-input"}, {"role": "system", "content": "system-input"}, {"role": "user", "content": "user-input"}, + {"role": "user", "content": "user-input", "images": ["aW1hZ2UtZGF0YQ=="]}, {"role": "assistant", "content": "assistant-input"}, ] driver = OllamaPromptDriver(model="llama", stream=True) @@ -83,7 +95,8 @@ def test_try_stream_run(self, mock_stream_client): options={"temperature": driver.temperature, "stop": [], "num_predict": driver.max_tokens}, stream=True, ) - assert text_artifact.value == "model-output" + if isinstance(text_artifact, TextDeltaMessageContent): + assert text_artifact.text == "model-output" def test_try_stream_bad_response(self, mock_stream_client): # Given diff --git a/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py b/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py index a2900d4d3..5c217ed06 100644 --- a/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_openai_chat_prompt_driver.py @@ -1,8 +1,10 @@ +from griptape.artifacts import ImageArtifact, ListArtifact +from griptape.artifacts import TextArtifact from griptape.drivers import OpenAiChatPromptDriver -from griptape.tokenizers.huggingface_tokenizer import HuggingFaceTokenizer -from griptape.utils import PromptStack +from griptape.common import PromptStack from griptape.tokenizers import OpenAiTokenizer from unittest.mock import Mock +from tests.mocks.mock_tokenizer import MockTokenizer import pytest @@ -10,37 +12,51 @@ class TestOpenAiChatPromptDriverFixtureMixin: @pytest.fixture def mock_chat_completion_create(self, mocker): mock_chat_create = mocker.patch("openai.OpenAI").return_value.chat.completions.create - mock_choice = Mock() - mock_choice.message.content = "model-output" - mock_chat_create.return_value.headers = {} - mock_chat_create.return_value.choices = [mock_choice] + mock_chat_create.return_value = Mock( + headers={}, + choices=[Mock(message=Mock(content="model-output"))], + usage=Mock(prompt_tokens=5, completion_tokens=10), + ) + return mock_chat_create @pytest.fixture def mock_chat_completion_stream_create(self, mocker): mock_chat_create = mocker.patch("openai.OpenAI").return_value.chat.completions.create - mock_chunk = Mock() - mock_choice = Mock() - mock_choice.delta.content = "model-output" - mock_chunk.choices = [mock_choice] - mock_chat_create.return_value = iter([mock_chunk]) + mock_chat_create.return_value = iter( + [ + Mock(choices=[Mock(delta=Mock(content="model-output"))], usage=None), + Mock(choices=None, usage=Mock(prompt_tokens=5, completion_tokens=10)), + Mock(choices=[Mock(delta=Mock(content=None))], usage=None), + ] + ) return mock_chat_create @pytest.fixture def prompt_stack(self): prompt_stack = PromptStack() - prompt_stack.add_generic_input("generic-input") - prompt_stack.add_system_input("system-input") - prompt_stack.add_user_input("user-input") - prompt_stack.add_assistant_input("assistant-input") + prompt_stack.add_system_message("system-input") + prompt_stack.add_user_message("user-input") + prompt_stack.add_user_message( + ListArtifact( + [TextArtifact("user-input"), ImageArtifact(value=b"image-data", format="png", width=100, height=100)] + ) + ) + prompt_stack.add_assistant_message("assistant-input") return prompt_stack @pytest.fixture def messages(self): return [ - {"role": "user", "content": "generic-input"}, {"role": "system", "content": "system-input"}, {"role": "user", "content": "user-input"}, + { + "role": "user", + "content": [ + {"type": "text", "text": "user-input"}, + {"type": "image_url", "image_url": {"url": "data:image/png;base64,aW1hZ2UtZGF0YQ=="}}, + ], + }, {"role": "assistant", "content": "assistant-input"}, ] @@ -87,18 +103,13 @@ def test_try_run(self, mock_chat_completion_create, prompt_stack, messages): driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL) # When - text_artifact = driver.try_run(prompt_stack) + event = driver.try_run(prompt_stack) # Then mock_chat_completion_create.assert_called_once_with( - model=driver.model, - temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, - user=driver.user, - messages=messages, - seed=driver.seed, + model=driver.model, temperature=driver.temperature, user=driver.user, messages=messages, seed=driver.seed ) - assert text_artifact.value == "model-output" + assert event.value == "model-output" def test_try_run_response_format(self, mock_chat_completion_create, prompt_stack, messages): # Given @@ -107,57 +118,65 @@ def test_try_run_response_format(self, mock_chat_completion_create, prompt_stack ) # When - text_artifact = driver.try_run(prompt_stack) + message = driver.try_run(prompt_stack) # Then mock_chat_completion_create.assert_called_once_with( model=driver.model, temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, user=driver.user, messages=[*messages, {"role": "system", "content": "Provide your response as a valid JSON object."}], seed=driver.seed, response_format={"type": "json_object"}, ) - assert text_artifact.value == "model-output" + assert message.value == "model-output" + assert message.usage.input_tokens == 5 + assert message.usage.output_tokens == 10 def test_try_stream_run(self, mock_chat_completion_stream_create, prompt_stack, messages): # Given driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, stream=True) # When - text_artifact = next(driver.try_stream(prompt_stack)) + stream = driver.try_stream(prompt_stack) + event = next(stream) # Then mock_chat_completion_stream_create.assert_called_once_with( model=driver.model, temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, user=driver.user, stream=True, messages=messages, seed=driver.seed, + stream_options={"include_usage": True}, ) - assert text_artifact.value == "model-output" + + assert event.content.text == "model-output" + + event = next(stream) + assert event.usage.input_tokens == 5 + assert event.usage.output_tokens == 10 + event = next(stream) + assert event.content.text == "" def test_try_run_with_max_tokens(self, mock_chat_completion_create, prompt_stack, messages): # Given driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, max_tokens=1) # When - text_artifact = driver.try_run(prompt_stack) + event = driver.try_run(prompt_stack) # Then mock_chat_completion_create.assert_called_once_with( model=driver.model, temperature=driver.temperature, - stop=driver.tokenizer.stop_sequences, user=driver.user, messages=messages, max_tokens=1, seed=driver.seed, ) - assert text_artifact.value == "model-output" + assert event.value == "model-output" def test_try_run_throws_when_prompt_stack_is_string(self): # Given @@ -168,30 +187,29 @@ def test_try_run_throws_when_prompt_stack_is_string(self): driver.try_run("prompt-stack") # pyright: ignore # Then - assert e.value.args[0] == "'str' object has no attribute 'inputs'" + assert e.value.args[0] == "'str' object has no attribute 'messages'" - @pytest.mark.parametrize("choices", [[], [1, 2]]) - def test_try_run_throws_when_multiple_choices_returned(self, choices, mock_chat_completion_create, prompt_stack): + def test_try_run_throws_when_multiple_choices_returned(self, mock_chat_completion_create, prompt_stack): # Given driver = OpenAiChatPromptDriver(model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, api_key="api-key") - mock_chat_completion_create.return_value.choices = [choices] + mock_chat_completion_create.return_value.choices = [Mock(message=Mock(content="model-output"))] * 10 # When with pytest.raises(Exception) as e: driver.try_run(prompt_stack) # Then - e.value.args[0] == "Completion with more than one choice is not supported yet." + assert e.value.args[0] == "Completion with more than one choice is not supported yet." def test_custom_tokenizer(self, mock_chat_completion_create, prompt_stack, messages): driver = OpenAiChatPromptDriver( model=OpenAiTokenizer.DEFAULT_OPENAI_GPT_3_CHAT_MODEL, - tokenizer=HuggingFaceTokenizer(model="gpt2", max_output_tokens=1000), + tokenizer=MockTokenizer(model="mock-model", stop_sequences=["mock-stop"]), max_tokens=1, ) # When - text_artifact = driver.try_run(prompt_stack) + event = driver.try_run(prompt_stack) # Then mock_chat_completion_create.assert_called_once_with( @@ -199,13 +217,8 @@ def test_custom_tokenizer(self, mock_chat_completion_create, prompt_stack, messa temperature=driver.temperature, stop=driver.tokenizer.stop_sequences, user=driver.user, - messages=[ - {"role": "user", "content": "generic-input"}, - {"role": "system", "content": "system-input"}, - {"role": "user", "content": "user-input"}, - {"role": "assistant", "content": "assistant-input"}, - ], + messages=messages, seed=driver.seed, max_tokens=1, ) - assert text_artifact.value == "model-output" + assert event.value == "model-output" diff --git a/tests/unit/engines/summary/test_prompt_summary_engine.py b/tests/unit/engines/summary/test_prompt_summary_engine.py index 59b36f48e..34c6e3563 100644 --- a/tests/unit/engines/summary/test_prompt_summary_engine.py +++ b/tests/unit/engines/summary/test_prompt_summary_engine.py @@ -1,7 +1,7 @@ import pytest from griptape.artifacts import TextArtifact, ListArtifact from griptape.engines import PromptSummaryEngine -from griptape.utils import PromptStack +from griptape.common import PromptStack from tests.mocks.mock_prompt_driver import MockPromptDriver import os @@ -28,7 +28,7 @@ def test_max_token_multiplier_invalid(self, engine): def test_chunked_summary(self, engine): def smaller_input(prompt_stack: PromptStack): - return prompt_stack.inputs[0].content[: (len(prompt_stack.inputs[0].content) // 2)] + return prompt_stack.messages[0].content[: (len(prompt_stack.messages[0].content) // 2)] engine = PromptSummaryEngine(prompt_driver=MockPromptDriver(mock_output="smaller_input")) diff --git a/tests/unit/events/test_base_event.py b/tests/unit/events/test_base_event.py index 7656b6b0d..595c90f1f 100644 --- a/tests/unit/events/test_base_event.py +++ b/tests/unit/events/test_base_event.py @@ -29,30 +29,48 @@ def test_to_dict(self): def test_start_prompt_event_from_dict(self): dict_value = { "type": "StartPromptEvent", - "timestamp": 123.0, - "token_count": 10, - "prompt_stack": {"inputs": [{"content": "foo", "role": "user"}, {"content": "bar", "role": "system"}]}, - "prompt": "foo bar", + "id": "917298d4bf894b0a824a8fdb26717a0c", + "timestamp": 123, "model": "foo bar", + "prompt_stack": { + "type": "PromptStack", + "messages": [ + { + "type": "Message", + "role": "user", + "content": [ + {"type": "TextMessageContent", "artifact": {"type": "TextArtifact", "value": "foo"}} + ], + "usage": {"type": "Usage", "input_tokens": None, "output_tokens": None}, + }, + { + "type": "Message", + "role": "system", + "content": [ + {"type": "TextMessageContent", "artifact": {"type": "TextArtifact", "value": "bar"}} + ], + "usage": {"type": "Usage", "input_tokens": None, "output_tokens": None}, + }, + ], + }, } event = BaseEvent.from_dict(dict_value) assert isinstance(event, StartPromptEvent) assert event.timestamp == 123 - assert event.token_count == 10 - assert event.prompt_stack.inputs[0].content == "foo" - assert event.prompt_stack.inputs[0].role == "user" - assert event.prompt_stack.inputs[1].content == "bar" - assert event.prompt_stack.inputs[1].role == "system" - assert event.prompt == "foo bar" + assert event.prompt_stack.messages[0].content[0].artifact.value == "foo" + assert event.prompt_stack.messages[0].role == "user" + assert event.prompt_stack.messages[1].content[0].artifact.value == "bar" + assert event.prompt_stack.messages[1].role == "system" assert event.model == "foo bar" def test_finish_prompt_event_from_dict(self): dict_value = { "type": "FinishPromptEvent", "timestamp": 123.0, - "token_count": 10, + "input_token_count": 10, + "output_token_count": 12, "result": "foo bar", "model": "foo bar", } @@ -61,7 +79,8 @@ def test_finish_prompt_event_from_dict(self): assert isinstance(event, FinishPromptEvent) assert event.timestamp == 123 - assert event.token_count == 10 + assert event.input_token_count == 10 + assert event.output_token_count == 12 assert event.result == "foo bar" assert event.model == "foo bar" diff --git a/tests/unit/events/test_finish_prompt_event.py b/tests/unit/events/test_finish_prompt_event.py index b788c67f9..7443fce0c 100644 --- a/tests/unit/events/test_finish_prompt_event.py +++ b/tests/unit/events/test_finish_prompt_event.py @@ -5,12 +5,13 @@ class TestFinishPromptEvent: @pytest.fixture def finish_prompt_event(self): - return FinishPromptEvent(token_count=123, result="foo bar", model="foo bar") + return FinishPromptEvent(input_token_count=321, output_token_count=123, result="foo bar", model="foo bar") def test_to_dict(self, finish_prompt_event): assert "timestamp" in finish_prompt_event.to_dict() - assert finish_prompt_event.to_dict()["token_count"] == 123 + assert finish_prompt_event.to_dict()["input_token_count"] == 321 + assert finish_prompt_event.to_dict()["output_token_count"] == 123 assert finish_prompt_event.to_dict()["result"] == "foo bar" assert finish_prompt_event.to_dict()["model"] == "foo bar" diff --git a/tests/unit/events/test_start_prompt_event.py b/tests/unit/events/test_start_prompt_event.py index a80f8cdfc..4ef08ec5c 100644 --- a/tests/unit/events/test_start_prompt_event.py +++ b/tests/unit/events/test_start_prompt_event.py @@ -1,24 +1,22 @@ import pytest from griptape.events import StartPromptEvent -from griptape.utils import PromptStack +from griptape.common import PromptStack class TestStartPromptEvent: @pytest.fixture def start_prompt_event(self): prompt_stack = PromptStack() - prompt_stack.add_user_input("foo") - prompt_stack.add_system_input("bar") - return StartPromptEvent(token_count=123, prompt_stack=prompt_stack, prompt="foo bar", model="foo bar") + prompt_stack.add_user_message("foo") + prompt_stack.add_system_message("bar") + return StartPromptEvent(prompt_stack=prompt_stack, model="foo bar") def test_to_dict(self, start_prompt_event): assert "timestamp" in start_prompt_event.to_dict() - assert start_prompt_event.to_dict()["token_count"] == 123 - assert start_prompt_event.to_dict()["prompt_stack"]["inputs"][0]["content"] == "foo" - assert start_prompt_event.to_dict()["prompt_stack"]["inputs"][0]["role"] == "user" - assert start_prompt_event.to_dict()["prompt_stack"]["inputs"][1]["content"] == "bar" - assert start_prompt_event.to_dict()["prompt_stack"]["inputs"][1]["role"] == "system" + assert start_prompt_event.to_dict()["prompt_stack"]["messages"][0]["content"][0]["artifact"]["value"] == "foo" + assert start_prompt_event.to_dict()["prompt_stack"]["messages"][0]["role"] == "user" + assert start_prompt_event.to_dict()["prompt_stack"]["messages"][1]["content"][0]["artifact"]["value"] == "bar" + assert start_prompt_event.to_dict()["prompt_stack"]["messages"][1]["role"] == "system" - assert start_prompt_event.to_dict()["prompt"] == "foo bar" assert start_prompt_event.to_dict()["model"] == "foo bar" diff --git a/tests/unit/memory/structure/test_conversation_memory.py b/tests/unit/memory/structure/test_conversation_memory.py index 298e5ac3f..613d4b1fe 100644 --- a/tests/unit/memory/structure/test_conversation_memory.py +++ b/tests/unit/memory/structure/test_conversation_memory.py @@ -1,17 +1,18 @@ import json from griptape.structures import Agent -from griptape.utils import PromptStack +from griptape.common import PromptStack from griptape.memory.structure import ConversationMemory, Run, BaseConversationMemory from griptape.structures import Pipeline from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_tokenizer import MockTokenizer from griptape.tasks import PromptTask +from griptape.artifacts import TextArtifact class TestConversationMemory: def test_add_run(self): memory = ConversationMemory() - run = Run(input="test", output="test") + run = Run(input=TextArtifact("foo"), output=TextArtifact("bar")) memory.add_run(run) @@ -19,42 +20,42 @@ def test_add_run(self): def test_to_json(self): memory = ConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) assert json.loads(memory.to_json())["type"] == "ConversationMemory" - assert json.loads(memory.to_json())["runs"][0]["input"] == "foo" + assert json.loads(memory.to_json())["runs"][0]["input"]["value"] == "foo" def test_to_dict(self): memory = ConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) assert memory.to_dict()["type"] == "ConversationMemory" - assert memory.to_dict()["runs"][0]["input"] == "foo" + assert memory.to_dict()["runs"][0]["input"]["value"] == "foo" def test_to_prompt_stack(self): memory = ConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) prompt_stack = memory.to_prompt_stack() - assert prompt_stack.inputs[0].content == "foo" - assert prompt_stack.inputs[1].content == "bar" + assert prompt_stack.messages[0].content[0].artifact.value == "foo" + assert prompt_stack.messages[1].content[0].artifact.value == "bar" def test_from_dict(self): memory = ConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) memory_dict = memory.to_dict() assert isinstance(BaseConversationMemory.from_dict(memory_dict), ConversationMemory) - assert BaseConversationMemory.from_dict(memory_dict).runs[0].input == "foo" + assert BaseConversationMemory.from_dict(memory_dict).runs[0].input.value == "foo" def test_from_json(self): memory = ConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) memory_dict = memory.to_dict() assert isinstance(memory.from_dict(memory_dict), ConversationMemory) - assert memory.from_dict(memory_dict).runs[0].input == "foo" + assert memory.from_dict(memory_dict).runs[0].input.value == "foo" def test_buffering(self): memory = ConversationMemory(max_runs=2) @@ -70,28 +71,28 @@ def test_buffering(self): pipeline.run("run5") assert len(pipeline.conversation_memory.runs) == 2 - assert pipeline.conversation_memory.runs[0].input == "run4" - assert pipeline.conversation_memory.runs[1].input == "run5" + assert pipeline.conversation_memory.runs[0].input.value == "run4" + assert pipeline.conversation_memory.runs[1].input.value == "run5" def test_add_to_prompt_stack_autopruing_disabled(self): agent = Agent(prompt_driver=MockPromptDriver()) memory = ConversationMemory( autoprune=False, runs=[ - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), + Run(input=TextArtifact("foo1"), output=TextArtifact("bar1")), + Run(input=TextArtifact("foo2"), output=TextArtifact("bar2")), + Run(input=TextArtifact("foo3"), output=TextArtifact("bar3")), + Run(input=TextArtifact("foo4"), output=TextArtifact("bar4")), + Run(input=TextArtifact("foo5"), output=TextArtifact("bar5")), ], ) memory.structure = agent prompt_stack = PromptStack() - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") + prompt_stack.add_user_message(TextArtifact("foo")) + prompt_stack.add_assistant_message("bar") memory.add_to_prompt_stack(prompt_stack) - assert len(prompt_stack.inputs) == 12 + assert len(prompt_stack.messages) == 12 def test_add_to_prompt_stack_autopruning_enabled(self): # All memory is pruned. @@ -99,42 +100,42 @@ def test_add_to_prompt_stack_autopruning_enabled(self): memory = ConversationMemory( autoprune=True, runs=[ - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), + Run(input=TextArtifact("foo1"), output=TextArtifact("bar1")), + Run(input=TextArtifact("foo2"), output=TextArtifact("bar2")), + Run(input=TextArtifact("foo3"), output=TextArtifact("bar3")), + Run(input=TextArtifact("foo4"), output=TextArtifact("bar4")), + Run(input=TextArtifact("foo5"), output=TextArtifact("bar5")), ], ) memory.structure = agent prompt_stack = PromptStack() - prompt_stack.add_system_input("fizz") - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") + prompt_stack.add_system_message("fizz") + prompt_stack.add_user_message("foo") + prompt_stack.add_assistant_message("bar") memory.add_to_prompt_stack(prompt_stack) - assert len(prompt_stack.inputs) == 3 + assert len(prompt_stack.messages) == 3 # No memory is pruned. agent = Agent(prompt_driver=MockPromptDriver(tokenizer=MockTokenizer(model="foo", max_input_tokens=1000))) memory = ConversationMemory( autoprune=True, runs=[ - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), + Run(input=TextArtifact("foo1"), output=TextArtifact("bar1")), + Run(input=TextArtifact("foo2"), output=TextArtifact("bar2")), + Run(input=TextArtifact("foo3"), output=TextArtifact("bar3")), + Run(input=TextArtifact("foo4"), output=TextArtifact("bar4")), + Run(input=TextArtifact("foo5"), output=TextArtifact("bar5")), ], ) memory.structure = agent prompt_stack = PromptStack() - prompt_stack.add_system_input("fizz") - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") + prompt_stack.add_system_message("fizz") + prompt_stack.add_user_message("foo") + prompt_stack.add_assistant_message("bar") memory.add_to_prompt_stack(prompt_stack) - assert len(prompt_stack.inputs) == 13 + assert len(prompt_stack.messages) == 13 # One memory is pruned. # MockTokenizer's max_input_tokens set to one below the sum of memory + system prompt tokens @@ -144,25 +145,25 @@ def test_add_to_prompt_stack_autopruning_enabled(self): autoprune=True, runs=[ # All of these sum to 155 tokens with the MockTokenizer. - Run(input="foo1", output="bar1"), - Run(input="foo2", output="bar2"), - Run(input="foo3", output="bar3"), - Run(input="foo4", output="bar4"), - Run(input="foo5", output="bar5"), + Run(input=TextArtifact("foo1"), output=TextArtifact("bar1")), + Run(input=TextArtifact("foo2"), output=TextArtifact("bar2")), + Run(input=TextArtifact("foo3"), output=TextArtifact("bar3")), + Run(input=TextArtifact("foo4"), output=TextArtifact("bar4")), + Run(input=TextArtifact("foo5"), output=TextArtifact("bar5")), ], ) memory.structure = agent prompt_stack = PromptStack() # And then another 6 tokens from fizz for a total of 161 tokens. - prompt_stack.add_system_input("fizz") - prompt_stack.add_user_input("foo") - prompt_stack.add_assistant_input("bar") + prompt_stack.add_system_message("fizz") + prompt_stack.add_user_message("foo") + prompt_stack.add_assistant_message("bar") memory.add_to_prompt_stack(prompt_stack, 1) - # We expect one run (2 prompt stack inputs) to be pruned. - assert len(prompt_stack.inputs) == 11 - assert prompt_stack.inputs[0].content == "fizz" - assert prompt_stack.inputs[1].content == "foo2" - assert prompt_stack.inputs[2].content == "bar2" - assert prompt_stack.inputs[-2].content == "foo" - assert prompt_stack.inputs[-1].content == "bar" + # We expect one run (2 Prompt Stack inputs) to be pruned. + assert len(prompt_stack.messages) == 11 + assert prompt_stack.messages[0].content[0].artifact.value == "fizz" + assert prompt_stack.messages[1].content[0].artifact.value == "foo2" + assert prompt_stack.messages[2].content[0].artifact.value == "bar2" + assert prompt_stack.messages[-2].content[0].artifact.value == "foo" + assert prompt_stack.messages[-1].content[0].artifact.value == "bar" diff --git a/tests/unit/memory/structure/test_summary_conversation_memory.py b/tests/unit/memory/structure/test_summary_conversation_memory.py index 09792ff5d..e625ac6c6 100644 --- a/tests/unit/memory/structure/test_summary_conversation_memory.py +++ b/tests/unit/memory/structure/test_summary_conversation_memory.py @@ -1,9 +1,9 @@ import json -import pytest from griptape.memory.structure import Run, SummaryConversationMemory from griptape.structures import Pipeline +from griptape.artifacts import TextArtifact from griptape.tasks import PromptTask from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_structure_config import MockStructureConfig @@ -41,36 +41,36 @@ def test_after_run(self): def test_to_json(self): memory = SummaryConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) assert json.loads(memory.to_json())["type"] == "SummaryConversationMemory" - assert json.loads(memory.to_json())["runs"][0]["input"] == "foo" + assert json.loads(memory.to_json())["runs"][0]["input"]["value"] == "foo" def test_to_dict(self): memory = SummaryConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) assert memory.to_dict()["type"] == "SummaryConversationMemory" - assert memory.to_dict()["runs"][0]["input"] == "foo" + assert memory.to_dict()["runs"][0]["input"]["value"] == "foo" def test_to_prompt_stack(self): memory = SummaryConversationMemory(summary="foobar") - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) prompt_stack = memory.to_prompt_stack() - assert prompt_stack.inputs[0].content == "Summary of the conversation so far: foobar" - assert prompt_stack.inputs[1].content == "foo" - assert prompt_stack.inputs[2].content == "bar" + assert prompt_stack.messages[0].content[0].artifact.value == "Summary of the conversation so far: foobar" + assert prompt_stack.messages[1].content[0].artifact.value == "foo" + assert prompt_stack.messages[2].content[0].artifact.value == "bar" def test_from_dict(self): memory = SummaryConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) memory_dict = memory.to_dict() assert isinstance(memory.from_dict(memory_dict), SummaryConversationMemory) - assert memory.from_dict(memory_dict).runs[0].input == "foo" - assert memory.from_dict(memory_dict).runs[0].output == "bar" + assert memory.from_dict(memory_dict).runs[0].input.value == "foo" + assert memory.from_dict(memory_dict).runs[0].output.value == "bar" assert memory.from_dict(memory_dict).offset == memory.offset assert memory.from_dict(memory_dict).summary == memory.summary assert memory.from_dict(memory_dict).summary_index == memory.summary_index @@ -78,11 +78,11 @@ def test_from_dict(self): def test_from_json(self): memory = SummaryConversationMemory() - memory.add_run(Run(input="foo", output="bar")) + memory.add_run(Run(input=TextArtifact("foo"), output=TextArtifact("bar"))) memory_dict = memory.to_dict() assert isinstance(memory.from_dict(memory_dict), SummaryConversationMemory) - assert memory.from_dict(memory_dict).runs[0].input == "foo" + assert memory.from_dict(memory_dict).runs[0].input.value == "foo" def test_config_prompt_driver(self): memory = SummaryConversationMemory() diff --git a/tests/unit/structures/test_agent.py b/tests/unit/structures/test_agent.py index 8bcadb753..942a960f9 100644 --- a/tests/unit/structures/test_agent.py +++ b/tests/unit/structures/test_agent.py @@ -166,15 +166,15 @@ def test_prompt_stack_without_memory(self): agent.add_task(task1) - assert len(task1.prompt_stack.inputs) == 2 + assert len(task1.prompt_stack.messages) == 2 agent.run() - assert len(task1.prompt_stack.inputs) == 3 + assert len(task1.prompt_stack.messages) == 3 agent.run() - assert len(task1.prompt_stack.inputs) == 3 + assert len(task1.prompt_stack.messages) == 3 def test_prompt_stack_with_memory(self): agent = Agent(prompt_driver=MockPromptDriver(), conversation_memory=ConversationMemory()) @@ -183,15 +183,15 @@ def test_prompt_stack_with_memory(self): agent.add_task(task1) - assert len(task1.prompt_stack.inputs) == 2 + assert len(task1.prompt_stack.messages) == 2 agent.run() - assert len(task1.prompt_stack.inputs) == 5 + assert len(task1.prompt_stack.messages) == 5 agent.run() - assert len(task1.prompt_stack.inputs) == 7 + assert len(task1.prompt_stack.messages) == 7 def test_run(self): task = PromptTask("test") diff --git a/tests/unit/structures/test_pipeline.py b/tests/unit/structures/test_pipeline.py index d94616165..99c4141bf 100644 --- a/tests/unit/structures/test_pipeline.py +++ b/tests/unit/structures/test_pipeline.py @@ -277,18 +277,18 @@ def test_prompt_stack_without_memory(self): pipeline.add_tasks(task1, task2) - assert len(task1.prompt_stack.inputs) == 2 - assert len(task2.prompt_stack.inputs) == 2 + assert len(task1.prompt_stack.messages) == 2 + assert len(task2.prompt_stack.messages) == 2 pipeline.run() - assert len(task1.prompt_stack.inputs) == 3 - assert len(task2.prompt_stack.inputs) == 3 + assert len(task1.prompt_stack.messages) == 3 + assert len(task2.prompt_stack.messages) == 3 pipeline.run() - assert len(task1.prompt_stack.inputs) == 3 - assert len(task2.prompt_stack.inputs) == 3 + assert len(task1.prompt_stack.messages) == 3 + assert len(task2.prompt_stack.messages) == 3 def test_prompt_stack_with_memory(self): pipeline = Pipeline(prompt_driver=MockPromptDriver()) @@ -298,18 +298,18 @@ def test_prompt_stack_with_memory(self): pipeline.add_tasks(task1, task2) - assert len(task1.prompt_stack.inputs) == 2 - assert len(task2.prompt_stack.inputs) == 2 + assert len(task1.prompt_stack.messages) == 2 + assert len(task2.prompt_stack.messages) == 2 pipeline.run() - assert len(task1.prompt_stack.inputs) == 5 - assert len(task2.prompt_stack.inputs) == 5 + assert len(task1.prompt_stack.messages) == 5 + assert len(task2.prompt_stack.messages) == 5 pipeline.run() - assert len(task1.prompt_stack.inputs) == 7 - assert len(task2.prompt_stack.inputs) == 7 + assert len(task1.prompt_stack.messages) == 7 + assert len(task2.prompt_stack.messages) == 7 def test_text_artifact_token_count(self): text = "foobar" diff --git a/tests/unit/tasks/test_prompt_task.py b/tests/unit/tasks/test_prompt_task.py index 1dd45ab64..bcef8bce1 100644 --- a/tests/unit/tasks/test_prompt_task.py +++ b/tests/unit/tasks/test_prompt_task.py @@ -1,4 +1,7 @@ import pytest +from griptape.artifacts.image_artifact import ImageArtifact +from griptape.artifacts.list_artifact import ListArtifact +from griptape.artifacts.text_artifact import TextArtifact from tests.mocks.mock_structure_config import MockStructureConfig from griptape.tasks import PromptTask from tests.mocks.mock_prompt_driver import MockPromptDriver @@ -32,3 +35,86 @@ def test_missing_prompt_driver(self): with pytest.raises(ValueError): task.prompt_driver + + def test_input(self): + # Str + task = PromptTask("test") + + assert task.input.value == "test" + + # List of strs + task = PromptTask(["test1", "test2"]) + + assert task.input.value[0].value == "test1" + assert task.input.value[1].value == "test2" + + # Tuple of strs + task = PromptTask(("test1", "test2")) + + assert task.input.value[0].value == "test1" + assert task.input.value[1].value == "test2" + + # Image artifact + task = PromptTask(ImageArtifact(b"image-data", format="png", width=100, height=100)) + + assert isinstance(task.input, ImageArtifact) + assert task.input.value == b"image-data" + assert task.input.format == "png" + assert task.input.width == 100 + assert task.input.height == 100 + + # List of str and image artifact + task = PromptTask(["foo", ImageArtifact(b"image-data", format="png", width=100, height=100)]) + + assert isinstance(task.input, ListArtifact) + assert task.input.value[0].value == "foo" + assert isinstance(task.input.value[1], ImageArtifact) + assert task.input.value[1].value == b"image-data" + assert task.input.value[1].format == "png" + assert task.input.value[1].width == 100 + + # List of str and nested image artifact + task = PromptTask(["foo", [ImageArtifact(b"image-data", format="png", width=100, height=100)]]) + assert isinstance(task.input, ListArtifact) + assert task.input.value[0].value == "foo" + assert isinstance(task.input.value[1], ListArtifact) + assert isinstance(task.input.value[1].value[0], ImageArtifact) + assert task.input.value[1].value[0].value == b"image-data" + assert task.input.value[1].value[0].format == "png" + assert task.input.value[1].value[0].width == 100 + + # Tuple of str and image artifact + task = PromptTask(("foo", ImageArtifact(b"image-data", format="png", width=100, height=100))) + + assert isinstance(task.input, ListArtifact) + assert task.input.value[0].value == "foo" + assert isinstance(task.input.value[1], ImageArtifact) + assert task.input.value[1].value == b"image-data" + assert task.input.value[1].format == "png" + assert task.input.value[1].width == 100 + + # Lambda returning list of str and image artifact + task = PromptTask( + ListArtifact([TextArtifact("foo"), ImageArtifact(b"image-data", format="png", width=100, height=100)]) + ) + + assert isinstance(task.input, ListArtifact) + assert task.input.value[0].value == "foo" + assert isinstance(task.input.value[1], ImageArtifact) + assert task.input.value[1].value == b"image-data" + assert task.input.value[1].format == "png" + assert task.input.value[1].width == 100 + + # Lambda returning list of str and image artifact + task = PromptTask( + lambda _: ListArtifact( + [TextArtifact("foo"), ImageArtifact(b"image-data", format="png", width=100, height=100)] + ) + ) + + assert isinstance(task.input, ListArtifact) + assert task.input.value[0].value == "foo" + assert isinstance(task.input.value[1], ImageArtifact) + assert task.input.value[1].value == b"image-data" + assert task.input.value[1].format == "png" + assert task.input.value[1].width == 100 diff --git a/tests/unit/tasks/test_toolkit_task.py b/tests/unit/tasks/test_toolkit_task.py index 28cc56ec9..cc05a5caf 100644 --- a/tests/unit/tasks/test_toolkit_task.py +++ b/tests/unit/tasks/test_toolkit_task.py @@ -2,7 +2,7 @@ from griptape.structures import Agent from griptape.tasks import ToolkitTask, ActionsSubtask, PromptTask from tests.mocks.mock_tool.tool import MockTool -from tests.mocks.mock_value_prompt_driver import MockValuePromptDriver +from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.utils import defaults @@ -149,7 +149,7 @@ def test_run(self): output = """Answer: done""" task = ToolkitTask("test", tools=[MockTool(name="Tool1"), MockTool(name="Tool2")]) - agent = Agent(prompt_driver=MockValuePromptDriver(value=output)) + agent = Agent(prompt_driver=MockPromptDriver(mock_output=output)) agent.add_task(task) @@ -163,7 +163,7 @@ def test_run_max_subtasks(self): output = """Actions: [{"name": "blah"}]""" task = ToolkitTask("test", tools=[MockTool(name="Tool1")], max_subtasks=3) - agent = Agent(prompt_driver=MockValuePromptDriver(value=output)) + agent = Agent(prompt_driver=MockPromptDriver(mock_output=output)) agent.add_task(task) @@ -176,7 +176,7 @@ def test_run_invalid_react_prompt(self): output = """foo bar""" task = ToolkitTask("test", tools=[MockTool(name="Tool1")], max_subtasks=3) - agent = Agent(prompt_driver=MockValuePromptDriver(value=output)) + agent = Agent(prompt_driver=MockPromptDriver(mock_output=output)) agent.add_task(task) diff --git a/tests/unit/tokenizers/test_google_tokenizer.py b/tests/unit/tokenizers/test_google_tokenizer.py index 955a0517f..34510cdac 100644 --- a/tests/unit/tokenizers/test_google_tokenizer.py +++ b/tests/unit/tokenizers/test_google_tokenizer.py @@ -1,6 +1,7 @@ import pytest from unittest.mock import Mock -from griptape.utils import PromptStack +from griptape.common import PromptStack +from griptape.common.prompt_stack.messages.message import Message from griptape.tokenizers import GoogleTokenizer @@ -19,7 +20,7 @@ def tokenizer(self, request): @pytest.mark.parametrize("tokenizer,expected", [("gemini-pro", 5)], indirect=["tokenizer"]) def test_token_count(self, tokenizer, expected): assert tokenizer.count_tokens("foo bar huzzah") == expected - assert tokenizer.count_tokens(PromptStack(inputs=[PromptStack.Input(content="foo", role="user")])) == expected + assert tokenizer.count_tokens(PromptStack(messages=[Message(content="foo", role="user")])) == expected assert tokenizer.count_tokens(["foo", "bar", "huzzah"]) == expected @pytest.mark.parametrize("tokenizer,expected", [("gemini-pro", 30715)], indirect=["tokenizer"]) diff --git a/tests/unit/utils/test_base_tokenizer.py b/tests/unit/utils/test_base_tokenizer.py new file mode 100644 index 000000000..eed15b9b2 --- /dev/null +++ b/tests/unit/utils/test_base_tokenizer.py @@ -0,0 +1,13 @@ +import logging +from tests.mocks.mock_tokenizer import MockTokenizer + + +class TestBaseTokenizer: + def test_default_tokens(self, caplog): + with caplog.at_level(logging.WARNING): + tokenizer = MockTokenizer(model="gpt2") + + assert tokenizer.max_input_tokens == 4096 + assert tokenizer.max_output_tokens == 1000 + + assert "gpt2 not found" in caplog.text diff --git a/tests/unit/utils/test_message_stack.py b/tests/unit/utils/test_message_stack.py new file mode 100644 index 000000000..908388a33 --- /dev/null +++ b/tests/unit/utils/test_message_stack.py @@ -0,0 +1,55 @@ +import pytest + +from griptape.artifacts import ImageArtifact, ListArtifact, TextArtifact +from griptape.common import ImageMessageContent, PromptStack, TextMessageContent + + +class TestPromptStack: + @pytest.fixture + def prompt_stack(self): + return PromptStack() + + def test_init(self): + assert PromptStack() + + def test_add_message(self, prompt_stack): + prompt_stack.add_message("foo", "role") + prompt_stack.add_message(TextArtifact("foo"), "role") + prompt_stack.add_message(ImageArtifact(b"foo", format="png", width=100, height=100), "role") + prompt_stack.add_message(ListArtifact([TextArtifact("foo"), TextArtifact("bar")]), "role") + + assert prompt_stack.messages[0].role == "role" + assert isinstance(prompt_stack.messages[0].content[0], TextMessageContent) + assert prompt_stack.messages[0].content[0].artifact.value == "foo" + + assert prompt_stack.messages[1].role == "role" + assert isinstance(prompt_stack.messages[1].content[0], TextMessageContent) + assert prompt_stack.messages[1].content[0].artifact.value == "foo" + + assert prompt_stack.messages[2].role == "role" + assert isinstance(prompt_stack.messages[2].content[0], ImageMessageContent) + assert prompt_stack.messages[2].content[0].artifact.value == b"foo" + + assert prompt_stack.messages[3].role == "role" + assert isinstance(prompt_stack.messages[3].content[0], TextMessageContent) + assert prompt_stack.messages[3].content[0].artifact.value == "foo" + assert isinstance(prompt_stack.messages[3].content[1], TextMessageContent) + assert prompt_stack.messages[3].content[1].artifact.value == "bar" + + def test_add_system_message(self, prompt_stack): + prompt_stack.add_system_message("foo") + + assert prompt_stack.messages[0].role == "system" + assert prompt_stack.messages[0].content[0].artifact.value == "foo" + + def test_add_user_message(self, prompt_stack): + prompt_stack.add_user_message("foo") + + assert prompt_stack.messages[0].role == "user" + assert prompt_stack.messages[0].content[0].artifact.value == "foo" + + def test_add_assistant_message(self, prompt_stack): + prompt_stack.add_assistant_message("foo") + + assert prompt_stack.messages[0].role == "assistant" + assert prompt_stack.messages[0].content[0].artifact.value == "foo" diff --git a/tests/unit/utils/test_prompt_stack.py b/tests/unit/utils/test_prompt_stack.py deleted file mode 100644 index 80010abec..000000000 --- a/tests/unit/utils/test_prompt_stack.py +++ /dev/null @@ -1,41 +0,0 @@ -import pytest -from griptape.utils import PromptStack - - -class TestPromptStack: - @pytest.fixture - def prompt_stack(self): - return PromptStack() - - def test_init(self): - assert PromptStack() - - def test_add_input(self, prompt_stack): - prompt_stack.add_input("foo", "role") - - assert prompt_stack.inputs[0].role == "role" - assert prompt_stack.inputs[0].content == "foo" - - def test_add_generic_input(self, prompt_stack): - prompt_stack.add_generic_input("foo") - - assert prompt_stack.inputs[0].role == "generic" - assert prompt_stack.inputs[0].content == "foo" - - def test_add_system_input(self, prompt_stack): - prompt_stack.add_system_input("foo") - - assert prompt_stack.inputs[0].role == "system" - assert prompt_stack.inputs[0].content == "foo" - - def test_add_user_input(self, prompt_stack): - prompt_stack.add_user_input("foo") - - assert prompt_stack.inputs[0].role == "user" - assert prompt_stack.inputs[0].content == "foo" - - def test_add_assistant_input(self, prompt_stack): - prompt_stack.add_assistant_input("foo") - - assert prompt_stack.inputs[0].role == "assistant" - assert prompt_stack.inputs[0].content == "foo" From 07e2a1c792a8ea7598e70b21eab93d9f621366fe Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Tue, 2 Jul 2024 12:38:25 -0500 Subject: [PATCH 131/145] Add support for Qdrant VectorDB (#928) Co-authored-by: hkhajgiwale Co-authored-by: Harsh Khajgiwale <13365920+hkhajgiwale@users.noreply.github.com> Co-authored-by: Anush --- .github/workflows/docs-integration-tests.yml | 2 + CHANGELOG.md | 1 + .../drivers/vector-store-drivers.md | 62 ++++++ griptape/drivers/__init__.py | 2 + .../vector/qdrant_vector_store_driver.py | 207 ++++++++++++++++++ poetry.lock | 157 ++++++++++++- pyproject.toml | 3 + .../vector/test_qdrant_vector_store_driver.py | 171 +++++++++++++++ 8 files changed, 603 insertions(+), 2 deletions(-) create mode 100644 griptape/drivers/vector/qdrant_vector_store_driver.py create mode 100644 tests/unit/drivers/vector/test_qdrant_vector_store_driver.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 79e0c9f3a..cd21ad1ac 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -120,6 +120,8 @@ jobs: PUSHER_SECRET: ${{ secrets.INTEG_PUSHER_SECRET }} PUSHER_CLUSTER: ${{ secrets.INTEG_PUSHER_CLUSTER }} ZENROWS_API_KEY: ${{ secrets.INTEG_ZENROWS_API_KEY }} + QDRANT_CLUSTER_ENDPOINT: ${{ secrets.INTEG_QDRANT_CLUSTER_ENDPOINT }} + QDRANT_CLUSTER_API_KEY: ${{ secrets.INTEG_QDRANT_CLUSTER_API_KEY }} services: postgres: image: ankane/pgvector:v0.5.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index d8f1a3f2c..399da1969 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -295,6 +295,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `MarkdownifyWebScraperDriver` for scraping text from web pages using playwright and converting to markdown using markdownify. - `VoyageAiEmbeddingDriver` for use with VoyageAi's embedding models. - `AnthropicStructureConfig` for providing Structures with Anthropic Prompt and VoyageAi Embedding Driver configuration. +- `QdrantVectorStoreDriver` to integrate with Qdrant vector databases. ### Fixed - Improved system prompt in `ToolTask` to support more use cases. diff --git a/docs/griptape-framework/drivers/vector-store-drivers.md b/docs/griptape-framework/drivers/vector-store-drivers.md index 095c14f22..da6fdc242 100644 --- a/docs/griptape-framework/drivers/vector-store-drivers.md +++ b/docs/griptape-framework/drivers/vector-store-drivers.md @@ -406,3 +406,65 @@ vector_store_driver.upsert_text_artifacts( result = vector_store_driver.query("What is griptape?") print(result) ``` + +### Qdrant + +!!! info + This driver requires the `drivers-vector-qdrant` [extra](../index.md#extras). + +The QdrantVectorStoreDriver supports the [Qdrant vector database](https://qdrant.tech/). + +Here is an example of how the driver can be used to query information in a Qdrant collection: + +```python +import os +from griptape.drivers import QdrantVectorStoreDriver, HuggingFaceHubEmbeddingDriver +from griptape.tokenizers import HuggingFaceTokenizer +from griptape.loaders import WebLoader + +# Set up environment variables +embedding_model_name = "sentence-transformers/all-MiniLM-L6-v2" +host = os.environ["QDRANT_CLUSTER_ENDPOINT"] +huggingface_token = os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"] + +# Initialize HuggingFace embedding driver +embedding_driver = HuggingFaceHubEmbeddingDriver( + api_token=huggingface_token, + model=embedding_model_name, + tokenizer=HuggingFaceTokenizer(model=embedding_model_name, max_output_tokens=512), +) + +# Initialize Qdrant vector store driver +vector_store_driver = QdrantVectorStoreDriver( + url=host, + collection_name="griptape", + content_payload_key="content", + embedding_driver=embedding_driver, + api_key=os.environ["QDRANT_CLUSTER_API_KEY"], +) + +# Load data from the website +artifacts = WebLoader().load("https://www.griptape.ai") + +# Encode text to get embeddings +embeddings = embedding_driver.embed_text_artifact(artifacts[0]) + +# Recreate Qdrant collection +vector_store_driver.client.recreate_collection( + collection_name=vector_store_driver.collection_name, + vectors_config={ + "size": len(embeddings), + "distance": vector_store_driver.distance + }, +) + +# Upsert vector into Qdrant +vector_store_driver.upsert_vector( + vector=embeddings, + vector_id=str(artifacts[0].id), + content=artifacts[0].value +) + +print("Vectors successfully inserted into Qdrant.") + +``` diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 34b43103b..fa2934a38 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -39,6 +39,7 @@ from .vector.pgvector_vector_store_driver import PgVectorVectorStoreDriver from .vector.azure_mongodb_vector_store_driver import AzureMongoDbVectorStoreDriver from .vector.dummy_vector_store_driver import DummyVectorStoreDriver +from .vector.qdrant_vector_store_driver import QdrantVectorStoreDriver from .sql.base_sql_driver import BaseSqlDriver from .sql.amazon_redshift_sql_driver import AmazonRedshiftSqlDriver @@ -144,6 +145,7 @@ "OpenSearchVectorStoreDriver", "AmazonOpenSearchVectorStoreDriver", "PgVectorVectorStoreDriver", + "QdrantVectorStoreDriver", "DummyVectorStoreDriver", "BaseSqlDriver", "AmazonRedshiftSqlDriver", diff --git a/griptape/drivers/vector/qdrant_vector_store_driver.py b/griptape/drivers/vector/qdrant_vector_store_driver.py new file mode 100644 index 000000000..5159bdb0a --- /dev/null +++ b/griptape/drivers/vector/qdrant_vector_store_driver.py @@ -0,0 +1,207 @@ +from __future__ import annotations +from typing import Optional +from attrs import define, field +from griptape.drivers import BaseVectorStoreDriver +from griptape.utils import import_optional_dependency +import uuid +import logging + +DEFAULT_DISTANCE = "Cosine" +CONTENT_PAYLOAD_KEY = "data" + + +@define +class QdrantVectorStoreDriver(BaseVectorStoreDriver): + """ + Attributes: + location: An optional location for the Qdrant client. If set to ':memory:', an in-memory client is used. + url: An optional Qdrant API URL. + host: An optional Qdrant host. + path: Persistence path for QdrantLocal. Default: None + port: The port number for the Qdrant client. Defaults: 6333. + grpc_port: The gRPC port number for the Qdrant client. Defaults: 6334. + prefer_grpc: A boolean indicating whether to prefer gRPC over HTTP. Defaults: False. + force_disable_check_same_thread: For QdrantLocal, force disable check_same_thread. Default: False Only use this if you can guarantee that you can resolve the thread safety outside QdrantClient. + timeout: Timeout for REST and gRPC API requests. Default: 5 seconds for REST and unlimited for gRPC + api_key: API key for authentication in Qdrant Cloud. Defaults: False + https: If true - use HTTPS(SSL) protocol. Default: None + prefix: Add prefix to the REST URL path. Example: service/v1 will result in Example: service/v1 will result in http://localhost:6333/service/v1/{qdrant-endpoint} for REST API. Defaults: None + distance: The distance metric to be used for the vectors. Defaults: 'COSINE'. + collection_name: The name of the Qdrant collection. + vector_name: An optional name for the vectors. + content_payload_key: The key for the content payload in the metadata. Defaults: 'data'. + """ + + location: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + host: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + path: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + port: int = field(default=6333, kw_only=True, metadata={"serializable": True}) + grpc_port: int = field(default=6334, kw_only=True, metadata={"serializable": True}) + prefer_grpc: bool = field(default=False, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + https: bool = field(default=None, kw_only=True, metadata={"serializable": True}) + prefix: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + force_disable_check_same_thread: Optional[bool] = field( + default=False, kw_only=True, metadata={"serializable": True} + ) + timeout: Optional[int] = field(default=5, kw_only=True, metadata={"serializable": True}) + distance: str = field(default=DEFAULT_DISTANCE, kw_only=True, metadata={"serializable": True}) + collection_name: str = field(kw_only=True, metadata={"serializable": True}) + vector_name: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + content_payload_key: str = field(default=CONTENT_PAYLOAD_KEY, kw_only=True, metadata={"serializable": True}) + + def __attrs_post_init__(self) -> None: + self.client = import_optional_dependency("qdrant_client").QdrantClient( + location=self.location, + url=self.url, + host=self.host, + path=self.path, + port=self.port, + prefer_grpc=self.prefer_grpc, + grpc_port=self.grpc_port, + api_key=self.api_key, + https=self.https, + prefix=self.prefix, + force_disable_check_same_thread=self.force_disable_check_same_thread, + timeout=self.timeout, + ) + + def delete_vector(self, vector_id: str) -> None: + """ + Delete a vector from the Qdrant collection based on its ID. + + Parameters: + vector_id (str | id): ID of the vector to delete. + """ + deletion_response = self.client.delete( + collection_name=self.collection_name, + points_selector=import_optional_dependency("qdrant_client.http.models").PointIdsList(points=[vector_id]), + ) + if deletion_response.status == import_optional_dependency("qdrant_client.http.models").UpdateStatus.COMPLETED: + logging.info(f"ID {vector_id} is successfully deleted") + + def query( + self, + query: str, + count: Optional[int] = None, + namespace: Optional[str] = None, + include_vectors: bool = False, + **kwargs, + ) -> list[BaseVectorStoreDriver.Entry]: + """ + Query the Qdrant collection based on a query vector. + + Parameters: + query (str): Query string. + count (Optional[int]): Optional number of results to return. + namespace (Optional[str]): Optional namespace of the vectors. + include_vectors (bool): Whether to include vectors in the results. + + Returns: + list[BaseVectorStoreDriver.Entry]: List of Entry objects. + """ + query_vector = self.embedding_driver.embed_string(query) + + # Create a search request + results = self.client.search(collection_name=self.collection_name, query_vector=query_vector, limit=count) + + # Convert results to QueryResult objects + query_results = [ + BaseVectorStoreDriver.Entry( + id=result.id, + vector=result.vector if include_vectors else [], + score=result.score, + meta={k: v for k, v in result.payload.items() if k not in ["_score", "_tensor_facets"]}, + ) + for result in results + ] + return query_results + + def upsert_vector( + self, + vector: list[float], + vector_id: Optional[str] = None, + namespace: Optional[str] = None, + meta: Optional[dict] = None, + content: Optional[str] = None, + **kwargs, + ) -> str: + """ + Upsert vectors into the Qdrant collection. + + Parameters: + vector (list[float]): The vector to be upserted. + vector_id (Optional[str]): Optional vector ID. + namespace (Optional[str]): Optional namespace for the vector. + meta (Optional[dict]): Optional dictionary containing metadata. + content (Optional[str]): The text content to be included in the payload. + + Returns: + str: The ID of the upserted vector. + """ + + if vector_id is None: + vector_id = str(uuid.uuid5(uuid.NAMESPACE_DNS, str(vector))) + + if meta is None: + meta = {} + + if content: + meta[self.content_payload_key] = content + + points = import_optional_dependency("qdrant_client.http.models").Batch( + ids=[vector_id], vectors=[vector], payloads=[meta] if meta else None + ) + + self.client.upsert(collection_name=self.collection_name, points=points) + return vector_id + + def load_entry(self, vector_id: str, namespace: Optional[str] = None) -> Optional[BaseVectorStoreDriver.Entry]: + """ + Load a vector entry from the Qdrant collection based on its ID. + + Parameters: + vector_id (str): ID of the vector to load. + namespace (str, optional): Optional namespace of the vector. + + Returns: + Optional[BaseVectorStoreDriver.Entry]: Vector entry if found, else None. + """ + results = self.client.retrieve(collection_name=self.collection_name, ids=[vector_id]) + if results: + entry = results[0] + return BaseVectorStoreDriver.Entry( + id=entry.id, + vector=entry.vector, + meta={k: v for k, v in entry.payload.items() if k not in ["_score", "_tensor_facets"]}, + ) + else: + return None + + def load_entries(self, namespace: Optional[str] = None, **kwargs) -> list[BaseVectorStoreDriver.Entry]: + """ + Load vector entries from the Qdrant collection. + + Parameters: + namespace: Optional namespace of the vectors. + + Returns: + List of points. + """ + + results = self.client.retrieve( + collection_name=self.collection_name, + ids=kwargs.get("ids", []), + with_payload=kwargs.get("with_payload", True), + with_vectors=kwargs.get("with_vectors", True), + ) + + return [ + BaseVectorStoreDriver.Entry( + id=entry.id, + vector=entry.vector if kwargs.get("with_vectors", True) else [], + meta={k: v for k, v in entry.payload.items() if k not in ["_score", "_tensor_facets"]}, + ) + for entry in results + ] diff --git a/poetry.lock b/poetry.lock index 768a4e8ae..64f01aa75 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1844,6 +1844,74 @@ googleapis-common-protos = ">=1.5.5" grpcio = ">=1.62.2" protobuf = ">=4.21.6" +[[package]] +name = "grpcio-tools" +version = "1.62.2" +description = "Protobuf code generator for gRPC" +optional = true +python-versions = ">=3.7" +files = [ + {file = "grpcio-tools-1.62.2.tar.gz", hash = "sha256:5fd5e1582b678e6b941ee5f5809340be5e0724691df5299aae8226640f94e18f"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:1679b4903aed2dc5bd8cb22a452225b05dc8470a076f14fd703581efc0740cdb"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:9d41e0e47dd075c075bb8f103422968a65dd0d8dc8613288f573ae91eb1053ba"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:987e774f74296842bbffd55ea8826370f70c499e5b5f71a8cf3103838b6ee9c3"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40cd4eeea4b25bcb6903b82930d579027d034ba944393c4751cdefd9c49e6989"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6746bc823958499a3cf8963cc1de00072962fb5e629f26d658882d3f4c35095"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2ed775e844566ce9ce089be9a81a8b928623b8ee5820f5e4d58c1a9d33dfc5ae"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bdc5dd3f57b5368d5d661d5d3703bcaa38bceca59d25955dff66244dbc987271"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-win32.whl", hash = "sha256:3a8d6f07e64c0c7756f4e0c4781d9d5a2b9cc9cbd28f7032a6fb8d4f847d0445"}, + {file = "grpcio_tools-1.62.2-cp310-cp310-win_amd64.whl", hash = "sha256:e33b59fb3efdddeb97ded988a871710033e8638534c826567738d3edce528752"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:472505d030135d73afe4143b0873efe0dcb385bd6d847553b4f3afe07679af00"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:ec674b4440ef4311ac1245a709e87b36aca493ddc6850eebe0b278d1f2b6e7d1"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:184b4174d4bd82089d706e8223e46c42390a6ebac191073b9772abc77308f9fa"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c195d74fe98541178ece7a50dad2197d43991e0f77372b9a88da438be2486f12"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a34d97c62e61bfe9e6cff0410fe144ac8cca2fc979ad0be46b7edf026339d161"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cbb8453ae83a1db2452b7fe0f4b78e4a8dd32be0f2b2b73591ae620d4d784d3d"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f989e5cebead3ae92c6abf6bf7b19949e1563a776aea896ac5933f143f0c45d"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-win32.whl", hash = "sha256:c48fabe40b9170f4e3d7dd2c252e4f1ff395dc24e49ac15fc724b1b6f11724da"}, + {file = "grpcio_tools-1.62.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c616d0ad872e3780693fce6a3ac8ef00fc0963e6d7815ce9dcfae68ba0fc287"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:10cc3321704ecd17c93cf68c99c35467a8a97ffaaed53207e9b2da6ae0308ee1"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:9be84ff6d47fd61462be7523b49d7ba01adf67ce4e1447eae37721ab32464dd8"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:d82f681c9a9d933a9d8068e8e382977768e7779ddb8870fa0cf918d8250d1532"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04c607029ae3660fb1624ed273811ffe09d57d84287d37e63b5b802a35897329"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72b61332f1b439c14cbd3815174a8f1d35067a02047c32decd406b3a09bb9890"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8214820990d01b52845f9fbcb92d2b7384a0c321b303e3ac614c219dc7d1d3af"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:462e0ab8dd7c7b70bfd6e3195eebc177549ede5cf3189814850c76f9a340d7ce"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-win32.whl", hash = "sha256:fa107460c842e4c1a6266150881694fefd4f33baa544ea9489601810c2210ef8"}, + {file = "grpcio_tools-1.62.2-cp312-cp312-win_amd64.whl", hash = "sha256:759c60f24c33a181bbbc1232a6752f9b49fbb1583312a4917e2b389fea0fb0f2"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:45db5da2bcfa88f2b86b57ef35daaae85c60bd6754a051d35d9449c959925b57"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:ab84bae88597133f6ea7a2bdc57b2fda98a266fe8d8d4763652cbefd20e73ad7"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:7a49bccae1c7d154b78e991885c3111c9ad8c8fa98e91233de425718f47c6139"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7e439476b29d6dac363b321781a113794397afceeb97dad85349db5f1cb5e9a"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ea369c4d1567d1acdf69c8ea74144f4ccad9e545df7f9a4fc64c94fa7684ba3"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4f955702dc4b530696375251319d05223b729ed24e8673c2129f7a75d2caefbb"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3708a747aa4b6b505727282ca887041174e146ae030ebcadaf4c1d346858df62"}, + {file = "grpcio_tools-1.62.2-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce149ea55eadb486a7fb75a20f63ef3ac065ee6a0240ed25f3549ce7954c653"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:58cbb24b3fa6ae35aa9c210fcea3a51aa5fef0cd25618eb4fd94f746d5a9b703"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:6413581e14a80e0b4532577766cf0586de4dd33766a31b3eb5374a746771c07d"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:47117c8a7e861382470d0e22d336e5a91fdc5f851d1db44fa784b9acea190d87"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f1ba79a253df9e553d20319c615fa2b429684580fa042dba618d7f6649ac7e4"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04a394cf5e51ba9be412eb9f6c482b6270bd81016e033e8eb7d21b8cc28fe8b5"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3c53b221378b035ae2f1881cbc3aca42a6075a8e90e1a342c2f205eb1d1aa6a1"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c384c838b34d1b67068e51b5bbe49caa6aa3633acd158f1ab16b5da8d226bc53"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-win32.whl", hash = "sha256:19ea69e41c3565932aa28a202d1875ec56786aea46a2eab54a3b28e8a27f9517"}, + {file = "grpcio_tools-1.62.2-cp38-cp38-win_amd64.whl", hash = "sha256:1d768a5c07279a4c461ebf52d0cec1c6ca85c6291c71ec2703fe3c3e7e28e8c4"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:5b07b5874187e170edfbd7aa2ca3a54ebf3b2952487653e8c0b0d83601c33035"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:d58389fe8be206ddfb4fa703db1e24c956856fcb9a81da62b13577b3a8f7fda7"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:7d8b4e00c3d7237b92260fc18a561cd81f1da82e8be100db1b7d816250defc66"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fe08d2038f2b7c53259b5c49e0ad08c8e0ce2b548d8185993e7ef67e8592cca"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19216e1fb26dbe23d12a810517e1b3fbb8d4f98b1a3fbebeec9d93a79f092de4"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b8574469ecc4ff41d6bb95f44e0297cdb0d95bade388552a9a444db9cd7485cd"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4f6f32d39283ea834a493fccf0ebe9cfddee7577bdcc27736ad4be1732a36399"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-win32.whl", hash = "sha256:76eb459bdf3fb666e01883270beee18f3f11ed44488486b61cd210b4e0e17cc1"}, + {file = "grpcio_tools-1.62.2-cp39-cp39-win_amd64.whl", hash = "sha256:217c2ee6a7ce519a55958b8622e21804f6fdb774db08c322f4c9536c35fdce7c"}, +] + +[package.dependencies] +grpcio = ">=1.62.2" +protobuf = ">=4.21.6,<5.0dev" +setuptools = "*" + [[package]] name = "h11" version = "0.14.0" @@ -1855,6 +1923,32 @@ files = [ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] +[[package]] +name = "h2" +version = "4.1.0" +description = "HTTP/2 State-Machine based protocol implementation" +optional = true +python-versions = ">=3.6.1" +files = [ + {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, + {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, +] + +[package.dependencies] +hpack = ">=4.0,<5" +hyperframe = ">=6.0,<7" + +[[package]] +name = "hpack" +version = "4.0.0" +description = "Pure-Python HPACK header compression" +optional = true +python-versions = ">=3.6.1" +files = [ + {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, + {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, +] + [[package]] name = "htmldate" version = "1.8.1" @@ -1926,6 +2020,7 @@ files = [ [package.dependencies] anyio = "*" certifi = "*" +h2 = {version = ">=3,<5", optional = true, markers = "extra == \"http2\""} httpcore = "==1.*" idna = "*" sniffio = "*" @@ -1981,6 +2076,17 @@ testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gr torch = ["safetensors", "torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] +[[package]] +name = "hyperframe" +version = "6.0.1" +description = "HTTP/2 framing layer for Python" +optional = true +python-versions = ">=3.6.1" +files = [ + {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, + {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, +] + [[package]] name = "identify" version = "2.5.36" @@ -3787,6 +3893,25 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "portalocker" +version = "2.8.2" +description = "Wraps the portalocker recipe for easy usage" +optional = true +python-versions = ">=3.8" +files = [ + {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"}, + {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"}, +] + +[package.dependencies] +pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} + +[package.extras] +docs = ["sphinx (>=1.7.1)"] +redis = ["redis"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] + [[package]] name = "pprintpp" version = "0.4.0" @@ -4597,6 +4722,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4645,6 +4771,32 @@ files = [ [package.dependencies] pyyaml = "*" +[[package]] +name = "qdrant-client" +version = "1.9.1" +description = "Client library for the Qdrant vector search engine" +optional = true +python-versions = ">=3.8" +files = [ + {file = "qdrant_client-1.9.1-py3-none-any.whl", hash = "sha256:b9b7e0e5c1a51410d8bb5106a869a51e12f92ab45a99030f27aba790553bd2c8"}, + {file = "qdrant_client-1.9.1.tar.gz", hash = "sha256:186b9c31d95aefe8f2db84b7746402d7365bd63b305550e530e31bde2002ce79"}, +] + +[package.dependencies] +grpcio = ">=1.41.0" +grpcio-tools = ">=1.41.0" +httpx = {version = ">=0.20.0", extras = ["http2"]} +numpy = [ + {version = ">=1.21", markers = "python_version >= \"3.8\" and python_version < \"3.12\""}, + {version = ">=1.26", markers = "python_version >= \"3.12\""}, +] +portalocker = ">=2.7.0,<3.0.0" +pydantic = ">=1.10.8" +urllib3 = ">=1.26.14,<3" + +[package.extras] +fastembed = ["fastembed (==0.2.6)"] + [[package]] name = "readme-renderer" version = "43.0" @@ -6369,7 +6521,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "duckduckgo-search", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "ollama", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] +all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "duckduckgo-search", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "ollama", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pusher", "pymongo", "pypdf", "qdrant-client", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-cohere = ["cohere"] @@ -6399,6 +6551,7 @@ drivers-vector-mongodb = ["pymongo"] drivers-vector-opensearch = ["opensearch-py"] drivers-vector-pinecone = ["pinecone-client"] drivers-vector-postgresql = ["pgvector", "psycopg2-binary"] +drivers-vector-qdrant = ["qdrant-client"] drivers-vector-redis = ["redis"] drivers-web-scraper-markdownify = ["beautifulsoup4", "markdownify", "playwright"] drivers-web-scraper-trafilatura = ["trafilatura"] @@ -6412,4 +6565,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "937d5e870407a493038178b3060c663feb9a1b6e6fc16e55fa380a18d02b0c80" +content-hash = "d4a00633119a6b9616fc0ea31ae354f806d1fc363e4a930fa912d2d710aa8938" diff --git a/pyproject.toml b/pyproject.toml index 7882790cd..be33acb39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,6 +52,7 @@ markdownify = {version = "^0.11.6", optional = true} voyageai = {version = "^0.2.1", optional = true} elevenlabs = {version = "^1.1.2", optional = true} torch = {version = "^2.3.0", optional = true} +qdrant-client = { version = ">=1.9.1", optional = true } pusher = {version = "^3.3.2", optional = true} ollama = {version = "^0.2.1", optional = true} duckduckgo-search = {version = "^6.1.6", optional = true} @@ -87,6 +88,7 @@ drivers-vector-redis = ["redis"] drivers-vector-opensearch = ["opensearch-py"] drivers-vector-amazon-opensearch = ["opensearch-py", "boto3"] drivers-vector-postgresql = ["pgvector", "psycopg2-binary"] +drivers-vector-qdrant = ["qdrant-client"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] @@ -124,6 +126,7 @@ all = [ "snowflake", "marqo", "pinecone-client", + "qdrant-client", "pymongo", "redis", "opensearch-py", diff --git a/tests/unit/drivers/vector/test_qdrant_vector_store_driver.py b/tests/unit/drivers/vector/test_qdrant_vector_store_driver.py new file mode 100644 index 000000000..4431b146f --- /dev/null +++ b/tests/unit/drivers/vector/test_qdrant_vector_store_driver.py @@ -0,0 +1,171 @@ +import pytest +from unittest.mock import MagicMock, patch +from griptape.drivers import QdrantVectorStoreDriver +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver +from griptape.utils import import_optional_dependency +import uuid + + +class TestQdrantVectorStoreDriver: + @pytest.fixture + def embedding_driver(self): + return MockEmbeddingDriver() + + @pytest.fixture + def mock_engine(self): + return MagicMock() + + @pytest.fixture(autouse=True) + def driver(self, embedding_driver): + driver = QdrantVectorStoreDriver( + url="http://some_url", + port=8080, + grpc_port=50051, + prefer_grpc=True, + api_key=None, + https=False, + prefix=None, + force_disable_check_same_thread=False, + timeout=5, + distance="COSINE", + collection_name="some_collection", + vector_name=None, + content_payload_key="data", + embedding_driver=embedding_driver, + ) + return driver + + def test_attrs_post_init(self, driver): + with patch("griptape.drivers.vector.qdrant_vector_store_driver.import_optional_dependency") as mock_import: + mock_qdrant_client = MagicMock() + mock_import.return_value.QdrantClient.return_value = mock_qdrant_client + + driver.__attrs_post_init__() + + mock_import.assert_called_once_with("qdrant_client") + mock_import.return_value.QdrantClient.assert_called_once_with( + location=driver.location, + url=driver.url, + host=driver.host, + path=driver.path, + port=driver.port, + prefer_grpc=driver.prefer_grpc, + grpc_port=driver.grpc_port, + api_key=driver.api_key, + https=driver.https, + prefix=driver.prefix, + force_disable_check_same_thread=driver.force_disable_check_same_thread, + timeout=driver.timeout, + ) + assert driver.client == mock_qdrant_client + + def test_delete_vector(self, driver): + vector_id = "test_vector_id" + + mock_deletion_response = MagicMock() + mock_deletion_response.status = import_optional_dependency("qdrant_client.http.models").UpdateStatus.COMPLETED + + with patch.object(driver.client, "delete", return_value=mock_deletion_response) as mock_delete, patch( + "griptape.drivers.vector.qdrant_vector_store_driver.import_optional_dependency" + ) as mock_import: + mock_import.return_value.PointIdsList.return_value = MagicMock() + mock_import.return_value.UpdateStatus = import_optional_dependency("qdrant_client.http.models").UpdateStatus + + driver.delete_vector(vector_id) + + mock_delete.assert_called_once_with( + collection_name=driver.collection_name, + points_selector=mock_import.return_value.PointIdsList(points=[vector_id]), + ) + + def test_query(self, driver): + mock_query_result = [ + MagicMock( + id="foo", vector=[0, 1, 0], score=42, payload={"foo": "bar", "_score": 0.99, "_tensor_facets": []} + ) + ] + + with patch.object( + driver.embedding_driver, "embed_string", return_value=[0.1, 0.2, 0.3] + ) as mock_embed, patch.object(driver.client, "search", return_value=mock_query_result) as mock_search: + query = "test" + count = 10 + include_vectors = True + + results = driver.query(query, count, include_vectors=include_vectors) + + mock_embed.assert_called_once_with(query) + mock_search.assert_called_once_with( + collection_name=driver.collection_name, query_vector=[0.1, 0.2, 0.3], limit=count + ) + + assert len(results) == 1 + assert results[0].id == "foo" + assert results[0].vector == [0, 1, 0] if include_vectors else [] + assert results[0].score == 42 + assert results[0].meta == {"foo": "bar"} + + def test_upsert_with_batch(self, driver): + vector = [0.1, 0.2, 0.3] + vector_id = str(uuid.uuid4()) + meta = {"meta_key": "meta_value"} + + with patch("griptape.drivers.vector.qdrant_vector_store_driver.import_optional_dependency") as mock_import: + mock_batch = MagicMock() + mock_import.return_value.Batch.return_value = mock_batch + mock_qdrant_client = MagicMock() + driver.client = mock_qdrant_client + + result = driver.upsert_vector(vector=vector, vector_id=vector_id, meta=meta) + + mock_import.assert_called_once_with("qdrant_client.http.models") + mock_import.return_value.Batch.assert_called_once_with(ids=[vector_id], vectors=[vector], payloads=[meta]) + driver.client.upsert.assert_called_once_with(collection_name=driver.collection_name, points=mock_batch) + assert result == vector_id + + def test_load_entry(self, driver): + vector_id = str(uuid.uuid4()) + mock_entry = MagicMock() + mock_entry.id = vector_id + mock_entry.vector = [0.1, 0.2, 0.3] + mock_entry.payload = {"meta_key": "meta_value", "_score": 0.99, "_tensor_facets": []} + + with patch.object(driver.client, "retrieve", return_value=[mock_entry]): + result = driver.load_entry(vector_id) + + driver.client.retrieve.assert_called_once_with(collection_name=driver.collection_name, ids=[vector_id]) + + assert result.id == vector_id + assert result.vector == [0.1, 0.2, 0.3] + assert result.meta == {"meta_key": "meta_value"} + + with patch.object(driver.client, "retrieve", return_value=[]): + result = driver.load_entry(vector_id) + + driver.client.retrieve.assert_called_with(collection_name=driver.collection_name, ids=[vector_id]) + assert result is None + + def test_load_entries(self, driver): + mock_entries = [ + MagicMock( + id="id1", vector=[0.1, 0.2, 0.3], payload={"key1": "value1", "_score": 0.99, "_tensor_facets": []} + ), + MagicMock( + id="id2", vector=[0.4, 0.5, 0.6], payload={"key2": "value2", "_score": 0.88, "_tensor_facets": []} + ), + ] + + with patch.object(driver.client, "retrieve", return_value=mock_entries) as mock_retrieve: + results = driver.load_entries(ids=["id1", "id2"], with_payload=True, with_vectors=True) + + mock_retrieve.assert_called_once_with( + collection_name=driver.collection_name, ids=["id1", "id2"], with_payload=True, with_vectors=True + ) + + assert len(results) == 2 + assert results[0].id == "id1" + assert results[0].vector == [0.1, 0.2, 0.3] + assert results[0].meta == {"key1": "value1"} + assert results[1].id == "id2" + assert results[1].vector == [0.4, 0.5, 0.6] + assert results[1].meta == {"key2": "value2"} From ef46d1e2de061d551b70336fd530a325954a80ef Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 2 Jul 2024 16:38:23 -0500 Subject: [PATCH 132/145] Update contributing guidelines (#927) --- .github/pull_request_template.md | 7 ++----- Makefile | 8 ++++++-- README.md | 26 +++++++++++++++++--------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 3a3496ef6..71a920fcf 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,8 +1,5 @@ +- [ ] I have read and agree to the contributing guidelines for [submitting new pull requests](https://github.com/griptape-ai/griptape?tab=readme-ov-file#submitting-pull-requests). + ## Describe your changes ## Issue ticket number and link - -## Checklist before requesting a review -- [ ] I have performed a self-review of my code. -- [ ] I have added thorough tests. -- [ ] Is this a notable change? If so, please update the [changelog](https://github.com/griptape-ai/griptape/blob/dev/CHANGELOG.md). diff --git a/Makefile b/Makefile index 57d1869ce..13410094c 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,8 @@ publish: ## Push git tag and publish version to PyPI. install: ## Install all dependencies. @poetry install --with dev --with test --with docs --all-extras -.PHONY: test -test: test/unit test/integration ## Run all tests. +.PHONY: test ## Run all tests. +test: test/unit test/integration .PHONY: test/unit test/unit: ## Run unit tests. @@ -57,6 +57,10 @@ check/types: .PHONY: check/spell check/spell: @poetry run typos + +.PHONY: docs +docs: ## Build documentation. + @poetry run mkdocs build .DEFAULT_GOAL := help .PHONY: help diff --git a/README.md b/README.md index 6905903a3..3f2a895ab 100644 --- a/README.md +++ b/README.md @@ -162,12 +162,6 @@ Thank you for considering contributing to Griptape! Before you start, please rea If you have identified a bug, want to propose a new feature, or have a question, please submit an issue through our public [issue tracker](https://github.com/griptape-ai/griptape/issues). Before submitting a new issue, please check the existing issues to ensure it hasn't been reported or discussed before. -### New Griptape Tools - -Griptape's extensibility allows anyone to develop and distribute tools independently. With rare exceptions for Tools providing broadly applicable functionality, new Griptape Tools should be managed as their own projects and not submitted to the core framework. Pull requests for new tools (unless addressing an [existing issue](https://github.com/griptape-ai/griptape/issues)) will be closed. - -The [Griptape Tool Template](https://github.com/griptape-ai/tool-template) provides the recommended structure, step-by-step instructions, basic automation, and usage examples for new Tools. In the Template, select **Use this template** then **Create a new repository** to begin a new Tool project. - ### Submitting Pull Requests We welcome and encourage pull requests. To streamline the process, please follow these guidelines: @@ -178,13 +172,27 @@ We welcome and encourage pull requests. To streamline the process, please follow 3. **Unit Tests:** Ensure that your pull request passes all existing unit tests. Additionally, if you are introducing new code, please include new unit tests to validate its functionality. +Run `make test/unit` to execute the test suite locally. + 4. **Documentation:** Every pull request must include updates to documentation or explicitly explain why a documentation update is not required. Documentation is crucial for maintaining a comprehensive and user-friendly project. -5. **Code Style:** Griptape uses [Ruff](https://github.com/astral-sh/ruff) to enforce style guidelines. You can ensure that your code is formatted accordingly and will pass formatting checks using `pre-commit`. See [Tools](#tools) for information on how to configure this and other dev tools. +Run `make docs` to build the documentation locally. + +5. **Code Checks:** Griptape a variety of tools to enforce code quality and style. Your code must pass all checks before it can be merged. + +Run `make check` to run all code checks locally. + +6. **Changelog:** If your pull request introduces a notable change, please update the [changelog](https://github.com/griptape-ai/griptape/blob/dev/CHANGELOG.md). + +### New Griptape Tools + +Griptape's extensibility allows anyone to develop and distribute tools independently. With rare exceptions for Tools providing broadly applicable functionality, new Griptape Tools should be managed as their own projects and not submitted to the core framework. Pull requests for new tools (unless addressing an [existing issue](https://github.com/griptape-ai/griptape/issues)) will be closed. + +The [Griptape Tool Template](https://github.com/griptape-ai/tool-template) provides the recommended structure, step-by-step instructions, basic automation, and usage examples for new Tools. In the Template, select **Use this template** then **Create a new repository** to begin a new Tool project. -### Tools +### Dev and Test Dependencies -Install dev dependencies via Make: +Install all dependencies via Make: ```shell make install From 748744194c257e882c6c622826ea6faa82766a92 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Tue, 2 Jul 2024 18:19:05 -0500 Subject: [PATCH 133/145] Fix integration tests; Update `PromptTask` input validation (#931) --- docs/griptape-framework/drivers/prompt-drivers.md | 2 +- docs/griptape-tools/official-tools/date-time.md | 4 +--- .../drivers/vector/base_vector_store_driver.py | 8 ++++++-- griptape/tasks/prompt_task.py | 4 +--- poetry.lock | 14 +------------- .../vector/test_pinecone_vector_storage_driver.py | 2 +- .../vector/test_qdrant_vector_store_driver.py | 3 ++- tests/unit/tasks/test_prompt_task.py | 6 +++++- 8 files changed, 18 insertions(+), 25 deletions(-) diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index f95a0ba4e..a846cbb5b 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -36,7 +36,7 @@ stack = PromptStack() stack.add_system_message( "You will be provided with Python code, and your task is to calculate its time complexity." ) -stack.add_user_input( +stack.add_user_message( """ def foo(n, k): accum = 0 diff --git a/docs/griptape-tools/official-tools/date-time.md b/docs/griptape-tools/official-tools/date-time.md index 6ecf6e2a6..aa0c0cc55 100644 --- a/docs/griptape-tools/official-tools/date-time.md +++ b/docs/griptape-tools/official-tools/date-time.md @@ -12,9 +12,7 @@ agent = Agent( ) # Fetch the current date and time -agent.run({ - "description": "What is the current date and time?" -}) +agent.run("What is the current date and time?") ``` ``` [09/11/23 15:26:02] INFO Task d0bf49dacd8849e695494578a333f6cc diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 2c0962328..5a4130a88 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -1,4 +1,5 @@ from __future__ import annotations +import uuid from abc import ABC, abstractmethod from concurrent import futures from dataclasses import dataclass @@ -56,7 +57,7 @@ def upsert_text_artifact( **kwargs, ) -> str: meta = {} if meta is None else meta - vector_id = utils.str_to_hash(artifact.to_text()) if vector_id is None else vector_id + vector_id = self._get_default_vector_id(artifact.to_text()) if vector_id is None else vector_id if self.does_entry_exist(vector_id, namespace): return vector_id @@ -81,7 +82,7 @@ def upsert_text( meta: Optional[dict] = None, **kwargs, ) -> str: - vector_id = utils.str_to_hash(string) if vector_id is None else vector_id + vector_id = self._get_default_vector_id(string) if vector_id is None else vector_id if self.does_entry_exist(vector_id, namespace): return vector_id @@ -134,3 +135,6 @@ def query( include_vectors: bool = False, **kwargs, ) -> list[Entry]: ... + + def _get_default_vector_id(self, value: str) -> str: + return str(uuid.uuid5(uuid.NAMESPACE_OID, value)) diff --git a/griptape/tasks/prompt_task.py b/griptape/tasks/prompt_task.py index f10899f76..dba542d60 100644 --- a/griptape/tasks/prompt_task.py +++ b/griptape/tasks/prompt_task.py @@ -100,11 +100,9 @@ def _process_task_input( return task_input elif isinstance(task_input, Callable): return self._process_task_input(task_input(self)) - elif isinstance(task_input, str): - return self._process_task_input(TextArtifact(task_input)) elif isinstance(task_input, BaseArtifact): return task_input elif isinstance(task_input, list) or isinstance(task_input, tuple): return ListArtifact([self._process_task_input(elem) for elem in task_input]) else: - raise ValueError(f"Invalid input type: {type(task_input)} ") + return self._process_task_input(TextArtifact(task_input)) diff --git a/poetry.lock b/poetry.lock index 64f01aa75..1d925d6a1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -4463,48 +4463,37 @@ files = [ {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab6b32544491ee655264dab86fc8a58e47c4f87d196b28022d4007faf971a50"}, {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:64bd6299e7fc888bb7f7292cf3e29504c406e5d5d04afd37ca994ab8142d8ee4"}, {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e914b650dd953b8d9b24ef56aa4ecbfc16e399227b68accd818f8bf159e0c558"}, - {file = "pyreqwest_impersonate-0.4.8-cp310-none-win_amd64.whl", hash = "sha256:cb56a2149b0c4548a8e0158b071a943f33dae9b717f92b5c9ac34ccd1f5a958c"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f62620e023490902feca0109f306e122e427feff7d59e03ecd22c69a89452367"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:08d4c01d76da88cfe3d7d03b311b375ce3fb5a59130f93f0637bb755d6e56ff1"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524e276bc460176c79d7ba4b9131d9db73c534586660371ebdf067749252a33"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22863bc0aaf02ca2f5d76c8130929ae680b7d82dfc1c28c1ed5f306ff626928"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8cc82d57f6a91037e64a7aa9122f909576ef2a141a42ce599958ef9f8c4bc033"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:da8a053308210e44fd8349f07f45442a0691ac932f2881e98b05cf9ac404b091"}, - {file = "pyreqwest_impersonate-0.4.8-cp311-none-win_amd64.whl", hash = "sha256:4baf3916c14364a815a64ead7f728afb61b37541933b2771f18dbb245029bb55"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:78db05deed0b32c9c75f2b3168a3a9b7d5e36487b218cb839bfe7e2a143450cb"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9af9446d605903c2b4e94621a9093f8d8a403729bc9cbfbcb62929f8238c838f"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c55890181d8d81e66cac25a95e215dc9680645d01e9091b64449d5407ad9bc6"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69344e7ae9964502a8693da7ad77ebc3e1418ee197e2e394bc23c5d4970772a"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b5db5c957a10d8cc2815085ba0b8fe09245b2f94c2225d9653a854a03b4217e1"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03c19c21f63f9c91c590c4bbcc32cc2d8066b508c683a1d163b8c7d9816a01d5"}, - {file = "pyreqwest_impersonate-0.4.8-cp312-none-win_amd64.whl", hash = "sha256:0230610779129f74ff802c744643ce7589b1d07cba21d046fe3b574281c29581"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b8cb9471ab4b2fa7e80d3ac4e580249ff988d782f2938ad1f0428433652b170d"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8081a5ace2658be91519902bde9ddc5f94e1f850a39be196007a25e3da5bbfdc"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69eababfa3200459276acd780a0f3eaf41d1fe7c02bd169e714cba422055b5b9"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:632957fa671ebb841166e40913015de457225cb73600ef250c436c280e68bf45"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2ce7ddef334b4e5c68f5ea1da1d65f686b8d84f4443059d128e0f069d3fa499a"}, - {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6ce333d450b158d582e36317089a006440b4e66739a8e8849d170e4cb15e8c8d"}, - {file = "pyreqwest_impersonate-0.4.8-cp38-none-win_amd64.whl", hash = "sha256:9d9c85ce19db92362854f534807e470f03e905f283a7de6826dc79b790a8788e"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2503277f2a95a30e28e498570e2ed03ef4302f873054e8e21d6c0e607cbbc1d1"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8260395ef4ddae325e8b30cef0391adde7bd35e1a1decf8c729e26391f09b52d"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d8066b46d82bbaff5402d767e2f13d3449b8191c37bf8283e91d301a7159869"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9c42f6343cfbd6663fb53edc9eb9feb4ebf6186b284e22368adc1eeb6a33854"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ff534f491a059e74fb7f994876df86078b4b125dbecc53c098a298ecd55fa9c6"}, - {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b8fbf73b3ac513ddadafd338d61f79cd2370f0691d9175b2b92a45920920d6b"}, - {file = "pyreqwest_impersonate-0.4.8-cp39-none-win_amd64.whl", hash = "sha256:a26447c82665d0e361207c1a15e56b0ca54974aa6c1fdfa18c68f908dec78cbe"}, {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24a16b8d55309f0af0db9d04ff442b0c91afccf078a94809e7c3a71747a5c214"}, {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c8fada56465fc19179404cc9d5d5e1064f5dfe27405cb052f57a5b4fe06aed1"}, {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a3d48d5abc146fd804395713427d944757a99254350e6a651e7d776818074aee"}, - {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:475829fe9994c66258157a8d4adb1c038f44f79f901208ba656d547842337227"}, {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ef1ec0e97623bc0e18469418cc4dd2c59a2d5fddcae944de61e13c0b46f910e"}, {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91857b196de89e9b36d3f8629aa8772c0bbe7efef8334fe266956b1c192ec31c"}, {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:63831e407487b8a21bb51f97cd86a616c291d5138f8caec16ab6019cf6423935"}, - {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c30e61de93bcd0a9d3ca226b1ae5475002afde61e9d85018a6a4a040eeb86567"}, {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6c72c37b03bce9900f5dbb4f476af17253ec60c13bf7a7259f71a8dc1b036cb"}, {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1f1096165741b5c2178ab15b0eb09b5de16dd39b1cc135767d72471f0a69ce"}, {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:70c940c0e4ef335e22a6c705b01f286ee44780b5909065d212d94d82ea2580cb"}, - {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:81c06f21757602d85f16dbc1cbaee1121cd65455f65aed4c048b7dcda7be85c4"}, - {file = "pyreqwest_impersonate-0.4.8.tar.gz", hash = "sha256:1eba11d47bd17244c64fec1502cc26ee66cc5c8a3be131e408101ae2b455e5bc"}, ] [package.extras] @@ -4722,7 +4711,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, diff --git a/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py b/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py index c0477fe97..7aea4d411 100644 --- a/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py +++ b/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py @@ -34,7 +34,7 @@ def driver(self): def test_upsert_text_artifact(self, driver): artifact = TextArtifact("foo") - assert driver.upsert_text_artifact(artifact) == utils.str_to_hash(artifact.value) + assert driver.upsert_text_artifact(artifact) == driver._get_default_vector_id("foo") def test_upsert_vector(self, driver): assert driver.upsert_vector([0, 1, 2], vector_id="foo") == "foo" diff --git a/tests/unit/drivers/vector/test_qdrant_vector_store_driver.py b/tests/unit/drivers/vector/test_qdrant_vector_store_driver.py index 4431b146f..c999af8b9 100644 --- a/tests/unit/drivers/vector/test_qdrant_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_qdrant_vector_store_driver.py @@ -16,7 +16,8 @@ def mock_engine(self): return MagicMock() @pytest.fixture(autouse=True) - def driver(self, embedding_driver): + def driver(self, embedding_driver, mocker): + mocker.patch("qdrant_client.QdrantClient") driver = QdrantVectorStoreDriver( url="http://some_url", port=8080, diff --git a/tests/unit/tasks/test_prompt_task.py b/tests/unit/tasks/test_prompt_task.py index bcef8bce1..3a02309d3 100644 --- a/tests/unit/tasks/test_prompt_task.py +++ b/tests/unit/tasks/test_prompt_task.py @@ -111,10 +111,14 @@ def test_input(self): [TextArtifact("foo"), ImageArtifact(b"image-data", format="png", width=100, height=100)] ) ) - assert isinstance(task.input, ListArtifact) assert task.input.value[0].value == "foo" assert isinstance(task.input.value[1], ImageArtifact) assert task.input.value[1].value == b"image-data" assert task.input.value[1].format == "png" assert task.input.value[1].width == 100 + + # default case + task = PromptTask({"default": "test"}) + + assert task.input.value == str({"default": "test"}) From de2315c655c173d5d9d6d55b7a65c1f5e171b70d Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Tue, 2 Jul 2024 19:35:14 -0500 Subject: [PATCH 134/145] Bump pydantic,urllib3,requests (#933) --- poetry.lock | 92 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1d925d6a1..f169895cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4174,47 +4174,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.15" +version = "1.10.16" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22ed12ee588b1df028a2aa5d66f07bf8f8b4c8579c2e96d5a9c1f96b77f3bb55"}, - {file = "pydantic-1.10.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:75279d3cac98186b6ebc2597b06bcbc7244744f6b0b44a23e4ef01e5683cc0d2"}, - {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50f1666a9940d3d68683c9d96e39640f709d7a72ff8702987dab1761036206bb"}, - {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82790d4753ee5d00739d6cb5cf56bceb186d9d6ce134aca3ba7befb1eedbc2c8"}, - {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d207d5b87f6cbefbdb1198154292faee8017d7495a54ae58db06762004500d00"}, - {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e49db944fad339b2ccb80128ffd3f8af076f9f287197a480bf1e4ca053a866f0"}, - {file = "pydantic-1.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:d3b5c4cbd0c9cb61bbbb19ce335e1f8ab87a811f6d589ed52b0254cf585d709c"}, - {file = "pydantic-1.10.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3d5731a120752248844676bf92f25a12f6e45425e63ce22e0849297a093b5b0"}, - {file = "pydantic-1.10.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c365ad9c394f9eeffcb30a82f4246c0006417f03a7c0f8315d6211f25f7cb654"}, - {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3287e1614393119c67bd4404f46e33ae3be3ed4cd10360b48d0a4459f420c6a3"}, - {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be51dd2c8596b25fe43c0a4a59c2bee4f18d88efb8031188f9e7ddc6b469cf44"}, - {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6a51a1dd4aa7b3f1317f65493a182d3cff708385327c1c82c81e4a9d6d65b2e4"}, - {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4e316e54b5775d1eb59187f9290aeb38acf620e10f7fd2f776d97bb788199e53"}, - {file = "pydantic-1.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:0d142fa1b8f2f0ae11ddd5e3e317dcac060b951d605fda26ca9b234b92214986"}, - {file = "pydantic-1.10.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7ea210336b891f5ea334f8fc9f8f862b87acd5d4a0cbc9e3e208e7aa1775dabf"}, - {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3453685ccd7140715e05f2193d64030101eaad26076fad4e246c1cc97e1bb30d"}, - {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bea1f03b8d4e8e86702c918ccfd5d947ac268f0f0cc6ed71782e4b09353b26f"}, - {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:005655cabc29081de8243126e036f2065bd7ea5b9dff95fde6d2c642d39755de"}, - {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:af9850d98fc21e5bc24ea9e35dd80a29faf6462c608728a110c0a30b595e58b7"}, - {file = "pydantic-1.10.15-cp37-cp37m-win_amd64.whl", hash = "sha256:d31ee5b14a82c9afe2bd26aaa405293d4237d0591527d9129ce36e58f19f95c1"}, - {file = "pydantic-1.10.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e09c19df304b8123938dc3c53d3d3be6ec74b9d7d0d80f4f4b5432ae16c2022"}, - {file = "pydantic-1.10.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7ac9237cd62947db00a0d16acf2f3e00d1ae9d3bd602b9c415f93e7a9fc10528"}, - {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:584f2d4c98ffec420e02305cf675857bae03c9d617fcfdc34946b1160213a948"}, - {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbc6989fad0c030bd70a0b6f626f98a862224bc2b1e36bfc531ea2facc0a340c"}, - {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d573082c6ef99336f2cb5b667b781d2f776d4af311574fb53d908517ba523c22"}, - {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6bd7030c9abc80134087d8b6e7aa957e43d35714daa116aced57269a445b8f7b"}, - {file = "pydantic-1.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:3350f527bb04138f8aff932dc828f154847fbdc7a1a44c240fbfff1b57f49a12"}, - {file = "pydantic-1.10.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:51d405b42f1b86703555797270e4970a9f9bd7953f3990142e69d1037f9d9e51"}, - {file = "pydantic-1.10.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a980a77c52723b0dc56640ced396b73a024d4b74f02bcb2d21dbbac1debbe9d0"}, - {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f1a1fb467d3f49e1708a3f632b11c69fccb4e748a325d5a491ddc7b5d22383"}, - {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:676ed48f2c5bbad835f1a8ed8a6d44c1cd5a21121116d2ac40bd1cd3619746ed"}, - {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:92229f73400b80c13afcd050687f4d7e88de9234d74b27e6728aa689abcf58cc"}, - {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2746189100c646682eff0bce95efa7d2e203420d8e1c613dc0c6b4c1d9c1fde4"}, - {file = "pydantic-1.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:394f08750bd8eaad714718812e7fab615f873b3cdd0b9d84e76e51ef3b50b6b7"}, - {file = "pydantic-1.10.15-py3-none-any.whl", hash = "sha256:28e552a060ba2740d0d2aabe35162652c1459a0b9069fe0db7f4ee0e18e74d58"}, - {file = "pydantic-1.10.15.tar.gz", hash = "sha256:ca832e124eda231a60a041da4f013e3ff24949d94a01154b137fc2f2a43c3ffb"}, + {file = "pydantic-1.10.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1a539ac40551b01a85e899829aa43ca8036707474af8d74b48be288d4d2d2846"}, + {file = "pydantic-1.10.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a4fcc7b0b8038dbda2dda642cff024032dfae24a7960cc58e57a39eb1949b9b"}, + {file = "pydantic-1.10.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4660dd697de1ae2d4305a85161312611f64d5360663a9ba026cd6ad9e3fe14c3"}, + {file = "pydantic-1.10.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:900a787c574f903a97d0bf52a43ff3b6cf4fa0119674bcfc0e5fd1056d388ad9"}, + {file = "pydantic-1.10.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d30192a63e6d3334c3f0c0506dd6ae9f1dce7b2f8845518915291393a5707a22"}, + {file = "pydantic-1.10.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:16cf23ed599ca5ca937e37ba50ab114e6b5c387eb43a6cc533701605ad1be611"}, + {file = "pydantic-1.10.16-cp310-cp310-win_amd64.whl", hash = "sha256:8d23111f41d1e19334edd51438fd57933f3eee7d9d2fa8cc3f5eda515a272055"}, + {file = "pydantic-1.10.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef287b8d7fc0e86a8bd1f902c61aff6ba9479c50563242fe88ba39692e98e1e0"}, + {file = "pydantic-1.10.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b9ded699bfd3b3912d796ff388b0c607e6d35d41053d37aaf8fd6082c660de9a"}, + {file = "pydantic-1.10.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daeb199814333e4426c5e86d7fb610f4e230289f28cab90eb4de27330bef93cf"}, + {file = "pydantic-1.10.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5973843f1fa99ec6c3ac8d1a8698ac9340b35e45cca6c3e5beb5c3bd1ef15de6"}, + {file = "pydantic-1.10.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6b8a7788a8528a558828fe4a48783cafdcf2612d13c491594a8161dc721629c"}, + {file = "pydantic-1.10.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8abaecf54dacc9d991dda93c3b880d41092a8924cde94eeb811d7d9ab55df7d8"}, + {file = "pydantic-1.10.16-cp311-cp311-win_amd64.whl", hash = "sha256:ddc7b682fbd23f051edc419dc6977e11dd2dbdd0cef9d05f0e15d1387862d230"}, + {file = "pydantic-1.10.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:067c2b5539f7839653ad8c3d1fc2f1343338da8677b7b2172abf3cd3fdc8f719"}, + {file = "pydantic-1.10.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d1fc943583c046ecad0ff5d6281ee571b64e11b5503d9595febdce54f38b290"}, + {file = "pydantic-1.10.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18548b30ccebe71d380b0886cc44ea5d80afbcc155e3518792f13677ad06097d"}, + {file = "pydantic-1.10.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4e92292f9580fc5ea517618580fac24e9f6dc5657196e977c194a8e50e14f5a9"}, + {file = "pydantic-1.10.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5da8bc4bb4f85b8c97cc7f11141fddbbd29eb25e843672e5807e19cc3d7c1b7f"}, + {file = "pydantic-1.10.16-cp37-cp37m-win_amd64.whl", hash = "sha256:a04ee1ea34172b87707a6ecfcdb120d7656892206b7c4dbdb771a73e90179fcb"}, + {file = "pydantic-1.10.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4fa86469fd46e732242c7acb83282d33f83591a7e06f840481327d5bf6d96112"}, + {file = "pydantic-1.10.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:89c2783dc261726fe7a5ce1121bce29a2f7eb9b1e704c68df2b117604e3b346f"}, + {file = "pydantic-1.10.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78e59fa919fa7a192f423d190d8660c35dd444efa9216662273f36826765424b"}, + {file = "pydantic-1.10.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7e82a80068c77f4b074032e031e642530b6d45cb8121fc7c99faa31fb6c6b72"}, + {file = "pydantic-1.10.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d82d5956cee27a30e26a5b88d00a6a2a15a4855e13c9baf50175976de0dc282c"}, + {file = "pydantic-1.10.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b7b99424cc0970ff08deccb549b5a6ec1040c0b449eab91723e64df2bd8fdca"}, + {file = "pydantic-1.10.16-cp38-cp38-win_amd64.whl", hash = "sha256:d97a35e1ba59442775201657171f601a2879e63517a55862a51f8d67cdfc0017"}, + {file = "pydantic-1.10.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9d91f6866fd3e303c632207813ef6bc4d86055e21c5e5a0a311983a9ac5f0192"}, + {file = "pydantic-1.10.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d8d3c71d14c8bd26d2350c081908dbf59d5a6a8f9596d9ef2b09cc1e61c8662b"}, + {file = "pydantic-1.10.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b73e6386b439b4881d79244e9fc1e32d1e31e8d784673f5d58a000550c94a6c0"}, + {file = "pydantic-1.10.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f039881fb2ef86f6de6eacce6e71701b47500355738367413ccc1550b2a69cf"}, + {file = "pydantic-1.10.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3895ddb26f22bdddee7e49741486aa7b389258c6f6771943e87fc00eabd79134"}, + {file = "pydantic-1.10.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55b945da2756b5cef93d792521ad0d457fdf2f69fd5a2d10a27513f5281717dd"}, + {file = "pydantic-1.10.16-cp39-cp39-win_amd64.whl", hash = "sha256:22dd265c77c3976a34be78409b128cb84629284dfd1b69d2fa1507a36f84dc8b"}, + {file = "pydantic-1.10.16-py3-none-any.whl", hash = "sha256:aa2774ba5412fd1c5cb890d08e8b0a3bb5765898913ba1f61a65a4810f03cf29"}, + {file = "pydantic-1.10.16.tar.gz", hash = "sha256:8bb388f6244809af69ee384900b10b677a69f1980fdc655ea419710cffcb5610"}, ] [package.dependencies] @@ -4912,13 +4912,13 @@ files = [ [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -6177,13 +6177,13 @@ files = [ [[package]] name = "urllib3" -version = "1.26.18" +version = "1.26.19" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, - {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, + {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, + {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, ] [package.extras] @@ -6553,4 +6553,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "d4a00633119a6b9616fc0ea31ae354f806d1fc363e4a930fa912d2d710aa8938" +content-hash = "a38d0f0671ff5deb42783721f4ce103e670a689f618e950451a807921f5d7139" diff --git a/pyproject.toml b/pyproject.toml index be33acb39..e4c84f624 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ numpy = ">=1" stringcase = "^1.2.0" docker = "^7.1.0" sqlalchemy = "~=1.0" -requests = "^2" +requests = "^2.32.0" # drivers cohere = { version = "^5.5.4", optional = true } From 89b69bcb5eca53b123e498374e86b7ec9f0aae4d Mon Sep 17 00:00:00 2001 From: CJ Kindel Date: Wed, 3 Jul 2024 07:45:05 -0700 Subject: [PATCH 135/145] Use custom discord invite link (#932) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f2a895ab..42df8fbd6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Checked with pyright](https://microsoft.github.io/pyright/img/pyright_badge.svg)](https://microsoft.github.io/pyright/) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![codecov](https://codecov.io/github/griptape-ai/griptape/graph/badge.svg?token=HUBqUpl3NB)](https://codecov.io/github/griptape-ai/griptape) -[![Griptape Discord](https://dcbadge.vercel.app/api/server/gnWRz88eym?compact=true&style=flat)](https://discord.gg/gnWRz88eym) +[![Griptape Discord](https://dcbadge.vercel.app/api/server/gnWRz88eym?compact=true&style=flat)](https://discord.gg/griptape) Griptape is a modular Python framework for building AI-powered applications that securely connect to your enterprise data and APIs. It offers developers the ability to maintain control and flexibility at every step. From 1f09acb8089e054a2574f82ffce1b94b96603478 Mon Sep 17 00:00:00 2001 From: Vasily Vasinov Date: Wed, 3 Jul 2024 10:57:52 -0600 Subject: [PATCH 136/145] `RagContext` and other `RagEngine` improvements (#930) --- CHANGELOG.md | 17 +++--- docs/examples/talk-to-a-pdf.md | 17 +++--- docs/examples/talk-to-a-webpage.md | 18 +++--- .../griptape-framework/engines/rag-engines.md | 32 +++++----- .../structures/task-memory.md | 19 +++--- docs/griptape-framework/structures/tasks.md | 16 ++--- .../official-tools/rag-client.md | 16 ++--- griptape/engines/rag/modules/__init__.py | 36 +++++------ .../engines/rag/modules/base_rag_module.py | 15 ++++- .../metadata_generation_rag_module.py | 20 ------- .../modules/query/base_query_rag_module.py | 2 +- .../related_query_generation_rag_module.py | 34 ----------- .../{generation => response}/__init__.py | 0 .../base_after_response_rag_module.py} | 2 +- .../base_before_response_rag_module.py} | 2 +- .../base_response_rag_module.py} | 2 +- .../metadata_before_response_rag_module.py | 19 ++++++ .../prompt_response_rag_module.py} | 10 ++-- .../rulesets_before_response_rag_module.py} | 4 +- .../text_chunks_response_rag_module.py | 12 ++++ ...le.py => text_chunks_rerank_rag_module.py} | 4 +- .../retrieval/text_retrieval_rag_module.py | 36 ----------- .../vector_store_retrieval_rag_module.py | 24 ++++++++ griptape/engines/rag/rag_context.py | 16 ++--- griptape/engines/rag/rag_engine.py | 27 +++++++-- griptape/engines/rag/stages/__init__.py | 4 +- griptape/engines/rag/stages/base_rag_stage.py | 5 ++ .../rag/stages/generation_rag_stage.py | 33 ----------- .../engines/rag/stages/query_rag_stage.py | 17 +++--- .../engines/rag/stages/response_rag_stage.py | 46 +++++++++++++++ .../engines/rag/stages/retrieval_rag_stage.py | 13 +++- .../task/storage/base_artifact_storage.py | 2 +- .../task/storage/blob_artifact_storage.py | 2 +- .../task/storage/text_artifact_storage.py | 25 +++++++- griptape/memory/task/task_memory.py | 2 +- griptape/structures/structure.py | 23 ++++---- griptape/tasks/rag_task.py | 4 +- .../rag/modules/prompt_generation/system.j2 | 15 ----- .../rag/modules/query_generation/system.j2 | 3 - .../metadata}/system.j2 | 0 .../rag/modules/response/prompt/system.j2 | 19 ++++++ griptape/tools/base_tool.py | 6 +- griptape/tools/rag_client/tool.py | 4 +- griptape/tools/task_memory_client/tool.py | 4 +- tests/mocks/mock_rag_module.py | 4 ++ ...est_metadata_before_response_rag_module.py | 19 ++++++ .../test_metadata_generation_rag_module.py | 14 ----- ....py => test_prompt_response_rag_module.py} | 8 +-- ...est_rulesets_before_response_rag_module.py | 10 ++++ .../test_rulesets_generation_rag_module.py | 10 ---- .../test_text_chunks_response_rag_module.py | 15 +++++ ...est_related_query_generation_rag_module.py | 13 ---- ... => test_text_chunks_rerank_rag_module.py} | 8 +-- .../test_text_retrieval_rag_module.py | 20 ------- .../test_vector_store_retrieval_rag_module.py | 59 +++++++++++++++++++ .../rag/modules/test_base_rag_nodule.py | 27 +++++++++ tests/unit/engines/rag/test_rag_engine.py | 34 ++++++++--- tests/unit/structures/test_agent.py | 2 +- tests/unit/tasks/test_rag_task.py | 8 +-- tests/unit/tools/test_base_tool.py | 4 -- tests/utils/defaults.py | 9 +-- 61 files changed, 516 insertions(+), 375 deletions(-) delete mode 100644 griptape/engines/rag/modules/generation/metadata_generation_rag_module.py delete mode 100644 griptape/engines/rag/modules/query/related_query_generation_rag_module.py rename griptape/engines/rag/modules/{generation => response}/__init__.py (100%) rename griptape/engines/rag/modules/{generation/base_after_generation_rag_module.py => response/base_after_response_rag_module.py} (82%) rename griptape/engines/rag/modules/{generation/base_before_generation_rag_module.py => response/base_before_response_rag_module.py} (82%) rename griptape/engines/rag/modules/{generation/base_generation_rag_module.py => response/base_response_rag_module.py} (83%) create mode 100644 griptape/engines/rag/modules/response/metadata_before_response_rag_module.py rename griptape/engines/rag/modules/{generation/prompt_generation_rag_module.py => response/prompt_response_rag_module.py} (87%) rename griptape/engines/rag/modules/{generation/rulesets_generation_rag_module.py => response/rulesets_before_response_rag_module.py} (73%) create mode 100644 griptape/engines/rag/modules/response/text_chunks_response_rag_module.py rename griptape/engines/rag/modules/retrieval/{text_rerank_rag_module.py => text_chunks_rerank_rag_module.py} (69%) delete mode 100644 griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py create mode 100644 griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py delete mode 100644 griptape/engines/rag/stages/generation_rag_stage.py create mode 100644 griptape/engines/rag/stages/response_rag_stage.py delete mode 100644 griptape/templates/engines/rag/modules/prompt_generation/system.j2 delete mode 100644 griptape/templates/engines/rag/modules/query_generation/system.j2 rename griptape/templates/engines/rag/modules/{metadata_generation => response/metadata}/system.j2 (100%) create mode 100644 griptape/templates/engines/rag/modules/response/prompt/system.j2 create mode 100644 tests/mocks/mock_rag_module.py create mode 100644 tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py delete mode 100644 tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py rename tests/unit/engines/rag/modules/generation/{test_prompt_generation_rag_module.py => test_prompt_response_rag_module.py} (71%) create mode 100644 tests/unit/engines/rag/modules/generation/test_rulesets_before_response_rag_module.py delete mode 100644 tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py create mode 100644 tests/unit/engines/rag/modules/generation/test_text_chunks_response_rag_module.py delete mode 100644 tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py rename tests/unit/engines/rag/modules/retrieval/{test_text_rerank_rag_module.py => test_text_chunks_rerank_rag_module.py} (62%) delete mode 100644 tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py create mode 100644 tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py create mode 100644 tests/unit/engines/rag/modules/test_base_rag_nodule.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 399da1969..91c8fe89f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,17 +38,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - RAG stages: - `QueryRagStage` for parsing and expanding queries. - `RetrievalRagStage` for retrieving content. - - `GenerationRagStage` for augmenting and generating outputs. + - `ResponseRagStage` for augmenting and generating outputs. - RAG modules: - - Query: - - `RelatedQueryGenerationRagModule` for generating related queries. - Retrieval: - - `TextRetrievalRagModule` for retrieving text chunks. - - `TextRerankRagModule` for re-ranking retrieved results. - - Generation: - - `MetadataGenerationRagModule` for appending metadata. - - `RulesetsGenerationRagModule` for appending rulesets. - - `PromptGenerationRagModule` for generating responses based on retrieved text chunks. + - `VectorStoreRetrievalRagModule` for retrieving text chunks from vector stores. + - `TextChunksRerankRagModule` for re-ranking retrieved results. + - Response: + - `MetadataBeforeResponseRagModule` for appending metadata. + - `RulesetsBeforeResponseRagModule` for appending rulesets. + - `PromptResponseRagModule` for generating responses based on retrieved text chunks. + - `TextChunksResponseRagModule` for responding with retrieved text chunks. - `RagClient` tool for exposing `RagEngines` to LLM agents. - `RagTask` task for including `RagEngines` in any structure. - Rerank drivers: diff --git a/docs/examples/talk-to-a-pdf.md b/docs/examples/talk-to-a-pdf.md index a39832961..a3f47f0c6 100644 --- a/docs/examples/talk-to-a-pdf.md +++ b/docs/examples/talk-to-a-pdf.md @@ -4,8 +4,8 @@ This example demonstrates how to vectorize a PDF of the [Attention Is All You Ne import requests from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage from griptape.loaders import PdfLoader from griptape.structures import Agent from griptape.tools import RagClient @@ -19,15 +19,18 @@ vector_store = LocalVectorStoreDriver( engine = RagEngine( retrieval_stage=RetrievalRagStage( retrieval_modules=[ - TextRetrievalRagModule( - namespace=namespace, + VectorStoreRetrievalRagModule( vector_store_driver=vector_store, - top_n=20 + query_params={ + "namespace": namespace, + "top_n": 20 + + } ) ] ), - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule( + response_stage=ResponseRagStage( + response_module=PromptResponseRagModule( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) diff --git a/docs/examples/talk-to-a-webpage.md b/docs/examples/talk-to-a-webpage.md index ddd1a18c9..d1d0da5fa 100644 --- a/docs/examples/talk-to-a-webpage.md +++ b/docs/examples/talk-to-a-webpage.md @@ -3,8 +3,8 @@ This example demonstrates how to vectorize a webpage and setup a Griptape agent ```python from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage from griptape.loaders import WebLoader from griptape.rules import Ruleset, Rule from griptape.structures import Agent @@ -18,15 +18,18 @@ vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDri engine = RagEngine( retrieval_stage=RetrievalRagStage( retrieval_modules=[ - TextRetrievalRagModule( - namespace=namespace, + VectorStoreRetrievalRagModule( vector_store_driver=vector_store_driver, - top_n=20 + query_params={ + "namespace": namespace, + "top_n": 20 + + } ) ] ), - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule( + response_stage=ResponseRagStage( + response_module=PromptResponseRagModule( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) @@ -40,7 +43,6 @@ vector_store_driver.upsert_text_artifacts( {namespace: artifacts} ) - vector_store_tool = RagClient( description="Contains information about physics. " "Use it to answer any physics-related questions.", diff --git a/docs/griptape-framework/engines/rag-engines.md b/docs/griptape-framework/engines/rag-engines.md index 600b91d03..c03bf0f47 100644 --- a/docs/griptape-framework/engines/rag-engines.md +++ b/docs/griptape-framework/engines/rag-engines.md @@ -10,21 +10,23 @@ ### RAG Stages - `QueryRagStage` is for parsing and expanding queries. - `RetrievalRagStage` is for retrieving content. -- `GenerationRagStage` is for augmenting and generating outputs. +- `ResponseRagStage` is for augmenting and generating outputs. ### RAG Modules #### Query -- `RelatedQueryGenerationRagModule` is for generating related queries. + +No modules implemented yet. #### Retrieval - `TextRetrievalRagModule` is for retrieving text chunks. -- `TextRerankRagModule` is for re-ranking retrieved results. +- `TextChunksRerankRagModule` is for re-ranking retrieved results. -#### Generation -- `MetadataGenerationRagModule` is for appending metadata. -- `RulesetsGenerationRagModule` is for appending rulesets. -- `PromptGenerationRagModule` is for generating responses based on retrieved text chunks. +#### Response +- `MetadataBeforeResponseRagModule` is for appending metadata. +- `RulesetsBeforeResponseRagModule` is for appending rulesets. +- `PromptResponseRagModule` is for generating responses based on retrieved text chunks. +- `TextChunksResponseRagModule` for responding with retrieved text chunks. ### Example @@ -32,8 +34,8 @@ from griptape.artifacts import TextArtifact from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage vector_store = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) @@ -46,15 +48,17 @@ vector_store.upsert_text_artifacts({"griptape": artifacts}) engine = RagEngine( retrieval_stage=RetrievalRagStage( retrieval_modules=[ - TextRetrievalRagModule( - namespace="griptape", + VectorStoreRetrievalRagModule( vector_store_driver=vector_store, - top_n=20 + query_params={ + "namespace": "griptape", + "top_n": 20 + } ) ] ), - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule( + response_stage=ResponseRagStage( + response_module=PromptResponseRagModule( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) diff --git a/docs/griptape-framework/structures/task-memory.md b/docs/griptape-framework/structures/task-memory.md index 4597b6402..24f0c6363 100644 --- a/docs/griptape-framework/structures/task-memory.md +++ b/docs/griptape-framework/structures/task-memory.md @@ -208,14 +208,13 @@ from griptape.drivers import ( OpenAiChatPromptDriver, OpenAiEmbeddingDriver, ) from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage from griptape.memory import TaskMemory from griptape.memory.task.storage import TextArtifactStorage from griptape.structures import Agent from griptape.tools import FileManager, TaskMemoryClient, WebScraper - vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) agent = Agent( @@ -228,19 +227,23 @@ agent = Agent( rag_engine=RagEngine( retrieval_stage=RetrievalRagStage( retrieval_modules=[ - TextRetrievalRagModule( - namespace="griptape", + VectorStoreRetrievalRagModule( + vector_store_driver=vector_store_driver, - top_n=20 + query_params={ + "namespace": "griptape", + "count": 20 + } ) ] ), - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule( + response_stage=ResponseRagStage( + response_module=PromptResponseRagModule( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) ), + retrieval_rag_module_name="VectorStoreRetrievalRagModule", vector_store_driver=vector_store_driver ) } diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index c385df6cd..b839b2910 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -386,8 +386,8 @@ from griptape.tasks import RagTask from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.artifacts import TextArtifact from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage # Initialize Embedding Driver and Vector Store Driver vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) @@ -406,15 +406,17 @@ agent.add_task( rag_engine=RagEngine( retrieval_stage=RetrievalRagStage( retrieval_modules=[ - TextRetrievalRagModule( - namespace="griptape", + VectorStoreRetrievalRagModule( vector_store_driver=vector_store_driver, - top_n=20 + query_params={ + "namespace": "griptape", + "top_n": 20 + } ) ] ), - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule( + response_stage=ResponseRagStage( + response_module=PromptResponseRagModule( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) diff --git a/docs/griptape-tools/official-tools/rag-client.md b/docs/griptape-tools/official-tools/rag-client.md index 75bc5dee7..6c8f9f17d 100644 --- a/docs/griptape-tools/official-tools/rag-client.md +++ b/docs/griptape-tools/official-tools/rag-client.md @@ -8,8 +8,8 @@ from griptape.tasks import RagTask from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.artifacts import TextArtifact from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage # Initialize Embedding Driver and Vector Store Driver vector_store_driver = LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver()) @@ -28,15 +28,17 @@ agent.add_task( rag_engine=RagEngine( retrieval_stage=RetrievalRagStage( retrieval_modules=[ - TextRetrievalRagModule( - namespace="griptape", + VectorStoreRetrievalRagModule( vector_store_driver=vector_store_driver, - top_n=20 + query_params={ + "namespace": "griptape", + "top_n": 20 + } ) ] ), - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule( + response_stage=ResponseRagStage( + response_module=PromptResponseRagModule( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o") ) ) diff --git a/griptape/engines/rag/modules/__init__.py b/griptape/engines/rag/modules/__init__.py index a9550d8bb..cb11551e3 100644 --- a/griptape/engines/rag/modules/__init__.py +++ b/griptape/engines/rag/modules/__init__.py @@ -1,29 +1,29 @@ from .base_rag_module import BaseRagModule from .query.base_query_rag_module import BaseQueryRagModule -from .query.related_query_generation_rag_module import RelatedQueryGenerationRagModule from .retrieval.base_retrieval_rag_module import BaseRetrievalRagModule from .retrieval.base_rerank_rag_module import BaseRerankRagModule -from .retrieval.text_rerank_rag_module import TextRerankRagModule -from .retrieval.text_retrieval_rag_module import TextRetrievalRagModule -from .generation.base_before_generation_rag_module import BaseBeforeGenerationRagModule -from .generation.base_after_generation_rag_module import BaseAfterGenerationRagModule -from .generation.base_generation_rag_module import BaseGenerationRagModule -from .generation.prompt_generation_rag_module import PromptGenerationRagModule -from .generation.rulesets_generation_rag_module import RulesetsGenerationRagModule -from .generation.metadata_generation_rag_module import MetadataGenerationRagModule +from .retrieval.text_chunks_rerank_rag_module import TextChunksRerankRagModule +from .retrieval.vector_store_retrieval_rag_module import VectorStoreRetrievalRagModule +from .response.base_before_response_rag_module import BaseBeforeResponseRagModule +from .response.base_after_response_rag_module import BaseAfterResponseRagModule +from .response.base_response_rag_module import BaseResponseRagModule +from .response.prompt_response_rag_module import PromptResponseRagModule +from .response.rulesets_before_response_rag_module import RulesetsBeforeResponseRagModule +from .response.metadata_before_response_rag_module import MetadataBeforeResponseRagModule +from .response.text_chunks_response_rag_module import TextChunksResponseRagModule __all__ = [ "BaseRagModule", "BaseQueryRagModule", - "RelatedQueryGenerationRagModule", "BaseRetrievalRagModule", "BaseRerankRagModule", - "TextRerankRagModule", - "TextRetrievalRagModule", - "BaseBeforeGenerationRagModule", - "BaseAfterGenerationRagModule", - "BaseGenerationRagModule", - "PromptGenerationRagModule", - "RulesetsGenerationRagModule", - "MetadataGenerationRagModule", + "TextChunksRerankRagModule", + "VectorStoreRetrievalRagModule", + "BaseBeforeResponseRagModule", + "BaseAfterResponseRagModule", + "BaseResponseRagModule", + "PromptResponseRagModule", + "RulesetsBeforeResponseRagModule", + "MetadataBeforeResponseRagModule", + "TextChunksResponseRagModule", ] diff --git a/griptape/engines/rag/modules/base_rag_module.py b/griptape/engines/rag/modules/base_rag_module.py index 13563970d..becd94d9e 100644 --- a/griptape/engines/rag/modules/base_rag_module.py +++ b/griptape/engines/rag/modules/base_rag_module.py @@ -1,14 +1,14 @@ from abc import ABC from concurrent import futures -from typing import Callable - +from typing import Callable, Any, Optional from attrs import define, field, Factory - +from griptape.engines.rag import RagContext from griptape.common import PromptStack, Message @define(kw_only=True) class BaseRagModule(ABC): + name: str = field(default=Factory(lambda self: self.__class__.__name__, takes_self=True), kw_only=True) futures_executor_fn: Callable[[], futures.Executor] = field( default=Factory(lambda: lambda: futures.ThreadPoolExecutor()) ) @@ -17,3 +17,12 @@ def generate_query_prompt_stack(self, system_prompt: str, query: str) -> PromptS return PromptStack( messages=[Message(system_prompt, role=Message.SYSTEM_ROLE), Message(query, role=Message.USER_ROLE)] ) + + def get_context_param(self, context: RagContext, key: str) -> Optional[Any]: + return context.module_params.get(self.name, {}).get(key) + + def set_context_param(self, context: RagContext, key: str, value: Any) -> None: + if not isinstance(context.module_params.get(self.name), dict): + context.module_params[self.name] = {} + + context.module_params[self.name][key] = value diff --git a/griptape/engines/rag/modules/generation/metadata_generation_rag_module.py b/griptape/engines/rag/modules/generation/metadata_generation_rag_module.py deleted file mode 100644 index 1ce689960..000000000 --- a/griptape/engines/rag/modules/generation/metadata_generation_rag_module.py +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Optional -from attrs import define, field -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import BaseBeforeGenerationRagModule -from griptape.utils import J2 - - -@define(kw_only=True) -class MetadataGenerationRagModule(BaseBeforeGenerationRagModule): - metadata: Optional[str] = field(default=None) - - def run(self, context: RagContext) -> RagContext: - metadata = context.metadata if self.metadata is None else self.metadata - - if metadata is not None: - context.before_query.append( - J2("engines/rag/modules/metadata_generation/system.j2").render(metadata=metadata) - ) - - return context diff --git a/griptape/engines/rag/modules/query/base_query_rag_module.py b/griptape/engines/rag/modules/query/base_query_rag_module.py index c9eace864..195bba6bd 100644 --- a/griptape/engines/rag/modules/query/base_query_rag_module.py +++ b/griptape/engines/rag/modules/query/base_query_rag_module.py @@ -7,4 +7,4 @@ @define(kw_only=True) class BaseQueryRagModule(BaseRagModule, ABC): @abstractmethod - def run(self, context: RagContext) -> list[str]: ... + def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/modules/query/related_query_generation_rag_module.py b/griptape/engines/rag/modules/query/related_query_generation_rag_module.py deleted file mode 100644 index 138e5f034..000000000 --- a/griptape/engines/rag/modules/query/related_query_generation_rag_module.py +++ /dev/null @@ -1,34 +0,0 @@ -from typing import Callable -from attrs import define, field, Factory -from griptape import utils -from griptape.drivers import BasePromptDriver -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import BaseQueryRagModule -from griptape.utils import J2 - - -@define(kw_only=True) -class RelatedQueryGenerationRagModule(BaseQueryRagModule): - query_count: int = field(default=5) - prompt_driver: BasePromptDriver = field() - generate_system_template: Callable[[str], str] = field( - default=Factory(lambda self: self.default_system_template_generator, takes_self=True), kw_only=True - ) - - def run(self, context: RagContext) -> list[str]: - system_prompt = self.generate_system_template(context.initial_query) - - with self.futures_executor_fn() as executor: - results = utils.execute_futures_list( - [ - executor.submit( - self.prompt_driver.run, self.generate_query_prompt_stack(system_prompt, "Alternative query: ") - ) - for _ in range(self.query_count) - ] - ) - - return [r.value for r in results] - - def default_system_template_generator(self, initial_query: str) -> str: - return J2("engines/rag/modules/query_generation/system.j2").render(initial_query=initial_query) diff --git a/griptape/engines/rag/modules/generation/__init__.py b/griptape/engines/rag/modules/response/__init__.py similarity index 100% rename from griptape/engines/rag/modules/generation/__init__.py rename to griptape/engines/rag/modules/response/__init__.py diff --git a/griptape/engines/rag/modules/generation/base_after_generation_rag_module.py b/griptape/engines/rag/modules/response/base_after_response_rag_module.py similarity index 82% rename from griptape/engines/rag/modules/generation/base_after_generation_rag_module.py rename to griptape/engines/rag/modules/response/base_after_response_rag_module.py index f3a26e9db..03d906204 100644 --- a/griptape/engines/rag/modules/generation/base_after_generation_rag_module.py +++ b/griptape/engines/rag/modules/response/base_after_response_rag_module.py @@ -5,6 +5,6 @@ @define(kw_only=True) -class BaseAfterGenerationRagModule(BaseRagModule, ABC): +class BaseAfterResponseRagModule(BaseRagModule, ABC): @abstractmethod def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/modules/generation/base_before_generation_rag_module.py b/griptape/engines/rag/modules/response/base_before_response_rag_module.py similarity index 82% rename from griptape/engines/rag/modules/generation/base_before_generation_rag_module.py rename to griptape/engines/rag/modules/response/base_before_response_rag_module.py index 6a57bd6af..2a16b68d0 100644 --- a/griptape/engines/rag/modules/generation/base_before_generation_rag_module.py +++ b/griptape/engines/rag/modules/response/base_before_response_rag_module.py @@ -5,6 +5,6 @@ @define(kw_only=True) -class BaseBeforeGenerationRagModule(BaseRagModule, ABC): +class BaseBeforeResponseRagModule(BaseRagModule, ABC): @abstractmethod def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/modules/generation/base_generation_rag_module.py b/griptape/engines/rag/modules/response/base_response_rag_module.py similarity index 83% rename from griptape/engines/rag/modules/generation/base_generation_rag_module.py rename to griptape/engines/rag/modules/response/base_response_rag_module.py index 08f1b5323..72a7dce1b 100644 --- a/griptape/engines/rag/modules/generation/base_generation_rag_module.py +++ b/griptape/engines/rag/modules/response/base_response_rag_module.py @@ -5,6 +5,6 @@ @define(kw_only=True) -class BaseGenerationRagModule(BaseRagModule, ABC): +class BaseResponseRagModule(BaseRagModule, ABC): @abstractmethod def run(self, context: RagContext) -> RagContext: ... diff --git a/griptape/engines/rag/modules/response/metadata_before_response_rag_module.py b/griptape/engines/rag/modules/response/metadata_before_response_rag_module.py new file mode 100644 index 000000000..7bd1cf0a9 --- /dev/null +++ b/griptape/engines/rag/modules/response/metadata_before_response_rag_module.py @@ -0,0 +1,19 @@ +from typing import Optional +from attrs import define, field +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseBeforeResponseRagModule +from griptape.utils import J2 + + +@define(kw_only=True) +class MetadataBeforeResponseRagModule(BaseBeforeResponseRagModule): + metadata: Optional[str] = field(default=None) + + def run(self, context: RagContext) -> RagContext: + context_metadata = self.get_context_param(context, "metadata") + metadata = self.metadata if context_metadata is None else context_metadata + + if metadata is not None: + context.before_query.append(J2("engines/rag/modules/response/metadata/system.j2").render(metadata=metadata)) + + return context diff --git a/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py b/griptape/engines/rag/modules/response/prompt_response_rag_module.py similarity index 87% rename from griptape/engines/rag/modules/generation/prompt_generation_rag_module.py rename to griptape/engines/rag/modules/response/prompt_response_rag_module.py index 26d95bdd1..7b29de7ee 100644 --- a/griptape/engines/rag/modules/generation/prompt_generation_rag_module.py +++ b/griptape/engines/rag/modules/response/prompt_response_rag_module.py @@ -3,12 +3,12 @@ from griptape.artifacts.text_artifact import TextArtifact from griptape.drivers import BasePromptDriver from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import BaseGenerationRagModule +from griptape.engines.rag.modules import BaseResponseRagModule from griptape.utils import J2 @define(kw_only=True) -class PromptGenerationRagModule(BaseGenerationRagModule): +class PromptResponseRagModule(BaseResponseRagModule): answer_token_offset: int = field(default=400) prompt_driver: BasePromptDriver = field() generate_system_template: Callable[[list[str], list[str], list[str]], str] = field( @@ -16,7 +16,7 @@ class PromptGenerationRagModule(BaseGenerationRagModule): ) def run(self, context: RagContext) -> RagContext: - query = context.initial_query + query = context.query before_query = context.before_query after_query = context.after_query text_artifact_chunks = context.text_chunks @@ -24,7 +24,7 @@ def run(self, context: RagContext) -> RagContext: if query: tokenizer = self.prompt_driver.tokenizer text_chunks = [] - system_prompt = "" + system_prompt = self.generate_system_template(text_chunks, before_query, after_query) for artifact in text_artifact_chunks: text_chunks.append(artifact.value) @@ -53,7 +53,7 @@ def run(self, context: RagContext) -> RagContext: def default_system_template_generator( self, text_chunks: list[str], before_system_prompt: list, after_system_prompt: list ) -> str: - return J2("engines/rag/modules/prompt_generation/system.j2").render( + return J2("engines/rag/modules/response/prompt/system.j2").render( text_chunks=text_chunks, before_system_prompt="\n\n".join(before_system_prompt), after_system_prompt="\n\n".join(after_system_prompt), diff --git a/griptape/engines/rag/modules/generation/rulesets_generation_rag_module.py b/griptape/engines/rag/modules/response/rulesets_before_response_rag_module.py similarity index 73% rename from griptape/engines/rag/modules/generation/rulesets_generation_rag_module.py rename to griptape/engines/rag/modules/response/rulesets_before_response_rag_module.py index ff29c379a..27a421c1b 100644 --- a/griptape/engines/rag/modules/generation/rulesets_generation_rag_module.py +++ b/griptape/engines/rag/modules/response/rulesets_before_response_rag_module.py @@ -1,12 +1,12 @@ from attrs import define, field from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import BaseBeforeGenerationRagModule +from griptape.engines.rag.modules import BaseBeforeResponseRagModule from griptape.rules import Ruleset from griptape.utils import J2 @define -class RulesetsGenerationRagModule(BaseBeforeGenerationRagModule): +class RulesetsBeforeResponseRagModule(BaseBeforeResponseRagModule): rulesets: list[Ruleset] = field(kw_only=True) def run(self, context: RagContext) -> RagContext: diff --git a/griptape/engines/rag/modules/response/text_chunks_response_rag_module.py b/griptape/engines/rag/modules/response/text_chunks_response_rag_module.py new file mode 100644 index 000000000..699aa1124 --- /dev/null +++ b/griptape/engines/rag/modules/response/text_chunks_response_rag_module.py @@ -0,0 +1,12 @@ +from attrs import define +from griptape.artifacts import ListArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseResponseRagModule + + +@define(kw_only=True) +class TextChunksResponseRagModule(BaseResponseRagModule): + def run(self, context: RagContext) -> RagContext: + context.output = ListArtifact(context.text_chunks) + + return context diff --git a/griptape/engines/rag/modules/retrieval/text_rerank_rag_module.py b/griptape/engines/rag/modules/retrieval/text_chunks_rerank_rag_module.py similarity index 69% rename from griptape/engines/rag/modules/retrieval/text_rerank_rag_module.py rename to griptape/engines/rag/modules/retrieval/text_chunks_rerank_rag_module.py index a766d0cb6..b78c3a880 100644 --- a/griptape/engines/rag/modules/retrieval/text_rerank_rag_module.py +++ b/griptape/engines/rag/modules/retrieval/text_chunks_rerank_rag_module.py @@ -7,6 +7,6 @@ @define(kw_only=True) -class TextRerankRagModule(BaseRerankRagModule): +class TextChunksRerankRagModule(BaseRerankRagModule): def run(self, context: RagContext) -> Sequence[BaseArtifact]: - return self.rerank_driver.run(context.initial_query, context.text_chunks) + return self.rerank_driver.run(context.query, context.text_chunks) diff --git a/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py deleted file mode 100644 index 9c756bfea..000000000 --- a/griptape/engines/rag/modules/retrieval/text_retrieval_rag_module.py +++ /dev/null @@ -1,36 +0,0 @@ -from __future__ import annotations -import itertools -from typing import TYPE_CHECKING, Optional, Sequence -from attrs import define, field -from griptape import utils -from griptape.artifacts import TextArtifact -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import BaseRetrievalRagModule - -if TYPE_CHECKING: - from griptape.drivers import BaseVectorStoreDriver - - -@define(kw_only=True) -class TextRetrievalRagModule(BaseRetrievalRagModule): - vector_store_driver: BaseVectorStoreDriver = field() - namespace: Optional[str] = field(default=None) - top_n: Optional[int] = field(default=None) - - def run(self, context: RagContext) -> Sequence[TextArtifact]: - all_queries = [context.initial_query] + context.alternative_queries - namespace = self.namespace or context.namespace - - with self.futures_executor_fn() as executor: - results = utils.execute_futures_list( - [ - executor.submit(self.vector_store_driver.query, query, self.top_n, namespace, False) - for query in all_queries - ] - ) - - return [ - artifact - for artifact in [r.to_artifact() for r in list(itertools.chain.from_iterable(results))] - if isinstance(artifact, TextArtifact) - ] diff --git a/griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py new file mode 100644 index 000000000..e91650faf --- /dev/null +++ b/griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py @@ -0,0 +1,24 @@ +from __future__ import annotations +from typing import TYPE_CHECKING, Sequence, Any, Callable +from attrs import define, field, Factory +from griptape.artifacts import TextArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRetrievalRagModule + +if TYPE_CHECKING: + from griptape.drivers import BaseVectorStoreDriver + + +@define(kw_only=True) +class VectorStoreRetrievalRagModule(BaseRetrievalRagModule): + vector_store_driver: BaseVectorStoreDriver = field() + query_params: dict[str, Any] = field(factory=dict) + process_query_output_fn: Callable[[list[BaseVectorStoreDriver.Entry]], Sequence[TextArtifact]] = field( + default=Factory(lambda: lambda es: [e.to_artifact() for e in es]) + ) + + def run(self, context: RagContext) -> Sequence[TextArtifact]: + context_query_params = self.get_context_param(context, "query_params") + query_params = self.query_params if context_query_params is None else context_query_params + + return self.process_query_output_fn(self.vector_store_driver.query(context.query, **query_params)) diff --git a/griptape/engines/rag/rag_context.py b/griptape/engines/rag/rag_context.py index 5f8ce9d6a..ce0d1adc6 100644 --- a/griptape/engines/rag/rag_context.py +++ b/griptape/engines/rag/rag_context.py @@ -1,6 +1,6 @@ from typing import Optional from attrs import define, field -from griptape.artifacts import TextArtifact +from griptape.artifacts import TextArtifact, BaseArtifact @define(kw_only=True) @@ -9,21 +9,17 @@ class RagContext: method. Attributes: - initial_query: Query provided by the user. - namespace: Optional namespace override for modules with an explicit namespace parameter. - metadata: Optional metadata override for modules with an explicit metadata parameter. - alternative_queries: Optional queries to expand retrieval results. + query: Query provided by the user. + module_params: Dictionary of dictionary parameters to be used by modules. First key should be the module name and the second a parameter name. before_query: An optional list of strings to add before the query in generation modules. after_query: An optional list of strings to add after the query in generation modules. text_chunks: A list of text chunks to pass around from the retrieval stage to the generation stage. output: Final output from the generation stage. """ - initial_query: str = field() - namespace: Optional[str] = field(default=None) - metadata: Optional[str] = field(default=None) - alternative_queries: list[str] = field(factory=list) + query: str = field() + module_params: dict[str, dict] = field(factory=dict) before_query: list[str] = field(factory=list) after_query: list[str] = field(factory=list) text_chunks: list[TextArtifact] = field(factory=list) - output: Optional[TextArtifact] = field(default=None) + output: Optional[BaseArtifact] = field(default=None) diff --git a/griptape/engines/rag/rag_engine.py b/griptape/engines/rag/rag_engine.py index 1c2176128..da8a2eebe 100644 --- a/griptape/engines/rag/rag_engine.py +++ b/griptape/engines/rag/rag_engine.py @@ -1,17 +1,34 @@ from typing import Optional from attrs import define, field from griptape.engines.rag import RagContext -from griptape.engines.rag.stages import QueryRagStage, GenerationRagStage, RetrievalRagStage +from griptape.engines.rag.stages import QueryRagStage, ResponseRagStage, RetrievalRagStage @define(kw_only=True) class RagEngine: query_stage: Optional[QueryRagStage] = field(default=None) retrieval_stage: Optional[RetrievalRagStage] = field(default=None) - generation_stage: Optional[GenerationRagStage] = field(default=None) + response_stage: Optional[ResponseRagStage] = field(default=None) + + def __attrs_post_init__(self) -> None: + modules = [] + + if self.query_stage is not None: + modules.extend(self.query_stage.modules) + + if self.retrieval_stage is not None: + modules.extend(self.retrieval_stage.modules) + + if self.response_stage is not None: + modules.extend(self.response_stage.modules) + + module_names = [m.name for m in modules] + + if len(module_names) > len(set(module_names)): + raise ValueError("module names have to be unique") def process_query(self, query: str) -> RagContext: - return self.process(RagContext(initial_query=query)) + return self.process(RagContext(query=query)) def process(self, context: RagContext) -> RagContext: if self.query_stage: @@ -20,7 +37,7 @@ def process(self, context: RagContext) -> RagContext: if self.retrieval_stage: context = self.retrieval_stage.run(context) - if self.generation_stage: - context = self.generation_stage.run(context) + if self.response_stage: + context = self.response_stage.run(context) return context diff --git a/griptape/engines/rag/stages/__init__.py b/griptape/engines/rag/stages/__init__.py index 85a603d03..14756563c 100644 --- a/griptape/engines/rag/stages/__init__.py +++ b/griptape/engines/rag/stages/__init__.py @@ -1,6 +1,6 @@ from .base_rag_stage import BaseRagStage from .retrieval_rag_stage import RetrievalRagStage from .query_rag_stage import QueryRagStage -from .generation_rag_stage import GenerationRagStage +from .response_rag_stage import ResponseRagStage -__all__ = ["BaseRagStage", "RetrievalRagStage", "QueryRagStage", "GenerationRagStage"] +__all__ = ["BaseRagStage", "RetrievalRagStage", "QueryRagStage", "ResponseRagStage"] diff --git a/griptape/engines/rag/stages/base_rag_stage.py b/griptape/engines/rag/stages/base_rag_stage.py index ca19e1bb4..4db996e30 100644 --- a/griptape/engines/rag/stages/base_rag_stage.py +++ b/griptape/engines/rag/stages/base_rag_stage.py @@ -3,6 +3,7 @@ from typing import Callable from attrs import define, field, Factory from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRagModule @define(kw_only=True) @@ -13,3 +14,7 @@ class BaseRagStage(ABC): @abstractmethod def run(self, context: RagContext) -> RagContext: ... + + @property + @abstractmethod + def modules(self) -> list[BaseRagModule]: ... diff --git a/griptape/engines/rag/stages/generation_rag_stage.py b/griptape/engines/rag/stages/generation_rag_stage.py deleted file mode 100644 index 60102889a..000000000 --- a/griptape/engines/rag/stages/generation_rag_stage.py +++ /dev/null @@ -1,33 +0,0 @@ -import logging -from attrs import define, field -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import ( - BaseGenerationRagModule, - BaseBeforeGenerationRagModule, - BaseAfterGenerationRagModule, -) -from griptape.engines.rag.stages import BaseRagStage - - -@define(kw_only=True) -class GenerationRagStage(BaseRagStage): - before_generator_modules: list[BaseBeforeGenerationRagModule] = field(factory=list) - generation_module: BaseGenerationRagModule = field() - after_generator_modules: list[BaseAfterGenerationRagModule] = field(factory=list) - - def run(self, context: RagContext) -> RagContext: - logging.info(f"GenerationStage: running {len(self.before_generator_modules)} before modules sequentially") - - for generator in self.before_generator_modules: - context = generator.run(context) - - logging.info("GenerationStage: running generation module") - - context = self.generation_module.run(context) - - logging.info(f"GenerationStage: running {len(self.after_generator_modules)} after modules sequentially") - - for generator in self.after_generator_modules: - context = generator.run(context) - - return context diff --git a/griptape/engines/rag/stages/query_rag_stage.py b/griptape/engines/rag/stages/query_rag_stage.py index c2216aea8..84c200bc8 100644 --- a/griptape/engines/rag/stages/query_rag_stage.py +++ b/griptape/engines/rag/stages/query_rag_stage.py @@ -1,24 +1,23 @@ -import itertools import logging from attrs import define, field from griptape import utils from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import BaseQueryRagModule +from griptape.engines.rag.modules import BaseQueryRagModule, BaseRagModule from griptape.engines.rag.stages import BaseRagStage @define(kw_only=True) class QueryRagStage(BaseRagStage): - query_generation_modules: list[BaseQueryRagModule] = field() + query_modules: list[BaseQueryRagModule] = field() + + @property + def modules(self) -> list[BaseRagModule]: + return self.query_modules # pyright: ignore def run(self, context: RagContext) -> RagContext: - logging.info(f"QueryStage: running {len(self.query_generation_modules)} query generation modules in parallel") + logging.info(f"QueryStage: running {len(self.query_modules)} query generation modules in parallel") with self.futures_executor_fn() as executor: - results = utils.execute_futures_list( - [executor.submit(r.run, context) for r in self.query_generation_modules] - ) - - context.alternative_queries = list(itertools.chain.from_iterable(results)) + utils.execute_futures_list([executor.submit(r.run, context) for r in self.query_modules]) return context diff --git a/griptape/engines/rag/stages/response_rag_stage.py b/griptape/engines/rag/stages/response_rag_stage.py new file mode 100644 index 000000000..aa0a15dfc --- /dev/null +++ b/griptape/engines/rag/stages/response_rag_stage.py @@ -0,0 +1,46 @@ +import logging +from attrs import define, field +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import ( + BaseResponseRagModule, + BaseBeforeResponseRagModule, + BaseAfterResponseRagModule, + BaseRagModule, +) +from griptape.engines.rag.stages import BaseRagStage + + +@define(kw_only=True) +class ResponseRagStage(BaseRagStage): + before_response_modules: list[BaseBeforeResponseRagModule] = field(factory=list) + response_module: BaseResponseRagModule = field() + after_response_modules: list[BaseAfterResponseRagModule] = field(factory=list) + + @property + def modules(self) -> list[BaseRagModule]: + ms = [] + + ms.extend(self.before_response_modules) + ms.extend(self.after_response_modules) + + if self.response_module is not None: + ms.append(self.response_module) + + return ms + + def run(self, context: RagContext) -> RagContext: + logging.info(f"GenerationStage: running {len(self.before_response_modules)} before modules sequentially") + + for generator in self.before_response_modules: + context = generator.run(context) + + logging.info("GenerationStage: running generation module") + + context = self.response_module.run(context) + + logging.info(f"GenerationStage: running {len(self.after_response_modules)} after modules sequentially") + + for generator in self.after_response_modules: + context = generator.run(context) + + return context diff --git a/griptape/engines/rag/stages/retrieval_rag_stage.py b/griptape/engines/rag/stages/retrieval_rag_stage.py index cbc90a43e..8fe376cd1 100644 --- a/griptape/engines/rag/stages/retrieval_rag_stage.py +++ b/griptape/engines/rag/stages/retrieval_rag_stage.py @@ -5,7 +5,7 @@ from griptape import utils from griptape.artifacts import TextArtifact from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import BaseRerankRagModule +from griptape.engines.rag.modules import BaseRerankRagModule, BaseRagModule from griptape.engines.rag.modules import BaseRetrievalRagModule from griptape.engines.rag.stages import BaseRagStage @@ -16,6 +16,17 @@ class RetrievalRagStage(BaseRagStage): rerank_module: Optional[BaseRerankRagModule] = field(default=None) max_chunks: Optional[int] = field(default=None) + @property + def modules(self) -> list[BaseRagModule]: + ms = [] + + ms.extend(self.retrieval_modules) + + if self.rerank_module is not None: + ms.append(self.rerank_module) + + return ms + def run(self, context: RagContext) -> RagContext: logging.info(f"RetrievalStage: running {len(self.retrieval_modules)} retrieval modules in parallel") diff --git a/griptape/memory/task/storage/base_artifact_storage.py b/griptape/memory/task/storage/base_artifact_storage.py index fbd226363..e8378fee4 100644 --- a/griptape/memory/task/storage/base_artifact_storage.py +++ b/griptape/memory/task/storage/base_artifact_storage.py @@ -20,4 +20,4 @@ def can_store(self, artifact: BaseArtifact) -> bool: ... def summarize(self, namespace: str) -> TextArtifact | InfoArtifact: ... @abstractmethod - def query(self, namespace: str, query: str, metadata: Any = None) -> TextArtifact | InfoArtifact: ... + def query(self, namespace: str, query: str, metadata: Any = None) -> BaseArtifact: ... diff --git a/griptape/memory/task/storage/blob_artifact_storage.py b/griptape/memory/task/storage/blob_artifact_storage.py index 79b5798df..9d09e17fa 100644 --- a/griptape/memory/task/storage/blob_artifact_storage.py +++ b/griptape/memory/task/storage/blob_artifact_storage.py @@ -26,5 +26,5 @@ def load_artifacts(self, namespace: str) -> ListArtifact: def summarize(self, namespace: str) -> InfoArtifact: return InfoArtifact("can't summarize artifacts") - def query(self, namespace: str, query: str, metadata: Any = None) -> InfoArtifact: + def query(self, namespace: str, query: str, metadata: Any = None) -> BaseArtifact: return InfoArtifact("can't query artifacts") diff --git a/griptape/memory/task/storage/text_artifact_storage.py b/griptape/memory/task/storage/text_artifact_storage.py index 34d65a0c5..976a9ea5b 100644 --- a/griptape/memory/task/storage/text_artifact_storage.py +++ b/griptape/memory/task/storage/text_artifact_storage.py @@ -14,10 +14,16 @@ class TextArtifactStorage(BaseArtifactStorage): vector_store_driver: BaseVectorStoreDriver = field() rag_engine: Optional[RagEngine] = field(default=None) + retrieval_rag_module_name: Optional[str] = field(default=None) summary_engine: Optional[BaseSummaryEngine] = field(default=None) csv_extraction_engine: Optional[CsvExtractionEngine] = field(default=None) json_extraction_engine: Optional[JsonExtractionEngine] = field(default=None) + @rag_engine.validator # pyright: ignore + def validate_rag_engine(self, _, rag_engine: str) -> None: + if rag_engine is not None and self.retrieval_rag_module_name is None: + raise ValueError("You have to set retrieval_rag_module_name if rag_engine is provided") + def can_store(self, artifact: BaseArtifact) -> bool: return isinstance(artifact, TextArtifact) @@ -36,12 +42,25 @@ def summarize(self, namespace: str) -> TextArtifact: return self.summary_engine.summarize_artifacts(self.load_artifacts(namespace)) - def query(self, namespace: str, query: str, metadata: Any = None) -> TextArtifact | InfoArtifact: + def query(self, namespace: str, query: str, metadata: Any = None) -> BaseArtifact: if self.rag_engine is None: - raise ValueError("RAG engine is not set.") + raise ValueError("rag_engine is not set") + + if self.retrieval_rag_module_name is None: + raise ValueError("retrieval_rag_module_name is not set") result = self.rag_engine.process( - RagContext(initial_query=query, namespace=namespace, metadata=None if metadata is None else str(metadata)) + RagContext( + query=query, + module_params={ + self.retrieval_rag_module_name: { + "query_params": { + "namespace": namespace, + "metadata": None if metadata is None else str(metadata), + } + } + }, + ) ).output if result is None: diff --git a/griptape/memory/task/task_memory.py b/griptape/memory/task/task_memory.py index 2f1fdbe16..df9c9be30 100644 --- a/griptape/memory/task/task_memory.py +++ b/griptape/memory/task/task_memory.py @@ -124,7 +124,7 @@ def summarize_namespace(self, namespace: str) -> TextArtifact | InfoArtifact: else: return InfoArtifact("Can't find memory content") - def query_namespace(self, namespace: str, query: str) -> TextArtifact | InfoArtifact: + def query_namespace(self, namespace: str, query: str) -> BaseArtifact: storage = self.namespace_storage.get(namespace) if storage: diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index c5854ccac..18e7d1284 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -13,12 +13,12 @@ from griptape.engines import CsvExtractionEngine, JsonExtractionEngine, PromptSummaryEngine from griptape.engines.rag import RagEngine from griptape.engines.rag.modules import ( - TextRetrievalRagModule, - RulesetsGenerationRagModule, - PromptGenerationRagModule, - MetadataGenerationRagModule, + VectorStoreRetrievalRagModule, + RulesetsBeforeResponseRagModule, + PromptResponseRagModule, + MetadataBeforeResponseRagModule, ) -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage from griptape.events import BaseEvent, EventListener from griptape.events.finish_structure_run_event import FinishStructureRunEvent from griptape.events.start_structure_run_event import StartStructureRunEvent @@ -174,14 +174,14 @@ def default_config(self) -> BaseStructureConfig: def default_rag_engine(self) -> RagEngine: return RagEngine( retrieval_stage=RetrievalRagStage( - retrieval_modules=[TextRetrievalRagModule(vector_store_driver=self.config.vector_store_driver)] + retrieval_modules=[VectorStoreRetrievalRagModule(vector_store_driver=self.config.vector_store_driver)] ), - generation_stage=GenerationRagStage( - before_generator_modules=[ - RulesetsGenerationRagModule(rulesets=self.rulesets), - MetadataGenerationRagModule(), + response_stage=ResponseRagStage( + before_response_modules=[ + RulesetsBeforeResponseRagModule(rulesets=self.rulesets), + MetadataBeforeResponseRagModule(), ], - generation_module=PromptGenerationRagModule(prompt_driver=self.config.prompt_driver), + response_module=PromptResponseRagModule(prompt_driver=self.config.prompt_driver), ), ) @@ -191,6 +191,7 @@ def default_task_memory(self) -> TaskMemory: artifact_storages={ TextArtifact: TextArtifactStorage( rag_engine=self.rag_engine, + retrieval_rag_module_name="VectorStoreRetrievalRagModule", vector_store_driver=self.config.vector_store_driver, summary_engine=PromptSummaryEngine(prompt_driver=self.config.prompt_driver), csv_extraction_engine=CsvExtractionEngine(prompt_driver=self.config.prompt_driver), diff --git a/griptape/tasks/rag_task.py b/griptape/tasks/rag_task.py index d50e881c1..e85c8f28a 100644 --- a/griptape/tasks/rag_task.py +++ b/griptape/tasks/rag_task.py @@ -1,6 +1,6 @@ from __future__ import annotations from attrs import define, field -from griptape.artifacts import TextArtifact, ErrorArtifact +from griptape.artifacts import ErrorArtifact, BaseArtifact from griptape.engines.rag import RagEngine from griptape.tasks import BaseTextInputTask @@ -22,7 +22,7 @@ def rag_engine(self) -> RagEngine: def rag_engine(self, value: RagEngine) -> None: self._rag_engine = value - def run(self) -> TextArtifact | ErrorArtifact: + def run(self) -> BaseArtifact: result = self.rag_engine.process_query(self.input.to_text()).output if result is None: diff --git a/griptape/templates/engines/rag/modules/prompt_generation/system.j2 b/griptape/templates/engines/rag/modules/prompt_generation/system.j2 deleted file mode 100644 index 85c1b9fa8..000000000 --- a/griptape/templates/engines/rag/modules/prompt_generation/system.j2 +++ /dev/null @@ -1,15 +0,0 @@ -{% if before_system_prompt %} -{{ before_system_prompt }} - -{% endif %} -You can answer questions by searching through text chunks. Always be truthful. Don't make up facts. Use the below list of text chunks to respond. If the answer cannot be found in the chunks, say "I could not find an answer." - -{% for chunk in text_chunks %} -Text chunk: """ -{{ chunk }} -""" -{% endfor %} -{% if after_system_prompt %} - -{{ after_system_prompt }} -{% endif %} \ No newline at end of file diff --git a/griptape/templates/engines/rag/modules/query_generation/system.j2 b/griptape/templates/engines/rag/modules/query_generation/system.j2 deleted file mode 100644 index dd2a8e4bd..000000000 --- a/griptape/templates/engines/rag/modules/query_generation/system.j2 +++ /dev/null @@ -1,3 +0,0 @@ -Given the following query, generate an alternative query that has the same meaning but uses different words and introduces other related terms. Don't say anything else. Only output an alternative query and nothing else. - -Query: {{ initial_query }} \ No newline at end of file diff --git a/griptape/templates/engines/rag/modules/metadata_generation/system.j2 b/griptape/templates/engines/rag/modules/response/metadata/system.j2 similarity index 100% rename from griptape/templates/engines/rag/modules/metadata_generation/system.j2 rename to griptape/templates/engines/rag/modules/response/metadata/system.j2 diff --git a/griptape/templates/engines/rag/modules/response/prompt/system.j2 b/griptape/templates/engines/rag/modules/response/prompt/system.j2 new file mode 100644 index 000000000..4b06f3e8c --- /dev/null +++ b/griptape/templates/engines/rag/modules/response/prompt/system.j2 @@ -0,0 +1,19 @@ +{% if before_system_prompt %} +{{ before_system_prompt }} + +{% endif %} +Always be truthful. Don't make up facts. You can answer questions by searching through text chunks. Use the following list of text chunks to respond. If there are no text chunks available or text chunks don't have relevant information respond with "I could not find an answer." + +{% if text_chunks and text_chunks|length > 0 %} +{% for chunk in text_chunks %} +Text chunk: """ +{{ chunk }} +""" +{% endfor %} +{% if after_system_prompt %} + +{{ after_system_prompt }} +{% endif %} +{% else %} +No text chunks available. +{% endif %} \ No newline at end of file diff --git a/griptape/tools/base_tool.py b/griptape/tools/base_tool.py index 8a0a924ac..03aaf22b5 100644 --- a/griptape/tools/base_tool.py +++ b/griptape/tools/base_tool.py @@ -35,7 +35,7 @@ class BaseTool(ActivityMixin, ABC): MANIFEST_FILE = "manifest.yml" REQUIREMENTS_FILE = "requirements.txt" - name: str = field(default=Factory(lambda self: self.class_name, takes_self=True), kw_only=True) + name: str = field(default=Factory(lambda self: self.__class__.__name__, takes_self=True), kw_only=True) input_memory: Optional[list[TaskMemory]] = field(default=None, kw_only=True) output_memory: Optional[dict[str, list[TaskMemory]]] = field(default=None, kw_only=True) install_dependencies_on_init: bool = field(default=True, kw_only=True) @@ -61,10 +61,6 @@ def validate_output_memory(self, _, output_memory: dict[str, Optional[list[TaskM if len(output_memory_names) > len(set(output_memory_names)): raise ValueError(f"memory names have to be unique in activity '{activity_name}' output") - @property - def class_name(self): - return self.__class__.__name__ - @property def manifest_path(self) -> str: return os.path.join(self.abs_dir_path, self.MANIFEST_FILE) diff --git a/griptape/tools/rag_client/tool.py b/griptape/tools/rag_client/tool.py index 78d716008..94422cc15 100644 --- a/griptape/tools/rag_client/tool.py +++ b/griptape/tools/rag_client/tool.py @@ -1,7 +1,7 @@ from __future__ import annotations from attrs import define, field from schema import Schema, Literal -from griptape.artifacts import ErrorArtifact, TextArtifact +from griptape.artifacts import ErrorArtifact, BaseArtifact from griptape.engines.rag import RagEngine from griptape.tools import BaseTool from griptape.utils.decorators import activity @@ -24,7 +24,7 @@ class RagClient(BaseTool): "schema": Schema({Literal("query", description="A natural language search query"): str}), } ) - def search(self, params: dict) -> TextArtifact | ErrorArtifact: + def search(self, params: dict) -> BaseArtifact: query = params["values"]["query"] try: diff --git a/griptape/tools/task_memory_client/tool.py b/griptape/tools/task_memory_client/tool.py index b60c0acc0..ce89da22e 100644 --- a/griptape/tools/task_memory_client/tool.py +++ b/griptape/tools/task_memory_client/tool.py @@ -1,7 +1,7 @@ from __future__ import annotations from attrs import define from schema import Schema, Literal -from griptape.artifacts import TextArtifact, ErrorArtifact, InfoArtifact +from griptape.artifacts import TextArtifact, ErrorArtifact, InfoArtifact, BaseArtifact from griptape.tools import BaseTool from griptape.utils.decorators import activity @@ -39,7 +39,7 @@ def summarize(self, params: dict) -> TextArtifact | InfoArtifact | ErrorArtifact ), } ) - def query(self, params: dict) -> TextArtifact | InfoArtifact | ErrorArtifact: + def query(self, params: dict) -> BaseArtifact: memory = self.find_input_memory(params["values"]["memory_name"]) artifact_namespace = params["values"]["artifact_namespace"] query = params["values"]["query"] diff --git a/tests/mocks/mock_rag_module.py b/tests/mocks/mock_rag_module.py new file mode 100644 index 000000000..98b69cee8 --- /dev/null +++ b/tests/mocks/mock_rag_module.py @@ -0,0 +1,4 @@ +from griptape.engines.rag.modules import BaseRagModule + + +class MockRagModule(BaseRagModule): ... diff --git a/tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py b/tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py new file mode 100644 index 000000000..43927bd8a --- /dev/null +++ b/tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py @@ -0,0 +1,19 @@ +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import MetadataBeforeResponseRagModule + + +class TestMetadataBeforeResponseRagModule: + def test_run(self): + module = MetadataBeforeResponseRagModule(name="foo") + + assert "foo" in module.run(RagContext(module_params={"foo": {"metadata": "foo"}}, query="test")).before_query[0] + + def test_run_with_override(self): + module = MetadataBeforeResponseRagModule(name="foo", metadata="bar") + + assert ( + "bar" + in module.run( + RagContext(module_params={"foo": {"query_params": {"metadata": "foo"}}}, query="test") + ).before_query[0] + ) diff --git a/tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py b/tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py deleted file mode 100644 index 0bd9f1f85..000000000 --- a/tests/unit/engines/rag/modules/generation/test_metadata_generation_rag_module.py +++ /dev/null @@ -1,14 +0,0 @@ -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import MetadataGenerationRagModule - - -class TestMetadataGenerationModule: - def test_run(self): - module = MetadataGenerationRagModule() - - assert "foo" in module.run(RagContext(metadata="foo", initial_query="test")).before_query[0] - - def test_run_with_override(self): - module = MetadataGenerationRagModule(metadata="bar") - - assert "bar" in module.run(RagContext(metadata="foo", initial_query="test")).before_query[0] diff --git a/tests/unit/engines/rag/modules/generation/test_prompt_generation_rag_module.py b/tests/unit/engines/rag/modules/generation/test_prompt_response_rag_module.py similarity index 71% rename from tests/unit/engines/rag/modules/generation/test_prompt_generation_rag_module.py rename to tests/unit/engines/rag/modules/generation/test_prompt_response_rag_module.py index 0227e2783..d8835bbe4 100644 --- a/tests/unit/engines/rag/modules/generation/test_prompt_generation_rag_module.py +++ b/tests/unit/engines/rag/modules/generation/test_prompt_response_rag_module.py @@ -1,16 +1,16 @@ import pytest from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import PromptGenerationRagModule +from griptape.engines.rag.modules import PromptResponseRagModule from tests.mocks.mock_prompt_driver import MockPromptDriver -class TestPromptGenerationRagModule: +class TestPromptResponseRagModule: @pytest.fixture def module(self): - return PromptGenerationRagModule(prompt_driver=MockPromptDriver()) + return PromptResponseRagModule(prompt_driver=MockPromptDriver()) def test_run(self, module): - assert module.run(RagContext(initial_query="test")).output.value == "mock output" + assert module.run(RagContext(query="test")).output.value == "mock output" def test_prompt(self, module): system_message = module.default_system_template_generator( diff --git a/tests/unit/engines/rag/modules/generation/test_rulesets_before_response_rag_module.py b/tests/unit/engines/rag/modules/generation/test_rulesets_before_response_rag_module.py new file mode 100644 index 000000000..2750257f4 --- /dev/null +++ b/tests/unit/engines/rag/modules/generation/test_rulesets_before_response_rag_module.py @@ -0,0 +1,10 @@ +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import RulesetsBeforeResponseRagModule +from griptape.rules import Ruleset, Rule + + +class TestRulesetsBeforeResponseRagModule: + def test_run(self): + module = RulesetsBeforeResponseRagModule(rulesets=[Ruleset(name="test ruleset", rules=[Rule("test rule")])]) + + assert "test rule" in module.run(RagContext(query="test")).before_query[0] diff --git a/tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py b/tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py deleted file mode 100644 index 6e0fe725a..000000000 --- a/tests/unit/engines/rag/modules/generation/test_rulesets_generation_rag_module.py +++ /dev/null @@ -1,10 +0,0 @@ -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import RulesetsGenerationRagModule -from griptape.rules import Ruleset, Rule - - -class TestRulesetsGenerationRagModule: - def test_run(self): - module = RulesetsGenerationRagModule(rulesets=[Ruleset(name="test ruleset", rules=[Rule("test rule")])]) - - assert "test rule" in module.run(RagContext(initial_query="test")).before_query[0] diff --git a/tests/unit/engines/rag/modules/generation/test_text_chunks_response_rag_module.py b/tests/unit/engines/rag/modules/generation/test_text_chunks_response_rag_module.py new file mode 100644 index 000000000..6488d650e --- /dev/null +++ b/tests/unit/engines/rag/modules/generation/test_text_chunks_response_rag_module.py @@ -0,0 +1,15 @@ +import pytest +from griptape.artifacts import TextArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import TextChunksResponseRagModule + + +class TestTextChunksResponseRagModule: + @pytest.fixture + def module(self): + return TextChunksResponseRagModule() + + def test_run(self, module): + text_chunks = [TextArtifact("foo"), TextArtifact("bar")] + + assert module.run(RagContext(query="test", text_chunks=text_chunks)).output.value == text_chunks diff --git a/tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py b/tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py deleted file mode 100644 index 699d73de5..000000000 --- a/tests/unit/engines/rag/modules/query/test_related_query_generation_rag_module.py +++ /dev/null @@ -1,13 +0,0 @@ -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import RelatedQueryGenerationRagModule -from tests.mocks.mock_prompt_driver import MockPromptDriver - - -class TestRelatedQueryGenerationRagModule: - def test_run(self): - result = RelatedQueryGenerationRagModule(prompt_driver=MockPromptDriver(), query_count=10).run( - RagContext(initial_query="test") - ) - - assert len(result) == 10 - assert all(r == "mock output" for r in result) diff --git a/tests/unit/engines/rag/modules/retrieval/test_text_rerank_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_text_chunks_rerank_rag_module.py similarity index 62% rename from tests/unit/engines/rag/modules/retrieval/test_text_rerank_rag_module.py rename to tests/unit/engines/rag/modules/retrieval/test_text_chunks_rerank_rag_module.py index dc3e46a0a..838f02e37 100644 --- a/tests/unit/engines/rag/modules/retrieval/test_text_rerank_rag_module.py +++ b/tests/unit/engines/rag/modules/retrieval/test_text_chunks_rerank_rag_module.py @@ -2,10 +2,10 @@ import pytest from griptape.drivers import CohereRerankDriver from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import TextRerankRagModule +from griptape.engines.rag.modules import TextChunksRerankRagModule -class TestTextRerankRagModule: +class TestTextChunksRerankRagModule: @pytest.fixture def mock_client(self, mocker): mock_client = mocker.patch("cohere.Client").return_value @@ -14,7 +14,7 @@ def mock_client(self, mocker): return mock_client def test_run(self, mock_client): - module = TextRerankRagModule(rerank_driver=CohereRerankDriver(api_key="api-key")) - result = module.run(RagContext(initial_query="test")) + module = TextChunksRerankRagModule(rerank_driver=CohereRerankDriver(api_key="api-key")) + result = module.run(RagContext(query="test")) assert len(result) == 2 diff --git a/tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py deleted file mode 100644 index 5b69012d1..000000000 --- a/tests/unit/engines/rag/modules/retrieval/test_text_retrieval_rag_module.py +++ /dev/null @@ -1,20 +0,0 @@ -from griptape.artifacts import TextArtifact -from griptape.drivers import LocalVectorStoreDriver -from griptape.engines.rag import RagContext -from griptape.engines.rag.modules import TextRetrievalRagModule -from tests.mocks.mock_embedding_driver import MockEmbeddingDriver - - -class TestTextRetrievalRagModule: - def test_run(self): - vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) - module = TextRetrievalRagModule(vector_store_driver=vector_store_driver) - - vector_store_driver.upsert_text_artifact(TextArtifact("foobar1"), namespace="test") - vector_store_driver.upsert_text_artifact(TextArtifact("foobar2"), namespace="test") - - result = module.run(RagContext(initial_query="test")) - - assert len(result) == 2 - assert result[0].value == "foobar1" - assert result[1].value == "foobar2" diff --git a/tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py new file mode 100644 index 000000000..3a01b3eaa --- /dev/null +++ b/tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py @@ -0,0 +1,59 @@ +from griptape.artifacts import TextArtifact +from griptape.drivers import LocalVectorStoreDriver +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver + + +class TestVectorStoreRetrievalRagModule: + def test_run_without_namespace(self): + vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + module = VectorStoreRetrievalRagModule(vector_store_driver=vector_store_driver) + + vector_store_driver.upsert_text_artifact(TextArtifact("foobar1"), namespace="test") + vector_store_driver.upsert_text_artifact(TextArtifact("foobar2"), namespace="test") + + result = module.run(RagContext(query="test")) + + assert len(result) == 2 + assert result[0].value == "foobar1" + assert result[1].value == "foobar2" + + def test_run_with_namespace(self): + vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + module = VectorStoreRetrievalRagModule( + vector_store_driver=vector_store_driver, query_params={"namespace": "test"} + ) + + vector_store_driver.upsert_text_artifact(TextArtifact("foobar1"), namespace="test") + vector_store_driver.upsert_text_artifact(TextArtifact("foobar2"), namespace="test") + + result = module.run(RagContext(query="test")) + + assert len(result) == 2 + assert result[0].value == "foobar1" + assert result[1].value == "foobar2" + + def test_run_with_namespace_overrides(self): + vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + module = VectorStoreRetrievalRagModule( + vector_store_driver=vector_store_driver, query_params={"namespace": "test"} + ) + + vector_store_driver.upsert_text_artifact(TextArtifact("foobar1"), namespace="test") + vector_store_driver.upsert_text_artifact(TextArtifact("foobar2"), namespace="test") + + result1 = module.run( + RagContext( + query="test", module_params={"VectorStoreRetrievalRagModule": {"query_params": {"namespace": "empty"}}} + ) + ) + + result2 = module.run( + RagContext( + query="test", module_params={"VectorStoreRetrievalRagModule": {"query_params": {"namespace": "test"}}} + ) + ) + + assert len(result1) == 0 + assert len(result2) == 2 diff --git a/tests/unit/engines/rag/modules/test_base_rag_nodule.py b/tests/unit/engines/rag/modules/test_base_rag_nodule.py new file mode 100644 index 000000000..0fc415e0e --- /dev/null +++ b/tests/unit/engines/rag/modules/test_base_rag_nodule.py @@ -0,0 +1,27 @@ +from griptape.engines.rag import RagContext +from tests.mocks.mock_rag_module import MockRagModule + + +class TestBaseRagModule: + def test_generate_query_prompt_stack(self): + prompt_stack = MockRagModule().generate_query_prompt_stack("test system", "test query") + + assert len(prompt_stack.messages) == 2 + assert prompt_stack.messages[0].is_system() + assert prompt_stack.messages[1].is_user() + + def test_get_context_param(self): + module = MockRagModule(name="boo") + context = RagContext(query="test") + + context.module_params["boo"] = {"foo": "bar"} + + assert module.get_context_param(context, "foo") == "bar" + + def test_set_context_param(self): + module = MockRagModule(name="boo") + context = RagContext(query="test") + + module.set_context_param(context, "foo", "bar") + + assert context.module_params["boo"]["foo"] == "bar" diff --git a/tests/unit/engines/rag/test_rag_engine.py b/tests/unit/engines/rag/test_rag_engine.py index b03ab9a1c..a39c0c2f1 100644 --- a/tests/unit/engines/rag/test_rag_engine.py +++ b/tests/unit/engines/rag/test_rag_engine.py @@ -1,8 +1,8 @@ import pytest from griptape.drivers import LocalVectorStoreDriver from griptape.engines.rag import RagEngine, RagContext -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage from tests.mocks.mock_embedding_driver import MockEmbeddingDriver from tests.mocks.mock_prompt_driver import MockPromptDriver @@ -13,18 +13,38 @@ def engine(self): return RagEngine( retrieval_stage=RetrievalRagStage( retrieval_modules=[ - TextRetrievalRagModule( + VectorStoreRetrievalRagModule( vector_store_driver=LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) ) ] ), - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule(prompt_driver=MockPromptDriver()) - ), + response_stage=ResponseRagStage(response_module=PromptResponseRagModule(prompt_driver=MockPromptDriver())), + ) + + def test_module_name_uniqueness(self): + vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + + with pytest.raises(ValueError): + RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + VectorStoreRetrievalRagModule(name="test", vector_store_driver=vector_store_driver), + VectorStoreRetrievalRagModule(name="test", vector_store_driver=vector_store_driver), + ] + ) + ) + + assert RagEngine( + retrieval_stage=RetrievalRagStage( + retrieval_modules=[ + VectorStoreRetrievalRagModule(name="test1", vector_store_driver=vector_store_driver), + VectorStoreRetrievalRagModule(name="test2", vector_store_driver=vector_store_driver), + ] + ) ) def test_process_query(self, engine): assert engine.process_query("test").output.value == "mock output" def test_process(self, engine): - assert engine.process(RagContext(initial_query="test")).output.value == "mock output" + assert engine.process(RagContext(query="test")).output.value == "mock output" diff --git a/tests/unit/structures/test_agent.py b/tests/unit/structures/test_agent.py index 942a960f9..5dfcbc6d7 100644 --- a/tests/unit/structures/test_agent.py +++ b/tests/unit/structures/test_agent.py @@ -238,7 +238,7 @@ def test_task_memory_defaults(self): storage = list(agent.task_memory.artifact_storages.values())[0] assert isinstance(storage, TextArtifactStorage) - assert storage.rag_engine.generation_stage.generation_module.prompt_driver == prompt_driver + assert storage.rag_engine.response_stage.response_module.prompt_driver == prompt_driver assert ( storage.rag_engine.retrieval_stage.retrieval_modules[0].vector_store_driver.embedding_driver == embedding_driver diff --git a/tests/unit/tasks/test_rag_task.py b/tests/unit/tasks/test_rag_task.py index 75e5007ad..c9b82f208 100644 --- a/tests/unit/tasks/test_rag_task.py +++ b/tests/unit/tasks/test_rag_task.py @@ -1,7 +1,7 @@ import pytest from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import PromptGenerationRagModule -from griptape.engines.rag.stages import GenerationRagStage +from griptape.engines.rag.modules import PromptResponseRagModule +from griptape.engines.rag.stages import ResponseRagStage from griptape.structures import Agent from griptape.tasks import RagTask from tests.mocks.mock_prompt_driver import MockPromptDriver @@ -13,8 +13,8 @@ def task(self): return RagTask( input="test", rag_engine=RagEngine( - generation_stage=GenerationRagStage( - generation_module=PromptGenerationRagModule(prompt_driver=MockPromptDriver()) + response_stage=ResponseRagStage( + response_module=PromptResponseRagModule(prompt_driver=MockPromptDriver()) ) ), ) diff --git a/tests/unit/tools/test_base_tool.py b/tests/unit/tools/test_base_tool.py index 082973bcb..210780729 100644 --- a/tests/unit/tools/test_base_tool.py +++ b/tests/unit/tools/test_base_tool.py @@ -166,10 +166,6 @@ def test_name(self): assert MockTool().name == "MockTool" assert MockTool(name="FooBar").name == "FooBar" - def test_class_name(self): - assert MockTool().class_name == "MockTool" - assert MockTool(name="FooBar").class_name == "MockTool" - def test_validate(self, tool): assert tool.validate() diff --git a/tests/utils/defaults.py b/tests/utils/defaults.py index f27410308..5a9f6f958 100644 --- a/tests/utils/defaults.py +++ b/tests/utils/defaults.py @@ -2,8 +2,8 @@ from griptape.drivers import LocalVectorStoreDriver from griptape.engines import PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine from griptape.engines.rag import RagEngine -from griptape.engines.rag.modules import TextRetrievalRagModule, PromptGenerationRagModule -from griptape.engines.rag.stages import RetrievalRagStage, GenerationRagStage +from griptape.engines.rag.modules import VectorStoreRetrievalRagModule, PromptResponseRagModule +from griptape.engines.rag.stages import RetrievalRagStage, ResponseRagStage from griptape.memory import TaskMemory from griptape.memory.task.storage import TextArtifactStorage, BlobArtifactStorage from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -16,6 +16,7 @@ def text_tool_artifact_storage(): return TextArtifactStorage( rag_engine=rag_engine(MockPromptDriver(), vector_store_driver), vector_store_driver=vector_store_driver, + retrieval_rag_module_name="VectorStoreRetrievalRagModule", summary_engine=PromptSummaryEngine(prompt_driver=MockPromptDriver()), csv_extraction_engine=CsvExtractionEngine(prompt_driver=MockPromptDriver()), json_extraction_engine=JsonExtractionEngine(prompt_driver=MockPromptDriver()), @@ -31,7 +32,7 @@ def text_task_memory(name): def rag_engine(prompt_driver, vector_store_driver): return RagEngine( retrieval_stage=RetrievalRagStage( - retrieval_modules=[TextRetrievalRagModule(vector_store_driver=vector_store_driver)] + retrieval_modules=[VectorStoreRetrievalRagModule(vector_store_driver=vector_store_driver)] ), - generation_stage=GenerationRagStage(generation_module=PromptGenerationRagModule(prompt_driver=prompt_driver)), + response_stage=ResponseRagStage(response_module=PromptResponseRagModule(prompt_driver=prompt_driver)), ) From 83a16ac39159b9729f0108618ac85986c027d533 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Wed, 3 Jul 2024 13:47:05 -0500 Subject: [PATCH 137/145] Update `StructureVisualizer` (#936) --- griptape/utils/structure_visualizer.py | 10 +++++++--- tests/unit/utils/test_structure_visualizer.py | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/griptape/utils/structure_visualizer.py b/griptape/utils/structure_visualizer.py index 999519cf1..2a159a282 100644 --- a/griptape/utils/structure_visualizer.py +++ b/griptape/utils/structure_visualizer.py @@ -1,5 +1,6 @@ from __future__ import annotations import base64 +import hashlib from attrs import define, field from typing import TYPE_CHECKING @@ -36,7 +37,10 @@ def to_url(self) -> str: def __render_task(self, task: BaseTask) -> str: if task.children: - children = " & ".join([f"'{child.id}'" for child in task.children]) - return f"'{task.id}'--> {children};" + children = " & ".join([f"{self.__get_id(child.id)}({child.id})" for child in task.children]) + return f"{self.__get_id(task.id)}({task.id})--> {children};" else: - return f"'{task.id}';" + return f"{self.__get_id(task.id)}({task.id});" + + def __get_id(self, string: str) -> str: + return hashlib.md5(string.encode()).hexdigest()[:8] diff --git a/tests/unit/utils/test_structure_visualizer.py b/tests/unit/utils/test_structure_visualizer.py index 396b81166..e16275a5c 100644 --- a/tests/unit/utils/test_structure_visualizer.py +++ b/tests/unit/utils/test_structure_visualizer.py @@ -11,7 +11,7 @@ def test_agent(self): visualizer = StructureVisualizer(agent) result = visualizer.to_url() - assert result == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgkndGFzazEnOw==" + assert result == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgljYzVkYWYyNih0YXNrMSk7" def test_pipeline(self): pipeline = Pipeline( @@ -29,7 +29,7 @@ def test_pipeline(self): assert ( result - == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgkndGFzazEnLS0+ICd0YXNrMic7CgkndGFzazInLS0+ICd0YXNrMyc7CgkndGFzazMnLS0+ICd0YXNrNCc7CgkndGFzazQnOw==" + == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgljYzVkYWYyNih0YXNrMSktLT4gYWE1ZGU4N2UodGFzazIpOwoJYWE1ZGU4N2UodGFzazIpLS0+IDUxZmViYjIxKHRhc2szKTsKCTUxZmViYjIxKHRhc2szKS0tPiBhN2JlMzY4Yih0YXNrNCk7CglhN2JlMzY4Yih0YXNrNCk7" ) def test_workflow(self): @@ -48,5 +48,5 @@ def test_workflow(self): assert ( result - == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgkndGFzazEnLS0+ICd0YXNrMicgJiAndGFzazMnOwoJJ3Rhc2syJy0tPiAndGFzazQnOwoJJ3Rhc2szJy0tPiAndGFzazQnOwoJJ3Rhc2s0Jzs=" + == "https://mermaid.ink/svg/Z3JhcGggVEQ7CgljYzVkYWYyNih0YXNrMSktLT4gYWE1ZGU4N2UodGFzazIpICYgNTFmZWJiMjEodGFzazMpOwoJYWE1ZGU4N2UodGFzazIpLS0+IGE3YmUzNjhiKHRhc2s0KTsKCTUxZmViYjIxKHRhc2szKS0tPiBhN2JlMzY4Yih0YXNrNCk7CglhN2JlMzY4Yih0YXNrNCk7" ) From d6cf531425ff205eae44259d9cc5008b2e4a237e Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 3 Jul 2024 15:37:15 -0500 Subject: [PATCH 138/145] Update pyright, fix new pyright errors (#934) --- poetry.lock | 19 +++++++++++++++---- pyproject.toml | 1 + 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index f169895cc..83d2d5632 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -4463,37 +4463,48 @@ files = [ {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab6b32544491ee655264dab86fc8a58e47c4f87d196b28022d4007faf971a50"}, {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:64bd6299e7fc888bb7f7292cf3e29504c406e5d5d04afd37ca994ab8142d8ee4"}, {file = "pyreqwest_impersonate-0.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e914b650dd953b8d9b24ef56aa4ecbfc16e399227b68accd818f8bf159e0c558"}, + {file = "pyreqwest_impersonate-0.4.8-cp310-none-win_amd64.whl", hash = "sha256:cb56a2149b0c4548a8e0158b071a943f33dae9b717f92b5c9ac34ccd1f5a958c"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f62620e023490902feca0109f306e122e427feff7d59e03ecd22c69a89452367"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:08d4c01d76da88cfe3d7d03b311b375ce3fb5a59130f93f0637bb755d6e56ff1"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524e276bc460176c79d7ba4b9131d9db73c534586660371ebdf067749252a33"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22863bc0aaf02ca2f5d76c8130929ae680b7d82dfc1c28c1ed5f306ff626928"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8cc82d57f6a91037e64a7aa9122f909576ef2a141a42ce599958ef9f8c4bc033"}, {file = "pyreqwest_impersonate-0.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:da8a053308210e44fd8349f07f45442a0691ac932f2881e98b05cf9ac404b091"}, + {file = "pyreqwest_impersonate-0.4.8-cp311-none-win_amd64.whl", hash = "sha256:4baf3916c14364a815a64ead7f728afb61b37541933b2771f18dbb245029bb55"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:78db05deed0b32c9c75f2b3168a3a9b7d5e36487b218cb839bfe7e2a143450cb"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9af9446d605903c2b4e94621a9093f8d8a403729bc9cbfbcb62929f8238c838f"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c55890181d8d81e66cac25a95e215dc9680645d01e9091b64449d5407ad9bc6"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69344e7ae9964502a8693da7ad77ebc3e1418ee197e2e394bc23c5d4970772a"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b5db5c957a10d8cc2815085ba0b8fe09245b2f94c2225d9653a854a03b4217e1"}, {file = "pyreqwest_impersonate-0.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:03c19c21f63f9c91c590c4bbcc32cc2d8066b508c683a1d163b8c7d9816a01d5"}, + {file = "pyreqwest_impersonate-0.4.8-cp312-none-win_amd64.whl", hash = "sha256:0230610779129f74ff802c744643ce7589b1d07cba21d046fe3b574281c29581"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b8cb9471ab4b2fa7e80d3ac4e580249ff988d782f2938ad1f0428433652b170d"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8081a5ace2658be91519902bde9ddc5f94e1f850a39be196007a25e3da5bbfdc"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69eababfa3200459276acd780a0f3eaf41d1fe7c02bd169e714cba422055b5b9"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:632957fa671ebb841166e40913015de457225cb73600ef250c436c280e68bf45"}, {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2ce7ddef334b4e5c68f5ea1da1d65f686b8d84f4443059d128e0f069d3fa499a"}, + {file = "pyreqwest_impersonate-0.4.8-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6ce333d450b158d582e36317089a006440b4e66739a8e8849d170e4cb15e8c8d"}, + {file = "pyreqwest_impersonate-0.4.8-cp38-none-win_amd64.whl", hash = "sha256:9d9c85ce19db92362854f534807e470f03e905f283a7de6826dc79b790a8788e"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2503277f2a95a30e28e498570e2ed03ef4302f873054e8e21d6c0e607cbbc1d1"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8260395ef4ddae325e8b30cef0391adde7bd35e1a1decf8c729e26391f09b52d"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d8066b46d82bbaff5402d767e2f13d3449b8191c37bf8283e91d301a7159869"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9c42f6343cfbd6663fb53edc9eb9feb4ebf6186b284e22368adc1eeb6a33854"}, {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ff534f491a059e74fb7f994876df86078b4b125dbecc53c098a298ecd55fa9c6"}, + {file = "pyreqwest_impersonate-0.4.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b8fbf73b3ac513ddadafd338d61f79cd2370f0691d9175b2b92a45920920d6b"}, + {file = "pyreqwest_impersonate-0.4.8-cp39-none-win_amd64.whl", hash = "sha256:a26447c82665d0e361207c1a15e56b0ca54974aa6c1fdfa18c68f908dec78cbe"}, {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24a16b8d55309f0af0db9d04ff442b0c91afccf078a94809e7c3a71747a5c214"}, {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c8fada56465fc19179404cc9d5d5e1064f5dfe27405cb052f57a5b4fe06aed1"}, {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a3d48d5abc146fd804395713427d944757a99254350e6a651e7d776818074aee"}, + {file = "pyreqwest_impersonate-0.4.8-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:475829fe9994c66258157a8d4adb1c038f44f79f901208ba656d547842337227"}, {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ef1ec0e97623bc0e18469418cc4dd2c59a2d5fddcae944de61e13c0b46f910e"}, {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91857b196de89e9b36d3f8629aa8772c0bbe7efef8334fe266956b1c192ec31c"}, {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:63831e407487b8a21bb51f97cd86a616c291d5138f8caec16ab6019cf6423935"}, + {file = "pyreqwest_impersonate-0.4.8-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c30e61de93bcd0a9d3ca226b1ae5475002afde61e9d85018a6a4a040eeb86567"}, {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6c72c37b03bce9900f5dbb4f476af17253ec60c13bf7a7259f71a8dc1b036cb"}, {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1f1096165741b5c2178ab15b0eb09b5de16dd39b1cc135767d72471f0a69ce"}, {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:70c940c0e4ef335e22a6c705b01f286ee44780b5909065d212d94d82ea2580cb"}, + {file = "pyreqwest_impersonate-0.4.8-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:81c06f21757602d85f16dbc1cbaee1121cd65455f65aed4c048b7dcda7be85c4"}, + {file = "pyreqwest_impersonate-0.4.8.tar.gz", hash = "sha256:1eba11d47bd17244c64fec1502cc26ee66cc5c8a3be131e408101ae2b455e5bc"}, ] [package.extras] @@ -4501,13 +4512,13 @@ dev = ["pytest (>=8.1.1)"] [[package]] name = "pyright" -version = "1.1.363" +version = "1.1.370" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.363-py3-none-any.whl", hash = "sha256:d3b8d73c8d230e26cc3523862f3398032a0c39a00d7bb69dc0f595f8e888fd01"}, - {file = "pyright-1.1.363.tar.gz", hash = "sha256:00a8f0ae0e339473bb0488f8a2a2dcdf574e94a16cd7b4390d49d144714d8db2"}, + {file = "pyright-1.1.370-py3-none-any.whl", hash = "sha256:fc721601e480a69989775bfc210534a6ca0110ebd0c065244a8d3a151294fc61"}, + {file = "pyright-1.1.370.tar.gz", hash = "sha256:d0d559d506fc41e3297f721aaa05a1b9f06beda5acc9ac64ca371ce94c28f960"}, ] [package.dependencies] diff --git a/pyproject.toml b/pyproject.toml index e4c84f624..dc7cb7877 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -215,6 +215,7 @@ exclude = [ pythonVersion = "3.9" reportOptionalMemberAccess = "none" reportIncompatibleVariableOverride = "none" # see thread: https://github.com/microsoft/pyright/issues/5933 +enableExperimentalFeatures = true # https://github.com/microsoft/pyright/issues/7713 [tool.pytest_env] OPENAI_API_KEY = {value = "api-key", skip_if_set = true} From c16f3f4ab9ea1e63bbb9229429970c5ca1f1162b Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Wed, 3 Jul 2024 16:06:58 -0500 Subject: [PATCH 139/145] Fix changelog (#938) --- CHANGELOG.md | 50 ++++++++++++++++++++++---------------------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91c8fe89f..b96e0a724 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,33 +5,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased -### Added -- `Message` for storing messages in a `PromptStack`. Messages consist of a role, content, and usage. -- `DeltaMessage` for storing partial messages in a `PromptStack`. Multiple `DeltaMessage` can be combined to form a `Message`. -- `TextMessageContent` for storing textual content in a `Message`. -- `ImageMessageContent` for storing image content in a `Message`. -- Support for adding `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s to `PromptStack`. -- Support for image inputs to `OpenAiChatPromptDriver`, `AzureOpenAiChatPromptDriver`, `AmazonBedrockPromptDriver`, `AnthropicPromptDriver`, and `GooglePromptDriver`. -- Input/output token usage metrics to all Prompt Drivers. -- `FinishPromptEvent.input_token_count` and `FinishPromptEvent.output_token_count`. -- Support for storing Artifacts as inputs/outputs in Conversation Memory Runs. -- `Agent.input` for passing Artifacts as input. -- Support for `PromptTask`s to take `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s as input. - -### Changed -- **BREAKING**: Moved/renamed `griptape.utils.PromptStack` to `griptape.common.PromptStack`. -- **BREAKING**: Renamed `PromptStack.inputs` to `PromptStack.messages`. -- **BREAKING**: Moved `PromptStack.USER_ROLE`, `PromptStack.ASSISTANT_ROLE`, and `PromptStack.SYSTEM_ROLE` to `Message`. -- **BREAKING**: Updated return type of `PromptDriver.try_run` from `TextArtifact` to `Message`. -- **BREAKING**: Updated return type of `PromptDriver.try_stream` from `Iterator[TextArtifact]` to `Iterator[DeltaMessage]`. -- **BREAKING**: Removed `BasePromptEvent.token_count` in favor of `FinishPromptEvent.input_token_count` and `FinishPromptEvent.output_token_count`. -- **BREAKING**: Removed `StartPromptEvent.prompt`. Use `StartPromptEvent.prompt_stack` instead. -- **BREAKING**: Removed `Agent.input_template` in favor of `Agent.input`. -- **BREAKING**: `BasePromptDriver.run` now returns a `Message` instead of a `TextArtifact`. For compatibility, `Message.value` contains the Message's Artifact value -- Default Prompt Driver model in `GoogleStructureConfig` to `gemini-1.5-pro`. - - - ### Added - `RagEngine` is an abstraction for implementing modular RAG pipelines. - `RagContext` is a container object for passing around RAG context. @@ -67,8 +40,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Parameter `fail_fast` to `Structure`. - `BooleanArtifact` for handling boolean values. - `typos` to dev dependencies to catch typos in code/docs. +- `Message` for storing messages in a `PromptStack`. Messages consist of a role, content, and usage. +- `DeltaMessage` for storing partial messages in a `PromptStack`. Multiple `DeltaMessage` can be combined to form a `Message`. +- `TextMessageContent` for storing textual content in a `Message`. +- `ImageMessageContent` for storing image content in a `Message`. +- Support for adding `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s to `PromptStack`. +- Support for image inputs to `OpenAiChatPromptDriver`, `AzureOpenAiChatPromptDriver`, `AmazonBedrockPromptDriver`, `AnthropicPromptDriver`, and `GooglePromptDriver`. +- Input/output token usage metrics to all Prompt Drivers. +- `FinishPromptEvent.input_token_count` and `FinishPromptEvent.output_token_count`. +- Support for storing Artifacts as inputs/outputs in Conversation Memory Runs. +- `Agent.input` for passing Artifacts as input. +- Support for `PromptTask`s to take `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s as input. ### Changed +- **BREAKING**: Moved/renamed `griptape.utils.PromptStack` to `griptape.common.PromptStack`. +- **BREAKING**: Renamed `PromptStack.inputs` to `PromptStack.messages`. +- **BREAKING**: Moved `PromptStack.USER_ROLE`, `PromptStack.ASSISTANT_ROLE`, and `PromptStack.SYSTEM_ROLE` to `Message`. +- **BREAKING**: Updated return type of `PromptDriver.try_run` from `TextArtifact` to `Message`. +- **BREAKING**: Updated return type of `PromptDriver.try_stream` from `Iterator[TextArtifact]` to `Iterator[DeltaMessage]`. +- **BREAKING**: Removed `BasePromptEvent.token_count` in favor of `FinishPromptEvent.input_token_count` and `FinishPromptEvent.output_token_count`. +- **BREAKING**: Removed `StartPromptEvent.prompt`. Use `StartPromptEvent.prompt_stack` instead. +- **BREAKING**: Removed `Agent.input_template` in favor of `Agent.input`. +- **BREAKING**: `BasePromptDriver.run` now returns a `Message` instead of a `TextArtifact`. For compatibility, `Message.value` contains the Message's Artifact value - **BREAKING**: `BaseVectorStoreDriver.upsert_text_artifact()` and `BaseVectorStoreDriver.upsert_text()` use artifact/string values to generate `vector_id` if it wasn't implicitly passed. This change ensures that we don't generate embeddings for the same content every time. - **BREAKING**: Removed `VectorQueryEngine` in favor of `RagEngine`. - **BREAKING**: Removed `TextQueryTask` in favor of `RagTask`. @@ -78,8 +71,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: Replaced `query_engine` with `vector_store_driver` in `VectorStoreClient`. - **BREAKING**: removed parameters `google_api_lang`, `google_api_key`, `google_api_search_id`, `google_api_country` on `WebSearch` in favor of `web_search_driver`. - **BREAKING**: removed `VectorStoreClient.top_n` and `VectorStoreClient.namespace` in favor of `VectorStoreClient.query_params`. -- `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. - **BREAKING**: All `futures_executor` fields renamed to `futures_executor_fn` and now accept callables instead of futures; wrapped all future `submit` calls with the `with` block to address future executor shutdown issues. +- `GriptapeCloudKnowledgeBaseClient` migrated to `/search` api. +- Default Prompt Driver model in `GoogleStructureConfig` to `gemini-1.5-pro`. ### Fixed - `CoherePromptDriver` to properly handle empty history. From c785aba5d11f4dc375f1bcb638affc0337d5f523 Mon Sep 17 00:00:00 2001 From: datashaman Date: Fri, 5 Jul 2024 18:40:18 +0200 Subject: [PATCH 140/145] DynamoDB sort key (#917) --- CHANGELOG.md | 1 + .../drivers/conversation-memory-drivers.md | 1 + ...zon_dynamodb_conversation_memory_driver.py | 14 ++++- ...est_dynamodb_conversation_memory_driver.py | 53 +++++++++++++++++++ 4 files changed, 67 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b96e0a724..c02f822ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support for storing Artifacts as inputs/outputs in Conversation Memory Runs. - `Agent.input` for passing Artifacts as input. - Support for `PromptTask`s to take `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s as input. +- Parameters `sort_key` and `sort_key_value` on `AmazonDynamoDbConversationMemoryDriver` for tables with sort keys. ### Changed - **BREAKING**: Moved/renamed `griptape.utils.PromptStack` to `griptape.common.PromptStack`. diff --git a/docs/griptape-framework/drivers/conversation-memory-drivers.md b/docs/griptape-framework/drivers/conversation-memory-drivers.md index 4e437a3f5..88063292f 100644 --- a/docs/griptape-framework/drivers/conversation-memory-drivers.md +++ b/docs/griptape-framework/drivers/conversation-memory-drivers.md @@ -47,6 +47,7 @@ agent = Agent(conversation_memory=ConversationMemory(driver=dynamodb_driver)) agent.run("My name is Jeff.") agent.run("What is my name?") ``` +Optional parameters `sort_key` and `sort_key_value` can be supplied for tables with a composite primary key. ### Redis diff --git a/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py b/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py index 87c3667fe..36f62c0e5 100644 --- a/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py +++ b/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py @@ -16,6 +16,8 @@ class AmazonDynamoDbConversationMemoryDriver(BaseConversationMemoryDriver): partition_key: str = field(kw_only=True, metadata={"serializable": True}) value_attribute_key: str = field(kw_only=True, metadata={"serializable": True}) partition_key_value: str = field(kw_only=True, metadata={"serializable": True}) + sort_key: Optional[str] = field(default=None, metadata={"serializable": True}) + sort_key_value: Optional[str | int] = field(default=None, metadata={"serializable": True}) table: Any = field(init=False) @@ -26,14 +28,14 @@ def __attrs_post_init__(self) -> None: def store(self, memory: BaseConversationMemory) -> None: self.table.update_item( - Key={self.partition_key: self.partition_key_value}, + Key=self._get_key(), UpdateExpression="set #attr = :value", ExpressionAttributeNames={"#attr": self.value_attribute_key}, ExpressionAttributeValues={":value": memory.to_json()}, ) def load(self) -> Optional[BaseConversationMemory]: - response = self.table.get_item(Key={self.partition_key: self.partition_key_value}) + response = self.table.get_item(Key=self._get_key()) if "Item" in response and self.value_attribute_key in response["Item"]: memory_value = response["Item"][self.value_attribute_key] @@ -45,3 +47,11 @@ def load(self) -> Optional[BaseConversationMemory]: return memory else: return None + + def _get_key(self) -> dict[str, str | int]: + key: dict[str, str | int] = {self.partition_key: self.partition_key_value} + + if self.sort_key is not None and self.sort_key_value is not None: + key[self.sort_key] = self.sort_key_value + + return key diff --git a/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py index 80d77d24d..df0ca4d3c 100644 --- a/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py +++ b/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py @@ -60,6 +60,33 @@ def test_store(self): response = table.get_item(TableName=self.DYNAMODB_TABLE_NAME, Key={"entryId": "bar"}) assert "Item" in response + def test_store_with_sort_key(self): + session = boto3.Session(region_name=self.AWS_REGION) + dynamodb = session.resource("dynamodb") + table = dynamodb.Table(self.DYNAMODB_TABLE_NAME) + prompt_driver = MockPromptDriver() + memory_driver = AmazonDynamoDbConversationMemoryDriver( + session=session, + table_name=self.DYNAMODB_TABLE_NAME, + partition_key=self.DYNAMODB_PARTITION_KEY, + value_attribute_key=self.VALUE_ATTRIBUTE_KEY, + partition_key_value=self.PARTITION_KEY_VALUE, + sort_key="sortKey", + sort_key_value="foo" + ) + memory = ConversationMemory(driver=memory_driver) + pipeline = Pipeline(prompt_driver=prompt_driver, conversation_memory=memory) + + pipeline.add_task(PromptTask("test")) + + response = table.get_item(TableName=self.DYNAMODB_TABLE_NAME, Key={"entryId": "bar", "sortKey": "foo"}) + assert "Item" not in response + + pipeline.run() + + response = table.get_item(TableName=self.DYNAMODB_TABLE_NAME, Key={"entryId": "bar", "sortKey": "foo"}) + assert "Item" in response + def test_load(self): prompt_driver = MockPromptDriver() memory_driver = AmazonDynamoDbConversationMemoryDriver( @@ -83,3 +110,29 @@ def test_load(self): assert len(new_memory.runs) == 2 assert new_memory.runs[0].input.value == "test" assert new_memory.runs[0].output.value == "mock output" + + def test_load_with_sort_key(self): + prompt_driver = MockPromptDriver() + memory_driver = AmazonDynamoDbConversationMemoryDriver( + session=boto3.Session(region_name=self.AWS_REGION), + table_name=self.DYNAMODB_TABLE_NAME, + partition_key=self.DYNAMODB_PARTITION_KEY, + value_attribute_key=self.VALUE_ATTRIBUTE_KEY, + partition_key_value=self.PARTITION_KEY_VALUE, + sort_key="sortKey", + sort_key_value="foo" + ) + memory = ConversationMemory(driver=memory_driver) + pipeline = Pipeline(prompt_driver=prompt_driver, conversation_memory=memory) + + pipeline.add_task(PromptTask("test")) + + pipeline.run() + pipeline.run() + + new_memory = memory_driver.load() + + assert new_memory.type == "ConversationMemory" + assert len(new_memory.runs) == 2 + assert new_memory.runs[0].input.value == "test" + assert new_memory.runs[0].output.value == "mock output" \ No newline at end of file From 3e5bd038c351ca369d41c87740fa300b212564ce Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 5 Jul 2024 14:27:14 -0500 Subject: [PATCH 141/145] Update ruff linter rules according to documentation (#940) --- griptape/artifacts/base_artifact.py | 5 +- griptape/chunkers/base_chunker.py | 5 +- .../amazon_s3_file_manager_driver.py | 2 +- .../file_manager/base_file_manager_driver.py | 7 +- .../amazon_bedrock_image_generation_driver.py | 2 +- .../amazon_bedrock_image_query_driver.py | 2 +- .../drivers/prompt/anthropic_prompt_driver.py | 5 +- griptape/drivers/prompt/base_prompt_driver.py | 5 +- .../drivers/prompt/cohere_prompt_driver.py | 5 +- .../vector/base_vector_store_driver.py | 5 +- .../mongodb_atlas_vector_store_driver.py | 5 +- .../markdownify_web_scraper_driver.py | 67 +++++++++---------- .../duck_duck_go_web_search_driver.py | 2 +- griptape/loaders/base_text_loader.py | 5 +- griptape/loaders/sql_loader.py | 5 +- griptape/mixins/rule_mixin.py | 5 +- griptape/mixins/serializable_mixin.py | 2 +- griptape/schemas/polymorphic_schema.py | 8 +-- griptape/structures/structure.py | 12 +--- griptape/structures/workflow.py | 4 +- griptape/tasks/actions_subtask.py | 14 ++-- griptape/tasks/base_task.py | 2 +- griptape/tasks/prompt_task.py | 2 +- griptape/tokenizers/base_tokenizer.py | 3 +- griptape/utils/chat.py | 9 ++- griptape/utils/dict_utils.py | 2 +- griptape/utils/import_utils.py | 4 +- griptape/utils/load_artifact_from_memory.py | 4 +- pyproject.toml | 17 ++++- tests/utils/code_blocks.py | 3 +- 30 files changed, 98 insertions(+), 120 deletions(-) diff --git a/griptape/artifacts/base_artifact.py b/griptape/artifacts/base_artifact.py index a7a1811ea..ced8e0e1c 100644 --- a/griptape/artifacts/base_artifact.py +++ b/griptape/artifacts/base_artifact.py @@ -24,10 +24,7 @@ def value_to_bytes(cls, value: Any) -> bytes: @classmethod def value_to_dict(cls, value: Any) -> dict: - if isinstance(value, dict): - dict_value = value - else: - dict_value = json.loads(value) + dict_value = value if isinstance(value, dict) else json.loads(value) return {k: v for k, v in dict_value.items()} diff --git a/griptape/chunkers/base_chunker.py b/griptape/chunkers/base_chunker.py index 793bf24ad..26199a16c 100644 --- a/griptape/chunkers/base_chunker.py +++ b/griptape/chunkers/base_chunker.py @@ -58,10 +58,7 @@ def _chunk_recursively(self, chunk: str, current_separator: Optional[ChunkSepara # Iterate through the subchunks and calculate token counts. for index, subchunk in enumerate(subchunks): if index < len(subchunks): - if separator.is_prefix: - subchunk = separator.value + subchunk - else: - subchunk = subchunk + separator.value + subchunk = separator.value + subchunk if separator.is_prefix else subchunk + separator.value tokens_count += self.tokenizer.count_tokens(subchunk) diff --git a/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py b/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py index bdb4d787c..e2d794f31 100644 --- a/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py +++ b/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py @@ -55,7 +55,7 @@ def try_load_file(self, path: str) -> bytes: return response["Body"].read() except botocore.exceptions.ClientError as e: if e.response["Error"]["Code"] in {"NoSuchKey", "404"}: - raise FileNotFoundError + raise FileNotFoundError from e else: raise e diff --git a/griptape/drivers/file_manager/base_file_manager_driver.py b/griptape/drivers/file_manager/base_file_manager_driver.py index 562d8be4c..9b8fe8325 100644 --- a/griptape/drivers/file_manager/base_file_manager_driver.py +++ b/griptape/drivers/file_manager/base_file_manager_driver.py @@ -82,11 +82,8 @@ def save_file(self, path: str, value: bytes | str) -> InfoArtifact | ErrorArtifa encoding = None if loader is None else loader.encoding if isinstance(value, str): - if encoding is None: - value = value.encode() - else: - value = value.encode(encoding=encoding) - elif isinstance(value, bytearray) or isinstance(value, memoryview): + value = value.encode() if encoding is None else value.encode(encoding=encoding) + elif isinstance(value, (bytearray, memoryview)): raise ValueError(f"Unsupported type: {type(value)}") self.try_save_file(path, value) diff --git a/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py b/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py index 2edb9f862..b5a4b7e3b 100644 --- a/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py +++ b/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py @@ -122,6 +122,6 @@ def _make_request(self, request: dict) -> bytes: try: image_bytes = self.image_generation_model_driver.get_generated_image(response_body) except Exception as e: - raise ValueError(f"Inpainting generation failed: {e}") + raise ValueError(f"Inpainting generation failed: {e}") from e return image_bytes diff --git a/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py b/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py index eabe9d27e..e91cbbedc 100644 --- a/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py +++ b/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py @@ -32,4 +32,4 @@ def try_query(self, query: str, images: list[ImageArtifact]) -> TextArtifact: try: return self.image_query_model_driver.process_output(response_body) except Exception as e: - raise ValueError(f"Output is unable to be processed as returned {e}") + raise ValueError(f"Output is unable to be processed as returned {e}") from e diff --git a/griptape/drivers/prompt/anthropic_prompt_driver.py b/griptape/drivers/prompt/anthropic_prompt_driver.py index 1dd7bb7f9..2c338c84c 100644 --- a/griptape/drivers/prompt/anthropic_prompt_driver.py +++ b/griptape/drivers/prompt/anthropic_prompt_driver.py @@ -77,10 +77,7 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: ) system_messages = prompt_stack.system_messages - if system_messages: - system_message = system_messages[0].to_text() - else: - system_message = None + system_message = system_messages[0].to_text() if system_messages else None return { "model": self.model, diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index f42e57081..b499179ed 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -65,10 +65,7 @@ def run(self, prompt_stack: PromptStack) -> Message: with attempt: self.before_run(prompt_stack) - if self.stream: - result = self.__process_stream(prompt_stack) - else: - result = self.__process_run(prompt_stack) + result = self.__process_stream(prompt_stack) if self.stream else self.__process_run(prompt_stack) self.after_run(result) diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index 331c2c039..b00abd855 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -79,10 +79,7 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: ) system_messages = prompt_stack.system_messages - if system_messages: - preamble = system_messages[0].to_text() - else: - preamble = None + preamble = system_messages[0].to_text() if system_messages else None return { "message": user_message, diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 5a4130a88..72ed2c322 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -64,10 +64,7 @@ def upsert_text_artifact( else: meta["artifact"] = artifact.to_json() - if artifact.embedding: - vector = artifact.embedding - else: - vector = artifact.generate_embedding(self.embedding_driver) + vector = artifact.embedding if artifact.embedding else artifact.generate_embedding(self.embedding_driver) if isinstance(vector, list): return self.upsert_vector(vector, vector_id=vector_id, namespace=namespace, meta=meta, **kwargs) diff --git a/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py b/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py index 73bcc02c7..e60524714 100644 --- a/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py +++ b/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py @@ -90,10 +90,7 @@ def load_entries(self, namespace: Optional[str] = None) -> list[BaseVectorStoreD Entries can optionally be filtered by namespace. """ collection = self.get_collection() - if namespace is None: - cursor = collection.find() - else: - cursor = collection.find({"namespace": namespace}) + cursor = collection.find() if namespace is None else collection.find({"namespace": namespace}) return [ BaseVectorStoreDriver.Entry( diff --git a/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py b/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py index eb33aeb19..28f225ba8 100644 --- a/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py +++ b/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py @@ -48,51 +48,50 @@ def convert_a(self, el, text, convert_as_inline): return super().convert_a(el, text, convert_as_inline) return text - with sync_playwright() as p: - with p.chromium.launch(headless=True) as browser: - page = browser.new_page() + with sync_playwright() as p, p.chromium.launch(headless=True) as browser: + page = browser.new_page() - def skip_loading_images(route): - if route.request.resource_type == "image": - return route.abort() - route.continue_() + def skip_loading_images(route): + if route.request.resource_type == "image": + return route.abort() + route.continue_() - page.route("**/*", skip_loading_images) + page.route("**/*", skip_loading_images) - page.goto(url) + page.goto(url) - # Some websites require a delay before the content is fully loaded - # even after the browser has emitted "load" event. - if self.timeout: - page.wait_for_timeout(self.timeout) + # Some websites require a delay before the content is fully loaded + # even after the browser has emitted "load" event. + if self.timeout: + page.wait_for_timeout(self.timeout) - content = page.content() + content = page.content() - if not content: - raise Exception("can't access URL") + if not content: + raise Exception("can't access URL") - soup = BeautifulSoup(content, "html.parser") + soup = BeautifulSoup(content, "html.parser") - # Remove unwanted elements - exclude_selector = ",".join( - self.exclude_tags + [f".{c}" for c in self.exclude_classes] + [f"#{i}" for i in self.exclude_ids] - ) - if exclude_selector: - for s in soup.select(exclude_selector): - s.extract() + # Remove unwanted elements + exclude_selector = ",".join( + self.exclude_tags + [f".{c}" for c in self.exclude_classes] + [f"#{i}" for i in self.exclude_ids] + ) + if exclude_selector: + for s in soup.select(exclude_selector): + s.extract() - text = OptionalLinksMarkdownConverter().convert_soup(soup) + text = OptionalLinksMarkdownConverter().convert_soup(soup) - # Remove leading and trailing whitespace from the entire text - text = text.strip() + # Remove leading and trailing whitespace from the entire text + text = text.strip() - # Remove trailing whitespace from each line - text = re.sub(r"[ \t]+$", "", text, flags=re.MULTILINE) + # Remove trailing whitespace from each line + text = re.sub(r"[ \t]+$", "", text, flags=re.MULTILINE) - # Indent using 2 spaces instead of tabs - text = re.sub(r"(\n?\s*?)\t", r"\1 ", text) + # Indent using 2 spaces instead of tabs + text = re.sub(r"(\n?\s*?)\t", r"\1 ", text) - # Remove triple+ newlines (keep double newlines for paragraphs) - text = re.sub(r"\n\n+", "\n\n", text) + # Remove triple+ newlines (keep double newlines for paragraphs) + text = re.sub(r"\n\n+", "\n\n", text) - return TextArtifact(text) + return TextArtifact(text) diff --git a/griptape/drivers/web_search/duck_duck_go_web_search_driver.py b/griptape/drivers/web_search/duck_duck_go_web_search_driver.py index 9b90bf5ff..ade6ed85c 100644 --- a/griptape/drivers/web_search/duck_duck_go_web_search_driver.py +++ b/griptape/drivers/web_search/duck_duck_go_web_search_driver.py @@ -26,4 +26,4 @@ def search(self, query: str, **kwargs) -> ListArtifact: ] ) except Exception as e: - raise Exception(f"Error searching '{query}' with DuckDuckGo: {e}") + raise Exception(f"Error searching '{query}' with DuckDuckGo: {e}") from e diff --git a/griptape/loaders/base_text_loader.py b/griptape/loaders/base_text_loader.py index f09b57902..c2840d62f 100644 --- a/griptape/loaders/base_text_loader.py +++ b/griptape/loaders/base_text_loader.py @@ -41,10 +41,7 @@ def load_collection(self, sources: list[Any], *args, **kwargs) -> dict[str, Erro def _text_to_artifacts(self, text: str) -> list[TextArtifact]: artifacts = [] - if self.chunker: - chunks = self.chunker.chunk(text) - else: - chunks = [TextArtifact(text)] + chunks = self.chunker.chunk(text) if self.chunker else [TextArtifact(text)] if self.embedding_driver: for chunk in chunks: diff --git a/griptape/loaders/sql_loader.py b/griptape/loaders/sql_loader.py index c20fb022d..e6979e324 100644 --- a/griptape/loaders/sql_loader.py +++ b/griptape/loaders/sql_loader.py @@ -16,10 +16,7 @@ def load(self, source: str, *args, **kwargs) -> list[CsvRowArtifact]: rows = self.sql_driver.execute_query(source) artifacts = [] - if rows: - chunks = [CsvRowArtifact(row.cells) for row in rows] - else: - chunks = [] + chunks = [CsvRowArtifact(row.cells) for row in rows] if rows else [] if self.embedding_driver: for chunk in chunks: diff --git a/griptape/mixins/rule_mixin.py b/griptape/mixins/rule_mixin.py index a89309a15..0cc696242 100644 --- a/griptape/mixins/rule_mixin.py +++ b/griptape/mixins/rule_mixin.py @@ -49,10 +49,7 @@ def all_rulesets(self) -> list[Ruleset]: if self.rulesets: task_rulesets = self.rulesets elif self.rules: - if structure_rulesets: - task_ruleset_name = self.ADDITIONAL_RULESET_NAME - else: - task_ruleset_name = self.DEFAULT_RULESET_NAME + task_ruleset_name = self.ADDITIONAL_RULESET_NAME if structure_rulesets else self.DEFAULT_RULESET_NAME task_rulesets = [Ruleset(name=task_ruleset_name, rules=self.rules)] diff --git a/griptape/mixins/serializable_mixin.py b/griptape/mixins/serializable_mixin.py index c7a0bf035..667ae752d 100644 --- a/griptape/mixins/serializable_mixin.py +++ b/griptape/mixins/serializable_mixin.py @@ -42,7 +42,7 @@ def get_schema(cls: type[T], subclass_name: Optional[str] = None) -> Schema: @classmethod def from_dict(cls: type[T], data: dict) -> T: - return cast(T, cls.get_schema(subclass_name=data["type"] if "type" in data else None).load(data)) + return cast(T, cls.get_schema(subclass_name=data.get("type")).load(data)) @classmethod def from_json(cls: type[T], data: str) -> T: diff --git a/griptape/schemas/polymorphic_schema.py b/griptape/schemas/polymorphic_schema.py index 534ba8ffc..452e3001f 100644 --- a/griptape/schemas/polymorphic_schema.py +++ b/griptape/schemas/polymorphic_schema.py @@ -58,12 +58,12 @@ def _dump(self, obj, *, update_fields=True, **kwargs): obj_type = self.get_obj_type(obj) if not obj_type: - return (None, {"_schema": "Unknown object class: %s" % obj.__class__.__name__}) + return (None, {"_schema": f"Unknown object class: {obj.__class__.__name__}"}) type_schema = BaseSchema.from_attrs_cls(obj.__class__) if not type_schema: - return None, {"_schema": "Unsupported object type: %s" % obj_type} + return None, {"_schema": f"Unsupported object type: {obj_type}"} schema = type_schema if isinstance(type_schema, Schema) else type_schema() @@ -110,7 +110,7 @@ def load(self, data, *, many=None, partial=None, unknown=None, **kwargs): def _load(self, data, *, partial=None, unknown=None, **kwargs): if not isinstance(data, dict): - raise ValidationError({"_schema": "Invalid data type: %s" % data}) + raise ValidationError({"_schema": f"Invalid data type: {data}"}) data = dict(data) unknown = unknown or self.unknown @@ -121,7 +121,7 @@ def _load(self, data, *, partial=None, unknown=None, **kwargs): type_schema = self.inner_class.get_schema(data_type) if not type_schema: - raise ValidationError({self.type_field: ["Unsupported value: %s" % data_type]}) + raise ValidationError({self.type_field: [f"Unsupported value: {data_type}"]}) schema = type_schema if isinstance(type_schema, Schema) else type_schema() diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 18e7d1284..c7b779590 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -147,15 +147,9 @@ def default_config(self) -> BaseStructureConfig: if self.prompt_driver is not None or self.embedding_driver is not None or self.stream is not None: config = StructureConfig() - if self.prompt_driver is None: - prompt_driver = OpenAiChatPromptDriver(model="gpt-4o") - else: - prompt_driver = self.prompt_driver - - if self.embedding_driver is None: - embedding_driver = OpenAiEmbeddingDriver() - else: - embedding_driver = self.embedding_driver + prompt_driver = OpenAiChatPromptDriver(model="gpt-4o") if self.prompt_driver is None else self.prompt_driver + + embedding_driver = OpenAiEmbeddingDriver() if self.embedding_driver is None else self.embedding_driver if self.stream is not None: prompt_driver.stream = self.stream diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 3689f7330..f7bc2e893 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -89,8 +89,8 @@ def insert_task( try: parent_index = self.tasks.index(parent_task) - except ValueError: - raise ValueError(f"Parent task {parent_task.id} not found in workflow.") + except ValueError as exc: + raise ValueError(f"Parent task {parent_task.id} not found in workflow.") from exc else: if parent_index > last_parent_index: last_parent_index = parent_index diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index fa2aff822..c835f2b84 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -112,11 +112,10 @@ def run(self) -> BaseArtifact: self.structure.logger.error(f"Subtask {self.id}\n{e}", exc_info=True) self.output = ErrorArtifact(str(e), exception=e) - finally: - if self.output is not None: - return self.output - else: - return ErrorArtifact("no tool output") + if self.output is not None: + return self.output + else: + return ErrorArtifact("no tool output") def execute_actions(self, actions: list[Action]) -> list[tuple[str, BaseArtifact]]: with self.futures_executor_fn() as executor: @@ -234,9 +233,8 @@ def __parse_actions(self, actions_matches: list[str]) -> None: tag=action_tag, name=action_name, path=action_path, input=action_input, tool=tool ) - if new_action.tool: - if new_action.input: - self.__validate_action(new_action) + if new_action.tool and new_action.input: + self.__validate_action(new_action) # Don't forget to add it to the subtask actions list! self.actions.append(new_action) diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index be5ff94d8..9aa891e18 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -144,7 +144,7 @@ def execute(self) -> Optional[BaseArtifact]: finally: self.state = BaseTask.State.FINISHED - return self.output + return self.output def can_execute(self) -> bool: return self.state == BaseTask.State.PENDING and all(parent.is_finished() for parent in self.parents) diff --git a/griptape/tasks/prompt_task.py b/griptape/tasks/prompt_task.py index dba542d60..955855e3d 100644 --- a/griptape/tasks/prompt_task.py +++ b/griptape/tasks/prompt_task.py @@ -102,7 +102,7 @@ def _process_task_input( return self._process_task_input(task_input(self)) elif isinstance(task_input, BaseArtifact): return task_input - elif isinstance(task_input, list) or isinstance(task_input, tuple): + elif isinstance(task_input, (list, tuple)): return ListArtifact([self._process_task_input(elem) for elem in task_input]) else: return self._process_task_input(TextArtifact(task_input)) diff --git a/griptape/tokenizers/base_tokenizer.py b/griptape/tokenizers/base_tokenizer.py index 474ccbaa5..212e40058 100644 --- a/griptape/tokenizers/base_tokenizer.py +++ b/griptape/tokenizers/base_tokenizer.py @@ -1,6 +1,6 @@ from __future__ import annotations import logging -from abc import ABC +from abc import ABC, abstractmethod from attrs import define, field, Factory @@ -40,6 +40,7 @@ def count_output_tokens_left(self, text: str) -> int: else: return 0 + @abstractmethod def count_tokens(self, text: str) -> int: ... def _default_max_input_tokens(self) -> int: diff --git a/griptape/utils/chat.py b/griptape/utils/chat.py index 12653ce9e..f78d311f9 100644 --- a/griptape/utils/chat.py +++ b/griptape/utils/chat.py @@ -1,6 +1,9 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Callable + +from typing import TYPE_CHECKING, Callable, Optional + from attrs import Factory, define, field + from griptape.utils.stream import Stream if TYPE_CHECKING: @@ -22,9 +25,9 @@ class Chat: def default_output_fn(self, text: str) -> None: if self.structure.config.prompt_driver.stream: - print(text, end="", flush=True) + print(text, end="", flush=True) # noqa T201 else: - print(text) + print(text) # noqa T201 def start(self) -> None: if self.intro_text: diff --git a/griptape/utils/dict_utils.py b/griptape/utils/dict_utils.py index 64a91d68b..c5f6bb676 100644 --- a/griptape/utils/dict_utils.py +++ b/griptape/utils/dict_utils.py @@ -30,7 +30,7 @@ def dict_merge(dct: dict, merge_dct: dict, add_keys: bool = True) -> dict: if not add_keys: merge_dct = {k: merge_dct[k] for k in set(dct).intersection(set(merge_dct))} - for key in merge_dct.keys(): + for key in merge_dct: if key in dct and isinstance(dct[key], dict): dct[key] = dict_merge(dct[key], merge_dct[key], add_keys=add_keys) else: diff --git a/griptape/utils/import_utils.py b/griptape/utils/import_utils.py index 5e00551f8..0de09b2d1 100644 --- a/griptape/utils/import_utils.py +++ b/griptape/utils/import_utils.py @@ -32,8 +32,8 @@ def import_optional_dependency(name: str) -> Optional[ModuleType]: ) try: module = import_module(name) - except ImportError: - raise ImportError(msg) + except ImportError as exc: + raise ImportError(msg) from exc return module diff --git a/griptape/utils/load_artifact_from_memory.py b/griptape/utils/load_artifact_from_memory.py index 6ab823130..af11b8ae8 100644 --- a/griptape/utils/load_artifact_from_memory.py +++ b/griptape/utils/load_artifact_from_memory.py @@ -14,8 +14,8 @@ def load_artifact_from_memory( try: artifact = [a for a in artifacts if a.name == artifact_name][0] - except IndexError: - raise ValueError(f"artifact {artifact_name} not found in namespace {artifact_namespace}") + except IndexError as exc: + raise ValueError(f"artifact {artifact_name} not found in namespace {artifact_namespace}") from exc if not isinstance(artifact, artifact_type): raise ValueError(f"{artifact.name} is not of type {artifact_type}") diff --git a/pyproject.toml b/pyproject.toml index dc7cb7877..c1b6b934c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -200,7 +200,22 @@ line-length = 120 skip-magic-trailing-comma = true [tool.ruff.lint] -select = ["E4", "E7", "E9", "F", "TID251"] +select = [ + "E", # pycodestyle + "F", # Pyflakes + "UP", # pyupgrade + "B", # flake8-bugbear + "SIM", # flake8-simplify + "TID251", # banned-api + "T201", # print +] +ignore = [ + "UP007", # non-pep604-annotation + "E501", # line-too-long + "B024", # abstract-base-class-without-abstract-method + "B009", # get-attr-with-constant + "B010", # set-attr-with-constant +] [tool.ruff.lint.flake8-tidy-imports.banned-api] "attr".msg = "The attr module is deprecated, use attrs instead." diff --git a/tests/utils/code_blocks.py b/tests/utils/code_blocks.py index 09a4695ba..9cfebb987 100644 --- a/tests/utils/code_blocks.py +++ b/tests/utils/code_blocks.py @@ -1,3 +1,4 @@ +import logging import pathlib import textwrap @@ -13,7 +14,7 @@ def check_py_string(source: str) -> None: try: exec(source, {"__MODULE__": "__main__"}) except Exception: - print(source) + logging.info(source) raise From 731c3bb46272d338fdd2bb8c9ec2b247d3f076f6 Mon Sep 17 00:00:00 2001 From: Vasily Vasinov Date: Mon, 8 Jul 2024 14:07:27 -0600 Subject: [PATCH 142/145] `FootnotePromptResponseRagModule`, `TextLoaderRetrievalRagModule`, and more (#942) --- CHANGELOG.md | 3 ++ .../griptape-framework/engines/rag-engines.md | 4 +- griptape/artifacts/base_artifact.py | 9 +++- griptape/artifacts/boolean_artifact.py | 3 +- griptape/artifacts/text_artifact.py | 3 +- griptape/common/__init__.py | 3 ++ .../contents/base_message_content.py | 9 ++-- griptape/common/reference.py | 14 +++++ .../drivers/rerank/cohere_rerank_driver.py | 5 +- .../vector/base_vector_store_driver.py | 26 +++++---- griptape/engines/rag/modules/__init__.py | 4 ++ .../engines/rag/modules/base_rag_module.py | 8 +-- .../footnote_prompt_response_rag_module.py | 18 +++++++ .../response/prompt_response_rag_module.py | 53 ++++++++----------- .../text_loader_retrieval_rag_module.py | 41 ++++++++++++++ .../vector_store_retrieval_rag_module.py | 4 +- griptape/engines/rag/rag_context.py | 30 +++++++---- griptape/loaders/base_text_loader.py | 18 ++++--- .../task/storage/text_artifact_storage.py | 2 +- griptape/schemas/base_schema.py | 7 ++- .../response/footnote_prompt/system.j2 | 37 +++++++++++++ .../rag/modules/response/prompt/system.j2 | 5 +- griptape/utils/__init__.py | 2 + griptape/utils/dict_utils.py | 9 +++- griptape/utils/reference_utils.py | 12 +++++ tests/mocks/mock_serializable.py | 5 ++ ...est_dynamodb_conversation_memory_driver.py | 6 +-- .../rerank/test_cohere_rerank_driver.py | 11 +++- ...est_in_memory_local_vector_store_driver.py | 10 ---- .../vector/test_local_vector_store_driver.py | 23 ++++++++ ...est_footnote_prompt_response_rag_module.py | 33 ++++++++++++ ...est_metadata_before_response_rag_module.py | 6 ++- .../test_prompt_response_rag_module.py | 6 +-- .../test_text_chunks_rerank_rag_module.py | 14 +++-- .../test_text_loader_retrieval_rag_module.py | 26 +++++++++ .../test_vector_store_retrieval_rag_module.py | 9 ++-- .../rag/modules/test_base_rag_nodule.py | 4 +- tests/unit/engines/rag/test_rag_context.py | 23 ++++++++ tests/unit/mixins/test_seriliazable_mixin.py | 17 ++++-- tests/unit/utils/test_dict_utils.py | 21 ++++++-- tests/utils/test_reference_utils.py | 22 ++++++++ 41 files changed, 450 insertions(+), 115 deletions(-) create mode 100644 griptape/common/reference.py create mode 100644 griptape/engines/rag/modules/response/footnote_prompt_response_rag_module.py create mode 100644 griptape/engines/rag/modules/retrieval/text_loader_retrieval_rag_module.py create mode 100644 griptape/templates/engines/rag/modules/response/footnote_prompt/system.j2 create mode 100644 griptape/utils/reference_utils.py delete mode 100644 tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py create mode 100644 tests/unit/drivers/vector/test_local_vector_store_driver.py create mode 100644 tests/unit/engines/rag/modules/generation/test_footnote_prompt_response_rag_module.py create mode 100644 tests/unit/engines/rag/modules/retrieval/test_text_loader_retrieval_rag_module.py create mode 100644 tests/unit/engines/rag/test_rag_context.py create mode 100644 tests/utils/test_reference_utils.py diff --git a/CHANGELOG.md b/CHANGELOG.md index c02f822ec..65634a8e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,12 +15,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - RAG modules: - Retrieval: - `VectorStoreRetrievalRagModule` for retrieving text chunks from vector stores. + - `TextLoaderRetrievalRagModule` for retrieving data with text loaders in real time. - `TextChunksRerankRagModule` for re-ranking retrieved results. - Response: - `MetadataBeforeResponseRagModule` for appending metadata. - `RulesetsBeforeResponseRagModule` for appending rulesets. - `PromptResponseRagModule` for generating responses based on retrieved text chunks. - `TextChunksResponseRagModule` for responding with retrieved text chunks. + - `FootnotePromptResponseRagModule` for responding with automatic footnotes from text chunk references. - `RagClient` tool for exposing `RagEngines` to LLM agents. - `RagTask` task for including `RagEngines` in any structure. - Rerank drivers: @@ -52,6 +54,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Agent.input` for passing Artifacts as input. - Support for `PromptTask`s to take `TextArtifact`s, `ImageArtifact`s, and `ListArtifact`s as input. - Parameters `sort_key` and `sort_key_value` on `AmazonDynamoDbConversationMemoryDriver` for tables with sort keys. +- `Reference` for supporting artifact citations in loaders and RAG engine modules. ### Changed - **BREAKING**: Moved/renamed `griptape.utils.PromptStack` to `griptape.common.PromptStack`. diff --git a/docs/griptape-framework/engines/rag-engines.md b/docs/griptape-framework/engines/rag-engines.md index c03bf0f47..9d71aaa80 100644 --- a/docs/griptape-framework/engines/rag-engines.md +++ b/docs/griptape-framework/engines/rag-engines.md @@ -20,13 +20,15 @@ No modules implemented yet. #### Retrieval - `TextRetrievalRagModule` is for retrieving text chunks. +- `TextLoaderRetrievalRagModule` is for retrieving data with text loaders in real time. - `TextChunksRerankRagModule` is for re-ranking retrieved results. #### Response - `MetadataBeforeResponseRagModule` is for appending metadata. - `RulesetsBeforeResponseRagModule` is for appending rulesets. - `PromptResponseRagModule` is for generating responses based on retrieved text chunks. -- `TextChunksResponseRagModule` for responding with retrieved text chunks. +- `TextChunksResponseRagModule` is for responding with retrieved text chunks. +- `FootnotePromptResponseRagModule` is for responding with automatic footnotes from text chunk references. ### Example diff --git a/griptape/artifacts/base_artifact.py b/griptape/artifacts/base_artifact.py index ced8e0e1c..626e13f69 100644 --- a/griptape/artifacts/base_artifact.py +++ b/griptape/artifacts/base_artifact.py @@ -1,15 +1,20 @@ from __future__ import annotations from griptape.mixins import SerializableMixin -from typing import Any +from typing import Any, TYPE_CHECKING, Optional import json import uuid from abc import ABC, abstractmethod from attrs import define, field, Factory +if TYPE_CHECKING: + from griptape.common import Reference -@define() + +@define class BaseArtifact(SerializableMixin, ABC): id: str = field(default=Factory(lambda: uuid.uuid4().hex), kw_only=True, metadata={"serializable": True}) + reference: Optional[Reference] = field(default=None, kw_only=True, metadata={"serializable": True}) + meta: dict[str, Any] = field(factory=dict, kw_only=True, metadata={"serializable": True}) name: str = field( default=Factory(lambda self: self.id, takes_self=True), kw_only=True, metadata={"serializable": True} ) diff --git a/griptape/artifacts/boolean_artifact.py b/griptape/artifacts/boolean_artifact.py index a7a84da18..e7e440f45 100644 --- a/griptape/artifacts/boolean_artifact.py +++ b/griptape/artifacts/boolean_artifact.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import Any, Union +from typing import Union from attrs import define, field from griptape.artifacts import BaseArtifact @@ -7,7 +7,6 @@ @define class BooleanArtifact(BaseArtifact): value: bool = field(converter=bool, metadata={"serializable": True}) - meta: dict[str, Any] = field(factory=dict, kw_only=True, metadata={"serializable": True}) @classmethod def parse_bool(cls, value: Union[str, bool]) -> BooleanArtifact: diff --git a/griptape/artifacts/text_artifact.py b/griptape/artifacts/text_artifact.py index 8b83303f0..e8a2bb2a7 100644 --- a/griptape/artifacts/text_artifact.py +++ b/griptape/artifacts/text_artifact.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Optional +from typing import TYPE_CHECKING, Optional from attrs import define, field from griptape.artifacts import BaseArtifact @@ -13,7 +13,6 @@ class TextArtifact(BaseArtifact): value: str = field(converter=str, metadata={"serializable": True}) encoding: str = field(default="utf-8", kw_only=True) encoding_error_handler: str = field(default="strict", kw_only=True) - meta: dict[str, Any] = field(factory=dict, kw_only=True, metadata={"serializable": True}) _embedding: list[float] = field(factory=list, kw_only=True) @property diff --git a/griptape/common/__init__.py b/griptape/common/__init__.py index 2b1189472..6e357323a 100644 --- a/griptape/common/__init__.py +++ b/griptape/common/__init__.py @@ -10,6 +10,8 @@ from .prompt_stack.prompt_stack import PromptStack +from .reference import Reference + __all__ = [ "BaseMessage", "BaseDeltaMessageContent", @@ -20,4 +22,5 @@ "TextMessageContent", "ImageMessageContent", "PromptStack", + "Reference", ] diff --git a/griptape/common/prompt_stack/contents/base_message_content.py b/griptape/common/prompt_stack/contents/base_message_content.py index cd4d5bd92..28a9e317e 100644 --- a/griptape/common/prompt_stack/contents/base_message_content.py +++ b/griptape/common/prompt_stack/contents/base_message_content.py @@ -1,15 +1,14 @@ from __future__ import annotations - from abc import ABC from collections.abc import Sequence - +from typing import TYPE_CHECKING from attrs import define, field - -from griptape.artifacts.base_artifact import BaseArtifact from griptape.mixins import SerializableMixin - from .base_delta_message_content import BaseDeltaMessageContent +if TYPE_CHECKING: + from griptape.artifacts.base_artifact import BaseArtifact + @define class BaseMessageContent(ABC, SerializableMixin): diff --git a/griptape/common/reference.py b/griptape/common/reference.py new file mode 100644 index 000000000..d92c203f9 --- /dev/null +++ b/griptape/common/reference.py @@ -0,0 +1,14 @@ +import uuid +from typing import Optional +from attrs import define, field, Factory +from griptape.mixins import SerializableMixin + + +@define(kw_only=True) +class Reference(SerializableMixin): + id: str = field(default=Factory(lambda: uuid.uuid4().hex), metadata={"serializable": True}) + title: str = field(metadata={"serializable": True}) + authors: list[str] = field(factory=list, metadata={"serializable": True}) + source: Optional[str] = field(default=None, metadata={"serializable": True}) + year: Optional[str] = field(default=None, metadata={"serializable": True}) + url: Optional[str] = field(default=None, metadata={"serializable": True}) diff --git a/griptape/drivers/rerank/cohere_rerank_driver.py b/griptape/drivers/rerank/cohere_rerank_driver.py index 206706476..57a7863d4 100644 --- a/griptape/drivers/rerank/cohere_rerank_driver.py +++ b/griptape/drivers/rerank/cohere_rerank_driver.py @@ -20,12 +20,13 @@ class CohereRerankDriver(BaseRerankDriver): ) def run(self, query: str, artifacts: list[TextArtifact]) -> list[TextArtifact]: + artifacts_dict = {str(hash(a.value)): a for a in artifacts} response = self.client.rerank( model=self.model, query=query, - documents=[a.value for a in artifacts], + documents=[a.value for a in artifacts_dict.values()], return_documents=True, top_n=self.top_n, ) - return [TextArtifact(r.document.text) for r in response.results] + return [artifacts_dict[str(hash(r.document.text))] for r in response.results] diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 72ed2c322..2957d7557 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -37,16 +37,21 @@ def to_artifact(self) -> BaseArtifact: ) def upsert_text_artifacts( - self, artifacts: dict[str, list[TextArtifact]], meta: Optional[dict] = None, **kwargs + self, artifacts: list[TextArtifact] | dict[str, list[TextArtifact]], meta: Optional[dict] = None, **kwargs ) -> None: with self.futures_executor_fn() as executor: - utils.execute_futures_dict( - { - namespace: executor.submit(self.upsert_text_artifact, a, namespace, meta, **kwargs) - for namespace, artifact_list in artifacts.items() - for a in artifact_list - } - ) + if isinstance(artifacts, list): + utils.execute_futures_list( + [executor.submit(self.upsert_text_artifact, a, None, meta, **kwargs) for a in artifacts] + ) + else: + utils.execute_futures_dict( + { + namespace: executor.submit(self.upsert_text_artifact, a, namespace, meta, **kwargs) + for namespace, artifact_list in artifacts.items() + for a in artifact_list + } + ) def upsert_text_artifact( self, @@ -57,7 +62,10 @@ def upsert_text_artifact( **kwargs, ) -> str: meta = {} if meta is None else meta - vector_id = self._get_default_vector_id(artifact.to_text()) if vector_id is None else vector_id + + if vector_id is None: + value = artifact.to_text() if artifact.reference is None else artifact.to_text() + str(artifact.reference) + vector_id = self._get_default_vector_id(value) if self.does_entry_exist(vector_id, namespace): return vector_id diff --git a/griptape/engines/rag/modules/__init__.py b/griptape/engines/rag/modules/__init__.py index cb11551e3..4a180490d 100644 --- a/griptape/engines/rag/modules/__init__.py +++ b/griptape/engines/rag/modules/__init__.py @@ -4,6 +4,7 @@ from .retrieval.base_rerank_rag_module import BaseRerankRagModule from .retrieval.text_chunks_rerank_rag_module import TextChunksRerankRagModule from .retrieval.vector_store_retrieval_rag_module import VectorStoreRetrievalRagModule +from .retrieval.text_loader_retrieval_rag_module import TextLoaderRetrievalRagModule from .response.base_before_response_rag_module import BaseBeforeResponseRagModule from .response.base_after_response_rag_module import BaseAfterResponseRagModule from .response.base_response_rag_module import BaseResponseRagModule @@ -11,6 +12,7 @@ from .response.rulesets_before_response_rag_module import RulesetsBeforeResponseRagModule from .response.metadata_before_response_rag_module import MetadataBeforeResponseRagModule from .response.text_chunks_response_rag_module import TextChunksResponseRagModule +from .response.footnote_prompt_response_rag_module import FootnotePromptResponseRagModule __all__ = [ "BaseRagModule", @@ -19,6 +21,7 @@ "BaseRerankRagModule", "TextChunksRerankRagModule", "VectorStoreRetrievalRagModule", + "TextLoaderRetrievalRagModule", "BaseBeforeResponseRagModule", "BaseAfterResponseRagModule", "BaseResponseRagModule", @@ -26,4 +29,5 @@ "RulesetsBeforeResponseRagModule", "MetadataBeforeResponseRagModule", "TextChunksResponseRagModule", + "FootnotePromptResponseRagModule", ] diff --git a/griptape/engines/rag/modules/base_rag_module.py b/griptape/engines/rag/modules/base_rag_module.py index becd94d9e..9bdcb6372 100644 --- a/griptape/engines/rag/modules/base_rag_module.py +++ b/griptape/engines/rag/modules/base_rag_module.py @@ -19,10 +19,10 @@ def generate_query_prompt_stack(self, system_prompt: str, query: str) -> PromptS ) def get_context_param(self, context: RagContext, key: str) -> Optional[Any]: - return context.module_params.get(self.name, {}).get(key) + return context.module_configs.get(self.name, {}).get(key) def set_context_param(self, context: RagContext, key: str, value: Any) -> None: - if not isinstance(context.module_params.get(self.name), dict): - context.module_params[self.name] = {} + if not isinstance(context.module_configs.get(self.name), dict): + context.module_configs[self.name] = {} - context.module_params[self.name][key] = value + context.module_configs[self.name][key] = value diff --git a/griptape/engines/rag/modules/response/footnote_prompt_response_rag_module.py b/griptape/engines/rag/modules/response/footnote_prompt_response_rag_module.py new file mode 100644 index 000000000..c64c8e5ee --- /dev/null +++ b/griptape/engines/rag/modules/response/footnote_prompt_response_rag_module.py @@ -0,0 +1,18 @@ +from attrs import define + +from griptape import utils +from griptape.artifacts import TextArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import PromptResponseRagModule +from griptape.utils import J2 + + +@define(kw_only=True) +class FootnotePromptResponseRagModule(PromptResponseRagModule): + def default_system_template_generator(self, context: RagContext, artifacts: list[TextArtifact]) -> str: + return J2("engines/rag/modules/response/footnote_prompt/system.j2").render( + text_chunk_artifacts=artifacts, + references=utils.references_from_artifacts(artifacts), + before_system_prompt="\n\n".join(context.before_query), + after_system_prompt="\n\n".join(context.after_query), + ) diff --git a/griptape/engines/rag/modules/response/prompt_response_rag_module.py b/griptape/engines/rag/modules/response/prompt_response_rag_module.py index 7b29de7ee..8552ab904 100644 --- a/griptape/engines/rag/modules/response/prompt_response_rag_module.py +++ b/griptape/engines/rag/modules/response/prompt_response_rag_module.py @@ -11,50 +11,43 @@ class PromptResponseRagModule(BaseResponseRagModule): answer_token_offset: int = field(default=400) prompt_driver: BasePromptDriver = field() - generate_system_template: Callable[[list[str], list[str], list[str]], str] = field( + generate_system_template: Callable[[RagContext, list[TextArtifact]], str] = field( default=Factory(lambda self: self.default_system_template_generator, takes_self=True) ) def run(self, context: RagContext) -> RagContext: query = context.query - before_query = context.before_query - after_query = context.after_query - text_artifact_chunks = context.text_chunks + tokenizer = self.prompt_driver.tokenizer + included_chunks = [] + system_prompt = self.generate_system_template(context, included_chunks) - if query: - tokenizer = self.prompt_driver.tokenizer - text_chunks = [] - system_prompt = self.generate_system_template(text_chunks, before_query, after_query) + for artifact in context.text_chunks: + included_chunks.append(artifact) - for artifact in text_artifact_chunks: - text_chunks.append(artifact.value) + system_prompt = self.generate_system_template(context, included_chunks) + message_token_count = self.prompt_driver.tokenizer.count_tokens( + self.prompt_driver.prompt_stack_to_string(self.generate_query_prompt_stack(system_prompt, query)) + ) - system_prompt = self.generate_system_template(text_chunks, before_query, after_query) - message_token_count = self.prompt_driver.tokenizer.count_tokens( - self.prompt_driver.prompt_stack_to_string(self.generate_query_prompt_stack(system_prompt, query)) - ) + if message_token_count + self.answer_token_offset >= tokenizer.max_input_tokens: + included_chunks.pop() - if message_token_count + self.answer_token_offset >= tokenizer.max_input_tokens: - text_chunks.pop() + system_prompt = self.generate_system_template(context, included_chunks) - system_prompt = self.generate_system_template(text_chunks, before_query, after_query) + break - break + output = self.prompt_driver.run(self.generate_query_prompt_stack(system_prompt, query)).to_artifact() - output = self.prompt_driver.run(self.generate_query_prompt_stack(system_prompt, query)).to_artifact() - - if isinstance(output, TextArtifact): - context.output = output - else: - raise ValueError("Prompt driver did not return a TextArtifact") + if isinstance(output, TextArtifact): + context.output = output + else: + raise ValueError("Prompt driver did not return a TextArtifact") return context - def default_system_template_generator( - self, text_chunks: list[str], before_system_prompt: list, after_system_prompt: list - ) -> str: + def default_system_template_generator(self, context: RagContext, artifacts: list[TextArtifact]) -> str: return J2("engines/rag/modules/response/prompt/system.j2").render( - text_chunks=text_chunks, - before_system_prompt="\n\n".join(before_system_prompt), - after_system_prompt="\n\n".join(after_system_prompt), + text_chunks=[c.to_text() for c in artifacts], + before_system_prompt="\n\n".join(context.before_query), + after_system_prompt="\n\n".join(context.after_query), ) diff --git a/griptape/engines/rag/modules/retrieval/text_loader_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/text_loader_retrieval_rag_module.py new file mode 100644 index 000000000..a37910da6 --- /dev/null +++ b/griptape/engines/rag/modules/retrieval/text_loader_retrieval_rag_module.py @@ -0,0 +1,41 @@ +from __future__ import annotations +import uuid +from typing import TYPE_CHECKING, Sequence, Any, Callable +from attrs import define, field, Factory +from griptape import utils +from griptape.artifacts import TextArtifact, ErrorArtifact +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import BaseRetrievalRagModule + +if TYPE_CHECKING: + from griptape.drivers import BaseVectorStoreDriver + from griptape.loaders import BaseTextLoader + + +@define(kw_only=True) +class TextLoaderRetrievalRagModule(BaseRetrievalRagModule): + loader: BaseTextLoader = field() + vector_store_driver: BaseVectorStoreDriver = field() + source: Any = field() + query_params: dict[str, Any] = field(factory=dict) + process_query_output_fn: Callable[[list[BaseVectorStoreDriver.Entry]], Sequence[TextArtifact]] = field( + default=Factory(lambda: lambda es: [e.to_artifact() for e in es]) + ) + + def run(self, context: RagContext) -> Sequence[TextArtifact]: + namespace = uuid.uuid4().hex + context_source = self.get_context_param(context, "source") + source = self.source if context_source is None else context_source + + query_params = utils.dict_merge(self.query_params, self.get_context_param(context, "query_params")) + + query_params["namespace"] = namespace + + loader_output = self.loader.load(source) + + if isinstance(loader_output, ErrorArtifact): + raise Exception(loader_output.to_text() if loader_output.exception is None else loader_output.exception) + else: + self.vector_store_driver.upsert_text_artifacts({namespace: loader_output}) + + return self.process_query_output_fn(self.vector_store_driver.query(context.query, **query_params)) diff --git a/griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py b/griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py index e91650faf..96d249693 100644 --- a/griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py +++ b/griptape/engines/rag/modules/retrieval/vector_store_retrieval_rag_module.py @@ -1,6 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING, Sequence, Any, Callable from attrs import define, field, Factory +from griptape import utils from griptape.artifacts import TextArtifact from griptape.engines.rag import RagContext from griptape.engines.rag.modules import BaseRetrievalRagModule @@ -18,7 +19,6 @@ class VectorStoreRetrievalRagModule(BaseRetrievalRagModule): ) def run(self, context: RagContext) -> Sequence[TextArtifact]: - context_query_params = self.get_context_param(context, "query_params") - query_params = self.query_params if context_query_params is None else context_query_params + query_params = utils.dict_merge(self.query_params, self.get_context_param(context, "query_params")) return self.process_query_output_fn(self.vector_store_driver.query(context.query, **query_params)) diff --git a/griptape/engines/rag/rag_context.py b/griptape/engines/rag/rag_context.py index ce0d1adc6..c0658ad7b 100644 --- a/griptape/engines/rag/rag_context.py +++ b/griptape/engines/rag/rag_context.py @@ -1,25 +1,35 @@ -from typing import Optional +from __future__ import annotations +from typing import Optional, TYPE_CHECKING from attrs import define, field -from griptape.artifacts import TextArtifact, BaseArtifact + +from griptape import utils +from griptape.common import Reference +from griptape.mixins import SerializableMixin + +if TYPE_CHECKING: + from griptape.artifacts import TextArtifact, BaseArtifact @define(kw_only=True) -class RagContext: +class RagContext(SerializableMixin): """Used by RagEngine stages and module to pass context that individual modules are expected to update in the `run` method. Attributes: query: Query provided by the user. - module_params: Dictionary of dictionary parameters to be used by modules. First key should be the module name and the second a parameter name. + module_configs: Dictionary of module configs. First key should be a module name and the second a dictionary of config parameters. before_query: An optional list of strings to add before the query in generation modules. after_query: An optional list of strings to add after the query in generation modules. text_chunks: A list of text chunks to pass around from the retrieval stage to the generation stage. output: Final output from the generation stage. """ - query: str = field() - module_params: dict[str, dict] = field(factory=dict) - before_query: list[str] = field(factory=list) - after_query: list[str] = field(factory=list) - text_chunks: list[TextArtifact] = field(factory=list) - output: Optional[BaseArtifact] = field(default=None) + query: str = field(metadata={"serializable": True}) + module_configs: dict[str, dict] = field(factory=dict, metadata={"serializable": True}) + before_query: list[str] = field(factory=list, metadata={"serializable": True}) + after_query: list[str] = field(factory=list, metadata={"serializable": True}) + text_chunks: list[TextArtifact] = field(factory=list, metadata={"serializable": True}) + output: Optional[BaseArtifact] = field(default=None, metadata={"serializable": True}) + + def get_references(self) -> list[Reference]: + return utils.references_from_artifacts(self.text_chunks) diff --git a/griptape/loaders/base_text_loader.py b/griptape/loaders/base_text_loader.py index c2840d62f..4f2a93183 100644 --- a/griptape/loaders/base_text_loader.py +++ b/griptape/loaders/base_text_loader.py @@ -1,13 +1,11 @@ from __future__ import annotations - -from abc import ABC +from abc import ABC, abstractmethod from typing import Any, Optional, Union, cast - from attrs import define, field, Factory - from griptape.artifacts import TextArtifact from griptape.artifacts.error_artifact import ErrorArtifact from griptape.chunkers import TextChunker, BaseChunker +from griptape.common import Reference from griptape.drivers import BaseEmbeddingDriver from griptape.loaders import BaseLoader from griptape.tokenizers import OpenAiTokenizer @@ -32,6 +30,10 @@ class BaseTextLoader(BaseLoader, ABC): ) embedding_driver: Optional[BaseEmbeddingDriver] = field(default=None, kw_only=True) encoding: str = field(default="utf-8", kw_only=True) + reference: Optional[Reference] = field(default=None, kw_only=True) + + @abstractmethod + def load(self, source: Any, *args, **kwargs) -> ErrorArtifact | list[TextArtifact]: ... def load_collection(self, sources: list[Any], *args, **kwargs) -> dict[str, ErrorArtifact | list[TextArtifact]]: return cast( @@ -43,12 +45,14 @@ def _text_to_artifacts(self, text: str) -> list[TextArtifact]: chunks = self.chunker.chunk(text) if self.chunker else [TextArtifact(text)] - if self.embedding_driver: - for chunk in chunks: + for chunk in chunks: + if self.embedding_driver: chunk.generate_embedding(self.embedding_driver) - for chunk in chunks: + chunk.reference = self.reference + chunk.encoding = self.encoding + artifacts.append(chunk) return artifacts diff --git a/griptape/memory/task/storage/text_artifact_storage.py b/griptape/memory/task/storage/text_artifact_storage.py index 976a9ea5b..0d135bcbd 100644 --- a/griptape/memory/task/storage/text_artifact_storage.py +++ b/griptape/memory/task/storage/text_artifact_storage.py @@ -52,7 +52,7 @@ def query(self, namespace: str, query: str, metadata: Any = None) -> BaseArtifac result = self.rag_engine.process( RagContext( query=query, - module_params={ + module_configs={ self.retrieval_rag_module_name: { "query_params": { "namespace": namespace, diff --git a/griptape/schemas/base_schema.py b/griptape/schemas/base_schema.py index 1099e1bf7..e199a5c7e 100644 --- a/griptape/schemas/base_schema.py +++ b/griptape/schemas/base_schema.py @@ -59,7 +59,7 @@ def _get_field_for_type(cls, field_type: type) -> fields.Field | fields.Nested: if ABC in field_class.__bases__: return fields.Nested(PolymorphicSchema(inner_class=field_class), allow_none=optional) else: - return fields.Nested(cls.from_attrs_cls(field_type), allow_none=optional) + return fields.Nested(cls.from_attrs_cls(field_class), allow_none=optional) elif cls.is_list_sequence(field_class): if args: return fields.List(cls_or_instance=cls._get_field_for_type(args[0]), allow_none=optional) @@ -105,9 +105,10 @@ def _resolve_types(cls, attrs_cls: type) -> None: # These modules are required to avoid `NameError`s when resolving types. from griptape.drivers import BaseConversationMemoryDriver, BasePromptDriver from griptape.structures import Structure - from griptape.common import PromptStack, Message + from griptape.common import PromptStack, Message, Reference from griptape.tokenizers.base_tokenizer import BaseTokenizer from typing import Any + from griptape.artifacts import BaseArtifact boto3 = import_optional_dependency("boto3") if is_dependency_installed("boto3") else Any Client = import_optional_dependency("cohere").Client if is_dependency_installed("cohere") else Any @@ -123,6 +124,8 @@ def _resolve_types(cls, attrs_cls: type) -> None: "BaseTokenizer": BaseTokenizer, "boto3": boto3, "Client": Client, + "Reference": Reference, + "BaseArtifact": BaseArtifact, }, ) diff --git a/griptape/templates/engines/rag/modules/response/footnote_prompt/system.j2 b/griptape/templates/engines/rag/modules/response/footnote_prompt/system.j2 new file mode 100644 index 000000000..0dcf60fd4 --- /dev/null +++ b/griptape/templates/engines/rag/modules/response/footnote_prompt/system.j2 @@ -0,0 +1,37 @@ +You are an expert Q&A system. Always answer the question using the provided context information, and not prior knowledge. Always be truthful. Don't make up facts. +{% if before_system_prompt %} +{{ before_system_prompt }} + +{% endif %} +Use the following list of excerpts to respond. If there are no excerpts available or excerpts don't have relevant information respond with "I could not find an answer." + +When responding to a question, always reference facts from excerpts whenever possible. Some excerpts might have references associated with them. When referencing facts from excerpts always add a footnote number in square brackets after that fact. At the end of your response compile a list of footnotes. Always include a reference title and other available reference information. Make sure footnotes are unique and have no duplicates. +{% if references|length > 0 %} + +## References + +{% for reference in references %} +{{ reference }} +{% endfor %} +{% endif %} +{% if text_chunk_artifacts|length > 0 %} + +## Excerpts + +{% for artifact in text_chunk_artifacts %} +{% if artifact.reference %} +Excerpt (Reference ID: {{ artifact.reference.id }}): """ +{{ artifact.to_text() }} +{% else %} +Excerpt: """ +{{ artifact.to_text() }} +{% endif %} +""" +{% endfor %} +{% if after_system_prompt %} + +{{ after_system_prompt }} +{% endif %} +{% else %} +No excerpt available. +{% endif %} \ No newline at end of file diff --git a/griptape/templates/engines/rag/modules/response/prompt/system.j2 b/griptape/templates/engines/rag/modules/response/prompt/system.j2 index 4b06f3e8c..1fa9d8c12 100644 --- a/griptape/templates/engines/rag/modules/response/prompt/system.j2 +++ b/griptape/templates/engines/rag/modules/response/prompt/system.j2 @@ -1,11 +1,14 @@ +You are an expert Q&A system. Always answer the question using the provided context information, and not prior knowledge. Always be truthful. Don't make up facts. You can answer questions by searching through text chunks. {% if before_system_prompt %} {{ before_system_prompt }} {% endif %} -Always be truthful. Don't make up facts. You can answer questions by searching through text chunks. Use the following list of text chunks to respond. If there are no text chunks available or text chunks don't have relevant information respond with "I could not find an answer." +Use the following list of text chunks to respond. If there are no text chunks available or text chunks don't have relevant information respond with "I could not find an answer." {% if text_chunks and text_chunks|length > 0 %} +## Text Chunks {% for chunk in text_chunks %} + Text chunk: """ {{ chunk }} """ diff --git a/griptape/utils/__init__.py b/griptape/utils/__init__.py index a84703f39..ceb19547e 100644 --- a/griptape/utils/__init__.py +++ b/griptape/utils/__init__.py @@ -17,6 +17,7 @@ from .load_artifact_from_memory import load_artifact_from_memory from .deprecation import deprecation_warn from .structure_visualizer import StructureVisualizer +from .reference_utils import references_from_artifacts def minify_json(value: str) -> str: @@ -45,4 +46,5 @@ def minify_json(value: str) -> str: "load_file", "load_files", "StructureVisualizer", + "references_from_artifacts", ] diff --git a/griptape/utils/dict_utils.py b/griptape/utils/dict_utils.py index c5f6bb676..a396bf7d1 100644 --- a/griptape/utils/dict_utils.py +++ b/griptape/utils/dict_utils.py @@ -1,3 +1,6 @@ +from typing import Optional + + def remove_null_values_in_dict_recursively(d: dict) -> dict: if isinstance(d, dict): return {k: remove_null_values_in_dict_recursively(v) for k, v in d.items() if v is not None} @@ -5,7 +8,7 @@ def remove_null_values_in_dict_recursively(d: dict) -> dict: return d -def dict_merge(dct: dict, merge_dct: dict, add_keys: bool = True) -> dict: +def dict_merge(dct: Optional[dict], merge_dct: Optional[dict], add_keys: bool = True) -> dict: """Recursive dict merge. Inspired by :meth:``dict.update()``, instead of updating only top-level keys, dict_merge recurses down into dicts nested to an arbitrary depth, updating keys. The ``merge_dct`` is merged into @@ -26,7 +29,11 @@ def dict_merge(dct: dict, merge_dct: dict, add_keys: bool = True) -> dict: Returns: dict: updated dict """ + dct = {} if dct is None else dct + merge_dct = {} if merge_dct is None else merge_dct + dct = dct.copy() + if not add_keys: merge_dct = {k: merge_dct[k] for k in set(dct).intersection(set(merge_dct))} diff --git a/griptape/utils/reference_utils.py b/griptape/utils/reference_utils.py new file mode 100644 index 000000000..761ee3d24 --- /dev/null +++ b/griptape/utils/reference_utils.py @@ -0,0 +1,12 @@ +from griptape.artifacts import TextArtifact +from griptape.common import Reference + + +def references_from_artifacts(artifacts: list[TextArtifact]) -> list[Reference]: + references = [] + + for a in artifacts: + if a.reference is not None and a.reference not in references: + references.append(a.reference) + + return references diff --git a/tests/mocks/mock_serializable.py b/tests/mocks/mock_serializable.py index 4de173b07..b02c071aa 100644 --- a/tests/mocks/mock_serializable.py +++ b/tests/mocks/mock_serializable.py @@ -5,7 +5,12 @@ @define class MockSerializable(SerializableMixin): + @define + class NestedMockSerializable(SerializableMixin): + foo: str = field(default="bar", kw_only=True, metadata={"serializable": True}) + foo: str = field(default="bar", kw_only=True, metadata={"serializable": True}) bar: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) baz: Optional[list[int]] = field(default=None, kw_only=True, metadata={"serializable": True}) secret: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) + nested: Optional[NestedMockSerializable] = field(default=None, kw_only=True, metadata={"serializable": True}) diff --git a/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py index df0ca4d3c..ba79a4def 100644 --- a/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py +++ b/tests/unit/drivers/memory/conversation/test_dynamodb_conversation_memory_driver.py @@ -72,7 +72,7 @@ def test_store_with_sort_key(self): value_attribute_key=self.VALUE_ATTRIBUTE_KEY, partition_key_value=self.PARTITION_KEY_VALUE, sort_key="sortKey", - sort_key_value="foo" + sort_key_value="foo", ) memory = ConversationMemory(driver=memory_driver) pipeline = Pipeline(prompt_driver=prompt_driver, conversation_memory=memory) @@ -120,7 +120,7 @@ def test_load_with_sort_key(self): value_attribute_key=self.VALUE_ATTRIBUTE_KEY, partition_key_value=self.PARTITION_KEY_VALUE, sort_key="sortKey", - sort_key_value="foo" + sort_key_value="foo", ) memory = ConversationMemory(driver=memory_driver) pipeline = Pipeline(prompt_driver=prompt_driver, conversation_memory=memory) @@ -135,4 +135,4 @@ def test_load_with_sort_key(self): assert new_memory.type == "ConversationMemory" assert len(new_memory.runs) == 2 assert new_memory.runs[0].input.value == "test" - assert new_memory.runs[0].output.value == "mock output" \ No newline at end of file + assert new_memory.runs[0].output.value == "mock output" diff --git a/tests/unit/drivers/rerank/test_cohere_rerank_driver.py b/tests/unit/drivers/rerank/test_cohere_rerank_driver.py index f7b050551..952546e5a 100644 --- a/tests/unit/drivers/rerank/test_cohere_rerank_driver.py +++ b/tests/unit/drivers/rerank/test_cohere_rerank_driver.py @@ -1,5 +1,5 @@ -from unittest.mock import Mock import pytest +from cohere import RerankResponseResultsItemDocument, RerankResponseResultsItem from griptape.artifacts import TextArtifact from griptape.drivers import CohereRerankDriver @@ -8,7 +8,14 @@ class TestCohereRerankDriver: @pytest.fixture def mock_client(self, mocker): mock_client = mocker.patch("cohere.Client").return_value - mock_client.rerank.return_value.results = [Mock(), Mock()] + mock_client.rerank.return_value.results = [ + RerankResponseResultsItem( + index=1, relevance_score=1.0, document=RerankResponseResultsItemDocument(text="foo") + ), + RerankResponseResultsItem( + index=2, relevance_score=0.5, document=RerankResponseResultsItemDocument(text="bar") + ), + ] return mock_client diff --git a/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py b/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py deleted file mode 100644 index cb8fcbefe..000000000 --- a/tests/unit/drivers/vector/test_in_memory_local_vector_store_driver.py +++ /dev/null @@ -1,10 +0,0 @@ -import pytest -from griptape.drivers import LocalVectorStoreDriver -from tests.mocks.mock_embedding_driver import MockEmbeddingDriver -from tests.unit.drivers.vector.test_base_local_vector_store_driver import BaseLocalVectorStoreDriver - - -class TestInMemoryLocalVectorStoreDriver(BaseLocalVectorStoreDriver): - @pytest.fixture - def driver(self): - return LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) diff --git a/tests/unit/drivers/vector/test_local_vector_store_driver.py b/tests/unit/drivers/vector/test_local_vector_store_driver.py new file mode 100644 index 000000000..937f14ece --- /dev/null +++ b/tests/unit/drivers/vector/test_local_vector_store_driver.py @@ -0,0 +1,23 @@ +import pytest +from griptape.artifacts import TextArtifact +from griptape.drivers import LocalVectorStoreDriver +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver +from tests.unit.drivers.vector.test_base_local_vector_store_driver import BaseLocalVectorStoreDriver + + +class TestLocalVectorStoreDriver(BaseLocalVectorStoreDriver): + @pytest.fixture + def driver(self): + return LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) + + def test_upsert_text_artifacts_dict(self, driver): + driver.upsert_text_artifacts({"foo": [TextArtifact("bar"), TextArtifact("baz")], "bar": [TextArtifact("bar")]}) + + assert len(driver.load_artifacts("foo")) == 2 + assert len(driver.load_artifacts("bar")) == 1 + + def test_upsert_text_artifacts_list(self, driver): + driver.upsert_text_artifacts([TextArtifact("bar"), TextArtifact("baz")]) + + assert len(driver.load_artifacts("foo")) == 0 + assert len(driver.load_artifacts()) == 2 diff --git a/tests/unit/engines/rag/modules/generation/test_footnote_prompt_response_rag_module.py b/tests/unit/engines/rag/modules/generation/test_footnote_prompt_response_rag_module.py new file mode 100644 index 000000000..e5ba50a5b --- /dev/null +++ b/tests/unit/engines/rag/modules/generation/test_footnote_prompt_response_rag_module.py @@ -0,0 +1,33 @@ +import pytest +from griptape.artifacts import TextArtifact +from griptape.common import Reference +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import FootnotePromptResponseRagModule +from tests.mocks.mock_prompt_driver import MockPromptDriver + + +class TestFootnotePromptResponseRagModule: + @pytest.fixture + def module(self): + return FootnotePromptResponseRagModule(prompt_driver=MockPromptDriver()) + + def test_run(self, module): + assert module.run(RagContext(query="test")).output.value == "mock output" + + def test_prompt(self, module): + system_message = module.default_system_template_generator( + RagContext(query="test", before_query=["*RULESET*", "*META*"]), + artifacts=[ + TextArtifact("*TEXT SEGMENT 1*", reference=Reference(title="source 1")), + TextArtifact("*TEXT SEGMENT 2*", reference=Reference(title="source 2")), + TextArtifact("*TEXT SEGMENT 3*"), + ], + ) + + assert "*RULESET*" in system_message + assert "*META*" in system_message + assert "*TEXT SEGMENT 1*" in system_message + assert "*TEXT SEGMENT 2*" in system_message + assert "*TEXT SEGMENT 3*" in system_message + assert "source 1" in system_message + assert "source 2" in system_message diff --git a/tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py b/tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py index 43927bd8a..9519c8017 100644 --- a/tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py +++ b/tests/unit/engines/rag/modules/generation/test_metadata_before_response_rag_module.py @@ -6,7 +6,9 @@ class TestMetadataBeforeResponseRagModule: def test_run(self): module = MetadataBeforeResponseRagModule(name="foo") - assert "foo" in module.run(RagContext(module_params={"foo": {"metadata": "foo"}}, query="test")).before_query[0] + assert ( + "foo" in module.run(RagContext(module_configs={"foo": {"metadata": "foo"}}, query="test")).before_query[0] + ) def test_run_with_override(self): module = MetadataBeforeResponseRagModule(name="foo", metadata="bar") @@ -14,6 +16,6 @@ def test_run_with_override(self): assert ( "bar" in module.run( - RagContext(module_params={"foo": {"query_params": {"metadata": "foo"}}}, query="test") + RagContext(module_configs={"foo": {"query_params": {"metadata": "foo"}}}, query="test") ).before_query[0] ) diff --git a/tests/unit/engines/rag/modules/generation/test_prompt_response_rag_module.py b/tests/unit/engines/rag/modules/generation/test_prompt_response_rag_module.py index d8835bbe4..f262d6d06 100644 --- a/tests/unit/engines/rag/modules/generation/test_prompt_response_rag_module.py +++ b/tests/unit/engines/rag/modules/generation/test_prompt_response_rag_module.py @@ -1,4 +1,5 @@ import pytest +from griptape.artifacts import TextArtifact from griptape.engines.rag import RagContext from griptape.engines.rag.modules import PromptResponseRagModule from tests.mocks.mock_prompt_driver import MockPromptDriver @@ -14,9 +15,8 @@ def test_run(self, module): def test_prompt(self, module): system_message = module.default_system_template_generator( - text_chunks=["*TEXT SEGMENT 1*", "*TEXT SEGMENT 2*"], - before_system_prompt=["*RULESET*", "*META*"], - after_system_prompt=[], + RagContext(query="test", before_query=["*RULESET*", "*META*"], after_query=[]), + artifacts=[TextArtifact("*TEXT SEGMENT 1*"), TextArtifact("*TEXT SEGMENT 2*")], ) assert "*RULESET*" in system_message diff --git a/tests/unit/engines/rag/modules/retrieval/test_text_chunks_rerank_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_text_chunks_rerank_rag_module.py index 838f02e37..fa3bfecb2 100644 --- a/tests/unit/engines/rag/modules/retrieval/test_text_chunks_rerank_rag_module.py +++ b/tests/unit/engines/rag/modules/retrieval/test_text_chunks_rerank_rag_module.py @@ -1,5 +1,6 @@ -from unittest.mock import Mock import pytest +from cohere import RerankResponseResultsItem, RerankResponseResultsItemDocument +from griptape.artifacts import TextArtifact from griptape.drivers import CohereRerankDriver from griptape.engines.rag import RagContext from griptape.engines.rag.modules import TextChunksRerankRagModule @@ -9,12 +10,19 @@ class TestTextChunksRerankRagModule: @pytest.fixture def mock_client(self, mocker): mock_client = mocker.patch("cohere.Client").return_value - mock_client.rerank.return_value.results = [Mock(), Mock()] + mock_client.rerank.return_value.results = [ + RerankResponseResultsItem( + index=1, relevance_score=1.0, document=RerankResponseResultsItemDocument(text="foo") + ), + RerankResponseResultsItem( + index=2, relevance_score=0.5, document=RerankResponseResultsItemDocument(text="bar") + ), + ] return mock_client def test_run(self, mock_client): module = TextChunksRerankRagModule(rerank_driver=CohereRerankDriver(api_key="api-key")) - result = module.run(RagContext(query="test")) + result = module.run(RagContext(query="test", text_chunks=[TextArtifact("foo"), TextArtifact("bar")])) assert len(result) == 2 diff --git a/tests/unit/engines/rag/modules/retrieval/test_text_loader_retrieval_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_text_loader_retrieval_rag_module.py new file mode 100644 index 000000000..7c69f674a --- /dev/null +++ b/tests/unit/engines/rag/modules/retrieval/test_text_loader_retrieval_rag_module.py @@ -0,0 +1,26 @@ +import pytest + +from griptape.drivers import LocalVectorStoreDriver +from griptape.engines.rag import RagContext +from griptape.engines.rag.modules import TextLoaderRetrievalRagModule +from griptape.loaders import WebLoader +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver + +MAX_TOKENS = 50 + + +class TestTextLoaderRetrievalRagModule: + @pytest.fixture(autouse=True) + def mock_trafilatura_fetch_url(self, mocker): + mocker.patch("trafilatura.fetch_url", return_value="foobar") + + def test_run(self): + embedding_driver = MockEmbeddingDriver() + + module = TextLoaderRetrievalRagModule( + loader=WebLoader(max_tokens=MAX_TOKENS, embedding_driver=embedding_driver), + vector_store_driver=LocalVectorStoreDriver(embedding_driver=embedding_driver), + source="https://www.griptape.ai", + ) + + assert module.run(RagContext(query="foo"))[0].value == "foobar" diff --git a/tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py b/tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py index 3a01b3eaa..9fecc3c0e 100644 --- a/tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py +++ b/tests/unit/engines/rag/modules/retrieval/test_vector_store_retrieval_rag_module.py @@ -1,4 +1,5 @@ from griptape.artifacts import TextArtifact +from griptape.common import Reference from griptape.drivers import LocalVectorStoreDriver from griptape.engines.rag import RagContext from griptape.engines.rag.modules import VectorStoreRetrievalRagModule @@ -10,7 +11,9 @@ def test_run_without_namespace(self): vector_store_driver = LocalVectorStoreDriver(embedding_driver=MockEmbeddingDriver()) module = VectorStoreRetrievalRagModule(vector_store_driver=vector_store_driver) - vector_store_driver.upsert_text_artifact(TextArtifact("foobar1"), namespace="test") + vector_store_driver.upsert_text_artifact( + TextArtifact("foobar1", reference=Reference(title="boo")), namespace="test" + ) vector_store_driver.upsert_text_artifact(TextArtifact("foobar2"), namespace="test") result = module.run(RagContext(query="test")) @@ -45,13 +48,13 @@ def test_run_with_namespace_overrides(self): result1 = module.run( RagContext( - query="test", module_params={"VectorStoreRetrievalRagModule": {"query_params": {"namespace": "empty"}}} + query="test", module_configs={"VectorStoreRetrievalRagModule": {"query_params": {"namespace": "empty"}}} ) ) result2 = module.run( RagContext( - query="test", module_params={"VectorStoreRetrievalRagModule": {"query_params": {"namespace": "test"}}} + query="test", module_configs={"VectorStoreRetrievalRagModule": {"query_params": {"namespace": "test"}}} ) ) diff --git a/tests/unit/engines/rag/modules/test_base_rag_nodule.py b/tests/unit/engines/rag/modules/test_base_rag_nodule.py index 0fc415e0e..be1fda861 100644 --- a/tests/unit/engines/rag/modules/test_base_rag_nodule.py +++ b/tests/unit/engines/rag/modules/test_base_rag_nodule.py @@ -14,7 +14,7 @@ def test_get_context_param(self): module = MockRagModule(name="boo") context = RagContext(query="test") - context.module_params["boo"] = {"foo": "bar"} + context.module_configs["boo"] = {"foo": "bar"} assert module.get_context_param(context, "foo") == "bar" @@ -24,4 +24,4 @@ def test_set_context_param(self): module.set_context_param(context, "foo", "bar") - assert context.module_params["boo"]["foo"] == "bar" + assert context.module_configs["boo"]["foo"] == "bar" diff --git a/tests/unit/engines/rag/test_rag_context.py b/tests/unit/engines/rag/test_rag_context.py new file mode 100644 index 000000000..7eba86683 --- /dev/null +++ b/tests/unit/engines/rag/test_rag_context.py @@ -0,0 +1,23 @@ +from griptape.artifacts import TextArtifact +from griptape.common import Reference +from griptape.engines.rag import RagContext + + +class TestRagContext: + def test_get_references(self): + reference1 = Reference(title="foo") + reference2 = Reference(title="bar") + context = RagContext( + query="foo", + text_chunks=[ + TextArtifact("foo", reference=reference1), + TextArtifact("foo", reference=reference1), + TextArtifact("foo"), + TextArtifact("foo", reference=reference2), + ], + ) + references = context.get_references() + + assert len(references) == 2 + assert references[0].id == reference1.id + assert references[1].id == reference2.id diff --git a/tests/unit/mixins/test_seriliazable_mixin.py b/tests/unit/mixins/test_seriliazable_mixin.py index d733d7858..1704000e3 100644 --- a/tests/unit/mixins/test_seriliazable_mixin.py +++ b/tests/unit/mixins/test_seriliazable_mixin.py @@ -23,16 +23,22 @@ def test_from_json(self): def test_str(self): assert str(MockSerializable()) == json.dumps( - {"type": "MockSerializable", "foo": "bar", "bar": None, "baz": None} + {"type": "MockSerializable", "foo": "bar", "bar": None, "baz": None, "nested": None} ) def test_to_json(self): assert MockSerializable().to_json() == json.dumps( - {"type": "MockSerializable", "foo": "bar", "bar": None, "baz": None} + {"type": "MockSerializable", "foo": "bar", "bar": None, "baz": None, "nested": None} ) def test_to_dict(self): - assert MockSerializable().to_dict() == {"type": "MockSerializable", "foo": "bar", "bar": None, "baz": None} + assert MockSerializable().to_dict() == { + "type": "MockSerializable", + "foo": "bar", + "bar": None, + "baz": None, + "nested": None, + } def test_import_class_rec(self): assert ( @@ -47,3 +53,8 @@ def test_import_class_rec(self): with pytest.raises(ValueError): MockSerializable._import_cls_rec("griptape.memory.task", "ConversationMemory") + + def test_nested_optional_serializable(self): + assert MockSerializable(nested=None).to_dict().get("nested") is None + + assert MockSerializable(nested=MockSerializable.NestedMockSerializable()).to_dict()["nested"]["foo"] == "bar" diff --git a/tests/unit/utils/test_dict_utils.py b/tests/unit/utils/test_dict_utils.py index ba6d5470d..958e0295b 100644 --- a/tests/unit/utils/test_dict_utils.py +++ b/tests/unit/utils/test_dict_utils.py @@ -10,7 +10,7 @@ def test_remove_null_values_in_dict_recursively(self): assert remove_null_values_in_dict_recursively(dict_with_nones) == dict_without_nones - def test_merges_dicts(self): + def test_dict_merge_merges_dicts(self): a = {"a": 1, "b": {"b1": 2, "b2": 3}} b = {"a": 1, "b": {"b1": 4}} @@ -18,7 +18,22 @@ def test_merges_dicts(self): assert dict_merge(a, b)["b"]["b2"] == 3 assert dict_merge(a, b)["b"]["b1"] == 4 - def test_inserts_new_keys(self): + def test_dict_merge_works_with_optionals(self): + a = {"a": 1, "b": {"b1": 2, "b2": 3}} + b = None + + assert dict_merge(a, b)["a"] == 1 + assert dict_merge(a, b)["b"]["b2"] == 3 + assert dict_merge(a, b)["b"]["b1"] == 2 + + a = None + b = {"a": 1, "b": {"b1": 2, "b2": 3}} + + assert dict_merge(a, b)["a"] == 1 + assert dict_merge(a, b)["b"]["b2"] == 3 + assert dict_merge(a, b)["b"]["b1"] == 2 + + def test_dict_merge_inserts_new_keys(self): a = {"a": 1, "b": {"b1": 2, "b2": 3}} b = {"a": 1, "b": {"b1": 4, "b3": 5}, "c": 6} @@ -28,7 +43,7 @@ def test_inserts_new_keys(self): assert dict_merge(a, b)["b"]["b3"] == 5 assert dict_merge(a, b)["c"] == 6 - def test_does_not_insert_new_keys(self): + def test_dict_merge_does_not_insert_new_keys(self): a = {"a": 1, "b": {"b1": 2, "b2": 3}} b = {"a": 1, "b": {"b1": 4, "b3": 5}, "c": 6} diff --git a/tests/utils/test_reference_utils.py b/tests/utils/test_reference_utils.py new file mode 100644 index 000000000..c3491f5d0 --- /dev/null +++ b/tests/utils/test_reference_utils.py @@ -0,0 +1,22 @@ +from griptape.artifacts import TextArtifact +from griptape.common import Reference +from griptape.engines.rag.modules import PromptResponseRagModule +from tests.mocks.mock_prompt_driver import MockPromptDriver + + +class TestReferenceUtils: + def test_references_from_artifacts(self): + module = PromptResponseRagModule(prompt_driver=MockPromptDriver()) + reference1 = Reference(title="foo") + reference2 = Reference(title="bar") + artifacts = [ + TextArtifact("foo", reference=reference1), + TextArtifact("foo", reference=reference1), + TextArtifact("foo"), + TextArtifact("foo", reference=reference2), + ] + references = module.references_from_artifacts(artifacts) + + assert len(references) == 2 + assert references[0].id == reference1.id + assert references[1].id == reference2.id From bb158eae9ec106facc2e11164552a9c778981006 Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:21:34 -0400 Subject: [PATCH 143/145] Update certifi (#944) Co-authored-by: Collin Dutter --- poetry.lock | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/poetry.lock b/poetry.lock index 83d2d5632..da5b152d2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -757,13 +757,13 @@ files = [ [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] @@ -3466,6 +3466,7 @@ description = "Nvidia JIT LTO Library" optional = true python-versions = ">=3" files = [ + {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83"}, {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, ] @@ -4709,7 +4710,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -4717,15 +4717,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -4742,7 +4735,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -4750,7 +4742,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, From c9b92ea3109cbe936091d3640921dde0a82a92a9 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 9 Jul 2024 09:58:53 -0700 Subject: [PATCH 144/145] Fix azure streaming (#946) --- griptape/drivers/prompt/azure_openai_chat_prompt_driver.py | 6 +++++- griptape/drivers/prompt/openai_chat_prompt_driver.py | 5 ++--- .../drivers/prompt/test_azure_openai_chat_prompt_driver.py | 7 +------ 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py index 50e9effe6..64145b1a9 100644 --- a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py @@ -44,6 +44,10 @@ class AzureOpenAiChatPromptDriver(OpenAiChatPromptDriver): def _base_params(self, prompt_stack: PromptStack) -> dict: params = super()._base_params(prompt_stack) # TODO: Add `seed` parameter once Azure supports it. - del params["seed"] + if "seed" in params: + del params["seed"] + # TODO: Add `stream_options` parameter once Azure supports it. + if "stream_options" in params: + del params["stream_options"] return params diff --git a/griptape/drivers/prompt/openai_chat_prompt_driver.py b/griptape/drivers/prompt/openai_chat_prompt_driver.py index e1e046d11..a89b4eb57 100644 --- a/griptape/drivers/prompt/openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/openai_chat_prompt_driver.py @@ -90,9 +90,7 @@ def try_run(self, prompt_stack: PromptStack) -> Message: raise Exception("Completion with more than one choice is not supported yet.") def try_stream(self, prompt_stack: PromptStack) -> Iterator[DeltaMessage]: - result = self.client.chat.completions.create( - **self._base_params(prompt_stack), stream=True, stream_options={"include_usage": True} - ) + result = self.client.chat.completions.create(**self._base_params(prompt_stack), stream=True) for chunk in result: if chunk.usage is not None: @@ -124,6 +122,7 @@ def _base_params(self, prompt_stack: PromptStack) -> dict: "seed": self.seed, **({"stop": self.tokenizer.stop_sequences} if self.tokenizer.stop_sequences else {}), **({"max_tokens": self.max_tokens} if self.max_tokens is not None else {}), + **({"stream_options": {"include_usage": True}} if self.stream else {}), } if self.response_format == "json_object": diff --git a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py index 92544a74e..378ecc3da 100644 --- a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py @@ -57,12 +57,7 @@ def test_try_stream_run(self, mock_chat_completion_stream_create, prompt_stack, # Then mock_chat_completion_stream_create.assert_called_once_with( - model=driver.model, - temperature=driver.temperature, - user=driver.user, - stream=True, - messages=messages, - stream_options={"include_usage": True}, + model=driver.model, temperature=driver.temperature, user=driver.user, stream=True, messages=messages ) assert event.content.text == "model-output" From 669811fa626db5bc6986049de01ce438f726c8cb Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 9 Jul 2024 10:32:06 -0700 Subject: [PATCH 145/145] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65634a8e1..9e34ac3a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased + +## [0.28.0] - 2024-07-09 ### Added - `RagEngine` is an abstraction for implementing modular RAG pipelines. - `RagContext` is a container object for passing around RAG context.

  • *f*lUOuBzJfL3N03OxWtIQ~6hM;)+faR8#u%! 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 z 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%0Du-w?qXEEnQkXi?5Q$&QUiY-A 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%0D3;D8>budC^? zdto;ins-{kKaSqvA8-bNoN=YCvwzS+Ck7K3W$UxCL`i1UTo3pfg6FPO6)6e!y8?RH<9duf^V747u; z+mWz$GM}HTx>3N?cFopEW&$Q}p6fdMKHq&3?33ynAI)3`UeBuMw;ZUOX{XXnpl%n= zyr)5KeQ1E-_G;AUS5_p^3Ivb?y*c}CV4s9izPNw4;K%mptHI+=>S0W z?Aga8s4By$5jSnQWXA1CG;3yWbE`C(R7DR3XhL4$BSZ#<41nCLdSAG$9=JTJ(MNWL z&9ouZMiUvBQD+dWCT$)x7;F);p$|HNdRS{>bTf*$1<6f6R%PF x>Y@a5g-Z(ZDt}tKM$ None: + """Exec the python source given in a new module namespace + + Does not return anything, but exceptions raised by the source + will propagate out unmodified + """ + try: + exec(source, {"__MODULE__": "__main__"}) + except Exception: + print(source) + raise + + +def check_code_block(block: str, lang: str = "python") -> str: + """Cleans the found codeblock and checks if the proglang is correct. + + Returns an empty string if the codeblock is deemed invalid. + + Args: + block: the code block to analyse + lang: if not None, the language that is assigned to the codeblock + """ + first_line = block.split("\n")[0] + if lang: + line_elements = first_line[3:].split(" ", 2) + if len(line_elements) == 1: + block_lang = line_elements[0] + title_value = None + elif len(line_elements) == 2: + block_lang, title = line_elements + title_elements = title.replace(" ", "").split("=", 2) + if len(title_elements) == 2: + _, title_value = title_elements + else: + title_value = None + else: + block_lang = None + title_value = None + + if block_lang != lang: + return "" + if title_value == '"PYTEST_IGNORE"': + return "" + return "\n".join(block.split("\n")[1:]) + + +def get_code_blocks(docstring: str, lang: str = "python") -> list[str]: + """Given a docstring, grab all the markdown codeblocks found in docstring. + + Args: + docstring: the docstring to analyse + lang: if not None, the language that is assigned to the codeblock + """ + docstring = textwrap.dedent(docstring) + in_block = False + block = "" + codeblocks = [] + for line in docstring.split("\n"): + if line.startswith("```"): + if in_block: + codeblocks.append(check_code_block(block, lang=lang)) + block = "" + in_block = not in_block + if in_block: + block += line + "\n" + return [c for c in codeblocks if c != ""] + + +def get_all_code_blocks(path: str) -> list[dict]: + return [ + {"id": f"{str(fpath)}-{block_num + 1}", "code": code_block} + for fpath in pathlib.Path().glob(path) + for block_num, code_block in enumerate(get_code_blocks(fpath.read_text())) + ] diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index c230501a9..e9972660f 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -72,37 +72,37 @@ class TesterPromptDriverOption: ), "AZURE_CHAT_35_TURBO": TesterPromptDriverOption( prompt_driver=AzureOpenAiChatPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY"], + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], model="gpt-35-turbo", azure_deployment=os.environ["AZURE_OPENAI_35_TURBO_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_API_BASE"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], ), enabled=True, ), - "AZURE_CHAT_35_TURBO_16k": TesterPromptDriverOption( + "AZURE_CHAT_35_TURBO_16K": TesterPromptDriverOption( prompt_driver=AzureOpenAiChatPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY"], + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], model="gpt-35-turbo-16k", - azure_deployment=os.environ["AZURE_OPENAI_35_TURBO_16k_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_API_BASE"], + azure_deployment=os.environ["AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], ), enabled=True, ), "AZURE_CHAT_4": TesterPromptDriverOption( prompt_driver=AzureOpenAiChatPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY"], + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], model="gpt-4", azure_deployment=os.environ["AZURE_OPENAI_4_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_API_BASE"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], ), enabled=True, ), - "AZURE_CHAT_4_32k": TesterPromptDriverOption( + "AZURE_CHAT_4_32K": TesterPromptDriverOption( prompt_driver=AzureOpenAiChatPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY"], + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], model="gpt-4-32k", - azure_deployment=os.environ["AZURE_OPENAI_4_32k_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_API_BASE"], + azure_deployment=os.environ["AZURE_OPENAI_4_32K_DEPLOYMENT_ID"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], ), enabled=True, ), @@ -216,7 +216,7 @@ class TesterPromptDriverOption: PROMPT_DRIVERS["OPENAI_CHAT_4"], PROMPT_DRIVERS["OPENAI_CHAT_4_1106_PREVIEW"], PROMPT_DRIVERS["AZURE_CHAT_4"], - PROMPT_DRIVERS["AZURE_CHAT_4_32k"], + PROMPT_DRIVERS["AZURE_CHAT_4_32K"], PROMPT_DRIVERS["ANTHROPIC_CLAUDE_3_OPUS"], PROMPT_DRIVERS["GOOGLE_GEMINI_PRO"], ] @@ -274,10 +274,10 @@ def verify_structure_output(self, structure) -> dict: ), ], prompt_driver=AzureOpenAiChatPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY"], + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], model="gpt-4", azure_deployment=os.environ["AZURE_OPENAI_4_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_API_BASE"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], response_format="json_object", ), tasks=[ From fe9abf983413319a287be716faee7cb9c9c6105e Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 16 Apr 2024 14:18:07 -0700 Subject: [PATCH 020/145] Add missing readthedocs poetry setup (#748) --- .readthedocs.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.readthedocs.yml b/.readthedocs.yml index 4e6ae54a4..d9aa46776 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,6 +5,9 @@ build: tools: python: "3.11" jobs: + post_create_environment: + - pip install poetry + - poetry config virtualenvs.create false post_install: - VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH poetry install --with docs From b944728ac6fa4c1d71f92d037b0bed6d4a977eef Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 16 Apr 2024 14:40:07 -0700 Subject: [PATCH 021/145] Remove references to old docs repo (#749) --- README.md | 2 +- docs/contributing.md | 23 +++-------------------- docs/examples/index.md | 2 +- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 66d21c82f..847c9d9c9 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ We welcome and encourage pull requests. To streamline the process, please follow 3. **Unit Tests:** Ensure that your pull request passes all existing unit tests. Additionally, if you are introducing new code, please include new unit tests to validate its functionality. -4. **Documentation:** Every pull request must include a corresponding pull request in the [docs repository](https://github.com/griptape-ai/griptape-docs) or explicitly explain why a documentation update is not required. Documentation is crucial for maintaining a comprehensive and user-friendly project. +4. **Documentation:** Every pull request must include updates to documentation or explicitly explain why a documentation update is not required. Documentation is crucial for maintaining a comprehensive and user-friendly project. 5. **Code Style:** Griptape uses [Black](https://github.com/ambv/black) to enforce style guidelines. You can ensure that your code is formatted accordingly and will pass formatting checks using `pre-commit`. See [Tools](#tools) for information on how to configure this and other dev tools. diff --git a/docs/contributing.md b/docs/contributing.md index 0e4ba9670..0342dcd81 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -4,7 +4,7 @@ Thank you for considering contributing to Griptape documentation! Before you sta ## Submitting Issues -If you have identified a documentation issue, want to propose new documentation, or have a question, please submit an issue through our public [issue tracker](https://github.com/griptape-ai/griptape-docs/issues). Before submitting a new issue, please check the existing issues to ensure it hasn't been reported or discussed before. +If you have identified a documentation issue, want to propose new documentation, or have a question, please submit an issue through our public [issue tracker](https://github.com/griptape-ai/griptape/issues). Before submitting a new issue, please check the existing issues to ensure it hasn't been reported or discussed before. ## Submitting Pull Requests @@ -17,13 +17,11 @@ We welcome and encourage pull requests. To streamline the process, please follow ## Getting Started Griptape docs are built using [MkDocs](https://squidfunk.github.io/mkdocs-material/getting-started/). Dependencies are managed using [Poetry](https://python-poetry.org/). -To directly contribute to Griptape documentation, first fork the [griptape-docs](https://github.com/griptape-ai/griptape-docs) repository to your GitHub account. Then clone your repository to your local machine. - -From inside the directory run: +To contribute to Griptape docs, install the `docs` extra with: ```poetry install --with docs``` -To run `griptape-docs` locally run: +Then serve the documentation locally with: ```poetry run mkdocs serve``` @@ -37,18 +35,3 @@ INFO - [09:28:33] Watching paths for changes: 'docs', 'mkdocs.yml' INFO - [09:28:33] Serving on http://127.0.0.1:8000/ INFO - [09:28:37] Browser connected: http://127.0.0.1:8000/ ``` - -### Reference Docs - -You may see many `WARNING` messages in the console output. This is because the [reference docs](./reference/griptape/index.md) are not built. -Fixing this is not necessary to contribute to the documentation, but it helps to reduce noise in the console output. - -First, clone the Griptape repository to a separate directory: - -`git clone git@github.com:griptape-ai/griptape.git ~/some/other/directory/` - -Then, create a symlink called `griptape` in the `griptape-docs` repository: - -`ln -s ~/some/other/directory/griptape griptape` - -The `WARNING` messages should now be resolved. diff --git a/docs/examples/index.md b/docs/examples/index.md index acd38e988..63791c114 100644 --- a/docs/examples/index.md +++ b/docs/examples/index.md @@ -1,3 +1,3 @@ This section of the documentation is dedicated to examples highlighting Griptape functionality. -We try to keep all examples up to date, but if you think there is a bug please [submit a pull request](https://github.com/griptape-ai/griptape-docs/tree/main/docs/examples). We are also more than happy to include new examples :) \ No newline at end of file +We try to keep all examples up to date, but if you think there is a bug please [submit a pull request](https://github.com/griptape-ai/griptape/tree/dev/docs/examples). We are also more than happy to include new examples :) From 77ba1a7291d19164ac9a047949ec55e677b6c823 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Wed, 17 Apr 2024 11:41:05 -0500 Subject: [PATCH 022/145] Fix type hint for token_provider, Add missing params in `AzureOpenAiCompletionPromptDriver` openai client (#750) --- CHANGELOG.md | 4 ++++ .../drivers/embedding/azure_openai_embedding_driver.py | 6 ++++-- .../azure_openai_image_generation_driver.py | 6 ++++-- .../drivers/prompt/azure_openai_chat_prompt_driver.py | 6 ++++-- .../prompt/azure_openai_completion_prompt_driver.py | 8 ++++++-- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93291262f..c1ff2f6cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREADKING**: Removed `mime_type` field from `ImageArtifact`. `mime_type` is now a property constructed using the Artifact type and `format` field. - Moved [Griptape Docs](https://github.com/griptape-ai/griptape-docs) to this repository. +### Fixed +- Type hint for parameter `azure_ad_token_provider` on Azure OpenAI drivers to `Optional[Callable[[], str]]`. +- Missing parameters `azure_ad_token` and `azure_ad_token_provider` on the default client for `AzureOpenAiCompletionPromptDriver`. + ## [0.24.2] - 2024-04-04 - Fixed FileManager.load_files_from_disk schema. diff --git a/griptape/drivers/embedding/azure_openai_embedding_driver.py b/griptape/drivers/embedding/azure_openai_embedding_driver.py index 1f91f5a06..3cf473c06 100644 --- a/griptape/drivers/embedding/azure_openai_embedding_driver.py +++ b/griptape/drivers/embedding/azure_openai_embedding_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Optional +from typing import Callable, Optional from attr import define, field, Factory from griptape.drivers import OpenAiEmbeddingDriver from griptape.tokenizers import OpenAiTokenizer @@ -23,7 +23,9 @@ class AzureOpenAiEmbeddingDriver(OpenAiEmbeddingDriver): azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) - azure_ad_token_provider: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token_provider: Optional[Callable[[], str]] = field( + kw_only=True, default=None, metadata={"serializable": False} + ) api_version: str = field(default="2023-05-15", kw_only=True, metadata={"serializable": True}) tokenizer: OpenAiTokenizer = field( default=Factory(lambda self: OpenAiTokenizer(model=self.model), takes_self=True), kw_only=True diff --git a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py index 885fd451c..d037656ca 100644 --- a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py @@ -2,7 +2,7 @@ import openai from attr import field, Factory, define -from typing import Optional +from typing import Callable, Optional from griptape.drivers import OpenAiImageGenerationDriver @@ -23,7 +23,9 @@ class AzureOpenAiImageGenerationDriver(OpenAiImageGenerationDriver): azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - azure_ad_token_provider: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token_provider: Optional[Callable[[], str]] = field( + kw_only=True, default=None, metadata={"serializable": False} + ) api_version: str = field(default="2024-02-01", kw_only=True, metadata={"serializable": True}) client: openai.AzureOpenAI = field( default=Factory( diff --git a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py index 3e1e2af5b..9824c31a0 100644 --- a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py @@ -1,5 +1,5 @@ from attr import define, field, Factory -from typing import Optional +from typing import Callable, Optional from griptape.utils import PromptStack from griptape.drivers import OpenAiChatPromptDriver import openai @@ -20,7 +20,9 @@ class AzureOpenAiChatPromptDriver(OpenAiChatPromptDriver): azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - azure_ad_token_provider: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token_provider: Optional[Callable[[], str]] = field( + kw_only=True, default=None, metadata={"serializable": False} + ) api_version: str = field(default="2023-05-15", kw_only=True, metadata={"serializable": True}) client: openai.AzureOpenAI = field( default=Factory( diff --git a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py b/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py index b0f986ac3..805b45519 100644 --- a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import Callable, Optional from attr import define, field, Factory from griptape.drivers import OpenAiCompletionPromptDriver import openai @@ -19,7 +19,9 @@ class AzureOpenAiCompletionPromptDriver(OpenAiCompletionPromptDriver): azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - azure_ad_token_provider: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token_provider: Optional[Callable[[], str]] = field( + kw_only=True, default=None, metadata={"serializable": False} + ) api_version: str = field(default="2023-05-15", kw_only=True, metadata={"serializable": True}) client: openai.AzureOpenAI = field( default=Factory( @@ -29,6 +31,8 @@ class AzureOpenAiCompletionPromptDriver(OpenAiCompletionPromptDriver): api_version=self.api_version, azure_endpoint=self.azure_endpoint, azure_deployment=self.azure_deployment, + azure_ad_token=self.azure_ad_token, + azure_ad_token_provider=self.azure_ad_token_provider, ), takes_self=True, ) From e16f729d6e621a071e45ff746aca018e73d8be34 Mon Sep 17 00:00:00 2001 From: Michal Date: Wed, 17 Apr 2024 19:41:30 +0200 Subject: [PATCH 023/145] Add optional exception attribute to ErrorArtifact (#747) --- CHANGELOG.md | 1 + griptape/artifacts/error_artifact.py | 2 ++ griptape/tasks/actions_subtask.py | 2 +- griptape/tasks/base_task.py | 2 +- griptape/tasks/tool_task.py | 2 +- tests/unit/artifacts/test_error_artifact.py | 3 +++ 6 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1ff2f6cf..8d16348bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `output_task_input` and `output_task_output` fields to `FinishStructureRunEvent`. - `AmazonS3FileManagerDriver` for managing files on Amazon S3. - `MediaArtifact` as a base class for `ImageArtifact` and future media Artifacts. +- Optional `exception` field to `ErrorArtifact`. ### Changed - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. diff --git a/griptape/artifacts/error_artifact.py b/griptape/artifacts/error_artifact.py index d2d194e70..f2fb02a8f 100644 --- a/griptape/artifacts/error_artifact.py +++ b/griptape/artifacts/error_artifact.py @@ -1,4 +1,5 @@ from __future__ import annotations +from typing import Optional from attr import define, field from griptape.artifacts import BaseArtifact @@ -6,6 +7,7 @@ @define class ErrorArtifact(BaseArtifact): value: str = field(converter=str, metadata={"serializable": True}) + exception: Optional[Exception] = field(default=None, kw_only=True, metadata={"serializable": False}) def __add__(self, other: BaseArtifact) -> ErrorArtifact: return ErrorArtifact(self.value + other.value) diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index bca7f6987..6ed1bff5d 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -105,7 +105,7 @@ def run(self) -> BaseArtifact: except Exception as e: self.structure.logger.error(f"Subtask {self.id}\n{e}", exc_info=True) - self.output = ErrorArtifact(str(e)) + self.output = ErrorArtifact(str(e), exception=e) finally: if self.output is not None: return self.output diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index a88ae43f5..7c583763f 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -112,7 +112,7 @@ def execute(self) -> Optional[BaseArtifact]: except Exception as e: self.structure.logger.error(f"{self.__class__.__name__} {self.id}\n{e}", exc_info=True) - self.output = ErrorArtifact(str(e)) + self.output = ErrorArtifact(str(e), exception=e) finally: self.state = BaseTask.State.FINISHED diff --git a/griptape/tasks/tool_task.py b/griptape/tasks/tool_task.py index dbadc3f10..f875186ea 100644 --- a/griptape/tasks/tool_task.py +++ b/griptape/tasks/tool_task.py @@ -68,7 +68,7 @@ def run(self) -> BaseArtifact: else: self.output = InfoArtifact("No tool output") except Exception as e: - self.output = ErrorArtifact(f"Error processing tool input: {e}") + self.output = ErrorArtifact(f"Error processing tool input: {e}", exception=e) return self.output else: return ErrorArtifact("No action found in prompt output.") diff --git a/tests/unit/artifacts/test_error_artifact.py b/tests/unit/artifacts/test_error_artifact.py index 4ed79e36d..120f6406e 100644 --- a/tests/unit/artifacts/test_error_artifact.py +++ b/tests/unit/artifacts/test_error_artifact.py @@ -11,3 +11,6 @@ def test_to_text(self): def test_to_dict(self): assert ErrorArtifact("foobar").to_dict()["value"] == "foobar" + + def test_exception_instance(self): + assert isinstance(ErrorArtifact("foobar", exception=Exception("foobar")).exception, Exception) From 16305a078fdb37cd23248c3353c61ce125d70997 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Fri, 19 Apr 2024 17:47:04 +0200 Subject: [PATCH 024/145] Edit events route in GriptapeCloudEventListenerDriver (#753) --- .../event_listener/griptape_cloud_event_listener_driver.py | 2 +- .../event_listener/test_griptape_cloud_event_listener_driver.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py index 0b59d93cb..51b62aeac 100644 --- a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -27,6 +27,6 @@ def validate_run_id(self, _, run_id: str): ) def try_publish_event(self, event: BaseEvent) -> None: - url = urljoin(self.base_url.strip("/"), f"/api/runs/{self.run_id}/events") + url = urljoin(self.base_url.strip("/"), f"/api/structure-runs/{self.run_id}/events") requests.post(url=url, json=event.to_dict(), headers=self.headers) diff --git a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py index 04b7de4e7..c459fc8a2 100644 --- a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py @@ -27,7 +27,7 @@ def test_try_publish_event(self, mock_post, driver): driver.try_publish_event(event=event) mock_post.assert_called_once_with( - url=f"https://cloud.griptape.ai/api/runs/{driver.run_id}/events", + url=f"https://cloud.griptape.ai/api/structure-runs/{driver.run_id}/events", json=event.to_dict(), headers={"Authorization": "Bearer foo bar"}, ) From f16f421b8acce2e1de07cdd04e205b500795e4df Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 22 Apr 2024 19:19:39 -0700 Subject: [PATCH 025/145] Feature/conversation memory (#751) --- .github/workflows/docs-integration-tests.yml | 10 +- docs/examples/amazon-dynamodb-sessions.md | 92 +++++++++++++++++++ .../drivers/conversation-memory-drivers.md | 47 ++++++++++ .../structures/conversation-memory.md | 62 ------------- mkdocs.yml | 2 + 5 files changed, 144 insertions(+), 69 deletions(-) create mode 100644 docs/examples/amazon-dynamodb-sessions.md create mode 100644 docs/griptape-framework/drivers/conversation-memory-drivers.md diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index bba8bdcdd..ad4457a20 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -1,15 +1,11 @@ name: Docs Integration Tests on: - pull_request: - types: - - opened - - reopened - branches: [ "main", "dev" ] - paths: - - "docs/**" + pull_request_review: + types: [submitted] jobs: test: + if: github.event.review.state == 'APPROVED' runs-on: ubuntu-latest strategy: fail-fast: false diff --git a/docs/examples/amazon-dynamodb-sessions.md b/docs/examples/amazon-dynamodb-sessions.md new file mode 100644 index 000000000..279cced2a --- /dev/null +++ b/docs/examples/amazon-dynamodb-sessions.md @@ -0,0 +1,92 @@ +Griptape provides [Conversation Memory](../griptape-framework/structures/conversation-memory.md) as a means of persisting conversation context across multiple Structure runs. +If you provide it with a suitable Driver, the memory of the previous conversation can be preserved between run of a Structure, giving it additional context for how to respond. +While we can use the [LocalConversationMemoryDriver](../griptape-framework/drivers/conversation-memory-drivers.md#localconversationmemorydriver) to store the conversation history in a local file, this may not be suitable for production use cases. + +In this example, we will show you how to use the [AmazonDynamoDbConversationMemoryDriver](../griptape-framework/drivers/conversation-memory-drivers.md#amazondynamodbconversationmemorydriver) to persist the memory in an [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) table. Please refer to the [Amazon DynamoDB documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) for information on setting up DynamoDB. + +This code implements the idea of a generic "Session" that represents a Conversation Memory entry. For example, a "Session" could be used to represent an individual user's conversation, or a group conversation thread. + +```python +import sys +import os +import argparse + +import boto3 +from griptape.drivers import ( + AmazonDynamoDbConversationMemoryDriver, +) +from griptape.structures import Agent +from griptape.memory.structure import ConversationMemory + +if len(sys.argv) > 2: + input = sys.argv[1] + session_id = sys.argv[2] +else: + input = "Hello!" # Default input + session_id = "session-id-123" # Default session ID + +structure = Agent( + conversation_memory=ConversationMemory( + driver=AmazonDynamoDbConversationMemoryDriver( + session=boto3.Session( + aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"], + aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"], + ), + table_name=os.environ["DYNAMODB_TABLE_NAME"], # The name of the DynamoDB table + partition_key="id", # The name of the partition key + partition_key_value=session_id, # The value of the partition key + value_attribute_key="value", # The key in the DynamoDB item that stores the memory value + ) + ) +) + +print(structure.run(input).output_task.output.value) +``` + +Conversation Memory for an individual user: + +```bash +python session.py "Hello my name is Collin." "user-id-123" +python session.py "What is my name?" "user-id-123" +``` + +``` +> Hello Collin! How can I assist you today? +> Your name is Collin. +``` + +```json +{ + "id": { + "S": "user-id-123" + }, + "value": { + "S": "{\"type\": \"ConversationMemory\", \"runs\": [{\"type\": \"Run\", \"id\": \"8c403fb92b134b14a0af8847e52e6212\", \"input\": \"Hello my name is Collin.\", \"output\": \"Hello Collin! How can I assist you today?\"}, {\"type\": \"Run\", \"id\": \"706d9fb072ca49e192bfed7fc1964925\", \"input\": \"What is my name?\", \"output\": \"Your name is Collin.\"}], \"max_runs\": null}" + } +} +``` + +Conversation Memory for a group of users: + +```bash +python session.py "Hello my name is Zach." "group-id-122" +python session.py "And I'm Matt" "group-id-123" +python session.py "And I'm Collin, who all is here?" "group-id-123" +``` + +``` +> Hello Zach! How can I assist you today? +> Hello Matt! Nice to meet you too. How can I help you today? +> Hello Collin! So far, we have Zach, Matt, and now you. How can I assist you all today? +``` + +```json +{ + "id": { + "S": "group-id-123" + }, + "value": { + "S": "{\"type\": \"ConversationMemory\", \"runs\": [{\"type\": \"Run\", \"id\": \"b612cdf5908845e392c026e1cf00460b\", \"input\": \"Hello my name is Zach.\", \"output\": \"Hello Zach! How can I assist you today?\"}, {\"type\": \"Run\", \"id\": \"4507988d82164cad8a288da8c984817c\", \"input\": \"And I'm Matt\", \"output\": \"Hello Matt! Nice to meet you too. How can I help you today?\"}, {\"type\": \"Run\", \"id\": \"65a70c22dae24655b312cf8eaa649bfd\", \"input\": \"And I'm Collin, who all is here?\", \"output\": \"Hello Collin! So far, we have Zach, Matt, and now you. How can I assist you all today?\"}], \"max_runs\": null}" + } +} +``` diff --git a/docs/griptape-framework/drivers/conversation-memory-drivers.md b/docs/griptape-framework/drivers/conversation-memory-drivers.md new file mode 100644 index 000000000..d429be527 --- /dev/null +++ b/docs/griptape-framework/drivers/conversation-memory-drivers.md @@ -0,0 +1,47 @@ +## Overview + +You can persist and load memory by using Conversation Memory Drivers. You can build drivers for your own data stores by extending [BaseConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/base_conversation_memory_driver.md). + +### LocalConversationMemoryDriver + +The [LocalConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/local_conversation_memory_driver.md) allows you to persist Conversation Memory in a local JSON file. + +```python +from griptape.structures import Agent +from griptape.drivers import LocalConversationMemoryDriver +from griptape.memory.structure import ConversationMemory + +local_driver = LocalConversationMemoryDriver(file_path="memory.json") +agent = Agent(conversation_memory=ConversationMemory(driver=local_driver)) + +agent.run("Surfing is my favorite sport.") +agent.run("What is my favorite sport?") +``` + +### AmazonDynamoDbConversationMemoryDriver + +!!! info + This driver requires the `drivers-memory-conversation-amazon-dynamodb` [extra](../index.md#extras). + +The [AmazonDynamoDbConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.md) allows you to persist Conversation Memory in [Amazon DynamoDb](https://aws.amazon.com/dynamodb/). + +```python +import os +import uuid +from griptape.drivers import AmazonDynamoDbConversationMemoryDriver +from griptape.memory.structure import ConversationMemory +from griptape.structures import Agent + +conversation_id = uuid.uuid4().hex +dynamodb_driver = AmazonDynamoDbConversationMemoryDriver( + table_name=os.environ["DYNAMODB_TABLE_NAME"], + partition_key="id", + value_attribute_key="memory", + partition_key_value=conversation_id, +) + +agent = Agent(conversation_memory=ConversationMemory(driver=dynamodb_driver)) + +agent.run("My name is Jeff.") +agent.run("What is my name?") +``` diff --git a/docs/griptape-framework/structures/conversation-memory.md b/docs/griptape-framework/structures/conversation-memory.md index 0fdcf1867..92fdf98c4 100644 --- a/docs/griptape-framework/structures/conversation-memory.md +++ b/docs/griptape-framework/structures/conversation-memory.md @@ -97,65 +97,3 @@ agent.run("Hello!") print(agent.conversation_memory.summary) ``` -## Conversation Memory Drivers - -You can persist and load memory by using Conversation Memory Drivers. You can build drivers for your own data stores by extending [BaseConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/base_conversation_memory_driver.md). - -```python -from griptape.drivers import LocalConversationMemoryDriver -from griptape.structures import Agent -from griptape.memory.structure import ConversationMemory - -memory_driver = LocalConversationMemoryDriver(file_path="memory.json") - -agent_1 = Agent(conversation_memory=ConversationMemory(driver=memory_driver)) -agent_1.run("Skateboarding is my favorite activity.") - -agent_2 = Agent(conversation_memory=memory_driver.load()) -agent_2.run("What is my favorite activity?") -``` - -### Local Conversation Memory Driver - -The [LocalConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/local_conversation_memory_driver.md) allows you to persist Conversation Memory in a local JSON file. - -```python -from griptape.structures import Agent -from griptape.drivers import LocalConversationMemoryDriver -from griptape.memory.structure import ConversationMemory - -local_driver = LocalConversationMemoryDriver(file_path="memory.json") -agent = Agent(conversation_memory=ConversationMemory(driver=local_driver)) - -agent.run("Surfing is my favorite sport.") -agent.run("What is my favorite sport?") -``` - -### Amazon DynamoDb Conversation Memory Driver - -!!! info - This driver requires the `drivers-memory-conversation-amazon-dynamodb` [extra](../index.md#extras). - -The [AmazonDynamoDbConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.md) allows you to persist Conversation Memory in [Amazon DynamoDb](https://aws.amazon.com/dynamodb/). - -```python -import os -import uuid -from griptape.drivers import AmazonDynamoDbConversationMemoryDriver -from griptape.memory.structure import ConversationMemory -from griptape.structures import Agent - -conversation_id = uuid.uuid4().hex -dynamodb_driver = AmazonDynamoDbConversationMemoryDriver( - table_name=os.environ["DYNAMODB_TABLE_NAME"], - partition_key="id", - value_attribute_key="memory", - partition_key_value=conversation_id, -) - -agent = Agent(conversation_memory=ConversationMemory(driver=dynamodb_driver)) - -agent.run("My name is Jeff.") -agent.run("What is my name?") -``` - diff --git a/mkdocs.yml b/mkdocs.yml index 0b9852e82..bb90117a3 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -102,6 +102,7 @@ nav: - SQL Drivers: "griptape-framework/drivers/sql-drivers.md" - Image Query Drivers: "griptape-framework/drivers/image-query-drivers.md" - Web Scraper Drivers: "griptape-framework/drivers/web-scraper-drivers.md" + - Conversation Memory Drivers: "griptape-framework/drivers/conversation-memory-drivers.md" - Data: - Overview: "griptape-framework/data/index.md" - Artifacts: "griptape-framework/data/artifacts.md" @@ -145,6 +146,7 @@ nav: - Talk to a Webpage: "examples/talk-to-a-webpage.md" - Talk to a PDF: "examples/talk-to-a-pdf.md" - Shared Memory Between Agents: "examples/multiple-agent-shared-memory.md" + - Chat Sessions with Amazon DynamoDB: "examples/amazon-dynamodb-sessions.md" - Data: - Load and Query Pinecone: "examples/load-and-query-pinecone.md" - Load and Query Marqo: "examples/load-query-and-chat-marqo.md" From 670616f2fa8d6da154b01710051bb1dd6e7dae7f Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 23 Apr 2024 14:11:59 -0700 Subject: [PATCH 026/145] Pull cloud url from env var (#756) --- .../griptape_cloud_event_listener_driver.py | 13 ++++++++++++- .../test_griptape_cloud_event_listener_driver.py | 15 +++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py index 51b62aeac..7f52b3519 100644 --- a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -12,7 +12,18 @@ @define class GriptapeCloudEventListenerDriver(BaseEventListenerDriver): - base_url: str = field(default="https://cloud.griptape.ai", kw_only=True) + """Driver for publishing events to Griptape Cloud. + + Attributes: + base_url: The base URL of Griptape Cloud. Defaults to the GT_CLOUD_BASE_URL environment variable. + api_key: The API key to authenticate with Griptape Cloud. + headers: The headers to use when making requests to Griptape Cloud. Defaults to include the Authorization header. + run_id: The ID of the Structure Run to publish events to. Defaults to the GT_CLOUD_RUN_ID environment variable. + """ + + base_url: str = field( + default=Factory(lambda: os.getenv("GT_CLOUD_BASE_URL", "https://cloud.griptape.ai")), kw_only=True + ) api_key: str = field(kw_only=True) headers: dict = field( default=Factory(lambda self: {"Authorization": f"Bearer {self.api_key}"}, takes_self=True), kw_only=True diff --git a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py index c459fc8a2..bbffa1059 100644 --- a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py @@ -1,8 +1,11 @@ +import os from unittest.mock import Mock -from pytest import fixture + import pytest -from tests.mocks.mock_event import MockEvent +from pytest import fixture + from griptape.drivers.event_listener.griptape_cloud_event_listener_driver import GriptapeCloudEventListenerDriver +from tests.mocks.mock_event import MockEvent class TestGriptapeCloudEventListenerDriver: @@ -17,17 +20,21 @@ def mock_post(self, mocker): @fixture() def driver(self): - return GriptapeCloudEventListenerDriver(api_key="foo bar", run_id="baz") + os.environ["GT_CLOUD_BASE_URL"] = "https://cloud123.griptape.ai" + + return GriptapeCloudEventListenerDriver(api_key="foo bar", run_id="bar baz") def test_init(self, driver): assert driver + assert driver.api_key == "foo bar" + assert driver.run_id == "bar baz" def test_try_publish_event(self, mock_post, driver): event = MockEvent() driver.try_publish_event(event=event) mock_post.assert_called_once_with( - url=f"https://cloud.griptape.ai/api/structure-runs/{driver.run_id}/events", + url="https://cloud123.griptape.ai/api/structure-runs/bar baz/events", json=event.to_dict(), headers={"Authorization": "Bearer foo bar"}, ) From 30d3e29cb807fc22734b670248d119d15e694c05 Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:00:53 -0400 Subject: [PATCH 027/145] Rename GT Cloud run ID env var (#758) --- .../griptape_cloud_event_listener_driver.py | 14 +++++++------- .../test_griptape_cloud_event_listener_driver.py | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py index 7f52b3519..90b94c313 100644 --- a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -18,7 +18,7 @@ class GriptapeCloudEventListenerDriver(BaseEventListenerDriver): base_url: The base URL of Griptape Cloud. Defaults to the GT_CLOUD_BASE_URL environment variable. api_key: The API key to authenticate with Griptape Cloud. headers: The headers to use when making requests to Griptape Cloud. Defaults to include the Authorization header. - run_id: The ID of the Structure Run to publish events to. Defaults to the GT_CLOUD_RUN_ID environment variable. + structure_run_id: The ID of the Structure Run to publish events to. Defaults to the GT_CLOUD_STRUCTURE_RUN_ID environment variable. """ base_url: str = field( @@ -28,16 +28,16 @@ class GriptapeCloudEventListenerDriver(BaseEventListenerDriver): headers: dict = field( default=Factory(lambda self: {"Authorization": f"Bearer {self.api_key}"}, takes_self=True), kw_only=True ) - run_id: str = field(default=Factory(lambda: os.getenv("GT_CLOUD_RUN_ID")), kw_only=True) + structure_run_id: str = field(default=Factory(lambda: os.getenv("GT_CLOUD_STRUCTURE_RUN_ID")), kw_only=True) - @run_id.validator # pyright: ignore - def validate_run_id(self, _, run_id: str): - if run_id is None: + @structure_run_id.validator # pyright: ignore + def validate_run_id(self, _, structure_run_id: str): + if structure_run_id is None: raise ValueError( - "run_id must be set either in the constructor or as an environment variable (GT_CLOUD_RUN_ID)." + "structure_run_id must be set either in the constructor or as an environment variable (GT_CLOUD_STRUCTURE_RUN_ID)." ) def try_publish_event(self, event: BaseEvent) -> None: - url = urljoin(self.base_url.strip("/"), f"/api/structure-runs/{self.run_id}/events") + url = urljoin(self.base_url.strip("/"), f"/api/structure-runs/{self.structure_run_id}/events") requests.post(url=url, json=event.to_dict(), headers=self.headers) diff --git a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py index bbffa1059..8d2a261ba 100644 --- a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py @@ -22,12 +22,12 @@ def mock_post(self, mocker): def driver(self): os.environ["GT_CLOUD_BASE_URL"] = "https://cloud123.griptape.ai" - return GriptapeCloudEventListenerDriver(api_key="foo bar", run_id="bar baz") + return GriptapeCloudEventListenerDriver(api_key="foo bar", structure_run_id="bar baz") def test_init(self, driver): assert driver assert driver.api_key == "foo bar" - assert driver.run_id == "bar baz" + assert driver.structure_run_id == "bar baz" def test_try_publish_event(self, mock_post, driver): event = MockEvent() @@ -39,6 +39,6 @@ def test_try_publish_event(self, mock_post, driver): headers={"Authorization": "Bearer foo bar"}, ) - def test_no_run_id(self): + def test_no_structure_run_id(self): with pytest.raises(ValueError): GriptapeCloudEventListenerDriver(api_key="foo bar") From f2ac9ca161c41c17289276084d9dd7636786e589 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 26 Apr 2024 13:51:10 -0700 Subject: [PATCH 028/145] Fix vector query engine exceeding token limits (#759) --- griptape/engines/query/vector_query_engine.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/griptape/engines/query/vector_query_engine.py b/griptape/engines/query/vector_query_engine.py index ac38a05a3..7ca42f59f 100644 --- a/griptape/engines/query/vector_query_engine.py +++ b/griptape/engines/query/vector_query_engine.py @@ -61,7 +61,11 @@ def query( if message_token_count + self.answer_token_offset >= tokenizer.max_input_tokens: text_segments.pop() - user_message = self.user_template_generator.render(query=query, text_segments=text_segments) + system_message = self.system_template_generator.render( + rulesets=J2("rulesets/rulesets.j2").render(rulesets=rulesets), + metadata=metadata, + text_segments=text_segments, + ) break From 9aa2f02774c35c5c60fd65aecb2ff8706e817448 Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Mon, 29 Apr 2024 12:27:02 -0400 Subject: [PATCH 029/145] Add cloud docs API Reference (#760) --- docs/griptape-cloud/api/api-reference.md | 1 + docs/griptape-cloud/index.md | 3 +++ docs/index.md | 4 ++++ docs/plugins/swagger_ui_plugin.py | 2 +- mkdocs.yml | 3 +++ 5 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 docs/griptape-cloud/api/api-reference.md create mode 100644 docs/griptape-cloud/index.md diff --git a/docs/griptape-cloud/api/api-reference.md b/docs/griptape-cloud/api/api-reference.md new file mode 100644 index 000000000..95ed4459e --- /dev/null +++ b/docs/griptape-cloud/api/api-reference.md @@ -0,0 +1 @@ +# Content overriden by Swagger Plugin \ No newline at end of file diff --git a/docs/griptape-cloud/index.md b/docs/griptape-cloud/index.md new file mode 100644 index 000000000..6a841dccc --- /dev/null +++ b/docs/griptape-cloud/index.md @@ -0,0 +1,3 @@ +# Griptape Cloud + +Griptape Cloud is a managed platform for running AI-powered agents, pipelines, and workflows. \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 727761f87..5d22224e7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,6 +6,10 @@ Welcome to Griptape Docs! This documentation is organized into the following sec Griptape Topic Guides discuss key topics at a high level and provide useful background information and explanation. +### Griptape Cloud + +[Griptape Cloud](griptape-cloud/api/api-reference.md) provides an overview of the APIs available in the managed cloud service. + ### Griptape Framework [Griptape Framework](griptape-framework/index.md) provides an overview of the key topics within Griptape, and how you can get started building agents. diff --git a/docs/plugins/swagger_ui_plugin.py b/docs/plugins/swagger_ui_plugin.py index 0243f6900..6d5fb52da 100644 --- a/docs/plugins/swagger_ui_plugin.py +++ b/docs/plugins/swagger_ui_plugin.py @@ -5,7 +5,7 @@ from markupsafe import Markup config_scheme = { - "spec_url": "https://cloud-preview.griptape.ai/public/openapi.yaml", + "spec_url": "https://griptape-cloud-assets.s3.amazonaws.com/Griptape.openapi.yaml", "template": "swagger.md.tmpl", "outfile": "griptape-cloud/api/api-reference.md", } diff --git a/mkdocs.yml b/mkdocs.yml index bb90117a3..a083f2b8b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -74,6 +74,9 @@ nav: - Home: - Overview: "index.md" - Contributing: "contributing.md" + - Cloud: + - Cloud API: + - API Reference: "griptape-cloud/api/api-reference.md" - Framework: - Overview: "griptape-framework/index.md" - Structures: From 5c93b4e544118ecd3e85b44d68e9b627d0d1eebb Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 29 Apr 2024 10:55:40 -0700 Subject: [PATCH 030/145] Add file utils (#745) --- docs/griptape-framework/data/loaders.md | 29 +++++++++++++- griptape/utils/__init__.py | 6 ++- griptape/utils/file_utils.py | 35 ++++++++++++++++ tests/resources/foobar-many.txt | 26 ++++++++++++ tests/unit/utils/test_file_utils.py | 53 +++++++++++++++++++++++++ 5 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 griptape/utils/file_utils.py create mode 100644 tests/resources/foobar-many.txt create mode 100644 tests/unit/utils/test_file_utils.py diff --git a/docs/griptape-framework/data/loaders.md b/docs/griptape-framework/data/loaders.md index 8aac96d6a..d767d0d8f 100644 --- a/docs/griptape-framework/data/loaders.md +++ b/docs/griptape-framework/data/loaders.md @@ -13,17 +13,24 @@ Inherits from the [TextLoader](../../reference/griptape/loaders/text_loader.md) ```python from griptape.loaders import PdfLoader +from griptape.utils import load_files, load_file import urllib.request urllib.request.urlretrieve("https://arxiv.org/pdf/1706.03762.pdf", "attention.pdf") +# Load a single PDF file with open("attention.pdf", "rb") as f: PdfLoader().load(f.read()) +# You can also use the load_file utility function +PdfLoader().load(load_file("attention.pdf")) urllib.request.urlretrieve("https://arxiv.org/pdf/1706.03762.pdf", "CoT.pdf") +# Load multiple PDF files with open("attention.pdf", "rb") as attention, open("CoT.pdf", "rb") as cot: PdfLoader().load_collection([attention.read(), cot.read()]) +# You can also use the load_files utility function +PdfLoader().load_collection(list(load_files(["attention.pdf", "CoT.pdf"]).values())) ``` ## Sql Loader @@ -53,12 +60,19 @@ Can be used to load CSV files into [CsvRowArtifact](../../reference/griptape/art ```python from griptape.loaders import CsvLoader +from griptape.utils import load_file, load_files +# Load a single CSV file with open("tests/resources/cities.csv", "r") as f: CsvLoader().load(f.read()) +# You can also use the load_file utility function +CsvLoader().load(load_file("tests/resources/cities.csv")) +# Load multiple CSV files with open("tests/resources/cities.csv", "r") as cities, open("tests/resources/addresses.csv", "r") as addresses: CsvLoader().load_collection([cities.read(), addresses.read()]) +# You can also use the load_files utility function +CsvLoader().load_collection(list(load_files(["tests/resources/cities.csv", "tests/resources/addresses.csv"]).values())) ``` @@ -140,19 +154,32 @@ The Image Loader is used to load an image as an [ImageArtifact](./artifacts.md#i ```python from griptape.loaders import ImageLoader +from griptape.utils import load_file +# Load an image from disk with open("tests/resources/mountain.png", "rb") as f: disk_image_artifact = ImageLoader().load(f.read()) +# You can also use the load_file utility function +ImageLoader().load(load_file("tests/resources/mountain.png")) ``` By default, the Image Loader will load images in their native format, but not all models work on all formats. To normalize the format of Artifacts returned by the Loader, set the `format` field. ```python from griptape.loaders import ImageLoader +from griptape.utils import load_files, load_file -# Image data in artifact will be in BMP format. +# Load a single image in BMP format with open("tests/resources/mountain.png", "rb") as f: image_artifact_jpeg = ImageLoader(format="bmp").load(f.read()) +# You can also use the load_file utility function +ImageLoader(format="bmp").load(load_file("tests/resources/mountain.png")) + +# Load multiple images in BMP format +with open("tests/resources/mountain.png", "rb") as mountain, open("tests/resources/cow.png", "rb") as cow: + ImageLoader().load_collection([mountain.read(), cow.read()]) +# You can also use the load_files utility function +ImageLoader().load_collection(list(load_files(["tests/resources/mountain.png", "tests/resources/cow.png"]).values())) ``` diff --git a/griptape/utils/__init__.py b/griptape/utils/__init__.py index 1aad72db9..64ca9a9f7 100644 --- a/griptape/utils/__init__.py +++ b/griptape/utils/__init__.py @@ -8,8 +8,8 @@ from .futures import execute_futures_dict from .token_counter import TokenCounter from .prompt_stack import PromptStack -from .dict_utils import remove_null_values_in_dict_recursively -from .dict_utils import dict_merge +from .dict_utils import remove_null_values_in_dict_recursively, dict_merge +from .file_utils import load_file, load_files from .hash import str_to_hash from .import_utils import import_optional_dependency from .import_utils import is_dependency_installed @@ -43,4 +43,6 @@ def minify_json(value: str) -> str: "constants", "load_artifact_from_memory", "deprecation_warn", + "load_file", + "load_files", ] diff --git a/griptape/utils/file_utils.py b/griptape/utils/file_utils.py new file mode 100644 index 000000000..402436a2f --- /dev/null +++ b/griptape/utils/file_utils.py @@ -0,0 +1,35 @@ +import griptape.utils as utils +from concurrent import futures +from typing import Optional + + +def load_file(path: str) -> bytes: + """Load a file from the given path and return its content as bytes. + + Args: + path (str): The path to the file to load. + + Returns: + The content of the file. + """ + with open(path, "rb") as f: + return f.read() + + +def load_files(paths: list[str], futures_executor: Optional[futures.ThreadPoolExecutor] = None) -> dict[str, bytes]: + """Load multiple files concurrently and return a dictionary of their content. + + Args: + paths: The paths to the files to load. + futures_executor: The executor to use for concurrent loading. If None, a new ThreadPoolExecutor will be created. + + Returns: + A dictionary where the keys are a hash of the path and the values are the content of the files. + """ + + if futures_executor is None: + futures_executor = futures.ThreadPoolExecutor() + + return utils.execute_futures_dict( + {utils.str_to_hash(str(path)): futures_executor.submit(load_file, path) for path in paths} + ) diff --git a/tests/resources/foobar-many.txt b/tests/resources/foobar-many.txt new file mode 100644 index 000000000..00fbc1398 --- /dev/null +++ b/tests/resources/foobar-many.txt @@ -0,0 +1,26 @@ +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + +foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar + diff --git a/tests/unit/utils/test_file_utils.py b/tests/unit/utils/test_file_utils.py new file mode 100644 index 000000000..dbcf1044b --- /dev/null +++ b/tests/unit/utils/test_file_utils.py @@ -0,0 +1,53 @@ +import os +from griptape.loaders import TextLoader +from griptape import utils +from concurrent import futures +from tests.mocks.mock_embedding_driver import MockEmbeddingDriver + +MAX_TOKENS = 50 + + +class TestFileUtils: + def test_load_file(self): + dirname = os.path.dirname(__file__) + file = utils.load_file(os.path.join(dirname, "../../resources/foobar-many.txt")) + + assert file.decode("utf-8").startswith("foobar foobar foobar") + assert len(file.decode("utf-8")) == 4563 + + def test_load_files(self): + dirname = os.path.dirname(__file__) + sources = ["resources/foobar-many.txt", "resources/foobar-many.txt", "resources/small.png"] + sources = [os.path.join(dirname, "../../", source) for source in sources] + files = utils.load_files(sources, futures_executor=futures.ThreadPoolExecutor(max_workers=1)) + assert len(files) == 2 + + test_file = files[utils.str_to_hash(sources[0])] + assert len(test_file) == 4563 + assert test_file.decode("utf-8").startswith("foobar foobar foobar") + + small_file = files[utils.str_to_hash(sources[2])] + assert len(small_file) == 97 + assert small_file[:8] == b"\x89PNG\r\n\x1a\n" + + def test_load_file_with_loader(self): + dirname = os.path.dirname(__file__) + file = utils.load_file(os.path.join(dirname, "../../", "resources/foobar-many.txt")) + artifacts = TextLoader(max_tokens=MAX_TOKENS, embedding_driver=MockEmbeddingDriver()).load(file) + + assert len(artifacts) == 39 + assert isinstance(artifacts, list) + assert artifacts[0].value.startswith("foobar foobar foobar") + + def test_load_files_with_loader(self): + dirname = os.path.dirname(__file__) + sources = ["resources/foobar-many.txt"] + sources = [os.path.join(dirname, "../../", source) for source in sources] + files = utils.load_files(sources) + loader = TextLoader(max_tokens=MAX_TOKENS, embedding_driver=MockEmbeddingDriver()) + collection = loader.load_collection(list(files.values())) + + test_file_artifacts = collection[loader.to_key(files[utils.str_to_hash(sources[0])])] + assert len(test_file_artifacts) == 39 + assert isinstance(test_file_artifacts, list) + assert test_file_artifacts[0].value.startswith("foobar foobar foobar") From c009e53155315c9b5088ca8e040b0c955c451b3d Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Tue, 30 Apr 2024 03:13:31 +0900 Subject: [PATCH 031/145] Update api-reference.md (#761) --- docs/griptape-cloud/api/api-reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/griptape-cloud/api/api-reference.md b/docs/griptape-cloud/api/api-reference.md index 95ed4459e..1b49f33d8 100644 --- a/docs/griptape-cloud/api/api-reference.md +++ b/docs/griptape-cloud/api/api-reference.md @@ -1 +1 @@ -# Content overriden by Swagger Plugin \ No newline at end of file +# Content overridden by Swagger Plugin From 88520d8b1931d5fb69cd4cb9fe15be75bf54133d Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 29 Apr 2024 11:42:13 -0700 Subject: [PATCH 032/145] Add note to changelog regarding stability v0 deprecation (#762) --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d16348bc..84ec366ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -122,13 +122,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `ImageQueryTask` and `ImageQueryEngine`. ### Fixed -- `BedrockStableDiffusionImageGenerationModelDriver` request parameters for SDXLv1. +- `BedrockStableDiffusionImageGenerationModelDriver` request parameters for SDXLv1 (`stability.stable-diffusion-xl-v1`). - `BedrockStableDiffusionImageGenerationModelDriver` correctly handles the CONTENT_FILTERED response case. ### Changed - **BREAKING**: Make `index_name` on `MongoDbAtlasVectorStoreDriver` a required field. - **BREAKING**: Remove `create_index()` from `MarqoVectorStoreDriver`, `OpenSearchVectorStoreDriver`, `PineconeVectorStoreDriver`, `RedisVectorStoreDriver`. - **BREAKING**: `ImageLoader().load()` now accepts image bytes instead of a file path. +- **BREAKING**: Request parameters for `BedrockStableDiffusionImageGenerationModelDriver` have been updated for `stability.stable-diffusion-xl-v1`. Use this over the now deprecated `stability.stable-diffusion-xl-v0`. - Deprecated `Structure.prompt_driver` in favor of `Structure.config.global_drivers.prompt_driver`. - Deprecated `Structure.embedding_driver` in favor of `Structure.config.global_drivers.embedding_driver`. - Deprecated `Structure.stream` in favor of `Structure.config.global_drivers.prompt_driver.stream`. From df8b42bd1505b8b8c5e121ed0fd6a4d8e21c1192 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 30 Apr 2024 10:36:56 -0700 Subject: [PATCH 033/145] Update to pinecone@3 (#763) --- CHANGELOG.md | 3 +- .../vector/pinecone_vector_store_driver.py | 11 ++-- poetry.lock | 56 ++++--------------- pyproject.toml | 2 +- .../test_pinecone_vector_storage_driver.py | 8 +-- 5 files changed, 24 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84ec366ab..dbe44d5c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,9 +33,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: `TextLoader` no longer accepts `Path` file paths as a source. It will now accept the content of the text file as a `str` or `bytes` object. - **BREAKING**: `FileManager.default_loader` is now `None` by default. - **BREAKING**: Replaced `EventListener.handler` with `EventListener.driver` and `LocalEventListenerDriver`. -- Improved RAG performance in `VectorQueryEngine`. +- **BREAKING** Bumped `pinecone` from `^2` to `^3`. - **BREAKING**: Removed `workdir`, `loaders`, `default_loader`, and `save_file_encoding` fields from `FileManager` and added `file_manager_driver`. - **BREADKING**: Removed `mime_type` field from `ImageArtifact`. `mime_type` is now a property constructed using the Artifact type and `format` field. +- Improved RAG performance in `VectorQueryEngine`. - Moved [Griptape Docs](https://github.com/griptape-ai/griptape-docs) to this repository. ### Fixed diff --git a/griptape/drivers/vector/pinecone_vector_store_driver.py b/griptape/drivers/vector/pinecone_vector_store_driver.py index 0ee86cb4e..7b573ed68 100644 --- a/griptape/drivers/vector/pinecone_vector_store_driver.py +++ b/griptape/drivers/vector/pinecone_vector_store_driver.py @@ -17,8 +17,9 @@ class PineconeVectorStoreDriver(BaseVectorStoreDriver): index: pinecone.Index = field(init=False) def __attrs_post_init__(self) -> None: - pinecone = import_optional_dependency("pinecone") - pinecone.init(api_key=self.api_key, environment=self.environment, project_name=self.project_name) + pinecone = import_optional_dependency("pinecone").Pinecone( + api_key=self.api_key, environment=self.environment, project_name=self.project_name + ) self.index = pinecone.Index(self.index_name) @@ -34,7 +35,7 @@ def upsert_vector( params: dict[str, Any] = {"namespace": namespace} | kwargs - self.index.upsert([(vector_id, vector, meta)], **params) + self.index.upsert(vectors=[(vector_id, vector, meta)], **params) return vector_id @@ -57,7 +58,7 @@ def load_entries(self, namespace: Optional[str] = None) -> list[BaseVectorStoreD # https://community.pinecone.io/t/is-there-a-way-to-query-all-the-vectors-and-or-metadata-from-a-namespace/797/5 results = self.index.query( - self.embedding_driver.embed_string(""), top_k=10000, include_metadata=True, namespace=namespace + vector=self.embedding_driver.embed_string(""), top_k=10000, include_metadata=True, namespace=namespace ) return [ @@ -86,7 +87,7 @@ def query( "include_metadata": include_metadata, } | kwargs - results = self.index.query(vector, **params) + results = self.index.query(vector=vector, **params) return [ BaseVectorStoreDriver.QueryResult( diff --git a/poetry.lock b/poetry.lock index 429d4574d..300206470 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2050,24 +2050,6 @@ files = [ [package.extras] data = ["language-data (>=1.1,<2.0)"] -[[package]] -name = "loguru" -version = "0.7.2" -description = "Python logging made (stupidly) simple" -optional = true -python-versions = ">=3.5" -files = [ - {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, - {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] - [[package]] name = "lxml" version = "4.9.4" @@ -3125,28 +3107,26 @@ xmp = ["defusedxml"] [[package]] name = "pinecone-client" -version = "2.2.4" +version = "3.2.2" description = "Pinecone client and SDK" optional = true -python-versions = ">=3.8" +python-versions = "<4.0,>=3.8" files = [ - {file = "pinecone-client-2.2.4.tar.gz", hash = "sha256:2c1cc1d6648b2be66e944db2ffa59166a37b9164d1135ad525d9cd8b1e298168"}, - {file = "pinecone_client-2.2.4-py3-none-any.whl", hash = "sha256:5bf496c01c2f82f4e5c2dc977cc5062ecd7168b8ed90743b09afcc8c7eb242ec"}, + {file = "pinecone_client-3.2.2-py3-none-any.whl", hash = "sha256:7e492fdda23c73726bc0cb94c689bb950d06fb94e82b701a0c610c2e830db327"}, + {file = "pinecone_client-3.2.2.tar.gz", hash = "sha256:887a12405f90ac11c396490f605fc479f31cf282361034d1ae0fccc02ac75bee"}, ] [package.dependencies] -dnspython = ">=2.0.0" -loguru = ">=0.5.0" -numpy = ">=1.22.0" -python-dateutil = ">=2.5.3" -pyyaml = ">=5.4" -requests = ">=2.19.0" +certifi = ">=2019.11.17" tqdm = ">=4.64.1" typing-extensions = ">=3.7.4" -urllib3 = ">=1.21.1" +urllib3 = [ + {version = ">=1.26.0", markers = "python_version >= \"3.8\" and python_version < \"3.12\""}, + {version = ">=1.26.5", markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, +] [package.extras] -grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv2 (==0.1.0)", "grpcio (>=1.44.0)", "lz4 (>=3.1.3)", "protobuf (>=3.20.0,<3.21.0)"] +grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv2 (==0.1.0)", "grpcio (>=1.44.0)", "grpcio (>=1.59.0)", "lz4 (>=3.1.3)", "protobuf (>=3.20.0,<3.21.0)"] [[package]] name = "pkginfo" @@ -5246,20 +5226,6 @@ MarkupSafe = ">=2.1.1" [package.extras] watchdog = ["watchdog (>=2.3)"] -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -optional = true -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - [[package]] name = "xmltodict" version = "0.13.0" @@ -5425,4 +5391,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "99746cb554c4bc04b03cb998baf428d187e2f0fa9fef3ec7667004578bb65d2c" +content-hash = "7aa1485db323176c7b372efd3483d060c469d18fdf0c6ed172bb3a82d4ab238b" diff --git a/pyproject.toml b/pyproject.toml index ea2d78d06..b323f9a36 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ huggingface-hub = { version = ">=0.13", optional = true } boto3 = { version = "^1.28.2", optional = true } sqlalchemy-redshift = { version = "*", optional = true } snowflake-sqlalchemy = { version = "^1.4.7", optional = true } -pinecone-client = { version = "^2", optional = true } +pinecone-client = { version = "^3", optional = true } pymongo = { version = "*", optional = true } marqo = { version = ">=1.1.0", optional = true } redis = { version = "^4.6.0", optional = true } diff --git a/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py b/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py index 993821de9..defbe8e3b 100644 --- a/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py +++ b/tests/unit/drivers/vector/test_pinecone_vector_storage_driver.py @@ -18,10 +18,10 @@ def mock_pinecone(self, mocker): "namespace": "foobar", } - mocker.patch("pinecone.init", return_value=None) - mocker.patch("pinecone.Index.upsert", return_value=None) - mocker.patch("pinecone.Index.query", return_value=fake_query_response) - mocker.patch("pinecone.create_index", return_value=None) + mock_client = mocker.patch("pinecone.Pinecone") + mock_client().Index().upsert.return_value = None + mock_client().Index().query.return_value = fake_query_response + mock_client().create_index.return_value = None @pytest.fixture def driver(self): From a33324bb738dc86f5bb50a642b167f9c0c16655d Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Tue, 30 Apr 2024 14:09:00 -0400 Subject: [PATCH 034/145] Add structure run tool (#764) --- .github/workflows/docs-integration-tests.yml | 2 + CHANGELOG.md | 1 + .../griptape-cloud-structure-run-client.md | 64 ++++++++++++ griptape/tools/__init__.py | 1 + griptape/tools/base_griptape_cloud_client.py | 20 ++++ .../tool.py | 14 +-- .../__init__.py | 0 .../manifest.yml | 5 + .../tool.py | 99 +++++++++++++++++++ mkdocs.yml | 1 + ...est_griptape_cloud_structure_run_client.py | 27 +++++ 11 files changed, 223 insertions(+), 11 deletions(-) create mode 100644 docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md create mode 100644 griptape/tools/base_griptape_cloud_client.py create mode 100644 griptape/tools/griptape_cloud_structure_run_client/__init__.py create mode 100644 griptape/tools/griptape_cloud_structure_run_client/manifest.yml create mode 100644 griptape/tools/griptape_cloud_structure_run_client/tool.py create mode 100644 tests/unit/tools/test_griptape_cloud_structure_run_client.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index ad4457a20..005b8dd5f 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -63,6 +63,8 @@ jobs: GOOGLE_AUTH_URI: ${{ secrets.INTEG_GOOGLE_AUTH_URI }} GOOGLE_TOKEN_URI: ${{ secrets.INTEG_GOOGLE_TOKEN_URI }} GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.INTEG_GOOGLE_AUTH_PROVIDER_X509_CERT_URL }} + GRIPTAPE_CLOUD_API_KEY: ${{ secrets.INTEG_GRIPTAPE_CLOUD_API_KEY }} + GRIPTAPE_CLOUD_STRUCTURE_ID: ${{ secrets.INTEG_GRIPTAPE_CLOUD_STRUCTURE_ID }} OPENWEATHER_API_KEY: ${{ secrets.INTEG_OPENWEATHER_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.INTEG_ANTHROPIC_API_KEY }} SAGEMAKER_LLAMA_ENDPOINT_NAME: ${{ secrets.INTEG_LLAMA_ENDPOINT_NAME }} diff --git a/CHANGELOG.md b/CHANGELOG.md index dbe44d5c1..9d5680c46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AmazonS3FileManagerDriver` for managing files on Amazon S3. - `MediaArtifact` as a base class for `ImageArtifact` and future media Artifacts. - Optional `exception` field to `ErrorArtifact`. +- `GriptapeCloudStructureRunClient` tool for invoking Griptape Cloud Structure Run APIs. ### Changed - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. diff --git a/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md b/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md new file mode 100644 index 000000000..032a84b97 --- /dev/null +++ b/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md @@ -0,0 +1,64 @@ +# GriptapeCloudStructureRunClient + +The GriptapeCloudStructureRunClient tool provides a way to interact with the Griptape Cloud Structure Run API. It can be used to execute a Structure Run and retrieve the results. + +```python +from griptape.tools import GriptapeCloudStructureRunClient +from griptape.structures import Agent +import os + +api_key = os.environ["GRIPTAPE_CLOUD_API_KEY"] +structure_id = os.environ["GRIPTAPE_CLOUD_STRUCTURE_ID"] + +# Create the GriptapeCloudStructureRunClient tool +structure_run_tool = GriptapeCloudStructureRunClient( + description="Danish Baker Agent - Structure to invoke with natural language queries about Danish pastries", + api_key=api_key, + structure_id=structure_id, + off_prompt=False, +) + +# Set up an agent using the GriptapeCloudStructureRunClient tool +agent = Agent( + tools=[structure_run_tool] +) + +# Task: Ask the Griptape Cloud Hosted Structure about new Danish pastries +agent.run( + "What are the new pastries?" +) +``` +``` +[04/29/24 20:46:14] INFO ToolkitTask 3b3f31a123584f05be9bcb02a58dddb6 + Input: what are the new pastries? +[04/29/24 20:46:23] INFO Subtask 2740dcd92bdf4b159dc7a7fb132c98f3 + Thought: To find out about new pastries, I need to use the Danish Baker Agent Structure. I will execute a run of + this Structure with the query "what are the new pastries". + + Actions: [ + { + "name": "GriptapeCloudStructureRunClient", + "path": "execute_structure_run", + "input": { + "values": { + "args": ["what are the new pastries"] + } + }, + "tag": "query_new_pastries" + } + ] +[04/29/24 20:47:01] INFO Subtask 2740dcd92bdf4b159dc7a7fb132c98f3 + Response: {'id': '4a329cbd09ad42e0bd265e9ba4690400', 'name': '4a329cbd09ad42e0bd265e9ba4690400', 'type': + 'TextArtifact', 'value': 'Ah, my friend, I am glad you asked! We have been busy in the bakery, kneading dough + and sprinkling sugar. Our new pastries include the "Copenhagen Cream Puff", a delightful puff pastry filled with + sweet cream and dusted with powdered sugar. We also have the "Danish Delight", a buttery croissant filled with + raspberry jam and topped with a drizzle of white chocolate. And let\'s not forget the "Nordic Nutella Twist", a + flaky pastry twisted with Nutella and sprinkled with chopped hazelnuts. I promise, each bite will transport you + to a cozy Danish bakery!'} +[04/29/24 20:47:07] INFO ToolkitTask 3b3f31a123584f05be9bcb02a58dddb6 + Output: The new pastries include the "Copenhagen Cream Puff," which is a puff pastry filled with sweet cream and + dusted with powdered sugar; the "Danish Delight," a buttery croissant filled with raspberry jam and topped with + white chocolate; and the "Nordic Nutella Twist," a flaky pastry twisted with Nutella and sprinkled with chopped + hazelnuts. +Assistant: The new pastries include the "Copenhagen Cream Puff," which is a puff pastry filled with sweet cream and dusted with powdered sugar; the "Danish Delight," a buttery croissant filled with raspberry jam and topped with white chocolate; and the "Nordic Nutella Twist," a flaky pastry twisted with Nutella and sprinkled with chopped hazelnuts. +``` \ No newline at end of file diff --git a/griptape/tools/__init__.py b/griptape/tools/__init__.py index 5e68ca3fc..13bcf41b3 100644 --- a/griptape/tools/__init__.py +++ b/griptape/tools/__init__.py @@ -24,6 +24,7 @@ from .inpainting_image_generation_client.tool import InpaintingImageGenerationClient from .outpainting_image_generation_client.tool import OutpaintingImageGenerationClient from .griptape_cloud_knowledge_base_client.tool import GriptapeCloudKnowledgeBaseClient +from .griptape_cloud_structure_run_client.tool import GriptapeCloudStructureRunClient from .image_query_client.tool import ImageQueryClient __all__ = [ diff --git a/griptape/tools/base_griptape_cloud_client.py b/griptape/tools/base_griptape_cloud_client.py new file mode 100644 index 000000000..cafe01cd1 --- /dev/null +++ b/griptape/tools/base_griptape_cloud_client.py @@ -0,0 +1,20 @@ +from __future__ import annotations +from abc import ABC +from attr import Factory, define, field +from griptape.tools import BaseTool + + +@define +class BaseGriptapeCloudClient(BaseTool, ABC): + """ + Attributes: + base_url: Base URL for the Griptape Cloud Knowledge Base API. + api_key: API key for Griptape Cloud. + headers: Headers for the Griptape Cloud Knowledge Base API. + """ + + base_url: str = field(default="https://cloud.griptape.ai", kw_only=True) + api_key: str = field(kw_only=True) + headers: dict = field( + default=Factory(lambda self: {"Authorization": f"Bearer {self.api_key}"}, takes_self=True), kw_only=True + ) diff --git a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py index da988284f..89a284c98 100644 --- a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py +++ b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py @@ -2,29 +2,21 @@ from typing import Optional from urllib.parse import urljoin from schema import Schema, Literal -from attr import define, field, Factory -from griptape.tools import BaseTool +from attr import define, field +from griptape.tools.base_griptape_cloud_client import BaseGriptapeCloudClient from griptape.utils.decorators import activity from griptape.artifacts import TextArtifact, ErrorArtifact @define -class GriptapeCloudKnowledgeBaseClient(BaseTool): +class GriptapeCloudKnowledgeBaseClient(BaseGriptapeCloudClient): """ Attributes: description: LLM-friendly knowledge base description. - base_url: Base URL for the Griptape Cloud Knowledge Base API. - api_key: API key for Griptape Cloud. - headers: Headers for the Griptape Cloud Knowledge Base API. knowledge_base_id: ID of the Griptape Cloud Knowledge Base. """ description: Optional[str] = field(default=None, kw_only=True) - base_url: str = field(default="https://cloud.griptape.ai", kw_only=True) - api_key: str = field(kw_only=True) - headers: dict = field( - default=Factory(lambda self: {"Authorization": f"Bearer {self.api_key}"}, takes_self=True), kw_only=True - ) knowledge_base_id: str = field(kw_only=True) @activity( diff --git a/griptape/tools/griptape_cloud_structure_run_client/__init__.py b/griptape/tools/griptape_cloud_structure_run_client/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/tools/griptape_cloud_structure_run_client/manifest.yml b/griptape/tools/griptape_cloud_structure_run_client/manifest.yml new file mode 100644 index 000000000..5741fa336 --- /dev/null +++ b/griptape/tools/griptape_cloud_structure_run_client/manifest.yml @@ -0,0 +1,5 @@ +version: "v1" +name: Griptape Cloud Structure Run Client +description: Tool for using the Griptape Cloud Structure Run API. +contact_email: hello@griptape.ai +legal_info_url: https://www.griptape.ai/legal diff --git a/griptape/tools/griptape_cloud_structure_run_client/tool.py b/griptape/tools/griptape_cloud_structure_run_client/tool.py new file mode 100644 index 000000000..7d4edbd72 --- /dev/null +++ b/griptape/tools/griptape_cloud_structure_run_client/tool.py @@ -0,0 +1,99 @@ +from __future__ import annotations +import time +from typing import Any, Optional +from urllib.parse import urljoin +from schema import Schema, Literal +from attr import define, field +from griptape.tools.base_griptape_cloud_client import BaseGriptapeCloudClient +from griptape.utils.decorators import activity +from griptape.artifacts import InfoArtifact, TextArtifact, ErrorArtifact + + +@define +class GriptapeCloudStructureRunClient(BaseGriptapeCloudClient): + """ + Attributes: + description: LLM-friendly structure description. + structure_id: ID of the Griptape Cloud Structure. + """ + + _description: Optional[str] = field(default=None, kw_only=True) + structure_id: str = field(kw_only=True) + structure_run_wait_time_interval: int = field(default=2, kw_only=True) + structure_run_max_wait_time_attempts: int = field(default=20, kw_only=True) + + @property + def description(self) -> str: + if self._description is None: + from requests import get + + url = urljoin(self.base_url.strip("/"), f"/api/structures/{self.structure_id}/") + + response = get(url, headers=self.headers).json() + if "description" in response: + self._description = response["description"] + else: + raise ValueError(f'Error getting Structure description: {response["message"]}') + + return self._description + + @description.setter + def description(self, value: str) -> None: + self._description = value + + @activity( + config={ + "description": "Can be used to execute a Run of a Structure with the following description: {{ _self.description }}", + "schema": Schema( + {Literal("args", description="A list of string arguments to submit to the Structure Run"): list} + ), + } + ) + def execute_structure_run(self, params: dict) -> InfoArtifact | TextArtifact | ErrorArtifact: + from requests import post, exceptions, HTTPError, Response + + args: list[str] = params["values"]["args"] + url = urljoin(self.base_url.strip("/"), f"/api/structures/{self.structure_id}/runs") + + try: + response: Response = post(url, json={"args": args}, headers=self.headers) + response.raise_for_status() + response_json = response.json() + return self._get_structure_run_result(response_json["structure_run_id"]) + + except (exceptions.RequestException, HTTPError) as err: + return ErrorArtifact(str(err)) + + def _get_structure_run_result(self, structure_run_id: str) -> InfoArtifact | TextArtifact | ErrorArtifact: + url = urljoin(self.base_url.strip("/"), f"/api/structure-runs/{structure_run_id}") + + result = self._get_structure_run_result_attempt(url) + status = result["status"] + + wait_attempts = 0 + while status in ("QUEUED", "RUNNING") and wait_attempts < self.structure_run_max_wait_time_attempts: + # wait + time.sleep(self.structure_run_wait_time_interval) + wait_attempts += 1 + result = self._get_structure_run_result_attempt(url) + status = result["status"] + + if wait_attempts >= self.structure_run_max_wait_time_attempts: + return ErrorArtifact( + f"Failed to get Run result after {self.structure_run_max_wait_time_attempts} attempts." + ) + + if status != "SUCCEEDED": + return ErrorArtifact(result) + + if "output" in result: + return TextArtifact(result["output"]) + else: + return InfoArtifact("No output found in response") + + def _get_structure_run_result_attempt(self, structure_run_url: str) -> Any: + from requests import get, Response + + response: Response = get(structure_run_url, headers=self.headers) + response.raise_for_status() + return response.json() diff --git a/mkdocs.yml b/mkdocs.yml index a083f2b8b..9359bbce8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -128,6 +128,7 @@ nav: - GoogleGmailClient: "griptape-tools/official-tools/google-gmail-client.md" - GoogleDriveClient: "griptape-tools/official-tools/google-drive-client.md" - GoogleDocsClient: "griptape-tools/official-tools/google-docs-client.md" + - GriptapeCloudStructureRunClient: "griptape-tools/official-tools/griptape-cloud-structure-run-client.md" - OpenWeatherClient: "griptape-tools/official-tools/openweather-client.md" - RestApiClient: "griptape-tools/official-tools/rest-api-client.md" - SqlClient: "griptape-tools/official-tools/sql-client.md" diff --git a/tests/unit/tools/test_griptape_cloud_structure_run_client.py b/tests/unit/tools/test_griptape_cloud_structure_run_client.py new file mode 100644 index 000000000..8656a8f77 --- /dev/null +++ b/tests/unit/tools/test_griptape_cloud_structure_run_client.py @@ -0,0 +1,27 @@ +import pytest +from griptape.artifacts import TextArtifact + + +class TestGriptapeCloudStructureRunClient: + @pytest.fixture + def client(self, mocker): + from griptape.tools import GriptapeCloudStructureRunClient + + mock_response = mocker.Mock() + mock_response.json.return_value = {"structure_run_id": 1} + mocker.patch("requests.post", return_value=mock_response) + + mock_response = mocker.Mock() + mock_response.json.return_value = {"description": "fizz buzz", "output": "fooey booey", "status": "SUCCEEDED"} + mocker.patch("requests.get", return_value=mock_response) + + return GriptapeCloudStructureRunClient(base_url="https://api.griptape.ai", api_key="foo bar", structure_id="1") + + def test_execute_structure_run(self, client): + assert isinstance(client.execute_structure_run({"values": {"args": ["foo bar"]}}), TextArtifact) + + def test_get_structure_description(self, client): + assert client.description == "fizz buzz" + + client.description = "foo bar" + assert client.description == "foo bar" From 40735bb6c02909a75f9b3fa26cf38f93951816e1 Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Wed, 1 May 2024 13:37:20 -0400 Subject: [PATCH 035/145] Export GriptapeCloudStructureRunClient in tools __all__ (#766) --- griptape/tools/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/griptape/tools/__init__.py b/griptape/tools/__init__.py index 13bcf41b3..3e4dbb5bc 100644 --- a/griptape/tools/__init__.py +++ b/griptape/tools/__init__.py @@ -54,5 +54,6 @@ "InpaintingImageGenerationClient", "OutpaintingImageGenerationClient", "GriptapeCloudKnowledgeBaseClient", + "GriptapeCloudStructureRunClient", "ImageQueryClient", ] From b2f1323e3fd6db13517c39eca233ac8879dbb0ba Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Thu, 2 May 2024 12:13:22 -0400 Subject: [PATCH 036/145] Update structure run tool example docs (#769) --- .../griptape-cloud-structure-run-client.md | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md b/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md index 032a84b97..1e98de1c3 100644 --- a/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md +++ b/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md @@ -12,7 +12,7 @@ structure_id = os.environ["GRIPTAPE_CLOUD_STRUCTURE_ID"] # Create the GriptapeCloudStructureRunClient tool structure_run_tool = GriptapeCloudStructureRunClient( - description="Danish Baker Agent - Structure to invoke with natural language queries about Danish pastries", + description="RAG Expert Agent - Structure to invoke with natural language queries about the topic of Retrieval Augmented Generation", api_key=api_key, structure_id=structure_id, off_prompt=False, @@ -23,17 +23,17 @@ agent = Agent( tools=[structure_run_tool] ) -# Task: Ask the Griptape Cloud Hosted Structure about new Danish pastries +# Task: Ask the Griptape Cloud Hosted Structure about modular RAG agent.run( - "What are the new pastries?" + "what is modular RAG?" ) ``` ``` -[04/29/24 20:46:14] INFO ToolkitTask 3b3f31a123584f05be9bcb02a58dddb6 - Input: what are the new pastries? -[04/29/24 20:46:23] INFO Subtask 2740dcd92bdf4b159dc7a7fb132c98f3 - Thought: To find out about new pastries, I need to use the Danish Baker Agent Structure. I will execute a run of - this Structure with the query "what are the new pastries". +[05/02/24 11:36:16] INFO ToolkitTask 0d99b986140a42c0828215cbc42156e8 + Input: what is modular RAG? +[05/02/24 11:36:24] INFO Subtask b498fb971198476a83ba1a555ff4fb98 + Thought: To provide an explanation of what modular RAG (Retrieval Augmented Generation) is, I will use the + GriptapeCloudStructureRunClient to execute a Structure Run that can provide information on this topic. Actions: [ { @@ -41,24 +41,28 @@ agent.run( "path": "execute_structure_run", "input": { "values": { - "args": ["what are the new pastries"] + "args": ["What is modular RAG?"] } }, - "tag": "query_new_pastries" + "tag": "modular_rag_info" } ] -[04/29/24 20:47:01] INFO Subtask 2740dcd92bdf4b159dc7a7fb132c98f3 - Response: {'id': '4a329cbd09ad42e0bd265e9ba4690400', 'name': '4a329cbd09ad42e0bd265e9ba4690400', 'type': - 'TextArtifact', 'value': 'Ah, my friend, I am glad you asked! We have been busy in the bakery, kneading dough - and sprinkling sugar. Our new pastries include the "Copenhagen Cream Puff", a delightful puff pastry filled with - sweet cream and dusted with powdered sugar. We also have the "Danish Delight", a buttery croissant filled with - raspberry jam and topped with a drizzle of white chocolate. And let\'s not forget the "Nordic Nutella Twist", a - flaky pastry twisted with Nutella and sprinkled with chopped hazelnuts. I promise, each bite will transport you - to a cozy Danish bakery!'} -[04/29/24 20:47:07] INFO ToolkitTask 3b3f31a123584f05be9bcb02a58dddb6 - Output: The new pastries include the "Copenhagen Cream Puff," which is a puff pastry filled with sweet cream and - dusted with powdered sugar; the "Danish Delight," a buttery croissant filled with raspberry jam and topped with - white chocolate; and the "Nordic Nutella Twist," a flaky pastry twisted with Nutella and sprinkled with chopped - hazelnuts. -Assistant: The new pastries include the "Copenhagen Cream Puff," which is a puff pastry filled with sweet cream and dusted with powdered sugar; the "Danish Delight," a buttery croissant filled with raspberry jam and topped with white chocolate; and the "Nordic Nutella Twist," a flaky pastry twisted with Nutella and sprinkled with chopped hazelnuts. +[05/02/24 11:37:28] INFO Subtask b498fb971198476a83ba1a555ff4fb98 + Response: {'id': 'ea96fc6f92f9417880938ff59273be59', 'name': 'ea96fc6f92f9417880938ff59273be59', 'type': + 'TextArtifact', 'value': "Modular RAG is an advanced architecture that builds upon the foundational principles + of Advanced and Naive RAG paradigms. It offers enhanced adaptability and versatility by incorporating diverse + strategies to improve its components. Modular RAG introduces additional specialized components like the Search + module for direct searches across various data sources, the RAG-Fusion module for expanding user queries into + diverse perspectives, and the Memory module to guide retrieval using the LLM's memory. This approach supports + both sequential processing and integrated end-to-end training across its components, illustrating progression + and refinement within the RAG family."} +[05/02/24 11:37:40] INFO ToolkitTask 0d99b986140a42c0828215cbc42156e8 + Output: Modular RAG is an advanced architecture that builds upon the foundational principles of Advanced and + Naive RAG paradigms. It offers enhanced adaptability and versatility by incorporating diverse strategies to + improve its components. Modular RAG introduces additional specialized components like the Search module for + direct searches across various data sources, the RAG-Fusion module for expanding user queries into diverse + perspectives, and the Memory module to guide retrieval using the LLM's memory. This approach supports both + sequential processing and integrated end-to-end training across its components, illustrating progression and + refinement within the RAG family. +Assistant: Modular RAG is an advanced architecture that builds upon the foundational principles of Advanced and Naive RAG paradigms. It offers enhanced adaptability and versatility by incorporating diverse strategies to improve its components. Modular RAG introduces additional specialized components like the Search module for direct searches across various data sources, the RAG-Fusion module for expanding user queries into diverse perspectives, and the Memory module to guide retrieval using the LLM's memory. This approach supports both sequential processing and integrated end-to-end training across its components, illustrating progression and refinement within the RAG family. ``` \ No newline at end of file From 333b4d534bea1b40a71c11aecd5f2941f7c04c58 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 3 May 2024 13:41:53 -0700 Subject: [PATCH 037/145] Feature/better events (#768) --- .github/workflows/docs-integration-tests.yml | 5 + CHANGELOG.md | 3 +- .../drivers/event-listener-drivers.md | 217 ++++++++++++++++++ docs/griptape-framework/misc/events.md | 18 +- griptape/drivers/__init__.py | 2 - .../amazon_sqs_event_listener_driver.py | 7 +- .../aws_iot_core_event_listener_driver.py | 7 +- .../base_event_listener_driver.py | 26 ++- .../griptape_cloud_event_listener_driver.py | 6 +- .../local_event_listener_driver.py | 18 -- .../webhook_event_listener_driver.py | 6 +- griptape/events/event_listener.py | 11 +- griptape/events/finish_structure_run_event.py | 1 + griptape/events/start_structure_run_event.py | 1 + griptape/structures/structure.py | 8 +- griptape/utils/stream.py | 5 +- mkdocs.yml | 1 + tests/mocks/mock_event_listener_driver.py | 9 + .../test_amazon_sqs_event_listener_driver.py | 4 +- .../test_aws_iot_event_listener_driver.py | 4 +- ...st_griptape_cloud_event_listener_driver.py | 4 +- .../test_local_event_listener_driver.py | 14 -- .../test_webhook_event_listener_driver.py | 6 +- tests/unit/events/test_base_event.py | 2 + tests/unit/events/test_event_listener.py | 92 ++++---- .../events/test_finish_structure_run_event.py | 5 +- .../events/test_start_structure_run_event.py | 5 +- 27 files changed, 352 insertions(+), 135 deletions(-) create mode 100644 docs/griptape-framework/drivers/event-listener-drivers.md delete mode 100644 griptape/drivers/event_listener/local_event_listener_driver.py create mode 100644 tests/mocks/mock_event_listener_driver.py delete mode 100644 tests/unit/drivers/event_listener/test_local_event_listener_driver.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 005b8dd5f..0d6cb76ca 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -94,6 +94,11 @@ jobs: POSTGRES_HOST: ${{ secrets.INTEG_POSTGRES_HOST }} POSTGRES_PORT: ${{ secrets.INTEG_POSTGRES_PORT }} VOYAGE_API_KEY: ${{ secrets.INTEG_VOYAGE_API_KEY }} + WEBHOOK_URL: ${{ secrets.INTEG_WEBHOOK_URL }} + AMAZON_SQS_QUEUE_URL: ${{ secrets.INTEG_AMAZON_SQS_QUEUE_URL }} + GT_CLOUD_STRUCTURE_RUN_ID: ${{ secrets.INTEG_GT_CLOUD_STRUCTURE_RUN_ID }} + AWS_IOT_CORE_ENDPOINT: ${{ secrets.INTEG_AWS_IOT_CORE_ENDPOINT }} + AWS_IOT_CORE_TOPIC: ${{ secrets.INTEG_AWS_IOT_CORE_TOPIC }} services: postgres: image: ankane/pgvector:v0.5.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d5680c46..ff497d2fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AwsIotCoreEventListenerDriver` for sending events to a topic on AWS IoT Core. - `GriptapeCloudEventListenerDriver` for sending events to Griptape Cloud. - `WebhookEventListenerDriver` for sending events to a webhook. -- `LocalEventListenerDriver` for sending events to a callback function. - `BaseFileManagerDriver` to abstract file management operations. - `LocalFileManagerDriver` for managing files on the local file system. - Added optional `BaseLoader.encoding` field. @@ -33,12 +32,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: `PdfLoader` no longer accepts `str` file content, `Path` file paths or `IO` objects as sources. Instead, it will only accept the content of the PDF file as a `bytes` object. - **BREAKING**: `TextLoader` no longer accepts `Path` file paths as a source. It will now accept the content of the text file as a `str` or `bytes` object. - **BREAKING**: `FileManager.default_loader` is now `None` by default. -- **BREAKING**: Replaced `EventListener.handler` with `EventListener.driver` and `LocalEventListenerDriver`. - **BREAKING** Bumped `pinecone` from `^2` to `^3`. - **BREAKING**: Removed `workdir`, `loaders`, `default_loader`, and `save_file_encoding` fields from `FileManager` and added `file_manager_driver`. - **BREADKING**: Removed `mime_type` field from `ImageArtifact`. `mime_type` is now a property constructed using the Artifact type and `format` field. - Improved RAG performance in `VectorQueryEngine`. - Moved [Griptape Docs](https://github.com/griptape-ai/griptape-docs) to this repository. +- Updated `EventListener.handler`'s behavior so that the return value will be passed to the `EventListenerDriver.try_publish_event_payload`'s `event_payload` parameter. ### Fixed - Type hint for parameter `azure_ad_token_provider` on Azure OpenAI drivers to `Optional[Callable[[], str]]`. diff --git a/docs/griptape-framework/drivers/event-listener-drivers.md b/docs/griptape-framework/drivers/event-listener-drivers.md new file mode 100644 index 000000000..da9a6c05d --- /dev/null +++ b/docs/griptape-framework/drivers/event-listener-drivers.md @@ -0,0 +1,217 @@ +## Overview + +Event Listener Drivers are used to send Griptape [Events](../misc/events.md) to external services. + +You can instantiate Drivers and pass them to Event Listeners in your Structure: + +```python +import os + +from griptape.drivers import AmazonSqsEventListenerDriver +from griptape.events import ( + EventListener, +) +from griptape.rules import Rule +from griptape.structures import Agent + +agent = Agent( + rules=[ + Rule( + value="You will be provided with a block of text, and your task is to extract a list of keywords from it." + ) + ], + event_listeners=[ + EventListener( + handler=lambda event: { # You can optionally use the handler to transform the event payload before sending it to the Driver + "event": event.to_dict(), + }, + driver=AmazonSqsEventListenerDriver( + queue_url=os.environ["AMAZON_SQS_QUEUE_URL"], + ), + ), + ], +) + +agent.run( + """Black-on-black ware is a 20th- and 21st-century pottery tradition developed by the Puebloan Native American ceramic artists in Northern New Mexico. + Traditional reduction-fired blackware has been made for centuries by pueblo artists. + Black-on-black ware of the past century is produced with a smooth surface, with the designs applied through selective burnishing or the application of refractory slip. + Another style involves carving or incising designs and selectively polishing the raised areas. + For generations several families from Kha'po Owingeh and P'ohwhóge Owingeh pueblos have been making black-on-black ware with the techniques passed down from matriarch potters. Artists from other pueblos have also produced black-on-black ware. + Several contemporary artists have created works honoring the pottery of their ancestors.""" +) +``` + +Or use them independently: + +```python +import os +from griptape.drivers import GriptapeCloudEventListenerDriver +from griptape.events import FinishStructureRunEvent +from griptape.artifacts import TextArtifact + +event_driver = GriptapeCloudEventListenerDriver( + api_key=os.environ["GRIPTAPE_CLOUD_API_KEY"] +) + +done_event = FinishStructureRunEvent( + output_task_input=TextArtifact("Just started!"), + output_task_output=TextArtifact("All done!"), +) + +event_driver.publish_event(done_event) +``` + +## Event Listener Drivers + +Griptape offers the following Event Listener Drivers for forwarding Griptape Events. + +### Amazon SQS Event Listener Driver + +!!! info + This driver requires the `drivers-event-listener-amazon-sqs` [extra](../index.md#extras). + +The [AmazonSqsEventListenerDriver](../../reference/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.md) sends Events to an [Amazon SQS](https://aws.amazon.com/sqs/) queue. + +```python +import os + +from griptape.drivers import AmazonSqsEventListenerDriver +from griptape.events import ( + EventListener, +) +from griptape.rules import Rule +from griptape.structures import Agent + +agent = Agent( + rules=[ + Rule( + value="You will be provided with a block of text, and your task is to extract a list of keywords from it." + ) + ], + event_listeners=[ + EventListener( + driver=AmazonSqsEventListenerDriver( + queue_url=os.environ["AMAZON_SQS_QUEUE_URL"], + ), + ), + ], +) + +agent.run( + """Black-on-black ware is a 20th- and 21st-century pottery tradition developed by the Puebloan Native American ceramic artists in Northern New Mexico. + Traditional reduction-fired blackware has been made for centuries by pueblo artists. + Black-on-black ware of the past century is produced with a smooth surface, with the designs applied through selective burnishing or the application of refractory slip. + Another style involves carving or incising designs and selectively polishing the raised areas. + For generations several families from Kha'po Owingeh and P'ohwhóge Owingeh pueblos have been making black-on-black ware with the techniques passed down from matriarch potters. Artists from other pueblos have also produced black-on-black ware. + Several contemporary artists have created works honoring the pottery of their ancestors.""" +) +``` + +### AWS IoT Event Listener Driver + +!!! info + This driver requires the `drivers-event-listener-amazon-iot` [extra](../index.md#extras). + +The [AwsIotCoreEventListenerDriver](../../reference/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.md) sends Events to the [AWS IoT Message Broker](https://aws.amazon.com/iot-core/). + +```python +import os + +from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.drivers import AwsIotCoreEventListenerDriver, OpenAiChatPromptDriver +from griptape.events import ( + EventListener, + FinishStructureRunEvent, +) +from griptape.rules import Rule +from griptape.structures import Agent + +agent = Agent( + rules=[ + Rule( + value="You will be provided with a text, and your task is to extract the airport codes from it." + ) + ], + config=StructureConfig( + global_drivers=StructureGlobalDriversConfig( + prompt_driver=OpenAiChatPromptDriver( + model="gpt-3.5-turbo", temperature=0.7 + ), + ) + ), + event_listeners=[ + EventListener( + event_types=[FinishStructureRunEvent], + driver=AwsIotCoreEventListenerDriver( + topic=os.environ["AWS_IOT_CORE_TOPIC"], + iot_endpoint=os.environ["AWS_IOT_CORE_ENDPOINT"], + ), + ), + ], +) + +agent.run("I want to fly from Orlando to Boston") +``` + +### Griptape Cloud Event Listener Driver + +The [GriptapeCloudEventListenerDriver](../../reference/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.md) sends Events to [Griptape Cloud](https://www.griptape.ai/cloud). + +!!! note + This Driver is required when using the Griptape Cloud Managed Structures feature. For local development, you can use the [Skatepark Emulator](https://github.com/griptape-ai/griptape-cli?tab=readme-ov-file#skatepark-emulator). + +```python +import os + +from griptape.drivers import GriptapeCloudEventListenerDriver +from griptape.events import ( + EventListener, + FinishStructureRunEvent, +) +from griptape.structures import Agent + +agent = Agent( + event_listeners=[ + EventListener( + event_types=[FinishStructureRunEvent], + driver=GriptapeCloudEventListenerDriver( + api_key=os.environ["GRIPTAPE_CLOUD_API_KEY"], + ), + ), + ], +) + +agent.run( + "Create a list of 8 questions for an interview with a science fiction author." +) +``` + +### Webhook Event Listener Driver + +The [WebhookEventListenerDriver](../../reference/griptape/drivers/event_listener/webhook_event_listener_driver.md) sends Events to any [Webhook](https://en.wikipedia.org/wiki/Webhook) URL. + +```python +import os + +from griptape.drivers import WebhookEventListenerDriver +from griptape.events import ( + EventListener, + FinishStructureRunEvent, +) +from griptape.structures import Agent + +agent = Agent( + event_listeners=[ + EventListener( + event_types=[FinishStructureRunEvent], + driver=WebhookEventListenerDriver( + webhook_url=os.environ["WEBHOOK_URL"], + ), + ), + ], +) + +agent.run("Analyze the pros and cons of remote work vs. office work") +``` + diff --git a/docs/griptape-framework/misc/events.md b/docs/griptape-framework/misc/events.md index bd43f2404..f45f77199 100644 --- a/docs/griptape-framework/misc/events.md +++ b/docs/griptape-framework/misc/events.md @@ -1,6 +1,7 @@ ## Overview You can use [EventListener](../../reference/griptape/events/event_listener.md)s to listen for events during a Structure's execution. +See [Event Listener Drivers](../drivers/event-listener-drivers.md) for examples on forwarding events to external services. ## Specific Event Types @@ -18,7 +19,6 @@ from griptape.events import ( FinishPromptEvent, EventListener, ) -from griptape.drivers import LocalEventListenerDriver def handler(event: BaseEvent): @@ -28,6 +28,7 @@ def handler(event: BaseEvent): agent = Agent( event_listeners=[ EventListener( + handler, event_types=[ StartTaskEvent, FinishTaskEvent, @@ -36,7 +37,6 @@ agent = Agent( StartPromptEvent, FinishPromptEvent, ], - driver=LocalEventListenerDriver(handler=handler), ) ] ) @@ -65,7 +65,6 @@ Or listen to all events: ```python from griptape.structures import Agent from griptape.events import BaseEvent, EventListener -from griptape.drivers import LocalEventListenerDriver def handler1(event: BaseEvent): @@ -78,8 +77,8 @@ def handler2(event: BaseEvent): agent = Agent( event_listeners=[ - EventListener(driver=LocalEventListenerDriver(handler=handler1)), - EventListener(driver=LocalEventListenerDriver(handler=handler1)), + EventListener(handler1), + EventListener(handler2), ] ) @@ -131,13 +130,12 @@ from griptape.events import CompletionChunkEvent, EventListener from griptape.tasks import ToolkitTask from griptape.structures import Pipeline from griptape.tools import WebScraper, TaskMemoryClient -from griptape.drivers import LocalEventListenerDriver pipeline = Pipeline( event_listeners=[ EventListener( - driver=LocalEventListenerDriver(handler=lambda e: print(e.token, end="", flush=True)), + lambda e: print(e.token, end="", flush=True), event_types=[CompletionChunkEvent], ) ] @@ -180,7 +178,6 @@ To count tokens, you can use Event Listeners and the [TokenCounter](../../refere from griptape import utils from griptape.events import BaseEvent, StartPromptEvent, FinishPromptEvent, EventListener from griptape.structures import Agent -from griptape.drivers import LocalEventListenerDriver token_counter = utils.TokenCounter() @@ -194,7 +191,7 @@ def count_tokens(e: BaseEvent): agent = Agent( event_listeners=[ EventListener( - driver=LocalEventListenerDriver(handler=lambda e: count_tokens(e)), + handler=lambda e: count_tokens(e), event_types=[StartPromptEvent, FinishPromptEvent], ) ] @@ -238,7 +235,6 @@ You can use the [StartPromptEvent](../../reference/griptape/events/start_prompt_ ```python from griptape.structures import Agent from griptape.events import BaseEvent, StartPromptEvent, EventListener -from griptape.drivers import LocalEventListenerDriver def handler(event: BaseEvent): @@ -251,7 +247,7 @@ def handler(event: BaseEvent): agent = Agent( - event_listeners=[EventListener(driver=LocalEventListenerDriver(handler=handler), event_types=[StartPromptEvent])] + event_listeners=[EventListener(handler=handler, event_types=[StartPromptEvent])] ) agent.run("Write me a poem.") diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 740990031..c727c154d 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -91,7 +91,6 @@ from .event_listener.webhook_event_listener_driver import WebhookEventListenerDriver from .event_listener.aws_iot_core_event_listener_driver import AwsIotCoreEventListenerDriver from .event_listener.griptape_cloud_event_listener_driver import GriptapeCloudEventListenerDriver -from .event_listener.local_event_listener_driver import LocalEventListenerDriver from .file_manager.base_file_manager_driver import BaseFileManagerDriver from .file_manager.local_file_manager_driver import LocalFileManagerDriver @@ -177,7 +176,6 @@ "WebhookEventListenerDriver", "AwsIotCoreEventListenerDriver", "GriptapeCloudEventListenerDriver", - "LocalEventListenerDriver", "BaseFileManagerDriver", "LocalFileManagerDriver", "AmazonS3FileManagerDriver", diff --git a/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py index 0db63726b..24e3c9e1e 100644 --- a/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py +++ b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py @@ -1,12 +1,11 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any import json +from typing import TYPE_CHECKING, Any from attr import Factory, define, field from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver -from griptape.events.base_event import BaseEvent from griptape.utils import import_optional_dependency if TYPE_CHECKING: @@ -19,5 +18,5 @@ class AmazonSqsEventListenerDriver(BaseEventListenerDriver): session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) sqs_client: Any = field(default=Factory(lambda self: self.session.client("sqs"), takes_self=True)) - def try_publish_event(self, event: BaseEvent) -> None: - self.sqs_client.send_message(QueueUrl=self.queue_url, MessageBody=json.dumps({"event": event.to_dict()})) + def try_publish_event_payload(self, event_payload: dict) -> None: + self.sqs_client.send_message(QueueUrl=self.queue_url, MessageBody=json.dumps(event_payload)) diff --git a/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py index 876b790e8..302fd91d5 100644 --- a/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py +++ b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py @@ -1,12 +1,11 @@ from __future__ import annotations +import json from typing import TYPE_CHECKING, Any -import json from attr import Factory, define, field from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver -from griptape.events.base_event import BaseEvent from griptape.utils import import_optional_dependency if TYPE_CHECKING: @@ -20,5 +19,5 @@ class AwsIotCoreEventListenerDriver(BaseEventListenerDriver): session: boto3.Session = field(default=Factory(lambda: import_optional_dependency("boto3").Session()), kw_only=True) iotdata_client: Any = field(default=Factory(lambda self: self.session.client("iot-data"), takes_self=True)) - def try_publish_event(self, event: BaseEvent) -> None: - self.iotdata_client.publish(topic=self.topic, payload=json.dumps({"event": event.to_dict()})) + def try_publish_event_payload(self, event_payload: dict) -> None: + self.iotdata_client.publish(topic=self.topic, payload=json.dumps(event_payload)) diff --git a/griptape/drivers/event_listener/base_event_listener_driver.py b/griptape/drivers/event_listener/base_event_listener_driver.py index 5bfbe6709..eec0fe320 100644 --- a/griptape/drivers/event_listener/base_event_listener_driver.py +++ b/griptape/drivers/event_listener/base_event_listener_driver.py @@ -1,20 +1,32 @@ from __future__ import annotations + from abc import ABC, abstractmethod from concurrent import futures -from attr import define, field, Factory -from typing import TYPE_CHECKING +from logging import Logger + +from attr import Factory, define, field -if TYPE_CHECKING: - from griptape.events import BaseEvent +from griptape.events import BaseEvent + +logger = Logger(__name__) @define class BaseEventListenerDriver(ABC): futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) - def publish_event(self, event: BaseEvent) -> None: - self.futures_executor.submit(self.try_publish_event, event) + def publish_event(self, event: BaseEvent | dict) -> None: + if isinstance(event, dict): + self.futures_executor.submit(self._safe_try_publish_event_payload, event) + else: + self.futures_executor.submit(self._safe_try_publish_event_payload, event.to_dict()) @abstractmethod - def try_publish_event(self, event: BaseEvent) -> None: + def try_publish_event_payload(self, event_payload: dict) -> None: ... + + def _safe_try_publish_event_payload(self, event_payload: dict) -> None: + try: + self.try_publish_event_payload(event_payload) + except Exception as e: + logger.error(e) diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py index 90b94c313..461f06be9 100644 --- a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -7,7 +7,6 @@ from attr import define, field, Factory from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver -from griptape.events.base_event import BaseEvent @define @@ -37,7 +36,8 @@ def validate_run_id(self, _, structure_run_id: str): "structure_run_id must be set either in the constructor or as an environment variable (GT_CLOUD_STRUCTURE_RUN_ID)." ) - def try_publish_event(self, event: BaseEvent) -> None: + def try_publish_event_payload(self, event_payload: dict) -> None: url = urljoin(self.base_url.strip("/"), f"/api/structure-runs/{self.structure_run_id}/events") - requests.post(url=url, json=event.to_dict(), headers=self.headers) + response = requests.post(url=url, json=event_payload, headers=self.headers) + response.raise_for_status() diff --git a/griptape/drivers/event_listener/local_event_listener_driver.py b/griptape/drivers/event_listener/local_event_listener_driver.py deleted file mode 100644 index b276b94ef..000000000 --- a/griptape/drivers/event_listener/local_event_listener_driver.py +++ /dev/null @@ -1,18 +0,0 @@ -from __future__ import annotations - -from typing import Callable, Any -from attr import define, field - -from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver -from griptape.events.base_event import BaseEvent - - -@define -class LocalEventListenerDriver(BaseEventListenerDriver): - handler: Callable[[BaseEvent], Any] = field(default=None, kw_only=True) - - def publish_event(self, event: BaseEvent) -> None: - self.try_publish_event(event) - - def try_publish_event(self, event: BaseEvent) -> None: - self.handler(event) diff --git a/griptape/drivers/event_listener/webhook_event_listener_driver.py b/griptape/drivers/event_listener/webhook_event_listener_driver.py index d2f0046d0..3803c86b6 100644 --- a/griptape/drivers/event_listener/webhook_event_listener_driver.py +++ b/griptape/drivers/event_listener/webhook_event_listener_driver.py @@ -5,7 +5,6 @@ from attr import define, field from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver -from griptape.events.base_event import BaseEvent @define @@ -13,5 +12,6 @@ class WebhookEventListenerDriver(BaseEventListenerDriver): webhook_url: str = field(kw_only=True) headers: dict = field(default=None, kw_only=True) - def try_publish_event(self, event: BaseEvent) -> None: - requests.post(url=self.webhook_url, json={"event": event.to_dict()}, headers=self.headers) + def try_publish_event_payload(self, event_payload: dict) -> None: + response = requests.post(url=self.webhook_url, json=event_payload, headers=self.headers) + response.raise_for_status() diff --git a/griptape/events/event_listener.py b/griptape/events/event_listener.py index aa7da5dcd..a6b692d4d 100644 --- a/griptape/events/event_listener.py +++ b/griptape/events/event_listener.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Optional, TYPE_CHECKING -from attrs import define, field +from typing import Optional, TYPE_CHECKING, Callable +from attrs import define, field, Factory from .base_event import BaseEvent if TYPE_CHECKING: @@ -9,6 +9,7 @@ @define class EventListener: + handler: Callable[[BaseEvent], Optional[dict]] = field(default=Factory(lambda: lambda event: event.to_dict())) event_types: Optional[list[type[BaseEvent]]] = field(default=None, kw_only=True) driver: Optional[BaseEventListenerDriver] = field(default=None, kw_only=True) @@ -16,5 +17,9 @@ def publish_event(self, event: BaseEvent) -> None: event_types = self.event_types if event_types is None or type(event) in event_types: + event_payload = self.handler(event) if self.driver is not None: - self.driver.publish_event(event) + if event_payload is not None and isinstance(event_payload, dict): + self.driver.publish_event(event_payload) + else: + self.driver.publish_event(event) diff --git a/griptape/events/finish_structure_run_event.py b/griptape/events/finish_structure_run_event.py index 8591041e2..2a4688fb9 100644 --- a/griptape/events/finish_structure_run_event.py +++ b/griptape/events/finish_structure_run_event.py @@ -9,6 +9,7 @@ @define class FinishStructureRunEvent(BaseEvent): + structure_id: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) output_task_input: Union[ BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]] ] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/start_structure_run_event.py b/griptape/events/start_structure_run_event.py index a0780fd1f..311d687a9 100644 --- a/griptape/events/start_structure_run_event.py +++ b/griptape/events/start_structure_run_event.py @@ -9,6 +9,7 @@ @define class StartStructureRunEvent(BaseEvent): + structure_id: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) input_task_input: Union[ BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]] ] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index e807393f4..ef9205db9 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -258,13 +258,17 @@ def context(self, task: BaseTask) -> dict[str, Any]: def before_run(self) -> None: self.publish_event( - StartStructureRunEvent(input_task_input=self.input_task.input, input_task_output=self.input_task.output) + StartStructureRunEvent( + structure_id=self.id, input_task_input=self.input_task.input, input_task_output=self.input_task.output + ) ) def after_run(self) -> None: self.publish_event( FinishStructureRunEvent( - output_task_input=self.output_task.input, output_task_output=self.output_task.output + structure_id=self.id, + output_task_input=self.output_task.input, + output_task_output=self.output_task.output, ) ) diff --git a/griptape/utils/stream.py b/griptape/utils/stream.py index 80d3ea5a1..a0251fa57 100644 --- a/griptape/utils/stream.py +++ b/griptape/utils/stream.py @@ -53,14 +53,11 @@ def run(self, *args) -> Iterator[TextArtifact]: t.join() def _run_structure(self, *args): - from griptape.drivers import LocalEventListenerDriver - def event_handler(event: BaseEvent): self._event_queue.put(event) stream_event_listener = EventListener( - driver=LocalEventListenerDriver(handler=event_handler), - event_types=[CompletionChunkEvent, FinishPromptEvent, FinishStructureRunEvent], + handler=event_handler, event_types=[CompletionChunkEvent, FinishPromptEvent, FinishStructureRunEvent] ) self.structure.add_event_listener(stream_event_listener) diff --git a/mkdocs.yml b/mkdocs.yml index 9359bbce8..bfedcaac4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -106,6 +106,7 @@ nav: - Image Query Drivers: "griptape-framework/drivers/image-query-drivers.md" - Web Scraper Drivers: "griptape-framework/drivers/web-scraper-drivers.md" - Conversation Memory Drivers: "griptape-framework/drivers/conversation-memory-drivers.md" + - Event Listener Drivers: "griptape-framework/drivers/event-listener-drivers.md" - Data: - Overview: "griptape-framework/data/index.md" - Artifacts: "griptape-framework/data/artifacts.md" diff --git a/tests/mocks/mock_event_listener_driver.py b/tests/mocks/mock_event_listener_driver.py new file mode 100644 index 000000000..3e0c173ca --- /dev/null +++ b/tests/mocks/mock_event_listener_driver.py @@ -0,0 +1,9 @@ +from attr import define + +from griptape.drivers import BaseEventListenerDriver + + +@define +class MockEventListenerDriver(BaseEventListenerDriver): + def try_publish_event_payload(self, event_payload: dict) -> None: + ... diff --git a/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py b/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py index 4a19011be..e0a9e7b7c 100644 --- a/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py @@ -27,5 +27,5 @@ def driver(self): def test_init(self, driver): assert driver - def test_try_publish_event(self, driver): - driver.try_publish_event(event=MockEvent()) + def test_try_publish_event_payload(self, driver): + driver.try_publish_event_payload(MockEvent().to_dict()) diff --git a/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py index c8b6a77ed..cd50ac82d 100644 --- a/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py @@ -21,5 +21,5 @@ def driver(self): def test_init(self, driver): assert driver - def test_try_publish_event(self, driver): - driver.try_publish_event(event=MockEvent()) + def test_try_publish_event_payload(self, driver): + driver.try_publish_event_payload(MockEvent().to_dict()) diff --git a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py index 8d2a261ba..51f29ff71 100644 --- a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py @@ -29,9 +29,9 @@ def test_init(self, driver): assert driver.api_key == "foo bar" assert driver.structure_run_id == "bar baz" - def test_try_publish_event(self, mock_post, driver): + def test_try_publish_event_payload(self, mock_post, driver): event = MockEvent() - driver.try_publish_event(event=event) + driver.try_publish_event_payload(event.to_dict()) mock_post.assert_called_once_with( url="https://cloud123.griptape.ai/api/structure-runs/bar baz/events", diff --git a/tests/unit/drivers/event_listener/test_local_event_listener_driver.py b/tests/unit/drivers/event_listener/test_local_event_listener_driver.py deleted file mode 100644 index a92276fa8..000000000 --- a/tests/unit/drivers/event_listener/test_local_event_listener_driver.py +++ /dev/null @@ -1,14 +0,0 @@ -from moto import mock_iotdata -from unittest.mock import Mock -from tests.mocks.mock_event import MockEvent -from griptape.drivers.event_listener.local_event_listener_driver import LocalEventListenerDriver - - -@mock_iotdata -class TestLocalEventListenerDriver: - def test_try_publish_event(self): - mock = Mock() - event = MockEvent() - driver = LocalEventListenerDriver(handler=mock) - driver.try_publish_event(event=event) - mock.assert_called_once_with(event) diff --git a/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py b/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py index 207fd48cf..f3f872c0a 100644 --- a/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py @@ -15,11 +15,11 @@ def mock_post(self, mocker): def test_init(self): assert WebhookEventListenerDriver(webhook_url="") - def test_try_publish_event(self, mock_post): + def test_try_publish_event_payload(self, mock_post): driver = WebhookEventListenerDriver(webhook_url="foo bar", headers={"Authorization": "Bearer foo bar"}) event = MockEvent() - driver.try_publish_event(event=event) + driver.try_publish_event_payload(event.to_dict()) mock_post.assert_called_once_with( - url="foo bar", json={"event": event.to_dict()}, headers={"Authorization": "Bearer foo bar"} + url="foo bar", json=event.to_dict(), headers={"Authorization": "Bearer foo bar"} ) diff --git a/tests/unit/events/test_base_event.py b/tests/unit/events/test_base_event.py index 2def78015..7656b6b0d 100644 --- a/tests/unit/events/test_base_event.py +++ b/tests/unit/events/test_base_event.py @@ -177,6 +177,7 @@ def test_start_structure_run_event_from_dict(self): dict_value = { "type": "StartStructureRunEvent", "timestamp": 123.0, + "structure_id": "foo", "input_task_input": {"type": "TextArtifact", "value": "foo"}, "input_task_output": {"type": "TextArtifact", "value": "bar"}, } @@ -193,6 +194,7 @@ def test_finish_structure_run_event_from_dict(self): dict_value = { "type": "FinishStructureRunEvent", "timestamp": 123.0, + "structure_id": "foo", "output_task_input": {"type": "TextArtifact", "value": "foo"}, "output_task_output": {"type": "TextArtifact", "value": "bar"}, } diff --git a/tests/unit/events/test_event_listener.py b/tests/unit/events/test_event_listener.py index 39b59ea94..fcc9688ed 100644 --- a/tests/unit/events/test_event_listener.py +++ b/tests/unit/events/test_event_listener.py @@ -1,6 +1,6 @@ from unittest.mock import Mock import pytest -from griptape.drivers.event_listener.local_event_listener_driver import LocalEventListenerDriver +from griptape.events.base_event import BaseEvent from griptape.structures import Pipeline from griptape.tasks import ToolkitTask, ActionsSubtask from griptape.events import ( @@ -17,6 +17,7 @@ ) from tests.mocks.mock_prompt_driver import MockPromptDriver from tests.mocks.mock_tool.tool import MockTool +from tests.mocks.mock_event import MockEvent class TestEventListener: @@ -34,10 +35,7 @@ def test_untyped_listeners(self, pipeline): event_handler_1 = Mock() event_handler_2 = Mock() - pipeline.event_listeners = [ - EventListener(driver=LocalEventListenerDriver(handler=event_handler_1)), - EventListener(driver=LocalEventListenerDriver(handler=event_handler_2)), - ] + pipeline.event_listeners = [EventListener(handler=event_handler_1), EventListener(handler=event_handler_2)] # can't mock subtask events, so must manually call pipeline.tasks[0].subtasks[0].before_run() pipeline.tasks[0].subtasks[0].after_run() @@ -58,37 +56,15 @@ def test_typed_listeners(self, pipeline): completion_chunk_handler = Mock() pipeline.event_listeners = [ - EventListener( - driver=LocalEventListenerDriver(handler=start_prompt_event_handler), event_types=[StartPromptEvent] - ), - EventListener( - driver=LocalEventListenerDriver(handler=finish_prompt_event_handler), event_types=[FinishPromptEvent] - ), - EventListener( - driver=LocalEventListenerDriver(handler=start_task_event_handler), event_types=[StartTaskEvent] - ), - EventListener( - driver=LocalEventListenerDriver(handler=finish_task_event_handler), event_types=[FinishTaskEvent] - ), - EventListener( - driver=LocalEventListenerDriver(handler=start_subtask_event_handler), - event_types=[StartActionsSubtaskEvent], - ), - EventListener( - driver=LocalEventListenerDriver(handler=finish_subtask_event_handler), - event_types=[FinishActionsSubtaskEvent], - ), - EventListener( - driver=LocalEventListenerDriver(handler=start_structure_run_event_handler), - event_types=[StartStructureRunEvent], - ), - EventListener( - driver=LocalEventListenerDriver(handler=finish_structure_run_event_handler), - event_types=[FinishStructureRunEvent], - ), - EventListener( - driver=LocalEventListenerDriver(handler=completion_chunk_handler), event_types=[CompletionChunkEvent] - ), + EventListener(start_prompt_event_handler, event_types=[StartPromptEvent]), + EventListener(finish_prompt_event_handler, event_types=[FinishPromptEvent]), + EventListener(start_task_event_handler, event_types=[StartTaskEvent]), + EventListener(finish_task_event_handler, event_types=[FinishTaskEvent]), + EventListener(start_subtask_event_handler, event_types=[StartActionsSubtaskEvent]), + EventListener(finish_subtask_event_handler, event_types=[FinishActionsSubtaskEvent]), + EventListener(start_structure_run_event_handler, event_types=[StartStructureRunEvent]), + EventListener(finish_structure_run_event_handler, event_types=[FinishStructureRunEvent]), + EventListener(completion_chunk_handler, event_types=[CompletionChunkEvent]), ] # can't mock subtask events, so must manually call @@ -110,23 +86,45 @@ def test_add_remove_event_listener(self, pipeline): pipeline.event_listeners = [] mock1 = Mock() mock2 = Mock() - event_listener_1 = pipeline.add_event_listener( - EventListener(driver=LocalEventListenerDriver(handler=mock1), event_types=[StartPromptEvent]) - ) + # duplicate event listeners will only get added once + event_listener_1 = pipeline.add_event_listener(EventListener(mock1, event_types=[StartPromptEvent])) + pipeline.add_event_listener(EventListener(mock1, event_types=[StartPromptEvent])) - event_listener_2 = pipeline.add_event_listener( - EventListener(driver=LocalEventListenerDriver(handler=mock1), event_types=[FinishPromptEvent]) - ) - event_listener_3 = pipeline.add_event_listener( - EventListener(driver=LocalEventListenerDriver(handler=mock2), event_types=[StartPromptEvent]) - ) + event_listener_3 = pipeline.add_event_listener(EventListener(mock1, event_types=[FinishPromptEvent])) + event_listener_4 = pipeline.add_event_listener(EventListener(mock2, event_types=[StartPromptEvent])) - event_listener_4 = pipeline.add_event_listener(EventListener(driver=LocalEventListenerDriver(handler=mock2))) + event_listener_5 = pipeline.add_event_listener(EventListener(mock2)) assert len(pipeline.event_listeners) == 4 pipeline.remove_event_listener(event_listener_1) - pipeline.remove_event_listener(event_listener_2) pipeline.remove_event_listener(event_listener_3) pipeline.remove_event_listener(event_listener_4) + pipeline.remove_event_listener(event_listener_5) assert len(pipeline.event_listeners) == 0 + + def test_publish_event(self): + mock_event_listener_driver = Mock() + mock_event_listener_driver.try_publish_event_payload.return_value = None + + def event_handler(_: BaseEvent): + return None + + mock_event = MockEvent() + event_listener = EventListener(event_handler, driver=mock_event_listener_driver, event_types=[MockEvent]) + event_listener.publish_event(mock_event) + + mock_event_listener_driver.publish_event.assert_called_once_with(mock_event) + + def test_publish_transformed_event(self): + mock_event_listener_driver = Mock() + mock_event_listener_driver.publish_event.return_value = None + + def event_handler(event: BaseEvent): + return {"event": event.to_dict()} + + mock_event = MockEvent() + event_listener = EventListener(event_handler, driver=mock_event_listener_driver, event_types=[MockEvent]) + event_listener.publish_event(mock_event) + + mock_event_listener_driver.publish_event.assert_called_once_with({"event": mock_event.to_dict()}) diff --git a/tests/unit/events/test_finish_structure_run_event.py b/tests/unit/events/test_finish_structure_run_event.py index d369ab5e5..68ad1ea01 100644 --- a/tests/unit/events/test_finish_structure_run_event.py +++ b/tests/unit/events/test_finish_structure_run_event.py @@ -6,10 +6,13 @@ class TestFinishStructureRunEvent: @pytest.fixture def finish_structure_run_event(self): - return FinishStructureRunEvent(output_task_input=TextArtifact("foo"), output_task_output=TextArtifact("bar")) + return FinishStructureRunEvent( + structure_id="fizz", output_task_input=TextArtifact("foo"), output_task_output=TextArtifact("bar") + ) def test_to_dict(self, finish_structure_run_event): assert finish_structure_run_event.to_dict() is not None + assert finish_structure_run_event.to_dict()["structure_id"] == "fizz" assert finish_structure_run_event.to_dict()["output_task_input"]["value"] == "foo" assert finish_structure_run_event.to_dict()["output_task_output"]["value"] == "bar" diff --git a/tests/unit/events/test_start_structure_run_event.py b/tests/unit/events/test_start_structure_run_event.py index 945b38e64..c2f1b923d 100644 --- a/tests/unit/events/test_start_structure_run_event.py +++ b/tests/unit/events/test_start_structure_run_event.py @@ -6,9 +6,12 @@ class TestStartStructureRunEvent: @pytest.fixture def start_structure_run_event(self): - return StartStructureRunEvent(input_task_input=TextArtifact("foo"), input_task_output=TextArtifact("bar")) + return StartStructureRunEvent( + structure_id="fizz", input_task_input=TextArtifact("foo"), input_task_output=TextArtifact("bar") + ) def test_to_dict(self, start_structure_run_event): assert start_structure_run_event.to_dict() is not None + assert start_structure_run_event.to_dict()["structure_id"] == "fizz" assert start_structure_run_event.to_dict()["input_task_input"]["value"] == "foo" assert start_structure_run_event.to_dict()["input_task_output"]["value"] == "bar" From 8584f0d32f630a42eb340ea1c630bd95e954236b Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 3 May 2024 15:47:30 -0700 Subject: [PATCH 038/145] Fix docs for extras (#770) --- README.md | 3 ++- docs/griptape-framework/index.md | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 847c9d9c9..53c941a2e 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,8 @@ Tools provide capabilities for LLMs to interact with data and services. Griptape Drivers facilitate interactions with external resources and services: -- 🔢 **Prompt and Embedding Drivers** generate vector embeddings from textual inputs. +- 🗣️ **Prompt Drivers** manage textual interactions with LLMs. +- 🔢 **Embedding Drivers** generate vector embeddings from textual inputs. - 💾 **Vector Store Drivers** manage the storage and retrieval of embeddings. - 🎨 **Image Generation Drivers** create images from text descriptions. - 🔎 **Image Query Drivers** query images from text queries. diff --git a/docs/griptape-framework/index.md b/docs/griptape-framework/index.md index 7c33e0588..decf00da5 100644 --- a/docs/griptape-framework/index.md +++ b/docs/griptape-framework/index.md @@ -22,7 +22,7 @@ By default, Griptape uses [OpenAI Completions API](https://platform.openai.com/d Install **griptape**: ``` -pip install griptape[all] -U +pip install "griptape[all]" -U ``` ### Using Poetry @@ -36,7 +36,7 @@ poetry new griptape-quickstart Change your working directory to the new `griptape-quickstart` directory created by Poetry and add the the `griptape` dependency. ``` -poetry add griptape[all] +poetry add "griptape[all]" ``` ### Extras @@ -56,7 +56,7 @@ poetry add griptape To install specific extras (e.g., drivers for [AnthropicPromptDriver](./drivers/prompt-drivers.md#anthropic) and [PineconeVectorStoreDriver](./drivers/vector-store-drivers.md#pinecone)): ``` -poetry add griptape[drivers-prompt-anthropic,drivers-vector-pinecone] +poetry add "griptape[drivers-prompt-anthropic,drivers-vector-pinecone]" ``` For a comprehensive list of extras, please refer to the `[tool.poetry.extras]` section of Griptape's [pyproject.toml](https://github.com/griptape-ai/griptape/blob/main/pyproject.toml). From 0c87ea2c2e27f85bd70c69bc4b6da93392b20172 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 6 May 2024 10:13:51 -0700 Subject: [PATCH 039/145] Add structure run tool/task (#767) --- .github/workflows/docs-integration-tests.yml | 1 + CHANGELOG.md | 7 +- docs/examples/multi-agent-workflow.md | 191 ++++++++++++++++++ .../drivers/structure-run-drivers.md | 97 +++++++++ docs/griptape-framework/structures/tasks.md | 140 +++++++++++++ .../griptape-cloud-structure-run-client.md | 68 ------- .../official-tools/structure-run-client.md | 64 ++++++ griptape/drivers/__init__.py | 7 + .../structure_run}/__init__.py | 0 .../base_structure_run_driver.py | 15 ++ .../griptape_cloud_structure_run_driver.py} | 70 +++---- .../local_structure_run_driver.py | 23 +++ griptape/tasks/__init__.py | 4 + griptape/tasks/base_multi_text_input_task.py | 53 +++++ griptape/tasks/structure_run_task.py | 22 ++ griptape/tools/__init__.py | 4 +- .../manifest.yml | 5 - .../tools/structure_run_client/__init__.py | 0 .../tools/structure_run_client/manifest.yml | 5 + griptape/tools/structure_run_client/tool.py | 34 ++++ mkdocs.yml | 3 +- tests/mocks/mock_multi_text_input_task.py | 9 + tests/unit/drivers/structure_run/__init__.py | 0 ...est_griptape_cloud_structure_run_driver.py | 35 ++++ .../test_local_structure_run_driver.py | 24 +++ .../tasks/test_base_multi_text_input_task.py | 58 ++++++ tests/unit/tasks/test_structure_run_task.py | 18 ++ ...est_griptape_cloud_structure_run_client.py | 27 --- tests/unit/tools/test_structure_run_client.py | 20 ++ 29 files changed, 852 insertions(+), 152 deletions(-) create mode 100644 docs/examples/multi-agent-workflow.md create mode 100644 docs/griptape-framework/drivers/structure-run-drivers.md delete mode 100644 docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md create mode 100644 docs/griptape-tools/official-tools/structure-run-client.md rename griptape/{tools/griptape_cloud_structure_run_client => drivers/structure_run}/__init__.py (100%) create mode 100644 griptape/drivers/structure_run/base_structure_run_driver.py rename griptape/{tools/griptape_cloud_structure_run_client/tool.py => drivers/structure_run/griptape_cloud_structure_run_driver.py} (50%) create mode 100644 griptape/drivers/structure_run/local_structure_run_driver.py create mode 100644 griptape/tasks/base_multi_text_input_task.py create mode 100644 griptape/tasks/structure_run_task.py delete mode 100644 griptape/tools/griptape_cloud_structure_run_client/manifest.yml create mode 100644 griptape/tools/structure_run_client/__init__.py create mode 100644 griptape/tools/structure_run_client/manifest.yml create mode 100644 griptape/tools/structure_run_client/tool.py create mode 100644 tests/mocks/mock_multi_text_input_task.py create mode 100644 tests/unit/drivers/structure_run/__init__.py create mode 100644 tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py create mode 100644 tests/unit/drivers/structure_run/test_local_structure_run_driver.py create mode 100644 tests/unit/tasks/test_base_multi_text_input_task.py create mode 100644 tests/unit/tasks/test_structure_run_task.py delete mode 100644 tests/unit/tools/test_griptape_cloud_structure_run_client.py create mode 100644 tests/unit/tools/test_structure_run_client.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 0d6cb76ca..2f1dba285 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -65,6 +65,7 @@ jobs: GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.INTEG_GOOGLE_AUTH_PROVIDER_X509_CERT_URL }} GRIPTAPE_CLOUD_API_KEY: ${{ secrets.INTEG_GRIPTAPE_CLOUD_API_KEY }} GRIPTAPE_CLOUD_STRUCTURE_ID: ${{ secrets.INTEG_GRIPTAPE_CLOUD_STRUCTURE_ID }} + GRIPTAPE_CLOUD_BASE_URL: ${{ secrets.INTEG_GRIPTAPE_CLOUD_BASE_URL }} OPENWEATHER_API_KEY: ${{ secrets.INTEG_OPENWEATHER_API_KEY }} ANTHROPIC_API_KEY: ${{ secrets.INTEG_ANTHROPIC_API_KEY }} SAGEMAKER_LLAMA_ENDPOINT_NAME: ${{ secrets.INTEG_LLAMA_ENDPOINT_NAME }} diff --git a/CHANGELOG.md b/CHANGELOG.md index ff497d2fb..255ec88b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AmazonS3FileManagerDriver` for managing files on Amazon S3. - `MediaArtifact` as a base class for `ImageArtifact` and future media Artifacts. - Optional `exception` field to `ErrorArtifact`. -- `GriptapeCloudStructureRunClient` tool for invoking Griptape Cloud Structure Run APIs. +- `StructureRunClient` for running other Structures via a Tool. +- `StructureRunTask` for running Structures as a Task from within another Structure. +- `GriptapeCloudStructureRunDriver` for running Structures in Griptape Cloud. +- `LocalStructureRunDriver` for running Structures in the same run-time environment as the code that is running the Structure. ### Changed - **BREAKING**: Secret fields (ex: api_key) removed from serialized Drivers. @@ -34,7 +37,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING**: `FileManager.default_loader` is now `None` by default. - **BREAKING** Bumped `pinecone` from `^2` to `^3`. - **BREAKING**: Removed `workdir`, `loaders`, `default_loader`, and `save_file_encoding` fields from `FileManager` and added `file_manager_driver`. -- **BREADKING**: Removed `mime_type` field from `ImageArtifact`. `mime_type` is now a property constructed using the Artifact type and `format` field. +- **BREAKING**: Removed `mime_type` field from `ImageArtifact`. `mime_type` is now a property constructed using the Artifact type and `format` field. - Improved RAG performance in `VectorQueryEngine`. - Moved [Griptape Docs](https://github.com/griptape-ai/griptape-docs) to this repository. - Updated `EventListener.handler`'s behavior so that the return value will be passed to the `EventListenerDriver.try_publish_event_payload`'s `event_payload` parameter. diff --git a/docs/examples/multi-agent-workflow.md b/docs/examples/multi-agent-workflow.md new file mode 100644 index 000000000..0e85b9bde --- /dev/null +++ b/docs/examples/multi-agent-workflow.md @@ -0,0 +1,191 @@ +In this example we implement a multi-agent Workflow. We have a single "Researcher" Agent that conducts research on a topic, and then fans out to multiple "Writer" Agents to write blog posts based on the research. + +By splitting up our workloads across multiple Structures, we can parallelize the work and leverage the strengths of each Agent. The Researcher can focus on gathering data and insights, while the Writers can focus on crafting engaging narratives. +Additionally, this architecture opens us up to using services such as [Griptape Cloud](https://www.griptape.ai/cloud) to have each Agent run on a separate machine, allowing us to scale our Workflow as needed 🤯. + + +```python +import os + +from griptape.drivers import WebhookEventListenerDriver, LocalStructureRunDriver +from griptape.events import EventListener, FinishStructureRunEvent +from griptape.rules import Rule, Ruleset +from griptape.structures import Agent, Workflow +from griptape.tasks import PromptTask, StructureRunTask +from griptape.tools import ( + TaskMemoryClient, + WebScraper, + WebSearch, +) + +WRITERS = [ + { + "role": "Travel Adventure Blogger", + "goal": "Inspire wanderlust with stories of hidden gems and exotic locales", + "backstory": "With a passport full of stamps, you bring distant cultures and breathtaking scenes to life through vivid storytelling and personal anecdotes.", + }, + { + "role": "Lifestyle Freelance Writer", + "goal": "Share practical advice on living a balanced and stylish life", + "backstory": "From the latest trends in home decor to tips for wellness, your articles help readers create a life that feels both aspirational and attainable.", + }, +] + + +def build_researcher(): + """Builds a Researcher Structure.""" + researcher = Agent( + id="researcher", + tools=[ + WebSearch( + google_api_key=os.environ["GOOGLE_API_KEY"], + google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], + off_prompt=False, + ), + WebScraper( + off_prompt=True, + ), + TaskMemoryClient(off_prompt=False), + ], + rulesets=[ + Ruleset( + name="Position", + rules=[ + Rule( + value="Lead Research Analyst", + ) + ], + ), + Ruleset( + name="Objective", + rules=[ + Rule( + value="Discover innovative advancements in artificial intelligence and data analytics", + ) + ], + ), + Ruleset( + name="Background", + rules=[ + Rule( + value="""You are part of a prominent technology research institute. + Your speciality is spotting new trends. + You excel at analyzing intricate data and delivering practical insights.""" + ) + ], + ), + Ruleset( + name="Desired Outcome", + rules=[ + Rule( + value="Comprehensive analysis report in list format", + ) + ], + ), + ], + ) + + return researcher + + +def build_writer(role: str, goal: str, backstory: str): + """Builds a Writer Structure. + + Args: + role: The role of the writer. + goal: The goal of the writer. + backstory: The backstory of the writer. + """ + writer = Agent( + id=role.lower().replace(" ", "_"), + event_listeners=[ + EventListener( + event_types=[FinishStructureRunEvent], + driver=WebhookEventListenerDriver( + webhook_url=os.environ["WEBHOOK_URL"], + ), + ) + ], + rulesets=[ + Ruleset( + name="Position", + rules=[ + Rule( + value=role, + ) + ], + ), + Ruleset( + name="Objective", + rules=[ + Rule( + value=goal, + ) + ], + ), + Ruleset( + name="Backstory", + rules=[Rule(value=backstory)], + ), + Ruleset( + name="Desired Outcome", + rules=[ + Rule( + value="Full blog post of at least 4 paragraphs", + ) + ], + ), + ], + ) + + return writer + + +if __name__ == "__main__": + # Build the team + team = Workflow() + research_task = team.add_task( + StructureRunTask( + ( + """Perform a detailed examination of the newest developments in AI as of 2024. + Pinpoint major trends, breakthroughs, and their implications for various industries.""", + ), + id="research", + driver=LocalStructureRunDriver( + structure_factory_fn=build_researcher, + ), + ), + ) + end_task = team.add_task( + PromptTask( + 'State "All Done!"', + ) + ) + team.insert_tasks( + research_task, + [ + StructureRunTask( + ( + """Using insights provided, develop an engaging blog + post that highlights the most significant AI advancements. + Your post should be informative yet accessible, catering to a tech-savvy audience. + Make it sound cool, avoid complex words so it doesn't sound like AI. + + Insights: + {{ parent_outputs["research"] }}""", + ), + driver=LocalStructureRunDriver( + structure_factory_fn=lambda: build_writer( + role=writer["role"], + goal=writer["goal"], + backstory=writer["backstory"], + ) + ), + ) + for writer in WRITERS + ], + end_task, + ) + + team.run() +``` diff --git a/docs/griptape-framework/drivers/structure-run-drivers.md b/docs/griptape-framework/drivers/structure-run-drivers.md new file mode 100644 index 000000000..9c1441608 --- /dev/null +++ b/docs/griptape-framework/drivers/structure-run-drivers.md @@ -0,0 +1,97 @@ +## Overview +Structure Run Drivers can be used to run Griptape Structures in a variety of runtime environments. +When combined with the [Structure Run Task](../../griptape-framework/structures/tasks.md#structure-run-task) or [Structure Run Client](../../griptape-tools/official-tools/structure-run-client.md) you can create complex, multi-agent pipelines that span multiple runtime environments. + +## Local Structure Run Driver + +The [LocalStructureRunDriver](../../reference/griptape/drivers/structure_run/local_structure_run_driver.md) is used to run Griptape Structures in the same runtime environment as the code that is running the Structure. + +```python +from griptape.drivers import LocalStructureRunDriver +from griptape.rules import Rule +from griptape.structures import Agent, Pipeline +from griptape.tasks import StructureRunTask + +joke_teller = Agent( + rules=[ + Rule( + value="You are very funny.", + ) + ], +) + +joke_rewriter = Agent( + rules=[ + Rule( + value="You are the editor of a joke book. But you only speak in riddles", + ) + ], +) + +joke_coordinator = Pipeline( + tasks=[ + StructureRunTask( + driver=LocalStructureRunDriver( + structure_factory_fn=lambda: joke_teller, + ), + ), + StructureRunTask( + ("Rewrite this joke: {{ parent_output }}",), + driver=LocalStructureRunDriver( + structure_factory_fn=lambda: joke_rewriter, + ), + ), + ] +) + +joke_coordinator.run("Tell me a joke") +``` + +## Griptape Cloud Structure Run Driver + +The [GriptapeCloudStructureRunDriver](../../reference/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.md) is used to run Griptape Structures in the Griptape Cloud. + + +```python +import os + +from griptape.drivers import GriptapeCloudStructureRunDriver, LocalStructureRunDriver +from griptape.structures import Pipeline, Agent +from griptape.rules import Rule +from griptape.tasks import StructureRunTask + +base_url = os.environ["GRIPTAPE_CLOUD_BASE_URL"] +api_key = os.environ["GRIPTAPE_CLOUD_API_KEY"] +structure_id = os.environ["GRIPTAPE_CLOUD_STRUCTURE_ID"] + + +pipeline = Pipeline( + tasks=[ + StructureRunTask( + ("Think of a question related to Retrieval Augmented Generation.",), + driver=LocalStructureRunDriver( + structure_factory_fn=lambda: Agent( + rules=[ + Rule( + value="You are an expert in Retrieval Augmented Generation.", + ), + Rule( + value="Only output your answer, no other information.", + ), + ] + ) + ), + ), + StructureRunTask( + ("{{ parent_output }}",), + driver=GriptapeCloudStructureRunDriver( + base_url=base_url, + api_key=api_key, + structure_id=structure_id, + ), + ), + ] +) + +pipeline.run() +``` diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index a7aae8734..c7f9e78cd 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -667,3 +667,143 @@ pipeline.add_task( pipeline.run("Describe the weather in the image") ``` + +## Structure Run Task +The [Structure Run Task](../../reference/griptape/tasks/structure_run_task.md) executes another Structure with a given input. +This Task is useful for orchestrating multiple specialized Structures in a single run. Note that the input to the Task is a tuple of arguments that will be passed to the Structure. + +```python +import os + +from griptape.rules import Rule, Ruleset +from griptape.structures import Agent, Pipeline +from griptape.tasks import StructureRunTask +from griptape.drivers import LocalStructureRunDriver +from griptape.tools import ( + TaskMemoryClient, + WebScraper, + WebSearch, +) + + +def build_researcher(): + researcher = Agent( + tools=[ + WebSearch( + google_api_key=os.environ["GOOGLE_API_KEY"], + google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], + off_prompt=False, + ), + WebScraper( + off_prompt=True, + ), + TaskMemoryClient(off_prompt=False), + ], + rulesets=[ + Ruleset( + name="Position", + rules=[ + Rule( + value="Senior Research Analyst", + ) + ], + ), + Ruleset( + name="Objective", + rules=[ + Rule( + value="Uncover cutting-edge developments in AI and data science", + ) + ], + ), + Ruleset( + name="Background", + rules=[ + Rule( + value="""You work at a leading tech think tank., + Your expertise lies in identifying emerging trends. + You have a knack for dissecting complex data and presenting actionable insights.""" + ) + ], + ), + Ruleset( + name="Desired Outcome", + rules=[ + Rule( + value="Full analysis report in bullet points", + ) + ], + ), + ], + ) + + return researcher + + +def build_writer(): + writer = Agent( + input_template="Instructions: {{args[0]}}\nContext: {{args[1]}}", + rulesets=[ + Ruleset( + name="Position", + rules=[ + Rule( + value="Tech Content Strategist", + ) + ], + ), + Ruleset( + name="Objective", + rules=[ + Rule( + value="Craft compelling content on tech advancements", + ) + ], + ), + Ruleset( + name="Backstory", + rules=[ + Rule( + value="""You are a renowned Content Strategist, known for your insightful and engaging articles. + You transform complex concepts into compelling narratives.""" + ) + ], + ), + Ruleset( + name="Desired Outcome", + rules=[ + Rule( + value="Full blog post of at least 4 paragraphs", + ) + ], + ), + ], + ) + + return writer + + +team = Pipeline( + tasks=[ + StructureRunTask( + ( + """Perform a detailed examination of the newest developments in AI as of 2024. + Pinpoint major trends, breakthroughs, and their implications for various industries.""", + ), + driver=LocalStructureRunDriver(structure_factory_fn=build_researcher), + ), + StructureRunTask( + ( + """Utilize the gathered insights to craft a captivating blog + article showcasing the key AI innovations. + Ensure the content is engaging yet straightforward, appealing to a tech-aware readership. + Keep the tone appealing and use simple language to make it less technical.""", + "{{parent_output}}", + ), + driver=LocalStructureRunDriver(structure_factory_fn=build_writer), + ), + ], +) + +team.run() +``` diff --git a/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md b/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md deleted file mode 100644 index 1e98de1c3..000000000 --- a/docs/griptape-tools/official-tools/griptape-cloud-structure-run-client.md +++ /dev/null @@ -1,68 +0,0 @@ -# GriptapeCloudStructureRunClient - -The GriptapeCloudStructureRunClient tool provides a way to interact with the Griptape Cloud Structure Run API. It can be used to execute a Structure Run and retrieve the results. - -```python -from griptape.tools import GriptapeCloudStructureRunClient -from griptape.structures import Agent -import os - -api_key = os.environ["GRIPTAPE_CLOUD_API_KEY"] -structure_id = os.environ["GRIPTAPE_CLOUD_STRUCTURE_ID"] - -# Create the GriptapeCloudStructureRunClient tool -structure_run_tool = GriptapeCloudStructureRunClient( - description="RAG Expert Agent - Structure to invoke with natural language queries about the topic of Retrieval Augmented Generation", - api_key=api_key, - structure_id=structure_id, - off_prompt=False, -) - -# Set up an agent using the GriptapeCloudStructureRunClient tool -agent = Agent( - tools=[structure_run_tool] -) - -# Task: Ask the Griptape Cloud Hosted Structure about modular RAG -agent.run( - "what is modular RAG?" -) -``` -``` -[05/02/24 11:36:16] INFO ToolkitTask 0d99b986140a42c0828215cbc42156e8 - Input: what is modular RAG? -[05/02/24 11:36:24] INFO Subtask b498fb971198476a83ba1a555ff4fb98 - Thought: To provide an explanation of what modular RAG (Retrieval Augmented Generation) is, I will use the - GriptapeCloudStructureRunClient to execute a Structure Run that can provide information on this topic. - - Actions: [ - { - "name": "GriptapeCloudStructureRunClient", - "path": "execute_structure_run", - "input": { - "values": { - "args": ["What is modular RAG?"] - } - }, - "tag": "modular_rag_info" - } - ] -[05/02/24 11:37:28] INFO Subtask b498fb971198476a83ba1a555ff4fb98 - Response: {'id': 'ea96fc6f92f9417880938ff59273be59', 'name': 'ea96fc6f92f9417880938ff59273be59', 'type': - 'TextArtifact', 'value': "Modular RAG is an advanced architecture that builds upon the foundational principles - of Advanced and Naive RAG paradigms. It offers enhanced adaptability and versatility by incorporating diverse - strategies to improve its components. Modular RAG introduces additional specialized components like the Search - module for direct searches across various data sources, the RAG-Fusion module for expanding user queries into - diverse perspectives, and the Memory module to guide retrieval using the LLM's memory. This approach supports - both sequential processing and integrated end-to-end training across its components, illustrating progression - and refinement within the RAG family."} -[05/02/24 11:37:40] INFO ToolkitTask 0d99b986140a42c0828215cbc42156e8 - Output: Modular RAG is an advanced architecture that builds upon the foundational principles of Advanced and - Naive RAG paradigms. It offers enhanced adaptability and versatility by incorporating diverse strategies to - improve its components. Modular RAG introduces additional specialized components like the Search module for - direct searches across various data sources, the RAG-Fusion module for expanding user queries into diverse - perspectives, and the Memory module to guide retrieval using the LLM's memory. This approach supports both - sequential processing and integrated end-to-end training across its components, illustrating progression and - refinement within the RAG family. -Assistant: Modular RAG is an advanced architecture that builds upon the foundational principles of Advanced and Naive RAG paradigms. It offers enhanced adaptability and versatility by incorporating diverse strategies to improve its components. Modular RAG introduces additional specialized components like the Search module for direct searches across various data sources, the RAG-Fusion module for expanding user queries into diverse perspectives, and the Memory module to guide retrieval using the LLM's memory. This approach supports both sequential processing and integrated end-to-end training across its components, illustrating progression and refinement within the RAG family. -``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/structure-run-client.md b/docs/griptape-tools/official-tools/structure-run-client.md new file mode 100644 index 000000000..863e02727 --- /dev/null +++ b/docs/griptape-tools/official-tools/structure-run-client.md @@ -0,0 +1,64 @@ +# StructureRunClient + +The StructureRunClient Tool provides a way to run Structures via a Tool. +It requires you to provide a [Structure Run Driver](../../griptape-framework/drivers/structure-run-drivers.md) to run the Structure in the desired environment. + +```python +import os + +from griptape.drivers import GriptapeCloudStructureRunDriver +from griptape.structures import Agent +from griptape.tools import StructureRunClient + +base_url = os.environ["GRIPTAPE_CLOUD_BASE_URL"] +api_key = os.environ["GRIPTAPE_CLOUD_API_KEY"] +structure_id = os.environ["GRIPTAPE_CLOUD_STRUCTURE_ID"] + +structure_run_tool = StructureRunClient( + description="RAG Expert Agent - Structure to invoke with natural language queries about the topic of Retrieval Augmented Generation", + driver=GriptapeCloudStructureRunDriver( + base_url=base_url, + api_key=api_key, + structure_id=structure_id, + ), + off_prompt=False, +) + +# Set up an agent using the StructureRunClient tool +agent = Agent(tools=[structure_run_tool]) + +# Task: Ask the Griptape Cloud Hosted Structure about modular RAG +agent.run("what is modular RAG?") +``` +``` +[05/02/24 13:50:03] INFO ToolkitTask 4e9458375bda4fbcadb77a94624ed64c + Input: what is modular RAG? +[05/02/24 13:50:10] INFO Subtask 5ef2d72028fc495aa7faf6f46825b004 + Thought: To answer this question, I need to run a search for the term "modular RAG". I will use the StructureRunClient action to execute a + search structure. + Actions: [ + { + "name": "StructureRunClient", + "path": "run_structure", + "input": { + "values": { + "args": "modular RAG" + } + }, + "tag": "search_modular_RAG" + } + ] +[05/02/24 13:50:36] INFO Subtask 5ef2d72028fc495aa7faf6f46825b004 + Response: {'id': '87fa21aded76416e988f8bf39c19760b', 'name': '87fa21aded76416e988f8bf39c19760b', 'type': 'TextArtifact', 'value': 'Modular + Retrieval-Augmented Generation (RAG) is an advanced approach that goes beyond the traditional RAG paradigms, offering enhanced adaptability + and versatility. It involves incorporating diverse strategies to improve its components by adding specialized modules for retrieval and + processing capabilities. The Modular RAG framework allows for module substitution or reconfiguration to address specific challenges, expanding + flexibility by integrating new modules or adjusting interaction flow among existing ones. This approach supports both sequential processing + and integrated end-to-end training across its components, illustrating progression and refinement within the RAG family.'} +[05/02/24 13:50:44] INFO ToolkitTask 4e9458375bda4fbcadb77a94624ed64c + Output: Modular Retrieval-Augmented Generation (RAG) is an advanced approach that goes beyond the traditional RAG paradigms, offering enhanced + adaptability and versatility. It involves incorporating diverse strategies to improve its components by adding specialized modules for + retrieval and processing capabilities. The Modular RAG framework allows for module substitution or reconfiguration to address specific + challenges, expanding flexibility by integrating new modules or adjusting interaction flow among existing ones. This approach supports both + sequential processing and integrated end-to-end training across its components, illustrating progression and refinement within the RAG family. +``` diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index c727c154d..999cacfb5 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -96,6 +96,10 @@ from .file_manager.local_file_manager_driver import LocalFileManagerDriver from .file_manager.amazon_s3_file_manager_driver import AmazonS3FileManagerDriver +from .structure_run.base_structure_run_driver import BaseStructureRunDriver +from .structure_run.griptape_cloud_structure_run_driver import GriptapeCloudStructureRunDriver +from .structure_run.local_structure_run_driver import LocalStructureRunDriver + __all__ = [ "BasePromptDriver", "OpenAiChatPromptDriver", @@ -179,4 +183,7 @@ "BaseFileManagerDriver", "LocalFileManagerDriver", "AmazonS3FileManagerDriver", + "BaseStructureRunDriver", + "GriptapeCloudStructureRunDriver", + "LocalStructureRunDriver", ] diff --git a/griptape/tools/griptape_cloud_structure_run_client/__init__.py b/griptape/drivers/structure_run/__init__.py similarity index 100% rename from griptape/tools/griptape_cloud_structure_run_client/__init__.py rename to griptape/drivers/structure_run/__init__.py diff --git a/griptape/drivers/structure_run/base_structure_run_driver.py b/griptape/drivers/structure_run/base_structure_run_driver.py new file mode 100644 index 000000000..8e10fb231 --- /dev/null +++ b/griptape/drivers/structure_run/base_structure_run_driver.py @@ -0,0 +1,15 @@ +from abc import ABC, abstractmethod + +from attrs import define + +from griptape.artifacts import BaseArtifact + + +@define +class BaseStructureRunDriver(ABC): + def run(self, *args: BaseArtifact) -> BaseArtifact: + return self.try_run(*args) + + @abstractmethod + def try_run(self, *args: BaseArtifact) -> BaseArtifact: + ... diff --git a/griptape/tools/griptape_cloud_structure_run_client/tool.py b/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.py similarity index 50% rename from griptape/tools/griptape_cloud_structure_run_client/tool.py rename to griptape/drivers/structure_run/griptape_cloud_structure_run_driver.py index 7d4edbd72..9ed036995 100644 --- a/griptape/tools/griptape_cloud_structure_run_client/tool.py +++ b/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.py @@ -1,66 +1,41 @@ from __future__ import annotations + import time -from typing import Any, Optional +from typing import Any from urllib.parse import urljoin -from schema import Schema, Literal -from attr import define, field -from griptape.tools.base_griptape_cloud_client import BaseGriptapeCloudClient -from griptape.utils.decorators import activity -from griptape.artifacts import InfoArtifact, TextArtifact, ErrorArtifact + +from attrs import Factory, define, field + +from griptape.artifacts import BaseArtifact, ErrorArtifact, InfoArtifact, TextArtifact +from griptape.drivers.structure_run.base_structure_run_driver import BaseStructureRunDriver @define -class GriptapeCloudStructureRunClient(BaseGriptapeCloudClient): - """ - Attributes: - description: LLM-friendly structure description. - structure_id: ID of the Griptape Cloud Structure. - """ - - _description: Optional[str] = field(default=None, kw_only=True) +class GriptapeCloudStructureRunDriver(BaseStructureRunDriver): + base_url: str = field(default="https://cloud.griptape.ai", kw_only=True) + api_key: str = field(kw_only=True) + headers: dict = field( + default=Factory(lambda self: {"Authorization": f"Bearer {self.api_key}"}, takes_self=True), kw_only=True + ) structure_id: str = field(kw_only=True) structure_run_wait_time_interval: int = field(default=2, kw_only=True) structure_run_max_wait_time_attempts: int = field(default=20, kw_only=True) + async_run: bool = field(default=False, kw_only=True) - @property - def description(self) -> str: - if self._description is None: - from requests import get - - url = urljoin(self.base_url.strip("/"), f"/api/structures/{self.structure_id}/") - - response = get(url, headers=self.headers).json() - if "description" in response: - self._description = response["description"] - else: - raise ValueError(f'Error getting Structure description: {response["message"]}') + def try_run(self, *args: BaseArtifact) -> BaseArtifact: + from requests import HTTPError, Response, exceptions, post - return self._description - - @description.setter - def description(self, value: str) -> None: - self._description = value - - @activity( - config={ - "description": "Can be used to execute a Run of a Structure with the following description: {{ _self.description }}", - "schema": Schema( - {Literal("args", description="A list of string arguments to submit to the Structure Run"): list} - ), - } - ) - def execute_structure_run(self, params: dict) -> InfoArtifact | TextArtifact | ErrorArtifact: - from requests import post, exceptions, HTTPError, Response - - args: list[str] = params["values"]["args"] url = urljoin(self.base_url.strip("/"), f"/api/structures/{self.structure_id}/runs") try: - response: Response = post(url, json={"args": args}, headers=self.headers) + response: Response = post(url, json={"args": [arg.value for arg in args]}, headers=self.headers) response.raise_for_status() response_json = response.json() - return self._get_structure_run_result(response_json["structure_run_id"]) + if self.async_run: + return InfoArtifact("Run started successfully") + else: + return self._get_structure_run_result(response_json["structure_run_id"]) except (exceptions.RequestException, HTTPError) as err: return ErrorArtifact(str(err)) @@ -87,7 +62,7 @@ def _get_structure_run_result(self, structure_run_id: str) -> InfoArtifact | Tex return ErrorArtifact(result) if "output" in result: - return TextArtifact(result["output"]) + return TextArtifact.from_dict(result["output"]) else: return InfoArtifact("No output found in response") @@ -96,4 +71,5 @@ def _get_structure_run_result_attempt(self, structure_run_url: str) -> Any: response: Response = get(structure_run_url, headers=self.headers) response.raise_for_status() + return response.json() diff --git a/griptape/drivers/structure_run/local_structure_run_driver.py b/griptape/drivers/structure_run/local_structure_run_driver.py new file mode 100644 index 000000000..255f91445 --- /dev/null +++ b/griptape/drivers/structure_run/local_structure_run_driver.py @@ -0,0 +1,23 @@ +from __future__ import annotations +from typing import TYPE_CHECKING, Callable + +from attrs import define, field + +from griptape.artifacts import BaseArtifact, InfoArtifact +from griptape.drivers.structure_run.base_structure_run_driver import BaseStructureRunDriver + +if TYPE_CHECKING: + from griptape.structures import Structure + + +@define +class LocalStructureRunDriver(BaseStructureRunDriver): + structure_factory_fn: Callable[[], Structure] = field(kw_only=True) + + def try_run(self, *args: BaseArtifact) -> BaseArtifact: + structure_factory_fn = self.structure_factory_fn().run(*[arg.value for arg in args]) + + if structure_factory_fn.output_task.output is not None: + return structure_factory_fn.output_task.output + else: + return InfoArtifact("No output found in response") diff --git a/griptape/tasks/__init__.py b/griptape/tasks/__init__.py index 7751a0cc9..5d8dac58e 100644 --- a/griptape/tasks/__init__.py +++ b/griptape/tasks/__init__.py @@ -1,5 +1,6 @@ from .base_task import BaseTask from .base_text_input_task import BaseTextInputTask +from .base_multi_text_input_task import BaseMultiTextInputTask from .prompt_task import PromptTask from .actions_subtask import ActionsSubtask from .toolkit_task import ToolkitTask @@ -16,10 +17,12 @@ from .outpainting_image_generation_task import OutpaintingImageGenerationTask from .variation_image_generation_task import VariationImageGenerationTask from .image_query_task import ImageQueryTask +from .structure_run_task import StructureRunTask __all__ = [ "BaseTask", "BaseTextInputTask", + "BaseMultiTextInputTask", "PromptTask", "ActionsSubtask", "ToolkitTask", @@ -36,4 +39,5 @@ "InpaintingImageGenerationTask", "OutpaintingImageGenerationTask", "ImageQueryTask", + "StructureRunTask", ] diff --git a/griptape/tasks/base_multi_text_input_task.py b/griptape/tasks/base_multi_text_input_task.py new file mode 100644 index 000000000..eb00af6ca --- /dev/null +++ b/griptape/tasks/base_multi_text_input_task.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from abc import ABC +from typing import Callable + +from attr import define, field, Factory + +from griptape.artifacts import TextArtifact +from griptape.mixins.rule_mixin import RuleMixin +from griptape.tasks import BaseTask +from griptape.utils import J2 + + +@define +class BaseMultiTextInputTask(RuleMixin, BaseTask, ABC): + DEFAULT_INPUT_TEMPLATE = "{{ args[0] }}" + + _input: tuple[str, ...] | tuple[TextArtifact, ...] | tuple[Callable[[BaseTask], TextArtifact], ...] = field( + default=Factory(lambda self: (self.DEFAULT_INPUT_TEMPLATE,), takes_self=True), alias="input" + ) + + @property + def input(self) -> tuple[TextArtifact, ...]: + if all(isinstance(elem, TextArtifact) for elem in self._input): + return self._input # pyright: ignore + elif all(isinstance(elem, Callable) for elem in self._input): + return tuple([elem(self) for elem in self._input]) # pyright: ignore + elif isinstance(self._input, tuple): + return tuple( + [ + TextArtifact(J2().render_from_string(input_template, **self.full_context)) # pyright: ignore + for input_template in self._input + ] + ) + else: + return tuple([TextArtifact(J2().render_from_string(self._input, **self.full_context))]) + + @input.setter + def input( + self, value: tuple[str, ...] | tuple[TextArtifact, ...] | tuple[Callable[[BaseTask], TextArtifact], ...] + ) -> None: + self._input = value + + def before_run(self) -> None: + super().before_run() + + joined_input = "\n".join([input.to_text() for input in self.input]) + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nInput: {joined_input}") + + def after_run(self) -> None: + super().after_run() + + self.structure.logger.info(f"{self.__class__.__name__} {self.id}\nOutput: {self.output.to_text()}") diff --git a/griptape/tasks/structure_run_task.py b/griptape/tasks/structure_run_task.py new file mode 100644 index 000000000..b7a8f9ea9 --- /dev/null +++ b/griptape/tasks/structure_run_task.py @@ -0,0 +1,22 @@ +from __future__ import annotations + + +from attr import define, field + +from griptape.artifacts import BaseArtifact +from griptape.drivers.structure_run.base_structure_run_driver import BaseStructureRunDriver +from griptape.tasks import BaseMultiTextInputTask + + +@define +class StructureRunTask(BaseMultiTextInputTask): + """Task to run a Structure. + + Attributes: + driver: Driver to run the Structure. + """ + + driver: BaseStructureRunDriver = field(kw_only=True) + + def run(self) -> BaseArtifact: + return self.driver.run(*self.input) diff --git a/griptape/tools/__init__.py b/griptape/tools/__init__.py index 3e4dbb5bc..0c9b6e01d 100644 --- a/griptape/tools/__init__.py +++ b/griptape/tools/__init__.py @@ -24,7 +24,7 @@ from .inpainting_image_generation_client.tool import InpaintingImageGenerationClient from .outpainting_image_generation_client.tool import OutpaintingImageGenerationClient from .griptape_cloud_knowledge_base_client.tool import GriptapeCloudKnowledgeBaseClient -from .griptape_cloud_structure_run_client.tool import GriptapeCloudStructureRunClient +from .structure_run_client.tool import StructureRunClient from .image_query_client.tool import ImageQueryClient __all__ = [ @@ -54,6 +54,6 @@ "InpaintingImageGenerationClient", "OutpaintingImageGenerationClient", "GriptapeCloudKnowledgeBaseClient", - "GriptapeCloudStructureRunClient", + "StructureRunClient", "ImageQueryClient", ] diff --git a/griptape/tools/griptape_cloud_structure_run_client/manifest.yml b/griptape/tools/griptape_cloud_structure_run_client/manifest.yml deleted file mode 100644 index 5741fa336..000000000 --- a/griptape/tools/griptape_cloud_structure_run_client/manifest.yml +++ /dev/null @@ -1,5 +0,0 @@ -version: "v1" -name: Griptape Cloud Structure Run Client -description: Tool for using the Griptape Cloud Structure Run API. -contact_email: hello@griptape.ai -legal_info_url: https://www.griptape.ai/legal diff --git a/griptape/tools/structure_run_client/__init__.py b/griptape/tools/structure_run_client/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/tools/structure_run_client/manifest.yml b/griptape/tools/structure_run_client/manifest.yml new file mode 100644 index 000000000..5f53158d8 --- /dev/null +++ b/griptape/tools/structure_run_client/manifest.yml @@ -0,0 +1,5 @@ +version: "v1" +name: Structure Run Client +description: Tool for running a Structure. +contact_email: hello@griptape.ai +legal_info_url: https://www.griptape.ai/legal diff --git a/griptape/tools/structure_run_client/tool.py b/griptape/tools/structure_run_client/tool.py new file mode 100644 index 000000000..c62b53e97 --- /dev/null +++ b/griptape/tools/structure_run_client/tool.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +from attr import define, field +from schema import Literal, Schema + +from griptape.artifacts import BaseArtifact, TextArtifact +from griptape.drivers import BaseStructureRunDriver +from griptape.tools.base_tool import BaseTool +from griptape.utils.decorators import activity + + +@define +class StructureRunClient(BaseTool): + """ + Attributes: + description: A description of what the Structure does. + driver: Driver to run the Structure. + """ + + description: str = field(kw_only=True) + driver: BaseStructureRunDriver = field(kw_only=True) + + @activity( + config={ + "description": "Can be used to run a Griptape Structure with the following description: {{ self.description }}", + "schema": Schema( + {Literal("args", description="A list of string arguments to submit to the Structure Run"): list} + ), + } + ) + def run_structure(self, params: dict) -> BaseArtifact: + args: list[str] = params["values"]["args"] + + return self.driver.run(*[TextArtifact(arg) for arg in args]) diff --git a/mkdocs.yml b/mkdocs.yml index bfedcaac4..f5f0dc954 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -129,7 +129,7 @@ nav: - GoogleGmailClient: "griptape-tools/official-tools/google-gmail-client.md" - GoogleDriveClient: "griptape-tools/official-tools/google-drive-client.md" - GoogleDocsClient: "griptape-tools/official-tools/google-docs-client.md" - - GriptapeCloudStructureRunClient: "griptape-tools/official-tools/griptape-cloud-structure-run-client.md" + - StructureRunClient: "griptape-tools/official-tools/structure-run-client.md" - OpenWeatherClient: "griptape-tools/official-tools/openweather-client.md" - RestApiClient: "griptape-tools/official-tools/rest-api-client.md" - SqlClient: "griptape-tools/official-tools/sql-client.md" @@ -150,6 +150,7 @@ nav: - Talk to Redshift: "examples/talk-to-redshift.md" - Talk to a Webpage: "examples/talk-to-a-webpage.md" - Talk to a PDF: "examples/talk-to-a-pdf.md" + - Multi Agent Workflows: "examples/multi-agent-workflow.md" - Shared Memory Between Agents: "examples/multiple-agent-shared-memory.md" - Chat Sessions with Amazon DynamoDB: "examples/amazon-dynamodb-sessions.md" - Data: diff --git a/tests/mocks/mock_multi_text_input_task.py b/tests/mocks/mock_multi_text_input_task.py new file mode 100644 index 000000000..1da645ee4 --- /dev/null +++ b/tests/mocks/mock_multi_text_input_task.py @@ -0,0 +1,9 @@ +from attr import define +from griptape.artifacts import TextArtifact +from griptape.tasks import BaseMultiTextInputTask + + +@define +class MockMultiTextInputTask(BaseMultiTextInputTask): + def run(self) -> TextArtifact: + return TextArtifact(self.input[0].to_text()) diff --git a/tests/unit/drivers/structure_run/__init__.py b/tests/unit/drivers/structure_run/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py b/tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py new file mode 100644 index 000000000..8318553b1 --- /dev/null +++ b/tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py @@ -0,0 +1,35 @@ +import pytest +from griptape.artifacts import TextArtifact, InfoArtifact + + +class TestGriptapeCloudStructureRunDriver: + @pytest.fixture + def driver(self, mocker): + from griptape.drivers import GriptapeCloudStructureRunDriver + + mock_response = mocker.Mock() + mock_response.json.return_value = {"structure_run_id": 1} + mocker.patch("requests.post", return_value=mock_response) + + mock_response = mocker.Mock() + mock_response.json.return_value = { + "description": "fizz buzz", + "output": TextArtifact("foo bar").to_dict(), + "status": "SUCCEEDED", + } + mocker.patch("requests.get", return_value=mock_response) + + return GriptapeCloudStructureRunDriver( + base_url="https://cloud-foo.griptape.ai", api_key="foo bar", structure_id="1" + ) + + def test_run(self, driver): + result = driver.run(TextArtifact("foo bar")) + assert isinstance(result, TextArtifact) + assert result.value == "foo bar" + + def test_async_run(self, driver): + driver.async_run = True + result = driver.run(TextArtifact("foo bar")) + assert isinstance(result, InfoArtifact) + assert result.value == "Run started successfully" diff --git a/tests/unit/drivers/structure_run/test_local_structure_run_driver.py b/tests/unit/drivers/structure_run/test_local_structure_run_driver.py new file mode 100644 index 000000000..04da4f2cf --- /dev/null +++ b/tests/unit/drivers/structure_run/test_local_structure_run_driver.py @@ -0,0 +1,24 @@ +import pytest +from griptape.tasks import StructureRunTask +from griptape.structures import Agent +from tests.mocks.mock_prompt_driver import MockPromptDriver +from griptape.drivers import LocalStructureRunDriver +from griptape.structures import Pipeline + + +class TestLocalStructureRunDriver: + @pytest.fixture + def driver(self): + agent = Agent(prompt_driver=MockPromptDriver(mock_output="agent mock output")) + driver = LocalStructureRunDriver(structure_factory_fn=lambda: agent) + + return driver + + def test_run(self, driver): + pipeline = Pipeline(prompt_driver=MockPromptDriver(mock_output="pipeline mock output")) + + task = StructureRunTask(driver=driver) + + pipeline.add_task(task) + + assert task.run().to_text() == "agent mock output" diff --git a/tests/unit/tasks/test_base_multi_text_input_task.py b/tests/unit/tasks/test_base_multi_text_input_task.py new file mode 100644 index 000000000..542162757 --- /dev/null +++ b/tests/unit/tasks/test_base_multi_text_input_task.py @@ -0,0 +1,58 @@ +from tests.mocks.mock_prompt_driver import MockPromptDriver +from griptape.structures import Pipeline +from griptape.artifacts import TextArtifact +from griptape.rules import Ruleset, Rule +from tests.mocks.mock_multi_text_input_task import MockMultiTextInputTask + + +class TestBaseMultiTextInputTask: + def test_string_input(self): + assert MockMultiTextInputTask(("foobar", "bazbar")).input[0].value == "foobar" + assert MockMultiTextInputTask(("foobar", "bazbar")).input[1].value == "bazbar" + + task = MockMultiTextInputTask() + task.input = ("foobar", "bazbar") + assert task.input[0].value == "foobar" + assert task.input[1].value == "bazbar" + + def test_artifact_input(self): + assert MockMultiTextInputTask((TextArtifact("foobar"), TextArtifact("bazbar"))).input[0].value == "foobar" + assert MockMultiTextInputTask((TextArtifact("foobar"), TextArtifact("bazbar"))).input[1].value == "bazbar" + + task = MockMultiTextInputTask() + task.input = (TextArtifact("foobar"), TextArtifact("bazbar")) + assert task.input[0].value == "foobar" + assert task.input[1].value == "bazbar" + + def test_callable_input(self): + assert ( + MockMultiTextInputTask((lambda _: TextArtifact("foobar"), lambda _: TextArtifact("bazbar"))).input[0].value + == "foobar" + ) + assert ( + MockMultiTextInputTask((lambda _: TextArtifact("foobar"), lambda _: TextArtifact("bazbar"))).input[1].value + == "bazbar" + ) + + task = MockMultiTextInputTask() + task.input = (lambda _: TextArtifact("foobar"), lambda _: TextArtifact("bazbar")) + assert task.input[0].value == "foobar" + assert task.input[1].value == "bazbar" + + def test_full_context(self): + parent = MockMultiTextInputTask(("parent1", "parent2")) + subtask = MockMultiTextInputTask(("test1", "test2"), context={"foo": "bar"}) + child = MockMultiTextInputTask(("child2", "child2")) + pipeline = Pipeline(prompt_driver=MockPromptDriver()) + + pipeline.add_tasks(parent, subtask, child) + + pipeline.run() + + context = subtask.full_context + + assert context["foo"] == "bar" + assert context["parent_output"] == parent.output.to_text() + assert context["structure"] == pipeline + assert context["parent"] == parent + assert context["child"] == child diff --git a/tests/unit/tasks/test_structure_run_task.py b/tests/unit/tasks/test_structure_run_task.py new file mode 100644 index 000000000..d89e98c91 --- /dev/null +++ b/tests/unit/tasks/test_structure_run_task.py @@ -0,0 +1,18 @@ +from griptape.tasks import StructureRunTask +from griptape.structures import Agent +from tests.mocks.mock_prompt_driver import MockPromptDriver +from griptape.drivers import LocalStructureRunDriver +from griptape.structures import Pipeline + + +class TestStructureRunTask: + def test_run(self): + agent = Agent(prompt_driver=MockPromptDriver(mock_output="agent mock output")) + pipeline = Pipeline(prompt_driver=MockPromptDriver(mock_output="pipeline mock output")) + driver = LocalStructureRunDriver(structure_factory_fn=lambda: agent) + + task = StructureRunTask(driver=driver) + + pipeline.add_task(task) + + assert task.run().to_text() == "agent mock output" diff --git a/tests/unit/tools/test_griptape_cloud_structure_run_client.py b/tests/unit/tools/test_griptape_cloud_structure_run_client.py deleted file mode 100644 index 8656a8f77..000000000 --- a/tests/unit/tools/test_griptape_cloud_structure_run_client.py +++ /dev/null @@ -1,27 +0,0 @@ -import pytest -from griptape.artifacts import TextArtifact - - -class TestGriptapeCloudStructureRunClient: - @pytest.fixture - def client(self, mocker): - from griptape.tools import GriptapeCloudStructureRunClient - - mock_response = mocker.Mock() - mock_response.json.return_value = {"structure_run_id": 1} - mocker.patch("requests.post", return_value=mock_response) - - mock_response = mocker.Mock() - mock_response.json.return_value = {"description": "fizz buzz", "output": "fooey booey", "status": "SUCCEEDED"} - mocker.patch("requests.get", return_value=mock_response) - - return GriptapeCloudStructureRunClient(base_url="https://api.griptape.ai", api_key="foo bar", structure_id="1") - - def test_execute_structure_run(self, client): - assert isinstance(client.execute_structure_run({"values": {"args": ["foo bar"]}}), TextArtifact) - - def test_get_structure_description(self, client): - assert client.description == "fizz buzz" - - client.description = "foo bar" - assert client.description == "foo bar" diff --git a/tests/unit/tools/test_structure_run_client.py b/tests/unit/tools/test_structure_run_client.py new file mode 100644 index 000000000..b57bfb28f --- /dev/null +++ b/tests/unit/tools/test_structure_run_client.py @@ -0,0 +1,20 @@ +import pytest +from griptape.drivers.structure_run.local_structure_run_driver import LocalStructureRunDriver +from griptape.tools import StructureRunClient +from griptape.structures import Agent +from tests.mocks.mock_prompt_driver import MockPromptDriver + + +class TestStructureRunClient: + @pytest.fixture + def client(self): + driver = MockPromptDriver() + agent = Agent(prompt_driver=driver) + + return StructureRunClient( + description="foo bar", driver=LocalStructureRunDriver(structure_factory_fn=lambda: agent) + ) + + def test_run_structure(self, client): + assert client.run_structure({"values": {"args": "foo bar"}}).value == "mock output" + assert client.description == "foo bar" From 73cc9a888de2277a3e08851ef58f1e8b406909c3 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 6 May 2024 10:43:45 -0700 Subject: [PATCH 040/145] Use factory in example (#772) --- .../drivers/structure-run-drivers.md | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/docs/griptape-framework/drivers/structure-run-drivers.md b/docs/griptape-framework/drivers/structure-run-drivers.md index 9c1441608..c2b94190c 100644 --- a/docs/griptape-framework/drivers/structure-run-drivers.md +++ b/docs/griptape-framework/drivers/structure-run-drivers.md @@ -12,33 +12,39 @@ from griptape.rules import Rule from griptape.structures import Agent, Pipeline from griptape.tasks import StructureRunTask -joke_teller = Agent( - rules=[ - Rule( - value="You are very funny.", - ) - ], -) - -joke_rewriter = Agent( - rules=[ - Rule( - value="You are the editor of a joke book. But you only speak in riddles", - ) - ], -) +def build_joke_teller(): + joke_teller = Agent( + rules=[ + Rule( + value="You are very funny.", + ) + ], + ) + + return joke_teller + +def build_joke_rewriter(): + joke_rewriter = Agent( + rules=[ + Rule( + value="You are the editor of a joke book. But you only speak in riddles", + ) + ], + ) + + return joke_rewriter joke_coordinator = Pipeline( tasks=[ StructureRunTask( driver=LocalStructureRunDriver( - structure_factory_fn=lambda: joke_teller, + structure_factory_fn=build_joke_teller, ), ), StructureRunTask( ("Rewrite this joke: {{ parent_output }}",), driver=LocalStructureRunDriver( - structure_factory_fn=lambda: joke_rewriter, + structure_factory_fn=build_joke_rewriter, ), ), ] From 307ac2bbedfe9ade61aa740d60e3bc88e2d9bc45 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Tue, 14 May 2024 08:15:23 -1000 Subject: [PATCH 041/145] Support batched events (#777) --- CHANGELOG.md | 8 +++++ .../amazon_sqs_event_listener_driver.py | 8 +++++ .../aws_iot_core_event_listener_driver.py | 3 ++ .../base_event_listener_driver.py | 32 +++++++++++++++---- .../griptape_cloud_event_listener_driver.py | 6 ++++ .../webhook_event_listener_driver.py | 4 +++ griptape/events/base_event.py | 6 +++- griptape/events/event_listener.py | 6 ++-- griptape/structures/structure.py | 7 ++-- tests/mocks/mock_event.py | 2 +- tests/mocks/mock_event_listener_driver.py | 5 ++- .../test_amazon_sqs_event_listener_driver.py | 3 ++ .../test_aws_iot_event_listener_driver.py | 3 ++ .../test_base_event_listener_driver.py | 25 +++++++++++++++ ...st_griptape_cloud_event_listener_driver.py | 11 +++++++ .../test_webhook_event_listener_driver.py | 11 +++++++ tests/unit/events/test_event_listener.py | 4 +-- 17 files changed, 126 insertions(+), 18 deletions(-) create mode 100644 tests/unit/drivers/event_listener/test_base_event_listener_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index e31647b7b..632c58bee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## [0.25.1] - 2024-05-09 +### Added +- Optional event batching on Event Listener Drivers. +- `id` field to all events. + +### Changed +- Default behavior of Event Listener Drivers to batch events. + ## [0.25.0] - 2024-05-06 ### Added diff --git a/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py index 24e3c9e1e..1c8132b67 100644 --- a/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py +++ b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py @@ -20,3 +20,11 @@ class AmazonSqsEventListenerDriver(BaseEventListenerDriver): def try_publish_event_payload(self, event_payload: dict) -> None: self.sqs_client.send_message(QueueUrl=self.queue_url, MessageBody=json.dumps(event_payload)) + + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: + entries = [ + {"Id": str(event_payload["id"]), "MessageBody": json.dumps(event_payload)} + for event_payload in event_payload_batch + ] + + self.sqs_client.send_message_batch(QueueUrl=self.queue_url, Entries=entries) diff --git a/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py index 302fd91d5..c4fd72084 100644 --- a/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py +++ b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py @@ -21,3 +21,6 @@ class AwsIotCoreEventListenerDriver(BaseEventListenerDriver): def try_publish_event_payload(self, event_payload: dict) -> None: self.iotdata_client.publish(topic=self.topic, payload=json.dumps(event_payload)) + + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: + self.iotdata_client.publish(topic=self.topic, payload=json.dumps(event_payload_batch)) diff --git a/griptape/drivers/event_listener/base_event_listener_driver.py b/griptape/drivers/event_listener/base_event_listener_driver.py index eec0fe320..8e7f827e9 100644 --- a/griptape/drivers/event_listener/base_event_listener_driver.py +++ b/griptape/drivers/event_listener/base_event_listener_driver.py @@ -14,19 +14,37 @@ @define class BaseEventListenerDriver(ABC): futures_executor: futures.Executor = field(default=Factory(lambda: futures.ThreadPoolExecutor()), kw_only=True) + batched: bool = field(default=True, kw_only=True) + batch_size: int = field(default=10, kw_only=True) - def publish_event(self, event: BaseEvent | dict) -> None: - if isinstance(event, dict): - self.futures_executor.submit(self._safe_try_publish_event_payload, event) - else: - self.futures_executor.submit(self._safe_try_publish_event_payload, event.to_dict()) + _batch: list[dict] = field(default=Factory(list), kw_only=True) + + @property + def batch(self) -> list[dict]: + return self._batch + + def publish_event(self, event: BaseEvent | dict, flush: bool = False) -> None: + self.futures_executor.submit(self._safe_try_publish_event, event, flush) @abstractmethod def try_publish_event_payload(self, event_payload: dict) -> None: ... - def _safe_try_publish_event_payload(self, event_payload: dict) -> None: + @abstractmethod + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: + ... + + def _safe_try_publish_event(self, event: BaseEvent | dict, flush: bool) -> None: try: - self.try_publish_event_payload(event_payload) + event_payload = event if isinstance(event, dict) else event.to_dict() + + if self.batched: + self._batch.append(event_payload) + if len(self.batch) >= self.batch_size or flush: + self.try_publish_event_payload_batch(self.batch) + self._batch = [] + return + else: + self.try_publish_event_payload(event_payload) except Exception as e: logger.error(e) diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py index 461f06be9..2c4149ae7 100644 --- a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -41,3 +41,9 @@ def try_publish_event_payload(self, event_payload: dict) -> None: response = requests.post(url=url, json=event_payload, headers=self.headers) response.raise_for_status() + + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: + url = urljoin(self.base_url.strip("/"), f"/api/structure-runs/{self.structure_run_id}/events") + + response = requests.post(url=url, json=event_payload_batch, headers=self.headers) + response.raise_for_status() diff --git a/griptape/drivers/event_listener/webhook_event_listener_driver.py b/griptape/drivers/event_listener/webhook_event_listener_driver.py index 3803c86b6..242e5428a 100644 --- a/griptape/drivers/event_listener/webhook_event_listener_driver.py +++ b/griptape/drivers/event_listener/webhook_event_listener_driver.py @@ -15,3 +15,7 @@ class WebhookEventListenerDriver(BaseEventListenerDriver): def try_publish_event_payload(self, event_payload: dict) -> None: response = requests.post(url=self.webhook_url, json=event_payload, headers=self.headers) response.raise_for_status() + + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: + response = requests.post(url=self.webhook_url, json=event_payload_batch, headers=self.headers) + response.raise_for_status() diff --git a/griptape/events/base_event.py b/griptape/events/base_event.py index d32defe96..48a48890e 100644 --- a/griptape/events/base_event.py +++ b/griptape/events/base_event.py @@ -1,11 +1,15 @@ from __future__ import annotations + import time +import uuid from abc import ABC -from attr import define, field, Factory + +from attr import Factory, define, field from griptape.mixins import SerializableMixin @define class BaseEvent(SerializableMixin, ABC): + id: str = field(default=Factory(lambda: uuid.uuid4().hex), kw_only=True, metadata={"serializable": True}) timestamp: float = field(default=Factory(lambda: time.time()), kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/event_listener.py b/griptape/events/event_listener.py index a6b692d4d..44d7b2d85 100644 --- a/griptape/events/event_listener.py +++ b/griptape/events/event_listener.py @@ -13,13 +13,13 @@ class EventListener: event_types: Optional[list[type[BaseEvent]]] = field(default=None, kw_only=True) driver: Optional[BaseEventListenerDriver] = field(default=None, kw_only=True) - def publish_event(self, event: BaseEvent) -> None: + def publish_event(self, event: BaseEvent, flush: bool = False) -> None: event_types = self.event_types if event_types is None or type(event) in event_types: event_payload = self.handler(event) if self.driver is not None: if event_payload is not None and isinstance(event_payload, dict): - self.driver.publish_event(event_payload) + self.driver.publish_event(event_payload, flush=flush) else: - self.driver.publish_event(event) + self.driver.publish_event(event, flush=flush) diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index ef9205db9..9cd28ab67 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -249,9 +249,9 @@ def remove_event_listener(self, event_listener: EventListener) -> None: else: raise ValueError("Event Listener not found.") - def publish_event(self, event: BaseEvent) -> None: + def publish_event(self, event: BaseEvent, flush: bool = False) -> None: for event_listener in self.event_listeners: - event_listener.publish_event(event) + event_listener.publish_event(event, flush) def context(self, task: BaseTask) -> dict[str, Any]: return {"args": self.execution_args, "structure": self} @@ -269,7 +269,8 @@ def after_run(self) -> None: structure_id=self.id, output_task_input=self.output_task.input, output_task_output=self.output_task.output, - ) + ), + flush=True, ) @abstractmethod diff --git a/tests/mocks/mock_event.py b/tests/mocks/mock_event.py index 651cf3ece..2b9d9ade3 100644 --- a/tests/mocks/mock_event.py +++ b/tests/mocks/mock_event.py @@ -3,4 +3,4 @@ class MockEvent(BaseEvent): def to_dict(self) -> dict: - return {"timestamp": self.timestamp} + return {"timestamp": self.timestamp, "id": self.id} diff --git a/tests/mocks/mock_event_listener_driver.py b/tests/mocks/mock_event_listener_driver.py index 3e0c173ca..dd54eeb73 100644 --- a/tests/mocks/mock_event_listener_driver.py +++ b/tests/mocks/mock_event_listener_driver.py @@ -6,4 +6,7 @@ @define class MockEventListenerDriver(BaseEventListenerDriver): def try_publish_event_payload(self, event_payload: dict) -> None: - ... + pass + + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: + pass diff --git a/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py b/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py index e0a9e7b7c..706831d67 100644 --- a/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_amazon_sqs_event_listener_driver.py @@ -29,3 +29,6 @@ def test_init(self, driver): def test_try_publish_event_payload(self, driver): driver.try_publish_event_payload(MockEvent().to_dict()) + + def test_try_publish_event_payload_batch(self, driver): + driver.try_publish_event_payload_batch([MockEvent().to_dict() for _ in range(3)]) diff --git a/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py index cd50ac82d..9a5fe9ec0 100644 --- a/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_aws_iot_event_listener_driver.py @@ -23,3 +23,6 @@ def test_init(self, driver): def test_try_publish_event_payload(self, driver): driver.try_publish_event_payload(MockEvent().to_dict()) + + def test_try_publish_event_payload_batch(self, driver): + driver.try_publish_event_payload_batch([MockEvent().to_dict() for _ in range(3)]) diff --git a/tests/unit/drivers/event_listener/test_base_event_listener_driver.py b/tests/unit/drivers/event_listener/test_base_event_listener_driver.py new file mode 100644 index 000000000..6d33dd2a0 --- /dev/null +++ b/tests/unit/drivers/event_listener/test_base_event_listener_driver.py @@ -0,0 +1,25 @@ +from tests.mocks.mock_event import MockEvent +from tests.mocks.mock_event_listener_driver import MockEventListenerDriver + + +class TestBaseEventListenerDriver: + def test__safe_try_publish_event(self): + driver = MockEventListenerDriver(batched=False) + + for _ in range(4): + driver._safe_try_publish_event(MockEvent().to_dict(), flush=False) + assert len(driver.batch) == 0 + + def test__safe_try_publish_event_batch(self): + driver = MockEventListenerDriver(batched=True) + + for _ in range(0, 3): + driver._safe_try_publish_event(MockEvent().to_dict(), flush=False) + assert len(driver.batch) == 3 + + def test__safe_try_publish_event_batch_flush(self): + driver = MockEventListenerDriver(batched=True) + + for _ in range(0, 3): + driver._safe_try_publish_event(MockEvent().to_dict(), flush=True) + assert len(driver.batch) == 0 diff --git a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py index 51f29ff71..d27f09ec8 100644 --- a/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_griptape_cloud_event_listener_driver.py @@ -39,6 +39,17 @@ def test_try_publish_event_payload(self, mock_post, driver): headers={"Authorization": "Bearer foo bar"}, ) + def try_publish_event_payload_batch(self, mock_post, driver): + for _ in range(3): + event = MockEvent() + driver.try_publish_event_payload(event.to_dict()) + + mock_post.assert_called_with( + url="https://cloud123.griptape.ai/api/structure-runs/bar baz/events", + json=event.to_dict(), + headers={"Authorization": "Bearer foo bar"}, + ) + def test_no_structure_run_id(self): with pytest.raises(ValueError): GriptapeCloudEventListenerDriver(api_key="foo bar") diff --git a/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py b/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py index f3f872c0a..50021cbe3 100644 --- a/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py +++ b/tests/unit/drivers/event_listener/test_webhook_event_listener_driver.py @@ -23,3 +23,14 @@ def test_try_publish_event_payload(self, mock_post): mock_post.assert_called_once_with( url="foo bar", json=event.to_dict(), headers={"Authorization": "Bearer foo bar"} ) + + def test_try_publish_event_payload_batch(self, mock_post): + driver = WebhookEventListenerDriver(webhook_url="foo bar", headers={"Authorization": "Bearer foo bar"}) + + for _ in range(3): + event = MockEvent() + driver.try_publish_event_payload(event.to_dict()) + + mock_post.assert_called_with( + url="foo bar", json=event.to_dict(), headers={"Authorization": "Bearer foo bar"} + ) diff --git a/tests/unit/events/test_event_listener.py b/tests/unit/events/test_event_listener.py index fcc9688ed..2f32837e0 100644 --- a/tests/unit/events/test_event_listener.py +++ b/tests/unit/events/test_event_listener.py @@ -114,7 +114,7 @@ def event_handler(_: BaseEvent): event_listener = EventListener(event_handler, driver=mock_event_listener_driver, event_types=[MockEvent]) event_listener.publish_event(mock_event) - mock_event_listener_driver.publish_event.assert_called_once_with(mock_event) + mock_event_listener_driver.publish_event.assert_called_once_with(mock_event, flush=False) def test_publish_transformed_event(self): mock_event_listener_driver = Mock() @@ -127,4 +127,4 @@ def event_handler(event: BaseEvent): event_listener = EventListener(event_handler, driver=mock_event_listener_driver, event_types=[MockEvent]) event_listener.publish_event(mock_event) - mock_event_listener_driver.publish_event.assert_called_once_with({"event": mock_event.to_dict()}) + mock_event_listener_driver.publish_event.assert_called_once_with({"event": mock_event.to_dict()}, flush=False) From c39ad53f5dd67522b84f5399fca84b1fda75505e Mon Sep 17 00:00:00 2001 From: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> Date: Tue, 14 May 2024 17:31:58 -0400 Subject: [PATCH 042/145] Add gpt-4o and update OpenAiStructureConfig default prompt_driver (#780) --- CHANGELOG.md | 3 +++ griptape/config/openai_structure_config.py | 2 +- griptape/tokenizers/openai_tokenizer.py | 7 ++++++- tests/unit/config/test_openai_structure_config.py | 10 +++++----- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 632c58bee..c2b9403b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed +- Default behavior of OpenAiStructureConfig to utilize `gpt-4o` for prompt_driver. + ## [0.25.1] - 2024-05-09 ### Added - Optional event batching on Event Listener Drivers. diff --git a/griptape/config/openai_structure_config.py b/griptape/config/openai_structure_config.py index 283fca2d1..64c32ecec 100644 --- a/griptape/config/openai_structure_config.py +++ b/griptape/config/openai_structure_config.py @@ -24,7 +24,7 @@ class OpenAiStructureConfig(BaseStructureConfig): global_drivers: StructureGlobalDriversConfig = field( default=Factory( lambda: StructureGlobalDriversConfig( - prompt_driver=OpenAiChatPromptDriver(model="gpt-4"), + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o"), image_generation_driver=OpenAiImageGenerationDriver(model="dall-e-2", image_size="512x512"), image_query_driver=OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview"), embedding_driver=OpenAiEmbeddingDriver(model="text-embedding-3-small"), diff --git a/griptape/tokenizers/openai_tokenizer.py b/griptape/tokenizers/openai_tokenizer.py index 08c334e0c..dda8bfe15 100644 --- a/griptape/tokenizers/openai_tokenizer.py +++ b/griptape/tokenizers/openai_tokenizer.py @@ -10,7 +10,7 @@ class OpenAiTokenizer(BaseTokenizer): DEFAULT_OPENAI_GPT_3_COMPLETION_MODEL = "gpt-3.5-turbo-instruct" DEFAULT_OPENAI_GPT_3_CHAT_MODEL = "gpt-3.5-turbo" - DEFAULT_OPENAI_GPT_4_MODEL = "gpt-4" + DEFAULT_OPENAI_GPT_4_MODEL = "gpt-4o" DEFAULT_ENCODING = "cl100k_base" DEFAULT_MAX_TOKENS = 2049 DEFAULT_MAX_OUTPUT_TOKENS = 4096 @@ -18,6 +18,7 @@ class OpenAiTokenizer(BaseTokenizer): # https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo MODEL_PREFIXES_TO_MAX_INPUT_TOKENS = { + "gpt-4o": 128000, "gpt-4-1106": 128000, "gpt-4-32k": 32768, "gpt-4": 8192, @@ -85,6 +86,7 @@ def count_tokens(self, text: str | list[dict], model: Optional[str] = None) -> i "gpt-4-32k-0314", "gpt-4-0613", "gpt-4-32k-0613", + "gpt-4o-2024-05-13", }: tokens_per_message = 3 tokens_per_name = 1 @@ -96,6 +98,9 @@ def count_tokens(self, text: str | list[dict], model: Optional[str] = None) -> i elif "gpt-3.5-turbo" in model or "gpt-35-turbo" in model: logging.info("gpt-3.5-turbo may update over time. Returning num tokens assuming gpt-3.5-turbo-0613.") return self.count_tokens(text, model="gpt-3.5-turbo-0613") + elif "gpt-4o" in model: + logging.info("gpt-4o may update over time. Returning num tokens assuming gpt-4o-2024-05-13.") + return self.count_tokens(text, model="gpt-4o-2024-05-13") elif "gpt-4" in model: logging.info("gpt-4 may update over time. Returning num tokens assuming gpt-4-0613.") return self.count_tokens(text, model="gpt-4-0613") diff --git a/tests/unit/config/test_openai_structure_config.py b/tests/unit/config/test_openai_structure_config.py index 60eeed091..a6df9330c 100644 --- a/tests/unit/config/test_openai_structure_config.py +++ b/tests/unit/config/test_openai_structure_config.py @@ -19,7 +19,7 @@ def test_to_dict(self, config): "prompt_driver": { "type": "OpenAiChatPromptDriver", "base_url": None, - "model": "gpt-4", + "model": "gpt-4o", "organization": None, "response_format": None, "seed": None, @@ -72,7 +72,7 @@ def test_to_dict(self, config): "prompt_driver": { "base_url": None, "type": "OpenAiChatPromptDriver", - "model": "gpt-4", + "model": "gpt-4o", "organization": None, "response_format": None, "seed": None, @@ -98,7 +98,7 @@ def test_to_dict(self, config): "prompt_driver": { "type": "OpenAiChatPromptDriver", "base_url": None, - "model": "gpt-4", + "model": "gpt-4o", "organization": None, "response_format": None, "seed": None, @@ -113,7 +113,7 @@ def test_to_dict(self, config): "prompt_driver": { "type": "OpenAiChatPromptDriver", "base_url": None, - "model": "gpt-4", + "model": "gpt-4o", "organization": None, "response_format": None, "seed": None, @@ -129,7 +129,7 @@ def test_to_dict(self, config): "prompt_driver": { "type": "OpenAiChatPromptDriver", "base_url": None, - "model": "gpt-4", + "model": "gpt-4o", "organization": None, "response_format": None, "seed": None, From 6e1e84ff25418d70e4cc9bd3c9b9e19f847b4a23 Mon Sep 17 00:00:00 2001 From: Andrew French Date: Wed, 15 May 2024 09:58:56 -0700 Subject: [PATCH 043/145] Update tiktoken to support GPT-4o (#783) --- poetry.lock | 79 ++++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 42 insertions(+), 39 deletions(-) diff --git a/poetry.lock b/poetry.lock index 072338a59..14f5e2bff 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3292,6 +3292,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -3300,6 +3301,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -4691,47 +4694,47 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "tiktoken" -version = "0.5.2" +version = "0.7.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.8" files = [ - {file = "tiktoken-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c4e654282ef05ec1bd06ead22141a9a1687991cef2c6a81bdd1284301abc71d"}, - {file = "tiktoken-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b3134aa24319f42c27718c6967f3c1916a38a715a0fa73d33717ba121231307"}, - {file = "tiktoken-0.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6092e6e77730929c8c6a51bb0d7cfdf1b72b63c4d033d6258d1f2ee81052e9e5"}, - {file = "tiktoken-0.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ad8ae2a747622efae75837abba59be6c15a8f31b4ac3c6156bc56ec7a8e631"}, - {file = "tiktoken-0.5.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51cba7c8711afa0b885445f0637f0fcc366740798c40b981f08c5f984e02c9d1"}, - {file = "tiktoken-0.5.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3d8c7d2c9313f8e92e987d585ee2ba0f7c40a0de84f4805b093b634f792124f5"}, - {file = "tiktoken-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:692eca18c5fd8d1e0dde767f895c17686faaa102f37640e884eecb6854e7cca7"}, - {file = "tiktoken-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:138d173abbf1ec75863ad68ca289d4da30caa3245f3c8d4bfb274c4d629a2f77"}, - {file = "tiktoken-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7388fdd684690973fdc450b47dfd24d7f0cbe658f58a576169baef5ae4658607"}, - {file = "tiktoken-0.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a114391790113bcff670c70c24e166a841f7ea8f47ee2fe0e71e08b49d0bf2d4"}, - {file = "tiktoken-0.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca96f001e69f6859dd52926d950cfcc610480e920e576183497ab954e645e6ac"}, - {file = "tiktoken-0.5.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:15fed1dd88e30dfadcdd8e53a8927f04e1f6f81ad08a5ca824858a593ab476c7"}, - {file = "tiktoken-0.5.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f8e692db5756f7ea8cb0cfca34638316dcf0841fb8469de8ed7f6a015ba0b0"}, - {file = "tiktoken-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:bcae1c4c92df2ffc4fe9f475bf8148dbb0ee2404743168bbeb9dcc4b79dc1fdd"}, - {file = "tiktoken-0.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b76a1e17d4eb4357d00f0622d9a48ffbb23401dcf36f9716d9bd9c8e79d421aa"}, - {file = "tiktoken-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01d8b171bb5df4035580bc26d4f5339a6fd58d06f069091899d4a798ea279d3e"}, - {file = "tiktoken-0.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42adf7d4fb1ed8de6e0ff2e794a6a15005f056a0d83d22d1d6755a39bffd9e7f"}, - {file = "tiktoken-0.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3f894dbe0adb44609f3d532b8ea10820d61fdcb288b325a458dfc60fefb7db"}, - {file = "tiktoken-0.5.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:58ccfddb4e62f0df974e8f7e34a667981d9bb553a811256e617731bf1d007d19"}, - {file = "tiktoken-0.5.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58902a8bad2de4268c2a701f1c844d22bfa3cbcc485b10e8e3e28a050179330b"}, - {file = "tiktoken-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:5e39257826d0647fcac403d8fa0a474b30d02ec8ffc012cfaf13083e9b5e82c5"}, - {file = "tiktoken-0.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bde3b0fbf09a23072d39c1ede0e0821f759b4fa254a5f00078909158e90ae1f"}, - {file = "tiktoken-0.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2ddee082dcf1231ccf3a591d234935e6acf3e82ee28521fe99af9630bc8d2a60"}, - {file = "tiktoken-0.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35c057a6a4e777b5966a7540481a75a31429fc1cb4c9da87b71c8b75b5143037"}, - {file = "tiktoken-0.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c4a049b87e28f1dc60509f8eb7790bc8d11f9a70d99b9dd18dfdd81a084ffe6"}, - {file = "tiktoken-0.5.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5bf5ce759089f4f6521ea6ed89d8f988f7b396e9f4afb503b945f5c949c6bec2"}, - {file = "tiktoken-0.5.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0c964f554af1a96884e01188f480dad3fc224c4bbcf7af75d4b74c4b74ae0125"}, - {file = "tiktoken-0.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:368dd5726d2e8788e47ea04f32e20f72a2012a8a67af5b0b003d1e059f1d30a3"}, - {file = "tiktoken-0.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a2deef9115b8cd55536c0a02c0203512f8deb2447f41585e6d929a0b878a0dd2"}, - {file = "tiktoken-0.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ed7d380195affbf886e2f8b92b14edfe13f4768ff5fc8de315adba5b773815e"}, - {file = "tiktoken-0.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76fce01309c8140ffe15eb34ded2bb94789614b7d1d09e206838fc173776a18"}, - {file = "tiktoken-0.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60a5654d6a2e2d152637dd9a880b4482267dfc8a86ccf3ab1cec31a8c76bfae8"}, - {file = "tiktoken-0.5.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:41d4d3228e051b779245a8ddd21d4336f8975563e92375662f42d05a19bdff41"}, - {file = "tiktoken-0.5.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c1cdec2c92fcde8c17a50814b525ae6a88e8e5b02030dc120b76e11db93f13"}, - {file = "tiktoken-0.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:84ddb36faedb448a50b246e13d1b6ee3437f60b7169b723a4b2abad75e914f3e"}, - {file = "tiktoken-0.5.2.tar.gz", hash = "sha256:f54c581f134a8ea96ce2023ab221d4d4d81ab614efa0b2fbce926387deb56c80"}, + {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, + {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79383a6e2c654c6040e5f8506f3750db9ddd71b550c724e673203b4f6b4b4590"}, + {file = "tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4511c52caacf3c4981d1ae2df85908bd31853f33d30b345c8b6830763f769c"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13c94efacdd3de9aff824a788353aa5749c0faee1fbe3816df365ea450b82311"}, + {file = "tiktoken-0.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8e58c7eb29d2ab35a7a8929cbeea60216a4ccdf42efa8974d8e176d50c9a3df5"}, + {file = "tiktoken-0.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:21a20c3bd1dd3e55b91c1331bf25f4af522c525e771691adbc9a69336fa7f702"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10c7674f81e6e350fcbed7c09a65bca9356eaab27fb2dac65a1e440f2bcfe30f"}, + {file = "tiktoken-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:084cec29713bc9d4189a937f8a35dbdfa785bd1235a34c1124fe2323821ee93f"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811229fde1652fedcca7c6dfe76724d0908775b353556d8a71ed74d866f73f7b"}, + {file = "tiktoken-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b6e7dc2e7ad1b3757e8a24597415bafcfb454cebf9a33a01f2e6ba2e663992"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1063c5748be36344c7e18c7913c53e2cca116764c2080177e57d62c7ad4576d1"}, + {file = "tiktoken-0.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20295d21419bfcca092644f7e2f2138ff947a6eb8cfc732c09cc7d76988d4a89"}, + {file = "tiktoken-0.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:959d993749b083acc57a317cbc643fb85c014d055b2119b739487288f4e5d1cb"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:71c55d066388c55a9c00f61d2c456a6086673ab7dec22dd739c23f77195b1908"}, + {file = "tiktoken-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09ed925bccaa8043e34c519fbb2f99110bd07c6fd67714793c21ac298e449410"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03c6c40ff1db0f48a7b4d2dafeae73a5607aacb472fa11f125e7baf9dce73704"}, + {file = "tiktoken-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d20b5c6af30e621b4aca094ee61777a44118f52d886dbe4f02b70dfe05c15350"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d427614c3e074004efa2f2411e16c826f9df427d3c70a54725cae860f09e4bf4"}, + {file = "tiktoken-0.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8c46d7af7b8c6987fac9b9f61041b452afe92eb087d29c9ce54951280f899a97"}, + {file = "tiktoken-0.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:0bc603c30b9e371e7c4c7935aba02af5994a909fc3c0fe66e7004070858d3f8f"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2398fecd38c921bcd68418675a6d155fad5f5e14c2e92fcf5fe566fa5485a858"}, + {file = "tiktoken-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f5f6afb52fb8a7ea1c811e435e4188f2bef81b5e0f7a8635cc79b0eef0193d6"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:861f9ee616766d736be4147abac500732b505bf7013cfaf019b85892637f235e"}, + {file = "tiktoken-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54031f95c6939f6b78122c0aa03a93273a96365103793a22e1793ee86da31685"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fffdcb319b614cf14f04d02a52e26b1d1ae14a570f90e9b55461a72672f7b13d"}, + {file = "tiktoken-0.7.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c72baaeaefa03ff9ba9688624143c858d1f6b755bb85d456d59e529e17234769"}, + {file = "tiktoken-0.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:131b8aeb043a8f112aad9f46011dced25d62629091e51d9dc1adbf4a1cc6aa98"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cabc6dc77460df44ec5b879e68692c63551ae4fae7460dd4ff17181df75f1db7"}, + {file = "tiktoken-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8d57f29171255f74c0aeacd0651e29aa47dff6f070cb9f35ebc14c82278f3b25"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ee92776fdbb3efa02a83f968c19d4997a55c8e9ce7be821ceee04a1d1ee149c"}, + {file = "tiktoken-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e215292e99cb41fbc96988ef62ea63bb0ce1e15f2c147a61acc319f8b4cbe5bf"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8a81bac94769cab437dd3ab0b8a4bc4e0f9cf6835bcaa88de71f39af1791727a"}, + {file = "tiktoken-0.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d6d73ea93e91d5ca771256dfc9d1d29f5a554b83821a1dc0891987636e0ae226"}, + {file = "tiktoken-0.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:2bcb28ddf79ffa424f171dfeef9a4daff61a94c631ca6813f43967cb263b83b9"}, + {file = "tiktoken-0.7.0.tar.gz", hash = "sha256:1077266e949c24e0291f6c350433c6f0971365ece2b173a23bc3b9f9defef6b6"}, ] [package.dependencies] @@ -5389,4 +5392,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7aa1485db323176c7b372efd3483d060c469d18fdf0c6ed172bb3a82d4ab238b" +content-hash = "032d9be0951a4048eb10716e492ea1f91e978ceb1ee24e5d13f3251f37cefb0a" diff --git a/pyproject.toml b/pyproject.toml index 105591208..65df87303 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ attrs = ">=22" jinja2 = ">=3.1.3" marshmallow = ">=3" marshmallow-enum = ">=1.5" -tiktoken = ">=0.3" +tiktoken = ">=0.7" rich = ">=13" schema = ">=0.7" pyyaml = ">=6" From 72e3022733d648f4cf1eb3545020838867cd423f Mon Sep 17 00:00:00 2001 From: Andrew French Date: Wed, 15 May 2024 10:42:24 -0700 Subject: [PATCH 044/145] Support case when model returns empty Actions list (#779) --- CHANGELOG.md | 1 + griptape/tasks/actions_subtask.py | 114 ++++++++++++----------- tests/unit/tasks/test_actions_subtask.py | 26 +++++- 3 files changed, 83 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c2b9403b6..3c77efce5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Type hint for parameter `azure_ad_token_provider` on Azure OpenAI drivers to `Optional[Callable[[], str]]`. - Missing parameters `azure_ad_token` and `azure_ad_token_provider` on the default client for `AzureOpenAiCompletionPromptDriver`. +- Standardize behavior between omitted and empty actions list when initializing `ActionsSubtask`. ## [0.24.2] - 2024-04-04 diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index 6ed1bff5d..ef2c2ce6f 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -198,69 +198,73 @@ def __init_from_prompt(self, value: str) -> None: if self.thought is None and len(thought_matches) > 0: self.thought = thought_matches[-1] - if len(actions_matches) > 0: - try: - data = actions_matches[-1] - actions_list: list = json.loads(data, strict=False) + self.__parse_actions(actions_matches) + # If there are no actions to take but an answer is provided, set the answer as the output. + if len(self.actions) == 0 and self.output is None and len(answer_matches) > 0: + self.output = TextArtifact(answer_matches[-1]) + + def __parse_actions(self, actions_matches: list[str]) -> None: + if len(actions_matches) == 0: + return + + try: + data = actions_matches[-1] + actions_list: list = json.loads(data, strict=False) + + if isinstance(self.origin_task, ActionsSubtaskOriginMixin): + self.origin_task.actions_schema().validate(actions_list) + + for action_object in actions_list: + # Load action name; throw exception if the key is not present + action_tag = action_object["tag"] + + # Load action name; throw exception if the key is not present + action_name = action_object["name"] + + # Load action method; throw exception if the key is not present + action_path = action_object["path"] + + # Load optional input value; don't throw exceptions if key is not present + if "input" in action_object: + # The schema library has a bug, where something like `Or(str, None)` doesn't get + # correctly translated into JSON schema. For some optional input fields LLMs sometimes + # still provide null value, which trips up the validator. The temporary solution that + # works is to strip all key-values where value is null. + action_input = remove_null_values_in_dict_recursively(action_object["input"]) + else: + action_input = {} + + # Load the action itself if isinstance(self.origin_task, ActionsSubtaskOriginMixin): - self.origin_task.actions_schema().validate(actions_list) - - if not actions_list: - raise schema.SchemaError("Array item count 0 is less than minimum count of 1.") - - for action_object in actions_list: - # Load action name; throw exception if the key is not present - action_tag = action_object["tag"] - - # Load action name; throw exception if the key is not present - action_name = action_object["name"] - - # Load action method; throw exception if the key is not present - action_path = action_object["path"] - - # Load optional input value; don't throw exceptions if key is not present - if "input" in action_object: - # The schema library has a bug, where something like `Or(str, None)` doesn't get - # correctly translated into JSON schema. For some optional input fields LLMs sometimes - # still provide null value, which trips up the validator. The temporary solution that - # works is to strip all key-values where value is null. - action_input = remove_null_values_in_dict_recursively(action_object["input"]) - else: - action_input = {} - - # Load the action itself - if isinstance(self.origin_task, ActionsSubtaskOriginMixin): - tool = self.origin_task.find_tool(action_name) - else: - raise Exception( - "ActionSubtask must be attached to a Task that implements ActionSubtaskOriginMixin." - ) - - new_action = ActionsSubtask.Action( - tag=action_tag, name=action_name, path=action_path, input=action_input, tool=tool + tool = self.origin_task.find_tool(action_name) + else: + raise Exception( + "ActionSubtask must be attached to a Task that implements ActionSubtaskOriginMixin." ) - if new_action.tool: - if new_action.input: - self.__validate_action(new_action) + new_action = ActionsSubtask.Action( + tag=action_tag, name=action_name, path=action_path, input=action_input, tool=tool + ) - # Don't forget to add it to the subtask actions list! - self.actions.append(new_action) - except SyntaxError as e: - self.structure.logger.error(f"Subtask {self.origin_task.id}\nSyntax error: {e}") + if new_action.tool: + if new_action.input: + self.__validate_action(new_action) - self.actions.append(self.__error_to_action(f"syntax error: {e}")) - except schema.SchemaError as e: - self.structure.logger.error(f"Subtask {self.origin_task.id}\nInvalid action JSON: {e}") + # Don't forget to add it to the subtask actions list! + self.actions.append(new_action) + except SyntaxError as e: + self.structure.logger.error(f"Subtask {self.origin_task.id}\nSyntax error: {e}") - self.actions.append(self.__error_to_action(f"Action JSON validation error: {e}")) - except Exception as e: - self.structure.logger.error(f"Subtask {self.origin_task.id}\nError parsing tool action: {e}") + self.actions.append(self.__error_to_action(f"syntax error: {e}")) + except schema.SchemaError as e: + self.structure.logger.error(f"Subtask {self.origin_task.id}\nInvalid action JSON: {e}") - self.actions.append(self.__error_to_action(f"Action input parsing error: {e}")) - elif self.output is None and len(answer_matches) > 0: - self.output = TextArtifact(answer_matches[-1]) + self.actions.append(self.__error_to_action(f"Action JSON validation error: {e}")) + except Exception as e: + self.structure.logger.error(f"Subtask {self.origin_task.id}\nError parsing tool action: {e}") + + self.actions.append(self.__error_to_action(f"Action input parsing error: {e}")) def __error_to_action(self, error: str) -> Action: return ActionsSubtask.Action(tag="error", name="error", input={"error": error}) diff --git a/tests/unit/tasks/test_actions_subtask.py b/tests/unit/tasks/test_actions_subtask.py index a1e697346..8b231d85f 100644 --- a/tests/unit/tasks/test_actions_subtask.py +++ b/tests/unit/tasks/test_actions_subtask.py @@ -60,6 +60,16 @@ def test_with_no_action_input(self): assert json_dict[0].get("input") is None def test_no_actions(self): + valid_input = "Thought: need to test\n" "<|Response|>: test observation\n" "Answer: test output" + + task = ToolkitTask(tools=[MockTool()]) + Agent().add_task(task) + subtask = task.add_subtask(ActionsSubtask(valid_input)) + json_dict = json.loads(subtask.actions_to_json()) + + assert len(json_dict) == 0 + + def test_empty_actions(self): valid_input = "Thought: need to test\n" "Actions: []\n" "<|Response|>: test observation\n" "Answer: test output" task = ToolkitTask(tools=[MockTool()]) @@ -67,7 +77,17 @@ def test_no_actions(self): subtask = task.add_subtask(ActionsSubtask(valid_input)) json_dict = json.loads(subtask.actions_to_json()) + assert len(json_dict) == 0 + + def test_invalid_actions(self): + invalid_input = ( + "Thought: need to test\n" "Actions: [{,{]\n" "<|Response|>: test observation\n" "Answer: test output" + ) + + task = ToolkitTask(tools=[MockTool()]) + Agent().add_task(task) + subtask = task.add_subtask(ActionsSubtask(invalid_input)) + json_dict = json.loads(subtask.actions_to_json()) + assert json_dict[0]["name"] == "error" - assert json_dict[0]["input"] == { - "error": "Action JSON validation error: Array item count 0 is less than minimum count of 1." - } + assert "Action input parsing error" in json_dict[0]["input"]["error"] From 3d4c58102946e912902553e79ac791e497352d0b Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Wed, 15 May 2024 20:37:46 +0200 Subject: [PATCH 045/145] Fix RedisVectorStoreDriver bugs (#782) --- CHANGELOG.md | 4 + .../drivers/vector-store-drivers.md | 2 +- .../vector/redis_vector_store_driver.py | 12 ++- .../vector/test_redis_vector_store_driver.py | 80 +++++++++++++++---- 4 files changed, 78 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c77efce5..c24f744c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Default behavior of OpenAiStructureConfig to utilize `gpt-4o` for prompt_driver. +### Fixed +- Honor `namespace` in `RedisVectorStoreDriver.query()`. +- Correctly set the `meta`, `score`, and `vector` fields of query result returned from `RedisVectorStoreDriver.query()`. + ## [0.25.1] - 2024-05-09 ### Added - Optional event batching on Event Listener Drivers. diff --git a/docs/griptape-framework/drivers/vector-store-drivers.md b/docs/griptape-framework/drivers/vector-store-drivers.md index e2e85d2c9..73a416c84 100644 --- a/docs/griptape-framework/drivers/vector-store-drivers.md +++ b/docs/griptape-framework/drivers/vector-store-drivers.md @@ -316,7 +316,7 @@ print(result) The format for creating a vector index should be similar to the following: ``` -FT.CREATE idx:griptape ON hash PREFIX 1 "griptape:" SCHEMA tag TAG vector VECTOR FLAT 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE +FT.CREATE idx:griptape ON hash PREFIX 1 "griptape:" SCHEMA namespace TAG vector VECTOR FLAT 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE ``` ## OpenSearch Vector Store Driver diff --git a/griptape/drivers/vector/redis_vector_store_driver.py b/griptape/drivers/vector/redis_vector_store_driver.py index db99725a3..3772818ab 100644 --- a/griptape/drivers/vector/redis_vector_store_driver.py +++ b/griptape/drivers/vector/redis_vector_store_driver.py @@ -64,6 +64,9 @@ def upsert_vector( mapping["vector"] = np.array(vector, dtype=np.float32).tobytes() mapping["vec_string"] = bytes_vector + if namespace: + mapping["namespace"] = namespace + if meta: mapping["metadata"] = json.dumps(meta) @@ -120,8 +123,9 @@ def query( vector = self.embedding_driver.embed_string(query) + filter_expression = f"(@namespace:{{{namespace}}})" if namespace else "*" query_expression = ( - Query(f"*=>[KNN {count or 10} @vector $vector as score]") + Query(f"{filter_expression}=>[KNN {count or 10} @vector $vector as score]") .sort_by("score") .return_fields("id", "score", "metadata", "vec_string") .paging(0, count or 10) @@ -134,15 +138,15 @@ def query( query_results = [] for document in results: - metadata = getattr(document, "metadata", None) + metadata = json.loads(document.metadata) if hasattr(document, "metadata") else None namespace = document.id.split(":")[0] if ":" in document.id else None vector_id = document.id.split(":")[1] if ":" in document.id else document.id - vector_float_list = json.loads(document["vec_string"]) if include_vectors else None + vector_float_list = json.loads(document.vec_string) if include_vectors else None query_results.append( BaseVectorStoreDriver.QueryResult( id=vector_id, vector=vector_float_list, - score=float(document["score"]), + score=float(document.score), meta=metadata, namespace=namespace, ) diff --git a/tests/unit/drivers/vector/test_redis_vector_store_driver.py b/tests/unit/drivers/vector/test_redis_vector_store_driver.py index b5dfa2832..3c98180e7 100644 --- a/tests/unit/drivers/vector/test_redis_vector_store_driver.py +++ b/tests/unit/drivers/vector/test_redis_vector_store_driver.py @@ -1,3 +1,4 @@ +from unittest.mock import MagicMock import pytest import redis from tests.mocks.mock_embedding_driver import MockEmbeddingDriver @@ -6,19 +7,21 @@ class TestRedisVectorStorageDriver: @pytest.fixture(autouse=True) - def mock_redis(self, mocker): - fake_hgetall_response = {b"vector": b"\x00\x00\x80?\x00\x00\x00@\x00\x00@@", b"metadata": b'{"foo": "bar"}'} + def mock_client(self, mocker): + return mocker.patch("redis.Redis").return_value - mocker.patch.object(redis.StrictRedis, "hset", return_value=None) - mocker.patch.object(redis.StrictRedis, "hgetall", return_value=fake_hgetall_response) - mocker.patch.object(redis.StrictRedis, "keys", return_value=[b"some_namespace:some_vector_id"]) - - fake_redisearch = mocker.MagicMock() - fake_redisearch.search = mocker.MagicMock(return_value=mocker.MagicMock(docs=[])) - fake_redisearch.info = mocker.MagicMock(side_effect=Exception("Index not found")) - fake_redisearch.create_index = mocker.MagicMock(return_value=None) + @pytest.fixture + def mock_keys(self, mock_client): + mock_client.keys.return_value = [b"some_vector_id"] + return mock_client.keys - mocker.patch.object(redis.StrictRedis, "ft", return_value=fake_redisearch) + @pytest.fixture + def mock_hgetall(self, mock_client): + mock_client.hgetall.return_value = { + b"vector": b"\x00\x00\x80?\x00\x00\x00@\x00\x00@@", + b"metadata": b'{"foo": "bar"}', + } + return mock_client.hgetall @pytest.fixture def driver(self): @@ -26,23 +29,70 @@ def driver(self): host="localhost", port=6379, index="test_index", db=0, embedding_driver=MockEmbeddingDriver() ) + @pytest.fixture + def mock_search(self, mock_client): + mock_client.ft.return_value.search.return_value.docs = [ + MagicMock( + id="some_namespace:some_vector_id", + score="0.456198036671", + metadata='{"foo": "bar"}', + vec_string="[1.0, 2.0, 3.0]", + ) + ] + return mock_client.ft.return_value.search + def test_upsert_vector(self, driver): assert ( driver.upsert_vector([1.0, 2.0, 3.0], vector_id="some_vector_id", namespace="some_namespace") == "some_vector_id" ) - def test_load_entry(self, driver): + def test_load_entry(self, driver, mock_hgetall): + entry = driver.load_entry("some_vector_id") + mock_hgetall.assert_called_once_with("some_vector_id") + assert entry.id == "some_vector_id" + assert entry.vector == [1.0, 2.0, 3.0] + assert entry.meta == {"foo": "bar"} + + def test_load_entry_with_namespace(self, driver, mock_hgetall): entry = driver.load_entry("some_vector_id", namespace="some_namespace") + mock_hgetall.assert_called_once_with("some_namespace:some_vector_id") assert entry.id == "some_vector_id" assert entry.vector == [1.0, 2.0, 3.0] assert entry.meta == {"foo": "bar"} - def test_load_entries(self, driver): + def test_load_entries(self, driver, mock_keys, mock_hgetall): + entries = driver.load_entries() + mock_keys.assert_called_once_with("*") + mock_hgetall.assert_called_once_with("some_vector_id") + assert len(entries) == 1 + assert entries[0].vector == [1.0, 2.0, 3.0] + assert entries[0].meta == {"foo": "bar"} + + def test_load_entries_with_namespace(self, driver, mock_keys, mock_hgetall): entries = driver.load_entries(namespace="some_namespace") + mock_keys.assert_called_once_with("some_namespace:*") + mock_hgetall.assert_called_once_with("some_namespace:some_vector_id") assert len(entries) == 1 assert entries[0].vector == [1.0, 2.0, 3.0] assert entries[0].meta == {"foo": "bar"} - def test_query(self, driver): - assert driver.query("some_vector_id") == [] + def test_query(self, driver, mock_search): + results = driver.query("Some query") + mock_search.assert_called_once() + assert len(results) == 1 + assert results[0].namespace == "some_namespace" + assert results[0].id == "some_vector_id" + assert results[0].score == 0.456198036671 + assert results[0].meta == {"foo": "bar"} + assert results[0].vector is None + + def test_query_with_include_vectors(self, driver, mock_search): + results = driver.query("Some query", include_vectors=True) + mock_search.assert_called_once() + assert len(results) == 1 + assert results[0].namespace == "some_namespace" + assert results[0].id == "some_vector_id" + assert results[0].score == 0.456198036671 + assert results[0].meta == {"foo": "bar"} + assert results[0].vector == [1.0, 2.0, 3.0] From 44a2c62a6d6dd35f1c12eeedd2be3fc6d6df447e Mon Sep 17 00:00:00 2001 From: Andrew French Date: Wed, 15 May 2024 13:44:18 -0700 Subject: [PATCH 046/145] Text to Speech Support (#755) --- .github/workflows/docs-integration-tests.yml | 1 + docs/griptape-framework/data/artifacts.md | 6 +- .../drivers/text-to-speech-drivers.md | 54 +++ .../engines/audio-engines.md | 29 ++ .../official-tools/text-to-speech-client.md | 27 ++ griptape/artifacts/__init__.py | 4 +- griptape/artifacts/audio_artifact.py | 12 + .../config/structure_global_drivers_config.py | 5 + griptape/drivers/__init__.py | 9 + griptape/drivers/text_to_speech/__init__.py | 0 .../base_text_to_speech_driver.py | 44 +++ .../dummy_text_to_speech_driver.py | 13 + .../elevenlabs_text_to_speech_driver.py | 42 +++ .../openai_text_to_speech_driver.py | 36 ++ griptape/engines/__init__.py | 2 + griptape/engines/audio/__init__.py | 0 .../engines/audio/text_to_speech_engine.py | 14 + griptape/events/__init__.py | 7 +- .../events/base_image_generation_event.py | 4 +- .../events/base_media_generation_event.py | 9 + griptape/events/base_text_to_speech_event.py | 10 + .../events/finish_text_to_speech_event.py | 11 + griptape/events/start_text_to_speech_event.py | 10 + griptape/mixins/__init__.py | 4 +- ...py => media_artifact_file_output_mixin.py} | 6 +- griptape/tasks/__init__.py | 4 + griptape/tasks/base_audio_generation_task.py | 17 + griptape/tasks/base_image_generation_task.py | 8 +- .../tasks/prompt_image_generation_task.py | 2 +- griptape/tasks/text_to_speech_task.py | 56 +++ .../tool.py | 4 +- .../tool.py | 4 +- .../prompt_image_generation_client/tool.py | 4 +- .../tools/text_to_speech_client/__init__.py | 0 .../tools/text_to_speech_client/manifest.yml | 5 + griptape/tools/text_to_speech_client/tool.py | 41 +++ .../variation_image_generation_client/tool.py | 4 +- mkdocs.yml | 4 + poetry.lock | 330 +++++++++++++++++- pyproject.toml | 2 + tests/unit/artifacts/test_audio_artifact.py | 34 ++ .../test_amazon_bedrock_structure_config.py | 1 + .../config/test_anthropic_structure_config.py | 1 + .../config/test_google_structure_config.py | 1 + .../config/test_openai_structure_config.py | 1 + tests/unit/config/test_structure_config.py | 1 + tests/unit/drivers/text_to_speech/__init__.py | 0 ...test_elevenlabs_audio_generation_driver.py | 20 ++ .../test_image_artifact_file_output_mixin.py | 12 +- tests/unit/tasks/test_text_to_speech_task.py | 30 ++ .../unit/tools/test_text_to_speech_client.py | 40 +++ 51 files changed, 954 insertions(+), 31 deletions(-) create mode 100644 docs/griptape-framework/drivers/text-to-speech-drivers.md create mode 100644 docs/griptape-framework/engines/audio-engines.md create mode 100644 docs/griptape-tools/official-tools/text-to-speech-client.md create mode 100644 griptape/artifacts/audio_artifact.py create mode 100644 griptape/drivers/text_to_speech/__init__.py create mode 100644 griptape/drivers/text_to_speech/base_text_to_speech_driver.py create mode 100644 griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py create mode 100644 griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py create mode 100644 griptape/drivers/text_to_speech/openai_text_to_speech_driver.py create mode 100644 griptape/engines/audio/__init__.py create mode 100644 griptape/engines/audio/text_to_speech_engine.py create mode 100644 griptape/events/base_media_generation_event.py create mode 100644 griptape/events/base_text_to_speech_event.py create mode 100644 griptape/events/finish_text_to_speech_event.py create mode 100644 griptape/events/start_text_to_speech_event.py rename griptape/mixins/{image_artifact_file_output_mixin.py => media_artifact_file_output_mixin.py} (89%) create mode 100644 griptape/tasks/base_audio_generation_task.py create mode 100644 griptape/tasks/text_to_speech_task.py create mode 100644 griptape/tools/text_to_speech_client/__init__.py create mode 100644 griptape/tools/text_to_speech_client/manifest.yml create mode 100644 griptape/tools/text_to_speech_client/tool.py create mode 100644 tests/unit/artifacts/test_audio_artifact.py create mode 100644 tests/unit/drivers/text_to_speech/__init__.py create mode 100644 tests/unit/drivers/text_to_speech/test_elevenlabs_audio_generation_driver.py create mode 100644 tests/unit/tasks/test_text_to_speech_task.py create mode 100644 tests/unit/tools/test_text_to_speech_client.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 2f1dba285..14051de7f 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -100,6 +100,7 @@ jobs: GT_CLOUD_STRUCTURE_RUN_ID: ${{ secrets.INTEG_GT_CLOUD_STRUCTURE_RUN_ID }} AWS_IOT_CORE_ENDPOINT: ${{ secrets.INTEG_AWS_IOT_CORE_ENDPOINT }} AWS_IOT_CORE_TOPIC: ${{ secrets.INTEG_AWS_IOT_CORE_TOPIC }} + ELEVEN_LABS_API_KEY: ${{ secrets.INTEG_ELEVEN_LABS_API_KEY }} services: postgres: image: ankane/pgvector:v0.5.0 diff --git a/docs/griptape-framework/data/artifacts.md b/docs/griptape-framework/data/artifacts.md index b12dc97d3..18d5cb61f 100644 --- a/docs/griptape-framework/data/artifacts.md +++ b/docs/griptape-framework/data/artifacts.md @@ -35,4 +35,8 @@ Each blob has a [name](../../reference/griptape/artifacts/base_artifact.md#gript ## ImageArtifact -An [ImageArtifact](../../reference/griptape/artifacts/image_artifact.md) is used for passing images back to the LLM. In addition to binary image data, an ImageArtifact includes image metadata like MIME type, dimensions, and prompt and model information for images returned by [image generation Drivers](../drivers/image-generation-drivers.md). It inherits from [BlobArtifact](#blobartifact). +An [ImageArtifact](../../reference/griptape/artifacts/image_artifact.md) is used for passing images back to the LLM. In addition to binary image data, an Image Artifact includes image metadata like MIME type, dimensions, and prompt and model information for images returned by [image generation Drivers](../drivers/image-generation-drivers.md). It inherits from [BlobArtifact](#blobartifact). + +## AudioArtifact + +An [AudioArtifact](../../reference/griptape/artifacts/audio_artifact.md) allows the Framework to interact with audio content. An Audio Artifact includes binary audio content as well as metadata like format, duration, and prompt and model information for audio returned generative models. It inherits from [BlobArtifact](#blobartifact). diff --git a/docs/griptape-framework/drivers/text-to-speech-drivers.md b/docs/griptape-framework/drivers/text-to-speech-drivers.md new file mode 100644 index 000000000..a37d4d33e --- /dev/null +++ b/docs/griptape-framework/drivers/text-to-speech-drivers.md @@ -0,0 +1,54 @@ +## Overview + +[Text to Speech Drivers](../../reference/griptape/drivers/text_to_speech/index.md) are used by [Text To Speech Engines](../engines/audio-engines.md) to build and execute API calls to audio generation models. + +Provide a Driver when building an [Engine](../engines/audio-engines.md), then pass it to a [Tool](../tools/index.md) for use by an [Agent](../structures/agents.md): + +### Eleven Labs + +The [Eleven Labs Text to Speech Driver](../../reference/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.md) provides support for text-to-speech models hosted by Eleven Labs. This Driver supports configurations specific to Eleven Labs, like voice selection and output format. + +```python +import os + +from griptape.drivers import ElevenLabsTextToSpeechDriver +from griptape.engines import TextToSpeechEngine +from griptape.tools.text_to_speech_client.tool import TextToSpeechClient +from griptape.structures import Agent + + +driver = ElevenLabsTextToSpeechDriver( + api_key=os.getenv("ELEVEN_LABS_API_KEY"), + model="eleven_multilingual_v2", + voice="Matilda", +) + +tool = TextToSpeechClient( + engine=TextToSpeechEngine( + text_to_speech_driver=driver, + ), +) + +Agent(tools=[tool]).run("Generate audio from this text: 'Hello, world!'") +``` + +## OpenAI + +The [OpenAI Text to Speech Driver](../../reference/griptape/drivers/text_to_speech/openai_text_to_speech_driver.md) provides support for text-to-speech models hosted by OpenAI. This Driver supports configurations specific to OpenAI, like voice selection and output format. + +```python +from griptape.drivers import OpenAiTextToSpeechDriver +from griptape.engines import TextToSpeechEngine +from griptape.tools.text_to_speech_client.tool import TextToSpeechClient +from griptape.structures import Agent + +driver = OpenAiTextToSpeechDriver() + +tool = TextToSpeechClient( + engine=TextToSpeechEngine( + text_to_speech_driver=driver, + ), +) + +Agent(tools=[tool]).run("Generate audio from this text: 'Hello, world!'") +``` diff --git a/docs/griptape-framework/engines/audio-engines.md b/docs/griptape-framework/engines/audio-engines.md new file mode 100644 index 000000000..514b8dd8f --- /dev/null +++ b/docs/griptape-framework/engines/audio-engines.md @@ -0,0 +1,29 @@ +## Overview + +[Audio Generation Engines](../../reference/griptape/engines/audio/index.md) facilitate audio generation. Audio Generation Engines provides a `run` method that accepts the necessary inputs for its particular mode and provides the request to the configured [Driver](../drivers/text-to-speech-drivers.md). + +### Text to Speech Engine + +This Engine facilitates synthesizing speech from text inputs. + +```python +import os + +from griptape.drivers import ElevenLabsTextToSpeechDriver +from griptape.engines import TextToSpeechEngine + + +driver = ElevenLabsTextToSpeechDriver( + api_key=os.getenv("ELEVEN_LABS_API_KEY"), + model="eleven_multilingual_v2", + voice="Rachel", +) + +engine = TextToSpeechEngine( + text_to_speech_driver=driver, +) + +engine.run( + prompts=["Hello, world!"], +) +``` diff --git a/docs/griptape-tools/official-tools/text-to-speech-client.md b/docs/griptape-tools/official-tools/text-to-speech-client.md new file mode 100644 index 000000000..f016db551 --- /dev/null +++ b/docs/griptape-tools/official-tools/text-to-speech-client.md @@ -0,0 +1,27 @@ +# TextToSpeechClient + +This tool enables LLMs to synthesize speech from text using [Text to Speech Engines](../../reference/griptape/engines/audio/text_to_speech_engine.md) and [Text to Speech Drivers](../../reference/griptape/drivers/text_to_speech/index.md). + +```python +import os + +from griptape.drivers import ElevenLabsTextToSpeechDriver +from griptape.engines import TextToSpeechEngine +from griptape.tools.text_to_speech_client.tool import TextToSpeechClient +from griptape.structures import Agent + + +driver = ElevenLabsTextToSpeechDriver( + api_key=os.getenv("ELEVEN_LABS_API_KEY"), + model="eleven_multilingual_v2", + voice="Matilda", +) + +tool = TextToSpeechClient( + engine=TextToSpeechEngine( + text_to_speech_driver=driver, + ), +) + +Agent(tools=[tool]).run("Generate audio from this text: 'Hello, world!'") +``` \ No newline at end of file diff --git a/griptape/artifacts/__init__.py b/griptape/artifacts/__init__.py index f97580db1..e57177ac4 100644 --- a/griptape/artifacts/__init__.py +++ b/griptape/artifacts/__init__.py @@ -7,6 +7,7 @@ from .list_artifact import ListArtifact from .media_artifact import MediaArtifact from .image_artifact import ImageArtifact +from .audio_artifact import AudioArtifact __all__ = [ @@ -17,6 +18,7 @@ "BlobArtifact", "CsvRowArtifact", "ListArtifact", - "ImageArtifact", "MediaArtifact", + "ImageArtifact", + "AudioArtifact", ] diff --git a/griptape/artifacts/audio_artifact.py b/griptape/artifacts/audio_artifact.py new file mode 100644 index 000000000..b6d4667e4 --- /dev/null +++ b/griptape/artifacts/audio_artifact.py @@ -0,0 +1,12 @@ +from __future__ import annotations + +from attr import define + +from griptape.artifacts import MediaArtifact + + +@define +class AudioArtifact(MediaArtifact): + """AudioArtifact is a type of MediaArtifact representing audio.""" + + media_type: str = "audio" diff --git a/griptape/config/structure_global_drivers_config.py b/griptape/config/structure_global_drivers_config.py index b3e2e879f..b599039a2 100644 --- a/griptape/config/structure_global_drivers_config.py +++ b/griptape/config/structure_global_drivers_config.py @@ -14,7 +14,9 @@ DummyPromptDriver, DummyImageQueryDriver, BaseImageQueryDriver, + BaseTextToSpeechDriver, ) +from griptape.drivers.text_to_speech.dummy_text_to_speech_driver import DummyTextToSpeechDriver from griptape.mixins.serializable_mixin import SerializableMixin @@ -38,3 +40,6 @@ class StructureGlobalDriversConfig(SerializableMixin): conversation_memory_driver: Optional[BaseConversationMemoryDriver] = field( default=None, kw_only=True, metadata={"serializable": True} ) + text_to_speech_driver: BaseTextToSpeechDriver = field( + default=Factory(lambda: DummyTextToSpeechDriver()), kw_only=True, metadata={"serializable": True} + ) diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 999cacfb5..fdc5cdb59 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -96,6 +96,11 @@ from .file_manager.local_file_manager_driver import LocalFileManagerDriver from .file_manager.amazon_s3_file_manager_driver import AmazonS3FileManagerDriver +from .text_to_speech.base_text_to_speech_driver import BaseTextToSpeechDriver +from .text_to_speech.dummy_text_to_speech_driver import DummyTextToSpeechDriver +from .text_to_speech.elevenlabs_text_to_speech_driver import ElevenLabsTextToSpeechDriver +from .text_to_speech.openai_text_to_speech_driver import OpenAiTextToSpeechDriver + from .structure_run.base_structure_run_driver import BaseStructureRunDriver from .structure_run.griptape_cloud_structure_run_driver import GriptapeCloudStructureRunDriver from .structure_run.local_structure_run_driver import LocalStructureRunDriver @@ -183,6 +188,10 @@ "BaseFileManagerDriver", "LocalFileManagerDriver", "AmazonS3FileManagerDriver", + "BaseTextToSpeechDriver", + "DummyTextToSpeechDriver", + "ElevenLabsTextToSpeechDriver", + "OpenAiTextToSpeechDriver", "BaseStructureRunDriver", "GriptapeCloudStructureRunDriver", "LocalStructureRunDriver", diff --git a/griptape/drivers/text_to_speech/__init__.py b/griptape/drivers/text_to_speech/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/drivers/text_to_speech/base_text_to_speech_driver.py b/griptape/drivers/text_to_speech/base_text_to_speech_driver.py new file mode 100644 index 000000000..58a911b1a --- /dev/null +++ b/griptape/drivers/text_to_speech/base_text_to_speech_driver.py @@ -0,0 +1,44 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from typing import TYPE_CHECKING, Optional + +from attr import define, field + +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.events.finish_text_to_speech_event import FinishTextToSpeechEvent +from griptape.events.start_text_to_speech_event import StartTextToSpeechEvent +from griptape.mixins import ExponentialBackoffMixin, SerializableMixin + +if TYPE_CHECKING: + from griptape.structures import Structure + + +@define +class BaseTextToSpeechDriver(SerializableMixin, ExponentialBackoffMixin, ABC): + model: str = field(kw_only=True, metadata={"serializable": True}) + structure: Optional[Structure] = field(default=None, kw_only=True) + + def before_run(self, prompts: list[str]) -> None: + if self.structure: + self.structure.publish_event(StartTextToSpeechEvent(prompts=prompts)) + + def after_run(self) -> None: + if self.structure: + self.structure.publish_event(FinishTextToSpeechEvent()) + + def run_text_to_audio(self, prompts: list[str]) -> AudioArtifact: + for attempt in self.retrying(): + with attempt: + self.before_run(prompts) + result = self.try_text_to_audio(prompts) + self.after_run() + + return result + + else: + raise Exception("Failed to run text to audio generation") + + @abstractmethod + def try_text_to_audio(self, prompts: list[str]) -> AudioArtifact: + ... diff --git a/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py b/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py new file mode 100644 index 000000000..03adc10ce --- /dev/null +++ b/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py @@ -0,0 +1,13 @@ +from typing import Optional +from attrs import define, field +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.drivers import BaseTextToSpeechDriver +from griptape.exceptions import DummyException + + +@define +class DummyTextToSpeechDriver(BaseTextToSpeechDriver): + model: str = field(init=False) + + def try_text_to_audio(self, prompts: list[str]) -> AudioArtifact: + raise DummyException(__class__.__name__, "try_text_to_audio") diff --git a/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py b/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py new file mode 100644 index 000000000..c3aeefd26 --- /dev/null +++ b/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Optional, Any + +from attr import define, field, Factory + +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.drivers import BaseTextToSpeechDriver +from griptape.utils import import_optional_dependency + +if TYPE_CHECKING: + from elevenlabs.client import ElevenLabs + + +@define +class ElevenLabsTextToSpeechDriver(BaseTextToSpeechDriver): + api_key: str = field(kw_only=True, metadata={"serializable": True}) + client: Any = field( + default=Factory( + lambda self: import_optional_dependency("elevenlabs.client").ElevenLabs(api_key=self.api_key), + takes_self=True, + ), + kw_only=True, + metadata={"serializable": True}, + ) + voice: str = field(kw_only=True, metadata={"serializable": True}) + output_format: str = field(default="mp3_44100_128", kw_only=True, metadata={"serializable": True}) + + def try_text_to_audio(self, prompts: list[str]) -> AudioArtifact: + audio = self.client.generate( + text=". ".join(prompts), voice=self.voice, model=self.model, output_format=self.output_format + ) + + content = b"" + for chunk in audio: + content += chunk + + # All ElevenLabs audio format strings have the following structure: + # {format}_{sample_rate}_{bitrate} + artifact_format = self.output_format.split("_")[0] + + return AudioArtifact(value=content, format=artifact_format) diff --git a/griptape/drivers/text_to_speech/openai_text_to_speech_driver.py b/griptape/drivers/text_to_speech/openai_text_to_speech_driver.py new file mode 100644 index 000000000..e6022b29d --- /dev/null +++ b/griptape/drivers/text_to_speech/openai_text_to_speech_driver.py @@ -0,0 +1,36 @@ +from __future__ import annotations + +from typing import Optional, Literal + +import openai +from attr import define, field, Factory + +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.drivers import BaseTextToSpeechDriver + + +@define +class OpenAiTextToSpeechDriver(BaseTextToSpeechDriver): + model: str = field(default="tts-1", kw_only=True, metadata={"serializable": True}) + voice: Literal["alloy", "echo", "fable", "onyx", "nova", "shimmer"] = field( + default="alloy", kw_only=True, metadata={"serializable": True} + ) + format: Literal["mp3", "opus", "aac", "flac"] = field(default="mp3", kw_only=True, metadata={"serializable": True}) + api_type: str = field(default=openai.api_type, kw_only=True) + api_version: Optional[str] = field(default=openai.api_version, kw_only=True, metadata={"serializable": True}) + base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True) + organization: Optional[str] = field(default=openai.organization, kw_only=True, metadata={"serializable": True}) + client: openai.OpenAI = field( + default=Factory( + lambda self: openai.OpenAI(api_key=self.api_key, base_url=self.base_url, organization=self.organization), + takes_self=True, + ) + ) + + def try_text_to_audio(self, prompts: list[str]) -> AudioArtifact: + response = self.client.audio.speech.create( + input=". ".join(prompts), voice=self.voice, model=self.model, response_format=self.format + ) + + return AudioArtifact(value=response.content, format=self.format) diff --git a/griptape/engines/__init__.py b/griptape/engines/__init__.py index 0f1bc9b4e..f76e373ef 100644 --- a/griptape/engines/__init__.py +++ b/griptape/engines/__init__.py @@ -11,6 +11,7 @@ from .image.inpainting_image_generation_engine import InpaintingImageGenerationEngine from .image.outpainting_image_generation_engine import OutpaintingImageGenerationEngine from .image_query.image_query_engine import ImageQueryEngine +from .audio.text_to_speech_engine import TextToSpeechEngine __all__ = [ "BaseQueryEngine", @@ -26,4 +27,5 @@ "InpaintingImageGenerationEngine", "OutpaintingImageGenerationEngine", "ImageQueryEngine", + "TextToSpeechEngine", ] diff --git a/griptape/engines/audio/__init__.py b/griptape/engines/audio/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/engines/audio/text_to_speech_engine.py b/griptape/engines/audio/text_to_speech_engine.py new file mode 100644 index 000000000..29118848e --- /dev/null +++ b/griptape/engines/audio/text_to_speech_engine.py @@ -0,0 +1,14 @@ +from __future__ import annotations + +from attr import define, field + +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.drivers import BaseTextToSpeechDriver + + +@define +class TextToSpeechEngine: + text_to_speech_driver: BaseTextToSpeechDriver = field(kw_only=True) + + def run(self, prompts: list[str], *args, **kwargs) -> AudioArtifact: + return self.text_to_speech_driver.try_text_to_audio(prompts=prompts) diff --git a/griptape/events/__init__.py b/griptape/events/__init__.py index bc9fb466c..0aa4552dd 100644 --- a/griptape/events/__init__.py +++ b/griptape/events/__init__.py @@ -16,7 +16,9 @@ from .finish_image_generation_event import FinishImageGenerationEvent from .start_image_query_event import StartImageQueryEvent from .finish_image_query_event import FinishImageQueryEvent - +from .base_text_to_speech_event import BaseTextToSpeechEvent +from .start_text_to_speech_event import StartTextToSpeechEvent +from .finish_text_to_speech_event import FinishTextToSpeechEvent __all__ = [ "BaseEvent", @@ -37,4 +39,7 @@ "FinishImageGenerationEvent", "StartImageQueryEvent", "FinishImageQueryEvent", + "BaseTextToSpeechEvent", + "StartTextToSpeechEvent", + "FinishTextToSpeechEvent", ] diff --git a/griptape/events/base_image_generation_event.py b/griptape/events/base_image_generation_event.py index ee51a77a2..244310469 100644 --- a/griptape/events/base_image_generation_event.py +++ b/griptape/events/base_image_generation_event.py @@ -1,9 +1,9 @@ from __future__ import annotations from attrs import define from abc import ABC -from .base_event import BaseEvent +from .base_media_generation_event import BaseMediaGenerationEvent @define -class BaseImageGenerationEvent(BaseEvent, ABC): +class BaseImageGenerationEvent(BaseMediaGenerationEvent, ABC): ... diff --git a/griptape/events/base_media_generation_event.py b/griptape/events/base_media_generation_event.py new file mode 100644 index 000000000..b3a9bcb33 --- /dev/null +++ b/griptape/events/base_media_generation_event.py @@ -0,0 +1,9 @@ +from __future__ import annotations +from attrs import define +from abc import ABC +from .base_event import BaseEvent + + +@define +class BaseMediaGenerationEvent(BaseEvent, ABC): + ... diff --git a/griptape/events/base_text_to_speech_event.py b/griptape/events/base_text_to_speech_event.py new file mode 100644 index 000000000..f4d032d0d --- /dev/null +++ b/griptape/events/base_text_to_speech_event.py @@ -0,0 +1,10 @@ +from __future__ import annotations +from attrs import define +from abc import ABC + +from griptape.events.base_media_generation_event import BaseMediaGenerationEvent + + +@define +class BaseTextToSpeechEvent(BaseMediaGenerationEvent, ABC): + ... diff --git a/griptape/events/finish_text_to_speech_event.py b/griptape/events/finish_text_to_speech_event.py new file mode 100644 index 000000000..6b4366c88 --- /dev/null +++ b/griptape/events/finish_text_to_speech_event.py @@ -0,0 +1,11 @@ +from __future__ import annotations + +from attrs import define + +from .base_text_to_speech_event import BaseTextToSpeechEvent +from .base_image_generation_event import BaseImageGenerationEvent + + +@define +class FinishTextToSpeechEvent(BaseTextToSpeechEvent): + ... diff --git a/griptape/events/start_text_to_speech_event.py b/griptape/events/start_text_to_speech_event.py new file mode 100644 index 000000000..9824a9827 --- /dev/null +++ b/griptape/events/start_text_to_speech_event.py @@ -0,0 +1,10 @@ +from __future__ import annotations + +from attr import define, field + +from .base_text_to_speech_event import BaseTextToSpeechEvent + + +@define +class StartTextToSpeechEvent(BaseTextToSpeechEvent): + prompts: list[str] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/mixins/__init__.py b/griptape/mixins/__init__.py index 383e6183b..d9eea53c2 100644 --- a/griptape/mixins/__init__.py +++ b/griptape/mixins/__init__.py @@ -3,13 +3,13 @@ from .actions_subtask_origin_mixin import ActionsSubtaskOriginMixin from .rule_mixin import RuleMixin from .serializable_mixin import SerializableMixin -from .image_artifact_file_output_mixin import ImageArtifactFileOutputMixin +from .media_artifact_file_output_mixin import BlobArtifactFileOutputMixin __all__ = [ "ActivityMixin", "ExponentialBackoffMixin", "ActionsSubtaskOriginMixin", "RuleMixin", - "ImageArtifactFileOutputMixin", + "BlobArtifactFileOutputMixin", "SerializableMixin", ] diff --git a/griptape/mixins/image_artifact_file_output_mixin.py b/griptape/mixins/media_artifact_file_output_mixin.py similarity index 89% rename from griptape/mixins/image_artifact_file_output_mixin.py rename to griptape/mixins/media_artifact_file_output_mixin.py index b1511582d..d7d6f584c 100644 --- a/griptape/mixins/image_artifact_file_output_mixin.py +++ b/griptape/mixins/media_artifact_file_output_mixin.py @@ -7,11 +7,11 @@ from typing import Optional if TYPE_CHECKING: - from griptape.artifacts import ImageArtifact + from griptape.artifacts import BlobArtifact @define(slots=False) -class ImageArtifactFileOutputMixin: +class BlobArtifactFileOutputMixin: output_dir: Optional[str] = field(default=None, kw_only=True) output_file: Optional[str] = field(default=None, kw_only=True) @@ -31,7 +31,7 @@ def validate_output_file(self, _, output_file: str) -> None: if self.output_dir: raise ValueError("Can't have both output_dir and output_file specified.") - def _write_to_file(self, artifact: ImageArtifact) -> None: + def _write_to_file(self, artifact: BlobArtifact) -> None: if self.output_file: outfile = self.output_file elif self.output_dir: diff --git a/griptape/tasks/__init__.py b/griptape/tasks/__init__.py index 5d8dac58e..e51335241 100644 --- a/griptape/tasks/__init__.py +++ b/griptape/tasks/__init__.py @@ -17,6 +17,8 @@ from .outpainting_image_generation_task import OutpaintingImageGenerationTask from .variation_image_generation_task import VariationImageGenerationTask from .image_query_task import ImageQueryTask +from .base_audio_generation_task import BaseAudioGenerationTask +from .text_to_speech_task import TextToSpeechTask from .structure_run_task import StructureRunTask __all__ = [ @@ -39,5 +41,7 @@ "InpaintingImageGenerationTask", "OutpaintingImageGenerationTask", "ImageQueryTask", + "BaseAudioGenerationTask", + "TextToSpeechTask", "StructureRunTask", ] diff --git a/griptape/tasks/base_audio_generation_task.py b/griptape/tasks/base_audio_generation_task.py new file mode 100644 index 000000000..f9d691768 --- /dev/null +++ b/griptape/tasks/base_audio_generation_task.py @@ -0,0 +1,17 @@ +from __future__ import annotations + +import os +from abc import ABC + +from attr import field, define + +from griptape.artifacts import MediaArtifact +from griptape.loaders import ImageLoader +from griptape.mixins import RuleMixin, BlobArtifactFileOutputMixin +from griptape.rules import Ruleset, Rule +from griptape.tasks import BaseTask + + +@define +class BaseAudioGenerationTask(BlobArtifactFileOutputMixin, RuleMixin, BaseTask, ABC): + ... diff --git a/griptape/tasks/base_image_generation_task.py b/griptape/tasks/base_image_generation_task.py index b72c33968..2dbab4ce9 100644 --- a/griptape/tasks/base_image_generation_task.py +++ b/griptape/tasks/base_image_generation_task.py @@ -5,15 +5,15 @@ from attr import field, define -from griptape.artifacts import ImageArtifact +from griptape.artifacts import MediaArtifact from griptape.loaders import ImageLoader -from griptape.mixins import RuleMixin, ImageArtifactFileOutputMixin +from griptape.mixins import RuleMixin, BlobArtifactFileOutputMixin from griptape.rules import Ruleset, Rule from griptape.tasks import BaseTask @define -class BaseImageGenerationTask(ImageArtifactFileOutputMixin, RuleMixin, BaseTask, ABC): +class BaseImageGenerationTask(BlobArtifactFileOutputMixin, RuleMixin, BaseTask, ABC): """Provides a base class for image generation-related tasks. Attributes: @@ -55,7 +55,7 @@ def all_negative_rulesets(self) -> list[Ruleset]: return task_rulesets - def _read_from_file(self, path: str) -> ImageArtifact: + def _read_from_file(self, path: str) -> MediaArtifact: self.structure.logger.info(f"Reading image from {os.path.abspath(path)}") with open(path, "rb") as file: return ImageLoader().load(file.read()) diff --git a/griptape/tasks/prompt_image_generation_task.py b/griptape/tasks/prompt_image_generation_task.py index 7d9bad53e..24971d1cb 100644 --- a/griptape/tasks/prompt_image_generation_task.py +++ b/griptape/tasks/prompt_image_generation_task.py @@ -2,7 +2,7 @@ from typing import Callable -from attr import define, field, Factory +from attr import define, field from griptape.engines import PromptImageGenerationEngine from griptape.artifacts import ImageArtifact, TextArtifact diff --git a/griptape/tasks/text_to_speech_task.py b/griptape/tasks/text_to_speech_task.py new file mode 100644 index 000000000..ab90b1bbb --- /dev/null +++ b/griptape/tasks/text_to_speech_task.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +from typing import Callable + +from attr import define, field + +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.engines import TextToSpeechEngine +from griptape.artifacts import TextArtifact +from griptape.tasks import BaseTask +from griptape.tasks.base_audio_generation_task import BaseAudioGenerationTask +from griptape.utils import J2 + + +@define +class TextToSpeechTask(BaseAudioGenerationTask): + DEFAULT_INPUT_TEMPLATE = "{{ args[0] }}" + + _input: str | TextArtifact | Callable[[BaseTask], TextArtifact] = field(default=DEFAULT_INPUT_TEMPLATE) + _text_to_speech_engine: TextToSpeechEngine = field(default=None, kw_only=True, alias="text_to_speech_engine") + + @property + def input(self) -> TextArtifact: + if isinstance(self._input, TextArtifact): + return self._input + elif isinstance(self._input, Callable): + return self._input(self) + else: + return TextArtifact(J2().render_from_string(self._input, **self.full_context)) + + @input.setter + def input(self, value: TextArtifact) -> None: + self._input = value + + @property + def text_to_speech_engine(self) -> TextToSpeechEngine: + if self._text_to_speech_engine is None: + if self.structure is not None: + self._text_to_speech_engine = TextToSpeechEngine( + text_to_speech_driver=self.structure.config.global_drivers.text_to_speech_driver + ) + else: + raise ValueError("Audio Generation Engine is not set.") + return self._text_to_speech_engine + + @text_to_speech_engine.setter + def text_to_speech_engine(self, value: TextToSpeechEngine) -> None: + self._text_to_speech_engine = value + + def run(self) -> AudioArtifact: + audio_artifact = self.text_to_speech_engine.run(prompts=[self.input.to_text()], rulesets=self.all_rulesets) + + if self.output_dir or self.output_file: + self._write_to_file(audio_artifact) + + return audio_artifact diff --git a/griptape/tools/inpainting_image_generation_client/tool.py b/griptape/tools/inpainting_image_generation_client/tool.py index b9130ca3e..02799ad29 100644 --- a/griptape/tools/inpainting_image_generation_client/tool.py +++ b/griptape/tools/inpainting_image_generation_client/tool.py @@ -8,14 +8,14 @@ from griptape.artifacts import ErrorArtifact, ImageArtifact from griptape.engines import InpaintingImageGenerationEngine from griptape.loaders import ImageLoader -from griptape.mixins import ImageArtifactFileOutputMixin +from griptape.mixins import BlobArtifactFileOutputMixin from griptape.tools import BaseTool from griptape.utils.decorators import activity from griptape.utils.load_artifact_from_memory import load_artifact_from_memory @define -class InpaintingImageGenerationClient(ImageArtifactFileOutputMixin, BaseTool): +class InpaintingImageGenerationClient(BlobArtifactFileOutputMixin, BaseTool): """A tool that can be used to generate prompted inpaintings of an image. Attributes: diff --git a/griptape/tools/outpainting_image_generation_client/tool.py b/griptape/tools/outpainting_image_generation_client/tool.py index 2ce2697d4..bd9a2125c 100644 --- a/griptape/tools/outpainting_image_generation_client/tool.py +++ b/griptape/tools/outpainting_image_generation_client/tool.py @@ -10,12 +10,12 @@ from griptape.loaders import ImageLoader from griptape.tools import BaseTool from griptape.utils.decorators import activity -from griptape.mixins import ImageArtifactFileOutputMixin +from griptape.mixins import BlobArtifactFileOutputMixin from griptape.utils.load_artifact_from_memory import load_artifact_from_memory @define -class OutpaintingImageGenerationClient(ImageArtifactFileOutputMixin, BaseTool): +class OutpaintingImageGenerationClient(BlobArtifactFileOutputMixin, BaseTool): """A tool that can be used to generate prompted outpaintings of an image. Attributes: diff --git a/griptape/tools/prompt_image_generation_client/tool.py b/griptape/tools/prompt_image_generation_client/tool.py index b9a26af67..50020a1ea 100644 --- a/griptape/tools/prompt_image_generation_client/tool.py +++ b/griptape/tools/prompt_image_generation_client/tool.py @@ -7,11 +7,11 @@ from griptape.engines import PromptImageGenerationEngine from griptape.tools import BaseTool from griptape.utils.decorators import activity -from griptape.mixins import ImageArtifactFileOutputMixin +from griptape.mixins import BlobArtifactFileOutputMixin @define -class PromptImageGenerationClient(ImageArtifactFileOutputMixin, BaseTool): +class PromptImageGenerationClient(BlobArtifactFileOutputMixin, BaseTool): """A tool that can be used to generate an image from a text prompt. Attributes: diff --git a/griptape/tools/text_to_speech_client/__init__.py b/griptape/tools/text_to_speech_client/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/tools/text_to_speech_client/manifest.yml b/griptape/tools/text_to_speech_client/manifest.yml new file mode 100644 index 000000000..73062bb13 --- /dev/null +++ b/griptape/tools/text_to_speech_client/manifest.yml @@ -0,0 +1,5 @@ +version: "v1" +name: Text to Speech Client +description: A tool for generating speech from text. +contact_email: hello@griptape.ai +legal_info_url: https://www.griptape.ai/legal diff --git a/griptape/tools/text_to_speech_client/tool.py b/griptape/tools/text_to_speech_client/tool.py new file mode 100644 index 000000000..9f8c36a81 --- /dev/null +++ b/griptape/tools/text_to_speech_client/tool.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from typing import Any + +from attrs import define, field +from schema import Schema, Literal + +from griptape.artifacts import ErrorArtifact, AudioArtifact +from griptape.engines import TextToSpeechEngine +from griptape.tools import BaseTool +from griptape.utils.decorators import activity +from griptape.mixins import BlobArtifactFileOutputMixin + + +@define +class TextToSpeechClient(BlobArtifactFileOutputMixin, BaseTool): + """A tool that can be used to generate speech from input text. + + Attributes: + engine: The text to audio generation engine used to generate the speech audio. + output_dir: If provided, the generated audio will be written to disk in output_dir. + output_file: If provided, the generated audio will be written to disk as output_file. + """ + + engine: TextToSpeechEngine = field(kw_only=True) + + @activity( + config={ + "description": "Can be used to generate speech from the provided input text.", + "schema": Schema({Literal("text", description="The literal text to be converted to speech."): str}), + } + ) + def text_to_speech(self, params: dict[str, Any]) -> AudioArtifact | ErrorArtifact: + text = params["values"]["text"] + + output_artifact = self.engine.run(prompts=[text]) + + if self.output_dir or self.output_file: + self._write_to_file(output_artifact) + + return output_artifact diff --git a/griptape/tools/variation_image_generation_client/tool.py b/griptape/tools/variation_image_generation_client/tool.py index a67b87750..4d0d0537e 100644 --- a/griptape/tools/variation_image_generation_client/tool.py +++ b/griptape/tools/variation_image_generation_client/tool.py @@ -10,12 +10,12 @@ from griptape.loaders import ImageLoader from griptape.tools import BaseTool from griptape.utils.decorators import activity -from griptape.mixins import ImageArtifactFileOutputMixin +from griptape.mixins import BlobArtifactFileOutputMixin from griptape.utils.load_artifact_from_memory import load_artifact_from_memory @define -class VariationImageGenerationClient(ImageArtifactFileOutputMixin, BaseTool): +class VariationImageGenerationClient(BlobArtifactFileOutputMixin, BaseTool): """A tool that can be used to generate prompted variations of an image. Attributes: diff --git a/mkdocs.yml b/mkdocs.yml index f5f0dc954..df2a1536c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -97,6 +97,7 @@ nav: - Summary Engines: "griptape-framework/engines/summary-engines.md" - Image Generation Engines: "griptape-framework/engines/image-generation-engines.md" - Image Query Engines: "griptape-framework/engines/image-query-engines.md" + - Audio Engines: "griptape-framework/engines/audio-engines.md" - Drivers: - Prompt Drivers: "griptape-framework/drivers/prompt-drivers.md" - Embedding Drivers: "griptape-framework/drivers/embedding-drivers.md" @@ -107,6 +108,8 @@ nav: - Web Scraper Drivers: "griptape-framework/drivers/web-scraper-drivers.md" - Conversation Memory Drivers: "griptape-framework/drivers/conversation-memory-drivers.md" - Event Listener Drivers: "griptape-framework/drivers/event-listener-drivers.md" + - Structure Run Drivers: "griptape-framework/drivers/structure-run-drivers.md" + - Text to Speech Drivers: "griptape-framework/drivers/text-to-speech-drivers.md" - Data: - Overview: "griptape-framework/data/index.md" - Artifacts: "griptape-framework/data/artifacts.md" @@ -142,6 +145,7 @@ nav: - InpaintingImageGenerationClient: "griptape-tools/official-tools/inpainting-image-generation-client.md" - OutpaintingImageGenerationClient: "griptape-tools/official-tools/outpainting-image-generation-client.md" - ImageQueryClient: "griptape-tools/official-tools/image-query-client.md" + - TextToSpeechClient: "griptape-tools/official-tools/text-to-speech-client.md" - Custom Tools: - Building Custom Tools: "griptape-tools/custom-tools/index.md" - Recipes: diff --git a/poetry.lock b/poetry.lock index 14f5e2bff..c66d806c6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -178,6 +178,24 @@ files = [ {file = "asn1crypto-1.5.1.tar.gz", hash = "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c"}, ] +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = true +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -1171,6 +1189,17 @@ calendars = ["convertdate", "hijri-converter"] fasttext = ["fasttext"] langdetect = ["langdetect"] +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = true +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + [[package]] name = "distlib" version = "0.3.8" @@ -1245,6 +1274,25 @@ files = [ {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] +[[package]] +name = "elevenlabs" +version = "1.1.2" +description = "" +optional = true +python-versions = "<4.0,>=3.8" +files = [ + {file = "elevenlabs-1.1.2-py3-none-any.whl", hash = "sha256:c10742b7175c8b9cd089c7d8c515637449a22e069e4b963993ef2f1bb2fe61db"}, + {file = "elevenlabs-1.1.2.tar.gz", hash = "sha256:9df81038b3586ed68a74df9d2e5848283f6d770d0207df7cd0434a8675f3023c"}, +] + +[package.dependencies] +httpx = ">=0.21.2" +ipython = ">=7.0" +pydantic = ">=1.9.2" +requests = ">=2.20" +typing_extensions = ">=4.0.0" +websockets = ">=11.0" + [[package]] name = "exceptiongroup" version = "1.2.0" @@ -1273,6 +1321,20 @@ files = [ [package.extras] testing = ["hatch", "pre-commit", "pytest", "tox"] +[[package]] +name = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = true +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + [[package]] name = "fastavro" version = "1.9.3" @@ -1927,6 +1989,43 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "ipython" +version = "8.18.1" +description = "IPython: Productive Interactive Computing" +optional = true +python-versions = ">=3.9" +files = [ + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +prompt-toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} + +[package.extras] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] + [[package]] name = "jaraco-classes" version = "3.3.0" @@ -1945,6 +2044,25 @@ more-itertools = "*" docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +[[package]] +name = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = true +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + [[package]] name = "jeepney" version = "0.8.0" @@ -2351,6 +2469,20 @@ files = [ [package.dependencies] marshmallow = ">=2.0.0" +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +description = "Inline Matplotlib backend for Jupyter" +optional = true +python-versions = ">=3.8" +files = [ + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, +] + +[package.dependencies] +traitlets = "*" + [[package]] name = "mdurl" version = "0.1.2" @@ -2997,6 +3129,21 @@ pytz = ">=2020.1" [package.extras] test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] +[[package]] +name = "parso" +version = "0.8.4" +description = "A Python Parser" +optional = true +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, +] + +[package.extras] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] + [[package]] name = "pathspec" version = "0.12.1" @@ -3008,6 +3155,20 @@ files = [ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] +[[package]] +name = "pexpect" +version = "4.9.0" +description = "Pexpect allows easy control of interactive console applications." +optional = true +python-versions = "*" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + [[package]] name = "pgvector" version = "0.2.4" @@ -3222,6 +3383,20 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prompt-toolkit" +version = "3.0.43" +description = "Library for building powerful interactive command lines in Python" +optional = true +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, +] + +[package.dependencies] +wcwidth = "*" + [[package]] name = "proto-plus" version = "1.23.0" @@ -3340,6 +3515,31 @@ files = [ {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, ] +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = true +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +optional = true +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + [[package]] name = "py-partiql-parser" version = "0.5.0" @@ -4668,6 +4868,25 @@ files = [ packaging = "*" SQLAlchemy = ">=0.9.2,<2.0.0" +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = true +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "stringcase" version = "1.2.0" @@ -4948,6 +5167,21 @@ urllib3 = {version = ">=1.26,<3", markers = "python_version >= \"3.7\""} all = ["brotli", "cchardet (>=2.1.7)", "faust-cchardet (>=2.1.18)", "htmldate[speed] (>=1.6.0)", "py3langid (>=0.2.2)", "pycurl (>=7.45.2)"] gui = ["Gooey (>=1.0.1)"] +[[package]] +name = "traitlets" +version = "5.14.3" +description = "Traitlets Python configuration system" +optional = true +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + [[package]] name = "transformers" version = "4.37.0" @@ -5194,6 +5428,17 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = true +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + [[package]] name = "websocket-client" version = "1.7.0" @@ -5210,6 +5455,87 @@ docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] +[[package]] +name = "websockets" +version = "12.0" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, +] + [[package]] name = "werkzeug" version = "3.0.1" @@ -5357,7 +5683,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] -all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "trafilatura", "transformers", "voyageai"] +all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-google = ["google-generativeai"] @@ -5392,4 +5718,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "032d9be0951a4048eb10716e492ea1f91e978ceb1ee24e5d13f3251f37cefb0a" +content-hash = "895031a580cca4467c6bb500ef92e9c84e911f3add4046ed94385893dcb643b1" diff --git a/pyproject.toml b/pyproject.toml index 65df87303..77ae12331 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,6 +51,7 @@ playwright = {version = "^1.42", optional = true} beautifulsoup4 = {version = "^4.12.3", optional = true} markdownify = {version = "^0.11.6", optional = true} voyageai = {version = "^0.2.1", optional = true} +elevenlabs = {version = "^1.1.2", optional = true} # loaders pandas = {version = "^1.3", optional = true} @@ -120,6 +121,7 @@ all = [ "beautifulsoup4", "markdownify", "voyageai", + "elevenlabs", # loaders "pandas", diff --git a/tests/unit/artifacts/test_audio_artifact.py b/tests/unit/artifacts/test_audio_artifact.py new file mode 100644 index 000000000..93ea816e4 --- /dev/null +++ b/tests/unit/artifacts/test_audio_artifact.py @@ -0,0 +1,34 @@ +import pytest +from griptape.artifacts import AudioArtifact, BaseArtifact + + +class TestAudioArtifact: + @pytest.fixture + def audio_artifact(self): + return AudioArtifact(value=b"some binary audio data", format="pcm", model="provider/model", prompt="two words") + + def test_mime_type(self, audio_artifact: AudioArtifact): + assert audio_artifact.mime_type == "audio/pcm" + + def test_to_text(self, audio_artifact: AudioArtifact): + assert audio_artifact.to_text() == "Media, type: audio/pcm, size: 22 bytes" + + def test_to_dict(self, audio_artifact: AudioArtifact): + audio_dict = audio_artifact.to_dict() + + assert audio_dict["format"] == "pcm" + assert audio_dict["model"] == "provider/model" + assert audio_dict["prompt"] == "two words" + assert audio_dict["value"] == "c29tZSBiaW5hcnkgYXVkaW8gZGF0YQ==" + + def test_deserialization(self, audio_artifact): + artifact_dict = audio_artifact.to_dict() + deserialized_artifact = BaseArtifact.from_dict(artifact_dict) + + assert isinstance(deserialized_artifact, AudioArtifact) + + assert deserialized_artifact.value == b"some binary audio data" + assert deserialized_artifact.mime_type == "audio/pcm" + assert deserialized_artifact.format == "pcm" + assert deserialized_artifact.model == "provider/model" + assert deserialized_artifact.prompt == "two words" diff --git a/tests/unit/config/test_amazon_bedrock_structure_config.py b/tests/unit/config/test_amazon_bedrock_structure_config.py index 04fe4d7a1..05eda5644 100644 --- a/tests/unit/config/test_amazon_bedrock_structure_config.py +++ b/tests/unit/config/test_amazon_bedrock_structure_config.py @@ -33,6 +33,7 @@ def test_to_dict(self, config): "seed": None, "type": "AmazonBedrockImageGenerationDriver", }, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, "image_query_driver": { "type": "AmazonBedrockImageQueryDriver", "model": "anthropic.claude-3-sonnet-20240229-v1:0", diff --git a/tests/unit/config/test_anthropic_structure_config.py b/tests/unit/config/test_anthropic_structure_config.py index 5653ddb46..b637eb929 100644 --- a/tests/unit/config/test_anthropic_structure_config.py +++ b/tests/unit/config/test_anthropic_structure_config.py @@ -27,6 +27,7 @@ def test_to_dict(self, config): "top_k": 250, }, "image_generation_driver": {"type": "DummyImageGenerationDriver"}, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, "image_query_driver": { "type": "AnthropicImageQueryDriver", "model": "claude-3-opus-20240229", diff --git a/tests/unit/config/test_google_structure_config.py b/tests/unit/config/test_google_structure_config.py index ad9283d02..2a4d50641 100644 --- a/tests/unit/config/test_google_structure_config.py +++ b/tests/unit/config/test_google_structure_config.py @@ -26,6 +26,7 @@ def test_to_dict(self, config): "top_k": None, }, "image_generation_driver": {"type": "DummyImageGenerationDriver"}, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, "image_query_driver": {"type": "DummyImageQueryDriver"}, "embedding_driver": { "type": "GoogleEmbeddingDriver", diff --git a/tests/unit/config/test_openai_structure_config.py b/tests/unit/config/test_openai_structure_config.py index a6df9330c..4a0ab7369 100644 --- a/tests/unit/config/test_openai_structure_config.py +++ b/tests/unit/config/test_openai_structure_config.py @@ -46,6 +46,7 @@ def test_to_dict(self, config): "style": None, "type": "OpenAiImageGenerationDriver", }, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, "image_query_driver": { "api_version": None, "base_url": None, diff --git a/tests/unit/config/test_structure_config.py b/tests/unit/config/test_structure_config.py index 13060cf92..16f189b02 100644 --- a/tests/unit/config/test_structure_config.py +++ b/tests/unit/config/test_structure_config.py @@ -16,6 +16,7 @@ def test_to_dict(self, config): "conversation_memory_driver": None, "embedding_driver": {"type": "DummyEmbeddingDriver"}, "image_generation_driver": {"type": "DummyImageGenerationDriver"}, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, "image_query_driver": {"type": "DummyImageQueryDriver"}, "vector_store_driver": { "embedding_driver": {"type": "DummyEmbeddingDriver"}, diff --git a/tests/unit/drivers/text_to_speech/__init__.py b/tests/unit/drivers/text_to_speech/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/unit/drivers/text_to_speech/test_elevenlabs_audio_generation_driver.py b/tests/unit/drivers/text_to_speech/test_elevenlabs_audio_generation_driver.py new file mode 100644 index 000000000..2d90bc2f5 --- /dev/null +++ b/tests/unit/drivers/text_to_speech/test_elevenlabs_audio_generation_driver.py @@ -0,0 +1,20 @@ +import pytest +from unittest.mock import Mock +from griptape.drivers import ElevenLabsTextToSpeechDriver + + +class TestElevenLabsTextToSpeechDriver: + @pytest.fixture + def driver(self): + return ElevenLabsTextToSpeechDriver(model="model", client=Mock(), voice="voice", api_key="key") + + def test_init(self, driver): + assert driver + + def test_try_text_to_audio(self, driver): + driver.client.generate.return_value = [b"audio data"] + + audio_artifact = driver.try_text_to_audio(prompts=["test prompt"]) + + assert audio_artifact.value == b"audio data" + assert audio_artifact.format == "mp3" diff --git a/tests/unit/mixins/test_image_artifact_file_output_mixin.py b/tests/unit/mixins/test_image_artifact_file_output_mixin.py index c0b021f5e..69a2f1d71 100644 --- a/tests/unit/mixins/test_image_artifact_file_output_mixin.py +++ b/tests/unit/mixins/test_image_artifact_file_output_mixin.py @@ -4,12 +4,12 @@ import pytest from griptape.artifacts import ImageArtifact -from griptape.mixins import ImageArtifactFileOutputMixin +from griptape.mixins import BlobArtifactFileOutputMixin -class TestImageArtifactFileOutputMixin: +class TestMediaArtifactFileOutputMixin: def test_no_output(self): - class Test(ImageArtifactFileOutputMixin): + class Test(BlobArtifactFileOutputMixin): pass assert Test().output_file is None @@ -18,7 +18,7 @@ class Test(ImageArtifactFileOutputMixin): def test_output_file(self): artifact = ImageArtifact(name="test.png", value=b"test", height=1, width=1, format="png") - class Test(ImageArtifactFileOutputMixin): + class Test(BlobArtifactFileOutputMixin): def run(self): self._write_to_file(artifact) @@ -33,7 +33,7 @@ def run(self): def test_output_dir(self): artifact = ImageArtifact(name="test.png", value=b"test", height=1, width=1, format="png") - class Test(ImageArtifactFileOutputMixin): + class Test(BlobArtifactFileOutputMixin): def run(self): self._write_to_file(artifact) @@ -46,7 +46,7 @@ def run(self): assert os.path.exists(os.path.join(outdir, artifact.name)) def test_output_file_and_dir(self): - class Test(ImageArtifactFileOutputMixin): + class Test(BlobArtifactFileOutputMixin): pass outfile = "test.txt" diff --git a/tests/unit/tasks/test_text_to_speech_task.py b/tests/unit/tasks/test_text_to_speech_task.py new file mode 100644 index 000000000..f30893e8a --- /dev/null +++ b/tests/unit/tasks/test_text_to_speech_task.py @@ -0,0 +1,30 @@ +from unittest.mock import Mock + +from griptape.artifacts import TextArtifact +from griptape.engines import TextToSpeechEngine +from griptape.structures import Agent +from griptape.tasks import BaseTask, TextToSpeechTask +from tests.mocks.mock_structure_config import MockStructureConfig + + +class TestTextToSpeechTask: + def test_string_input(self): + task = TextToSpeechTask("string input", text_to_speech_engine=Mock()) + + assert task.input.value == "string input" + + def test_callable_input(self): + input_artifact = TextArtifact("some text input") + + def callable(task: BaseTask) -> TextArtifact: + return input_artifact + + task = TextToSpeechTask(callable, text_to_speech_engine=Mock()) + + assert task.input == input_artifact + + def test_config_text_to_speech_engine(self): + task = TextToSpeechTask("foo bar") + Agent(config=MockStructureConfig()).add_task(task) + + assert isinstance(task.text_to_speech_engine, TextToSpeechEngine) diff --git a/tests/unit/tools/test_text_to_speech_client.py b/tests/unit/tools/test_text_to_speech_client.py new file mode 100644 index 000000000..881b1234d --- /dev/null +++ b/tests/unit/tools/test_text_to_speech_client.py @@ -0,0 +1,40 @@ +import os +import tempfile +import uuid +from unittest.mock import Mock + +import pytest + +from griptape.tools.text_to_speech_client.tool import TextToSpeechClient + + +class TestTextToSpeechClient: + @pytest.fixture + def text_to_speech_engine(self) -> Mock: + return Mock() + + @pytest.fixture + def text_to_speech_client(self, text_to_speech_engine) -> TextToSpeechClient: + return TextToSpeechClient(engine=text_to_speech_engine) + + def test_validate_output_configs(self, text_to_speech_engine) -> None: + with pytest.raises(ValueError): + TextToSpeechClient(engine=text_to_speech_engine, output_dir="test", output_file="test") + + def test_text_to_speech(self, text_to_speech_client) -> None: + text_to_speech_client.engine.run.return_value = Mock(value=b"audio data", format="mp3") + + audio_artifact = text_to_speech_client.text_to_speech(params={"values": {"text": "say this!"}}) + + assert audio_artifact + + def test_text_to_speech_with_outfile(self, text_to_speech_engine) -> None: + outfile = f"{tempfile.gettempdir()}/{str(uuid.uuid4())}.mp3" + text_to_speech_client = TextToSpeechClient(engine=text_to_speech_engine, output_file=outfile) + + text_to_speech_client.engine.run.return_value = Mock(value=b"audio data", format="mp3") # pyright: ignore + + audio_artifact = text_to_speech_client.text_to_speech(params={"values": {"text": "say this!"}}) + + assert audio_artifact + assert os.path.exists(outfile) From f1a2dba94bea0dfb2ebc5e4eae75ebfdb851cdcf Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Thu, 16 May 2024 18:18:15 -0500 Subject: [PATCH 047/145] Add `RedisConversationMemoryDriver` (#787) Co-authored-by: torabshaikh --- CHANGELOG.md | 3 + .../drivers/conversation-memory-drivers.md | 30 ++++++++++ griptape/drivers/__init__.py | 2 + .../redis_conversation_memory_driver.py | 56 +++++++++++++++++++ poetry.lock | 27 ++++++++- pyproject.toml | 1 + .../test_redis_conversation_memory_driver.py | 40 +++++++++++++ 7 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 griptape/drivers/memory/conversation/redis_conversation_memory_driver.py create mode 100644 tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py diff --git a/CHANGELOG.md b/CHANGELOG.md index c24f744c0..9f237ce6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added +- `RedisConversationMemoryDriver` to save conversation memory in redis. + ### Changed - Default behavior of OpenAiStructureConfig to utilize `gpt-4o` for prompt_driver. diff --git a/docs/griptape-framework/drivers/conversation-memory-drivers.md b/docs/griptape-framework/drivers/conversation-memory-drivers.md index d429be527..4c3de1e65 100644 --- a/docs/griptape-framework/drivers/conversation-memory-drivers.md +++ b/docs/griptape-framework/drivers/conversation-memory-drivers.md @@ -45,3 +45,33 @@ agent = Agent(conversation_memory=ConversationMemory(driver=dynamodb_driver)) agent.run("My name is Jeff.") agent.run("What is my name?") ``` + + +### Redis Conversation Memory Driver + +!!! info + This driver requires the `drivers-memory-conversation-redis` [extra](../index.md#extras). + +The [RedisConversationMemoryDriver](../../reference/griptape/drivers/memory/conversation/redis_conversation_memory_driver.md) allows you to persist Conversation Memory in [Redis](https://redis.io/). + +```python +import os +import uuid +from griptape.drivers import RedisConversationMemoryDriver +from griptape.memory.structure import ConversationMemory +from griptape.structures import Agent + +conversation_id = uuid.uuid4().hex +redis_conversation_driver = RedisConversationMemoryDriver( + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + password=os.environ["REDIS_PASSWORD"], + index=os.environ["REDIS_INDEX"], + conversation_id = conversation_id +) + +agent = Agent(conversation_memory=ConversationMemory(driver=redis_conversation_driver)) + +agent.run("My name is Jeff.") +agent.run("What is my name?") +``` diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index fdc5cdb59..7941ed61e 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -16,6 +16,7 @@ from .memory.conversation.base_conversation_memory_driver import BaseConversationMemoryDriver from .memory.conversation.local_conversation_memory_driver import LocalConversationMemoryDriver from .memory.conversation.amazon_dynamodb_conversation_memory_driver import AmazonDynamoDbConversationMemoryDriver +from .memory.conversation.redis_conversation_memory_driver import RedisConversationMemoryDriver from .embedding.base_embedding_driver import BaseEmbeddingDriver from .embedding.openai_embedding_driver import OpenAiEmbeddingDriver @@ -123,6 +124,7 @@ "BaseConversationMemoryDriver", "LocalConversationMemoryDriver", "AmazonDynamoDbConversationMemoryDriver", + "RedisConversationMemoryDriver", "BaseEmbeddingDriver", "OpenAiEmbeddingDriver", "AzureOpenAiEmbeddingDriver", diff --git a/griptape/drivers/memory/conversation/redis_conversation_memory_driver.py b/griptape/drivers/memory/conversation/redis_conversation_memory_driver.py new file mode 100644 index 000000000..0531d5f9d --- /dev/null +++ b/griptape/drivers/memory/conversation/redis_conversation_memory_driver.py @@ -0,0 +1,56 @@ +from __future__ import annotations +import uuid +from attr import define, field, Factory +from typing import Optional, TYPE_CHECKING +from griptape.drivers import BaseConversationMemoryDriver +from griptape.memory.structure import BaseConversationMemory +from griptape.utils.import_utils import import_optional_dependency + +if TYPE_CHECKING: + from redis import Redis + + +@define +class RedisConversationMemoryDriver(BaseConversationMemoryDriver): + """A Conversation Memory Driver for Redis. + + This driver interfaces with a Redis instance and utilizes the Redis hashes and RediSearch module to store, + retrieve, and query conversations in a structured manner. + Proper setup of the Redis instance and RediSearch is necessary for the driver to function correctly. + + Attributes: + host: The host of the Redis instance. + port: The port of the Redis instance. + db: The database of the Redis instance. + password: The password of the Redis instance. + index: The name of the index to use. + conversation_id: The id of the conversation. + """ + + host: str = field(kw_only=True, metadata={"serializable": True}) + port: int = field(kw_only=True, metadata={"serializable": True}) + db: int = field(kw_only=True, default=0, metadata={"serializable": True}) + password: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) + index: str = field(kw_only=True, metadata={"serializable": True}) + conversation_id: str = field(kw_only=True, default=uuid.uuid4().hex) + + client: Redis = field( + default=Factory( + lambda self: import_optional_dependency("redis").Redis( + host=self.host, port=self.port, db=self.db, password=self.password, decode_responses=False + ), + takes_self=True, + ) + ) + + def store(self, memory: BaseConversationMemory) -> None: + self.client.hset(self.index, self.conversation_id, memory.to_json()) + + def load(self) -> Optional[BaseConversationMemory]: + key = self.index + memory_json = self.client.hget(key, self.conversation_id) + if memory_json: + memory = BaseConversationMemory.from_json(memory_json) + memory.driver = self + return memory + return None diff --git a/poetry.lock b/poetry.lock index c66d806c6..ccb990264 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -3746,6 +3746,7 @@ files = [ {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8729dbf25eb32ad0dc0b9bd5e6a0d0b7e5c2dc8ec06ad171088e1896b522a74"}, {file = "pymongo-4.6.1-cp312-cp312-win32.whl", hash = "sha256:3177f783ae7e08aaf7b2802e0df4e4b13903520e8380915e6337cdc7a6ff01d8"}, {file = "pymongo-4.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:00c199e1c593e2c8b033136d7a08f0c376452bac8a896c923fcd6f419e07bdd2"}, + {file = "pymongo-4.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6dcc95f4bb9ed793714b43f4f23a7b0c57e4ef47414162297d6f650213512c19"}, {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:13552ca505366df74e3e2f0a4f27c363928f3dff0eef9f281eb81af7f29bc3c5"}, {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:77e0df59b1a4994ad30c6d746992ae887f9756a43fc25dec2db515d94cf0222d"}, {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3a7f02a58a0c2912734105e05dedbee4f7507e6f1bd132ebad520be0b11d46fd"}, @@ -4802,30 +4803,51 @@ description = "Database Abstraction Library" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ + {file = "SQLAlchemy-1.4.51-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:1a09d5bd1a40d76ad90e5570530e082ddc000e1d92de495746f6257dc08f166b"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2be4e6294c53f2ec8ea36486b56390e3bcaa052bf3a9a47005687ccf376745d1"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca484ca11c65e05639ffe80f20d45e6be81fbec7683d6c9a15cd421e6e8b340"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0535d5b57d014d06ceeaeffd816bb3a6e2dddeb670222570b8c4953e2d2ea678"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af55cc207865d641a57f7044e98b08b09220da3d1b13a46f26487cc2f898a072"}, + {file = "SQLAlchemy-1.4.51-cp310-cp310-win32.whl", hash = "sha256:7af40425ac535cbda129d9915edcaa002afe35d84609fd3b9d6a8c46732e02ee"}, + {file = "SQLAlchemy-1.4.51-cp310-cp310-win_amd64.whl", hash = "sha256:8d1d7d63e5d2f4e92a39ae1e897a5d551720179bb8d1254883e7113d3826d43c"}, + {file = "SQLAlchemy-1.4.51-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eaeeb2464019765bc4340214fca1143081d49972864773f3f1e95dba5c7edc7d"}, {file = "SQLAlchemy-1.4.51-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7deeae5071930abb3669b5185abb6c33ddfd2398f87660fafdb9e6a5fb0f3f2f"}, {file = "SQLAlchemy-1.4.51-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0892e7ac8bc76da499ad3ee8de8da4d7905a3110b952e2a35a940dab1ffa550e"}, + {file = "SQLAlchemy-1.4.51-cp311-cp311-win32.whl", hash = "sha256:50e074aea505f4427151c286955ea025f51752fa42f9939749336672e0674c81"}, + {file = "SQLAlchemy-1.4.51-cp311-cp311-win_amd64.whl", hash = "sha256:3b0cd89a7bd03f57ae58263d0f828a072d1b440c8c2949f38f3b446148321171"}, + {file = "SQLAlchemy-1.4.51-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a33cb3f095e7d776ec76e79d92d83117438b6153510770fcd57b9c96f9ef623d"}, {file = "SQLAlchemy-1.4.51-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cacc0b2dd7d22a918a9642fc89840a5d3cee18a0e1fe41080b1141b23b10916"}, {file = "SQLAlchemy-1.4.51-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:245c67c88e63f1523e9216cad6ba3107dea2d3ee19adc359597a628afcabfbcb"}, + {file = "SQLAlchemy-1.4.51-cp312-cp312-win32.whl", hash = "sha256:8e702e7489f39375601c7ea5a0bef207256828a2bc5986c65cb15cd0cf097a87"}, + {file = "SQLAlchemy-1.4.51-cp312-cp312-win_amd64.whl", hash = "sha256:0525c4905b4b52d8ccc3c203c9d7ab2a80329ffa077d4bacf31aefda7604dc65"}, + {file = "SQLAlchemy-1.4.51-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:1980e6eb6c9be49ea8f89889989127daafc43f0b1b6843d71efab1514973cca0"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ec7a0ed9b32afdf337172678a4a0e6419775ba4e649b66f49415615fa47efbd"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352df882088a55293f621328ec33b6ffca936ad7f23013b22520542e1ab6ad1b"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86a22143a4001f53bf58027b044da1fb10d67b62a785fc1390b5c7f089d9838c"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c37bc677690fd33932182b85d37433845de612962ed080c3e4d92f758d1bd894"}, + {file = "SQLAlchemy-1.4.51-cp36-cp36m-win32.whl", hash = "sha256:d0a83afab5e062abffcdcbcc74f9d3ba37b2385294dd0927ad65fc6ebe04e054"}, + {file = "SQLAlchemy-1.4.51-cp36-cp36m-win_amd64.whl", hash = "sha256:a61184c7289146c8cff06b6b41807c6994c6d437278e72cf00ff7fe1c7a263d1"}, + {file = "SQLAlchemy-1.4.51-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:3f0ef620ecbab46e81035cf3dedfb412a7da35340500ba470f9ce43a1e6c423b"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c55040d8ea65414de7c47f1a23823cd9f3fad0dc93e6b6b728fee81230f817b"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ef80328e3fee2be0a1abe3fe9445d3a2e52a1282ba342d0dab6edf1fef4707"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f8cafa6f885a0ff5e39efa9325195217bb47d5929ab0051636610d24aef45ade"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8f2df79a46e130235bc5e1bbef4de0583fb19d481eaa0bffa76e8347ea45ec6"}, + {file = "SQLAlchemy-1.4.51-cp37-cp37m-win32.whl", hash = "sha256:f2e5b6f5cf7c18df66d082604a1d9c7a2d18f7d1dbe9514a2afaccbb51cc4fc3"}, + {file = "SQLAlchemy-1.4.51-cp37-cp37m-win_amd64.whl", hash = "sha256:5e180fff133d21a800c4f050733d59340f40d42364fcb9d14f6a67764bdc48d2"}, + {file = "SQLAlchemy-1.4.51-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7d8139ca0b9f93890ab899da678816518af74312bb8cd71fb721436a93a93298"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb18549b770351b54e1ab5da37d22bc530b8bfe2ee31e22b9ebe650640d2ef12"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55e699466106d09f028ab78d3c2e1f621b5ef2c8694598242259e4515715da7c"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2ad16880ccd971ac8e570550fbdef1385e094b022d6fc85ef3ce7df400dddad3"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b97fd5bb6b7c1a64b7ac0632f7ce389b8ab362e7bd5f60654c2a418496be5d7f"}, + {file = "SQLAlchemy-1.4.51-cp38-cp38-win32.whl", hash = "sha256:cecb66492440ae8592797dd705a0cbaa6abe0555f4fa6c5f40b078bd2740fc6b"}, + {file = "SQLAlchemy-1.4.51-cp38-cp38-win_amd64.whl", hash = "sha256:39b02b645632c5fe46b8dd30755682f629ffbb62ff317ecc14c998c21b2896ff"}, + {file = "SQLAlchemy-1.4.51-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b03850c290c765b87102959ea53299dc9addf76ca08a06ea98383348ae205c99"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e646b19f47d655261b22df9976e572f588185279970efba3d45c377127d35349"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3cf56cc36d42908495760b223ca9c2c0f9f0002b4eddc994b24db5fcb86a9e4"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0d661cff58c91726c601cc0ee626bf167b20cc4d7941c93c5f3ac28dc34ddbea"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3823dda635988e6744d4417e13f2e2b5fe76c4bf29dd67e95f98717e1b094cad"}, + {file = "SQLAlchemy-1.4.51-cp39-cp39-win32.whl", hash = "sha256:b00cf0471888823b7a9f722c6c41eb6985cf34f077edcf62695ac4bed6ec01ee"}, + {file = "SQLAlchemy-1.4.51-cp39-cp39-win_amd64.whl", hash = "sha256:a055ba17f4675aadcda3005df2e28a86feb731fdcc865e1f6b4f209ed1225cba"}, {file = "SQLAlchemy-1.4.51.tar.gz", hash = "sha256:e7908c2025eb18394e32d65dd02d2e37e17d733cdbe7d78231c2b6d7eb20cdb9"}, ] @@ -5692,6 +5714,7 @@ drivers-embedding-voyageai = ["voyageai"] drivers-event-listener-amazon-iot = ["boto3"] drivers-event-listener-amazon-sqs = ["boto3"] drivers-memory-conversation-amazon-dynamodb = ["boto3"] +drivers-memory-conversation-redis = ["redis"] drivers-prompt-amazon-bedrock = ["anthropic", "boto3"] drivers-prompt-amazon-sagemaker = ["boto3", "transformers"] drivers-prompt-anthropic = ["anthropic"] @@ -5718,4 +5741,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "895031a580cca4467c6bb500ef92e9c84e911f3add4046ed94385893dcb643b1" +content-hash = "edfa749ceeaae8216026c5c18245dbb284383a3b6772d648319253cc9657a2d1" diff --git a/pyproject.toml b/pyproject.toml index 77ae12331..06ea541f2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -72,6 +72,7 @@ drivers-sql-snowflake = ["snowflake-sqlalchemy", "snowflake", "snowflake-connect drivers-sql-postgres = ["pgvector", "psycopg2-binary"] drivers-memory-conversation-amazon-dynamodb = ["boto3"] +drivers-memory-conversation-redis = ["redis"] drivers-vector-marqo = ["marqo"] drivers-vector-pinecone = ["pinecone-client"] diff --git a/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py new file mode 100644 index 000000000..dee840508 --- /dev/null +++ b/tests/unit/drivers/memory/conversation/test_redis_conversation_memory_driver.py @@ -0,0 +1,40 @@ +import pytest +import redis +from griptape.memory.structure.base_conversation_memory import BaseConversationMemory +from griptape.drivers.memory.conversation.redis_conversation_memory_driver import RedisConversationMemoryDriver + +TEST_CONVERSATION = '{"type": "ConversationMemory", "runs": [{"type": "Run", "id": "729ca6be5d79433d9762eb06dfd677e2", "input": "Hi There, Hello", "output": "Hello! How can I assist you today?"}], "max_runs": 2}' +CONVERSATION_ID = "117151897f344ff684b553d0655d8f39" +INDEX = "griptape_converstaion" +HOST = "127.0.0.1" +PORT = 6379 +PASSWORD = "" + + +class TestRedisConversationMemoryDriver: + @pytest.fixture(autouse=True) + def mock_redis(self, mocker): + mocker.patch.object(redis.StrictRedis, "hset", return_value=None) + mocker.patch.object(redis.StrictRedis, "keys", return_value=[b"test"]) + mocker.patch.object(redis.StrictRedis, "hget", return_value=TEST_CONVERSATION) + + fake_redisearch = mocker.MagicMock() + fake_redisearch.search = mocker.MagicMock(return_value=mocker.MagicMock(docs=[])) + fake_redisearch.info = mocker.MagicMock(side_effect=Exception("Index not found")) + fake_redisearch.create_index = mocker.MagicMock(return_value=None) + + mocker.patch.object(redis.StrictRedis, "ft", return_value=fake_redisearch) + + @pytest.fixture + def driver(self): + return RedisConversationMemoryDriver(host=HOST, port=PORT, db=0, index=INDEX, conversation_id=CONVERSATION_ID) + + def test_store(self, driver): + memory = BaseConversationMemory.from_json(TEST_CONVERSATION) + assert driver.store(memory) == None + + def test_load(self, driver): + memory = driver.load() + assert memory.type == "ConversationMemory" + assert memory.max_runs == 2 + assert memory.runs == BaseConversationMemory.from_json(TEST_CONVERSATION).runs From c9afae6f1951070e2983750241836b2247d419d7 Mon Sep 17 00:00:00 2001 From: Andrew French Date: Fri, 17 May 2024 10:01:40 -0700 Subject: [PATCH 048/145] Merge main to dev (#789) Co-authored-by: Aodhan Roche Co-authored-by: Collin Dutter Co-authored-by: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Co-authored-by: Zach Giordano <32624672+zachgiordano@users.noreply.github.com> --- CHANGELOG.md | 10 +++------- poetry.lock | 24 +----------------------- pyproject.toml | 2 +- 3 files changed, 5 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f237ce6b..519708d18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,23 +6,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased -### Added -- `RedisConversationMemoryDriver` to save conversation memory in redis. - -### Changed -- Default behavior of OpenAiStructureConfig to utilize `gpt-4o` for prompt_driver. +## [0.25.1] - 2024-05-15 ### Fixed - Honor `namespace` in `RedisVectorStoreDriver.query()`. - Correctly set the `meta`, `score`, and `vector` fields of query result returned from `RedisVectorStoreDriver.query()`. +- Standardize behavior between omitted and empty actions list when initializing `ActionsSubtask`. -## [0.25.1] - 2024-05-09 ### Added - Optional event batching on Event Listener Drivers. - `id` field to all events. ### Changed - Default behavior of Event Listener Drivers to batch events. +- Default behavior of OpenAiStructureConfig to utilize `gpt-4o` for prompt_driver. ## [0.25.0] - 2024-05-06 @@ -65,7 +62,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Type hint for parameter `azure_ad_token_provider` on Azure OpenAI drivers to `Optional[Callable[[], str]]`. - Missing parameters `azure_ad_token` and `azure_ad_token_provider` on the default client for `AzureOpenAiCompletionPromptDriver`. -- Standardize behavior between omitted and empty actions list when initializing `ActionsSubtask`. ## [0.24.2] - 2024-04-04 diff --git a/poetry.lock b/poetry.lock index ccb990264..d40bc7c93 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -3746,7 +3746,6 @@ files = [ {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8729dbf25eb32ad0dc0b9bd5e6a0d0b7e5c2dc8ec06ad171088e1896b522a74"}, {file = "pymongo-4.6.1-cp312-cp312-win32.whl", hash = "sha256:3177f783ae7e08aaf7b2802e0df4e4b13903520e8380915e6337cdc7a6ff01d8"}, {file = "pymongo-4.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:00c199e1c593e2c8b033136d7a08f0c376452bac8a896c923fcd6f419e07bdd2"}, - {file = "pymongo-4.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6dcc95f4bb9ed793714b43f4f23a7b0c57e4ef47414162297d6f650213512c19"}, {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:13552ca505366df74e3e2f0a4f27c363928f3dff0eef9f281eb81af7f29bc3c5"}, {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:77e0df59b1a4994ad30c6d746992ae887f9756a43fc25dec2db515d94cf0222d"}, {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3a7f02a58a0c2912734105e05dedbee4f7507e6f1bd132ebad520be0b11d46fd"}, @@ -4803,51 +4802,30 @@ description = "Database Abstraction Library" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "SQLAlchemy-1.4.51-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:1a09d5bd1a40d76ad90e5570530e082ddc000e1d92de495746f6257dc08f166b"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2be4e6294c53f2ec8ea36486b56390e3bcaa052bf3a9a47005687ccf376745d1"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca484ca11c65e05639ffe80f20d45e6be81fbec7683d6c9a15cd421e6e8b340"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0535d5b57d014d06ceeaeffd816bb3a6e2dddeb670222570b8c4953e2d2ea678"}, {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af55cc207865d641a57f7044e98b08b09220da3d1b13a46f26487cc2f898a072"}, - {file = "SQLAlchemy-1.4.51-cp310-cp310-win32.whl", hash = "sha256:7af40425ac535cbda129d9915edcaa002afe35d84609fd3b9d6a8c46732e02ee"}, - {file = "SQLAlchemy-1.4.51-cp310-cp310-win_amd64.whl", hash = "sha256:8d1d7d63e5d2f4e92a39ae1e897a5d551720179bb8d1254883e7113d3826d43c"}, - {file = "SQLAlchemy-1.4.51-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eaeeb2464019765bc4340214fca1143081d49972864773f3f1e95dba5c7edc7d"}, {file = "SQLAlchemy-1.4.51-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7deeae5071930abb3669b5185abb6c33ddfd2398f87660fafdb9e6a5fb0f3f2f"}, {file = "SQLAlchemy-1.4.51-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0892e7ac8bc76da499ad3ee8de8da4d7905a3110b952e2a35a940dab1ffa550e"}, - {file = "SQLAlchemy-1.4.51-cp311-cp311-win32.whl", hash = "sha256:50e074aea505f4427151c286955ea025f51752fa42f9939749336672e0674c81"}, - {file = "SQLAlchemy-1.4.51-cp311-cp311-win_amd64.whl", hash = "sha256:3b0cd89a7bd03f57ae58263d0f828a072d1b440c8c2949f38f3b446148321171"}, - {file = "SQLAlchemy-1.4.51-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a33cb3f095e7d776ec76e79d92d83117438b6153510770fcd57b9c96f9ef623d"}, {file = "SQLAlchemy-1.4.51-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cacc0b2dd7d22a918a9642fc89840a5d3cee18a0e1fe41080b1141b23b10916"}, {file = "SQLAlchemy-1.4.51-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:245c67c88e63f1523e9216cad6ba3107dea2d3ee19adc359597a628afcabfbcb"}, - {file = "SQLAlchemy-1.4.51-cp312-cp312-win32.whl", hash = "sha256:8e702e7489f39375601c7ea5a0bef207256828a2bc5986c65cb15cd0cf097a87"}, - {file = "SQLAlchemy-1.4.51-cp312-cp312-win_amd64.whl", hash = "sha256:0525c4905b4b52d8ccc3c203c9d7ab2a80329ffa077d4bacf31aefda7604dc65"}, - {file = "SQLAlchemy-1.4.51-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:1980e6eb6c9be49ea8f89889989127daafc43f0b1b6843d71efab1514973cca0"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ec7a0ed9b32afdf337172678a4a0e6419775ba4e649b66f49415615fa47efbd"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352df882088a55293f621328ec33b6ffca936ad7f23013b22520542e1ab6ad1b"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86a22143a4001f53bf58027b044da1fb10d67b62a785fc1390b5c7f089d9838c"}, {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c37bc677690fd33932182b85d37433845de612962ed080c3e4d92f758d1bd894"}, - {file = "SQLAlchemy-1.4.51-cp36-cp36m-win32.whl", hash = "sha256:d0a83afab5e062abffcdcbcc74f9d3ba37b2385294dd0927ad65fc6ebe04e054"}, - {file = "SQLAlchemy-1.4.51-cp36-cp36m-win_amd64.whl", hash = "sha256:a61184c7289146c8cff06b6b41807c6994c6d437278e72cf00ff7fe1c7a263d1"}, - {file = "SQLAlchemy-1.4.51-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:3f0ef620ecbab46e81035cf3dedfb412a7da35340500ba470f9ce43a1e6c423b"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c55040d8ea65414de7c47f1a23823cd9f3fad0dc93e6b6b728fee81230f817b"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ef80328e3fee2be0a1abe3fe9445d3a2e52a1282ba342d0dab6edf1fef4707"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f8cafa6f885a0ff5e39efa9325195217bb47d5929ab0051636610d24aef45ade"}, {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8f2df79a46e130235bc5e1bbef4de0583fb19d481eaa0bffa76e8347ea45ec6"}, - {file = "SQLAlchemy-1.4.51-cp37-cp37m-win32.whl", hash = "sha256:f2e5b6f5cf7c18df66d082604a1d9c7a2d18f7d1dbe9514a2afaccbb51cc4fc3"}, - {file = "SQLAlchemy-1.4.51-cp37-cp37m-win_amd64.whl", hash = "sha256:5e180fff133d21a800c4f050733d59340f40d42364fcb9d14f6a67764bdc48d2"}, - {file = "SQLAlchemy-1.4.51-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7d8139ca0b9f93890ab899da678816518af74312bb8cd71fb721436a93a93298"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb18549b770351b54e1ab5da37d22bc530b8bfe2ee31e22b9ebe650640d2ef12"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55e699466106d09f028ab78d3c2e1f621b5ef2c8694598242259e4515715da7c"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2ad16880ccd971ac8e570550fbdef1385e094b022d6fc85ef3ce7df400dddad3"}, {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b97fd5bb6b7c1a64b7ac0632f7ce389b8ab362e7bd5f60654c2a418496be5d7f"}, - {file = "SQLAlchemy-1.4.51-cp38-cp38-win32.whl", hash = "sha256:cecb66492440ae8592797dd705a0cbaa6abe0555f4fa6c5f40b078bd2740fc6b"}, - {file = "SQLAlchemy-1.4.51-cp38-cp38-win_amd64.whl", hash = "sha256:39b02b645632c5fe46b8dd30755682f629ffbb62ff317ecc14c998c21b2896ff"}, - {file = "SQLAlchemy-1.4.51-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b03850c290c765b87102959ea53299dc9addf76ca08a06ea98383348ae205c99"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e646b19f47d655261b22df9976e572f588185279970efba3d45c377127d35349"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3cf56cc36d42908495760b223ca9c2c0f9f0002b4eddc994b24db5fcb86a9e4"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0d661cff58c91726c601cc0ee626bf167b20cc4d7941c93c5f3ac28dc34ddbea"}, {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3823dda635988e6744d4417e13f2e2b5fe76c4bf29dd67e95f98717e1b094cad"}, - {file = "SQLAlchemy-1.4.51-cp39-cp39-win32.whl", hash = "sha256:b00cf0471888823b7a9f722c6c41eb6985cf34f077edcf62695ac4bed6ec01ee"}, - {file = "SQLAlchemy-1.4.51-cp39-cp39-win_amd64.whl", hash = "sha256:a055ba17f4675aadcda3005df2e28a86feb731fdcc865e1f6b4f209ed1225cba"}, {file = "SQLAlchemy-1.4.51.tar.gz", hash = "sha256:e7908c2025eb18394e32d65dd02d2e37e17d733cdbe7d78231c2b6d7eb20cdb9"}, ] diff --git a/pyproject.toml b/pyproject.toml index 06ea541f2..c7f89bdca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "griptape" -version = "0.25.0" +version = "0.25.1" description = "Modular Python framework for LLM workflows, tools, memory, and data." authors = ["Griptape "] license = "Apache 2.0" From fcb9727607b4dbf90e6fa29d8bf15e73372b0330 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 17 May 2024 12:13:08 -0700 Subject: [PATCH 049/145] Add ruff to github code check, use local deps for pre-commit (#784) --- .github/workflows/code-checks.yml | 15 +- .pre-commit-config.yaml | 30 +- README.md | 4 +- griptape/artifacts/base_artifact.py | 3 +- griptape/config/base_config.py | 3 +- .../embedding/base_embedding_driver.py | 3 +- .../base_embedding_model_driver.py | 6 +- .../base_event_listener_driver.py | 6 +- .../file_manager/base_file_manager_driver.py | 9 +- .../base_image_generation_driver.py | 12 +- .../openai_image_generation_driver.py | 6 +- .../base_image_generation_model_driver.py | 15 +- ...diffusion_image_generation_model_driver.py | 2 +- .../image_query/base_image_query_driver.py | 3 +- .../image_query/dummy_image_query_driver.py | 2 +- .../base_image_query_model_driver.py | 6 +- ...bedrock_claude_image_query_model_driver.py | 3 +- .../base_conversation_memory_driver.py | 6 +- griptape/drivers/prompt/base_prompt_driver.py | 6 +- .../drivers/prompt/cohere_prompt_driver.py | 5 +- .../prompt/huggingface_hub_prompt_driver.py | 9 +- .../huggingface_pipeline_prompt_driver.py | 8 +- .../prompt/openai_chat_prompt_driver.py | 1 - .../prompt/openai_completion_prompt_driver.py | 1 - .../prompt_model/base_prompt_model_driver.py | 12 +- griptape/drivers/sql/base_sql_driver.py | 9 +- .../base_structure_run_driver.py | 3 +- .../base_text_to_speech_driver.py | 3 +- .../dummy_text_to_speech_driver.py | 1 - .../elevenlabs_text_to_speech_driver.py | 5 +- .../azure_mongodb_vector_store_driver.py | 9 +- .../vector/base_vector_store_driver.py | 15 +- .../vector/marqo_vector_store_driver.py | 2 +- .../vector/opensearch_vector_store_driver.py | 2 +- .../vector/pgvector_vector_store_driver.py | 1 - .../vector/redis_vector_store_driver.py | 2 +- .../web_scraper/base_web_scraper_driver.py | 3 +- .../extraction/base_extraction_engine.py | 3 +- .../extraction/csv_extraction_engine.py | 2 +- .../image/base_image_generation_engine.py | 3 +- .../image/prompt_image_generation_engine.py | 1 - griptape/engines/query/base_query_engine.py | 12 +- griptape/engines/query/vector_query_engine.py | 2 +- .../engines/summary/base_summary_engine.py | 5 +- .../events/base_image_generation_event.py | 3 +- griptape/events/base_image_query_event.py | 3 +- .../events/base_media_generation_event.py | 3 +- griptape/events/base_text_to_speech_event.py | 3 +- .../events/finish_actions_subtask_event.py | 3 +- .../events/finish_image_generation_event.py | 3 +- griptape/events/finish_structure_run_event.py | 6 +- griptape/events/finish_task_event.py | 3 +- .../events/finish_text_to_speech_event.py | 4 +- .../events/start_actions_subtask_event.py | 3 +- griptape/events/start_prompt_event.py | 2 +- griptape/events/start_structure_run_event.py | 6 +- griptape/events/start_task_event.py | 3 +- griptape/loaders/base_loader.py | 3 +- griptape/loaders/image_loader.py | 5 +- griptape/memory/meta/base_meta_entry.py | 3 +- .../structure/base_conversation_memory.py | 6 +- .../task/storage/base_artifact_storage.py | 17 +- .../task/storage/text_artifact_storage.py | 2 +- griptape/memory/task/task_memory.py | 5 +- .../mixins/actions_subtask_origin_mixin.py | 15 +- griptape/structures/structure.py | 7 +- griptape/tasks/base_audio_generation_task.py | 9 +- griptape/tasks/base_task.py | 6 +- griptape/tasks/image_query_task.py | 8 +- .../outpainting_image_generation_task.py | 7 +- griptape/tokenizers/base_tokenizer.py | 3 +- griptape/tokenizers/cohere_tokenizer.py | 2 +- griptape/tokenizers/huggingface_tokenizer.py | 2 +- griptape/tools/aws_iam_client/tool.py | 4 +- griptape/tools/aws_s3_client/tool.py | 3 + griptape/tools/google_drive/tool.py | 27 +- griptape/tools/task_memory_client/tool.py | 2 +- griptape/utils/conversation.py | 2 +- poetry.lock | 3164 ++++++++--------- pyproject.toml | 18 +- ...table_diffusion_image_generation_driver.py | 4 +- .../test_markdownify_web_scraper_driver.py | 5 +- 82 files changed, 1778 insertions(+), 1855 deletions(-) diff --git a/.github/workflows/code-checks.yml b/.github/workflows/code-checks.yml index 8b6311b9b..19b65bce9 100644 --- a/.github/workflows/code-checks.yml +++ b/.github/workflows/code-checks.yml @@ -19,7 +19,7 @@ jobs: - name: Init environment uses: ./.github/actions/init-environment - name: Run formatter - run: poetry run black --check . + run: poetry run ruff format --check . type-check: runs-on: ubuntu-latest strategy: @@ -33,3 +33,16 @@ jobs: uses: ./.github/actions/init-environment - name: Run type checker run: poetry run pyright griptape/ + lint: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: [ "3.9" ] + steps: + - name: Checkout actions + uses: actions/checkout@v3 + - name: Init environment + uses: ./.github/actions/init-environment + - name: Run linter + run: poetry run ruff check griptape/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b941ffdef..69209ba17 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,14 +1,28 @@ repos: -- repo: https://github.com/ambv/black - rev: 23.7.0 - hooks: - - id: black - repo: https://github.com/asottile/pyupgrade rev: v3.15.0 hooks: - id: pyupgrade args: [--py39-plus, --keep-runtime-typing] -- repo: https://github.com/RobertCraigie/pyright-python - rev: v1.1.355 - hooks: - - id: pyright +- repo: local + hooks: + - id: ruff-lint + name: Ruff + entry: poetry run ruff check + args: [--fix] + language: system + types: [python] +- repo: local + hooks: + - id: ruff-format + name: Ruff + entry: poetry run ruff format + language: system + types: [python] +- repo: local + hooks: + - id: pyright + name: Pyright + entry: poetry run pyright + language: system + types: [python] diff --git a/README.md b/README.md index 53c941a2e..aed7cdaac 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![Tests](https://github.com/griptape-ai/griptape/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/griptape-ai/griptape/actions/workflows/unit-tests.yml) [![Docs](https://readthedocs.org/projects/griptape/badge/)](https://griptape.readthedocs.io/) [![Checked with pyright](https://microsoft.github.io/pyright/img/pyright_badge.svg)](https://microsoft.github.io/pyright/) -[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) [![Griptape Discord](https://dcbadge.vercel.app/api/server/gnWRz88eym?compact=true&style=flat)](https://discord.gg/gnWRz88eym) Griptape is a modular Python framework for building AI-powered applications that securely connect to your enterprise data and APIs. It offers developers the ability to maintain control and flexibility at every step. @@ -179,7 +179,7 @@ We welcome and encourage pull requests. To streamline the process, please follow 4. **Documentation:** Every pull request must include updates to documentation or explicitly explain why a documentation update is not required. Documentation is crucial for maintaining a comprehensive and user-friendly project. -5. **Code Style:** Griptape uses [Black](https://github.com/ambv/black) to enforce style guidelines. You can ensure that your code is formatted accordingly and will pass formatting checks using `pre-commit`. See [Tools](#tools) for information on how to configure this and other dev tools. +5. **Code Style:** Griptape uses [Ruff](https://github.com/astral-sh/ruff) to enforce style guidelines. You can ensure that your code is formatted accordingly and will pass formatting checks using `pre-commit`. See [Tools](#tools) for information on how to configure this and other dev tools. ### Tools diff --git a/griptape/artifacts/base_artifact.py b/griptape/artifacts/base_artifact.py index 50df2381d..daaa32c4f 100644 --- a/griptape/artifacts/base_artifact.py +++ b/griptape/artifacts/base_artifact.py @@ -44,5 +44,4 @@ def __len__(self) -> int: return len(self.value) @abstractmethod - def __add__(self, other: BaseArtifact) -> BaseArtifact: - ... + def __add__(self, other: BaseArtifact) -> BaseArtifact: ... diff --git a/griptape/config/base_config.py b/griptape/config/base_config.py index a96c2b0c5..241efadcd 100644 --- a/griptape/config/base_config.py +++ b/griptape/config/base_config.py @@ -6,5 +6,4 @@ @define -class BaseConfig(SerializableMixin, ABC): - ... +class BaseConfig(SerializableMixin, ABC): ... diff --git a/griptape/drivers/embedding/base_embedding_driver.py b/griptape/drivers/embedding/base_embedding_driver.py index a59f9bd9e..938bdd476 100644 --- a/griptape/drivers/embedding/base_embedding_driver.py +++ b/griptape/drivers/embedding/base_embedding_driver.py @@ -41,8 +41,7 @@ def embed_string(self, string: str) -> list[float]: raise RuntimeError("Failed to embed string.") @abstractmethod - def try_embed_chunk(self, chunk: str) -> list[float]: - ... + def try_embed_chunk(self, chunk: str) -> list[float]: ... def _embed_long_string(self, string: str) -> list[float]: """Embeds a string that is too long to embed in one go. diff --git a/griptape/drivers/embedding_model/base_embedding_model_driver.py b/griptape/drivers/embedding_model/base_embedding_model_driver.py index 21962c70d..d2b169495 100644 --- a/griptape/drivers/embedding_model/base_embedding_model_driver.py +++ b/griptape/drivers/embedding_model/base_embedding_model_driver.py @@ -5,9 +5,7 @@ @define class BaseEmbeddingModelDriver(ABC): @abstractmethod - def chunk_to_model_params(self, chunk: str) -> dict: - ... + def chunk_to_model_params(self, chunk: str) -> dict: ... @abstractmethod - def process_output(self, output: dict) -> list[float]: - ... + def process_output(self, output: dict) -> list[float]: ... diff --git a/griptape/drivers/event_listener/base_event_listener_driver.py b/griptape/drivers/event_listener/base_event_listener_driver.py index 8e7f827e9..9ff18cf4f 100644 --- a/griptape/drivers/event_listener/base_event_listener_driver.py +++ b/griptape/drivers/event_listener/base_event_listener_driver.py @@ -27,12 +27,10 @@ def publish_event(self, event: BaseEvent | dict, flush: bool = False) -> None: self.futures_executor.submit(self._safe_try_publish_event, event, flush) @abstractmethod - def try_publish_event_payload(self, event_payload: dict) -> None: - ... + def try_publish_event_payload(self, event_payload: dict) -> None: ... @abstractmethod - def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: - ... + def try_publish_event_payload_batch(self, event_payload_batch: list[dict]) -> None: ... def _safe_try_publish_event(self, event: BaseEvent | dict, flush: bool) -> None: try: diff --git a/griptape/drivers/file_manager/base_file_manager_driver.py b/griptape/drivers/file_manager/base_file_manager_driver.py index b6c0a02ca..1cff06d06 100644 --- a/griptape/drivers/file_manager/base_file_manager_driver.py +++ b/griptape/drivers/file_manager/base_file_manager_driver.py @@ -50,8 +50,7 @@ def list_files(self, path: str) -> TextArtifact | ErrorArtifact: return ErrorArtifact(f"Failed to list files: {str(e)}") @abstractmethod - def try_list_files(self, path: str) -> list[str]: - ... + def try_list_files(self, path: str) -> list[str]: ... def load_file(self, path: str) -> BaseArtifact: try: @@ -74,8 +73,7 @@ def load_file(self, path: str) -> BaseArtifact: return ErrorArtifact(f"Failed to load file: {str(e)}") @abstractmethod - def try_load_file(self, path: str) -> bytes: - ... + def try_load_file(self, path: str) -> bytes: ... def save_file(self, path: str, value: bytes | str) -> InfoArtifact | ErrorArtifact: try: @@ -100,5 +98,4 @@ def save_file(self, path: str, value: bytes | str) -> InfoArtifact | ErrorArtifa return ErrorArtifact(f"Failed to save file: {str(e)}") @abstractmethod - def try_save_file(self, path: str, value: bytes): - ... + def try_save_file(self, path: str, value: bytes): ... diff --git a/griptape/drivers/image_generation/base_image_generation_driver.py b/griptape/drivers/image_generation/base_image_generation_driver.py index b6dfffc5d..771fc30dc 100644 --- a/griptape/drivers/image_generation/base_image_generation_driver.py +++ b/griptape/drivers/image_generation/base_image_generation_driver.py @@ -89,14 +89,12 @@ def run_image_outpainting( raise Exception("Failed to run image outpainting") @abstractmethod - def try_text_to_image(self, prompts: list[str], negative_prompts: Optional[list[str]] = None) -> ImageArtifact: - ... + def try_text_to_image(self, prompts: list[str], negative_prompts: Optional[list[str]] = None) -> ImageArtifact: ... @abstractmethod def try_image_variation( self, prompts: list[str], image: ImageArtifact, negative_prompts: Optional[list[str]] = None - ) -> ImageArtifact: - ... + ) -> ImageArtifact: ... @abstractmethod def try_image_inpainting( @@ -105,8 +103,7 @@ def try_image_inpainting( image: ImageArtifact, mask: ImageArtifact, negative_prompts: Optional[list[str]] = None, - ) -> ImageArtifact: - ... + ) -> ImageArtifact: ... @abstractmethod def try_image_outpainting( @@ -115,5 +112,4 @@ def try_image_outpainting( image: ImageArtifact, mask: ImageArtifact, negative_prompts: Optional[list[str]] = None, - ) -> ImageArtifact: - ... + ) -> ImageArtifact: ... diff --git a/griptape/drivers/image_generation/openai_image_generation_driver.py b/griptape/drivers/image_generation/openai_image_generation_driver.py index aaf959038..327132f64 100644 --- a/griptape/drivers/image_generation/openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/openai_image_generation_driver.py @@ -46,9 +46,9 @@ class OpenAiImageGenerationDriver(BaseImageGenerationDriver): quality: Union[Literal["standard"], Literal["hd"]] = field( default="standard", kw_only=True, metadata={"serializable": True} ) - image_size: ( - Union[Literal["256x256"], Literal["512x512"], Literal["1024x1024"], Literal["1024x1792"], Literal["1792x1024"]] - ) = field(default="1024x1024", kw_only=True, metadata={"serializable": True}) + image_size: Union[ + Literal["256x256"], Literal["512x512"], Literal["1024x1024"], Literal["1024x1792"], Literal["1792x1024"] + ] = field(default="1024x1024", kw_only=True, metadata={"serializable": True}) response_format: Literal["b64_json"] = field(default="b64_json", kw_only=True, metadata={"serializable": True}) def try_text_to_image(self, prompts: list[str], negative_prompts: Optional[list[str]] = None) -> ImageArtifact: diff --git a/griptape/drivers/image_generation_model/base_image_generation_model_driver.py b/griptape/drivers/image_generation_model/base_image_generation_model_driver.py index c32f02a60..328bbf4d7 100644 --- a/griptape/drivers/image_generation_model/base_image_generation_model_driver.py +++ b/griptape/drivers/image_generation_model/base_image_generation_model_driver.py @@ -12,8 +12,7 @@ @define class BaseImageGenerationModelDriver(SerializableMixin, ABC): @abstractmethod - def get_generated_image(self, response: dict) -> bytes: - ... + def get_generated_image(self, response: dict) -> bytes: ... @abstractmethod def text_to_image_request_parameters( @@ -23,8 +22,7 @@ def text_to_image_request_parameters( image_height: int, negative_prompts: Optional[list[str]] = None, seed: Optional[int] = None, - ) -> dict[str, Any]: - ... + ) -> dict[str, Any]: ... @abstractmethod def image_variation_request_parameters( @@ -33,8 +31,7 @@ def image_variation_request_parameters( image: ImageArtifact, negative_prompts: Optional[list[str]] = None, seed: Optional[int] = None, - ) -> dict[str, Any]: - ... + ) -> dict[str, Any]: ... @abstractmethod def image_inpainting_request_parameters( @@ -44,8 +41,7 @@ def image_inpainting_request_parameters( mask: ImageArtifact, negative_prompts: Optional[list[str]] = None, seed: Optional[int] = None, - ) -> dict[str, Any]: - ... + ) -> dict[str, Any]: ... @abstractmethod def image_outpainting_request_parameters( @@ -55,5 +51,4 @@ def image_outpainting_request_parameters( mask: ImageArtifact, negative_prompts: Optional[list[str]] = None, seed: Optional[int] = None, - ) -> dict[str, Any]: - ... + ) -> dict[str, Any]: ... diff --git a/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py b/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py index 6cde398b6..5018b42e4 100644 --- a/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py +++ b/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py @@ -151,6 +151,6 @@ def get_generated_image(self, response: dict) -> bytes: if image_response.get("finishReason") == "ERROR": raise Exception(f"Image generation failed: {image_response.get('finishReason')}") elif image_response.get("finishReason") == "CONTENT_FILTERED": - logging.warning(f"Image generation triggered content filter and may be blurred") + logging.warning("Image generation triggered content filter and may be blurred") return base64.decodebytes(bytes(image_response.get("base64"), "utf-8")) diff --git a/griptape/drivers/image_query/base_image_query_driver.py b/griptape/drivers/image_query/base_image_query_driver.py index 369cb13c6..8f7425732 100644 --- a/griptape/drivers/image_query/base_image_query_driver.py +++ b/griptape/drivers/image_query/base_image_query_driver.py @@ -42,5 +42,4 @@ def query(self, query: str, images: list[ImageArtifact]) -> TextArtifact: raise Exception("image query driver failed after all retry attempts") @abstractmethod - def try_query(self, query: str, images: list[ImageArtifact]) -> TextArtifact: - ... + def try_query(self, query: str, images: list[ImageArtifact]) -> TextArtifact: ... diff --git a/griptape/drivers/image_query/dummy_image_query_driver.py b/griptape/drivers/image_query/dummy_image_query_driver.py index b8f677507..1dea5ee14 100644 --- a/griptape/drivers/image_query/dummy_image_query_driver.py +++ b/griptape/drivers/image_query/dummy_image_query_driver.py @@ -8,7 +8,7 @@ @define class DummyImageQueryDriver(BaseImageQueryDriver): model: str = field(init=False) - max_tokens: int = field(init=False) + max_tokens: int = field(init=False) # pyright: ignore[reportGeneralTypeIssues] def try_query(self, query: str, images: list[ImageArtifact]) -> TextArtifact: raise DummyException(__class__.__name__, "try_query") diff --git a/griptape/drivers/image_query_model/base_image_query_model_driver.py b/griptape/drivers/image_query_model/base_image_query_model_driver.py index 46320f945..9bddbb979 100644 --- a/griptape/drivers/image_query_model/base_image_query_model_driver.py +++ b/griptape/drivers/image_query_model/base_image_query_model_driver.py @@ -8,9 +8,7 @@ @define class BaseImageQueryModelDriver(SerializableMixin, ABC): @abstractmethod - def image_query_request_parameters(self, query: str, images: list[ImageArtifact], max_tokens: int) -> dict: - ... + def image_query_request_parameters(self, query: str, images: list[ImageArtifact], max_tokens: int) -> dict: ... @abstractmethod - def process_output(self, output: dict) -> TextArtifact: - ... + def process_output(self, output: dict) -> TextArtifact: ... diff --git a/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py b/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py index caa646ba7..df7dd326a 100644 --- a/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py +++ b/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py @@ -1,6 +1,5 @@ from __future__ import annotations -from typing import Optional -from attr import field, define +from attr import define from griptape.artifacts import ImageArtifact, TextArtifact from griptape.drivers import BaseImageQueryModelDriver diff --git a/griptape/drivers/memory/conversation/base_conversation_memory_driver.py b/griptape/drivers/memory/conversation/base_conversation_memory_driver.py index 8a9f2cd9e..28299a7e4 100644 --- a/griptape/drivers/memory/conversation/base_conversation_memory_driver.py +++ b/griptape/drivers/memory/conversation/base_conversation_memory_driver.py @@ -9,9 +9,7 @@ class BaseConversationMemoryDriver(SerializableMixin, ABC): @abstractmethod - def store(self, memory: BaseConversationMemory) -> None: - ... + def store(self, memory: BaseConversationMemory) -> None: ... @abstractmethod - def load(self) -> Optional[BaseConversationMemory]: - ... + def load(self) -> Optional[BaseConversationMemory]: ... diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index 2f7607b00..ef6a35bcf 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -108,9 +108,7 @@ def default_prompt_stack_to_string_converter(self, prompt_stack: PromptStack) -> return "\n\n".join(prompt_lines) @abstractmethod - def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - ... + def try_run(self, prompt_stack: PromptStack) -> TextArtifact: ... @abstractmethod - def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - ... + def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: ... diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index f651f0482..07ae7717d 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -46,7 +46,10 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: raise Exception("model response is empty") def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - result = self.client.generate(**self._base_params(prompt_stack), stream=True) + result = self.client.generate( + **self._base_params(prompt_stack), + stream=True, # pyright: ignore[reportCallIssue] + ) for chunk in result: yield TextArtifact(value=chunk.text) diff --git a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py index c1e2db2fd..a1a6f31d5 100644 --- a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py @@ -1,15 +1,14 @@ from __future__ import annotations -from typing import TYPE_CHECKING + from collections.abc import Iterator -from os import environ -from griptape.utils import PromptStack, import_optional_dependency +from typing import TYPE_CHECKING -environ["TRANSFORMERS_VERBOSITY"] = "error" +from attr import Factory, define, field -from attr import define, field, Factory from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver from griptape.tokenizers import HuggingFaceTokenizer +from griptape.utils import PromptStack, import_optional_dependency if TYPE_CHECKING: from huggingface_hub import InferenceClient diff --git a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py index 2f8b307aa..d93a3a10c 100644 --- a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py @@ -1,15 +1,11 @@ from collections.abc import Iterator -from os import environ -from griptape.utils import PromptStack +from attr import Factory, define, field -environ["TRANSFORMERS_VERBOSITY"] = "error" - -from attr import define, field, Factory -from griptape.utils import import_optional_dependency from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver from griptape.tokenizers import HuggingFaceTokenizer +from griptape.utils import PromptStack, import_optional_dependency @define diff --git a/griptape/drivers/prompt/openai_chat_prompt_driver.py b/griptape/drivers/prompt/openai_chat_prompt_driver.py index 944ed1456..eee6e2d97 100644 --- a/griptape/drivers/prompt/openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/openai_chat_prompt_driver.py @@ -7,7 +7,6 @@ from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver from griptape.tokenizers import OpenAiTokenizer, BaseTokenizer -from typing import Tuple, Type import dateparser from datetime import datetime, timedelta diff --git a/griptape/drivers/prompt/openai_completion_prompt_driver.py b/griptape/drivers/prompt/openai_completion_prompt_driver.py index cc334ae3d..92ae4f36f 100644 --- a/griptape/drivers/prompt/openai_completion_prompt_driver.py +++ b/griptape/drivers/prompt/openai_completion_prompt_driver.py @@ -5,7 +5,6 @@ from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver from griptape.tokenizers import OpenAiTokenizer -from typing import Tuple, Type import openai diff --git a/griptape/drivers/prompt_model/base_prompt_model_driver.py b/griptape/drivers/prompt_model/base_prompt_model_driver.py index b4315dc38..9738127db 100644 --- a/griptape/drivers/prompt_model/base_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/base_prompt_model_driver.py @@ -17,17 +17,13 @@ class BasePromptModelDriver(SerializableMixin, ABC): @property @abstractmethod - def tokenizer(self) -> BaseTokenizer: - ... + def tokenizer(self) -> BaseTokenizer: ... @abstractmethod - def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str | list | dict: - ... + def prompt_stack_to_model_input(self, prompt_stack: PromptStack) -> str | list | dict: ... @abstractmethod - def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: - ... + def prompt_stack_to_model_params(self, prompt_stack: PromptStack) -> dict: ... @abstractmethod - def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: - ... + def process_output(self, output: list[dict] | str | bytes) -> TextArtifact: ... diff --git a/griptape/drivers/sql/base_sql_driver.py b/griptape/drivers/sql/base_sql_driver.py index 93762629a..95d1d0fa2 100644 --- a/griptape/drivers/sql/base_sql_driver.py +++ b/griptape/drivers/sql/base_sql_driver.py @@ -11,13 +11,10 @@ class RowResult: cells: dict[str, Any] @abstractmethod - def execute_query(self, query: str) -> Optional[list[RowResult]]: - ... + def execute_query(self, query: str) -> Optional[list[RowResult]]: ... @abstractmethod - def execute_query_raw(self, query: str) -> Optional[list[dict[str, Any]]]: - ... + def execute_query_raw(self, query: str) -> Optional[list[dict[str, Any]]]: ... @abstractmethod - def get_table_schema(self, table_name: str, schema: Optional[str] = None) -> Optional[str]: - ... + def get_table_schema(self, table_name: str, schema: Optional[str] = None) -> Optional[str]: ... diff --git a/griptape/drivers/structure_run/base_structure_run_driver.py b/griptape/drivers/structure_run/base_structure_run_driver.py index 8e10fb231..5c188a18d 100644 --- a/griptape/drivers/structure_run/base_structure_run_driver.py +++ b/griptape/drivers/structure_run/base_structure_run_driver.py @@ -11,5 +11,4 @@ def run(self, *args: BaseArtifact) -> BaseArtifact: return self.try_run(*args) @abstractmethod - def try_run(self, *args: BaseArtifact) -> BaseArtifact: - ... + def try_run(self, *args: BaseArtifact) -> BaseArtifact: ... diff --git a/griptape/drivers/text_to_speech/base_text_to_speech_driver.py b/griptape/drivers/text_to_speech/base_text_to_speech_driver.py index 58a911b1a..e1365a69f 100644 --- a/griptape/drivers/text_to_speech/base_text_to_speech_driver.py +++ b/griptape/drivers/text_to_speech/base_text_to_speech_driver.py @@ -40,5 +40,4 @@ def run_text_to_audio(self, prompts: list[str]) -> AudioArtifact: raise Exception("Failed to run text to audio generation") @abstractmethod - def try_text_to_audio(self, prompts: list[str]) -> AudioArtifact: - ... + def try_text_to_audio(self, prompts: list[str]) -> AudioArtifact: ... diff --git a/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py b/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py index 03adc10ce..ca109c8eb 100644 --- a/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py +++ b/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py @@ -1,4 +1,3 @@ -from typing import Optional from attrs import define, field from griptape.artifacts.audio_artifact import AudioArtifact from griptape.drivers import BaseTextToSpeechDriver diff --git a/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py b/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py index c3aeefd26..cf342b87b 100644 --- a/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py +++ b/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Any +from typing import Any from attr import define, field, Factory @@ -8,9 +8,6 @@ from griptape.drivers import BaseTextToSpeechDriver from griptape.utils import import_optional_dependency -if TYPE_CHECKING: - from elevenlabs.client import ElevenLabs - @define class ElevenLabsTextToSpeechDriver(BaseTextToSpeechDriver): diff --git a/griptape/drivers/vector/azure_mongodb_vector_store_driver.py b/griptape/drivers/vector/azure_mongodb_vector_store_driver.py index 049422259..47eb7d0d1 100644 --- a/griptape/drivers/vector/azure_mongodb_vector_store_driver.py +++ b/griptape/drivers/vector/azure_mongodb_vector_store_driver.py @@ -1,12 +1,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional -from attr import define, field, Factory +from typing import Optional +from attr import define from griptape.drivers import BaseVectorStoreDriver, MongoDbAtlasVectorStoreDriver -from griptape.utils import import_optional_dependency - -if TYPE_CHECKING: - from pymongo import MongoClient - from pymongo.collection import Collection @define diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 33020482e..0667df8a9 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -78,8 +78,7 @@ def upsert_text( ) @abstractmethod - def delete_vector(self, vector_id: str) -> None: - ... + def delete_vector(self, vector_id: str) -> None: ... @abstractmethod def upsert_vector( @@ -89,16 +88,13 @@ def upsert_vector( namespace: Optional[str] = None, meta: Optional[dict] = None, **kwargs, - ) -> str: - ... + ) -> str: ... @abstractmethod - def load_entry(self, vector_id: str, namespace: Optional[str] = None) -> Optional[Entry]: - ... + def load_entry(self, vector_id: str, namespace: Optional[str] = None) -> Optional[Entry]: ... @abstractmethod - def load_entries(self, namespace: Optional[str] = None) -> list[Entry]: - ... + def load_entries(self, namespace: Optional[str] = None) -> list[Entry]: ... @abstractmethod def query( @@ -108,5 +104,4 @@ def query( namespace: Optional[str] = None, include_vectors: bool = False, **kwargs, - ) -> list[QueryResult]: - ... + ) -> list[QueryResult]: ... diff --git a/griptape/drivers/vector/marqo_vector_store_driver.py b/griptape/drivers/vector/marqo_vector_store_driver.py index 5ae760b27..100c75d79 100644 --- a/griptape/drivers/vector/marqo_vector_store_driver.py +++ b/griptape/drivers/vector/marqo_vector_store_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import Optional, List, Dict, Any, TYPE_CHECKING +from typing import Optional, Any, TYPE_CHECKING from griptape.utils import import_optional_dependency from griptape.drivers import BaseVectorStoreDriver from griptape.artifacts import TextArtifact diff --git a/griptape/drivers/vector/opensearch_vector_store_driver.py b/griptape/drivers/vector/opensearch_vector_store_driver.py index e132206af..41bae7254 100644 --- a/griptape/drivers/vector/opensearch_vector_store_driver.py +++ b/griptape/drivers/vector/opensearch_vector_store_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import Optional, Tuple, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING from griptape import utils import logging from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/vector/pgvector_vector_store_driver.py b/griptape/drivers/vector/pgvector_vector_store_driver.py index 02f2f4268..29d5afb67 100644 --- a/griptape/drivers/vector/pgvector_vector_store_driver.py +++ b/griptape/drivers/vector/pgvector_vector_store_driver.py @@ -1,5 +1,4 @@ import uuid -from logging import exception from typing import Optional, Any, cast from attr import define, field, Factory from dataclasses import dataclass diff --git a/griptape/drivers/vector/redis_vector_store_driver.py b/griptape/drivers/vector/redis_vector_store_driver.py index 3772818ab..b347bfa41 100644 --- a/griptape/drivers/vector/redis_vector_store_driver.py +++ b/griptape/drivers/vector/redis_vector_store_driver.py @@ -3,7 +3,7 @@ import logging import numpy as np from griptape.utils import import_optional_dependency, str_to_hash -from typing import Optional, List, TYPE_CHECKING, Dict, Any +from typing import Optional, TYPE_CHECKING from attr import define, field, Factory from griptape.drivers import BaseVectorStoreDriver diff --git a/griptape/drivers/web_scraper/base_web_scraper_driver.py b/griptape/drivers/web_scraper/base_web_scraper_driver.py index bd66cca0a..ae39f8eac 100644 --- a/griptape/drivers/web_scraper/base_web_scraper_driver.py +++ b/griptape/drivers/web_scraper/base_web_scraper_driver.py @@ -5,5 +5,4 @@ class BaseWebScraperDriver(ABC): @abstractmethod - def scrape_url(self, url: str) -> TextArtifact: - ... + def scrape_url(self, url: str) -> TextArtifact: ... diff --git a/griptape/engines/extraction/base_extraction_engine.py b/griptape/engines/extraction/base_extraction_engine.py index 94c26d287..760a77d39 100644 --- a/griptape/engines/extraction/base_extraction_engine.py +++ b/griptape/engines/extraction/base_extraction_engine.py @@ -42,5 +42,4 @@ def min_response_tokens(self) -> int: @abstractmethod def extract( self, text: str | ListArtifact, *, rulesets: Optional[list[Ruleset]] = None, **kwargs - ) -> ListArtifact | ErrorArtifact: - ... + ) -> ListArtifact | ErrorArtifact: ... diff --git a/griptape/engines/extraction/csv_extraction_engine.py b/griptape/engines/extraction/csv_extraction_engine.py index e1112075d..696abd6d3 100644 --- a/griptape/engines/extraction/csv_extraction_engine.py +++ b/griptape/engines/extraction/csv_extraction_engine.py @@ -7,7 +7,7 @@ from griptape.utils import PromptStack from griptape.engines import BaseExtractionEngine from griptape.utils import J2 -from griptape.rules import Ruleset, rule +from griptape.rules import Ruleset @define diff --git a/griptape/engines/image/base_image_generation_engine.py b/griptape/engines/image/base_image_generation_engine.py index b63983c57..73dd5ac74 100644 --- a/griptape/engines/image/base_image_generation_engine.py +++ b/griptape/engines/image/base_image_generation_engine.py @@ -14,8 +14,7 @@ class BaseImageGenerationEngine(ABC): image_generation_driver: BaseImageGenerationDriver = field(kw_only=True) @abstractmethod - def run(self, prompts: list[str], *args, rulesets: Optional[list[Ruleset]], **kwargs) -> ImageArtifact: - ... + def run(self, prompts: list[str], *args, rulesets: Optional[list[Ruleset]], **kwargs) -> ImageArtifact: ... def _ruleset_to_prompts(self, prompts: Optional[list[str]], rulesets: Optional[list[Ruleset]]) -> list[str]: if not prompts: diff --git a/griptape/engines/image/prompt_image_generation_engine.py b/griptape/engines/image/prompt_image_generation_engine.py index d9f5493a1..c7d304beb 100644 --- a/griptape/engines/image/prompt_image_generation_engine.py +++ b/griptape/engines/image/prompt_image_generation_engine.py @@ -1,6 +1,5 @@ from __future__ import annotations -from abc import abstractmethod from attr import define from typing import Optional diff --git a/griptape/engines/query/base_query_engine.py b/griptape/engines/query/base_query_engine.py index 3851e8531..9477b3bd0 100644 --- a/griptape/engines/query/base_query_engine.py +++ b/griptape/engines/query/base_query_engine.py @@ -17,17 +17,13 @@ def query( rulesets: Optional[list[Ruleset]] = None, top_n: Optional[int] = None, filter: Optional[dict] = None, - ) -> TextArtifact: - ... + ) -> TextArtifact: ... @abstractmethod - def load_artifacts(self, namespace: str) -> ListArtifact: - ... + def load_artifacts(self, namespace: str) -> ListArtifact: ... @abstractmethod - def upsert_text_artifact(self, artifact: TextArtifact, namespace: Optional[str] = None) -> str: - ... + def upsert_text_artifact(self, artifact: TextArtifact, namespace: Optional[str] = None) -> str: ... @abstractmethod - def upsert_text_artifacts(self, artifacts: list[TextArtifact], namespace: str) -> None: - ... + def upsert_text_artifacts(self, artifacts: list[TextArtifact], namespace: str) -> None: ... diff --git a/griptape/engines/query/vector_query_engine.py b/griptape/engines/query/vector_query_engine.py index 7ca42f59f..34667d592 100644 --- a/griptape/engines/query/vector_query_engine.py +++ b/griptape/engines/query/vector_query_engine.py @@ -5,7 +5,7 @@ from griptape.utils import PromptStack from griptape.engines import BaseQueryEngine from griptape.utils.j2 import J2 -from griptape.rules import Ruleset, Rule +from griptape.rules import Ruleset if TYPE_CHECKING: from griptape.drivers import BaseVectorStoreDriver, BasePromptDriver diff --git a/griptape/engines/summary/base_summary_engine.py b/griptape/engines/summary/base_summary_engine.py index d464757ff..4a5aca520 100644 --- a/griptape/engines/summary/base_summary_engine.py +++ b/griptape/engines/summary/base_summary_engine.py @@ -11,5 +11,6 @@ def summarize_text(self, text: str, *, rulesets: Optional[list[Ruleset]] = None) return self.summarize_artifacts(ListArtifact([TextArtifact(text)]), rulesets=rulesets).value @abstractmethod - def summarize_artifacts(self, artifacts: ListArtifact, *, rulesets: Optional[list[Ruleset]] = None) -> TextArtifact: - ... + def summarize_artifacts( + self, artifacts: ListArtifact, *, rulesets: Optional[list[Ruleset]] = None + ) -> TextArtifact: ... diff --git a/griptape/events/base_image_generation_event.py b/griptape/events/base_image_generation_event.py index 244310469..5cc516b8e 100644 --- a/griptape/events/base_image_generation_event.py +++ b/griptape/events/base_image_generation_event.py @@ -5,5 +5,4 @@ @define -class BaseImageGenerationEvent(BaseMediaGenerationEvent, ABC): - ... +class BaseImageGenerationEvent(BaseMediaGenerationEvent, ABC): ... diff --git a/griptape/events/base_image_query_event.py b/griptape/events/base_image_query_event.py index df1db1fb5..8ed796072 100644 --- a/griptape/events/base_image_query_event.py +++ b/griptape/events/base_image_query_event.py @@ -6,5 +6,4 @@ @define -class BaseImageQueryEvent(BaseEvent, ABC): - ... +class BaseImageQueryEvent(BaseEvent, ABC): ... diff --git a/griptape/events/base_media_generation_event.py b/griptape/events/base_media_generation_event.py index b3a9bcb33..0280c41aa 100644 --- a/griptape/events/base_media_generation_event.py +++ b/griptape/events/base_media_generation_event.py @@ -5,5 +5,4 @@ @define -class BaseMediaGenerationEvent(BaseEvent, ABC): - ... +class BaseMediaGenerationEvent(BaseEvent, ABC): ... diff --git a/griptape/events/base_text_to_speech_event.py b/griptape/events/base_text_to_speech_event.py index f4d032d0d..d73b3a663 100644 --- a/griptape/events/base_text_to_speech_event.py +++ b/griptape/events/base_text_to_speech_event.py @@ -6,5 +6,4 @@ @define -class BaseTextToSpeechEvent(BaseMediaGenerationEvent, ABC): - ... +class BaseTextToSpeechEvent(BaseMediaGenerationEvent, ABC): ... diff --git a/griptape/events/finish_actions_subtask_event.py b/griptape/events/finish_actions_subtask_event.py index 6623190ea..068efca0b 100644 --- a/griptape/events/finish_actions_subtask_event.py +++ b/griptape/events/finish_actions_subtask_event.py @@ -4,5 +4,4 @@ @define -class FinishActionsSubtaskEvent(BaseActionsSubtaskEvent): - ... +class FinishActionsSubtaskEvent(BaseActionsSubtaskEvent): ... diff --git a/griptape/events/finish_image_generation_event.py b/griptape/events/finish_image_generation_event.py index b74e074ef..1633ae246 100644 --- a/griptape/events/finish_image_generation_event.py +++ b/griptape/events/finish_image_generation_event.py @@ -6,5 +6,4 @@ @define -class FinishImageGenerationEvent(BaseImageGenerationEvent): - ... +class FinishImageGenerationEvent(BaseImageGenerationEvent): ... diff --git a/griptape/events/finish_structure_run_event.py b/griptape/events/finish_structure_run_event.py index 2a4688fb9..2ff7786d8 100644 --- a/griptape/events/finish_structure_run_event.py +++ b/griptape/events/finish_structure_run_event.py @@ -10,7 +10,7 @@ @define class FinishStructureRunEvent(BaseEvent): structure_id: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - output_task_input: Union[ - BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]] - ] = field(kw_only=True, metadata={"serializable": True}) + output_task_input: Union[BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]]] = ( + field(kw_only=True, metadata={"serializable": True}) + ) output_task_output: Optional[BaseArtifact] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/finish_task_event.py b/griptape/events/finish_task_event.py index a237b4470..65b2ca4f2 100644 --- a/griptape/events/finish_task_event.py +++ b/griptape/events/finish_task_event.py @@ -4,5 +4,4 @@ @define -class FinishTaskEvent(BaseTaskEvent): - ... +class FinishTaskEvent(BaseTaskEvent): ... diff --git a/griptape/events/finish_text_to_speech_event.py b/griptape/events/finish_text_to_speech_event.py index 6b4366c88..95a38f87f 100644 --- a/griptape/events/finish_text_to_speech_event.py +++ b/griptape/events/finish_text_to_speech_event.py @@ -3,9 +3,7 @@ from attrs import define from .base_text_to_speech_event import BaseTextToSpeechEvent -from .base_image_generation_event import BaseImageGenerationEvent @define -class FinishTextToSpeechEvent(BaseTextToSpeechEvent): - ... +class FinishTextToSpeechEvent(BaseTextToSpeechEvent): ... diff --git a/griptape/events/start_actions_subtask_event.py b/griptape/events/start_actions_subtask_event.py index 0fda60dc0..eb3827daf 100644 --- a/griptape/events/start_actions_subtask_event.py +++ b/griptape/events/start_actions_subtask_event.py @@ -4,5 +4,4 @@ @define -class StartActionsSubtaskEvent(BaseActionsSubtaskEvent): - ... +class StartActionsSubtaskEvent(BaseActionsSubtaskEvent): ... diff --git a/griptape/events/start_prompt_event.py b/griptape/events/start_prompt_event.py index 8ca6d4f3d..7ab418adb 100644 --- a/griptape/events/start_prompt_event.py +++ b/griptape/events/start_prompt_event.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING from attrs import define from attrs import field from griptape.events.base_prompt_event import BasePromptEvent diff --git a/griptape/events/start_structure_run_event.py b/griptape/events/start_structure_run_event.py index 311d687a9..e75c5cd68 100644 --- a/griptape/events/start_structure_run_event.py +++ b/griptape/events/start_structure_run_event.py @@ -10,7 +10,7 @@ @define class StartStructureRunEvent(BaseEvent): structure_id: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - input_task_input: Union[ - BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]] - ] = field(kw_only=True, metadata={"serializable": True}) + input_task_input: Union[BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]]] = ( + field(kw_only=True, metadata={"serializable": True}) + ) input_task_output: Optional[BaseArtifact] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/start_task_event.py b/griptape/events/start_task_event.py index 3ee988c1f..bd4661c2f 100644 --- a/griptape/events/start_task_event.py +++ b/griptape/events/start_task_event.py @@ -4,5 +4,4 @@ @define -class StartTaskEvent(BaseTaskEvent): - ... +class StartTaskEvent(BaseTaskEvent): ... diff --git a/griptape/loaders/base_loader.py b/griptape/loaders/base_loader.py index 092319b85..56c3e840c 100644 --- a/griptape/loaders/base_loader.py +++ b/griptape/loaders/base_loader.py @@ -18,8 +18,7 @@ class BaseLoader(ABC): encoding: Optional[str] = field(default=None, kw_only=True) @abstractmethod - def load(self, source: Any, *args, **kwargs) -> BaseArtifact | Sequence[BaseArtifact]: - ... + def load(self, source: Any, *args, **kwargs) -> BaseArtifact | Sequence[BaseArtifact]: ... def load_collection( self, sources: list[Any], *args, **kwargs diff --git a/griptape/loaders/image_loader.py b/griptape/loaders/image_loader.py index 99b779210..71908a3bc 100644 --- a/griptape/loaders/image_loader.py +++ b/griptape/loaders/image_loader.py @@ -1,7 +1,7 @@ from __future__ import annotations from io import BytesIO -from typing import Optional, TYPE_CHECKING, cast +from typing import Optional, cast from attr import define, field @@ -9,9 +9,6 @@ from griptape.artifacts import ImageArtifact from griptape.loaders import BaseLoader -if TYPE_CHECKING: - import PIL.Image as Image - @define class ImageLoader(BaseLoader): diff --git a/griptape/memory/meta/base_meta_entry.py b/griptape/memory/meta/base_meta_entry.py index 994e13f12..a7be50dda 100644 --- a/griptape/memory/meta/base_meta_entry.py +++ b/griptape/memory/meta/base_meta_entry.py @@ -6,5 +6,4 @@ @define -class BaseMetaEntry(SerializableMixin, ABC): - ... +class BaseMetaEntry(SerializableMixin, ABC): ... diff --git a/griptape/memory/structure/base_conversation_memory.py b/griptape/memory/structure/base_conversation_memory.py index 29d306422..85c90d3e1 100644 --- a/griptape/memory/structure/base_conversation_memory.py +++ b/griptape/memory/structure/base_conversation_memory.py @@ -41,9 +41,7 @@ def after_add_run(self) -> None: self.driver.store(self) @abstractmethod - def try_add_run(self, run: Run) -> None: - ... + def try_add_run(self, run: Run) -> None: ... @abstractmethod - def to_prompt_stack(self, last_n: Optional[int] = None) -> PromptStack: - ... + def to_prompt_stack(self, last_n: Optional[int] = None) -> PromptStack: ... diff --git a/griptape/memory/task/storage/base_artifact_storage.py b/griptape/memory/task/storage/base_artifact_storage.py index 29bc0327c..cb3d963be 100644 --- a/griptape/memory/task/storage/base_artifact_storage.py +++ b/griptape/memory/task/storage/base_artifact_storage.py @@ -2,27 +2,22 @@ from typing import Any from abc import ABC, abstractmethod from attr import define -from griptape.artifacts import BaseArtifact, ListArtifact, TextArtifact, InfoArtifact, BlobArtifact +from griptape.artifacts import BaseArtifact, ListArtifact, TextArtifact, InfoArtifact @define class BaseArtifactStorage(ABC): @abstractmethod - def store_artifact(self, namespace: str, artifact: BaseArtifact) -> None: - ... + def store_artifact(self, namespace: str, artifact: BaseArtifact) -> None: ... @abstractmethod - def load_artifacts(self, namespace: str) -> ListArtifact: - ... + def load_artifacts(self, namespace: str) -> ListArtifact: ... @abstractmethod - def can_store(self, artifact: BaseArtifact) -> bool: - ... + def can_store(self, artifact: BaseArtifact) -> bool: ... @abstractmethod - def summarize(self, namespace: str) -> TextArtifact | InfoArtifact: - ... + def summarize(self, namespace: str) -> TextArtifact | InfoArtifact: ... @abstractmethod - def query(self, namespace: str, query: str, metadata: Any = None) -> TextArtifact | InfoArtifact: - ... + def query(self, namespace: str, query: str, metadata: Any = None) -> TextArtifact | InfoArtifact: ... diff --git a/griptape/memory/task/storage/text_artifact_storage.py b/griptape/memory/task/storage/text_artifact_storage.py index 104bb6f5e..e5cd73eb8 100644 --- a/griptape/memory/task/storage/text_artifact_storage.py +++ b/griptape/memory/task/storage/text_artifact_storage.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Any +from typing import TYPE_CHECKING, Any from attr import define, field from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact from griptape.memory.task.storage import BaseArtifactStorage diff --git a/griptape/memory/task/task_memory.py b/griptape/memory/task/task_memory.py index d814a5510..597b151c0 100644 --- a/griptape/memory/task/task_memory.py +++ b/griptape/memory/task/task_memory.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, Type, Any, Callable +from typing import TYPE_CHECKING, Optional, Any, Callable from attr import define, field, Factory from griptape.artifacts import BaseArtifact, InfoArtifact, ListArtifact, ErrorArtifact, TextArtifact from griptape.memory.meta import ActionSubtaskMetaEntry @@ -28,7 +28,8 @@ def validate_artifact_storages(self, _, artifact_storage: dict[type, BaseArtifac seen_types.append(type(storage)) def get_storage_for(self, artifact: BaseArtifact) -> Optional[BaseArtifactStorage]: - find_storage = lambda a: next((v for k, v in self.artifact_storages.items() if isinstance(a, k)), None) + def find_storage(a): + return next((v for k, v in self.artifact_storages.items() if isinstance(a, k)), None) if isinstance(artifact, ListArtifact): if artifact.has_items(): diff --git a/griptape/mixins/actions_subtask_origin_mixin.py b/griptape/mixins/actions_subtask_origin_mixin.py index 6caa63b5d..01711140b 100644 --- a/griptape/mixins/actions_subtask_origin_mixin.py +++ b/griptape/mixins/actions_subtask_origin_mixin.py @@ -13,24 +13,19 @@ @define(slots=False) class ActionsSubtaskOriginMixin: @abstractmethod - def find_tool(self, tool_name: str) -> BaseTool: - ... + def find_tool(self, tool_name: str) -> BaseTool: ... @abstractmethod - def find_memory(self, memory_name: str) -> TaskMemory: - ... + def find_memory(self, memory_name: str) -> TaskMemory: ... @abstractmethod - def find_subtask(self, subtask_id: str) -> ActionsSubtask: - ... + def find_subtask(self, subtask_id: str) -> ActionsSubtask: ... @abstractmethod - def add_subtask(self, subtask: ActionsSubtask) -> ActionsSubtask: - ... + def add_subtask(self, subtask: ActionsSubtask) -> ActionsSubtask: ... @abstractmethod - def actions_schema(self) -> Schema: - ... + def actions_schema(self) -> Schema: ... def _actions_schema_for_tools(self, tools: list[BaseTool]) -> Schema: action_schemas = [] diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index 9cd28ab67..c3912649d 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -1,6 +1,5 @@ from __future__ import annotations -import warnings import logging import uuid from abc import ABC, abstractmethod @@ -274,8 +273,7 @@ def after_run(self) -> None: ) @abstractmethod - def add_task(self, task: BaseTask) -> BaseTask: - ... + def add_task(self, task: BaseTask) -> BaseTask: ... def run(self, *args) -> Structure: self.before_run() @@ -287,5 +285,4 @@ def run(self, *args) -> Structure: return result @abstractmethod - def try_run(self, *args) -> Structure: - ... + def try_run(self, *args) -> Structure: ... diff --git a/griptape/tasks/base_audio_generation_task.py b/griptape/tasks/base_audio_generation_task.py index f9d691768..2e5572aba 100644 --- a/griptape/tasks/base_audio_generation_task.py +++ b/griptape/tasks/base_audio_generation_task.py @@ -1,17 +1,12 @@ from __future__ import annotations -import os from abc import ABC -from attr import field, define +from attr import define -from griptape.artifacts import MediaArtifact -from griptape.loaders import ImageLoader from griptape.mixins import RuleMixin, BlobArtifactFileOutputMixin -from griptape.rules import Ruleset, Rule from griptape.tasks import BaseTask @define -class BaseAudioGenerationTask(BlobArtifactFileOutputMixin, RuleMixin, BaseTask, ABC): - ... +class BaseAudioGenerationTask(BlobArtifactFileOutputMixin, RuleMixin, BaseTask, ABC): ... diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index 7c583763f..037a3e526 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -38,8 +38,7 @@ class State(Enum): @property @abstractmethod - def input(self) -> BaseArtifact | tuple[BaseArtifact, ...] | tuple[BaseArtifact, Sequence[BaseArtifact]]: - ... + def input(self) -> BaseArtifact | tuple[BaseArtifact, ...] | tuple[BaseArtifact, Sequence[BaseArtifact]]: ... @property def parents(self) -> list[BaseTask]: @@ -128,8 +127,7 @@ def reset(self) -> BaseTask: return self @abstractmethod - def run(self) -> BaseArtifact: - ... + def run(self) -> BaseArtifact: ... @property def full_context(self) -> dict[str, Any]: diff --git a/griptape/tasks/image_query_task.py b/griptape/tasks/image_query_task.py index 5a8c49f9c..29077a055 100644 --- a/griptape/tasks/image_query_task.py +++ b/griptape/tasks/image_query_task.py @@ -23,9 +23,11 @@ class ImageQueryTask(BaseTask): """ _image_query_engine: ImageQueryEngine = field(default=None, kw_only=True, alias="image_query_engine") - _input: tuple[str, list[ImageArtifact]] | tuple[TextArtifact, list[ImageArtifact]] | Callable[ - [BaseTask], tuple[TextArtifact, list[ImageArtifact]] - ] = field(default=None, alias="input") + _input: ( + tuple[str, list[ImageArtifact]] + | tuple[TextArtifact, list[ImageArtifact]] + | Callable[[BaseTask], tuple[TextArtifact, list[ImageArtifact]]] + ) = field(default=None, alias="input") @property def input(self) -> tuple[TextArtifact, list[ImageArtifact]]: diff --git a/griptape/tasks/outpainting_image_generation_task.py b/griptape/tasks/outpainting_image_generation_task.py index 203a6c2ba..7b0ffd06b 100644 --- a/griptape/tasks/outpainting_image_generation_task.py +++ b/griptape/tasks/outpainting_image_generation_task.py @@ -29,9 +29,10 @@ class OutpaintingImageGenerationTask(BaseImageGenerationTask): _image_generation_engine: OutpaintingImageGenerationEngine = field( default=None, kw_only=True, alias="image_generation_engine" ) - _input: tuple[str | TextArtifact, ImageArtifact, ImageArtifact] | Callable[ - [BaseTask], tuple[TextArtifact, ImageArtifact, ImageArtifact] - ] = field(default=None) + _input: ( + tuple[str | TextArtifact, ImageArtifact, ImageArtifact] + | Callable[[BaseTask], tuple[TextArtifact, ImageArtifact, ImageArtifact]] + ) = field(default=None) @property def input(self) -> tuple[TextArtifact, ImageArtifact, ImageArtifact]: diff --git a/griptape/tokenizers/base_tokenizer.py b/griptape/tokenizers/base_tokenizer.py index 570e13e3a..28f30e66c 100644 --- a/griptape/tokenizers/base_tokenizer.py +++ b/griptape/tokenizers/base_tokenizer.py @@ -38,8 +38,7 @@ def count_output_tokens_left(self, text: str | list) -> int: return 0 @abstractmethod - def count_tokens(self, text: str | list[dict]) -> int: - ... + def count_tokens(self, text: str | list[dict]) -> int: ... def _default_max_input_tokens(self) -> int: tokens = next((v for k, v in self.MODEL_PREFIXES_TO_MAX_INPUT_TOKENS.items() if self.model.startswith(k)), None) diff --git a/griptape/tokenizers/cohere_tokenizer.py b/griptape/tokenizers/cohere_tokenizer.py index 1e57b7b6b..4856b7ff7 100644 --- a/griptape/tokenizers/cohere_tokenizer.py +++ b/griptape/tokenizers/cohere_tokenizer.py @@ -16,6 +16,6 @@ class CohereTokenizer(BaseTokenizer): def count_tokens(self, text: str | list) -> int: if isinstance(text, str): - return len(self.client.tokenize(text=text).tokens) + return len(self.client.tokenize(text=text, model=self.model).tokens) else: raise ValueError("Text must be a string.") diff --git a/griptape/tokenizers/huggingface_tokenizer.py b/griptape/tokenizers/huggingface_tokenizer.py index 10c1bbada..4c548d8ab 100644 --- a/griptape/tokenizers/huggingface_tokenizer.py +++ b/griptape/tokenizers/huggingface_tokenizer.py @@ -14,7 +14,7 @@ class HuggingFaceTokenizer(BaseTokenizer): max_input_tokens: int = field( default=Factory(lambda self: self.tokenizer.model_max_length, takes_self=True), kw_only=True ) - max_output_tokens: int = field(kw_only=True) + max_output_tokens: int = field(kw_only=True) # pyright: ignore[reportGeneralTypeIssues] def count_tokens(self, text: str | list) -> int: if isinstance(text, str): diff --git a/griptape/tools/aws_iam_client/tool.py b/griptape/tools/aws_iam_client/tool.py index 78193ec22..0c94be90e 100644 --- a/griptape/tools/aws_iam_client/tool.py +++ b/griptape/tools/aws_iam_client/tool.py @@ -59,7 +59,9 @@ def list_user_policies(self, params: dict) -> ListArtifact | ErrorArtifact: policy_names = policies["PolicyNames"] attached_policies = self.iam_client.list_attached_user_policies(UserName=params["values"]["user_name"]) - attached_policy_names = [p["PolicyName"] for p in attached_policies["AttachedPolicies"]] + attached_policy_names = [ + p["PolicyName"] for p in attached_policies["AttachedPolicies"] if "PolicyName" in p + ] return ListArtifact([TextArtifact(str(p)) for p in policy_names + attached_policy_names]) except Exception as e: diff --git a/griptape/tools/aws_s3_client/tool.py b/griptape/tools/aws_s3_client/tool.py index 9db5e2728..fc63f3988 100644 --- a/griptape/tools/aws_s3_client/tool.py +++ b/griptape/tools/aws_s3_client/tool.py @@ -89,6 +89,9 @@ def list_objects(self, params: dict) -> ListArtifact | ErrorArtifact: try: objects = self.s3_client.list_objects_v2(Bucket=params["values"]["bucket_name"]) + if "Contents" not in objects: + return ErrorArtifact("no objects found in the bucket") + return ListArtifact([TextArtifact(str(o)) for o in objects["Contents"]]) except Exception as e: return ErrorArtifact(f"error listing objects in bucket: {e}") diff --git a/griptape/tools/google_drive/tool.py b/griptape/tools/google_drive/tool.py index 938896e55..761b38754 100644 --- a/griptape/tools/google_drive/tool.py +++ b/griptape/tools/google_drive/tool.py @@ -45,7 +45,7 @@ class GoogleDriveClient(BaseGoogleClient): ) def list_files(self, params: dict) -> ListArtifact | ErrorArtifact: values = params["values"] - from google.auth.exceptions import MalformedError # pyright: ignore + from google.auth.exceptions import MalformedError # pyright: ignore[reportMissingImports] folder_path = values.get("folder_path", self.DEFAULT_FOLDER_PATH) @@ -168,8 +168,8 @@ def save_content_to_drive(self, params: dict) -> ErrorArtifact | InfoArtifact: } ) def download_files(self, params: dict) -> ListArtifact | ErrorArtifact: - from google.auth.exceptions import MalformedError # pyright: ignore - from googleapiclient.errors import HttpError # pyright: ignore + from google.auth.exceptions import MalformedError + from googleapiclient.errors import HttpError # pyright: ignore[reportMissingImports] values = params["values"] downloaded_files = [] @@ -212,7 +212,10 @@ def download_files(self, params: dict) -> ListArtifact | ErrorArtifact: "search_mode", description="File search mode. Use 'name' to search in file name or " "'content' to search in file content", - ): Or("name", "content"), + ): Or( + "name", # pyright: ignore [reportArgumentType] + "content", # pyright: ignore [reportArgumentType] + ), Literal( "search_query", description="Query to search for. If search_mode is 'name', it's the file name. If 'content', " @@ -229,8 +232,8 @@ def download_files(self, params: dict) -> ListArtifact | ErrorArtifact: } ) def search_files(self, params: dict) -> ListArtifact | ErrorArtifact: - from google.auth.exceptions import MalformedError # pyright: ignore - from googleapiclient.errors import HttpError # pyright: ignore + from google.auth.exceptions import MalformedError + from googleapiclient.errors import HttpError # pyright: ignore[reportMissingImports] values = params["values"] @@ -285,14 +288,18 @@ def search_files(self, params: dict) -> ListArtifact | ErrorArtifact: "role", default="reader", description="The role to give to the user, e.g., 'reader', 'writer', or 'commenter'", - ): Or("reader", "writer", "commenter"), + ): Or( + "reader", # pyright: ignore [reportArgumentType] + "writer", # pyright: ignore [reportArgumentType] + "commenter", # pyright: ignore [reportArgumentType] + ), } ), } ) def share_file(self, params: dict) -> InfoArtifact | ErrorArtifact: - from google.auth.exceptions import MalformedError # pyright: ignore - from googleapiclient.errors import HttpError # pyright: ignore + from google.auth.exceptions import MalformedError + from googleapiclient.errors import HttpError # pyright: ignore [reportMissingImports] values = params["values"] file_path = values.get("file_path") @@ -328,7 +335,7 @@ def share_file(self, params: dict) -> InfoArtifact | ErrorArtifact: def _save_to_drive( self, filename: str, value: Any, parent_folder_id: Optional[str] = None ) -> InfoArtifact | ErrorArtifact: - from googleapiclient.http import MediaIoBaseUpload # pyright: ignore + from googleapiclient.http import MediaIoBaseUpload # pyright: ignore[reportMissingImports] service = self._build_client(self.DRIVE_FILE_SCOPES, self.SERVICE_NAME, self.SERVICE_VERSION, self.owner_email) diff --git a/griptape/tools/task_memory_client/tool.py b/griptape/tools/task_memory_client/tool.py index 0da9fa200..b7234aca2 100644 --- a/griptape/tools/task_memory_client/tool.py +++ b/griptape/tools/task_memory_client/tool.py @@ -8,7 +8,7 @@ @define class TaskMemoryClient(BaseTool): - off_prompt: bool = field(kw_only=True) + off_prompt: bool = field(kw_only=True) # pyright: ignore[reportGeneralTypeIssues] @activity( config={ diff --git a/griptape/utils/conversation.py b/griptape/utils/conversation.py index cae078526..38b3e30a9 100644 --- a/griptape/utils/conversation.py +++ b/griptape/utils/conversation.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING from attr import define, field if TYPE_CHECKING: diff --git a/poetry.lock b/poetry.lock index d40bc7c93..b46742b6c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,88 +1,88 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" -version = "3.9.1" +version = "3.9.5" description = "Async http client/server framework (asyncio)" optional = true python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, - {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, - {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, - {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, - {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, - {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, - {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, - {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, - {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, - {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, - {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, - {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, - {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, - {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, - {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, - {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, - {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, - {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, - {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, - {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, - {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, - {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, - {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, - {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, - {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, - {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, - {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, + {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, + {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, + {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, + {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, + {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, + {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, + {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, + {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, + {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, + {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, + {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, + {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, + {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, + {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, + {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, + {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, + {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, + {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, + {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, + {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, + {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, + {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, + {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, + {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, + {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, + {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, ] [package.dependencies] @@ -147,13 +147,13 @@ vertex = ["google-auth (>=2,<3)"] [[package]] name = "anyio" -version = "4.2.0" +version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, - {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, ] [package.dependencies] @@ -228,29 +228,33 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] -name = "backoff" -version = "2.2.1" -description = "Function decoration for backoff and retry" -optional = true -python-versions = ">=3.7,<4.0" +name = "backports-tarfile" +version = "1.1.1" +description = "Backport of CPython tarfile module" +optional = false +python-versions = ">=3.8" files = [ - {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, - {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, + {file = "backports.tarfile-1.1.1-py3-none-any.whl", hash = "sha256:73e0179647803d3726d82e76089d01d8549ceca9bace469953fcb4d97cf2d417"}, + {file = "backports_tarfile-1.1.1.tar.gz", hash = "sha256:9c2ef9696cb73374f7164e17fc761389393ca76777036f5aad42e8b93fcd8009"}, ] +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.test", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)"] + [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -272,65 +276,19 @@ charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] -[[package]] -name = "black" -version = "23.12.1" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, - {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, - {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, - {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, - {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, - {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, - {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, - {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, - {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, - {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, - {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, - {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, - {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, - {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, - {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, - {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, - {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, - {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, - {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, - {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, - {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, - {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "boto3" -version = "1.34.24" +version = "1.34.106" description = "The AWS SDK for Python" optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "boto3-1.34.24-py3-none-any.whl", hash = "sha256:795803812b78260cfe019ef65021ec9e8049bfb6a027564e1a3b59c1a4a11106"}, - {file = "boto3-1.34.24.tar.gz", hash = "sha256:791523f41b5e731c8ac0d2f65b978348fb6c92f02e0dbc9a7bc0b3760195cc60"}, + {file = "boto3-1.34.106-py3-none-any.whl", hash = "sha256:d3be4e1dd5d546a001cd4da805816934cbde9d395316546e9411fec341ade5cf"}, + {file = "boto3-1.34.106.tar.gz", hash = "sha256:6165b8cf1c7e625628ab28b32f9027064c8f5e5fca1c38d7fc228cd22069a19f"}, ] [package.dependencies] -botocore = ">=1.34.24,<1.35.0" +botocore = ">=1.34.106,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -339,13 +297,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "boto3-stubs" -version = "1.34.24" -description = "Type annotations for boto3 1.34.24 generated with mypy-boto3-builder 7.23.1" +version = "1.34.105" +description = "Type annotations for boto3 1.34.105 generated with mypy-boto3-builder 7.24.0" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-stubs-1.34.24.tar.gz", hash = "sha256:9d7de485b09e474c1a46f11d46b493c57b888170c568a37966421a3b9809bd8e"}, - {file = "boto3_stubs-1.34.24-py3-none-any.whl", hash = "sha256:ec04088474b3977878274c88289a3f3892e4bd3427eb26c5096b30917bc9ee5f"}, + {file = "boto3_stubs-1.34.105-py3-none-any.whl", hash = "sha256:ba03524668d5edb5e177d11df7937e769bd52e7d7adbee20762353f72b775eb5"}, + {file = "boto3_stubs-1.34.105.tar.gz", hash = "sha256:6aec0131447885a24db82279609a08130c5d0b0f738dfc70a59ff3f453c04a68"}, ] [package.dependencies] @@ -364,7 +322,7 @@ account = ["mypy-boto3-account (>=1.34.0,<1.35.0)"] acm = ["mypy-boto3-acm (>=1.34.0,<1.35.0)"] acm-pca = ["mypy-boto3-acm-pca (>=1.34.0,<1.35.0)"] alexaforbusiness = ["mypy-boto3-alexaforbusiness (>=1.34.0,<1.35.0)"] -all = ["mypy-boto3-accessanalyzer (>=1.34.0,<1.35.0)", "mypy-boto3-account (>=1.34.0,<1.35.0)", "mypy-boto3-acm (>=1.34.0,<1.35.0)", "mypy-boto3-acm-pca (>=1.34.0,<1.35.0)", "mypy-boto3-alexaforbusiness (>=1.34.0,<1.35.0)", "mypy-boto3-amp (>=1.34.0,<1.35.0)", "mypy-boto3-amplify (>=1.34.0,<1.35.0)", "mypy-boto3-amplifybackend (>=1.34.0,<1.35.0)", "mypy-boto3-amplifyuibuilder (>=1.34.0,<1.35.0)", "mypy-boto3-apigateway (>=1.34.0,<1.35.0)", "mypy-boto3-apigatewaymanagementapi (>=1.34.0,<1.35.0)", "mypy-boto3-apigatewayv2 (>=1.34.0,<1.35.0)", "mypy-boto3-appconfig (>=1.34.0,<1.35.0)", "mypy-boto3-appconfigdata (>=1.34.0,<1.35.0)", "mypy-boto3-appfabric (>=1.34.0,<1.35.0)", "mypy-boto3-appflow (>=1.34.0,<1.35.0)", "mypy-boto3-appintegrations (>=1.34.0,<1.35.0)", "mypy-boto3-application-autoscaling (>=1.34.0,<1.35.0)", "mypy-boto3-application-insights (>=1.34.0,<1.35.0)", "mypy-boto3-applicationcostprofiler (>=1.34.0,<1.35.0)", "mypy-boto3-appmesh (>=1.34.0,<1.35.0)", "mypy-boto3-apprunner (>=1.34.0,<1.35.0)", "mypy-boto3-appstream (>=1.34.0,<1.35.0)", "mypy-boto3-appsync (>=1.34.0,<1.35.0)", "mypy-boto3-arc-zonal-shift (>=1.34.0,<1.35.0)", "mypy-boto3-athena (>=1.34.0,<1.35.0)", "mypy-boto3-auditmanager (>=1.34.0,<1.35.0)", "mypy-boto3-autoscaling (>=1.34.0,<1.35.0)", "mypy-boto3-autoscaling-plans (>=1.34.0,<1.35.0)", "mypy-boto3-b2bi (>=1.34.0,<1.35.0)", "mypy-boto3-backup (>=1.34.0,<1.35.0)", "mypy-boto3-backup-gateway (>=1.34.0,<1.35.0)", "mypy-boto3-backupstorage (>=1.34.0,<1.35.0)", "mypy-boto3-batch (>=1.34.0,<1.35.0)", "mypy-boto3-bcm-data-exports (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock-agent (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock-agent-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-billingconductor (>=1.34.0,<1.35.0)", "mypy-boto3-braket (>=1.34.0,<1.35.0)", "mypy-boto3-budgets (>=1.34.0,<1.35.0)", "mypy-boto3-ce (>=1.34.0,<1.35.0)", "mypy-boto3-chime (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-identity (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-meetings (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-messaging (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-voice (>=1.34.0,<1.35.0)", "mypy-boto3-cleanrooms (>=1.34.0,<1.35.0)", "mypy-boto3-cleanroomsml (>=1.34.0,<1.35.0)", "mypy-boto3-cloud9 (>=1.34.0,<1.35.0)", "mypy-boto3-cloudcontrol (>=1.34.0,<1.35.0)", "mypy-boto3-clouddirectory (>=1.34.0,<1.35.0)", "mypy-boto3-cloudformation (>=1.34.0,<1.35.0)", "mypy-boto3-cloudfront (>=1.34.0,<1.35.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.34.0,<1.35.0)", "mypy-boto3-cloudhsm (>=1.34.0,<1.35.0)", "mypy-boto3-cloudhsmv2 (>=1.34.0,<1.35.0)", "mypy-boto3-cloudsearch (>=1.34.0,<1.35.0)", "mypy-boto3-cloudsearchdomain (>=1.34.0,<1.35.0)", "mypy-boto3-cloudtrail (>=1.34.0,<1.35.0)", "mypy-boto3-cloudtrail-data (>=1.34.0,<1.35.0)", "mypy-boto3-cloudwatch (>=1.34.0,<1.35.0)", "mypy-boto3-codeartifact (>=1.34.0,<1.35.0)", "mypy-boto3-codebuild (>=1.34.0,<1.35.0)", "mypy-boto3-codecatalyst (>=1.34.0,<1.35.0)", "mypy-boto3-codecommit (>=1.34.0,<1.35.0)", "mypy-boto3-codedeploy (>=1.34.0,<1.35.0)", "mypy-boto3-codeguru-reviewer (>=1.34.0,<1.35.0)", "mypy-boto3-codeguru-security (>=1.34.0,<1.35.0)", "mypy-boto3-codeguruprofiler (>=1.34.0,<1.35.0)", "mypy-boto3-codepipeline (>=1.34.0,<1.35.0)", "mypy-boto3-codestar (>=1.34.0,<1.35.0)", "mypy-boto3-codestar-connections (>=1.34.0,<1.35.0)", "mypy-boto3-codestar-notifications (>=1.34.0,<1.35.0)", "mypy-boto3-cognito-identity (>=1.34.0,<1.35.0)", "mypy-boto3-cognito-idp (>=1.34.0,<1.35.0)", "mypy-boto3-cognito-sync (>=1.34.0,<1.35.0)", "mypy-boto3-comprehend (>=1.34.0,<1.35.0)", "mypy-boto3-comprehendmedical (>=1.34.0,<1.35.0)", "mypy-boto3-compute-optimizer (>=1.34.0,<1.35.0)", "mypy-boto3-config (>=1.34.0,<1.35.0)", "mypy-boto3-connect (>=1.34.0,<1.35.0)", "mypy-boto3-connect-contact-lens (>=1.34.0,<1.35.0)", "mypy-boto3-connectcampaigns (>=1.34.0,<1.35.0)", "mypy-boto3-connectcases (>=1.34.0,<1.35.0)", "mypy-boto3-connectparticipant (>=1.34.0,<1.35.0)", "mypy-boto3-controltower (>=1.34.0,<1.35.0)", "mypy-boto3-cost-optimization-hub (>=1.34.0,<1.35.0)", "mypy-boto3-cur (>=1.34.0,<1.35.0)", "mypy-boto3-customer-profiles (>=1.34.0,<1.35.0)", "mypy-boto3-databrew (>=1.34.0,<1.35.0)", "mypy-boto3-dataexchange (>=1.34.0,<1.35.0)", "mypy-boto3-datapipeline (>=1.34.0,<1.35.0)", "mypy-boto3-datasync (>=1.34.0,<1.35.0)", "mypy-boto3-datazone (>=1.34.0,<1.35.0)", "mypy-boto3-dax (>=1.34.0,<1.35.0)", "mypy-boto3-detective (>=1.34.0,<1.35.0)", "mypy-boto3-devicefarm (>=1.34.0,<1.35.0)", "mypy-boto3-devops-guru (>=1.34.0,<1.35.0)", "mypy-boto3-directconnect (>=1.34.0,<1.35.0)", "mypy-boto3-discovery (>=1.34.0,<1.35.0)", "mypy-boto3-dlm (>=1.34.0,<1.35.0)", "mypy-boto3-dms (>=1.34.0,<1.35.0)", "mypy-boto3-docdb (>=1.34.0,<1.35.0)", "mypy-boto3-docdb-elastic (>=1.34.0,<1.35.0)", "mypy-boto3-drs (>=1.34.0,<1.35.0)", "mypy-boto3-ds (>=1.34.0,<1.35.0)", "mypy-boto3-dynamodb (>=1.34.0,<1.35.0)", "mypy-boto3-dynamodbstreams (>=1.34.0,<1.35.0)", "mypy-boto3-ebs (>=1.34.0,<1.35.0)", "mypy-boto3-ec2 (>=1.34.0,<1.35.0)", "mypy-boto3-ec2-instance-connect (>=1.34.0,<1.35.0)", "mypy-boto3-ecr (>=1.34.0,<1.35.0)", "mypy-boto3-ecr-public (>=1.34.0,<1.35.0)", "mypy-boto3-ecs (>=1.34.0,<1.35.0)", "mypy-boto3-efs (>=1.34.0,<1.35.0)", "mypy-boto3-eks (>=1.34.0,<1.35.0)", "mypy-boto3-eks-auth (>=1.34.0,<1.35.0)", "mypy-boto3-elastic-inference (>=1.34.0,<1.35.0)", "mypy-boto3-elasticache (>=1.34.0,<1.35.0)", "mypy-boto3-elasticbeanstalk (>=1.34.0,<1.35.0)", "mypy-boto3-elastictranscoder (>=1.34.0,<1.35.0)", "mypy-boto3-elb (>=1.34.0,<1.35.0)", "mypy-boto3-elbv2 (>=1.34.0,<1.35.0)", "mypy-boto3-emr (>=1.34.0,<1.35.0)", "mypy-boto3-emr-containers (>=1.34.0,<1.35.0)", "mypy-boto3-emr-serverless (>=1.34.0,<1.35.0)", "mypy-boto3-entityresolution (>=1.34.0,<1.35.0)", "mypy-boto3-es (>=1.34.0,<1.35.0)", "mypy-boto3-events (>=1.34.0,<1.35.0)", "mypy-boto3-evidently (>=1.34.0,<1.35.0)", "mypy-boto3-finspace (>=1.34.0,<1.35.0)", "mypy-boto3-finspace-data (>=1.34.0,<1.35.0)", "mypy-boto3-firehose (>=1.34.0,<1.35.0)", "mypy-boto3-fis (>=1.34.0,<1.35.0)", "mypy-boto3-fms (>=1.34.0,<1.35.0)", "mypy-boto3-forecast (>=1.34.0,<1.35.0)", "mypy-boto3-forecastquery (>=1.34.0,<1.35.0)", "mypy-boto3-frauddetector (>=1.34.0,<1.35.0)", "mypy-boto3-freetier (>=1.34.0,<1.35.0)", "mypy-boto3-fsx (>=1.34.0,<1.35.0)", "mypy-boto3-gamelift (>=1.34.0,<1.35.0)", "mypy-boto3-glacier (>=1.34.0,<1.35.0)", "mypy-boto3-globalaccelerator (>=1.34.0,<1.35.0)", "mypy-boto3-glue (>=1.34.0,<1.35.0)", "mypy-boto3-grafana (>=1.34.0,<1.35.0)", "mypy-boto3-greengrass (>=1.34.0,<1.35.0)", "mypy-boto3-greengrassv2 (>=1.34.0,<1.35.0)", "mypy-boto3-groundstation (>=1.34.0,<1.35.0)", "mypy-boto3-guardduty (>=1.34.0,<1.35.0)", "mypy-boto3-health (>=1.34.0,<1.35.0)", "mypy-boto3-healthlake (>=1.34.0,<1.35.0)", "mypy-boto3-honeycode (>=1.34.0,<1.35.0)", "mypy-boto3-iam (>=1.34.0,<1.35.0)", "mypy-boto3-identitystore (>=1.34.0,<1.35.0)", "mypy-boto3-imagebuilder (>=1.34.0,<1.35.0)", "mypy-boto3-importexport (>=1.34.0,<1.35.0)", "mypy-boto3-inspector (>=1.34.0,<1.35.0)", "mypy-boto3-inspector-scan (>=1.34.0,<1.35.0)", "mypy-boto3-inspector2 (>=1.34.0,<1.35.0)", "mypy-boto3-internetmonitor (>=1.34.0,<1.35.0)", "mypy-boto3-iot (>=1.34.0,<1.35.0)", "mypy-boto3-iot-data (>=1.34.0,<1.35.0)", "mypy-boto3-iot-jobs-data (>=1.34.0,<1.35.0)", "mypy-boto3-iot-roborunner (>=1.34.0,<1.35.0)", "mypy-boto3-iot1click-devices (>=1.34.0,<1.35.0)", "mypy-boto3-iot1click-projects (>=1.34.0,<1.35.0)", "mypy-boto3-iotanalytics (>=1.34.0,<1.35.0)", "mypy-boto3-iotdeviceadvisor (>=1.34.0,<1.35.0)", "mypy-boto3-iotevents (>=1.34.0,<1.35.0)", "mypy-boto3-iotevents-data (>=1.34.0,<1.35.0)", "mypy-boto3-iotfleethub (>=1.34.0,<1.35.0)", "mypy-boto3-iotfleetwise (>=1.34.0,<1.35.0)", "mypy-boto3-iotsecuretunneling (>=1.34.0,<1.35.0)", "mypy-boto3-iotsitewise (>=1.34.0,<1.35.0)", "mypy-boto3-iotthingsgraph (>=1.34.0,<1.35.0)", "mypy-boto3-iottwinmaker (>=1.34.0,<1.35.0)", "mypy-boto3-iotwireless (>=1.34.0,<1.35.0)", "mypy-boto3-ivs (>=1.34.0,<1.35.0)", "mypy-boto3-ivs-realtime (>=1.34.0,<1.35.0)", "mypy-boto3-ivschat (>=1.34.0,<1.35.0)", "mypy-boto3-kafka (>=1.34.0,<1.35.0)", "mypy-boto3-kafkaconnect (>=1.34.0,<1.35.0)", "mypy-boto3-kendra (>=1.34.0,<1.35.0)", "mypy-boto3-kendra-ranking (>=1.34.0,<1.35.0)", "mypy-boto3-keyspaces (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-archived-media (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-media (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-signaling (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.34.0,<1.35.0)", "mypy-boto3-kinesisanalytics (>=1.34.0,<1.35.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.34.0,<1.35.0)", "mypy-boto3-kinesisvideo (>=1.34.0,<1.35.0)", "mypy-boto3-kms (>=1.34.0,<1.35.0)", "mypy-boto3-lakeformation (>=1.34.0,<1.35.0)", "mypy-boto3-lambda (>=1.34.0,<1.35.0)", "mypy-boto3-launch-wizard (>=1.34.0,<1.35.0)", "mypy-boto3-lex-models (>=1.34.0,<1.35.0)", "mypy-boto3-lex-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-lexv2-models (>=1.34.0,<1.35.0)", "mypy-boto3-lexv2-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-license-manager (>=1.34.0,<1.35.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.34.0,<1.35.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.34.0,<1.35.0)", "mypy-boto3-lightsail (>=1.34.0,<1.35.0)", "mypy-boto3-location (>=1.34.0,<1.35.0)", "mypy-boto3-logs (>=1.34.0,<1.35.0)", "mypy-boto3-lookoutequipment (>=1.34.0,<1.35.0)", "mypy-boto3-lookoutmetrics (>=1.34.0,<1.35.0)", "mypy-boto3-lookoutvision (>=1.34.0,<1.35.0)", "mypy-boto3-m2 (>=1.34.0,<1.35.0)", "mypy-boto3-machinelearning (>=1.34.0,<1.35.0)", "mypy-boto3-macie2 (>=1.34.0,<1.35.0)", "mypy-boto3-managedblockchain (>=1.34.0,<1.35.0)", "mypy-boto3-managedblockchain-query (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-agreement (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-catalog (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-deployment (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-entitlement (>=1.34.0,<1.35.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.34.0,<1.35.0)", "mypy-boto3-mediaconnect (>=1.34.0,<1.35.0)", "mypy-boto3-mediaconvert (>=1.34.0,<1.35.0)", "mypy-boto3-medialive (>=1.34.0,<1.35.0)", "mypy-boto3-mediapackage (>=1.34.0,<1.35.0)", "mypy-boto3-mediapackage-vod (>=1.34.0,<1.35.0)", "mypy-boto3-mediapackagev2 (>=1.34.0,<1.35.0)", "mypy-boto3-mediastore (>=1.34.0,<1.35.0)", "mypy-boto3-mediastore-data (>=1.34.0,<1.35.0)", "mypy-boto3-mediatailor (>=1.34.0,<1.35.0)", "mypy-boto3-medical-imaging (>=1.34.0,<1.35.0)", "mypy-boto3-memorydb (>=1.34.0,<1.35.0)", "mypy-boto3-meteringmarketplace (>=1.34.0,<1.35.0)", "mypy-boto3-mgh (>=1.34.0,<1.35.0)", "mypy-boto3-mgn (>=1.34.0,<1.35.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.34.0,<1.35.0)", "mypy-boto3-migrationhub-config (>=1.34.0,<1.35.0)", "mypy-boto3-migrationhuborchestrator (>=1.34.0,<1.35.0)", "mypy-boto3-migrationhubstrategy (>=1.34.0,<1.35.0)", "mypy-boto3-mobile (>=1.34.0,<1.35.0)", "mypy-boto3-mq (>=1.34.0,<1.35.0)", "mypy-boto3-mturk (>=1.34.0,<1.35.0)", "mypy-boto3-mwaa (>=1.34.0,<1.35.0)", "mypy-boto3-neptune (>=1.34.0,<1.35.0)", "mypy-boto3-neptune-graph (>=1.34.0,<1.35.0)", "mypy-boto3-neptunedata (>=1.34.0,<1.35.0)", "mypy-boto3-network-firewall (>=1.34.0,<1.35.0)", "mypy-boto3-networkmanager (>=1.34.0,<1.35.0)", "mypy-boto3-networkmonitor (>=1.34.0,<1.35.0)", "mypy-boto3-nimble (>=1.34.0,<1.35.0)", "mypy-boto3-oam (>=1.34.0,<1.35.0)", "mypy-boto3-omics (>=1.34.0,<1.35.0)", "mypy-boto3-opensearch (>=1.34.0,<1.35.0)", "mypy-boto3-opensearchserverless (>=1.34.0,<1.35.0)", "mypy-boto3-opsworks (>=1.34.0,<1.35.0)", "mypy-boto3-opsworkscm (>=1.34.0,<1.35.0)", "mypy-boto3-organizations (>=1.34.0,<1.35.0)", "mypy-boto3-osis (>=1.34.0,<1.35.0)", "mypy-boto3-outposts (>=1.34.0,<1.35.0)", "mypy-boto3-panorama (>=1.34.0,<1.35.0)", "mypy-boto3-payment-cryptography (>=1.34.0,<1.35.0)", "mypy-boto3-payment-cryptography-data (>=1.34.0,<1.35.0)", "mypy-boto3-pca-connector-ad (>=1.34.0,<1.35.0)", "mypy-boto3-personalize (>=1.34.0,<1.35.0)", "mypy-boto3-personalize-events (>=1.34.0,<1.35.0)", "mypy-boto3-personalize-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-pi (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint-email (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint-sms-voice (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.34.0,<1.35.0)", "mypy-boto3-pipes (>=1.34.0,<1.35.0)", "mypy-boto3-polly (>=1.34.0,<1.35.0)", "mypy-boto3-pricing (>=1.34.0,<1.35.0)", "mypy-boto3-privatenetworks (>=1.34.0,<1.35.0)", "mypy-boto3-proton (>=1.34.0,<1.35.0)", "mypy-boto3-qbusiness (>=1.34.0,<1.35.0)", "mypy-boto3-qconnect (>=1.34.0,<1.35.0)", "mypy-boto3-qldb (>=1.34.0,<1.35.0)", "mypy-boto3-qldb-session (>=1.34.0,<1.35.0)", "mypy-boto3-quicksight (>=1.34.0,<1.35.0)", "mypy-boto3-ram (>=1.34.0,<1.35.0)", "mypy-boto3-rbin (>=1.34.0,<1.35.0)", "mypy-boto3-rds (>=1.34.0,<1.35.0)", "mypy-boto3-rds-data (>=1.34.0,<1.35.0)", "mypy-boto3-redshift (>=1.34.0,<1.35.0)", "mypy-boto3-redshift-data (>=1.34.0,<1.35.0)", "mypy-boto3-redshift-serverless (>=1.34.0,<1.35.0)", "mypy-boto3-rekognition (>=1.34.0,<1.35.0)", "mypy-boto3-repostspace (>=1.34.0,<1.35.0)", "mypy-boto3-resiliencehub (>=1.34.0,<1.35.0)", "mypy-boto3-resource-explorer-2 (>=1.34.0,<1.35.0)", "mypy-boto3-resource-groups (>=1.34.0,<1.35.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.34.0,<1.35.0)", "mypy-boto3-robomaker (>=1.34.0,<1.35.0)", "mypy-boto3-rolesanywhere (>=1.34.0,<1.35.0)", "mypy-boto3-route53 (>=1.34.0,<1.35.0)", "mypy-boto3-route53-recovery-cluster (>=1.34.0,<1.35.0)", "mypy-boto3-route53-recovery-control-config (>=1.34.0,<1.35.0)", "mypy-boto3-route53-recovery-readiness (>=1.34.0,<1.35.0)", "mypy-boto3-route53domains (>=1.34.0,<1.35.0)", "mypy-boto3-route53resolver (>=1.34.0,<1.35.0)", "mypy-boto3-rum (>=1.34.0,<1.35.0)", "mypy-boto3-s3 (>=1.34.0,<1.35.0)", "mypy-boto3-s3control (>=1.34.0,<1.35.0)", "mypy-boto3-s3outposts (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-edge (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-geospatial (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-metrics (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-savingsplans (>=1.34.0,<1.35.0)", "mypy-boto3-scheduler (>=1.34.0,<1.35.0)", "mypy-boto3-schemas (>=1.34.0,<1.35.0)", "mypy-boto3-sdb (>=1.34.0,<1.35.0)", "mypy-boto3-secretsmanager (>=1.34.0,<1.35.0)", "mypy-boto3-securityhub (>=1.34.0,<1.35.0)", "mypy-boto3-securitylake (>=1.34.0,<1.35.0)", "mypy-boto3-serverlessrepo (>=1.34.0,<1.35.0)", "mypy-boto3-service-quotas (>=1.34.0,<1.35.0)", "mypy-boto3-servicecatalog (>=1.34.0,<1.35.0)", "mypy-boto3-servicecatalog-appregistry (>=1.34.0,<1.35.0)", "mypy-boto3-servicediscovery (>=1.34.0,<1.35.0)", "mypy-boto3-ses (>=1.34.0,<1.35.0)", "mypy-boto3-sesv2 (>=1.34.0,<1.35.0)", "mypy-boto3-shield (>=1.34.0,<1.35.0)", "mypy-boto3-signer (>=1.34.0,<1.35.0)", "mypy-boto3-simspaceweaver (>=1.34.0,<1.35.0)", "mypy-boto3-sms (>=1.34.0,<1.35.0)", "mypy-boto3-sms-voice (>=1.34.0,<1.35.0)", "mypy-boto3-snow-device-management (>=1.34.0,<1.35.0)", "mypy-boto3-snowball (>=1.34.0,<1.35.0)", "mypy-boto3-sns (>=1.34.0,<1.35.0)", "mypy-boto3-sqs (>=1.34.0,<1.35.0)", "mypy-boto3-ssm (>=1.34.0,<1.35.0)", "mypy-boto3-ssm-contacts (>=1.34.0,<1.35.0)", "mypy-boto3-ssm-incidents (>=1.34.0,<1.35.0)", "mypy-boto3-ssm-sap (>=1.34.0,<1.35.0)", "mypy-boto3-sso (>=1.34.0,<1.35.0)", "mypy-boto3-sso-admin (>=1.34.0,<1.35.0)", "mypy-boto3-sso-oidc (>=1.34.0,<1.35.0)", "mypy-boto3-stepfunctions (>=1.34.0,<1.35.0)", "mypy-boto3-storagegateway (>=1.34.0,<1.35.0)", "mypy-boto3-sts (>=1.34.0,<1.35.0)", "mypy-boto3-supplychain (>=1.34.0,<1.35.0)", "mypy-boto3-support (>=1.34.0,<1.35.0)", "mypy-boto3-support-app (>=1.34.0,<1.35.0)", "mypy-boto3-swf (>=1.34.0,<1.35.0)", "mypy-boto3-synthetics (>=1.34.0,<1.35.0)", "mypy-boto3-textract (>=1.34.0,<1.35.0)", "mypy-boto3-timestream-query (>=1.34.0,<1.35.0)", "mypy-boto3-timestream-write (>=1.34.0,<1.35.0)", "mypy-boto3-tnb (>=1.34.0,<1.35.0)", "mypy-boto3-transcribe (>=1.34.0,<1.35.0)", "mypy-boto3-transfer (>=1.34.0,<1.35.0)", "mypy-boto3-translate (>=1.34.0,<1.35.0)", "mypy-boto3-trustedadvisor (>=1.34.0,<1.35.0)", "mypy-boto3-verifiedpermissions (>=1.34.0,<1.35.0)", "mypy-boto3-voice-id (>=1.34.0,<1.35.0)", "mypy-boto3-vpc-lattice (>=1.34.0,<1.35.0)", "mypy-boto3-waf (>=1.34.0,<1.35.0)", "mypy-boto3-waf-regional (>=1.34.0,<1.35.0)", "mypy-boto3-wafv2 (>=1.34.0,<1.35.0)", "mypy-boto3-wellarchitected (>=1.34.0,<1.35.0)", "mypy-boto3-wisdom (>=1.34.0,<1.35.0)", "mypy-boto3-workdocs (>=1.34.0,<1.35.0)", "mypy-boto3-worklink (>=1.34.0,<1.35.0)", "mypy-boto3-workmail (>=1.34.0,<1.35.0)", "mypy-boto3-workmailmessageflow (>=1.34.0,<1.35.0)", "mypy-boto3-workspaces (>=1.34.0,<1.35.0)", "mypy-boto3-workspaces-thin-client (>=1.34.0,<1.35.0)", "mypy-boto3-workspaces-web (>=1.34.0,<1.35.0)", "mypy-boto3-xray (>=1.34.0,<1.35.0)"] +all = ["mypy-boto3-accessanalyzer (>=1.34.0,<1.35.0)", "mypy-boto3-account (>=1.34.0,<1.35.0)", "mypy-boto3-acm (>=1.34.0,<1.35.0)", "mypy-boto3-acm-pca (>=1.34.0,<1.35.0)", "mypy-boto3-alexaforbusiness (>=1.34.0,<1.35.0)", "mypy-boto3-amp (>=1.34.0,<1.35.0)", "mypy-boto3-amplify (>=1.34.0,<1.35.0)", "mypy-boto3-amplifybackend (>=1.34.0,<1.35.0)", "mypy-boto3-amplifyuibuilder (>=1.34.0,<1.35.0)", "mypy-boto3-apigateway (>=1.34.0,<1.35.0)", "mypy-boto3-apigatewaymanagementapi (>=1.34.0,<1.35.0)", "mypy-boto3-apigatewayv2 (>=1.34.0,<1.35.0)", "mypy-boto3-appconfig (>=1.34.0,<1.35.0)", "mypy-boto3-appconfigdata (>=1.34.0,<1.35.0)", "mypy-boto3-appfabric (>=1.34.0,<1.35.0)", "mypy-boto3-appflow (>=1.34.0,<1.35.0)", "mypy-boto3-appintegrations (>=1.34.0,<1.35.0)", "mypy-boto3-application-autoscaling (>=1.34.0,<1.35.0)", "mypy-boto3-application-insights (>=1.34.0,<1.35.0)", "mypy-boto3-applicationcostprofiler (>=1.34.0,<1.35.0)", "mypy-boto3-appmesh (>=1.34.0,<1.35.0)", "mypy-boto3-apprunner (>=1.34.0,<1.35.0)", "mypy-boto3-appstream (>=1.34.0,<1.35.0)", "mypy-boto3-appsync (>=1.34.0,<1.35.0)", "mypy-boto3-arc-zonal-shift (>=1.34.0,<1.35.0)", "mypy-boto3-artifact (>=1.34.0,<1.35.0)", "mypy-boto3-athena (>=1.34.0,<1.35.0)", "mypy-boto3-auditmanager (>=1.34.0,<1.35.0)", "mypy-boto3-autoscaling (>=1.34.0,<1.35.0)", "mypy-boto3-autoscaling-plans (>=1.34.0,<1.35.0)", "mypy-boto3-b2bi (>=1.34.0,<1.35.0)", "mypy-boto3-backup (>=1.34.0,<1.35.0)", "mypy-boto3-backup-gateway (>=1.34.0,<1.35.0)", "mypy-boto3-backupstorage (>=1.34.0,<1.35.0)", "mypy-boto3-batch (>=1.34.0,<1.35.0)", "mypy-boto3-bcm-data-exports (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock-agent (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock-agent-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-bedrock-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-billingconductor (>=1.34.0,<1.35.0)", "mypy-boto3-braket (>=1.34.0,<1.35.0)", "mypy-boto3-budgets (>=1.34.0,<1.35.0)", "mypy-boto3-ce (>=1.34.0,<1.35.0)", "mypy-boto3-chatbot (>=1.34.0,<1.35.0)", "mypy-boto3-chime (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-identity (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-media-pipelines (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-meetings (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-messaging (>=1.34.0,<1.35.0)", "mypy-boto3-chime-sdk-voice (>=1.34.0,<1.35.0)", "mypy-boto3-cleanrooms (>=1.34.0,<1.35.0)", "mypy-boto3-cleanroomsml (>=1.34.0,<1.35.0)", "mypy-boto3-cloud9 (>=1.34.0,<1.35.0)", "mypy-boto3-cloudcontrol (>=1.34.0,<1.35.0)", "mypy-boto3-clouddirectory (>=1.34.0,<1.35.0)", "mypy-boto3-cloudformation (>=1.34.0,<1.35.0)", "mypy-boto3-cloudfront (>=1.34.0,<1.35.0)", "mypy-boto3-cloudfront-keyvaluestore (>=1.34.0,<1.35.0)", "mypy-boto3-cloudhsm (>=1.34.0,<1.35.0)", "mypy-boto3-cloudhsmv2 (>=1.34.0,<1.35.0)", "mypy-boto3-cloudsearch (>=1.34.0,<1.35.0)", "mypy-boto3-cloudsearchdomain (>=1.34.0,<1.35.0)", "mypy-boto3-cloudtrail (>=1.34.0,<1.35.0)", "mypy-boto3-cloudtrail-data (>=1.34.0,<1.35.0)", "mypy-boto3-cloudwatch (>=1.34.0,<1.35.0)", "mypy-boto3-codeartifact (>=1.34.0,<1.35.0)", "mypy-boto3-codebuild (>=1.34.0,<1.35.0)", "mypy-boto3-codecatalyst (>=1.34.0,<1.35.0)", "mypy-boto3-codecommit (>=1.34.0,<1.35.0)", "mypy-boto3-codeconnections (>=1.34.0,<1.35.0)", "mypy-boto3-codedeploy (>=1.34.0,<1.35.0)", "mypy-boto3-codeguru-reviewer (>=1.34.0,<1.35.0)", "mypy-boto3-codeguru-security (>=1.34.0,<1.35.0)", "mypy-boto3-codeguruprofiler (>=1.34.0,<1.35.0)", "mypy-boto3-codepipeline (>=1.34.0,<1.35.0)", "mypy-boto3-codestar (>=1.34.0,<1.35.0)", "mypy-boto3-codestar-connections (>=1.34.0,<1.35.0)", "mypy-boto3-codestar-notifications (>=1.34.0,<1.35.0)", "mypy-boto3-cognito-identity (>=1.34.0,<1.35.0)", "mypy-boto3-cognito-idp (>=1.34.0,<1.35.0)", "mypy-boto3-cognito-sync (>=1.34.0,<1.35.0)", "mypy-boto3-comprehend (>=1.34.0,<1.35.0)", "mypy-boto3-comprehendmedical (>=1.34.0,<1.35.0)", "mypy-boto3-compute-optimizer (>=1.34.0,<1.35.0)", "mypy-boto3-config (>=1.34.0,<1.35.0)", "mypy-boto3-connect (>=1.34.0,<1.35.0)", "mypy-boto3-connect-contact-lens (>=1.34.0,<1.35.0)", "mypy-boto3-connectcampaigns (>=1.34.0,<1.35.0)", "mypy-boto3-connectcases (>=1.34.0,<1.35.0)", "mypy-boto3-connectparticipant (>=1.34.0,<1.35.0)", "mypy-boto3-controlcatalog (>=1.34.0,<1.35.0)", "mypy-boto3-controltower (>=1.34.0,<1.35.0)", "mypy-boto3-cost-optimization-hub (>=1.34.0,<1.35.0)", "mypy-boto3-cur (>=1.34.0,<1.35.0)", "mypy-boto3-customer-profiles (>=1.34.0,<1.35.0)", "mypy-boto3-databrew (>=1.34.0,<1.35.0)", "mypy-boto3-dataexchange (>=1.34.0,<1.35.0)", "mypy-boto3-datapipeline (>=1.34.0,<1.35.0)", "mypy-boto3-datasync (>=1.34.0,<1.35.0)", "mypy-boto3-datazone (>=1.34.0,<1.35.0)", "mypy-boto3-dax (>=1.34.0,<1.35.0)", "mypy-boto3-deadline (>=1.34.0,<1.35.0)", "mypy-boto3-detective (>=1.34.0,<1.35.0)", "mypy-boto3-devicefarm (>=1.34.0,<1.35.0)", "mypy-boto3-devops-guru (>=1.34.0,<1.35.0)", "mypy-boto3-directconnect (>=1.34.0,<1.35.0)", "mypy-boto3-discovery (>=1.34.0,<1.35.0)", "mypy-boto3-dlm (>=1.34.0,<1.35.0)", "mypy-boto3-dms (>=1.34.0,<1.35.0)", "mypy-boto3-docdb (>=1.34.0,<1.35.0)", "mypy-boto3-docdb-elastic (>=1.34.0,<1.35.0)", "mypy-boto3-drs (>=1.34.0,<1.35.0)", "mypy-boto3-ds (>=1.34.0,<1.35.0)", "mypy-boto3-dynamodb (>=1.34.0,<1.35.0)", "mypy-boto3-dynamodbstreams (>=1.34.0,<1.35.0)", "mypy-boto3-ebs (>=1.34.0,<1.35.0)", "mypy-boto3-ec2 (>=1.34.0,<1.35.0)", "mypy-boto3-ec2-instance-connect (>=1.34.0,<1.35.0)", "mypy-boto3-ecr (>=1.34.0,<1.35.0)", "mypy-boto3-ecr-public (>=1.34.0,<1.35.0)", "mypy-boto3-ecs (>=1.34.0,<1.35.0)", "mypy-boto3-efs (>=1.34.0,<1.35.0)", "mypy-boto3-eks (>=1.34.0,<1.35.0)", "mypy-boto3-eks-auth (>=1.34.0,<1.35.0)", "mypy-boto3-elastic-inference (>=1.34.0,<1.35.0)", "mypy-boto3-elasticache (>=1.34.0,<1.35.0)", "mypy-boto3-elasticbeanstalk (>=1.34.0,<1.35.0)", "mypy-boto3-elastictranscoder (>=1.34.0,<1.35.0)", "mypy-boto3-elb (>=1.34.0,<1.35.0)", "mypy-boto3-elbv2 (>=1.34.0,<1.35.0)", "mypy-boto3-emr (>=1.34.0,<1.35.0)", "mypy-boto3-emr-containers (>=1.34.0,<1.35.0)", "mypy-boto3-emr-serverless (>=1.34.0,<1.35.0)", "mypy-boto3-entityresolution (>=1.34.0,<1.35.0)", "mypy-boto3-es (>=1.34.0,<1.35.0)", "mypy-boto3-events (>=1.34.0,<1.35.0)", "mypy-boto3-evidently (>=1.34.0,<1.35.0)", "mypy-boto3-finspace (>=1.34.0,<1.35.0)", "mypy-boto3-finspace-data (>=1.34.0,<1.35.0)", "mypy-boto3-firehose (>=1.34.0,<1.35.0)", "mypy-boto3-fis (>=1.34.0,<1.35.0)", "mypy-boto3-fms (>=1.34.0,<1.35.0)", "mypy-boto3-forecast (>=1.34.0,<1.35.0)", "mypy-boto3-forecastquery (>=1.34.0,<1.35.0)", "mypy-boto3-frauddetector (>=1.34.0,<1.35.0)", "mypy-boto3-freetier (>=1.34.0,<1.35.0)", "mypy-boto3-fsx (>=1.34.0,<1.35.0)", "mypy-boto3-gamelift (>=1.34.0,<1.35.0)", "mypy-boto3-glacier (>=1.34.0,<1.35.0)", "mypy-boto3-globalaccelerator (>=1.34.0,<1.35.0)", "mypy-boto3-glue (>=1.34.0,<1.35.0)", "mypy-boto3-grafana (>=1.34.0,<1.35.0)", "mypy-boto3-greengrass (>=1.34.0,<1.35.0)", "mypy-boto3-greengrassv2 (>=1.34.0,<1.35.0)", "mypy-boto3-groundstation (>=1.34.0,<1.35.0)", "mypy-boto3-guardduty (>=1.34.0,<1.35.0)", "mypy-boto3-health (>=1.34.0,<1.35.0)", "mypy-boto3-healthlake (>=1.34.0,<1.35.0)", "mypy-boto3-honeycode (>=1.34.0,<1.35.0)", "mypy-boto3-iam (>=1.34.0,<1.35.0)", "mypy-boto3-identitystore (>=1.34.0,<1.35.0)", "mypy-boto3-imagebuilder (>=1.34.0,<1.35.0)", "mypy-boto3-importexport (>=1.34.0,<1.35.0)", "mypy-boto3-inspector (>=1.34.0,<1.35.0)", "mypy-boto3-inspector-scan (>=1.34.0,<1.35.0)", "mypy-boto3-inspector2 (>=1.34.0,<1.35.0)", "mypy-boto3-internetmonitor (>=1.34.0,<1.35.0)", "mypy-boto3-iot (>=1.34.0,<1.35.0)", "mypy-boto3-iot-data (>=1.34.0,<1.35.0)", "mypy-boto3-iot-jobs-data (>=1.34.0,<1.35.0)", "mypy-boto3-iot1click-devices (>=1.34.0,<1.35.0)", "mypy-boto3-iot1click-projects (>=1.34.0,<1.35.0)", "mypy-boto3-iotanalytics (>=1.34.0,<1.35.0)", "mypy-boto3-iotdeviceadvisor (>=1.34.0,<1.35.0)", "mypy-boto3-iotevents (>=1.34.0,<1.35.0)", "mypy-boto3-iotevents-data (>=1.34.0,<1.35.0)", "mypy-boto3-iotfleethub (>=1.34.0,<1.35.0)", "mypy-boto3-iotfleetwise (>=1.34.0,<1.35.0)", "mypy-boto3-iotsecuretunneling (>=1.34.0,<1.35.0)", "mypy-boto3-iotsitewise (>=1.34.0,<1.35.0)", "mypy-boto3-iotthingsgraph (>=1.34.0,<1.35.0)", "mypy-boto3-iottwinmaker (>=1.34.0,<1.35.0)", "mypy-boto3-iotwireless (>=1.34.0,<1.35.0)", "mypy-boto3-ivs (>=1.34.0,<1.35.0)", "mypy-boto3-ivs-realtime (>=1.34.0,<1.35.0)", "mypy-boto3-ivschat (>=1.34.0,<1.35.0)", "mypy-boto3-kafka (>=1.34.0,<1.35.0)", "mypy-boto3-kafkaconnect (>=1.34.0,<1.35.0)", "mypy-boto3-kendra (>=1.34.0,<1.35.0)", "mypy-boto3-kendra-ranking (>=1.34.0,<1.35.0)", "mypy-boto3-keyspaces (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-archived-media (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-media (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-signaling (>=1.34.0,<1.35.0)", "mypy-boto3-kinesis-video-webrtc-storage (>=1.34.0,<1.35.0)", "mypy-boto3-kinesisanalytics (>=1.34.0,<1.35.0)", "mypy-boto3-kinesisanalyticsv2 (>=1.34.0,<1.35.0)", "mypy-boto3-kinesisvideo (>=1.34.0,<1.35.0)", "mypy-boto3-kms (>=1.34.0,<1.35.0)", "mypy-boto3-lakeformation (>=1.34.0,<1.35.0)", "mypy-boto3-lambda (>=1.34.0,<1.35.0)", "mypy-boto3-launch-wizard (>=1.34.0,<1.35.0)", "mypy-boto3-lex-models (>=1.34.0,<1.35.0)", "mypy-boto3-lex-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-lexv2-models (>=1.34.0,<1.35.0)", "mypy-boto3-lexv2-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-license-manager (>=1.34.0,<1.35.0)", "mypy-boto3-license-manager-linux-subscriptions (>=1.34.0,<1.35.0)", "mypy-boto3-license-manager-user-subscriptions (>=1.34.0,<1.35.0)", "mypy-boto3-lightsail (>=1.34.0,<1.35.0)", "mypy-boto3-location (>=1.34.0,<1.35.0)", "mypy-boto3-logs (>=1.34.0,<1.35.0)", "mypy-boto3-lookoutequipment (>=1.34.0,<1.35.0)", "mypy-boto3-lookoutmetrics (>=1.34.0,<1.35.0)", "mypy-boto3-lookoutvision (>=1.34.0,<1.35.0)", "mypy-boto3-m2 (>=1.34.0,<1.35.0)", "mypy-boto3-machinelearning (>=1.34.0,<1.35.0)", "mypy-boto3-macie2 (>=1.34.0,<1.35.0)", "mypy-boto3-managedblockchain (>=1.34.0,<1.35.0)", "mypy-boto3-managedblockchain-query (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-agreement (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-catalog (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-deployment (>=1.34.0,<1.35.0)", "mypy-boto3-marketplace-entitlement (>=1.34.0,<1.35.0)", "mypy-boto3-marketplacecommerceanalytics (>=1.34.0,<1.35.0)", "mypy-boto3-mediaconnect (>=1.34.0,<1.35.0)", "mypy-boto3-mediaconvert (>=1.34.0,<1.35.0)", "mypy-boto3-medialive (>=1.34.0,<1.35.0)", "mypy-boto3-mediapackage (>=1.34.0,<1.35.0)", "mypy-boto3-mediapackage-vod (>=1.34.0,<1.35.0)", "mypy-boto3-mediapackagev2 (>=1.34.0,<1.35.0)", "mypy-boto3-mediastore (>=1.34.0,<1.35.0)", "mypy-boto3-mediastore-data (>=1.34.0,<1.35.0)", "mypy-boto3-mediatailor (>=1.34.0,<1.35.0)", "mypy-boto3-medical-imaging (>=1.34.0,<1.35.0)", "mypy-boto3-memorydb (>=1.34.0,<1.35.0)", "mypy-boto3-meteringmarketplace (>=1.34.0,<1.35.0)", "mypy-boto3-mgh (>=1.34.0,<1.35.0)", "mypy-boto3-mgn (>=1.34.0,<1.35.0)", "mypy-boto3-migration-hub-refactor-spaces (>=1.34.0,<1.35.0)", "mypy-boto3-migrationhub-config (>=1.34.0,<1.35.0)", "mypy-boto3-migrationhuborchestrator (>=1.34.0,<1.35.0)", "mypy-boto3-migrationhubstrategy (>=1.34.0,<1.35.0)", "mypy-boto3-mobile (>=1.34.0,<1.35.0)", "mypy-boto3-mq (>=1.34.0,<1.35.0)", "mypy-boto3-mturk (>=1.34.0,<1.35.0)", "mypy-boto3-mwaa (>=1.34.0,<1.35.0)", "mypy-boto3-neptune (>=1.34.0,<1.35.0)", "mypy-boto3-neptune-graph (>=1.34.0,<1.35.0)", "mypy-boto3-neptunedata (>=1.34.0,<1.35.0)", "mypy-boto3-network-firewall (>=1.34.0,<1.35.0)", "mypy-boto3-networkmanager (>=1.34.0,<1.35.0)", "mypy-boto3-networkmonitor (>=1.34.0,<1.35.0)", "mypy-boto3-nimble (>=1.34.0,<1.35.0)", "mypy-boto3-oam (>=1.34.0,<1.35.0)", "mypy-boto3-omics (>=1.34.0,<1.35.0)", "mypy-boto3-opensearch (>=1.34.0,<1.35.0)", "mypy-boto3-opensearchserverless (>=1.34.0,<1.35.0)", "mypy-boto3-opsworks (>=1.34.0,<1.35.0)", "mypy-boto3-opsworkscm (>=1.34.0,<1.35.0)", "mypy-boto3-organizations (>=1.34.0,<1.35.0)", "mypy-boto3-osis (>=1.34.0,<1.35.0)", "mypy-boto3-outposts (>=1.34.0,<1.35.0)", "mypy-boto3-panorama (>=1.34.0,<1.35.0)", "mypy-boto3-payment-cryptography (>=1.34.0,<1.35.0)", "mypy-boto3-payment-cryptography-data (>=1.34.0,<1.35.0)", "mypy-boto3-pca-connector-ad (>=1.34.0,<1.35.0)", "mypy-boto3-personalize (>=1.34.0,<1.35.0)", "mypy-boto3-personalize-events (>=1.34.0,<1.35.0)", "mypy-boto3-personalize-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-pi (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint-email (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint-sms-voice (>=1.34.0,<1.35.0)", "mypy-boto3-pinpoint-sms-voice-v2 (>=1.34.0,<1.35.0)", "mypy-boto3-pipes (>=1.34.0,<1.35.0)", "mypy-boto3-polly (>=1.34.0,<1.35.0)", "mypy-boto3-pricing (>=1.34.0,<1.35.0)", "mypy-boto3-privatenetworks (>=1.34.0,<1.35.0)", "mypy-boto3-proton (>=1.34.0,<1.35.0)", "mypy-boto3-qbusiness (>=1.34.0,<1.35.0)", "mypy-boto3-qconnect (>=1.34.0,<1.35.0)", "mypy-boto3-qldb (>=1.34.0,<1.35.0)", "mypy-boto3-qldb-session (>=1.34.0,<1.35.0)", "mypy-boto3-quicksight (>=1.34.0,<1.35.0)", "mypy-boto3-ram (>=1.34.0,<1.35.0)", "mypy-boto3-rbin (>=1.34.0,<1.35.0)", "mypy-boto3-rds (>=1.34.0,<1.35.0)", "mypy-boto3-rds-data (>=1.34.0,<1.35.0)", "mypy-boto3-redshift (>=1.34.0,<1.35.0)", "mypy-boto3-redshift-data (>=1.34.0,<1.35.0)", "mypy-boto3-redshift-serverless (>=1.34.0,<1.35.0)", "mypy-boto3-rekognition (>=1.34.0,<1.35.0)", "mypy-boto3-repostspace (>=1.34.0,<1.35.0)", "mypy-boto3-resiliencehub (>=1.34.0,<1.35.0)", "mypy-boto3-resource-explorer-2 (>=1.34.0,<1.35.0)", "mypy-boto3-resource-groups (>=1.34.0,<1.35.0)", "mypy-boto3-resourcegroupstaggingapi (>=1.34.0,<1.35.0)", "mypy-boto3-robomaker (>=1.34.0,<1.35.0)", "mypy-boto3-rolesanywhere (>=1.34.0,<1.35.0)", "mypy-boto3-route53 (>=1.34.0,<1.35.0)", "mypy-boto3-route53-recovery-cluster (>=1.34.0,<1.35.0)", "mypy-boto3-route53-recovery-control-config (>=1.34.0,<1.35.0)", "mypy-boto3-route53-recovery-readiness (>=1.34.0,<1.35.0)", "mypy-boto3-route53domains (>=1.34.0,<1.35.0)", "mypy-boto3-route53profiles (>=1.34.0,<1.35.0)", "mypy-boto3-route53resolver (>=1.34.0,<1.35.0)", "mypy-boto3-rum (>=1.34.0,<1.35.0)", "mypy-boto3-s3 (>=1.34.0,<1.35.0)", "mypy-boto3-s3control (>=1.34.0,<1.35.0)", "mypy-boto3-s3outposts (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-a2i-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-edge (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-featurestore-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-geospatial (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-metrics (>=1.34.0,<1.35.0)", "mypy-boto3-sagemaker-runtime (>=1.34.0,<1.35.0)", "mypy-boto3-savingsplans (>=1.34.0,<1.35.0)", "mypy-boto3-scheduler (>=1.34.0,<1.35.0)", "mypy-boto3-schemas (>=1.34.0,<1.35.0)", "mypy-boto3-sdb (>=1.34.0,<1.35.0)", "mypy-boto3-secretsmanager (>=1.34.0,<1.35.0)", "mypy-boto3-securityhub (>=1.34.0,<1.35.0)", "mypy-boto3-securitylake (>=1.34.0,<1.35.0)", "mypy-boto3-serverlessrepo (>=1.34.0,<1.35.0)", "mypy-boto3-service-quotas (>=1.34.0,<1.35.0)", "mypy-boto3-servicecatalog (>=1.34.0,<1.35.0)", "mypy-boto3-servicecatalog-appregistry (>=1.34.0,<1.35.0)", "mypy-boto3-servicediscovery (>=1.34.0,<1.35.0)", "mypy-boto3-ses (>=1.34.0,<1.35.0)", "mypy-boto3-sesv2 (>=1.34.0,<1.35.0)", "mypy-boto3-shield (>=1.34.0,<1.35.0)", "mypy-boto3-signer (>=1.34.0,<1.35.0)", "mypy-boto3-simspaceweaver (>=1.34.0,<1.35.0)", "mypy-boto3-sms (>=1.34.0,<1.35.0)", "mypy-boto3-sms-voice (>=1.34.0,<1.35.0)", "mypy-boto3-snow-device-management (>=1.34.0,<1.35.0)", "mypy-boto3-snowball (>=1.34.0,<1.35.0)", "mypy-boto3-sns (>=1.34.0,<1.35.0)", "mypy-boto3-sqs (>=1.34.0,<1.35.0)", "mypy-boto3-ssm (>=1.34.0,<1.35.0)", "mypy-boto3-ssm-contacts (>=1.34.0,<1.35.0)", "mypy-boto3-ssm-incidents (>=1.34.0,<1.35.0)", "mypy-boto3-ssm-sap (>=1.34.0,<1.35.0)", "mypy-boto3-sso (>=1.34.0,<1.35.0)", "mypy-boto3-sso-admin (>=1.34.0,<1.35.0)", "mypy-boto3-sso-oidc (>=1.34.0,<1.35.0)", "mypy-boto3-stepfunctions (>=1.34.0,<1.35.0)", "mypy-boto3-storagegateway (>=1.34.0,<1.35.0)", "mypy-boto3-sts (>=1.34.0,<1.35.0)", "mypy-boto3-supplychain (>=1.34.0,<1.35.0)", "mypy-boto3-support (>=1.34.0,<1.35.0)", "mypy-boto3-support-app (>=1.34.0,<1.35.0)", "mypy-boto3-swf (>=1.34.0,<1.35.0)", "mypy-boto3-synthetics (>=1.34.0,<1.35.0)", "mypy-boto3-textract (>=1.34.0,<1.35.0)", "mypy-boto3-timestream-influxdb (>=1.34.0,<1.35.0)", "mypy-boto3-timestream-query (>=1.34.0,<1.35.0)", "mypy-boto3-timestream-write (>=1.34.0,<1.35.0)", "mypy-boto3-tnb (>=1.34.0,<1.35.0)", "mypy-boto3-transcribe (>=1.34.0,<1.35.0)", "mypy-boto3-transfer (>=1.34.0,<1.35.0)", "mypy-boto3-translate (>=1.34.0,<1.35.0)", "mypy-boto3-trustedadvisor (>=1.34.0,<1.35.0)", "mypy-boto3-verifiedpermissions (>=1.34.0,<1.35.0)", "mypy-boto3-voice-id (>=1.34.0,<1.35.0)", "mypy-boto3-vpc-lattice (>=1.34.0,<1.35.0)", "mypy-boto3-waf (>=1.34.0,<1.35.0)", "mypy-boto3-waf-regional (>=1.34.0,<1.35.0)", "mypy-boto3-wafv2 (>=1.34.0,<1.35.0)", "mypy-boto3-wellarchitected (>=1.34.0,<1.35.0)", "mypy-boto3-wisdom (>=1.34.0,<1.35.0)", "mypy-boto3-workdocs (>=1.34.0,<1.35.0)", "mypy-boto3-worklink (>=1.34.0,<1.35.0)", "mypy-boto3-workmail (>=1.34.0,<1.35.0)", "mypy-boto3-workmailmessageflow (>=1.34.0,<1.35.0)", "mypy-boto3-workspaces (>=1.34.0,<1.35.0)", "mypy-boto3-workspaces-thin-client (>=1.34.0,<1.35.0)", "mypy-boto3-workspaces-web (>=1.34.0,<1.35.0)", "mypy-boto3-xray (>=1.34.0,<1.35.0)"] amp = ["mypy-boto3-amp (>=1.34.0,<1.35.0)"] amplify = ["mypy-boto3-amplify (>=1.34.0,<1.35.0)"] amplifybackend = ["mypy-boto3-amplifybackend (>=1.34.0,<1.35.0)"] @@ -385,6 +343,7 @@ apprunner = ["mypy-boto3-apprunner (>=1.34.0,<1.35.0)"] appstream = ["mypy-boto3-appstream (>=1.34.0,<1.35.0)"] appsync = ["mypy-boto3-appsync (>=1.34.0,<1.35.0)"] arc-zonal-shift = ["mypy-boto3-arc-zonal-shift (>=1.34.0,<1.35.0)"] +artifact = ["mypy-boto3-artifact (>=1.34.0,<1.35.0)"] athena = ["mypy-boto3-athena (>=1.34.0,<1.35.0)"] auditmanager = ["mypy-boto3-auditmanager (>=1.34.0,<1.35.0)"] autoscaling = ["mypy-boto3-autoscaling (>=1.34.0,<1.35.0)"] @@ -400,10 +359,11 @@ bedrock-agent = ["mypy-boto3-bedrock-agent (>=1.34.0,<1.35.0)"] bedrock-agent-runtime = ["mypy-boto3-bedrock-agent-runtime (>=1.34.0,<1.35.0)"] bedrock-runtime = ["mypy-boto3-bedrock-runtime (>=1.34.0,<1.35.0)"] billingconductor = ["mypy-boto3-billingconductor (>=1.34.0,<1.35.0)"] -boto3 = ["boto3 (==1.34.24)", "botocore (==1.34.24)"] +boto3 = ["boto3 (==1.34.105)", "botocore (==1.34.105)"] braket = ["mypy-boto3-braket (>=1.34.0,<1.35.0)"] budgets = ["mypy-boto3-budgets (>=1.34.0,<1.35.0)"] ce = ["mypy-boto3-ce (>=1.34.0,<1.35.0)"] +chatbot = ["mypy-boto3-chatbot (>=1.34.0,<1.35.0)"] chime = ["mypy-boto3-chime (>=1.34.0,<1.35.0)"] chime-sdk-identity = ["mypy-boto3-chime-sdk-identity (>=1.34.0,<1.35.0)"] chime-sdk-media-pipelines = ["mypy-boto3-chime-sdk-media-pipelines (>=1.34.0,<1.35.0)"] @@ -429,6 +389,7 @@ codeartifact = ["mypy-boto3-codeartifact (>=1.34.0,<1.35.0)"] codebuild = ["mypy-boto3-codebuild (>=1.34.0,<1.35.0)"] codecatalyst = ["mypy-boto3-codecatalyst (>=1.34.0,<1.35.0)"] codecommit = ["mypy-boto3-codecommit (>=1.34.0,<1.35.0)"] +codeconnections = ["mypy-boto3-codeconnections (>=1.34.0,<1.35.0)"] codedeploy = ["mypy-boto3-codedeploy (>=1.34.0,<1.35.0)"] codeguru-reviewer = ["mypy-boto3-codeguru-reviewer (>=1.34.0,<1.35.0)"] codeguru-security = ["mypy-boto3-codeguru-security (>=1.34.0,<1.35.0)"] @@ -449,6 +410,7 @@ connect-contact-lens = ["mypy-boto3-connect-contact-lens (>=1.34.0,<1.35.0)"] connectcampaigns = ["mypy-boto3-connectcampaigns (>=1.34.0,<1.35.0)"] connectcases = ["mypy-boto3-connectcases (>=1.34.0,<1.35.0)"] connectparticipant = ["mypy-boto3-connectparticipant (>=1.34.0,<1.35.0)"] +controlcatalog = ["mypy-boto3-controlcatalog (>=1.34.0,<1.35.0)"] controltower = ["mypy-boto3-controltower (>=1.34.0,<1.35.0)"] cost-optimization-hub = ["mypy-boto3-cost-optimization-hub (>=1.34.0,<1.35.0)"] cur = ["mypy-boto3-cur (>=1.34.0,<1.35.0)"] @@ -459,6 +421,7 @@ datapipeline = ["mypy-boto3-datapipeline (>=1.34.0,<1.35.0)"] datasync = ["mypy-boto3-datasync (>=1.34.0,<1.35.0)"] datazone = ["mypy-boto3-datazone (>=1.34.0,<1.35.0)"] dax = ["mypy-boto3-dax (>=1.34.0,<1.35.0)"] +deadline = ["mypy-boto3-deadline (>=1.34.0,<1.35.0)"] detective = ["mypy-boto3-detective (>=1.34.0,<1.35.0)"] devicefarm = ["mypy-boto3-devicefarm (>=1.34.0,<1.35.0)"] devops-guru = ["mypy-boto3-devops-guru (>=1.34.0,<1.35.0)"] @@ -528,7 +491,6 @@ internetmonitor = ["mypy-boto3-internetmonitor (>=1.34.0,<1.35.0)"] iot = ["mypy-boto3-iot (>=1.34.0,<1.35.0)"] iot-data = ["mypy-boto3-iot-data (>=1.34.0,<1.35.0)"] iot-jobs-data = ["mypy-boto3-iot-jobs-data (>=1.34.0,<1.35.0)"] -iot-roborunner = ["mypy-boto3-iot-roborunner (>=1.34.0,<1.35.0)"] iot1click-devices = ["mypy-boto3-iot1click-devices (>=1.34.0,<1.35.0)"] iot1click-projects = ["mypy-boto3-iot1click-projects (>=1.34.0,<1.35.0)"] iotanalytics = ["mypy-boto3-iotanalytics (>=1.34.0,<1.35.0)"] @@ -665,6 +627,7 @@ route53-recovery-cluster = ["mypy-boto3-route53-recovery-cluster (>=1.34.0,<1.35 route53-recovery-control-config = ["mypy-boto3-route53-recovery-control-config (>=1.34.0,<1.35.0)"] route53-recovery-readiness = ["mypy-boto3-route53-recovery-readiness (>=1.34.0,<1.35.0)"] route53domains = ["mypy-boto3-route53domains (>=1.34.0,<1.35.0)"] +route53profiles = ["mypy-boto3-route53profiles (>=1.34.0,<1.35.0)"] route53resolver = ["mypy-boto3-route53resolver (>=1.34.0,<1.35.0)"] rum = ["mypy-boto3-rum (>=1.34.0,<1.35.0)"] s3 = ["mypy-boto3-s3 (>=1.34.0,<1.35.0)"] @@ -716,6 +679,7 @@ support-app = ["mypy-boto3-support-app (>=1.34.0,<1.35.0)"] swf = ["mypy-boto3-swf (>=1.34.0,<1.35.0)"] synthetics = ["mypy-boto3-synthetics (>=1.34.0,<1.35.0)"] textract = ["mypy-boto3-textract (>=1.34.0,<1.35.0)"] +timestream-influxdb = ["mypy-boto3-timestream-influxdb (>=1.34.0,<1.35.0)"] timestream-query = ["mypy-boto3-timestream-query (>=1.34.0,<1.35.0)"] timestream-write = ["mypy-boto3-timestream-write (>=1.34.0,<1.35.0)"] tnb = ["mypy-boto3-tnb (>=1.34.0,<1.35.0)"] @@ -742,13 +706,13 @@ xray = ["mypy-boto3-xray (>=1.34.0,<1.35.0)"] [[package]] name = "botocore" -version = "1.34.24" +version = "1.34.106" description = "Low-level, data-driven core of boto 3." optional = false -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "botocore-1.34.24-py3-none-any.whl", hash = "sha256:c92f810b5faec5126f3faf7dc7d77346e407ab3b89bb613290c86ff2fd5405b9"}, - {file = "botocore-1.34.24.tar.gz", hash = "sha256:4a48c15b87c6a72719a6c2d8688f4e52fe52c18ac9dfcaa25c7e62c5df475ee2"}, + {file = "botocore-1.34.106-py3-none-any.whl", hash = "sha256:4baf0e27c2dfc4f4d0dee7c217c716e0782f9b30e8e1fff983fce237d88f73ae"}, + {file = "botocore-1.34.106.tar.gz", hash = "sha256:921fa5202f88c3e58fdcb4b3acffd56d65b24bca47092ee4b27aa988556c0be6"}, ] [package.dependencies] @@ -756,21 +720,21 @@ jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = [ {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, - {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""}, + {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, ] [package.extras] -crt = ["awscrt (==0.19.19)"] +crt = ["awscrt (==0.20.9)"] [[package]] name = "botocore-stubs" -version = "1.34.23" +version = "1.34.94" description = "Type annotations and code completion for botocore" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "botocore_stubs-1.34.23-py3-none-any.whl", hash = "sha256:8218bbc0a2339ac6176b1f0c1f386327c3e2b854441879ac6036529c223915d3"}, - {file = "botocore_stubs-1.34.23.tar.gz", hash = "sha256:6927d18fa26b14e8532573bf0662040dbf8e3943a0f6e353121ce25579e5c942"}, + {file = "botocore_stubs-1.34.94-py3-none-any.whl", hash = "sha256:b0345f55babd8b901c53804fc5c326a4a0bd2e23e3b71f9ea5d9f7663466e6ba"}, + {file = "botocore_stubs-1.34.94.tar.gz", hash = "sha256:64d80a3467e3b19939e9c2750af33328b3087f8f524998dbdf7ed168227f507d"}, ] [package.dependencies] @@ -792,13 +756,13 @@ files = [ [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -991,22 +955,25 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cohere" -version = "4.44" -description = "Python SDK for the Cohere API" +version = "5.5.0" +description = "" optional = true -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "cohere-4.44-py3-none-any.whl", hash = "sha256:a6d01d579dcd43ef98ce1886b55e00a308d40332eafc1da4bf56526c81d6ff73"}, - {file = "cohere-4.44.tar.gz", hash = "sha256:06d9d056ed9b40f152d9551ca547a20ed08410e2e43488ba174e9025cf09746b"}, + {file = "cohere-5.5.0-py3-none-any.whl", hash = "sha256:7792e8898c95f2cb955b2d9f23b8602f73f3b698d59f1a1b4896c53809671da0"}, + {file = "cohere-5.5.0.tar.gz", hash = "sha256:00b492ebf8921e83cb2371f2ee36ddf301422daae3024343a87d4316f02b711b"}, ] [package.dependencies] -aiohttp = ">=3.0,<4.0" -backoff = ">=2.0,<3.0" -fastavro = ">=1.8,<2.0" -importlib_metadata = ">=6.0,<7.0" -requests = ">=2.25.0,<3.0.0" -urllib3 = ">=1.26,<3" +boto3 = ">=1.34.0,<2.0.0" +fastavro = ">=1.9.4,<2.0.0" +httpx = ">=0.21.2" +httpx-sse = ">=0.4.0,<0.5.0" +pydantic = ">=1.9.2" +requests = ">=2.0.0,<3.0.0" +tokenizers = ">=0.19,<0.20" +types-requests = ">=2.0.0,<3.0.0" +typing_extensions = ">=4.0.0" [[package]] name = "colorama" @@ -1019,92 +986,81 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "contextlib2" -version = "21.6.0" -description = "Backports and enhancements for the contextlib module" -optional = false -python-versions = ">=3.6" -files = [ - {file = "contextlib2-21.6.0-py2.py3-none-any.whl", hash = "sha256:3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f"}, - {file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"}, -] - [[package]] name = "courlan" -version = "0.9.5" +version = "1.1.0" description = "Clean, filter and sample URLs to optimize data collection – includes spam, content type and language filters." optional = true python-versions = ">=3.6" files = [ - {file = "courlan-0.9.5-py3-none-any.whl", hash = "sha256:3c10fb06a26422b5c5e6f5f6d2c16e5d4308026f9dcea783ca6a88dae5922ee5"}, - {file = "courlan-0.9.5.tar.gz", hash = "sha256:38dc35b2e3bf1f5d516d00d51ac12ebde543e3417c6be6f6a2273c0fc5b5b353"}, + {file = "courlan-1.1.0-py3-none-any.whl", hash = "sha256:88354c1e50fde84890c13f58924a5ecc5c0527dcf3eb36e80564fe68e330bb03"}, + {file = "courlan-1.1.0.tar.gz", hash = "sha256:d706684334f18be4ada1fbd57f2680adf0036648f6d840852f7a4822d3adfd8d"}, ] [package.dependencies] -langcodes = ">=3.3.0" +babel = ">=2.11.0" tld = {version = ">=0.13", markers = "python_version >= \"3.7\""} urllib3 = {version = ">=1.26,<3", markers = "python_version >= \"3.7\""} [[package]] name = "coverage" -version = "7.4.0" +version = "7.5.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36b0ea8ab20d6a7564e89cb6135920bc9188fb5f1f7152e94e8300b7b189441a"}, - {file = "coverage-7.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0676cd0ba581e514b7f726495ea75aba3eb20899d824636c6f59b0ed2f88c471"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0ca5c71a5a1765a0f8f88022c52b6b8be740e512980362f7fdbb03725a0d6b9"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c97726520f784239f6c62506bc70e48d01ae71e9da128259d61ca5e9788516"}, - {file = "coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:815ac2d0f3398a14286dc2cea223a6f338109f9ecf39a71160cd1628786bc6f5"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:80b5ee39b7f0131ebec7968baa9b2309eddb35b8403d1869e08f024efd883566"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5b2ccb7548a0b65974860a78c9ffe1173cfb5877460e5a229238d985565574ae"}, - {file = "coverage-7.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:995ea5c48c4ebfd898eacb098164b3cc826ba273b3049e4a889658548e321b43"}, - {file = "coverage-7.4.0-cp310-cp310-win32.whl", hash = "sha256:79287fd95585ed36e83182794a57a46aeae0b64ca53929d1176db56aacc83451"}, - {file = "coverage-7.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5b14b4f8760006bfdb6e08667af7bc2d8d9bfdb648351915315ea17645347137"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:04387a4a6ecb330c1878907ce0dc04078ea72a869263e53c72a1ba5bbdf380ca"}, - {file = "coverage-7.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea81d8f9691bb53f4fb4db603203029643caffc82bf998ab5b59ca05560f4c06"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74775198b702868ec2d058cb92720a3c5a9177296f75bd97317c787daf711505"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f03940f9973bfaee8cfba70ac991825611b9aac047e5c80d499a44079ec0bc"}, - {file = "coverage-7.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:485e9f897cf4856a65a57c7f6ea3dc0d4e6c076c87311d4bc003f82cfe199d25"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6ae8c9d301207e6856865867d762a4b6fd379c714fcc0607a84b92ee63feff70"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bf477c355274a72435ceb140dc42de0dc1e1e0bf6e97195be30487d8eaaf1a09"}, - {file = "coverage-7.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:83c2dda2666fe32332f8e87481eed056c8b4d163fe18ecc690b02802d36a4d26"}, - {file = "coverage-7.4.0-cp311-cp311-win32.whl", hash = "sha256:697d1317e5290a313ef0d369650cfee1a114abb6021fa239ca12b4849ebbd614"}, - {file = "coverage-7.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:26776ff6c711d9d835557ee453082025d871e30b3fd6c27fcef14733f67f0590"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:13eaf476ec3e883fe3e5fe3707caeb88268a06284484a3daf8250259ef1ba143"}, - {file = "coverage-7.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846f52f46e212affb5bcf131c952fb4075b55aae6b61adc9856222df89cbe3e2"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26f66da8695719ccf90e794ed567a1549bb2644a706b41e9f6eae6816b398c4a"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:164fdcc3246c69a6526a59b744b62e303039a81e42cfbbdc171c91a8cc2f9446"}, - {file = "coverage-7.4.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:316543f71025a6565677d84bc4df2114e9b6a615aa39fb165d697dba06a54af9"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bb1de682da0b824411e00a0d4da5a784ec6496b6850fdf8c865c1d68c0e318dd"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:0e8d06778e8fbffccfe96331a3946237f87b1e1d359d7fbe8b06b96c95a5407a"}, - {file = "coverage-7.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a56de34db7b7ff77056a37aedded01b2b98b508227d2d0979d373a9b5d353daa"}, - {file = "coverage-7.4.0-cp312-cp312-win32.whl", hash = "sha256:51456e6fa099a8d9d91497202d9563a320513fcf59f33991b0661a4a6f2ad450"}, - {file = "coverage-7.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3c1e4cb2ff0083758f09be0f77402e1bdf704adb7f89108007300a6da587d0"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d1bf53c4c8de58d22e0e956a79a5b37f754ed1ffdbf1a260d9dcfa2d8a325e"}, - {file = "coverage-7.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:109f5985182b6b81fe33323ab4707011875198c41964f014579cf82cebf2bb85"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cc9d4bc55de8003663ec94c2f215d12d42ceea128da8f0f4036235a119c88ac"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc6d65b21c219ec2072c1293c505cf36e4e913a3f936d80028993dd73c7906b1"}, - {file = "coverage-7.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a10a4920def78bbfff4eff8a05c51be03e42f1c3735be42d851f199144897ba"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b8e99f06160602bc64da35158bb76c73522a4010f0649be44a4e167ff8555952"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7d360587e64d006402b7116623cebf9d48893329ef035278969fa3bbf75b697e"}, - {file = "coverage-7.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29f3abe810930311c0b5d1a7140f6395369c3db1be68345638c33eec07535105"}, - {file = "coverage-7.4.0-cp38-cp38-win32.whl", hash = "sha256:5040148f4ec43644702e7b16ca864c5314ccb8ee0751ef617d49aa0e2d6bf4f2"}, - {file = "coverage-7.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:9864463c1c2f9cb3b5db2cf1ff475eed2f0b4285c2aaf4d357b69959941aa555"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:936d38794044b26c99d3dd004d8af0035ac535b92090f7f2bb5aa9c8e2f5cd42"}, - {file = "coverage-7.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:799c8f873794a08cdf216aa5d0531c6a3747793b70c53f70e98259720a6fe2d7"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7defbb9737274023e2d7af02cac77043c86ce88a907c58f42b580a97d5bcca9"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1526d265743fb49363974b7aa8d5899ff64ee07df47dd8d3e37dcc0818f09ed"}, - {file = "coverage-7.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf635a52fc1ea401baf88843ae8708591aa4adff875e5c23220de43b1ccf575c"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:756ded44f47f330666843b5781be126ab57bb57c22adbb07d83f6b519783b870"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0eb3c2f32dabe3a4aaf6441dde94f35687224dfd7eb2a7f47f3fd9428e421058"}, - {file = "coverage-7.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bfd5db349d15c08311702611f3dccbef4b4e2ec148fcc636cf8739519b4a5c0f"}, - {file = "coverage-7.4.0-cp39-cp39-win32.whl", hash = "sha256:53d7d9158ee03956e0eadac38dfa1ec8068431ef8058fe6447043db1fb40d932"}, - {file = "coverage-7.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfd2a8b6b0d8e66e944d47cdec2f47c48fef2ba2f2dff5a9a75757f64172857e"}, - {file = "coverage-7.4.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:c530833afc4707fe48524a44844493f36d8727f04dcce91fb978c414a8556cc6"}, - {file = "coverage-7.4.0.tar.gz", hash = "sha256:707c0f58cb1712b8809ece32b68996ee1e609f71bd14615bd8f87a1293cb610e"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0884920835a033b78d1c73b6d3bbcda8161a900f38a488829a83982925f6c2e"}, + {file = "coverage-7.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:39afcd3d4339329c5f58de48a52f6e4e50f6578dd6099961cf22228feb25f38f"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b0ceee8147444347da6a66be737c9d78f3353b0681715b668b72e79203e4a"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a9ca3f2fae0088c3c71d743d85404cec8df9be818a005ea065495bedc33da35"}, + {file = "coverage-7.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd215c0c7d7aab005221608a3c2b46f58c0285a819565887ee0b718c052aa4e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4bf0655ab60d754491004a5efd7f9cccefcc1081a74c9ef2da4735d6ee4a6223"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61c4bf1ba021817de12b813338c9be9f0ad5b1e781b9b340a6d29fc13e7c1b5e"}, + {file = "coverage-7.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:db66fc317a046556a96b453a58eced5024af4582a8dbdc0c23ca4dbc0d5b3146"}, + {file = "coverage-7.5.1-cp310-cp310-win32.whl", hash = "sha256:b016ea6b959d3b9556cb401c55a37547135a587db0115635a443b2ce8f1c7228"}, + {file = "coverage-7.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:df4e745a81c110e7446b1cc8131bf986157770fa405fe90e15e850aaf7619bc8"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:796a79f63eca8814ca3317a1ea443645c9ff0d18b188de470ed7ccd45ae79428"}, + {file = "coverage-7.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fc84a37bfd98db31beae3c2748811a3fa72bf2007ff7902f68746d9757f3746"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6175d1a0559986c6ee3f7fccfc4a90ecd12ba0a383dcc2da30c2b9918d67d8a3"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fc81d5878cd6274ce971e0a3a18a8803c3fe25457165314271cf78e3aae3aa2"}, + {file = "coverage-7.5.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:556cf1a7cbc8028cb60e1ff0be806be2eded2daf8129b8811c63e2b9a6c43bca"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9981706d300c18d8b220995ad22627647be11a4276721c10911e0e9fa44c83e8"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d7fed867ee50edf1a0b4a11e8e5d0895150e572af1cd6d315d557758bfa9c057"}, + {file = "coverage-7.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef48e2707fb320c8f139424a596f5b69955a85b178f15af261bab871873bb987"}, + {file = "coverage-7.5.1-cp311-cp311-win32.whl", hash = "sha256:9314d5678dcc665330df5b69c1e726a0e49b27df0461c08ca12674bcc19ef136"}, + {file = "coverage-7.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fa567e99765fe98f4e7d7394ce623e794d7cabb170f2ca2ac5a4174437e90dd"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6cf3764c030e5338e7f61f95bd21147963cf6aa16e09d2f74f1fa52013c1206"}, + {file = "coverage-7.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ec92012fefebee89a6b9c79bc39051a6cb3891d562b9270ab10ecfdadbc0c34"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16db7f26000a07efcf6aea00316f6ac57e7d9a96501e990a36f40c965ec7a95d"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beccf7b8a10b09c4ae543582c1319c6df47d78fd732f854ac68d518ee1fb97fa"}, + {file = "coverage-7.5.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8748731ad392d736cc9ccac03c9845b13bb07d020a33423fa5b3a36521ac6e4e"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7352b9161b33fd0b643ccd1f21f3a3908daaddf414f1c6cb9d3a2fd618bf2572"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a588d39e0925f6a2bff87154752481273cdb1736270642aeb3635cb9b4cad07"}, + {file = "coverage-7.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:68f962d9b72ce69ea8621f57551b2fa9c70509af757ee3b8105d4f51b92b41a7"}, + {file = "coverage-7.5.1-cp312-cp312-win32.whl", hash = "sha256:f152cbf5b88aaeb836127d920dd0f5e7edff5a66f10c079157306c4343d86c19"}, + {file = "coverage-7.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:5a5740d1fb60ddf268a3811bcd353de34eb56dc24e8f52a7f05ee513b2d4f596"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2213def81a50519d7cc56ed643c9e93e0247f5bbe0d1247d15fa520814a7cd7"}, + {file = "coverage-7.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5037f8fcc2a95b1f0e80585bd9d1ec31068a9bcb157d9750a172836e98bc7a90"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3721c2c9e4c4953a41a26c14f4cef64330392a6d2d675c8b1db3b645e31f0e"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca498687ca46a62ae590253fba634a1fe9836bc56f626852fb2720f334c9e4e5"}, + {file = "coverage-7.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cdcbc320b14c3e5877ee79e649677cb7d89ef588852e9583e6b24c2e5072661"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:57e0204b5b745594e5bc14b9b50006da722827f0b8c776949f1135677e88d0b8"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fe7502616b67b234482c3ce276ff26f39ffe88adca2acf0261df4b8454668b4"}, + {file = "coverage-7.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9e78295f4144f9dacfed4f92935fbe1780021247c2fabf73a819b17f0ccfff8d"}, + {file = "coverage-7.5.1-cp38-cp38-win32.whl", hash = "sha256:1434e088b41594baa71188a17533083eabf5609e8e72f16ce8c186001e6b8c41"}, + {file = "coverage-7.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:0646599e9b139988b63704d704af8e8df7fa4cbc4a1f33df69d97f36cb0a38de"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4cc37def103a2725bc672f84bd939a6fe4522310503207aae4d56351644682f1"}, + {file = "coverage-7.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc0b4d8bfeabd25ea75e94632f5b6e047eef8adaed0c2161ada1e922e7f7cece"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0a0f5e06881ecedfe6f3dd2f56dcb057b6dbeb3327fd32d4b12854df36bf26"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9735317685ba6ec7e3754798c8871c2f49aa5e687cc794a0b1d284b2389d1bd5"}, + {file = "coverage-7.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d21918e9ef11edf36764b93101e2ae8cc82aa5efdc7c5a4e9c6c35a48496d601"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3e757949f268364b96ca894b4c342b41dc6f8f8b66c37878aacef5930db61be"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:79afb6197e2f7f60c4824dd4b2d4c2ec5801ceb6ba9ce5d2c3080e5660d51a4f"}, + {file = "coverage-7.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d0d98d95dd18fe29dc66808e1accf59f037d5716f86a501fc0256455219668"}, + {file = "coverage-7.5.1-cp39-cp39-win32.whl", hash = "sha256:1cc0fe9b0b3a8364093c53b0b4c0c2dd4bb23acbec4c9240b5f284095ccf7981"}, + {file = "coverage-7.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:dde0070c40ea8bb3641e811c1cfbf18e265d024deff6de52c5950677a8fb1e0f"}, + {file = "coverage-7.5.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:6537e7c10cc47c595828b8a8be04c72144725c383c4702703ff4e42e44577312"}, + {file = "coverage-7.5.1.tar.gz", hash = "sha256:54de9ef3a9da981f7af93eafde4ede199e0846cd819eb27c88e2b712aae9708c"}, ] [package.dependencies] @@ -1115,43 +1071,43 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "42.0.5" +version = "42.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, - {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, - {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, - {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, - {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, - {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, - {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477"}, + {file = "cryptography-42.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55"}, + {file = "cryptography-42.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da"}, + {file = "cryptography-42.0.7-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7"}, + {file = "cryptography-42.0.7-cp37-abi3-win32.whl", hash = "sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b"}, + {file = "cryptography-42.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678"}, + {file = "cryptography-42.0.7-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda"}, + {file = "cryptography-42.0.7-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1"}, + {file = "cryptography-42.0.7-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886"}, + {file = "cryptography-42.0.7-cp39-abi3-win32.whl", hash = "sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda"}, + {file = "cryptography-42.0.7-cp39-abi3-win_amd64.whl", hash = "sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd"}, + {file = "cryptography-42.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9"}, + {file = "cryptography-42.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68"}, + {file = "cryptography-42.0.7.tar.gz", hash = "sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2"}, ] [package.dependencies] @@ -1224,22 +1180,22 @@ files = [ [[package]] name = "dnspython" -version = "2.5.0" +version = "2.6.1" description = "DNS toolkit" optional = true python-versions = ">=3.8" files = [ - {file = "dnspython-2.5.0-py3-none-any.whl", hash = "sha256:6facdf76b73c742ccf2d07add296f178e629da60be23ce4b0a9c927b1e02c3a6"}, - {file = "dnspython-2.5.0.tar.gz", hash = "sha256:a0034815a59ba9ae888946be7ccca8f7c157b286f8455b379c692efb51022a15"}, + {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, + {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, ] [package.extras] -dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=5.0.3)", "mypy (>=1.0.1)", "pylint (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0.0)", "sphinx (>=7.0.0)", "twine (>=4.0.0)", "wheel (>=0.41.0)"] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] dnssec = ["cryptography (>=41)"] -doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.25.1)"] -doq = ["aioquic (>=0.9.20)"] -idna = ["idna (>=2.1)"] -trio = ["trio (>=0.14)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=0.9.25)"] +idna = ["idna (>=3.6)"] +trio = ["trio (>=0.23)"] wmi = ["wmi (>=1.5.1)"] [[package]] @@ -1265,13 +1221,13 @@ ssh = ["paramiko (>=2.4.3)"] [[package]] name = "docutils" -version = "0.20.1" +version = "0.21.2" description = "Docutils -- Python Documentation Utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, - {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, + {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, + {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] [[package]] @@ -1295,13 +1251,13 @@ websockets = ">=11.0" [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -1309,13 +1265,13 @@ test = ["pytest (>=6)"] [[package]] name = "execnet" -version = "2.0.2" +version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, - {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, + {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, + {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, ] [package.extras] @@ -1337,42 +1293,42 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastavro" -version = "1.9.3" +version = "1.9.4" description = "Fast read/write of AVRO files" optional = true python-versions = ">=3.8" files = [ - {file = "fastavro-1.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5e9b2e1427fb84c0754bc34923d10cabcf2ed23230201208a1371ab7b6027674"}, - {file = "fastavro-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ef82f86ae276309abc0072598474b6be68105a0b28f8d7cc0398d1d353d7de"}, - {file = "fastavro-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280ef7ab7232ecb2097038d6842416ec717d0e1c314b80ff245f85201f3396a4"}, - {file = "fastavro-1.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a36cfc0421ed7576ecb1c22de7bd1dedcce62aebbffcc597379d59171e5d76e"}, - {file = "fastavro-1.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d80f2e20199140eb8c036b4393e9bc9eff325543311b958c72318999499d4279"}, - {file = "fastavro-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:a435f7edd7c5b52cee3f23ca950cd9373ab35cf2aa3d269b3d6aca7e2fc1372c"}, - {file = "fastavro-1.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a7053ed10194ec53754f5337b57b3273a74b48505edcd6edb79fe3c4cd259c0"}, - {file = "fastavro-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853e01f13534d1baa0a3d493a8573e665e93ffa35b4bf1d125e21764d343af8e"}, - {file = "fastavro-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a279cda25d876e6f120950cadf184a307fd8998f9a22a90bb62e6749f88d1e"}, - {file = "fastavro-1.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:63d6f928840f3fb1f2e1fe20bc8b7d0e1a51ba4bb0e554ecb837a669fba31288"}, - {file = "fastavro-1.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8807046edc78f50b3ea5f55f6a534c87b2a13538e7c56fec3532ef802bcae333"}, - {file = "fastavro-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:e502579da4a51c5630eadbd811a1b3d262d6e783bf19998cfb33d2ea0cf6f516"}, - {file = "fastavro-1.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6b665efe442061df8d9608c2fb692847df85d52ad825b776c441802f0dfa6571"}, - {file = "fastavro-1.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b8c96d81f0115633489d7f1133a03832922629a61ca81c1d47b482ddcda3b94"}, - {file = "fastavro-1.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338c7ec94dd2474c4679e44d2560a1922cb6fa99acbb7b18957264baf8eadfc7"}, - {file = "fastavro-1.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a509b34c9af71a109c633631ac2f6d2209830e13200d0048f7e9c057fd563f8f"}, - {file = "fastavro-1.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:967edefab470987c024cd5a1fcd04744a50a91e740c7bdf325181043a47f1083"}, - {file = "fastavro-1.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:033c15e8ed02f80f01d58be1cd880b09fd444faf277263d563a727711d47a98a"}, - {file = "fastavro-1.9.3-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:6b38723327603d77080aec56628e13a739415f8596ca0cc41a905615977c6d6b"}, - {file = "fastavro-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:046d75c4400941fd08f0a6855a34ae63bf02ea01f366b5b749942abe10640056"}, - {file = "fastavro-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87ab312b8baf0e61ee717878d390022ee1b713d70b244d69efbf3325680f9749"}, - {file = "fastavro-1.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c562fcf8f5091a2446aafd0c2a0da590c24e0b53527a0100d33908e32f20eea8"}, - {file = "fastavro-1.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2aa0111e7ebd076d2a094862bbdf8ea175cebba148fcce6c89ff46b625e334b4"}, - {file = "fastavro-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:652072e0f455ca19a1ee502b527e603389783657c130d81f89df66775979d6f5"}, - {file = "fastavro-1.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0a57cdd4edaee36d4216faf801ebc7f53f45e4e1518bdd9832d6f6f1d6e2d88f"}, - {file = "fastavro-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b46a18ebed61573b0823c28eda2716485d283258a83659c7fe6ad3aaeacfed4"}, - {file = "fastavro-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f756f0723f3bd97db20437d0a8e45712839e6ccd7c82f4d82469533be48b4c7"}, - {file = "fastavro-1.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d98d5a08063f5b6d7ac5016a0dfe0698b50d9987cb74686f7dfa8288b7b09e0b"}, - {file = "fastavro-1.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:00698e60db58a2d52cb709df882d451fb7664ebb2f8cb37d9171697e060dc767"}, - {file = "fastavro-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:d021bbc135023194688e88a7431fb0b5e3ce20e27153bf258f2ce08ee1a0106b"}, - {file = "fastavro-1.9.3.tar.gz", hash = "sha256:a30d3d2353f6d3b4f6dcd6a97ae937b3775faddd63f5856fe11ba3b0dbb1756a"}, + {file = "fastavro-1.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:60cb38f07462a7fb4e4440ed0de67d3d400ae6b3d780f81327bebde9aa55faef"}, + {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:063d01d197fc929c20adc09ca9f0ca86d33ac25ee0963ce0b438244eee8315ae"}, + {file = "fastavro-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87a9053fcfbc895f2a16a4303af22077e3a8fdcf1cd5d6ed47ff2ef22cbba2f0"}, + {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:02bf1276b7326397314adf41b34a4890f6ffa59cf7e0eb20b9e4ab0a143a1598"}, + {file = "fastavro-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56bed9eca435389a8861e6e2d631ec7f8f5dda5b23f93517ac710665bd34ca29"}, + {file = "fastavro-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:0cd2099c8c672b853e0b20c13e9b62a69d3fbf67ee7c59c7271ba5df1680310d"}, + {file = "fastavro-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:af8c6d8c43a02b5569c093fc5467469541ac408c79c36a5b0900d3dd0b3ba838"}, + {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a138710bd61580324d23bc5e3df01f0b82aee0a76404d5dddae73d9e4c723f"}, + {file = "fastavro-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:903d97418120ca6b6a7f38a731166c1ccc2c4344ee5e0470d09eb1dc3687540a"}, + {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c443eeb99899d062dbf78c525e4614dd77e041a7688fa2710c224f4033f193ae"}, + {file = "fastavro-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ac26ab0774d1b2b7af6d8f4300ad20bbc4b5469e658a02931ad13ce23635152f"}, + {file = "fastavro-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:cf7247874c22be856ba7d1f46a0f6e0379a6025f1a48a7da640444cbac6f570b"}, + {file = "fastavro-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:68912f2020e1b3d70557260b27dd85fb49a4fc6bfab18d384926127452c1da4c"}, + {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6925ce137cdd78e109abdb0bc33aad55de6c9f2d2d3036b65453128f2f5f5b92"}, + {file = "fastavro-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b928cd294e36e35516d0deb9e104b45be922ba06940794260a4e5dbed6c192a"}, + {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:90c9838bc4c991ffff5dd9d88a0cc0030f938b3fdf038cdf6babde144b920246"}, + {file = "fastavro-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:eca6e54da571b06a3c5a72dbb7212073f56c92a6fbfbf847b91c347510f8a426"}, + {file = "fastavro-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4b02839ac261100cefca2e2ad04cdfedc556cb66b5ec735e0db428e74b399de"}, + {file = "fastavro-1.9.4-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4451ee9a305a73313a1558d471299f3130e4ecc10a88bf5742aa03fb37e042e6"}, + {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8524fccfb379565568c045d29b2ebf71e1f2c0dd484aeda9fe784ef5febe1a8"}, + {file = "fastavro-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d0a00a6e09baa20f6f038d7a2ddcb7eef0e7a9980e947a018300cb047091b8"}, + {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:23d7e5b29c9bf6f26e8be754b2c8b919838e506f78ef724de7d22881696712fc"}, + {file = "fastavro-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e6ab3ee53944326460edf1125b2ad5be2fadd80f7211b13c45fa0c503b4cf8d"}, + {file = "fastavro-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:64d335ec2004204c501f8697c385d0a8f6b521ac82d5b30696f789ff5bc85f3c"}, + {file = "fastavro-1.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:7e05f44c493e89e73833bd3ff3790538726906d2856f59adc8103539f4a1b232"}, + {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:253c63993250bff4ee7b11fb46cf3a4622180a783bedc82a24c6fdcd1b10ca2a"}, + {file = "fastavro-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24d6942eb1db14640c2581e0ecd1bbe0afc8a83731fcd3064ae7f429d7880cb7"}, + {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d47bb66be6091cd48cfe026adcad11c8b11d7d815a2949a1e4ccf03df981ca65"}, + {file = "fastavro-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c293897f12f910e58a1024f9c77f565aa8e23b36aafda6ad8e7041accc57a57f"}, + {file = "fastavro-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:f05d2afcb10a92e2a9e580a3891f090589b3e567fdc5641f8a46a0b084f120c3"}, + {file = "fastavro-1.9.4.tar.gz", hash = "sha256:56b8363e360a1256c94562393dc7f8611f3baf2b3159f64fb2b9c6b87b14e876"}, ] [package.extras] @@ -1383,18 +1339,18 @@ zstandard = ["zstandard"] [[package]] name = "filelock" -version = "3.13.1" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] @@ -1485,13 +1441,13 @@ files = [ [[package]] name = "fsspec" -version = "2023.12.2" +version = "2024.5.0" description = "File-system specification" optional = true python-versions = ">=3.8" files = [ - {file = "fsspec-2023.12.2-py3-none-any.whl", hash = "sha256:d800d87f72189a745fa3d6b033b9dc4a34ad069f60ca60b943a63599f5501960"}, - {file = "fsspec-2023.12.2.tar.gz", hash = "sha256:8548d39e8810b59c38014934f6b31e57f40c1b20f911f4cc2b85389c7e9bf0cb"}, + {file = "fsspec-2024.5.0-py3-none-any.whl", hash = "sha256:e0fdbc446d67e182f49a70b82cf7889028a63588fde6b222521f10937b2b670c"}, + {file = "fsspec-2024.5.0.tar.gz", hash = "sha256:1d021b0b0f933e3b3029ed808eb400c08ba101ca2de4b3483fbc9ca23fcee94a"}, ] [package.extras] @@ -1499,7 +1455,7 @@ abfs = ["adlfs"] adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] +dev = ["pre-commit", "ruff"] dropbox = ["dropbox", "dropboxdrivefs", "requests"] full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] fuse = ["fusepy"] @@ -1509,13 +1465,16 @@ github = ["requests"] gs = ["gcsfs"] gui = ["panel"] hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "requests"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] libarchive = ["libarchive-c"] oci = ["ocifs"] s3 = ["s3fs"] sftp = ["paramiko"] smb = ["smbprotocol"] ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] [[package]] @@ -1567,13 +1526,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [[package]] name = "google-api-core" -version = "2.17.1" +version = "2.19.0" description = "Google API client core library" optional = true python-versions = ">=3.7" files = [ - {file = "google-api-core-2.17.1.tar.gz", hash = "sha256:9df18a1f87ee0df0bc4eea2770ebc4228392d8cc4066655b320e2cfccb15db95"}, - {file = "google_api_core-2.17.1-py3-none-any.whl", hash = "sha256:610c5b90092c360736baccf17bd3efbcb30dd380e7a6dc28a71059edb8bd0d8e"}, + {file = "google-api-core-2.19.0.tar.gz", hash = "sha256:cf1b7c2694047886d2af1128a03ae99e391108a08804f87cfd35970e49c9cd10"}, + {file = "google_api_core-2.19.0-py3-none-any.whl", hash = "sha256:8661eec4078c35428fd3f69a2c7ee29e342896b70f01d1a1cbcb334372dd6251"}, ] [package.dependencies] @@ -1587,6 +1546,7 @@ grpcio-status = [ {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, ] +proto-plus = ">=1.22.3,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" requests = ">=2.18.0,<3.0.0.dev0" @@ -1597,13 +1557,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] name = "google-auth" -version = "2.28.2" +version = "2.29.0" description = "Google Authentication Library" optional = true python-versions = ">=3.7" files = [ - {file = "google-auth-2.28.2.tar.gz", hash = "sha256:80b8b4969aa9ed5938c7828308f20f035bc79f9d8fb8120bf9dc8db20b41ba30"}, - {file = "google_auth-2.28.2-py2.py3-none-any.whl", hash = "sha256:9fd67bbcd40f16d9d42f950228e9cf02a2ded4ae49198b27432d0cded5a74c38"}, + {file = "google-auth-2.29.0.tar.gz", hash = "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360"}, + {file = "google_auth-2.29.0-py2.py3-none-any.whl", hash = "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415"}, ] [package.dependencies] @@ -1730,13 +1690,13 @@ test = ["objgraph", "psutil"] [[package]] name = "griffe" -version = "0.42.1" +version = "0.45.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.42.1-py3-none-any.whl", hash = "sha256:7e805e35617601355edcac0d3511cedc1ed0cb1f7645e2d336ae4b05bbae7b3b"}, - {file = "griffe-0.42.1.tar.gz", hash = "sha256:57046131384043ed078692b85d86b76568a686266cc036b9b56b704466f803ce"}, + {file = "griffe-0.45.0-py3-none-any.whl", hash = "sha256:90fe5c90e1b0ca7dd6fee78f9009f4e01b37dbc9ab484a9b2c1578915db1e571"}, + {file = "griffe-0.45.0.tar.gz", hash = "sha256:85cb2868d026ea51c89bdd589ad3ccc94abc5bd8d5d948e3d4450778a2a05b4a"}, ] [package.dependencies] @@ -1744,84 +1704,76 @@ colorama = ">=0.4" [[package]] name = "grpcio" -version = "1.62.1" +version = "1.63.0" description = "HTTP/2-based RPC framework" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "grpcio-1.62.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:179bee6f5ed7b5f618844f760b6acf7e910988de77a4f75b95bbfaa8106f3c1e"}, - {file = "grpcio-1.62.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:48611e4fa010e823ba2de8fd3f77c1322dd60cb0d180dc6630a7e157b205f7ea"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b2a0e71b0a2158aa4bce48be9f8f9eb45cbd17c78c7443616d00abbe2a509f6d"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbe80577c7880911d3ad65e5ecc997416c98f354efeba2f8d0f9112a67ed65a5"}, - {file = "grpcio-1.62.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58f6c693d446964e3292425e1d16e21a97a48ba9172f2d0df9d7b640acb99243"}, - {file = "grpcio-1.62.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:77c339403db5a20ef4fed02e4d1a9a3d9866bf9c0afc77a42234677313ea22f3"}, - {file = "grpcio-1.62.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b5a4ea906db7dec694098435d84bf2854fe158eb3cd51e1107e571246d4d1d70"}, - {file = "grpcio-1.62.1-cp310-cp310-win32.whl", hash = "sha256:4187201a53f8561c015bc745b81a1b2d278967b8de35f3399b84b0695e281d5f"}, - {file = "grpcio-1.62.1-cp310-cp310-win_amd64.whl", hash = "sha256:844d1f3fb11bd1ed362d3fdc495d0770cfab75761836193af166fee113421d66"}, - {file = "grpcio-1.62.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:833379943d1728a005e44103f17ecd73d058d37d95783eb8f0b28ddc1f54d7b2"}, - {file = "grpcio-1.62.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:c7fcc6a32e7b7b58f5a7d27530669337a5d587d4066060bcb9dee7a8c833dfb7"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:fa7d28eb4d50b7cbe75bb8b45ed0da9a1dc5b219a0af59449676a29c2eed9698"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f7135c3de2f298b833be8b4ae20cafe37091634e91f61f5a7eb3d61ec6f660"}, - {file = "grpcio-1.62.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71f11fd63365ade276c9d4a7b7df5c136f9030e3457107e1791b3737a9b9ed6a"}, - {file = "grpcio-1.62.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4b49fd8fe9f9ac23b78437da94c54aa7e9996fbb220bac024a67469ce5d0825f"}, - {file = "grpcio-1.62.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:482ae2ae78679ba9ed5752099b32e5fe580443b4f798e1b71df412abf43375db"}, - {file = "grpcio-1.62.1-cp311-cp311-win32.whl", hash = "sha256:1faa02530b6c7426404372515fe5ddf66e199c2ee613f88f025c6f3bd816450c"}, - {file = "grpcio-1.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bd90b8c395f39bc82a5fb32a0173e220e3f401ff697840f4003e15b96d1befc"}, - {file = "grpcio-1.62.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:b134d5d71b4e0837fff574c00e49176051a1c532d26c052a1e43231f252d813b"}, - {file = "grpcio-1.62.1-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d1f6c96573dc09d50dbcbd91dbf71d5cf97640c9427c32584010fbbd4c0e0037"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:359f821d4578f80f41909b9ee9b76fb249a21035a061a327f91c953493782c31"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a485f0c2010c696be269184bdb5ae72781344cb4e60db976c59d84dd6354fac9"}, - {file = "grpcio-1.62.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b50b09b4dc01767163d67e1532f948264167cd27f49e9377e3556c3cba1268e1"}, - {file = "grpcio-1.62.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3227c667dccbe38f2c4d943238b887bac588d97c104815aecc62d2fd976e014b"}, - {file = "grpcio-1.62.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3952b581eb121324853ce2b191dae08badb75cd493cb4e0243368aa9e61cfd41"}, - {file = "grpcio-1.62.1-cp312-cp312-win32.whl", hash = "sha256:83a17b303425104d6329c10eb34bba186ffa67161e63fa6cdae7776ff76df73f"}, - {file = "grpcio-1.62.1-cp312-cp312-win_amd64.whl", hash = "sha256:6696ffe440333a19d8d128e88d440f91fb92c75a80ce4b44d55800e656a3ef1d"}, - {file = "grpcio-1.62.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:e3393b0823f938253370ebef033c9fd23d27f3eae8eb9a8f6264900c7ea3fb5a"}, - {file = "grpcio-1.62.1-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:83e7ccb85a74beaeae2634f10eb858a0ed1a63081172649ff4261f929bacfd22"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:882020c87999d54667a284c7ddf065b359bd00251fcd70279ac486776dbf84ec"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a10383035e864f386fe096fed5c47d27a2bf7173c56a6e26cffaaa5a361addb1"}, - {file = "grpcio-1.62.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:960edebedc6b9ada1ef58e1c71156f28689978188cd8cff3b646b57288a927d9"}, - {file = "grpcio-1.62.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:23e2e04b83f347d0aadde0c9b616f4726c3d76db04b438fd3904b289a725267f"}, - {file = "grpcio-1.62.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:978121758711916d34fe57c1f75b79cdfc73952f1481bb9583399331682d36f7"}, - {file = "grpcio-1.62.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9084086190cc6d628f282e5615f987288b95457292e969b9205e45b442276407"}, - {file = "grpcio-1.62.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:22bccdd7b23c420a27fd28540fb5dcbc97dc6be105f7698cb0e7d7a420d0e362"}, - {file = "grpcio-1.62.1-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:8999bf1b57172dbc7c3e4bb3c732658e918f5c333b2942243f10d0d653953ba9"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d9e52558b8b8c2f4ac05ac86344a7417ccdd2b460a59616de49eb6933b07a0bd"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1714e7bc935780bc3de1b3fcbc7674209adf5208ff825799d579ffd6cd0bd505"}, - {file = "grpcio-1.62.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8842ccbd8c0e253c1f189088228f9b433f7a93b7196b9e5b6f87dba393f5d5d"}, - {file = "grpcio-1.62.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1f1e7b36bdff50103af95a80923bf1853f6823dd62f2d2a2524b66ed74103e49"}, - {file = "grpcio-1.62.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bba97b8e8883a8038606480d6b6772289f4c907f6ba780fa1f7b7da7dfd76f06"}, - {file = "grpcio-1.62.1-cp38-cp38-win32.whl", hash = "sha256:a7f615270fe534548112a74e790cd9d4f5509d744dd718cd442bf016626c22e4"}, - {file = "grpcio-1.62.1-cp38-cp38-win_amd64.whl", hash = "sha256:e6c8c8693df718c5ecbc7babb12c69a4e3677fd11de8886f05ab22d4e6b1c43b"}, - {file = "grpcio-1.62.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:73db2dc1b201d20ab7083e7041946910bb991e7e9761a0394bbc3c2632326483"}, - {file = "grpcio-1.62.1-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:407b26b7f7bbd4f4751dbc9767a1f0716f9fe72d3d7e96bb3ccfc4aace07c8de"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f8de7c8cef9261a2d0a62edf2ccea3d741a523c6b8a6477a340a1f2e417658de"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd5c8a1af40ec305d001c60236308a67e25419003e9bb3ebfab5695a8d0b369"}, - {file = "grpcio-1.62.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be0477cb31da67846a33b1a75c611f88bfbcd427fe17701b6317aefceee1b96f"}, - {file = "grpcio-1.62.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:60dcd824df166ba266ee0cfaf35a31406cd16ef602b49f5d4dfb21f014b0dedd"}, - {file = "grpcio-1.62.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:973c49086cabab773525f6077f95e5a993bfc03ba8fc32e32f2c279497780585"}, - {file = "grpcio-1.62.1-cp39-cp39-win32.whl", hash = "sha256:12859468e8918d3bd243d213cd6fd6ab07208195dc140763c00dfe901ce1e1b4"}, - {file = "grpcio-1.62.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7209117bbeebdfa5d898205cc55153a51285757902dd73c47de498ad4d11332"}, - {file = "grpcio-1.62.1.tar.gz", hash = "sha256:6c455e008fa86d9e9a9d85bb76da4277c0d7d9668a3bfa70dbe86e9f3c759947"}, + {file = "grpcio-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c"}, + {file = "grpcio-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d"}, + {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b"}, + {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357"}, + {file = "grpcio-1.63.0-cp310-cp310-win32.whl", hash = "sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d"}, + {file = "grpcio-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a"}, + {file = "grpcio-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3"}, + {file = "grpcio-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2"}, + {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7"}, + {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f"}, + {file = "grpcio-1.63.0-cp311-cp311-win32.whl", hash = "sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c"}, + {file = "grpcio-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434"}, + {file = "grpcio-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57"}, + {file = "grpcio-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2"}, + {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0"}, + {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9"}, + {file = "grpcio-1.63.0-cp312-cp312-win32.whl", hash = "sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b"}, + {file = "grpcio-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434"}, + {file = "grpcio-1.63.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae"}, + {file = "grpcio-1.63.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91"}, + {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85"}, + {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda"}, + {file = "grpcio-1.63.0-cp38-cp38-win32.whl", hash = "sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3"}, + {file = "grpcio-1.63.0-cp38-cp38-win_amd64.whl", hash = "sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a"}, + {file = "grpcio-1.63.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce"}, + {file = "grpcio-1.63.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a"}, + {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3"}, + {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d"}, + {file = "grpcio-1.63.0-cp39-cp39-win32.whl", hash = "sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a"}, + {file = "grpcio-1.63.0-cp39-cp39-win_amd64.whl", hash = "sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d"}, + {file = "grpcio-1.63.0.tar.gz", hash = "sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.62.1)"] +protobuf = ["grpcio-tools (>=1.63.0)"] [[package]] name = "grpcio-status" -version = "1.62.1" +version = "1.62.2" description = "Status proto mapping for gRPC" optional = true python-versions = ">=3.6" files = [ - {file = "grpcio-status-1.62.1.tar.gz", hash = "sha256:3431c8abbab0054912c41df5c72f03ddf3b7a67be8a287bb3c18a3456f96ff77"}, - {file = "grpcio_status-1.62.1-py3-none-any.whl", hash = "sha256:af0c3ab85da31669f21749e8d53d669c061ebc6ce5637be49a46edcb7aa8ab17"}, + {file = "grpcio-status-1.62.2.tar.gz", hash = "sha256:62e1bfcb02025a1cd73732a2d33672d3e9d0df4d21c12c51e0bbcaf09bab742a"}, + {file = "grpcio_status-1.62.2-py3-none-any.whl", hash = "sha256:206ddf0eb36bc99b033f03b2c8e95d319f0044defae9b41ae21408e7e0cda48f"}, ] [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.62.1" +grpcio = ">=1.62.2" protobuf = ">=4.21.6" [[package]] @@ -1837,13 +1789,13 @@ files = [ [[package]] name = "htmldate" -version = "1.7.0" +version = "1.8.1" description = "Fast and robust extraction of original and updated publication dates from URLs and web pages." optional = true python-versions = ">=3.6" files = [ - {file = "htmldate-1.7.0-py3-none-any.whl", hash = "sha256:d82265ac19571b78985d53585b63917d2d2f2c6b96fc9b5cd1928f2777636832"}, - {file = "htmldate-1.7.0.tar.gz", hash = "sha256:02a800dd224cbf74bf483b042f64e14f57ba0e40c6b4404b284e98bc6c30b68d"}, + {file = "htmldate-1.8.1-py3-none-any.whl", hash = "sha256:b1209dedfa7bc9bb4d0b812a3f0983ea5d39f1bdfe21745659ad26af4f8b7f32"}, + {file = "htmldate-1.8.1.tar.gz", hash = "sha256:caf1686cf75c61dd1f061ede5d7a46e759b15d5f9987cd8e13c8c4237511263d"}, ] [package.dependencies] @@ -1859,13 +1811,13 @@ speed = ["backports-datetime-fromisoformat", "faust-cchardet (>=2.1.19)", "urlli [[package]] name = "httpcore" -version = "1.0.2" +version = "1.0.5" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.2-py3-none-any.whl", hash = "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7"}, - {file = "httpcore-1.0.2.tar.gz", hash = "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] [package.dependencies] @@ -1876,17 +1828,17 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.23.0)"] +trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httpx" -version = "0.26.0" +version = "0.27.0" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"}, - {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"}, + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, ] [package.dependencies] @@ -1902,15 +1854,26 @@ cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +[[package]] +name = "httpx-sse" +version = "0.4.0" +description = "Consume Server-Sent Event (SSE) messages with HTTPX." +optional = true +python-versions = ">=3.8" +files = [ + {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, + {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, +] + [[package]] name = "huggingface-hub" -version = "0.20.3" +version = "0.23.0" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = true python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.20.3-py3-none-any.whl", hash = "sha256:d988ae4f00d3e307b0c80c6a05ca6dbb7edba8bba3079f74cda7d9c2e562a7b6"}, - {file = "huggingface_hub-0.20.3.tar.gz", hash = "sha256:94e7f8e074475fbc67d6a71957b678e1b4a74ff1b64a644fd6cbb83da962d05d"}, + {file = "huggingface_hub-0.23.0-py3-none-any.whl", hash = "sha256:075c30d48ee7db2bba779190dc526d2c11d422aed6f9044c5e2fdc2c432fdb91"}, + {file = "huggingface_hub-0.23.0.tar.gz", hash = "sha256:7126dedd10a4c6fac796ced4d87a8cf004efc722a5125c2c09299017fa366fa9"}, ] [package.dependencies] @@ -1923,26 +1886,28 @@ tqdm = ">=4.42.1" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -inference = ["aiohttp", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)"] -quality = ["mypy (==1.5.1)", "ruff (>=0.1.3)"] +hf-transfer = ["hf-transfer (>=0.1.4)"] +inference = ["aiohttp", "minijinja (>=1.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] tensorflow = ["graphviz", "pydot", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["torch"] +tensorflow-testing = ["keras (<3.0)", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors", "torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] [[package]] name = "identify" -version = "2.5.33" +version = "2.5.36" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, - {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -1950,33 +1915,33 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] name = "importlib-metadata" -version = "6.11.0" +version = "7.1.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, - {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "iniconfig" @@ -2028,13 +1993,13 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa [[package]] name = "jaraco-classes" -version = "3.3.0" +version = "3.4.0" description = "Utility functions for Python class constructs" optional = false python-versions = ">=3.8" files = [ - {file = "jaraco.classes-3.3.0-py3-none-any.whl", hash = "sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb"}, - {file = "jaraco.classes-3.3.0.tar.gz", hash = "sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621"}, + {file = "jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790"}, + {file = "jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd"}, ] [package.dependencies] @@ -2042,7 +2007,43 @@ more-itertools = "*" [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "jaraco-context" +version = "5.3.0" +description = "Useful decorators and context managers" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jaraco.context-5.3.0-py3-none-any.whl", hash = "sha256:3e16388f7da43d384a1a7cd3452e72e14732ac9fe459678773a3608a812bf266"}, + {file = "jaraco.context-5.3.0.tar.gz", hash = "sha256:c2f67165ce1f9be20f32f650f25d8edfc1646a8aeee48ae06fb35f90763576d2"}, +] + +[package.dependencies] +"backports.tarfile" = {version = "*", markers = "python_version < \"3.12\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["portend", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "jaraco-functools" +version = "4.0.1" +description = "Functools like those found in stdlib" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jaraco.functools-4.0.1-py3-none-any.whl", hash = "sha256:3b24ccb921d6b593bdceb56ce14799204f473976e2a9d4b15b04d0f2c2326664"}, + {file = "jaraco_functools-4.0.1.tar.gz", hash = "sha256:d33fa765374c0611b52f8b3a795f8900869aa88c84769d4d1746cd68fb28c3e8"}, +] + +[package.dependencies] +more-itertools = "*" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["jaraco.classes", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [[package]] name = "jedi" @@ -2080,13 +2081,13 @@ trio = ["async_generator", "trio"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -2119,162 +2120,130 @@ files = [ [[package]] name = "justext" -version = "3.0.0" +version = "3.0.1" description = "Heuristic based boilerplate removal tool" optional = true python-versions = "*" files = [ - {file = "jusText-3.0.0-py2.py3-none-any.whl", hash = "sha256:86b48f5b1d99505acd072f5831def6cd3f1306043651c524a1c609e62e3544e4"}, - {file = "jusText-3.0.0.tar.gz", hash = "sha256:7640e248218795f6be65f6c35fe697325a3280fcb4675d1525bcdff2b86faadf"}, + {file = "jusText-3.0.1-py2.py3-none-any.whl", hash = "sha256:e0fb882dd7285415709f4b7466aed23d6b98b7b89404c36e8a2e730facfed02b"}, + {file = "justext-3.0.1.tar.gz", hash = "sha256:b6ed2fb6c5d21618e2e34b2295c4edfc0bcece3bd549ed5c8ef5a8d20f0b3451"}, ] [package.dependencies] -lxml = ">=4.4.2" +lxml = {version = ">=4.4.2", extras = ["html-clean"]} [[package]] name = "keyring" -version = "24.3.0" +version = "25.2.1" description = "Store and access your passwords safely." optional = false python-versions = ">=3.8" files = [ - {file = "keyring-24.3.0-py3-none-any.whl", hash = "sha256:4446d35d636e6a10b8bce7caa66913dd9eca5fd222ca03a3d42c38608ac30836"}, - {file = "keyring-24.3.0.tar.gz", hash = "sha256:e730ecffd309658a08ee82535a3b5ec4b4c8669a9be11efb66249d8e0aeb9a25"}, + {file = "keyring-25.2.1-py3-none-any.whl", hash = "sha256:2458681cdefc0dbc0b7eb6cf75d0b98e59f9ad9b2d4edd319d18f68bdca95e50"}, + {file = "keyring-25.2.1.tar.gz", hash = "sha256:daaffd42dbda25ddafb1ad5fec4024e5bbcfe424597ca1ca452b299861e49f1b"}, ] [package.dependencies] importlib-metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""} "jaraco.classes" = "*" +"jaraco.context" = "*" +"jaraco.functools" = "*" jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] completion = ["shtab (>=1.1.0)"] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[[package]] -name = "langcodes" -version = "3.3.0" -description = "Tools for labeling human languages with IETF language tags" -optional = true -python-versions = ">=3.6" -files = [ - {file = "langcodes-3.3.0-py3-none-any.whl", hash = "sha256:4d89fc9acb6e9c8fdef70bcdf376113a3db09b67285d9e1d534de6d8818e7e69"}, - {file = "langcodes-3.3.0.tar.gz", hash = "sha256:794d07d5a28781231ac335a1561b8442f8648ca07cd518310aeb45d6f0807ef6"}, -] - -[package.extras] -data = ["language-data (>=1.1,<2.0)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [[package]] name = "lxml" -version = "4.9.4" +version = "5.1.1" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, +python-versions = ">=3.6" +files = [ + {file = "lxml-5.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9cc30dc3c49ea914fa62ea73b57198b541cf2cd522fcf2b9559f99a24df769bb"}, + {file = "lxml-5.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1d0824e3ddb969fe1337b1bc45cf0bec8095b342f36903f41a74b7769cc8c73"}, + {file = "lxml-5.1.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4958c378d9387c45ef8c4859495cf6be76f863e4e3b31494f6ec7f2c48d3b8e3"}, + {file = "lxml-5.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aff34295a6c87638a1f1905355cf3a97e4026c45c0cf3bb6ed6bc35b885b4a33"}, + {file = "lxml-5.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b174885fd2cabd1ad48585296f495e25d607f02db99668c08b2afaceb668e21b"}, + {file = "lxml-5.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1b0611bba10d6f5467b86673e8f6bba4de0d00f7d111eea843bc872abfe11b5c"}, + {file = "lxml-5.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:adff469b7dbfe9f3babc9e4479449ee97085ba70ac492fbe5f0f7217940c6731"}, + {file = "lxml-5.1.1-cp310-cp310-win32.whl", hash = "sha256:99bcdf665576a26b44c7ce767d76b769a4418b0a13cda8300b26fb7b2647bd5b"}, + {file = "lxml-5.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:3da8db291568c27b2bb248dcfc8838ca3149f373a24e204bcd1c2c89e2813d14"}, + {file = "lxml-5.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:906966babd374fdfe46e130fc656488003f0d0d63b7cba612aa5a796c8804283"}, + {file = "lxml-5.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9c03f3715c68fc707d9383d56e482d95d198ba07cb3dad4aee9e5a5ca06b2536"}, + {file = "lxml-5.1.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d26243d994d4077a50056e9008848e5b421be0c6f0fd4e932a9463e1d89fc42b"}, + {file = "lxml-5.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de00750318ae6869b9dfa6429a4f82b8ecad043049414547474d09db549c2ee"}, + {file = "lxml-5.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29b2771b4eec4e85063f10294facdd9829d010e6cc9668040d0cf936dc56733a"}, + {file = "lxml-5.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d9358f7268c161dc0a1c3216018f26c04954b5dd47ba6dead79da6598f4725d4"}, + {file = "lxml-5.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8a943826e7a9254eed661a7134fcde3c832a9fecd989d0f47c6e08c7b769cb2c"}, + {file = "lxml-5.1.1-cp311-cp311-win32.whl", hash = "sha256:74d0967c6f91eec6fe91159f9e8ccb3720fa0fbf9f462109c7bef62550df397c"}, + {file = "lxml-5.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:26974096654241df08a30dc2eb0e139c1ad5653660aa4b2ced66000230e96c14"}, + {file = "lxml-5.1.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:55e13a19829dcdbf0c5233062977aeb6daf72e65124909128045976f659164e8"}, + {file = "lxml-5.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:adedfb61be862f48907218e3a24bf051fd2ecca53358f3958b0bdb17d7881c20"}, + {file = "lxml-5.1.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77425482e4311d1cff119a2b5ab26c52ec209d2a3d728a54db3223ab91995e20"}, + {file = "lxml-5.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d380f183bd03ab827899753ea96dabe27d2025eb0bfd4f2ac0eee4afa0f351d"}, + {file = "lxml-5.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8682af96b5ad5093aab9eee5e4ff24cb7a9796c78699d914dd456ebfe7484a6"}, + {file = "lxml-5.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68eed33377a9925aed7ba56c8611d50aaa1e45638c07a92b4b4b0a0436cc2dd2"}, + {file = "lxml-5.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7c1d2f6e9c7a1c4478146ee38d16dbe0eb3be998424bc0f01346c671c38b86d"}, + {file = "lxml-5.1.1-cp312-cp312-win32.whl", hash = "sha256:81107c8de3e463052ae8fd05fd31b97c371c7a9ce4a189b8bb5f45b0b3545fb9"}, + {file = "lxml-5.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:0e46181d15fae102c53621bed9356b7a599a1e837b978c934a350dd00842b1d9"}, + {file = "lxml-5.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:48dd28b9f410329de709a4bb6169c58f2cd8bff25f5a48d647678ec9b8a40c65"}, + {file = "lxml-5.1.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bf7e57dbe7b3c605e63849d9c8dae246a6ab9002223c57cd3f3dec7c3a0a8e6d"}, + {file = "lxml-5.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5020b3081030b5cfc8149eee231167aea4ff68df73a610e1d542809e1f11fde7"}, + {file = "lxml-5.1.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77842b79b63c83c04dcfe2f045c78e15e4d97c86838eabd2e6518c1ed97e3900"}, + {file = "lxml-5.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:666432274881cb2535e71dbe745e08ef10fe25c81fbb1a6b1e3c973177823b0c"}, + {file = "lxml-5.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a103426e809640a2d985062d2f4b28db2f0fe4469ff72a67cb31fa70613158f1"}, + {file = "lxml-5.1.1-cp36-cp36m-win32.whl", hash = "sha256:95a51324a55000c55f4ab79e1f7f1e0bc42b7a24e39633f79542753023a9d4b7"}, + {file = "lxml-5.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:bd46b5b19ac969de8e87fb3d04414641d12ee489e2ea6cc75344087829b31c63"}, + {file = "lxml-5.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:59ca75cfcf646ff64aa19ca4e7fd2a0fde77268d5a87856525d9e0b69b77d0c4"}, + {file = "lxml-5.1.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55ddc73dec971277b181a6d1a6abdd34f50e4511e1e60f6b4ebe22cbaad05bb"}, + {file = "lxml-5.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56f1e813ff660d031c77edba90a068d57e47ae93a9e811330fc88946fa68af9a"}, + {file = "lxml-5.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43f21b5929185fa4560836942020bb00a0fcdec9f67be98cac1a4b99501757c1"}, + {file = "lxml-5.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1528b37e83c3aeecb438e76e5be6279b353275560125a9c3f4d74642c5f110f9"}, + {file = "lxml-5.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2992480a25434d2df31413136ef87effab14d43b07f1f54c5012c4f6c7530144"}, + {file = "lxml-5.1.1-cp37-cp37m-win32.whl", hash = "sha256:1d0270d33fbde6e1c6758ff58e2e284144f5331aa05dfe7f44ceafdf4e9d31aa"}, + {file = "lxml-5.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:dec3491aa69a91ed07f5e6bc033e2b1a9424447ad5312ee69ac973e94d79083a"}, + {file = "lxml-5.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bd2595ebe95214446e00a1ab94571f778b126e17736ea222c07505c4e092289"}, + {file = "lxml-5.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfbdadc3cfe552331ecb0bbdcabf148d1697c73aa4321151e0e6c1704eeb76a7"}, + {file = "lxml-5.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52358249292bc155af681a9240ec3d944c1195f0124aa10ec4e3635adc1e10a1"}, + {file = "lxml-5.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036b36c48cd775e4fd2084b34ae62ffeefa7a01f955f5a5b816f9257c308cfc0"}, + {file = "lxml-5.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f05ab8cea65363d0cc7ce818f42407504b6d94ca885b4cde0270f021e2f4ef61"}, + {file = "lxml-5.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d94a28c16cc430b68c374b37b8bb536ba5f0a4a080be0e1daa8310c44a00a75c"}, + {file = "lxml-5.1.1-cp38-cp38-win32.whl", hash = "sha256:9113fe65a62f834b8e994c8f48e7b2179bf81878c0ec80ad7feba51ab9417663"}, + {file = "lxml-5.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:acff17e0cd5344677757a152631d8411efac6a84e4476d60123a9b33f5d6c511"}, + {file = "lxml-5.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a94a97380ad689d751eb0a1e1ccd2a0622c5141771a31abe9a16075f80027e95"}, + {file = "lxml-5.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f4d37b3f8d2d44493edce3d65ac987127bababd8ae208a6f0d7d260852346e"}, + {file = "lxml-5.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5940f188189956ccb3d1adb413001ada79f2d2b81087d2612a0cc4a1197eed"}, + {file = "lxml-5.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50007f4e94dc4e38030487a8b6c4af87a2d51ed059c7b74b29e3dd937cb1dfe1"}, + {file = "lxml-5.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305d0469177fd78a0a9aa2231c60218266bb85d4b7955f9b67dab628c9267fd"}, + {file = "lxml-5.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:13b73d78a8023203722cf98e9ea0b222da83110d1d5ef437ef8782a7755b4586"}, + {file = "lxml-5.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bc6904519dd1f92eb82f7d49814a33bbc444d0b66b1438e76daf3f79ef4aa38f"}, + {file = "lxml-5.1.1-cp39-cp39-win32.whl", hash = "sha256:04ef231dde88294a5499f61a74cdc42af97d8d5ecec1b0a645d1c7d436942789"}, + {file = "lxml-5.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:071e5123d1eca861708c4be5b54e4d88923fa33fab3aa02722e907518b07071c"}, + {file = "lxml-5.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:19c6bc7476eeac4598ff925ae98597610109e21af4cd7ab1e060efcfc4b1c6e2"}, + {file = "lxml-5.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20cd17eb21f5ae54da96791c49e1fbd3327bf66b2c00556cdf8d0552c2270f92"}, + {file = "lxml-5.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a02ed1ebc469734dbfed5b688f709334de19e7a333cba7ae187b17d2b2c1d4ff"}, + {file = "lxml-5.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:161838cb95c97e8d76d01e544a3570b52ab6b863f4897a90e1f073bb110a75ba"}, + {file = "lxml-5.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1abbf2249467a37da45fb2d7ff37e578dfc9813f142800e58db9da761cb7899"}, + {file = "lxml-5.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6c49eb5deaed1990fde5b5d80d6800aec1b5fd6113346b5f11068d988f68f2c4"}, + {file = "lxml-5.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:60ceffdca5d637fe8ee95c7f06733a6c9646e07da80997efe3af2d4b4f366e36"}, + {file = "lxml-5.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a76a7b35e7660c74eb3f943c19f5f78c882dceab890cf8017027b6100b79ad8e"}, + {file = "lxml-5.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5dcb373720b70aa05419e508265dd86f06886ca0388967f6f024fbc4d551379f"}, + {file = "lxml-5.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3641bc124b037921de4220538a5ebb52354fd2799fc2bbfb335d28096063c7d6"}, + {file = "lxml-5.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a6e9b34f59c9755aa279c652e1c48c333c665d05a88afcd8e5ff0bde86f3b14"}, + {file = "lxml-5.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:318847c165063549c8fda6b162a0d068689b10deb825cb3859caef69fddaaaff"}, + {file = "lxml-5.1.1.tar.gz", hash = "sha256:42a8aa957e98bd8b884a8142175ec24ce4ef0a57760e8879f193bfe64b757ca9"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] +source = ["Cython (>=3.0.9)"] [[package]] name = "mail-parser" @@ -2350,82 +2319,82 @@ six = ">=1.15,<2" [[package]] name = "markupsafe" -version = "2.1.4" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-win32.whl", hash = "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0"}, - {file = "MarkupSafe-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-win32.whl", hash = "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74"}, - {file = "MarkupSafe-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-win32.whl", hash = "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475"}, - {file = "MarkupSafe-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-win32.whl", hash = "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0"}, - {file = "MarkupSafe-2.1.4-cp37-cp37m-win_amd64.whl", hash = "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-win32.whl", hash = "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a"}, - {file = "MarkupSafe-2.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-win32.whl", hash = "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6"}, - {file = "MarkupSafe-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959"}, - {file = "MarkupSafe-2.1.4.tar.gz", hash = "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] name = "marqo" -version = "3.0.0" +version = "3.4.0" description = "Tensor search for humans" optional = true python-versions = ">=3" files = [ - {file = "marqo-3.0.0-py3-none-any.whl", hash = "sha256:6b3e2135799fdc0eb0af18fc947cfc13222dccaaa16450fe1af27d89f6331705"}, - {file = "marqo-3.0.0.tar.gz", hash = "sha256:72179435ac7277ca65de3ad1e6c699eedb4cb06de4e568c4280eb4469ab0fcc5"}, + {file = "marqo-3.4.0-py3-none-any.whl", hash = "sha256:4b1b70f841596f6ae13bab61646286b0a1b5792e0e31815f757c15286fef0570"}, + {file = "marqo-3.4.0.tar.gz", hash = "sha256:d1a0ccc8b938c456e8ed56c2326bcff2b7a4d039496a24394b29d67dafb61b64"}, ] [package.dependencies] @@ -2437,22 +2406,21 @@ urllib3 = ">=1.26.0,<2.0.0" [[package]] name = "marshmallow" -version = "3.20.2" +version = "3.21.2" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.8" files = [ - {file = "marshmallow-3.20.2-py3-none-any.whl", hash = "sha256:c21d4b98fee747c130e6bc8f45c4b3199ea66bc00c12ee1f639f0aeca034d5e9"}, - {file = "marshmallow-3.20.2.tar.gz", hash = "sha256:4c1daff273513dc5eb24b219a8035559dc573c8f322558ef85f5438ddd1236dd"}, + {file = "marshmallow-3.21.2-py3-none-any.whl", hash = "sha256:70b54a6282f4704d12c0a41599682c5c5450e843b9ec406308653b47c59648a1"}, + {file = "marshmallow-3.21.2.tar.gz", hash = "sha256:82408deadd8b33d56338d2182d455db632c6313aa2af61916672146bb32edc56"}, ] [package.dependencies] packaging = ">=17.0" [package.extras] -dev = ["pre-commit (>=2.4,<4.0)", "pytest", "pytz", "simplejson", "tox"] -docs = ["alabaster (==0.7.15)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] -lint = ["pre-commit (>=2.4,<4.0)"] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] +docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.3.7)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] tests = ["pytest", "pytz", "simplejson"] [[package]] @@ -2507,34 +2475,34 @@ files = [ [[package]] name = "mkdocs" -version = "1.5.3" +version = "1.6.0" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, - {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, + {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, + {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, ] [package.dependencies] click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" -markdown = ">=3.2.1" +markdown = ">=3.3.6" markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" packaging = ">=20.5" pathspec = ">=0.11.1" -platformdirs = ">=2.2.0" pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] [[package]] name = "mkdocs-autorefs" @@ -2566,6 +2534,23 @@ files = [ [package.dependencies] mkdocs = ">=1.0.3" +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" + [[package]] name = "mkdocs-glightbox" version = "0.3.7" @@ -2593,13 +2578,13 @@ mkdocs = ">=1.0.3" [[package]] name = "mkdocs-material" -version = "9.5.17" +version = "9.5.23" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.17-py3-none-any.whl", hash = "sha256:14a2a60119a785e70e765dd033e6211367aca9fc70230e577c1cf6a326949571"}, - {file = "mkdocs_material-9.5.17.tar.gz", hash = "sha256:06ae1275a72db1989cf6209de9e9ecdfbcfdbc24c58353877b2bb927dbe413e4"}, + {file = "mkdocs_material-9.5.23-py3-none-any.whl", hash = "sha256:ffd08a5beaef3cd135aceb58ded8b98bbbbf2b70e5b656f6a14a63c917d9b001"}, + {file = "mkdocs_material-9.5.23.tar.gz", hash = "sha256:4627fc3f15de2cba2bde9debc2fd59b9888ef494beabfe67eb352e23d14bf288"}, ] [package.dependencies] @@ -2607,7 +2592,7 @@ babel = ">=2.10,<3.0" colorama = ">=0.4,<1.0" jinja2 = ">=3.0,<4.0" markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<1.6.0" +mkdocs = ">=1.6,<2.0" mkdocs-material-extensions = ">=1.3,<2.0" paginate = ">=0.5,<1.0" pygments = ">=2.16,<3.0" @@ -2633,13 +2618,13 @@ files = [ [[package]] name = "mkdocs-section-index" -version = "0.3.8" +version = "0.3.9" description = "MkDocs plugin to allow clickable sections that lead to an index page" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs_section_index-0.3.8-py3-none-any.whl", hash = "sha256:823d298d78bc1e73e23678ff60889f3c369c2167b03dba73fea88bd0e268a60d"}, - {file = "mkdocs_section_index-0.3.8.tar.gz", hash = "sha256:bbd209f0da79441baf136ef3a9c40665bb9681d1fb62c73ca2f116fd1388a404"}, + {file = "mkdocs_section_index-0.3.9-py3-none-any.whl", hash = "sha256:5e5eb288e8d7984d36c11ead5533f376fdf23498f44e903929d72845b24dfe34"}, + {file = "mkdocs_section_index-0.3.9.tar.gz", hash = "sha256:b66128d19108beceb08b226ee1ba0981840d14baf8a652b6c59e650f3f92e4f8"}, ] [package.dependencies] @@ -2715,13 +2700,13 @@ files = [ [[package]] name = "moto" -version = "4.2.13" +version = "4.2.14" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "moto-4.2.13-py2.py3-none-any.whl", hash = "sha256:93e0fd13b624bd79115494f833308c3641b2be0fc9f4f18aa9264aa01f6168e0"}, - {file = "moto-4.2.13.tar.gz", hash = "sha256:01aef6a489a725c8d725bd3dc6f70ff1bedaee3e2641752e4b471ff0ede4b4d7"}, + {file = "moto-4.2.14-py2.py3-none-any.whl", hash = "sha256:6d242dbbabe925bb385ddb6958449e5c827670b13b8e153ed63f91dbdb50372c"}, + {file = "moto-4.2.14.tar.gz", hash = "sha256:8f9263ca70b646f091edcc93e97cda864a542e6d16ed04066b1370ed217bd190"}, ] [package.dependencies] @@ -2747,18 +2732,13 @@ awslambda = ["docker (>=3.0.0)"] batch = ["docker (>=3.0.0)"] cloudformation = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] cognitoidp = ["ecdsa (!=0.15)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] -ds = ["sshpubkeys (>=3.1.0)"] dynamodb = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.0)"] dynamodbstreams = ["docker (>=3.0.0)", "py-partiql-parser (==0.5.0)"] -ebs = ["sshpubkeys (>=3.1.0)"] ec2 = ["sshpubkeys (>=3.1.0)"] -efs = ["sshpubkeys (>=3.1.0)"] -eks = ["sshpubkeys (>=3.1.0)"] glue = ["pyparsing (>=3.0.7)"] iotdata = ["jsondiff (>=1.1.2)"] proxy = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=2.5.1)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "multipart", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] -resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "sshpubkeys (>=3.1.0)"] -route53resolver = ["sshpubkeys (>=3.1.0)"] +resourcegroupstaggingapi = ["PyYAML (>=5.1)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)"] s3 = ["PyYAML (>=5.1)", "py-partiql-parser (==0.5.0)"] s3crc32c = ["PyYAML (>=5.1)", "crc32c", "py-partiql-parser (==0.5.0)"] server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0)", "docker (>=3.0.0)", "ecdsa (!=0.15)", "flask (!=2.2.0,!=2.2.1)", "flask-cors", "graphql-core", "jsondiff (>=1.1.2)", "openapi-spec-validator (>=0.5.0)", "py-partiql-parser (==0.5.0)", "pyparsing (>=3.0.7)", "python-jose[cryptography] (>=3.1.0,<4.0.0)", "setuptools", "sshpubkeys (>=3.1.0)"] @@ -2767,96 +2747,112 @@ xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] [[package]] name = "multidict" -version = "6.0.4" +version = "6.0.5" description = "multidict implementation" optional = true python-versions = ">=3.7" files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] [[package]] name = "mypy-boto3-bedrock" -version = "1.34.0" -description = "Type annotations for boto3.Bedrock 1.34.0 service generated with mypy-boto3-builder 7.21.0" +version = "1.34.90" +description = "Type annotations for boto3.Bedrock 1.34.90 service generated with mypy-boto3-builder 7.23.2" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mypy-boto3-bedrock-1.34.0.tar.gz", hash = "sha256:2603ad9ef33473511401e9bc6ee1a0fbb8cd77a854331e0d0f062d60efff8973"}, - {file = "mypy_boto3_bedrock-1.34.0-py3-none-any.whl", hash = "sha256:9a1dc86638ebec478df43dd36676d52a444fdc42b700c2464113c6654c3d2384"}, + {file = "mypy_boto3_bedrock-1.34.90-py3-none-any.whl", hash = "sha256:36fbd11b6db51284891b6aa87d16653afa1f57a58e1181cdafcd99e67079d3ca"}, + {file = "mypy_boto3_bedrock-1.34.90.tar.gz", hash = "sha256:a8a71505c6aa268bd182259f79d26d9daa5ae3a27ff471394a424eef2afa78bb"}, ] [package.dependencies] @@ -2864,13 +2860,13 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-iam" -version = "1.34.8" -description = "Type annotations for boto3.IAM 1.34.8 service generated with mypy-boto3-builder 7.23.0" +version = "1.34.83" +description = "Type annotations for boto3.IAM 1.34.83 service generated with mypy-boto3-builder 7.23.2" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-boto3-iam-1.34.8.tar.gz", hash = "sha256:6faf68cf800182924687b6711b3f9afa8d940ad993f259a3b91e55e82892d641"}, - {file = "mypy_boto3_iam-1.34.8-py3-none-any.whl", hash = "sha256:0d13057a2141c5633b78ed0b1aed8f2f8a11a9c58a8a17a25622d966428a41b0"}, + {file = "mypy-boto3-iam-1.34.83.tar.gz", hash = "sha256:7261315616757ebf7509df0e9b091d5942e470eb51c4b23c662a06873a9a8eca"}, + {file = "mypy_boto3_iam-1.34.83-py3-none-any.whl", hash = "sha256:dec66a98e29ec1e36178c24b8ff57aab6b91230df97557363bbd90ec06874768"}, ] [package.dependencies] @@ -2878,13 +2874,13 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-opensearch" -version = "1.34.13" -description = "Type annotations for boto3.OpenSearchService 1.34.13 service generated with mypy-boto3-builder 7.23.0" +version = "1.34.95" +description = "Type annotations for boto3.OpenSearchService 1.34.95 service generated with mypy-boto3-builder 7.24.0" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-boto3-opensearch-1.34.13.tar.gz", hash = "sha256:a0ad105dbb19f2b30bf69e4702282f7e1772f83a3bfce3a386646c9b5c53b520"}, - {file = "mypy_boto3_opensearch-1.34.13-py3-none-any.whl", hash = "sha256:da502c66acc75050c56b9692627e79c4baba7e193801285ee1891d7f65193efd"}, + {file = "mypy_boto3_opensearch-1.34.95-py3-none-any.whl", hash = "sha256:ddec083f059886f8b3fc2c68bdf3cd810bbf75492a8fc19fef91f974963344e0"}, + {file = "mypy_boto3_opensearch-1.34.95.tar.gz", hash = "sha256:108c6aeb9cf557a6b3aa2346d2bd5842fb0032bdcb6cb8c0f23cda6ed349462f"}, ] [package.dependencies] @@ -2892,13 +2888,13 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-s3" -version = "1.34.14" -description = "Type annotations for boto3.S3 1.34.14 service generated with mypy-boto3-builder 7.21.0" +version = "1.34.105" +description = "Type annotations for boto3.S3 1.34.105 service generated with mypy-boto3-builder 7.24.0" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-boto3-s3-1.34.14.tar.gz", hash = "sha256:71c39ab0623cdb442d225b71c1783f6a513cff4c4a13505a2efbb2e3aff2e965"}, - {file = "mypy_boto3_s3-1.34.14-py3-none-any.whl", hash = "sha256:f9669ecd182d5bf3532f5f2dcc5e5237776afe157ad5a0b37b26d6bec5fcc432"}, + {file = "mypy_boto3_s3-1.34.105-py3-none-any.whl", hash = "sha256:95fbc6bcba2bb03c20a97cc5cf60ff66c6842c8c4fc4183c49bfa35905d5a1ee"}, + {file = "mypy_boto3_s3-1.34.105.tar.gz", hash = "sha256:a137bca9bbe86c0fe35bbf36a2d44ab62526f41bb683550dd6cfbb5a10ede832"}, ] [package.dependencies] @@ -2906,52 +2902,41 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} [[package]] name = "mypy-boto3-sagemaker" -version = "1.34.19" -description = "Type annotations for boto3.SageMaker 1.34.19 service generated with mypy-boto3-builder 7.23.1" +version = "1.34.103" +description = "Type annotations for boto3.SageMaker 1.34.103 service generated with mypy-boto3-builder 7.24.0" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-boto3-sagemaker-1.34.19.tar.gz", hash = "sha256:ba6ae404f6a87359343af0d2b7ecaac380dcf7d1b12c89d64d073489a8e8e793"}, - {file = "mypy_boto3_sagemaker-1.34.19-py3-none-any.whl", hash = "sha256:44f60275a3fa8b09581788c2069c2f32b36ac3b1a9d2335fc44a7eecd7954a76"}, + {file = "mypy_boto3_sagemaker-1.34.103-py3-none-any.whl", hash = "sha256:f00deadbcaf89c9f1af62a23a697e5d5590453fc8211faf9ed84871499d51dad"}, + {file = "mypy_boto3_sagemaker-1.34.103.tar.gz", hash = "sha256:7e2c9dd16866314080c8aa1cbc561301599a87e3dce4759e293090e93ed8b5ef"}, ] [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - [[package]] name = "nh3" -version = "0.2.15" +version = "0.2.17" description = "Python bindings to the ammonia HTML sanitization library." optional = false python-versions = "*" files = [ - {file = "nh3-0.2.15-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:9c0d415f6b7f2338f93035bba5c0d8c1b464e538bfbb1d598acd47d7969284f0"}, - {file = "nh3-0.2.15-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6f42f99f0cf6312e470b6c09e04da31f9abaadcd3eb591d7d1a88ea931dca7f3"}, - {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac19c0d68cd42ecd7ead91a3a032fdfff23d29302dbb1311e641a130dfefba97"}, - {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0d77272ce6d34db6c87b4f894f037d55183d9518f948bba236fe81e2bb4e28"}, - {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8d595df02413aa38586c24811237e95937ef18304e108b7e92c890a06793e3bf"}, - {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86e447a63ca0b16318deb62498db4f76fc60699ce0a1231262880b38b6cff911"}, - {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3277481293b868b2715907310c7be0f1b9d10491d5adf9fce11756a97e97eddf"}, - {file = "nh3-0.2.15-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60684857cfa8fdbb74daa867e5cad3f0c9789415aba660614fe16cd66cbb9ec7"}, - {file = "nh3-0.2.15-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3b803a5875e7234907f7d64777dfde2b93db992376f3d6d7af7f3bc347deb305"}, - {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0d02d0ff79dfd8208ed25a39c12cbda092388fff7f1662466e27d97ad011b770"}, - {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:f3b53ba93bb7725acab1e030bc2ecd012a817040fd7851b332f86e2f9bb98dc6"}, - {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:b1e97221cedaf15a54f5243f2c5894bb12ca951ae4ddfd02a9d4ea9df9e1a29d"}, - {file = "nh3-0.2.15-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a5167a6403d19c515217b6bcaaa9be420974a6ac30e0da9e84d4fc67a5d474c5"}, - {file = "nh3-0.2.15-cp37-abi3-win32.whl", hash = "sha256:427fecbb1031db085eaac9931362adf4a796428ef0163070c484b5a768e71601"}, - {file = "nh3-0.2.15-cp37-abi3-win_amd64.whl", hash = "sha256:bc2d086fb540d0fa52ce35afaded4ea526b8fc4d3339f783db55c95de40ef02e"}, - {file = "nh3-0.2.15.tar.gz", hash = "sha256:d1e30ff2d8d58fb2a14961f7aac1bbb1c51f9bdd7da727be35c63826060b0bf3"}, + {file = "nh3-0.2.17-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:551672fd71d06cd828e282abdb810d1be24e1abb7ae2543a8fa36a71c1006fe9"}, + {file = "nh3-0.2.17-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c551eb2a3876e8ff2ac63dff1585236ed5dfec5ffd82216a7a174f7c5082a78a"}, + {file = "nh3-0.2.17-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:66f17d78826096291bd264f260213d2b3905e3c7fae6dfc5337d49429f1dc9f3"}, + {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0316c25b76289cf23be6b66c77d3608a4fdf537b35426280032f432f14291b9a"}, + {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:22c26e20acbb253a5bdd33d432a326d18508a910e4dcf9a3316179860d53345a"}, + {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:85cdbcca8ef10733bd31f931956f7fbb85145a4d11ab9e6742bbf44d88b7e351"}, + {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40015514022af31975c0b3bca4014634fa13cb5dc4dbcbc00570acc781316dcc"}, + {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba73a2f8d3a1b966e9cdba7b211779ad8a2561d2dba9674b8a19ed817923f65f"}, + {file = "nh3-0.2.17-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c21bac1a7245cbd88c0b0e4a420221b7bfa838a2814ee5bb924e9c2f10a1120b"}, + {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d7a25fd8c86657f5d9d576268e3b3767c5cd4f42867c9383618be8517f0f022a"}, + {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:c790769152308421283679a142dbdb3d1c46c79c823008ecea8e8141db1a2062"}, + {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:b4427ef0d2dfdec10b641ed0bdaf17957eb625b2ec0ea9329b3d28806c153d71"}, + {file = "nh3-0.2.17-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a3f55fabe29164ba6026b5ad5c3151c314d136fd67415a17660b4aaddacf1b10"}, + {file = "nh3-0.2.17-cp37-abi3-win32.whl", hash = "sha256:1a814dd7bba1cb0aba5bcb9bebcc88fd801b63e21e2450ae6c52d3b3336bc911"}, + {file = "nh3-0.2.17-cp37-abi3-win_amd64.whl", hash = "sha256:1aa52a7def528297f256de0844e8dd680ee279e79583c76d6fa73a978186ddfb"}, + {file = "nh3-0.2.17.tar.gz", hash = "sha256:40d0741a19c3d645e54efba71cb0d8c475b59135c1e3c580f879ad5514cbf028"}, ] [[package]] @@ -2970,58 +2955,58 @@ setuptools = "*" [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] name = "openai" -version = "1.9.0" +version = "1.30.1" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.9.0-py3-none-any.whl", hash = "sha256:5774a0582ed82f6de92200ed5024e03e272b93e04e9d31caeda5fb80f63df50d"}, - {file = "openai-1.9.0.tar.gz", hash = "sha256:3e9947a544556c051fa138a4def5bd8b468364ec52803c6628532ab949ddce55"}, + {file = "openai-1.30.1-py3-none-any.whl", hash = "sha256:c9fb3c3545c118bbce8deb824397b9433a66d0d0ede6a96f7009c95b76de4a46"}, + {file = "openai-1.30.1.tar.gz", hash = "sha256:4f85190e577cba0b066e1950b8eb9b11d25bc7ebcc43a86b326ce1bfa564ec74"}, ] [package.dependencies] @@ -3038,13 +3023,13 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "opensearch-py" -version = "2.4.2" +version = "2.5.0" description = "Python client for OpenSearch" optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,<4,>=2.7" files = [ - {file = "opensearch-py-2.4.2.tar.gz", hash = "sha256:564f175af134aa885f4ced6846eb4532e08b414fff0a7976f76b276fe0e69158"}, - {file = "opensearch_py-2.4.2-py2.py3-none-any.whl", hash = "sha256:7867319132133e2974c09f76a54eb1d502b989229be52da583d93ddc743ea111"}, + {file = "opensearch-py-2.5.0.tar.gz", hash = "sha256:0dde4ac7158a717d92a8cd81964cb99705a4b80bcf9258ba195b9a9f23f5226d"}, + {file = "opensearch_py-2.5.0-py2.py3-none-any.whl", hash = "sha256:cf093a40e272b60663f20417fc1264ac724dcf1e03c1a4542a6b44835b1e6c49"}, ] [package.dependencies] @@ -3052,7 +3037,7 @@ certifi = ">=2022.12.07" python-dateutil = "*" requests = ">=2.4.0,<3.0.0" six = "*" -urllib3 = ">=1.26.18" +urllib3 = ">=1.26.18,<2" [package.extras] async = ["aiohttp (>=3,<4)"] @@ -3062,13 +3047,13 @@ kerberos = ["requests-kerberos"] [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -3171,12 +3156,12 @@ ptyprocess = ">=0.5" [[package]] name = "pgvector" -version = "0.2.4" +version = "0.2.5" description = "pgvector support for Python" optional = true python-versions = ">=3.8" files = [ - {file = "pgvector-0.2.4-py2.py3-none-any.whl", hash = "sha256:548e1f88d3c7433020c1c177feddad2f36915c262852d621f9018fcafff6870b"}, + {file = "pgvector-0.2.5-py2.py3-none-any.whl", hash = "sha256:5e5e93ec4d3c45ab1fa388729d56c602f6966296e19deee8878928c6d567e41b"}, ] [package.dependencies] @@ -3184,79 +3169,80 @@ numpy = "*" [[package]] name = "pillow" -version = "10.2.0" +version = "10.3.0" description = "Python Imaging Library (Fork)" optional = true python-versions = ">=3.8" files = [ - {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, - {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, - {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, - {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, - {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, - {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, - {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, - {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, - {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, - {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, - {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, - {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, - {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, - {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, - {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, - {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, - {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, - {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, ] [package.extras] @@ -3292,62 +3278,63 @@ grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv [[package]] name = "pkginfo" -version = "1.9.6" +version = "1.10.0" description = "Query metadata from sdists / bdists / installed packages." optional = false python-versions = ">=3.6" files = [ - {file = "pkginfo-1.9.6-py3-none-any.whl", hash = "sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546"}, - {file = "pkginfo-1.9.6.tar.gz", hash = "sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046"}, + {file = "pkginfo-1.10.0-py3-none-any.whl", hash = "sha256:889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097"}, + {file = "pkginfo-1.10.0.tar.gz", hash = "sha256:5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297"}, ] [package.extras] -testing = ["pytest", "pytest-cov"] +testing = ["pytest", "pytest-cov", "wheel"] [[package]] name = "platformdirs" -version = "3.11.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, - {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "playwright" -version = "1.42.0" +version = "1.43.0" description = "A high-level API to automate web browsers" optional = true python-versions = ">=3.8" files = [ - {file = "playwright-1.42.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e2b293f077efeaa45253fde31cea4bc6b0ae8be6b5e65e8ce8b4aa3b9f0d55b6"}, - {file = "playwright-1.42.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:283887f0bdd0039c3d720e32fbc73a045c24fa800599a6ad60fb199c29580534"}, - {file = "playwright-1.42.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:4e1fc1c049a0af64626ddd50814d14a01f316bcbb4d1aa83c3416fe420add558"}, - {file = "playwright-1.42.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:313f2551a772f57c9ccca017c4dd4661f2277166f9e1d84bbf5a2e316f0f892c"}, - {file = "playwright-1.42.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2a46a24641e5d468046cde567c98fdb8d85e32df901630b14dfb288cbd1ed4f"}, - {file = "playwright-1.42.0-py3-none-win32.whl", hash = "sha256:dbf473496808d4c2c816902c1dee2aabc029648e56ce8514b643f5a1a6fc8e22"}, - {file = "playwright-1.42.0-py3-none-win_amd64.whl", hash = "sha256:e092c6cfbf797bff03fbdfc53c3e6a9e29fbcf6b82f9e43113d37494aee0561b"}, + {file = "playwright-1.43.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:b03b12bd4da9c2cfb78dff820deac8b52892fe3c2f89a4d95d6f08c59e41deb9"}, + {file = "playwright-1.43.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e9ec21b141727392f630761c7f4dec46d80c98243614257cc501b64ff636d337"}, + {file = "playwright-1.43.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:e05a8d8fb2040c630429cca07e843c8fa33059717837c8f50c01b7d1fc651ce1"}, + {file = "playwright-1.43.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:50d9a5c07c76456945a2296d63f78fdf6eb11aed3e8d39bb5ccbda760a8d6d41"}, + {file = "playwright-1.43.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87191272c40b4c282cf2c9449ca3acaf705f38ac6e2372270f1617ce16b661b8"}, + {file = "playwright-1.43.0-py3-none-win32.whl", hash = "sha256:bd8b818904b17e2914be23e7bc2a340b203f57fe81678520b10f908485b056ea"}, + {file = "playwright-1.43.0-py3-none-win_amd64.whl", hash = "sha256:9b7bd707eeeaebee47f656b2de90aa9bd85e9ca2c6af7a08efd73896299e4d50"}, ] [package.dependencies] greenlet = "3.0.3" -pyee = "11.0.1" +pyee = "11.1.0" [[package]] name = "pluggy" -version = "1.3.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -3367,13 +3354,13 @@ files = [ [[package]] name = "pre-commit" -version = "3.6.0" +version = "3.7.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.6.0-py2.py3-none-any.whl", hash = "sha256:c255039ef399049a5544b6ce13d135caba8f2c28c3b4033277a788f434308376"}, - {file = "pre_commit-3.6.0.tar.gz", hash = "sha256:d30bad9abf165f7785c15a21a1f46da7d0677cb00ee7ff4c579fd38922efe15d"}, + {file = "pre_commit-3.7.1-py2.py3-none-any.whl", hash = "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"}, + {file = "pre_commit-3.7.1.tar.gz", hash = "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a"}, ] [package.dependencies] @@ -3556,83 +3543,83 @@ dev = ["black (==22.6.0)", "flake8", "mypy", "pytest"] [[package]] name = "pyasn1" -version = "0.5.1" +version = "0.6.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = true -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.8" files = [ - {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, - {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, + {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, + {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, ] [[package]] name = "pyasn1-modules" -version = "0.3.0" +version = "0.4.0" description = "A collection of ASN.1-based protocols modules" optional = true -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.8" files = [ - {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, - {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, + {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, + {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, ] [package.dependencies] -pyasn1 = ">=0.4.6,<0.6.0" +pyasn1 = ">=0.4.6,<0.7.0" [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydantic" -version = "1.10.14" +version = "1.10.15" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.14-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4fcec873f90537c382840f330b90f4715eebc2bc9925f04cb92de593eae054"}, - {file = "pydantic-1.10.14-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e3a76f571970fcd3c43ad982daf936ae39b3e90b8a2e96c04113a369869dc87"}, - {file = "pydantic-1.10.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d886bd3c3fbeaa963692ef6b643159ccb4b4cefaf7ff1617720cbead04fd1d"}, - {file = "pydantic-1.10.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:798a3d05ee3b71967844a1164fd5bdb8c22c6d674f26274e78b9f29d81770c4e"}, - {file = "pydantic-1.10.14-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:23d47a4b57a38e8652bcab15a658fdb13c785b9ce217cc3a729504ab4e1d6bc9"}, - {file = "pydantic-1.10.14-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9f674b5c3bebc2eba401de64f29948ae1e646ba2735f884d1594c5f675d6f2a"}, - {file = "pydantic-1.10.14-cp310-cp310-win_amd64.whl", hash = "sha256:24a7679fab2e0eeedb5a8924fc4a694b3bcaac7d305aeeac72dd7d4e05ecbebf"}, - {file = "pydantic-1.10.14-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9d578ac4bf7fdf10ce14caba6f734c178379bd35c486c6deb6f49006e1ba78a7"}, - {file = "pydantic-1.10.14-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa7790e94c60f809c95602a26d906eba01a0abee9cc24150e4ce2189352deb1b"}, - {file = "pydantic-1.10.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad4e10efa5474ed1a611b6d7f0d130f4aafadceb73c11d9e72823e8f508e663"}, - {file = "pydantic-1.10.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245f4f61f467cb3dfeced2b119afef3db386aec3d24a22a1de08c65038b255f"}, - {file = "pydantic-1.10.14-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:21efacc678a11114c765eb52ec0db62edffa89e9a562a94cbf8fa10b5db5c046"}, - {file = "pydantic-1.10.14-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:412ab4a3f6dbd2bf18aefa9f79c7cca23744846b31f1d6555c2ee2b05a2e14ca"}, - {file = "pydantic-1.10.14-cp311-cp311-win_amd64.whl", hash = "sha256:e897c9f35281f7889873a3e6d6b69aa1447ceb024e8495a5f0d02ecd17742a7f"}, - {file = "pydantic-1.10.14-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d604be0f0b44d473e54fdcb12302495fe0467c56509a2f80483476f3ba92b33c"}, - {file = "pydantic-1.10.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42c7d17706911199798d4c464b352e640cab4351efe69c2267823d619a937e5"}, - {file = "pydantic-1.10.14-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:596f12a1085e38dbda5cbb874d0973303e34227b400b6414782bf205cc14940c"}, - {file = "pydantic-1.10.14-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bfb113860e9288d0886e3b9e49d9cf4a9d48b441f52ded7d96db7819028514cc"}, - {file = "pydantic-1.10.14-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bc3ed06ab13660b565eed80887fcfbc0070f0aa0691fbb351657041d3e874efe"}, - {file = "pydantic-1.10.14-cp37-cp37m-win_amd64.whl", hash = "sha256:ad8c2bc677ae5f6dbd3cf92f2c7dc613507eafe8f71719727cbc0a7dec9a8c01"}, - {file = "pydantic-1.10.14-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c37c28449752bb1f47975d22ef2882d70513c546f8f37201e0fec3a97b816eee"}, - {file = "pydantic-1.10.14-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49a46a0994dd551ec051986806122767cf144b9702e31d47f6d493c336462597"}, - {file = "pydantic-1.10.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53e3819bd20a42470d6dd0fe7fc1c121c92247bca104ce608e609b59bc7a77ee"}, - {file = "pydantic-1.10.14-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbb503bbbbab0c588ed3cd21975a1d0d4163b87e360fec17a792f7d8c4ff29f"}, - {file = "pydantic-1.10.14-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:336709883c15c050b9c55a63d6c7ff09be883dbc17805d2b063395dd9d9d0022"}, - {file = "pydantic-1.10.14-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4ae57b4d8e3312d486e2498d42aed3ece7b51848336964e43abbf9671584e67f"}, - {file = "pydantic-1.10.14-cp38-cp38-win_amd64.whl", hash = "sha256:dba49d52500c35cfec0b28aa8b3ea5c37c9df183ffc7210b10ff2a415c125c4a"}, - {file = "pydantic-1.10.14-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c66609e138c31cba607d8e2a7b6a5dc38979a06c900815495b2d90ce6ded35b4"}, - {file = "pydantic-1.10.14-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d986e115e0b39604b9eee3507987368ff8148222da213cd38c359f6f57b3b347"}, - {file = "pydantic-1.10.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:646b2b12df4295b4c3148850c85bff29ef6d0d9621a8d091e98094871a62e5c7"}, - {file = "pydantic-1.10.14-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282613a5969c47c83a8710cc8bfd1e70c9223feb76566f74683af889faadc0ea"}, - {file = "pydantic-1.10.14-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:466669501d08ad8eb3c4fecd991c5e793c4e0bbd62299d05111d4f827cded64f"}, - {file = "pydantic-1.10.14-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:13e86a19dca96373dcf3190fcb8797d40a6f12f154a244a8d1e8e03b8f280593"}, - {file = "pydantic-1.10.14-cp39-cp39-win_amd64.whl", hash = "sha256:08b6ec0917c30861e3fe71a93be1648a2aa4f62f866142ba21670b24444d7fd8"}, - {file = "pydantic-1.10.14-py3-none-any.whl", hash = "sha256:8ee853cd12ac2ddbf0ecbac1c289f95882b2d4482258048079d13be700aa114c"}, - {file = "pydantic-1.10.14.tar.gz", hash = "sha256:46f17b832fe27de7850896f3afee50ea682220dd218f7e9c88d436788419dca6"}, + {file = "pydantic-1.10.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22ed12ee588b1df028a2aa5d66f07bf8f8b4c8579c2e96d5a9c1f96b77f3bb55"}, + {file = "pydantic-1.10.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:75279d3cac98186b6ebc2597b06bcbc7244744f6b0b44a23e4ef01e5683cc0d2"}, + {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50f1666a9940d3d68683c9d96e39640f709d7a72ff8702987dab1761036206bb"}, + {file = "pydantic-1.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82790d4753ee5d00739d6cb5cf56bceb186d9d6ce134aca3ba7befb1eedbc2c8"}, + {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d207d5b87f6cbefbdb1198154292faee8017d7495a54ae58db06762004500d00"}, + {file = "pydantic-1.10.15-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e49db944fad339b2ccb80128ffd3f8af076f9f287197a480bf1e4ca053a866f0"}, + {file = "pydantic-1.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:d3b5c4cbd0c9cb61bbbb19ce335e1f8ab87a811f6d589ed52b0254cf585d709c"}, + {file = "pydantic-1.10.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c3d5731a120752248844676bf92f25a12f6e45425e63ce22e0849297a093b5b0"}, + {file = "pydantic-1.10.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c365ad9c394f9eeffcb30a82f4246c0006417f03a7c0f8315d6211f25f7cb654"}, + {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3287e1614393119c67bd4404f46e33ae3be3ed4cd10360b48d0a4459f420c6a3"}, + {file = "pydantic-1.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be51dd2c8596b25fe43c0a4a59c2bee4f18d88efb8031188f9e7ddc6b469cf44"}, + {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6a51a1dd4aa7b3f1317f65493a182d3cff708385327c1c82c81e4a9d6d65b2e4"}, + {file = "pydantic-1.10.15-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4e316e54b5775d1eb59187f9290aeb38acf620e10f7fd2f776d97bb788199e53"}, + {file = "pydantic-1.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:0d142fa1b8f2f0ae11ddd5e3e317dcac060b951d605fda26ca9b234b92214986"}, + {file = "pydantic-1.10.15-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7ea210336b891f5ea334f8fc9f8f862b87acd5d4a0cbc9e3e208e7aa1775dabf"}, + {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3453685ccd7140715e05f2193d64030101eaad26076fad4e246c1cc97e1bb30d"}, + {file = "pydantic-1.10.15-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bea1f03b8d4e8e86702c918ccfd5d947ac268f0f0cc6ed71782e4b09353b26f"}, + {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:005655cabc29081de8243126e036f2065bd7ea5b9dff95fde6d2c642d39755de"}, + {file = "pydantic-1.10.15-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:af9850d98fc21e5bc24ea9e35dd80a29faf6462c608728a110c0a30b595e58b7"}, + {file = "pydantic-1.10.15-cp37-cp37m-win_amd64.whl", hash = "sha256:d31ee5b14a82c9afe2bd26aaa405293d4237d0591527d9129ce36e58f19f95c1"}, + {file = "pydantic-1.10.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5e09c19df304b8123938dc3c53d3d3be6ec74b9d7d0d80f4f4b5432ae16c2022"}, + {file = "pydantic-1.10.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7ac9237cd62947db00a0d16acf2f3e00d1ae9d3bd602b9c415f93e7a9fc10528"}, + {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:584f2d4c98ffec420e02305cf675857bae03c9d617fcfdc34946b1160213a948"}, + {file = "pydantic-1.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbc6989fad0c030bd70a0b6f626f98a862224bc2b1e36bfc531ea2facc0a340c"}, + {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d573082c6ef99336f2cb5b667b781d2f776d4af311574fb53d908517ba523c22"}, + {file = "pydantic-1.10.15-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6bd7030c9abc80134087d8b6e7aa957e43d35714daa116aced57269a445b8f7b"}, + {file = "pydantic-1.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:3350f527bb04138f8aff932dc828f154847fbdc7a1a44c240fbfff1b57f49a12"}, + {file = "pydantic-1.10.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:51d405b42f1b86703555797270e4970a9f9bd7953f3990142e69d1037f9d9e51"}, + {file = "pydantic-1.10.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a980a77c52723b0dc56640ced396b73a024d4b74f02bcb2d21dbbac1debbe9d0"}, + {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f1a1fb467d3f49e1708a3f632b11c69fccb4e748a325d5a491ddc7b5d22383"}, + {file = "pydantic-1.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:676ed48f2c5bbad835f1a8ed8a6d44c1cd5a21121116d2ac40bd1cd3619746ed"}, + {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:92229f73400b80c13afcd050687f4d7e88de9234d74b27e6728aa689abcf58cc"}, + {file = "pydantic-1.10.15-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2746189100c646682eff0bce95efa7d2e203420d8e1c613dc0c6b4c1d9c1fde4"}, + {file = "pydantic-1.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:394f08750bd8eaad714718812e7fab615f873b3cdd0b9d84e76e51ef3b50b6b7"}, + {file = "pydantic-1.10.15-py3-none-any.whl", hash = "sha256:28e552a060ba2740d0d2aabe35162652c1459a0b9069fe0db7f4ee0e18e74d58"}, + {file = "pydantic-1.10.15.tar.gz", hash = "sha256:ca832e124eda231a60a041da4f013e3ff24949d94a01154b137fc2f2a43c3ffb"}, ] [package.dependencies] @@ -3644,34 +3631,33 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pyee" -version = "11.0.1" +version = "11.1.0" description = "A rough port of Node.js's EventEmitter to Python with a few tricks of its own" optional = true python-versions = ">=3.8" files = [ - {file = "pyee-11.0.1-py3-none-any.whl", hash = "sha256:9bcc9647822234f42c228d88de63d0f9ffa881e87a87f9d36ddf5211f6ac977d"}, - {file = "pyee-11.0.1.tar.gz", hash = "sha256:a642c51e3885a33ead087286e35212783a4e9b8d6514a10a5db4e57ac57b2b29"}, + {file = "pyee-11.1.0-py3-none-any.whl", hash = "sha256:5d346a7d0f861a4b2e6c47960295bd895f816725b27d656181947346be98d7c1"}, + {file = "pyee-11.1.0.tar.gz", hash = "sha256:b53af98f6990c810edd9b56b87791021a8f54fd13db4edd1142438d44ba2263f"}, ] [package.dependencies] typing-extensions = "*" [package.extras] -dev = ["black", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"] +dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "sphinx", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"] [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -3693,17 +3679,17 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pymdown-extensions" -version = "10.7.1" +version = "10.8.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, - {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, + {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, + {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, ] [package.dependencies] -markdown = ">=3.5" +markdown = ">=3.6" pyyaml = "*" [package.extras] @@ -3711,100 +3697,79 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pymongo" -version = "4.6.1" +version = "4.7.2" description = "Python driver for MongoDB " optional = true python-versions = ">=3.7" files = [ - {file = "pymongo-4.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4344c30025210b9fa80ec257b0e0aab5aa1d5cca91daa70d82ab97b482cc038e"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux1_i686.whl", hash = "sha256:1c5654bb8bb2bdb10e7a0bc3c193dd8b49a960b9eebc4381ff5a2043f4c3c441"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:eaf2f65190c506def2581219572b9c70b8250615dc918b3b7c218361a51ec42e"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_i686.whl", hash = "sha256:262356ea5fcb13d35fb2ab6009d3927bafb9504ef02339338634fffd8a9f1ae4"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_ppc64le.whl", hash = "sha256:2dd2f6960ee3c9360bed7fb3c678be0ca2d00f877068556785ec2eb6b73d2414"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_s390x.whl", hash = "sha256:ff925f1cca42e933376d09ddc254598f8c5fcd36efc5cac0118bb36c36217c41"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux2014_x86_64.whl", hash = "sha256:3cadf7f4c8e94d8a77874b54a63c80af01f4d48c4b669c8b6867f86a07ba994f"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55dac73316e7e8c2616ba2e6f62b750918e9e0ae0b2053699d66ca27a7790105"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:154b361dcb358ad377d5d40df41ee35f1cc14c8691b50511547c12404f89b5cb"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2940aa20e9cc328e8ddeacea8b9a6f5ddafe0b087fedad928912e787c65b4909"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:010bc9aa90fd06e5cc52c8fac2c2fd4ef1b5f990d9638548dde178005770a5e8"}, - {file = "pymongo-4.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e470fa4bace5f50076c32f4b3cc182b31303b4fefb9b87f990144515d572820b"}, - {file = "pymongo-4.6.1-cp310-cp310-win32.whl", hash = "sha256:da08ea09eefa6b960c2dd9a68ec47949235485c623621eb1d6c02b46765322ac"}, - {file = "pymongo-4.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:13d613c866f9f07d51180f9a7da54ef491d130f169e999c27e7633abe8619ec9"}, - {file = "pymongo-4.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6a0ae7a48a6ef82ceb98a366948874834b86c84e288dbd55600c1abfc3ac1d88"}, - {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bd94c503271e79917b27c6e77f7c5474da6930b3fb9e70a12e68c2dff386b9a"}, - {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d4ccac3053b84a09251da8f5350bb684cbbf8c8c01eda6b5418417d0a8ab198"}, - {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:349093675a2d3759e4fb42b596afffa2b2518c890492563d7905fac503b20daa"}, - {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88beb444fb438385e53dc9110852910ec2a22f0eab7dd489e827038fdc19ed8d"}, - {file = "pymongo-4.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8e62d06e90f60ea2a3d463ae51401475568b995bafaffd81767d208d84d7bb1"}, - {file = "pymongo-4.6.1-cp311-cp311-win32.whl", hash = "sha256:5556e306713e2522e460287615d26c0af0fe5ed9d4f431dad35c6624c5d277e9"}, - {file = "pymongo-4.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:b10d8cda9fc2fcdcfa4a000aa10413a2bf8b575852cd07cb8a595ed09689ca98"}, - {file = "pymongo-4.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b435b13bb8e36be11b75f7384a34eefe487fe87a6267172964628e2b14ecf0a7"}, - {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e438417ce1dc5b758742e12661d800482200b042d03512a8f31f6aaa9137ad40"}, - {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b47ebd89e69fbf33d1c2df79759d7162fc80c7652dacfec136dae1c9b3afac7"}, - {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbed8cccebe1169d45cedf00461b2842652d476d2897fd1c42cf41b635d88746"}, - {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30a9e06041fbd7a7590693ec5e407aa8737ad91912a1e70176aff92e5c99d20"}, - {file = "pymongo-4.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8729dbf25eb32ad0dc0b9bd5e6a0d0b7e5c2dc8ec06ad171088e1896b522a74"}, - {file = "pymongo-4.6.1-cp312-cp312-win32.whl", hash = "sha256:3177f783ae7e08aaf7b2802e0df4e4b13903520e8380915e6337cdc7a6ff01d8"}, - {file = "pymongo-4.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:00c199e1c593e2c8b033136d7a08f0c376452bac8a896c923fcd6f419e07bdd2"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:13552ca505366df74e3e2f0a4f27c363928f3dff0eef9f281eb81af7f29bc3c5"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:77e0df59b1a4994ad30c6d746992ae887f9756a43fc25dec2db515d94cf0222d"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3a7f02a58a0c2912734105e05dedbee4f7507e6f1bd132ebad520be0b11d46fd"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:026a24a36394dc8930cbcb1d19d5eb35205ef3c838a7e619e04bd170713972e7"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:3b287e814a01deddb59b88549c1e0c87cefacd798d4afc0c8bd6042d1c3d48aa"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:9a710c184ba845afb05a6f876edac8f27783ba70e52d5eaf939f121fc13b2f59"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:30b2c9caf3e55c2e323565d1f3b7e7881ab87db16997dc0cbca7c52885ed2347"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff62ba8ff70f01ab4fe0ae36b2cb0b5d1f42e73dfc81ddf0758cd9f77331ad25"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:547dc5d7f834b1deefda51aedb11a7af9c51c45e689e44e14aa85d44147c7657"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1de3c6faf948f3edd4e738abdb4b76572b4f4fdfc1fed4dad02427e70c5a6219"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2831e05ce0a4df10c4ac5399ef50b9a621f90894c2a4d2945dc5658765514ed"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:144a31391a39a390efce0c5ebcaf4bf112114af4384c90163f402cec5ede476b"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33bb16a07d3cc4e0aea37b242097cd5f7a156312012455c2fa8ca396953b11c4"}, - {file = "pymongo-4.6.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b7b1a83ce514700276a46af3d9e481ec381f05b64939effc9065afe18456a6b9"}, - {file = "pymongo-4.6.1-cp37-cp37m-win32.whl", hash = "sha256:3071ec998cc3d7b4944377e5f1217c2c44b811fae16f9a495c7a1ce9b42fb038"}, - {file = "pymongo-4.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:2346450a075625c4d6166b40a013b605a38b6b6168ce2232b192a37fb200d588"}, - {file = "pymongo-4.6.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:061598cbc6abe2f382ab64c9caa83faa2f4c51256f732cdd890bcc6e63bfb67e"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d483793a384c550c2d12cb794ede294d303b42beff75f3b3081f57196660edaf"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:f9756f1d25454ba6a3c2f1ef8b7ddec23e5cdeae3dc3c3377243ae37a383db00"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:1ed23b0e2dac6f84f44c8494fbceefe6eb5c35db5c1099f56ab78fc0d94ab3af"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:3d18a9b9b858ee140c15c5bfcb3e66e47e2a70a03272c2e72adda2482f76a6ad"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:c258dbacfff1224f13576147df16ce3c02024a0d792fd0323ac01bed5d3c545d"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:f7acc03a4f1154ba2643edeb13658d08598fe6e490c3dd96a241b94f09801626"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:76013fef1c9cd1cd00d55efde516c154aa169f2bf059b197c263a255ba8a9ddf"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0e6a6c807fa887a0c51cc24fe7ea51bb9e496fe88f00d7930063372c3664c3"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd1fa413f8b9ba30140de198e4f408ffbba6396864c7554e0867aa7363eb58b2"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d219b4508f71d762368caec1fc180960569766049bbc4d38174f05e8ef2fe5b"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b81ecf18031998ad7db53b960d1347f8f29e8b7cb5ea7b4394726468e4295e"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56816e43c92c2fa8c11dc2a686f0ca248bea7902f4a067fa6cbc77853b0f041e"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef801027629c5b511cf2ba13b9be29bfee36ae834b2d95d9877818479cdc99ea"}, - {file = "pymongo-4.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d4c2be9760b112b1caf649b4977b81b69893d75aa86caf4f0f398447be871f3c"}, - {file = "pymongo-4.6.1-cp38-cp38-win32.whl", hash = "sha256:39d77d8bbb392fa443831e6d4ae534237b1f4eee6aa186f0cdb4e334ba89536e"}, - {file = "pymongo-4.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:4497d49d785482cc1a44a0ddf8830b036a468c088e72a05217f5b60a9e025012"}, - {file = "pymongo-4.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:69247f7a2835fc0984bbf0892e6022e9a36aec70e187fcfe6cae6a373eb8c4de"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:7bb0e9049e81def6829d09558ad12d16d0454c26cabe6efc3658e544460688d9"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6a1810c2cbde714decf40f811d1edc0dae45506eb37298fd9d4247b8801509fe"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e2aced6fb2f5261b47d267cb40060b73b6527e64afe54f6497844c9affed5fd0"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d0355cff58a4ed6d5e5f6b9c3693f52de0784aa0c17119394e2a8e376ce489d4"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:3c74f4725485f0a7a3862cfd374cc1b740cebe4c133e0c1425984bcdcce0f4bb"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:9c79d597fb3a7c93d7c26924db7497eba06d58f88f58e586aa69b2ad89fee0f8"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8ec75f35f62571a43e31e7bd11749d974c1b5cd5ea4a8388725d579263c0fdf6"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5e641f931c5cd95b376fd3c59db52770e17bec2bf86ef16cc83b3906c054845"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9aafd036f6f2e5ad109aec92f8dbfcbe76cff16bad683eb6dd18013739c0b3ae"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f2b856518bfcfa316c8dae3d7b412aecacf2e8ba30b149f5eb3b63128d703b9"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec31adc2e988fd7db3ab509954791bbc5a452a03c85e45b804b4bfc31fa221d"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9167e735379ec43d8eafa3fd675bfbb12e2c0464f98960586e9447d2cf2c7a83"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1461199b07903fc1424709efafe379205bf5f738144b1a50a08b0396357b5abf"}, - {file = "pymongo-4.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3094c7d2f820eecabadae76bfec02669567bbdd1730eabce10a5764778564f7b"}, - {file = "pymongo-4.6.1-cp39-cp39-win32.whl", hash = "sha256:c91ea3915425bd4111cb1b74511cdc56d1d16a683a48bf2a5a96b6a6c0f297f7"}, - {file = "pymongo-4.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef102a67ede70e1721fe27f75073b5314911dbb9bc27cde0a1c402a11531e7bd"}, - {file = "pymongo-4.6.1.tar.gz", hash = "sha256:31dab1f3e1d0cdd57e8df01b645f52d43cc1b653ed3afd535d2891f4fc4f9712"}, + {file = "pymongo-4.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:268d8578c0500012140c5460755ea405cbfe541ef47c81efa9d6744f0f99aeca"}, + {file = "pymongo-4.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:827611beb6c483260d520cfa6a49662d980dfa5368a04296f65fa39e78fccea7"}, + {file = "pymongo-4.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a754e366c404d19ff3f077ddeed64be31e0bb515e04f502bf11987f1baa55a16"}, + {file = "pymongo-4.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c44efab10d9a3db920530f7bcb26af8f408b7273d2f0214081d3891979726328"}, + {file = "pymongo-4.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35b3f0c7d49724859d4df5f0445818d525824a6cd55074c42573d9b50764df67"}, + {file = "pymongo-4.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e37faf298a37ffb3e0809e77fbbb0a32b6a2d18a83c59cfc2a7b794ea1136b0"}, + {file = "pymongo-4.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1bcd58669e56c08f1e72c5758868b5df169fe267501c949ee83c418e9df9155"}, + {file = "pymongo-4.7.2-cp310-cp310-win32.whl", hash = "sha256:c72d16fede22efe7cdd1f422e8da15760e9498024040429362886f946c10fe95"}, + {file = "pymongo-4.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:12d1fef77d25640cb78893d07ff7d2fac4c4461d8eec45bd3b9ad491a1115d6e"}, + {file = "pymongo-4.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc5af24fcf5fc6f7f40d65446400d45dd12bea933d0299dc9e90c5b22197f1e9"}, + {file = "pymongo-4.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:730778b6f0964b164c187289f906bbc84cb0524df285b7a85aa355bbec43eb21"}, + {file = "pymongo-4.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47a1a4832ef2f4346dcd1a10a36ade7367ad6905929ddb476459abb4fd1b98cb"}, + {file = "pymongo-4.7.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6eab12c6385526d386543d6823b07187fefba028f0da216506e00f0e1855119"}, + {file = "pymongo-4.7.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37e9ea81fa59ee9274457ed7d59b6c27f6f2a5fe8e26f184ecf58ea52a019cb8"}, + {file = "pymongo-4.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e9d9d2c0aae73aa4369bd373ac2ac59f02c46d4e56c4b6d6e250cfe85f76802"}, + {file = "pymongo-4.7.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6e00a79dff22c9a72212ad82021b54bdb3b85f38a85f4fc466bde581d7d17a"}, + {file = "pymongo-4.7.2-cp311-cp311-win32.whl", hash = "sha256:02efd1bb3397e24ef2af45923888b41a378ce00cb3a4259c5f4fc3c70497a22f"}, + {file = "pymongo-4.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:87bb453ac3eb44db95cb6d5a616fbc906c1c00661eec7f55696253a6245beb8a"}, + {file = "pymongo-4.7.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:12c466e02133b7f8f4ff1045c6b5916215c5f7923bc83fd6e28e290cba18f9f6"}, + {file = "pymongo-4.7.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f91073049c43d14e66696970dd708d319b86ee57ef9af359294eee072abaac79"}, + {file = "pymongo-4.7.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87032f818bf5052ab742812c715eff896621385c43f8f97cdd37d15b5d394e95"}, + {file = "pymongo-4.7.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a87eef394039765679f75c6a47455a4030870341cb76eafc349c5944408c882"}, + {file = "pymongo-4.7.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d275596f840018858757561840767b39272ac96436fcb54f5cac6d245393fd97"}, + {file = "pymongo-4.7.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82102e353be13f1a6769660dd88115b1da382447672ba1c2662a0fbe3df1d861"}, + {file = "pymongo-4.7.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:194065c9d445017b3c82fb85f89aa2055464a080bde604010dc8eb932a6b3c95"}, + {file = "pymongo-4.7.2-cp312-cp312-win32.whl", hash = "sha256:db4380d1e69fdad1044a4b8f3bb105200542c49a0dde93452d938ff9db1d6d29"}, + {file = "pymongo-4.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:fadc6e8db7707c861ebe25b13ad6aca19ea4d2c56bf04a26691f46c23dadf6e4"}, + {file = "pymongo-4.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2cb77d09bd012cb4b30636e7e38d00b5f9be5eb521c364bde66490c45ee6c4b4"}, + {file = "pymongo-4.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56bf8b706946952acdea0fe478f8e44f1ed101c4b87f046859e6c3abe6c0a9f4"}, + {file = "pymongo-4.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcf337d1b252405779d9c79978d6ca15eab3cdaa2f44c100a79221bddad97c8a"}, + {file = "pymongo-4.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ffd1519edbe311df73c74ec338de7d294af535b2748191c866ea3a7c484cd15"}, + {file = "pymongo-4.7.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d59776f435564159196d971aa89422ead878174aff8fe18e06d9a0bc6d648c"}, + {file = "pymongo-4.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:347c49cf7f0ba49ea87c1a5a1984187ecc5516b7c753f31938bf7b37462824fd"}, + {file = "pymongo-4.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:84bc00200c3cbb6c98a2bb964c9e8284b641e4a33cf10c802390552575ee21de"}, + {file = "pymongo-4.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fcaf8c911cb29316a02356f89dbc0e0dfcc6a712ace217b6b543805690d2aefd"}, + {file = "pymongo-4.7.2-cp37-cp37m-win32.whl", hash = "sha256:b48a5650ee5320d59f6d570bd99a8d5c58ac6f297a4e9090535f6561469ac32e"}, + {file = "pymongo-4.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:5239ef7e749f1326ea7564428bf861d5250aa39d7f26d612741b1b1273227062"}, + {file = "pymongo-4.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2dcf608d35644e8d276d61bf40a93339d8d66a0e5f3e3f75b2c155a421a1b71"}, + {file = "pymongo-4.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:25eeb2c18ede63891cbd617943dd9e6b9cbccc54f276e0b2e693a0cc40f243c5"}, + {file = "pymongo-4.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9349f0bb17a31371d4cacb64b306e4ca90413a3ad1fffe73ac7cd495570d94b5"}, + {file = "pymongo-4.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffd4d7cb2e6c6e100e2b39606d38a9ffc934e18593dc9bb326196afc7d93ce3d"}, + {file = "pymongo-4.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9a8bd37f5dabc86efceb8d8cbff5969256523d42d08088f098753dba15f3b37a"}, + {file = "pymongo-4.7.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c78f156edc59b905c80c9003e022e1a764c54fd40ac4fea05b0764f829790e2"}, + {file = "pymongo-4.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d892fb91e81cccb83f507cdb2ea0aa026ec3ced7f12a1d60f6a5bf0f20f9c1f"}, + {file = "pymongo-4.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87832d6076c2c82f42870157414fd876facbb6554d2faf271ffe7f8f30ce7bed"}, + {file = "pymongo-4.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ce1a374ea0e49808e0380ffc64284c0ce0f12bd21042b4bef1af3eb7bdf49054"}, + {file = "pymongo-4.7.2-cp38-cp38-win32.whl", hash = "sha256:eb0642e5f0dd7e86bb358749cc278e70b911e617f519989d346f742dc9520dfb"}, + {file = "pymongo-4.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:4bdb5ffe1cd3728c9479671a067ef44dacafc3743741d4dc700c377c4231356f"}, + {file = "pymongo-4.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:743552033c63f0afdb56b9189ab04b5c1dbffd7310cf7156ab98eebcecf24621"}, + {file = "pymongo-4.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5239776633f7578b81207e5646245415a5a95f6ae5ef5dff8e7c2357e6264bfc"}, + {file = "pymongo-4.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:727ad07952c155cd20045f2ce91143c7dc4fb01a5b4e8012905a89a7da554b0c"}, + {file = "pymongo-4.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9385654f01a90f73827af4db90c290a1519f7d9102ba43286e187b373e9a78e9"}, + {file = "pymongo-4.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d833651f1ba938bb7501f13e326b96cfbb7d98867b2d545ca6d69c7664903e0"}, + {file = "pymongo-4.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf17ea9cea14d59b0527403dd7106362917ced7c4ec936c4ba22bd36c912c8e0"}, + {file = "pymongo-4.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cecd2df037249d1c74f0af86fb5b766104a5012becac6ff63d85d1de53ba8b98"}, + {file = "pymongo-4.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65b4c00dedbd333698b83cd2095a639a6f0d7c4e2a617988f6c65fb46711f028"}, + {file = "pymongo-4.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d9b6cbc037108ff1a0a867e7670d8513c37f9bcd9ee3d2464411bfabf70ca002"}, + {file = "pymongo-4.7.2-cp39-cp39-win32.whl", hash = "sha256:cf28430ec1924af1bffed37b69a812339084697fd3f3e781074a0148e6475803"}, + {file = "pymongo-4.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:e004527ea42a6b99a8b8d5b42b42762c3bdf80f88fbdb5c3a9d47f3808495b86"}, + {file = "pymongo-4.7.2.tar.gz", hash = "sha256:9024e1661c6e40acf468177bf90ce924d1bc681d2b244adda3ed7b2f4c4d17d7"}, ] [package.dependencies] dnspython = ">=1.16.0,<3.0.0" [package.extras] -aws = ["pymongo-auth-aws (<2.0.0)"] -encryption = ["certifi", "pymongo[aws]", "pymongocrypt (>=1.6.0,<2.0.0)"] +aws = ["pymongo-auth-aws (>=1.1.0,<2.0.0)"] +encryption = ["certifi", "pymongo-auth-aws (>=1.1.0,<2.0.0)", "pymongocrypt (>=1.6.0,<2.0.0)"] gssapi = ["pykerberos", "winkerberos (>=0.5.0)"] ocsp = ["certifi", "cryptography (>=2.5)", "pyopenssl (>=17.2.0)", "requests (<3.0.0)", "service-identity (>=18.1.0)"] snappy = ["python-snappy"] @@ -3813,13 +3778,13 @@ zstd = ["zstandard"] [[package]] name = "pyopenssl" -version = "24.0.0" +version = "24.1.0" description = "Python wrapper module around the OpenSSL library" optional = true python-versions = ">=3.7" files = [ - {file = "pyOpenSSL-24.0.0-py3-none-any.whl", hash = "sha256:ba07553fb6fd6a7a2259adb9b84e12302a9a8a75c44046e8bb5d3e5ee887e3c3"}, - {file = "pyOpenSSL-24.0.0.tar.gz", hash = "sha256:6aa33039a93fffa4563e655b61d11364d01264be8ccb49906101e02a334530bf"}, + {file = "pyOpenSSL-24.1.0-py3-none-any.whl", hash = "sha256:17ed5be5936449c5418d1cd269a1a9e9081bc54c17aed272b45856a3d3dc86ad"}, + {file = "pyOpenSSL-24.1.0.tar.gz", hash = "sha256:cabed4bfaa5df9f1a16c0ef64a0cb65318b5cd077a7eda7d6970131ca2f41a6f"}, ] [package.dependencies] @@ -3827,7 +3792,7 @@ cryptography = ">=41.0.5,<43" [package.extras] docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx-rtd-theme"] -test = ["flaky", "pretend", "pytest (>=3.0.1)"] +test = ["pretend", "pytest (>=3.0.1)", "pytest-rerunfailures"] [[package]] name = "pypdf" @@ -3852,13 +3817,13 @@ image = ["Pillow (>=8.0.0)"] [[package]] name = "pyright" -version = "1.1.355" +version = "1.1.363" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.355-py3-none-any.whl", hash = "sha256:bf30b6728fd68ae7d09c98292b67152858dd89738569836896df786e52b5fe48"}, - {file = "pyright-1.1.355.tar.gz", hash = "sha256:dca4104cd53d6484e6b1b50b7a239ad2d16d2ffd20030bcf3111b56f44c263bf"}, + {file = "pyright-1.1.363-py3-none-any.whl", hash = "sha256:d3b8d73c8d230e26cc3523862f3398032a0c39a00d7bb69dc0f595f8e888fd01"}, + {file = "pyright-1.1.363.tar.gz", hash = "sha256:00a8f0ae0e339473bb0488f8a2a2dcdf574e94a16cd7b4390d49d144714d8db2"}, ] [package.dependencies] @@ -3943,35 +3908,35 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "pytest-mock (>=3.12)"] [[package]] name = "pytest-mock" -version = "3.12.0" +version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-mock-3.12.0.tar.gz", hash = "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9"}, - {file = "pytest_mock-3.12.0-py3-none-any.whl", hash = "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f"}, + {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, + {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, ] [package.dependencies] -pytest = ">=5.0" +pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] [[package]] name = "pytest-xdist" -version = "3.5.0" +version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, - {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, + {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, + {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, ] [package.dependencies] -execnet = ">=1.1" -pytest = ">=6.2.0" +execnet = ">=2.1" +pytest = ">=7.0.0" [package.extras] psutil = ["psutil (>=3.0)"] @@ -3980,13 +3945,13 @@ testing = ["filelock"] [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -3994,13 +3959,13 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2023.3.post1" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -4112,13 +4077,13 @@ pyyaml = "*" [[package]] name = "readme-renderer" -version = "42.0" +version = "43.0" description = "readme_renderer is a library for rendering readme descriptions for Warehouse" optional = false python-versions = ">=3.8" files = [ - {file = "readme_renderer-42.0-py3-none-any.whl", hash = "sha256:13d039515c1f24de668e2c93f2e877b9dbe6c6c32328b90a40a49d8b2b85f36d"}, - {file = "readme_renderer-42.0.tar.gz", hash = "sha256:2d55489f83be4992fe4454939d1a051c33edbab778e82761d060c9fc6b308cd1"}, + {file = "readme_renderer-43.0-py3-none-any.whl", hash = "sha256:19db308d86ecd60e5affa3b2a98f017af384678c63c88e5d4556a380e674f3f9"}, + {file = "readme_renderer-43.0.tar.gz", hash = "sha256:1818dd28140813509eeed8d62687f7cd4f7bad90d4db586001c5dc09d4fde311"}, ] [package.dependencies] @@ -4149,104 +4114,90 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "regex" -version = "2023.12.25" +version = "2024.5.15" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, - {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, - {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, - {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, - {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, - {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, - {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, - {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, - {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, - {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, - {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, - {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, - {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, - {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, - {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, + {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, + {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, + {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, + {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, + {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, + {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, + {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, + {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, + {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, + {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, + {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, ] [[package]] @@ -4286,13 +4237,13 @@ requests = ">=2.0.1,<3.0.0" [[package]] name = "responses" -version = "0.24.1" +version = "0.25.0" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" files = [ - {file = "responses-0.24.1-py3-none-any.whl", hash = "sha256:a2b43f4c08bfb9c9bd242568328c65a34b318741d3fab884ac843c5ceeb543f9"}, - {file = "responses-0.24.1.tar.gz", hash = "sha256:b127c6ca3f8df0eb9cc82fd93109a3007a86acb24871834c47b77765152ecf8c"}, + {file = "responses-0.25.0-py3-none-any.whl", hash = "sha256:2f0b9c2b6437db4b528619a77e5d565e4ec2a9532162ac1a131a83529db7be1a"}, + {file = "responses-0.25.0.tar.gz", hash = "sha256:01ae6a02b4f34e39bffceb0fc6786b67a25eae919c6368d05eabc8d9576c2a66"}, ] [package.dependencies] @@ -4319,13 +4270,13 @@ idna2008 = ["idna"] [[package]] name = "rich" -version = "13.7.0" +version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, - {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, ] [package.dependencies] @@ -4351,39 +4302,39 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.0.286" -description = "An extremely fast Python linter, written in Rust." +version = "0.4.4" +description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.0.286-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:8e22cb557e7395893490e7f9cfea1073d19a5b1dd337f44fd81359b2767da4e9"}, - {file = "ruff-0.0.286-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:68ed8c99c883ae79a9133cb1a86d7130feee0397fdf5ba385abf2d53e178d3fa"}, - {file = "ruff-0.0.286-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8301f0bb4ec1a5b29cfaf15b83565136c47abefb771603241af9d6038f8981e8"}, - {file = "ruff-0.0.286-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:acc4598f810bbc465ce0ed84417ac687e392c993a84c7eaf3abf97638701c1ec"}, - {file = "ruff-0.0.286-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88c8e358b445eb66d47164fa38541cfcc267847d1e7a92dd186dddb1a0a9a17f"}, - {file = "ruff-0.0.286-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:0433683d0c5dbcf6162a4beb2356e820a593243f1fa714072fec15e2e4f4c939"}, - {file = "ruff-0.0.286-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddb61a0c4454cbe4623f4a07fef03c5ae921fe04fede8d15c6e36703c0a73b07"}, - {file = "ruff-0.0.286-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:47549c7c0be24c8ae9f2bce6f1c49fbafea83bca80142d118306f08ec7414041"}, - {file = "ruff-0.0.286-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:559aa793149ac23dc4310f94f2c83209eedb16908a0343663be19bec42233d25"}, - {file = "ruff-0.0.286-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d73cfb1c3352e7aa0ce6fb2321f36fa1d4a2c48d2ceac694cb03611ddf0e4db6"}, - {file = "ruff-0.0.286-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:3dad93b1f973c6d1db4b6a5da8690c5625a3fa32bdf38e543a6936e634b83dc3"}, - {file = "ruff-0.0.286-py3-none-musllinux_1_2_i686.whl", hash = "sha256:26afc0851f4fc3738afcf30f5f8b8612a31ac3455cb76e611deea80f5c0bf3ce"}, - {file = "ruff-0.0.286-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9b6b116d1c4000de1b9bf027131dbc3b8a70507788f794c6b09509d28952c512"}, - {file = "ruff-0.0.286-py3-none-win32.whl", hash = "sha256:556e965ac07c1e8c1c2d759ac512e526ecff62c00fde1a046acb088d3cbc1a6c"}, - {file = "ruff-0.0.286-py3-none-win_amd64.whl", hash = "sha256:5d295c758961376c84aaa92d16e643d110be32add7465e197bfdaec5a431a107"}, - {file = "ruff-0.0.286-py3-none-win_arm64.whl", hash = "sha256:1d6142d53ab7f164204b3133d053c4958d4d11ec3a39abf23a40b13b0784e3f0"}, - {file = "ruff-0.0.286.tar.gz", hash = "sha256:f1e9d169cce81a384a26ee5bb8c919fe9ae88255f39a1a69fd1ebab233a85ed2"}, + {file = "ruff-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d44ef5bb6a08e235c8249294fa8d431adc1426bfda99ed493119e6f9ea1bf6"}, + {file = "ruff-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c4efe62b5bbb24178c950732ddd40712b878a9b96b1d02b0ff0b08a090cbd891"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c8e2f1e8fc12d07ab521a9005d68a969e167b589cbcaee354cb61e9d9de9c15"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60ed88b636a463214905c002fa3eaab19795679ed55529f91e488db3fe8976ab"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b90fc5e170fc71c712cc4d9ab0e24ea505c6a9e4ebf346787a67e691dfb72e85"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8e7e6ebc10ef16dcdc77fd5557ee60647512b400e4a60bdc4849468f076f6eef"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9ddb2c494fb79fc208cd15ffe08f32b7682519e067413dbaf5f4b01a6087bcd"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c51c928a14f9f0a871082603e25a1588059b7e08a920f2f9fa7157b5bf08cfe9"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5eb0a4bfd6400b7d07c09a7725e1a98c3b838be557fee229ac0f84d9aa49c36"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b1867ee9bf3acc21778dcb293db504692eda5f7a11a6e6cc40890182a9f9e595"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1aecced1269481ef2894cc495647392a34b0bf3e28ff53ed95a385b13aa45768"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9da73eb616b3241a307b837f32756dc20a0b07e2bcb694fec73699c93d04a69e"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:958b4ea5589706a81065e2a776237de2ecc3e763342e5cc8e02a4a4d8a5e6f95"}, + {file = "ruff-0.4.4-py3-none-win32.whl", hash = "sha256:cb53473849f011bca6e754f2cdf47cafc9c4f4ff4570003a0dad0b9b6890e876"}, + {file = "ruff-0.4.4-py3-none-win_amd64.whl", hash = "sha256:424e5b72597482543b684c11def82669cc6b395aa8cc69acc1858b5ef3e5daae"}, + {file = "ruff-0.4.4-py3-none-win_arm64.whl", hash = "sha256:39df0537b47d3b597293edbb95baf54ff5b49589eb7ff41926d8243caa995ea6"}, + {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, ] [[package]] name = "s3transfer" -version = "0.10.0" +version = "0.10.1" description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">= 3.8" files = [ - {file = "s3transfer-0.10.0-py3-none-any.whl", hash = "sha256:3cdb40f5cfa6966e812209d0994f2a4709b561c88e90cf00c2696d2df4e56b2e"}, - {file = "s3transfer-0.10.0.tar.gz", hash = "sha256:d0c8bbf672d5eebbe4e57945e23b972d963f07d82f661cabf678a5c88831595b"}, + {file = "s3transfer-0.10.1-py3-none-any.whl", hash = "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d"}, + {file = "s3transfer-0.10.1.tar.gz", hash = "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19"}, ] [package.dependencies] @@ -4394,137 +4345,137 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "safetensors" -version = "0.4.1" +version = "0.4.3" description = "" optional = true python-versions = ">=3.7" files = [ - {file = "safetensors-0.4.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:cba01c6b76e01ec453933b3b3c0157c59b52881c83eaa0f7666244e71aa75fd1"}, - {file = "safetensors-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a8f6f679d97ea0135c7935c202feefbd042c149aa70ee759855e890c01c7814"}, - {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbc2ce1f5ae5143a7fb72b71fa71db6a42b4f6cf912aa3acdc6b914084778e68"}, - {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d87d993eaefe6611a9c241a8bd364a5f1ffed5771c74840363a6c4ed8d868f6"}, - {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:097e9af2efa8778cd2f0cba451784253e62fa7cc9fc73c0744d27212f7294e25"}, - {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d10a9f7bae608ccfdc009351f01dc3d8535ff57f9488a58a4c38e45bf954fe93"}, - {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:270b99885ec14abfd56c1d7f28ada81740a9220b4bae960c3de1c6fe84af9e4d"}, - {file = "safetensors-0.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:285b52a481e7ba93e29ad4ec5841ef2c4479ef0a6c633c4e2629e0508453577b"}, - {file = "safetensors-0.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c3c9f0ca510e0de95abd6424789dcbc879942a3a4e29b0dfa99d9427bf1da75c"}, - {file = "safetensors-0.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:88b4653059c903015284a9722f9a46838c654257173b279c8f6f46dbe80b612d"}, - {file = "safetensors-0.4.1-cp310-none-win32.whl", hash = "sha256:2fe6926110e3d425c4b684a4379b7796fdc26ad7d16922ea1696c8e6ea7e920f"}, - {file = "safetensors-0.4.1-cp310-none-win_amd64.whl", hash = "sha256:a79e16222106b2f5edbca1b8185661477d8971b659a3c814cc6f15181a9b34c8"}, - {file = "safetensors-0.4.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:d93321eea0dd7e81b283e47a1d20dee6069165cc158286316d0d06d340de8fe8"}, - {file = "safetensors-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ff8e41c8037db17de0ea2a23bc684f43eaf623be7d34906fe1ac10985b8365e"}, - {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39d36f1d88468a87c437a1bc27c502e71b6ca44c385a9117a9f9ba03a75cc9c6"}, - {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ef010e9afcb4057fb6be3d0a0cfa07aac04fe97ef73fe4a23138d8522ba7c17"}, - {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b287304f2b2220d51ccb51fd857761e78bcffbeabe7b0238f8dc36f2edfd9542"}, - {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e09000b2599e1836314430f81a3884c66a5cbabdff5d9f175b5d560d4de38d78"}, - {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9c80ce0001efa16066358d2dd77993adc25f5a6c61850e4ad096a2232930bce"}, - {file = "safetensors-0.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:413e1f6ac248f7d1b755199a06635e70c3515493d3b41ba46063dec33aa2ebb7"}, - {file = "safetensors-0.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3ac139377cfe71ba04573f1cda66e663b7c3e95be850e9e6c2dd4b5984bd513"}, - {file = "safetensors-0.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:04157d008385bea66d12fe90844a80d4a76dc25ec5230b5bd9a630496d1b7c03"}, - {file = "safetensors-0.4.1-cp311-none-win32.whl", hash = "sha256:5f25297148ec665f0deb8bd67e9564634d8d6841041ab5393ccfe203379ea88b"}, - {file = "safetensors-0.4.1-cp311-none-win_amd64.whl", hash = "sha256:b2f8877990a72ff595507b80f4b69036a9a1986a641f8681adf3425d97d3d2a5"}, - {file = "safetensors-0.4.1-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:eb2c1da1cc39509d1a55620a5f4d14f8911c47a89c926a96e6f4876e864375a3"}, - {file = "safetensors-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:303d2c0415cf15a28f8d7f17379ea3c34c2b466119118a34edd9965983a1a8a6"}, - {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb4cb3e37a9b961ddd68e873b29fe9ab4a081e3703412e34aedd2b7a8e9cafd9"}, - {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae5497adc68669db2fed7cb2dad81e6a6106e79c9a132da3efdb6af1db1014fa"}, - {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b30abd0cddfe959d1daedf92edcd1b445521ebf7ddefc20860ed01486b33c90"}, - {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d784a98c492c751f228a4a894c3b8a092ff08b24e73b5568938c28b8c0e8f8df"}, - {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57a5ab08b0ec7a7caf30d2ac79bb30c89168431aca4f8854464bb9461686925"}, - {file = "safetensors-0.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:edcf3121890b5f0616aa5a54683b1a5d2332037b970e507d6bb7841a3a596556"}, - {file = "safetensors-0.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fdb58dee173ef33634c3016c459d671ca12d11e6acf9db008261cbe58107e579"}, - {file = "safetensors-0.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:780dc21eb3fd32ddd0e8c904bdb0290f2454f4ac21ae71e94f9ce72db1900a5a"}, - {file = "safetensors-0.4.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:48901bd540f8a3c1791314bc5c8a170927bf7f6acddb75bf0a263d081a3637d4"}, - {file = "safetensors-0.4.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:3b0b7b2d5976fbed8a05e2bbdce5816a59e6902e9e7c7e07dc723637ed539787"}, - {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f69903ff49cb30b9227fb5d029bea276ea20d04b06803877a420c5b1b74c689"}, - {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0ddd050e01f3e843aa8c1c27bf68675b8a08e385d0045487af4d70418c3cb356"}, - {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a82bc2bd7a9a0e08239bdd6d7774d64121f136add93dfa344a2f1a6d7ef35fa"}, - {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ace9e66a40f98a216ad661245782483cf79cf56eb2b112650bb904b0baa9db5"}, - {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82cbb8f4d022f2e94498cbefca900698b8ded3d4f85212f47da614001ff06652"}, - {file = "safetensors-0.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:791edc10a3c359a2f5f52d5cddab0df8a45107d91027d86c3d44e57162e5d934"}, - {file = "safetensors-0.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:83c2cfbe8c6304f0891e7bb378d56f66d2148972eeb5f747cd8a2246886f0d8c"}, - {file = "safetensors-0.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:04dd14f53f5500eb4c4149674216ba1000670efbcf4b1b5c2643eb244e7882ea"}, - {file = "safetensors-0.4.1-cp37-none-win32.whl", hash = "sha256:d5b3defa74f3723a388bfde2f5d488742bc4879682bd93267c09a3bcdf8f869b"}, - {file = "safetensors-0.4.1-cp37-none-win_amd64.whl", hash = "sha256:25a043cbb59d4f75e9dd87fdf5c009dd8830105a2c57ace49b72167dd9808111"}, - {file = "safetensors-0.4.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:3f6a520af7f2717c5ecba112041f2c8af1ca6480b97bf957aba81ed9642e654c"}, - {file = "safetensors-0.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c3807ac3b16288dffebb3474b555b56fe466baa677dfc16290dcd02dca1ab228"}, - {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b58ba13a9e82b4bc3fc221914f6ef237fe6c2adb13cede3ace64d1aacf49610"}, - {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dac4bb42f8679aadc59bd91a4c5a1784a758ad49d0912995945cd674089f628e"}, - {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:911b48dc09e321a194def3a7431662ff4f03646832f3a8915bbf0f449b8a5fcb"}, - {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82571d20288c975c1b30b08deb9b1c3550f36b31191e1e81fae87669a92217d0"}, - {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da52ee0dc8ba03348ffceab767bd8230842fdf78f8a996e2a16445747143a778"}, - {file = "safetensors-0.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2536b11ce665834201072e9397404170f93f3be10cca9995b909f023a04501ee"}, - {file = "safetensors-0.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:998fbac99ca956c3a09fe07cc0b35fac26a521fa8865a690686d889f0ff4e4a6"}, - {file = "safetensors-0.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:845be0aafabf2a60c2d482d4e93023fecffe5e5443d801d7a7741bae9de41233"}, - {file = "safetensors-0.4.1-cp38-none-win32.whl", hash = "sha256:ce7a28bc8af685a69d7e869d09d3e180a275e3281e29cf5f1c7319e231932cc7"}, - {file = "safetensors-0.4.1-cp38-none-win_amd64.whl", hash = "sha256:e056fb9e22d118cc546107f97dc28b449d88274207dd28872bd668c86216e4f6"}, - {file = "safetensors-0.4.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:bdc0d039e44a727824639824090bd8869535f729878fa248addd3dc01db30eae"}, - {file = "safetensors-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c1b1d510c7aba71504ece87bf393ea82638df56303e371e5e2cf09d18977dd7"}, - {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bd0afd95c1e497f520e680ea01e0397c0868a3a3030e128438cf6e9e3fcd671"}, - {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f603bdd8deac6726d39f41688ed353c532dd53935234405d79e9eb53f152fbfb"}, - {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8a85e3e47e0d4eebfaf9a58b40aa94f977a56050cb5598ad5396a9ee7c087c6"}, - {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0ccb5aa0f3be2727117e5631200fbb3a5b3a2b3757545a92647d6dd8be6658f"}, - {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d784938534e255473155e4d9f276ee69eb85455b6af1292172c731409bf9adee"}, - {file = "safetensors-0.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a257de175c254d39ccd6a21341cd62eb7373b05c1e618a78096a56a857e0c316"}, - {file = "safetensors-0.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6fd80f7794554091836d4d613d33a7d006e2b8d6ba014d06f97cebdfda744f64"}, - {file = "safetensors-0.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35803201d980efcf964b75a0a2aee97fe5e9ecc5f3ad676b38fafdfe98e0620d"}, - {file = "safetensors-0.4.1-cp39-none-win32.whl", hash = "sha256:7ff8a36e0396776d3ed9a106fc9a9d7c55d4439ca9a056a24bf66d343041d3e6"}, - {file = "safetensors-0.4.1-cp39-none-win_amd64.whl", hash = "sha256:bfa2e20342b81921b98edba52f8deb68843fa9c95250739a56b52ceda5ea5c61"}, - {file = "safetensors-0.4.1-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ae2d5a31cfb8a973a318f7c4d2cffe0bd1fe753cdf7bb41a1939d45a0a06f964"}, - {file = "safetensors-0.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a45dbf03e8334d3a5dc93687d98b6dc422f5d04c7d519dac09b84a3c87dd7c6"}, - {file = "safetensors-0.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2297b359d91126c0f9d4fd17bae3cfa2fe3a048a6971b8db07db746ad92f850c"}, - {file = "safetensors-0.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bda3d98e2bcece388232cfc551ebf063b55bdb98f65ab54df397da30efc7dcc5"}, - {file = "safetensors-0.4.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8934bdfd202ebd0697040a3dff40dd77bc4c5bbf3527ede0532f5e7fb4d970f"}, - {file = "safetensors-0.4.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:42c3710cec7e5c764c7999697516370bee39067de0aa089b7e2cfb97ac8c6b20"}, - {file = "safetensors-0.4.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:53134226053e56bd56e73f7db42596e7908ed79f3c9a1016e4c1dade593ac8e5"}, - {file = "safetensors-0.4.1-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:257d59e40a1b367cb544122e7451243d65b33c3f34d822a347f4eea6fdf97fdf"}, - {file = "safetensors-0.4.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d54c2f1826e790d1eb2d2512bfd0ee443f0206b423d6f27095057c7f18a0687"}, - {file = "safetensors-0.4.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645b3f1138fce6e818e79d4128afa28f0657430764cc045419c1d069ff93f732"}, - {file = "safetensors-0.4.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e9a7ffb1e551c6df51d267f5a751f042b183df22690f6feceac8d27364fd51d7"}, - {file = "safetensors-0.4.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:44e230fbbe120de564b64f63ef3a8e6ff02840fa02849d9c443d56252a1646d4"}, - {file = "safetensors-0.4.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:9d16b3b2fcc6fca012c74bd01b5619c655194d3e3c13e4d4d0e446eefa39a463"}, - {file = "safetensors-0.4.1-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:5d95ea4d8b32233910734a904123bdd3979c137c461b905a5ed32511defc075f"}, - {file = "safetensors-0.4.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:dab431699b5d45e0ca043bc580651ce9583dda594e62e245b7497adb32e99809"}, - {file = "safetensors-0.4.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16d8bbb7344e39cb9d4762e85c21df94ebeb03edac923dd94bb9ed8c10eac070"}, - {file = "safetensors-0.4.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1faf5111c66a6ba91f85dff2e36edaaf36e6966172703159daeef330de4ddc7b"}, - {file = "safetensors-0.4.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:660ca1d8bff6c7bc7c6b30b9b32df74ef3ab668f5df42cefd7588f0d40feadcb"}, - {file = "safetensors-0.4.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ae2f67f04ed0bb2e56fd380a8bd3eef03f609df53f88b6f5c7e89c08e52aae00"}, - {file = "safetensors-0.4.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c8ed5d2c04cdc1afc6b3c28d59580448ac07732c50d94c15e14670f9c473a2ce"}, - {file = "safetensors-0.4.1-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2b6a2814278b6660261aa9a9aae524616de9f1ec364e3716d219b6ed8f91801f"}, - {file = "safetensors-0.4.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3cfd1ca35eacc635f0eaa894e5c5ed83ffebd0f95cac298fd430014fa7323631"}, - {file = "safetensors-0.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4177b456c6b0c722d82429127b5beebdaf07149d265748e97e0a34ff0b3694c8"}, - {file = "safetensors-0.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:313e8472197bde54e3ec54a62df184c414582979da8f3916981b6a7954910a1b"}, - {file = "safetensors-0.4.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fdb4adb76e21bad318210310590de61c9f4adcef77ee49b4a234f9dc48867869"}, - {file = "safetensors-0.4.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1d568628e9c43ca15eb96c217da73737c9ccb07520fafd8a1eba3f2750614105"}, - {file = "safetensors-0.4.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:573b6023a55a2f28085fc0a84e196c779b6cbef4d9e73acea14c8094fee7686f"}, - {file = "safetensors-0.4.1.tar.gz", hash = "sha256:2304658e6ada81a5223225b4efe84748e760c46079bffedf7e321763cafb36c9"}, + {file = "safetensors-0.4.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:dcf5705cab159ce0130cd56057f5f3425023c407e170bca60b4868048bae64fd"}, + {file = "safetensors-0.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb4f8c5d0358a31e9a08daeebb68f5e161cdd4018855426d3f0c23bb51087055"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70a5319ef409e7f88686a46607cbc3c428271069d8b770076feaf913664a07ac"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb9c65bd82f9ef3ce4970dc19ee86be5f6f93d032159acf35e663c6bea02b237"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edb5698a7bc282089f64c96c477846950358a46ede85a1c040e0230344fdde10"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efcc860be094b8d19ac61b452ec635c7acb9afa77beb218b1d7784c6d41fe8ad"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d88b33980222085dd6001ae2cad87c6068e0991d4f5ccf44975d216db3b57376"}, + {file = "safetensors-0.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5fc6775529fb9f0ce2266edd3e5d3f10aab068e49f765e11f6f2a63b5367021d"}, + {file = "safetensors-0.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9c6ad011c1b4e3acff058d6b090f1da8e55a332fbf84695cf3100c649cc452d1"}, + {file = "safetensors-0.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c496c5401c1b9c46d41a7688e8ff5b0310a3b9bae31ce0f0ae870e1ea2b8caf"}, + {file = "safetensors-0.4.3-cp310-none-win32.whl", hash = "sha256:38e2a8666178224a51cca61d3cb4c88704f696eac8f72a49a598a93bbd8a4af9"}, + {file = "safetensors-0.4.3-cp310-none-win_amd64.whl", hash = "sha256:393e6e391467d1b2b829c77e47d726f3b9b93630e6a045b1d1fca67dc78bf632"}, + {file = "safetensors-0.4.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:22f3b5d65e440cec0de8edaa672efa888030802e11c09b3d6203bff60ebff05a"}, + {file = "safetensors-0.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c4fa560ebd4522adddb71dcd25d09bf211b5634003f015a4b815b7647d62ebe"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9afd5358719f1b2cf425fad638fc3c887997d6782da317096877e5b15b2ce93"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d8c5093206ef4b198600ae484230402af6713dab1bd5b8e231905d754022bec7"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0b2104df1579d6ba9052c0ae0e3137c9698b2d85b0645507e6fd1813b70931a"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cf18888606dad030455d18f6c381720e57fc6a4170ee1966adb7ebc98d4d6a3"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bf4f9d6323d9f86eef5567eabd88f070691cf031d4c0df27a40d3b4aaee755b"}, + {file = "safetensors-0.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:585c9ae13a205807b63bef8a37994f30c917ff800ab8a1ca9c9b5d73024f97ee"}, + {file = "safetensors-0.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faefeb3b81bdfb4e5a55b9bbdf3d8d8753f65506e1d67d03f5c851a6c87150e9"}, + {file = "safetensors-0.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:befdf0167ad626f22f6aac6163477fcefa342224a22f11fdd05abb3995c1783c"}, + {file = "safetensors-0.4.3-cp311-none-win32.whl", hash = "sha256:a7cef55929dcbef24af3eb40bedec35d82c3c2fa46338bb13ecf3c5720af8a61"}, + {file = "safetensors-0.4.3-cp311-none-win_amd64.whl", hash = "sha256:840b7ac0eff5633e1d053cc9db12fdf56b566e9403b4950b2dc85393d9b88d67"}, + {file = "safetensors-0.4.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:22d21760dc6ebae42e9c058d75aa9907d9f35e38f896e3c69ba0e7b213033856"}, + {file = "safetensors-0.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d22c1a10dff3f64d0d68abb8298a3fd88ccff79f408a3e15b3e7f637ef5c980"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1648568667f820b8c48317c7006221dc40aced1869908c187f493838a1362bc"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:446e9fe52c051aeab12aac63d1017e0f68a02a92a027b901c4f8e931b24e5397"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fef5d70683643618244a4f5221053567ca3e77c2531e42ad48ae05fae909f542"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a1f4430cc0c9d6afa01214a4b3919d0a029637df8e09675ceef1ca3f0dfa0df"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d603846a8585b9432a0fd415db1d4c57c0f860eb4aea21f92559ff9902bae4d"}, + {file = "safetensors-0.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a844cdb5d7cbc22f5f16c7e2a0271170750763c4db08381b7f696dbd2c78a361"}, + {file = "safetensors-0.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:88887f69f7a00cf02b954cdc3034ffb383b2303bc0ab481d4716e2da51ddc10e"}, + {file = "safetensors-0.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ee463219d9ec6c2be1d331ab13a8e0cd50d2f32240a81d498266d77d07b7e71e"}, + {file = "safetensors-0.4.3-cp312-none-win32.whl", hash = "sha256:d0dd4a1db09db2dba0f94d15addc7e7cd3a7b0d393aa4c7518c39ae7374623c3"}, + {file = "safetensors-0.4.3-cp312-none-win_amd64.whl", hash = "sha256:d14d30c25897b2bf19b6fb5ff7e26cc40006ad53fd4a88244fdf26517d852dd7"}, + {file = "safetensors-0.4.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:d1456f814655b224d4bf6e7915c51ce74e389b413be791203092b7ff78c936dd"}, + {file = "safetensors-0.4.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:455d538aa1aae4a8b279344a08136d3f16334247907b18a5c3c7fa88ef0d3c46"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf476bca34e1340ee3294ef13e2c625833f83d096cfdf69a5342475602004f95"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02ef3a24face643456020536591fbd3c717c5abaa2737ec428ccbbc86dffa7a4"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7de32d0d34b6623bb56ca278f90db081f85fb9c5d327e3c18fd23ac64f465768"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a0deb16a1d3ea90c244ceb42d2c6c276059616be21a19ac7101aa97da448faf"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c59d51f182c729f47e841510b70b967b0752039f79f1de23bcdd86462a9b09ee"}, + {file = "safetensors-0.4.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1f598b713cc1a4eb31d3b3203557ac308acf21c8f41104cdd74bf640c6e538e3"}, + {file = "safetensors-0.4.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5757e4688f20df083e233b47de43845d1adb7e17b6cf7da5f8444416fc53828d"}, + {file = "safetensors-0.4.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fe746d03ed8d193674a26105e4f0fe6c726f5bb602ffc695b409eaf02f04763d"}, + {file = "safetensors-0.4.3-cp37-none-win32.whl", hash = "sha256:0d5ffc6a80f715c30af253e0e288ad1cd97a3d0086c9c87995e5093ebc075e50"}, + {file = "safetensors-0.4.3-cp37-none-win_amd64.whl", hash = "sha256:a11c374eb63a9c16c5ed146457241182f310902bd2a9c18255781bb832b6748b"}, + {file = "safetensors-0.4.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1e31be7945f66be23f4ec1682bb47faa3df34cb89fc68527de6554d3c4258a4"}, + {file = "safetensors-0.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:03a4447c784917c9bf01d8f2ac5080bc15c41692202cd5f406afba16629e84d6"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d244bcafeb1bc06d47cfee71727e775bca88a8efda77a13e7306aae3813fa7e4"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53c4879b9c6bd7cd25d114ee0ef95420e2812e676314300624594940a8d6a91f"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74707624b81f1b7f2b93f5619d4a9f00934d5948005a03f2c1845ffbfff42212"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d52c958dc210265157573f81d34adf54e255bc2b59ded6218500c9b15a750eb"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f9568f380f513a60139971169c4a358b8731509cc19112369902eddb33faa4d"}, + {file = "safetensors-0.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0d9cd8e1560dfc514b6d7859247dc6a86ad2f83151a62c577428d5102d872721"}, + {file = "safetensors-0.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:89f9f17b0dacb913ed87d57afbc8aad85ea42c1085bd5de2f20d83d13e9fc4b2"}, + {file = "safetensors-0.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1139eb436fd201c133d03c81209d39ac57e129f5e74e34bb9ab60f8d9b726270"}, + {file = "safetensors-0.4.3-cp38-none-win32.whl", hash = "sha256:d9c289f140a9ae4853fc2236a2ffc9a9f2d5eae0cb673167e0f1b8c18c0961ac"}, + {file = "safetensors-0.4.3-cp38-none-win_amd64.whl", hash = "sha256:622afd28968ef3e9786562d352659a37de4481a4070f4ebac883f98c5836563e"}, + {file = "safetensors-0.4.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8651c7299cbd8b4161a36cd6a322fa07d39cd23535b144d02f1c1972d0c62f3c"}, + {file = "safetensors-0.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e375d975159ac534c7161269de24ddcd490df2157b55c1a6eeace6cbb56903f0"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:084fc436e317f83f7071fc6a62ca1c513b2103db325cd09952914b50f51cf78f"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:41a727a7f5e6ad9f1db6951adee21bbdadc632363d79dc434876369a17de6ad6"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7dbbde64b6c534548696808a0e01276d28ea5773bc9a2dfb97a88cd3dffe3df"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbae3b4b9d997971431c346edbfe6e41e98424a097860ee872721e176040a893"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01e4b22e3284cd866edeabe4f4d896229495da457229408d2e1e4810c5187121"}, + {file = "safetensors-0.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dd37306546b58d3043eb044c8103a02792cc024b51d1dd16bd3dd1f334cb3ed"}, + {file = "safetensors-0.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8815b5e1dac85fc534a97fd339e12404db557878c090f90442247e87c8aeaea"}, + {file = "safetensors-0.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e011cc162503c19f4b1fd63dfcddf73739c7a243a17dac09b78e57a00983ab35"}, + {file = "safetensors-0.4.3-cp39-none-win32.whl", hash = "sha256:01feb3089e5932d7e662eda77c3ecc389f97c0883c4a12b5cfdc32b589a811c3"}, + {file = "safetensors-0.4.3-cp39-none-win_amd64.whl", hash = "sha256:3f9cdca09052f585e62328c1c2923c70f46814715c795be65f0b93f57ec98a02"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1b89381517891a7bb7d1405d828b2bf5d75528299f8231e9346b8eba092227f9"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cd6fff9e56df398abc5866b19a32124815b656613c1c5ec0f9350906fd798aac"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:840caf38d86aa7014fe37ade5d0d84e23dcfbc798b8078015831996ecbc206a3"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9650713b2cfa9537a2baf7dd9fee458b24a0aaaa6cafcea8bdd5fb2b8efdc34"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4119532cd10dba04b423e0f86aecb96cfa5a602238c0aa012f70c3a40c44b50"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e066e8861eef6387b7c772344d1fe1f9a72800e04ee9a54239d460c400c72aab"}, + {file = "safetensors-0.4.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:90964917f5b0fa0fa07e9a051fbef100250c04d150b7026ccbf87a34a54012e0"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c41e1893d1206aa7054029681778d9a58b3529d4c807002c156d58426c225173"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae7613a119a71a497d012ccc83775c308b9c1dab454806291427f84397d852fd"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9bac020faba7f5dc481e881b14b6425265feabb5bfc552551d21189c0eddc3"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:420a98f593ff9930f5822560d14c395ccbc57342ddff3b463bc0b3d6b1951550"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f5e6883af9a68c0028f70a4c19d5a6ab6238a379be36ad300a22318316c00cb0"}, + {file = "safetensors-0.4.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:cdd0a3b5da66e7f377474599814dbf5cbf135ff059cc73694de129b58a5e8a2c"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9bfb92f82574d9e58401d79c70c716985dc049b635fef6eecbb024c79b2c46ad"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3615a96dd2dcc30eb66d82bc76cda2565f4f7bfa89fcb0e31ba3cea8a1a9ecbb"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:868ad1b6fc41209ab6bd12f63923e8baeb1a086814cb2e81a65ed3d497e0cf8f"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7ffba80aa49bd09195145a7fd233a7781173b422eeb995096f2b30591639517"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0acbe31340ab150423347e5b9cc595867d814244ac14218932a5cf1dd38eb39"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19bbdf95de2cf64f25cd614c5236c8b06eb2cfa47cbf64311f4b5d80224623a3"}, + {file = "safetensors-0.4.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b852e47eb08475c2c1bd8131207b405793bfc20d6f45aff893d3baaad449ed14"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5d07cbca5b99babb692d76d8151bec46f461f8ad8daafbfd96b2fca40cadae65"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1ab6527a20586d94291c96e00a668fa03f86189b8a9defa2cdd34a1a01acc7d5"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02318f01e332cc23ffb4f6716e05a492c5f18b1d13e343c49265149396284a44"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec4b52ce9a396260eb9731eb6aea41a7320de22ed73a1042c2230af0212758ce"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:018b691383026a2436a22b648873ed11444a364324e7088b99cd2503dd828400"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:309b10dbcab63269ecbf0e2ca10ce59223bb756ca5d431ce9c9eeabd446569da"}, + {file = "safetensors-0.4.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b277482120df46e27a58082df06a15aebda4481e30a1c21eefd0921ae7e03f65"}, + {file = "safetensors-0.4.3.tar.gz", hash = "sha256:2f85fc50c4e07a21e95c24e07460fe6f7e2859d0ce88092838352b798ce711c2"}, ] [package.extras] all = ["safetensors[jax]", "safetensors[numpy]", "safetensors[paddlepaddle]", "safetensors[pinned-tf]", "safetensors[quality]", "safetensors[testing]", "safetensors[torch]"] dev = ["safetensors[all]"] jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[numpy]"] +mlx = ["mlx (>=0.0.9)"] numpy = ["numpy (>=1.21.6)"] paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"] pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"] quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] -testing = ["h5py (>=3.7.0)", "huggingface_hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools_rust (>=1.5.2)"] +testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] torch = ["safetensors[numpy]", "torch (>=1.10)"] [[package]] name = "schema" -version = "0.7.5" +version = "0.7.7" description = "Simple data validation library" optional = false python-versions = "*" files = [ - {file = "schema-0.7.5-py2.py3-none-any.whl", hash = "sha256:f3ffdeeada09ec34bf40d7d79996d9f7175db93b7a5065de0faa7f41083c1e6c"}, - {file = "schema-0.7.5.tar.gz", hash = "sha256:f06717112c61895cabc4707752b88716e8420a8819d71404501e114f91043197"}, + {file = "schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde"}, + {file = "schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807"}, ] -[package.dependencies] -contextlib2 = ">=0.5.5" - [[package]] name = "secretstorage" version = "3.3.3" @@ -4552,19 +4503,19 @@ files = [ [[package]] name = "setuptools" -version = "69.0.3" +version = "69.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, - {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, + {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, + {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "simplejson" @@ -4686,48 +4637,48 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] name = "snowflake-connector-python" -version = "3.7.1" +version = "3.10.0" description = "Snowflake Connector for Python" optional = true python-versions = ">=3.8" files = [ - {file = "snowflake-connector-python-3.7.1.tar.gz", hash = "sha256:dc6982f653860edef1614a3047a16bcb07e22775e6e090808bbf4f7629c4191d"}, - {file = "snowflake_connector_python-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c60093a47ead3bf9dafe6194626f433a1872ddb521f1635492584ee65885c3"}, - {file = "snowflake_connector_python-3.7.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:959b1c93f9aff684627c3ce56e9193e23f28d867d932da83a18d8aff613cc182"}, - {file = "snowflake_connector_python-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6966a50dd981ce8f553867e8e4216ba966ae8d0625b2ef63de383f3184d7351"}, - {file = "snowflake_connector_python-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8f1c1c95388b3bb18fb17f185e21860cf4f8feae4167a432183dfadbda3f7ae"}, - {file = "snowflake_connector_python-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:d771ff5e632a088b9aa1c663f956cc89714cc1c5732cbdeb39217d749c8c447b"}, - {file = "snowflake_connector_python-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:796be35e6b4842fc4eaf7d82628f61a9bff946c89a7c47a97c2ac442e7c69b45"}, - {file = "snowflake_connector_python-3.7.1-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:d26b509185333a7681191fed6d4e345d3206bb630e545f575d8cce0149f2f7cf"}, - {file = "snowflake_connector_python-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a972f4cabb3c5fd23f6b310ba1c2216f0d5afa0dbb95d05ad935ddeba700a718"}, - {file = "snowflake_connector_python-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:266506d4001f3260a80425d1d9b61e1f4d1183dcb4623e3799b7dc0757327469"}, - {file = "snowflake_connector_python-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:cb6d90cf992af2a795613ba54a9b0824dc1b73b4f4377b4f7479f40b5135d4eb"}, - {file = "snowflake_connector_python-3.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09b62cb4fd447d99756aa251d07fdec726b4c0173978450d6172e900ede2da7f"}, - {file = "snowflake_connector_python-3.7.1-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:3f466f459942520fc2bc4ae2a0ffbdc2535cb2eac73e180c7ec8fa11a75fe993"}, - {file = "snowflake_connector_python-3.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0a770fe783868b1559ba5e72c436b2781cd0a06ca0c9127776a3f927a91249f"}, - {file = "snowflake_connector_python-3.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f5f178d71892d54f246681e601a628cab7086fbd80828430d795b60a5e4991f"}, - {file = "snowflake_connector_python-3.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:c6822d6b21d22a237d90b0b45b7d28d12d9b9ff392445fc1aaf3fe60aa200e81"}, - {file = "snowflake_connector_python-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2e2fdd6c65f03f0fd649477e35828e7ebd0bd2717852542e720f2a4ab3443bc8"}, - {file = "snowflake_connector_python-3.7.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:0ec3a7d17643167e1224d0f992fd34abf3ddca64099c3c377bbeb5ec54b58fc6"}, - {file = "snowflake_connector_python-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcce35becef53b80d8addbd0d248242c14f74e842eb989baabceb42016800d66"}, - {file = "snowflake_connector_python-3.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:093732fb559d255e6687eb1940e6677ae98cfa3713c548696ad99f345c3c43d7"}, - {file = "snowflake_connector_python-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:cf1021752e11b9e23688440b81e116dd54ada6335a9745db8ce3f223fa5e942c"}, - {file = "snowflake_connector_python-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ab47de37dcf66464f45eb365c66ec07c3af19a4011ef1d575116af308fcb025"}, - {file = "snowflake_connector_python-3.7.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:c4e824c6226a8c01ccc0af258517d707b614254f58cc7b0b6005cf641e34d2c2"}, - {file = "snowflake_connector_python-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97f13203ec29790d1c7e6e7d37a16ddb5182c93820a328a7f6d3678733baadd8"}, - {file = "snowflake_connector_python-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73d2af0435cb29bda23609a94220dd0e4765e997fe669a7ef117620b731c772"}, - {file = "snowflake_connector_python-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:1b833b4165e7c3b0e911fb33aba936bee46b320a367b3f9451987039bef85be9"}, + {file = "snowflake_connector_python-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e2afca4bca70016519d1a7317c498f1d9c56140bf3e40ea40bddcc95fe827ca"}, + {file = "snowflake_connector_python-3.10.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:d19bde29f89b226eb22af4c83134ecb5c229da1d5e960a01b8f495df78dcdc36"}, + {file = "snowflake_connector_python-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bfe013ed97b4dd2e191fd6770a14030d29dd0108817d6ce76b9773250dd2d560"}, + {file = "snowflake_connector_python-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0917c9f9382d830907e1a18ee1208537b203618700a9c671c2a20167b30f574"}, + {file = "snowflake_connector_python-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:7e828bc99240433e6552ac4cc4e37f223ae5c51c7880458ddb281668503c7491"}, + {file = "snowflake_connector_python-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a0d3d06d758455c50b998eabc1fd972a1f67faa5c85ef250fd5986f5a41aab0b"}, + {file = "snowflake_connector_python-3.10.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:4602cb19b204bb03e03d65c6d5328467c9efc0fec53ca56768c3747c8dc8a70f"}, + {file = "snowflake_connector_python-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb1a04b496bbd3e1e2e926df82b2369887b2eea958f535fb934c240bfbabf6c5"}, + {file = "snowflake_connector_python-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c889f9f60f915d657e0a0ad2e6cc52cdcafd9bcbfa95a095aadfd8bcae62b819"}, + {file = "snowflake_connector_python-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:8e441484216ed416a6ed338133e23bd991ac4ba2e46531f4d330f61568c49314"}, + {file = "snowflake_connector_python-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bb4aced19053c67513cecc92311fa9d3b507b2277698c8e987d404f6f3a49fb2"}, + {file = "snowflake_connector_python-3.10.0-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:858315a2feff86213b079c6293ad8d850a778044c664686802ead8bb1337e1bc"}, + {file = "snowflake_connector_python-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adf16e1ca9f46d3bdf68e955ffa42075ebdb251e3b13b59003d04e4fea7d579a"}, + {file = "snowflake_connector_python-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4c5c2a08b39086a5348502652ad4fdf24871d7ab30fd59f6b7b57249158468c"}, + {file = "snowflake_connector_python-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:05011286f42c52eb3e5a6db59ee3eaf79f3039f3a19d7ffac6f4ee143779c637"}, + {file = "snowflake_connector_python-3.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:569301289ada5b0d72d0bd8432b7ca180220335faa6d9a0f7185f60891db6f2c"}, + {file = "snowflake_connector_python-3.10.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4e5641c70a12da9804b74f350b8cbbdffdc7aca5069b096755abd2a1fdcf5d1b"}, + {file = "snowflake_connector_python-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12ff767a1b8c48431549ac28884f8bd9647e63a23f470b05f6ab8d143c4b1475"}, + {file = "snowflake_connector_python-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e52bbc1e2e7bda956525b4229d7f87579f8cabd7d5506b12aa754c4bcdc8c8d7"}, + {file = "snowflake_connector_python-3.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:280a8dcca0249e864419564e38764c08f8841900d9872fec2f2855fda494b29f"}, + {file = "snowflake_connector_python-3.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:67bf570230b0cf818e6766c17245c7355a1f5ea27778e54ab8d09e5bb3536ad9"}, + {file = "snowflake_connector_python-3.10.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:aa1e26f9c571d2c4206da5c978c1b345ffd798d3db1f9ae91985e6243c6bf94b"}, + {file = "snowflake_connector_python-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73e9baa531d5156a03bfe5af462cf6193ec2a01cbb575edf7a2dd3b2a35254c7"}, + {file = "snowflake_connector_python-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e03361c4749e4d65bf0d223fdea1c2d7a33af53b74e873929a6085d150aff17e"}, + {file = "snowflake_connector_python-3.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:e8cddd4357e70ab55d7aeeed144cbbeb1ff658b563d7d8d307afc06178a367ec"}, + {file = "snowflake_connector_python-3.10.0.tar.gz", hash = "sha256:7c7438e958753bd1174b73581d77c92b0b47a86c38d8ea0ba1ea23c442eb8e75"}, ] [package.dependencies] @@ -4739,7 +4690,7 @@ cryptography = ">=3.1.0,<43.0.0" filelock = ">=3.5,<4" idna = ">=2.5,<4" packaging = "*" -platformdirs = ">=2.6.0,<4.0.0" +platformdirs = ">=2.6.0,<5.0.0" pyjwt = "<3.0.0" pyOpenSSL = ">=16.2.0,<25.0.0" pytz = "*" @@ -4756,22 +4707,22 @@ secure-local-storage = ["keyring (>=23.1.0,<25.0.0)"] [[package]] name = "snowflake-sqlalchemy" -version = "1.5.1" +version = "1.5.3" description = "Snowflake SQLAlchemy Dialect" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "snowflake-sqlalchemy-1.5.1.tar.gz", hash = "sha256:4f1383402ffc89311974bd810dee22003aef4af0f312a0fdb55778333ad1abf7"}, - {file = "snowflake_sqlalchemy-1.5.1-py2.py3-none-any.whl", hash = "sha256:df022fb73bc04d68dfb3216ebf7a1bfbd14d22def9c38bbe05275beb258adcd0"}, + {file = "snowflake_sqlalchemy-1.5.3-py3-none-any.whl", hash = "sha256:0a4aa3f391797b22dd7658892f906191fd1d44870503ae7ca9278cddce6e5b89"}, + {file = "snowflake_sqlalchemy-1.5.3.tar.gz", hash = "sha256:79191ec3febfb32bcffecd66f2a7dd561bd571345ea4bccbf41cc1fb5c0682ff"}, ] [package.dependencies] snowflake-connector-python = "<4.0.0" -sqlalchemy = ">=1.4.0,<2.0.0" +sqlalchemy = ">=1.4.19,<2.0.0" [package.extras] -development = ["mock", "numpy", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytz"] -pandas = ["snowflake-connector-python[pandas] (<4.0.0)"] +development = ["mock", "numpy", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytz"] +pandas = ["snowflake-connector-python[pandas]"] [[package]] name = "sortedcontainers" @@ -4797,36 +4748,57 @@ files = [ [[package]] name = "sqlalchemy" -version = "1.4.51" +version = "1.4.52" description = "Database Abstraction Library" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2be4e6294c53f2ec8ea36486b56390e3bcaa052bf3a9a47005687ccf376745d1"}, - {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca484ca11c65e05639ffe80f20d45e6be81fbec7683d6c9a15cd421e6e8b340"}, - {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0535d5b57d014d06ceeaeffd816bb3a6e2dddeb670222570b8c4953e2d2ea678"}, - {file = "SQLAlchemy-1.4.51-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af55cc207865d641a57f7044e98b08b09220da3d1b13a46f26487cc2f898a072"}, - {file = "SQLAlchemy-1.4.51-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7deeae5071930abb3669b5185abb6c33ddfd2398f87660fafdb9e6a5fb0f3f2f"}, - {file = "SQLAlchemy-1.4.51-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0892e7ac8bc76da499ad3ee8de8da4d7905a3110b952e2a35a940dab1ffa550e"}, - {file = "SQLAlchemy-1.4.51-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cacc0b2dd7d22a918a9642fc89840a5d3cee18a0e1fe41080b1141b23b10916"}, - {file = "SQLAlchemy-1.4.51-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:245c67c88e63f1523e9216cad6ba3107dea2d3ee19adc359597a628afcabfbcb"}, - {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ec7a0ed9b32afdf337172678a4a0e6419775ba4e649b66f49415615fa47efbd"}, - {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352df882088a55293f621328ec33b6ffca936ad7f23013b22520542e1ab6ad1b"}, - {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86a22143a4001f53bf58027b044da1fb10d67b62a785fc1390b5c7f089d9838c"}, - {file = "SQLAlchemy-1.4.51-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c37bc677690fd33932182b85d37433845de612962ed080c3e4d92f758d1bd894"}, - {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c55040d8ea65414de7c47f1a23823cd9f3fad0dc93e6b6b728fee81230f817b"}, - {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ef80328e3fee2be0a1abe3fe9445d3a2e52a1282ba342d0dab6edf1fef4707"}, - {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f8cafa6f885a0ff5e39efa9325195217bb47d5929ab0051636610d24aef45ade"}, - {file = "SQLAlchemy-1.4.51-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8f2df79a46e130235bc5e1bbef4de0583fb19d481eaa0bffa76e8347ea45ec6"}, - {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb18549b770351b54e1ab5da37d22bc530b8bfe2ee31e22b9ebe650640d2ef12"}, - {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55e699466106d09f028ab78d3c2e1f621b5ef2c8694598242259e4515715da7c"}, - {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2ad16880ccd971ac8e570550fbdef1385e094b022d6fc85ef3ce7df400dddad3"}, - {file = "SQLAlchemy-1.4.51-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b97fd5bb6b7c1a64b7ac0632f7ce389b8ab362e7bd5f60654c2a418496be5d7f"}, - {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e646b19f47d655261b22df9976e572f588185279970efba3d45c377127d35349"}, - {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3cf56cc36d42908495760b223ca9c2c0f9f0002b4eddc994b24db5fcb86a9e4"}, - {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0d661cff58c91726c601cc0ee626bf167b20cc4d7941c93c5f3ac28dc34ddbea"}, - {file = "SQLAlchemy-1.4.51-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3823dda635988e6744d4417e13f2e2b5fe76c4bf29dd67e95f98717e1b094cad"}, - {file = "SQLAlchemy-1.4.51.tar.gz", hash = "sha256:e7908c2025eb18394e32d65dd02d2e37e17d733cdbe7d78231c2b6d7eb20cdb9"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:f68016f9a5713684c1507cc37133c28035f29925c75c0df2f9d0f7571e23720a"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24bb0f81fbbb13d737b7f76d1821ec0b117ce8cbb8ee5e8641ad2de41aa916d3"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e93983cc0d2edae253b3f2141b0a3fb07e41c76cd79c2ad743fc27eb79c3f6db"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:84e10772cfc333eb08d0b7ef808cd76e4a9a30a725fb62a0495877a57ee41d81"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:427988398d2902de042093d17f2b9619a5ebc605bf6372f7d70e29bde6736842"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-win32.whl", hash = "sha256:1296f2cdd6db09b98ceb3c93025f0da4835303b8ac46c15c2136e27ee4d18d94"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-win_amd64.whl", hash = "sha256:80e7f697bccc56ac6eac9e2df5c98b47de57e7006d2e46e1a3c17c546254f6ef"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2f251af4c75a675ea42766880ff430ac33291c8d0057acca79710f9e5a77383d"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb8f9e4c4718f111d7b530c4e6fb4d28f9f110eb82e7961412955b3875b66de0"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afb1672b57f58c0318ad2cff80b384e816735ffc7e848d8aa51e0b0fc2f4b7bb"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-win32.whl", hash = "sha256:6e41cb5cda641f3754568d2ed8962f772a7f2b59403b95c60c89f3e0bd25f15e"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-win_amd64.whl", hash = "sha256:5bed4f8c3b69779de9d99eb03fd9ab67a850d74ab0243d1be9d4080e77b6af12"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:49e3772eb3380ac88d35495843daf3c03f094b713e66c7d017e322144a5c6b7c"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:618827c1a1c243d2540314c6e100aee7af09a709bd005bae971686fab6723554"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9acf369aaadb71a725b7e83a5ef40ca3de1cf4cdc93fa847df6b12d3cd924b"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-win32.whl", hash = "sha256:763bd97c4ebc74136ecf3526b34808c58945023a59927b416acebcd68d1fc126"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-win_amd64.whl", hash = "sha256:f12aaf94f4d9679ca475975578739e12cc5b461172e04d66f7a3c39dd14ffc64"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:853fcfd1f54224ea7aabcf34b227d2b64a08cbac116ecf376907968b29b8e763"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f98dbb8fcc6d1c03ae8ec735d3c62110949a3b8bc6e215053aa27096857afb45"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e135fff2e84103bc15c07edd8569612ce317d64bdb391f49ce57124a73f45c5"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b5de6af8852500d01398f5047d62ca3431d1e29a331d0b56c3e14cb03f8094c"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3491c85df263a5c2157c594f54a1a9c72265b75d3777e61ee13c556d9e43ffc9"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-win32.whl", hash = "sha256:427c282dd0deba1f07bcbf499cbcc9fe9a626743f5d4989bfdfd3ed3513003dd"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-win_amd64.whl", hash = "sha256:ca5ce82b11731492204cff8845c5e8ca1a4bd1ade85e3b8fcf86e7601bfc6a39"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:29d4247313abb2015f8979137fe65f4eaceead5247d39603cc4b4a610936cd2b"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a752bff4796bf22803d052d4841ebc3c55c26fb65551f2c96e90ac7c62be763a"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7ea11727feb2861deaa293c7971a4df57ef1c90e42cb53f0da40c3468388000"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d913f8953e098ca931ad7f58797f91deed26b435ec3756478b75c608aa80d139"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a251146b921725547ea1735b060a11e1be705017b568c9f8067ca61e6ef85f20"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-win32.whl", hash = "sha256:1f8e1c6a6b7f8e9407ad9afc0ea41c1f65225ce505b79bc0342159de9c890782"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-win_amd64.whl", hash = "sha256:346ed50cb2c30f5d7a03d888e25744154ceac6f0e6e1ab3bc7b5b77138d37710"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4dae6001457d4497736e3bc422165f107ecdd70b0d651fab7f731276e8b9e12d"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d2e08d79f5bf250afb4a61426b41026e448da446b55e4770c2afdc1e200fce"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bbce5dd7c7735e01d24f5a60177f3e589078f83c8a29e124a6521b76d825b85"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bdb7b4d889631a3b2a81a3347c4c3f031812eb4adeaa3ee4e6b0d028ad1852b5"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c294ae4e6bbd060dd79e2bd5bba8b6274d08ffd65b58d106394cb6abbf35cf45"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-win32.whl", hash = "sha256:bcdfb4b47fe04967669874fb1ce782a006756fdbebe7263f6a000e1db969120e"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-win_amd64.whl", hash = "sha256:7d0dbc56cb6af5088f3658982d3d8c1d6a82691f31f7b0da682c7b98fa914e91"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:a551d5f3dc63f096ed41775ceec72fdf91462bb95abdc179010dc95a93957800"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ab773f9ad848118df7a9bbabca53e3f1002387cdbb6ee81693db808b82aaab0"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2de46f5d5396d5331127cfa71f837cca945f9a2b04f7cb5a01949cf676db7d1"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7027be7930a90d18a386b25ee8af30514c61f3852c7268899f23fdfbd3107181"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99224d621affbb3c1a4f72b631f8393045f4ce647dd3262f12fe3576918f8bf3"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-win32.whl", hash = "sha256:c124912fd4e1bb9d1e7dc193ed482a9f812769cb1e69363ab68e01801e859821"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-win_amd64.whl", hash = "sha256:2c286fab42e49db23c46ab02479f328b8bdb837d3e281cae546cc4085c83b680"}, + {file = "SQLAlchemy-1.4.52.tar.gz", hash = "sha256:80e63bbdc5217dad3485059bdf6f65a7d43f33c8bde619df5c220edf03d87296"}, ] [package.dependencies] @@ -4899,17 +4871,18 @@ files = [ [[package]] name = "tenacity" -version = "8.2.3" +version = "8.3.0" description = "Retry code until it succeeds" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, - {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, + {file = "tenacity-8.3.0-py3-none-any.whl", hash = "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185"}, + {file = "tenacity-8.3.0.tar.gz", hash = "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2"}, ] [package.extras] -doc = ["reno", "sphinx", "tornado (>=4.5)"] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "tiktoken" @@ -4976,130 +4949,120 @@ files = [ [[package]] name = "tokenizers" -version = "0.15.1" +version = "0.19.1" description = "" optional = true python-versions = ">=3.7" files = [ - {file = "tokenizers-0.15.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:32c9491dd1bcb33172c26b454dbd607276af959b9e78fa766e2694cafab3103c"}, - {file = "tokenizers-0.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29a1b784b870a097e7768f8c20c2dd851e2c75dad3efdae69a79d3e7f1d614d5"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0049fbe648af04148b08cb211994ce8365ee628ce49724b56aaefd09a3007a78"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e84b3c235219e75e24de6b71e6073cd2c8d740b14d88e4c6d131b90134e3a338"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8cc575769ea11d074308c6d71cb10b036cdaec941562c07fc7431d956c502f0e"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bf28f299c4158e6d0b5eaebddfd500c4973d947ffeaca8bcbe2e8c137dff0b"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:506555f98361db9c74e1323a862d77dcd7d64c2058829a368bf4159d986e339f"}, - {file = "tokenizers-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7061b0a28ade15906f5b2ec8c48d3bdd6e24eca6b427979af34954fbe31d5cef"}, - {file = "tokenizers-0.15.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ed5e35507b7a0e2aac3285c4f5e37d4ec5cfc0e5825b862b68a0aaf2757af52"}, - {file = "tokenizers-0.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1c9df9247df0de6509dd751b1c086e5f124b220133b5c883bb691cb6fb3d786f"}, - {file = "tokenizers-0.15.1-cp310-none-win32.whl", hash = "sha256:dd999af1b4848bef1b11d289f04edaf189c269d5e6afa7a95fa1058644c3f021"}, - {file = "tokenizers-0.15.1-cp310-none-win_amd64.whl", hash = "sha256:39d06a57f7c06940d602fad98702cf7024c4eee7f6b9fe76b9f2197d5a4cc7e2"}, - {file = "tokenizers-0.15.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8ad034eb48bf728af06915e9294871f72fcc5254911eddec81d6df8dba1ce055"}, - {file = "tokenizers-0.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea9ede7c42f8fa90f31bfc40376fd91a7d83a4aa6ad38e6076de961d48585b26"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b85d6fe1a20d903877aa0ef32ef6b96e81e0e48b71c206d6046ce16094de6970"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a7d44f656320137c7d643b9c7dcc1814763385de737fb98fd2643880910f597"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd244bd0793cdacf27ee65ec3db88c21f5815460e8872bbeb32b040469d6774e"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3f4a36e371b3cb1123adac8aeeeeab207ad32f15ed686d9d71686a093bb140"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2921a53966afb29444da98d56a6ccbef23feb3b0c0f294b4e502370a0a64f25"}, - {file = "tokenizers-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f49068cf51f49c231067f1a8c9fc075ff960573f6b2a956e8e1b0154fb638ea5"}, - {file = "tokenizers-0.15.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0ab1a22f20eaaab832ab3b00a0709ca44a0eb04721e580277579411b622c741c"}, - {file = "tokenizers-0.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:671268f24b607c4adc6fa2b5b580fd4211b9f84b16bd7f46d62f8e5be0aa7ba4"}, - {file = "tokenizers-0.15.1-cp311-none-win32.whl", hash = "sha256:a4f03e33d2bf7df39c8894032aba599bf90f6f6378e683a19d28871f09bb07fc"}, - {file = "tokenizers-0.15.1-cp311-none-win_amd64.whl", hash = "sha256:30f689537bcc7576d8bd4daeeaa2cb8f36446ba2f13f421b173e88f2d8289c4e"}, - {file = "tokenizers-0.15.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f3a379dd0898a82ea3125e8f9c481373f73bffce6430d4315f0b6cd5547e409"}, - {file = "tokenizers-0.15.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d870ae58bba347d38ac3fc8b1f662f51e9c95272d776dd89f30035c83ee0a4f"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d6d28e0143ec2e253a8a39e94bf1d24776dbe73804fa748675dbffff4a5cd6d8"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61ae9ac9f44e2da128ee35db69489883b522f7abe033733fa54eb2de30dac23d"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d8e322a47e29128300b3f7749a03c0ec2bce0a3dc8539ebff738d3f59e233542"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:760334f475443bc13907b1a8e1cb0aeaf88aae489062546f9704dce6c498bfe2"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b173753d4aca1e7d0d4cb52b5e3ffecfb0ca014e070e40391b6bb4c1d6af3f2"}, - {file = "tokenizers-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c1f13d457c8f0ab17e32e787d03470067fe8a3b4d012e7cc57cb3264529f4a"}, - {file = "tokenizers-0.15.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:425b46ceff4505f20191df54b50ac818055d9d55023d58ae32a5d895b6f15bb0"}, - {file = "tokenizers-0.15.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:681ac6ba3b4fdaf868ead8971221a061f580961c386e9732ea54d46c7b72f286"}, - {file = "tokenizers-0.15.1-cp312-none-win32.whl", hash = "sha256:f2272656063ccfba2044df2115095223960d80525d208e7a32f6c01c351a6f4a"}, - {file = "tokenizers-0.15.1-cp312-none-win_amd64.whl", hash = "sha256:9abe103203b1c6a2435d248d5ff4cceebcf46771bfbc4957a98a74da6ed37674"}, - {file = "tokenizers-0.15.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2ce9ed5c8ef26b026a66110e3c7b73d93ec2d26a0b1d0ea55ddce61c0e5f446f"}, - {file = "tokenizers-0.15.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89b24d366137986c3647baac29ef902d2d5445003d11c30df52f1bd304689aeb"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0faebedd01b413ab777ca0ee85914ed8b031ea5762ab0ea60b707ce8b9be6842"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdbd9dfcdad4f3b95d801f768e143165165055c18e44ca79a8a26de889cd8e85"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:97194324c12565b07e9993ca9aa813b939541185682e859fb45bb8d7d99b3193"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:485e43e2cc159580e0d83fc919ec3a45ae279097f634b1ffe371869ffda5802c"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:191d084d60e3589d6420caeb3f9966168269315f8ec7fbc3883122dc9d99759d"}, - {file = "tokenizers-0.15.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01c28cc8d7220634a75b14c53f4fc9d1b485f99a5a29306a999c115921de2897"}, - {file = "tokenizers-0.15.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:325212027745d3f8d5d5006bb9e5409d674eb80a184f19873f4f83494e1fdd26"}, - {file = "tokenizers-0.15.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:3c5573603c36ce12dbe318bcfb490a94cad2d250f34deb2f06cb6937957bbb71"}, - {file = "tokenizers-0.15.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:1441161adb6d71a15a630d5c1d8659d5ebe41b6b209586fbeea64738e58fcbb2"}, - {file = "tokenizers-0.15.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:382a8d0c31afcfb86571afbfefa37186df90865ce3f5b731842dab4460e53a38"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e76959783e3f4ec73b3f3d24d4eec5aa9225f0bee565c48e77f806ed1e048f12"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:401df223e5eb927c5961a0fc6b171818a2bba01fb36ef18c3e1b69b8cd80e591"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52606c233c759561a16e81b2290a7738c3affac7a0b1f0a16fe58dc22e04c7d"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b72c658bbe5a05ed8bc2ac5ad782385bfd743ffa4bc87d9b5026341e709c6f44"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25f5643a2f005c42f0737a326c6c6bdfedfdc9a994b10a1923d9c3e792e4d6a6"}, - {file = "tokenizers-0.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c5b6f633999d6b42466bbfe21be2e26ad1760b6f106967a591a41d8cbca980e"}, - {file = "tokenizers-0.15.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ceb5c9ad11a015150b545c1a11210966a45b8c3d68a942e57cf8938c578a77ca"}, - {file = "tokenizers-0.15.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:bedd4ce0c4872db193444c395b11c7697260ce86a635ab6d48102d76be07d324"}, - {file = "tokenizers-0.15.1-cp37-none-win32.whl", hash = "sha256:cd6caef6c14f5ed6d35f0ddb78eab8ca6306d0cd9870330bccff72ad014a6f42"}, - {file = "tokenizers-0.15.1-cp37-none-win_amd64.whl", hash = "sha256:d2bd7af78f58d75a55e5df61efae164ab9200c04b76025f9cc6eeb7aff3219c2"}, - {file = "tokenizers-0.15.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:59b3ca6c02e0bd5704caee274978bd055de2dff2e2f39dadf536c21032dfd432"}, - {file = "tokenizers-0.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:48fe21b67c22583bed71933a025fd66b1f5cfae1baefa423c3d40379b5a6e74e"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3d190254c66a20fb1efbdf035e6333c5e1f1c73b1f7bfad88f9c31908ac2c2c4"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fef90c8f5abf17d48d6635f5fd92ad258acd1d0c2d920935c8bf261782cfe7c8"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fac011ef7da3357aa7eb19efeecf3d201ede9618f37ddedddc5eb809ea0963ca"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:574ec5b3e71d1feda6b0ecac0e0445875729b4899806efbe2b329909ec75cb50"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aca16c3c0637c051a59ea99c4253f16fbb43034fac849076a7e7913b2b9afd2d"}, - {file = "tokenizers-0.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a6f238fc2bbfd3e12e8529980ec1624c7e5b69d4e959edb3d902f36974f725a"}, - {file = "tokenizers-0.15.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:587e11a26835b73c31867a728f32ca8a93c9ded4a6cd746516e68b9d51418431"}, - {file = "tokenizers-0.15.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6456e7ad397352775e2efdf68a9ec5d6524bbc4543e926eef428d36de627aed4"}, - {file = "tokenizers-0.15.1-cp38-none-win32.whl", hash = "sha256:614f0da7dd73293214bd143e6221cafd3f7790d06b799f33a987e29d057ca658"}, - {file = "tokenizers-0.15.1-cp38-none-win_amd64.whl", hash = "sha256:a4fa0a20d9f69cc2bf1cfce41aa40588598e77ec1d6f56bf0eb99769969d1ede"}, - {file = "tokenizers-0.15.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8d3f18a45e0cf03ce193d5900460dc2430eec4e14c786e5d79bddba7ea19034f"}, - {file = "tokenizers-0.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:38dbd6c38f88ad7d5dc5d70c764415d38fe3bcd99dc81638b572d093abc54170"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:777286b1f7e52de92aa4af49fe31046cfd32885d1bbaae918fab3bba52794c33"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58d4d550a3862a47dd249892d03a025e32286eb73cbd6bc887fb8fb64bc97165"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eda68ce0344f35042ae89220b40a0007f721776b727806b5c95497b35714bb7"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cd33d15f7a3a784c3b665cfe807b8de3c6779e060349bd5005bb4ae5bdcb437"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a1aa370f978ac0bfb50374c3a40daa93fd56d47c0c70f0c79607fdac2ccbb42"}, - {file = "tokenizers-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:241482b940340fff26a2708cb9ba383a5bb8a2996d67a0ff2c4367bf4b86cc3a"}, - {file = "tokenizers-0.15.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:68f30b05f46a4d9aba88489eadd021904afe90e10a7950e28370d6e71b9db021"}, - {file = "tokenizers-0.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5a3c5d8025529670462b881b7b2527aacb6257398c9ec8e170070432c3ae3a82"}, - {file = "tokenizers-0.15.1-cp39-none-win32.whl", hash = "sha256:74d1827830f60a9d78da8f6d49a1fbea5422ce0eea42e2617877d23380a7efbc"}, - {file = "tokenizers-0.15.1-cp39-none-win_amd64.whl", hash = "sha256:9ff499923e4d6876d6b6a63ea84a56805eb35e91dd89b933a7aee0c56a3838c6"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b3aa007a0f4408f62a8471bdaa3faccad644cbf2622639f2906b4f9b5339e8b8"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f3d4176fa93d8b2070db8f3c70dc21106ae6624fcaaa334be6bdd3a0251e729e"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d0e463655ef8b2064df07bd4a445ed7f76f6da3b286b4590812587d42f80e89"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:089138fd0351b62215c462a501bd68b8df0e213edcf99ab9efd5dba7b4cb733e"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e563ac628f5175ed08e950430e2580e544b3e4b606a0995bb6b52b3a3165728"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:244dcc28c5fde221cb4373961b20da30097669005b122384d7f9f22752487a46"}, - {file = "tokenizers-0.15.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d82951d46052dddae1369e68ff799a0e6e29befa9a0b46e387ae710fd4daefb0"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7b14296bc9059849246ceb256ffbe97f8806a9b5d707e0095c22db312f4fc014"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0309357bb9b6c8d86cdf456053479d7112074b470651a997a058cd7ad1c4ea57"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:083f06e9d8d01b70b67bcbcb7751b38b6005512cce95808be6bf34803534a7e7"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85288aea86ada579789447f0dcec108ebef8da4b450037eb4813d83e4da9371e"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:385e6fcb01e8de90c1d157ae2a5338b23368d0b1c4cc25088cdca90147e35d17"}, - {file = "tokenizers-0.15.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:60067edfcbf7d6cd448ac47af41ec6e84377efbef7be0c06f15a7c1dd069e044"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f7e37f89acfe237d4eaf93c3b69b0f01f407a7a5d0b5a8f06ba91943ea3cf10"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:6a63a15b523d42ebc1f4028e5a568013388c2aefa4053a263e511cb10aaa02f1"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2417d9e4958a6c2fbecc34c27269e74561c55d8823bf914b422e261a11fdd5fd"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8550974bace6210e41ab04231e06408cf99ea4279e0862c02b8d47e7c2b2828"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:194ba82129b171bcd29235a969e5859a93e491e9b0f8b2581f500f200c85cfdd"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1bfd95eef8b01e6c0805dbccc8eaf41d8c5a84f0cce72c0ab149fe76aae0bce6"}, - {file = "tokenizers-0.15.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b87a15dd72f8216b03c151e3dace00c75c3fe7b0ee9643c25943f31e582f1a34"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6ac22f358a0c2a6c685be49136ce7ea7054108986ad444f567712cf274b34cd8"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e9d1f046a9b9d9a95faa103f07db5921d2c1c50f0329ebba4359350ee02b18b"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a0fd30a4b74485f6a7af89fffb5fb84d6d5f649b3e74f8d37f624cc9e9e97cf"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e45dc206b9447fa48795a1247c69a1732d890b53e2cc51ba42bc2fefa22407"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eaff56ef3e218017fa1d72007184401f04cb3a289990d2b6a0a76ce71c95f96"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b41dc107e4a4e9c95934e79b025228bbdda37d9b153d8b084160e88d5e48ad6f"}, - {file = "tokenizers-0.15.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1922b8582d0c33488764bcf32e80ef6054f515369e70092729c928aae2284bc2"}, - {file = "tokenizers-0.15.1.tar.gz", hash = "sha256:c0a331d6d5a3d6e97b7f99f562cee8d56797180797bc55f12070e495e717c980"}, + {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"}, + {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"}, + {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4"}, + {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642"}, + {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46"}, + {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1"}, + {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe"}, + {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e"}, + {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98"}, + {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3"}, + {file = "tokenizers-0.19.1-cp310-none-win32.whl", hash = "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837"}, + {file = "tokenizers-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403"}, + {file = "tokenizers-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059"}, + {file = "tokenizers-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14"}, + {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594"}, + {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc"}, + {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2"}, + {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe"}, + {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d"}, + {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa"}, + {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6"}, + {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b"}, + {file = "tokenizers-0.19.1-cp311-none-win32.whl", hash = "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256"}, + {file = "tokenizers-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66"}, + {file = "tokenizers-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153"}, + {file = "tokenizers-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a"}, + {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95"}, + {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266"}, + {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52"}, + {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f"}, + {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840"}, + {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3"}, + {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea"}, + {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c"}, + {file = "tokenizers-0.19.1-cp312-none-win32.whl", hash = "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57"}, + {file = "tokenizers-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a"}, + {file = "tokenizers-0.19.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1"}, + {file = "tokenizers-0.19.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267"}, + {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214"}, + {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626"}, + {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a"}, + {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4"}, + {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad"}, + {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d"}, + {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6"}, + {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f"}, + {file = "tokenizers-0.19.1-cp37-none-win32.whl", hash = "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3"}, + {file = "tokenizers-0.19.1-cp37-none-win_amd64.whl", hash = "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc"}, + {file = "tokenizers-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5"}, + {file = "tokenizers-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1"}, + {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22"}, + {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc"}, + {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d"}, + {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee"}, + {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3"}, + {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf"}, + {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6"}, + {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26"}, + {file = "tokenizers-0.19.1-cp38-none-win32.whl", hash = "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975"}, + {file = "tokenizers-0.19.1-cp38-none-win_amd64.whl", hash = "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1"}, + {file = "tokenizers-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d"}, + {file = "tokenizers-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a"}, + {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051"}, + {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58"}, + {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe"}, + {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a"}, + {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba"}, + {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227"}, + {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d"}, + {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478"}, + {file = "tokenizers-0.19.1-cp39-none-win32.whl", hash = "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb"}, + {file = "tokenizers-0.19.1-cp39-none-win_amd64.whl", hash = "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256"}, + {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334"}, + {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd"}, + {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594"}, + {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda"}, + {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022"}, + {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e"}, + {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75"}, + {file = "tokenizers-0.19.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d"}, + {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285"}, + {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828"}, + {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2"}, + {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a"}, + {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49"}, + {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574"}, + {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c"}, + {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3"}, + {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85"}, + {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1"}, + {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876"}, + {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88"}, + {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7"}, + {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243"}, + {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439"}, + {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b"}, + {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af"}, + {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab"}, + {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f"}, + {file = "tokenizers-0.19.1.tar.gz", hash = "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3"}, ] [package.dependencies] -huggingface_hub = ">=0.16.4,<1.0" +huggingface-hub = ">=0.16.4,<1.0" [package.extras] dev = ["tokenizers[testing]"] -docs = ["setuptools_rust", "sphinx", "sphinx_rtd_theme"] -testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] +docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] +testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] [[package]] name = "tomli" @@ -5114,24 +5077,24 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.3" +version = "0.12.5" description = "Style preserving TOML library" optional = true python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, - {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, + {file = "tomlkit-0.12.5-py3-none-any.whl", hash = "sha256:af914f5a9c59ed9d0762c7b64d3b5d5df007448eb9cd2edc8a46b1eafead172f"}, + {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"}, ] [[package]] name = "tqdm" -version = "4.66.1" +version = "4.66.4" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, - {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, ] [package.dependencies] @@ -5145,26 +5108,26 @@ telegram = ["requests"] [[package]] name = "trafilatura" -version = "1.6.4" -description = "Python package and command-line tool designed to gather text on the Web. It includes discovery, extraction and text processing components. Its main applications are web crawling, downloads, scraping, and extraction of main texts, metadata and comments." +version = "1.9.0" +description = "Python package and command-line tool designed to gather text on the Web, includes all necessary discovery and text processing components to perform web crawling, downloads, scraping, and extraction of main texts, metadata and comments." optional = true python-versions = ">=3.6" files = [ - {file = "trafilatura-1.6.4-py3-none-any.whl", hash = "sha256:e148efc283cce017c42335ecfcb0e2feb0a7b31dac5e29fa5d545285c54d2395"}, - {file = "trafilatura-1.6.4.tar.gz", hash = "sha256:97609203089b73be9aa8d1aaaefd5d8dd93e2e92037b0d72f19976af91b18c8a"}, + {file = "trafilatura-1.9.0-py3-none-any.whl", hash = "sha256:8ea09de226c4eae25685f65b2cf56de47260d5c858ed3a8a0bc9c3ddd0841344"}, + {file = "trafilatura-1.9.0.tar.gz", hash = "sha256:e6833d29ab8a13ed853937d7c91e6868bc62efbe10214ac2b106436dd23d1412"}, ] [package.dependencies] certifi = "*" charset-normalizer = {version = ">=3.2.0", markers = "python_version >= \"3.7\""} -courlan = ">=0.9.5" -htmldate = ">=1.6.1" +courlan = ">=1.1.0" +htmldate = ">=1.8.1" justext = ">=3.0.0" -lxml = {version = "4.9.4", markers = "platform_system != \"Darwin\" or python_version > \"3.8\""} +lxml = {version = ">=4.9.4,<5.2.0", markers = "platform_system != \"Darwin\" or python_version > \"3.8\""} urllib3 = {version = ">=1.26,<3", markers = "python_version >= \"3.7\""} [package.extras] -all = ["brotli", "cchardet (>=2.1.7)", "faust-cchardet (>=2.1.18)", "htmldate[speed] (>=1.6.0)", "py3langid (>=0.2.2)", "pycurl (>=7.45.2)"] +all = ["brotli", "cchardet (>=2.1.7)", "faust-cchardet (>=2.1.19)", "htmldate[speed] (>=1.8.1)", "py3langid (>=0.2.2)", "pycurl (>=7.45.3)"] gui = ["Gooey (>=1.0.1)"] [[package]] @@ -5184,13 +5147,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.37.0" +version = "4.40.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = true python-versions = ">=3.8.0" files = [ - {file = "transformers-4.37.0-py3-none-any.whl", hash = "sha256:669d4e2c12661e71c464eb18d6a9b9a2c74d4cba0f4648bb9323896bdd046826"}, - {file = "transformers-4.37.0.tar.gz", hash = "sha256:5a0fdee36168f751770f7036ce7a8787be14f8b0d8f29806c493b6cb819c6c83"}, + {file = "transformers-4.40.2-py3-none-any.whl", hash = "sha256:71cb94301ec211a2e1d4b8c8d18dcfaa902dfa00a089dceca167a8aa265d6f2d"}, + {file = "transformers-4.40.2.tar.gz", hash = "sha256:657b6054a2097671398d976ad46e60836e7e15f9ea9551631a96e33cb9240649"}, ] [package.dependencies] @@ -5201,22 +5164,22 @@ packaging = ">=20.0" pyyaml = ">=5.1" regex = "!=2019.12.17" requests = "*" -safetensors = ">=0.3.1" -tokenizers = ">=0.14,<0.19" +safetensors = ">=0.4.1" +tokenizers = ">=0.19,<0.20" tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.21.0)"] -agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.11,!=1.12.0)"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision"] +agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.14,<0.19)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -docs = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.19,<0.20)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +docs = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.19,<0.20)", "torch", "torchaudio", "torchvision"] docs-specific = ["hf-doc-builder"] flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] @@ -5233,32 +5196,32 @@ ray = ["ray[tune] (>=2.7.0)"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] sagemaker = ["sagemaker (>=2.31.0)"] sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] -serving = ["fastapi", "pydantic (<2)", "starlette", "uvicorn"] +serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "tensorboard", "timeout-decorator"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] timm = ["timm"] -tokenizers = ["tokenizers (>=0.14,<0.19)"] -torch = ["accelerate (>=0.21.0)", "torch (>=1.11,!=1.12.0)"] +tokenizers = ["tokenizers (>=0.19,<0.20)"] +torch = ["accelerate (>=0.21.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.19.3,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.19.3,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.19,<0.20)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] [[package]] name = "twine" -version = "4.0.2" +version = "5.0.0" description = "Collection of utilities for publishing packages on PyPI" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "twine-4.0.2-py3-none-any.whl", hash = "sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8"}, - {file = "twine-4.0.2.tar.gz", hash = "sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8"}, + {file = "twine-5.0.0-py3-none-any.whl", hash = "sha256:a262933de0b484c53408f9edae2e7821c1c45a3314ff2df9bdd343aa7ab8edc0"}, + {file = "twine-5.0.0.tar.gz", hash = "sha256:89b0cc7d370a4b66421cc6102f269aa910fe0f1861c124f573cf2ddedbc10cf4"}, ] [package.dependencies] @@ -5274,46 +5237,71 @@ urllib3 = ">=1.26.0" [[package]] name = "types-awscrt" -version = "0.20.2" +version = "0.20.9" description = "Type annotations and code completion for awscrt" optional = false -python-versions = ">=3.7,<4.0" +python-versions = "<4.0,>=3.7" files = [ - {file = "types_awscrt-0.20.2-py3-none-any.whl", hash = "sha256:7b5ccaaecc030ffe9e28f59e876a3013f401181ff04e0458e961d0bb9c7cdfbd"}, - {file = "types_awscrt-0.20.2.tar.gz", hash = "sha256:5e29986a4ad3968ac3d82caa85d668d3c66224c9ee78be3fe64bce30dae7b798"}, + {file = "types_awscrt-0.20.9-py3-none-any.whl", hash = "sha256:3ae374b553e7228ba41a528cf42bd0b2ad7303d806c73eff4aaaac1515e3ea4e"}, + {file = "types_awscrt-0.20.9.tar.gz", hash = "sha256:64898a2f4a2468f66233cb8c29c5f66de907cf80ba1ef5bb1359aef2f81bb521"}, ] +[[package]] +name = "types-requests" +version = "2.31.0.6" +description = "Typing stubs for requests" +optional = true +python-versions = ">=3.7" +files = [ + {file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"}, + {file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"}, +] + +[package.dependencies] +types-urllib3 = "*" + [[package]] name = "types-s3transfer" -version = "0.10.0" +version = "0.10.1" description = "Type annotations and code completion for s3transfer" optional = false -python-versions = ">=3.7,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "types_s3transfer-0.10.0-py3-none-any.whl", hash = "sha256:44fcdf0097b924a9aab1ee4baa1179081a9559ca62a88c807e2b256893ce688f"}, - {file = "types_s3transfer-0.10.0.tar.gz", hash = "sha256:35e4998c25df7f8985ad69dedc8e4860e8af3b43b7615e940d53c00d413bdc69"}, + {file = "types_s3transfer-0.10.1-py3-none-any.whl", hash = "sha256:49a7c81fa609ac1532f8de3756e64b58afcecad8767933310228002ec7adff74"}, + {file = "types_s3transfer-0.10.1.tar.gz", hash = "sha256:02154cce46528287ad76ad1a0153840e0492239a0887e8833466eccf84b98da0"}, +] + +[[package]] +name = "types-urllib3" +version = "1.26.25.14" +description = "Typing stubs for urllib3" +optional = true +python-versions = "*" +files = [ + {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, + {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, ] [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] name = "tzdata" -version = "2023.4" +version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, - {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, ] [[package]] @@ -5351,13 +5339,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.25.0" +version = "20.26.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, - {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, ] [package.dependencies] @@ -5366,18 +5354,18 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] name = "voyageai" -version = "0.2.1" +version = "0.2.2" description = "" optional = true -python-versions = ">=3.7.1,<4.0.0" +python-versions = "<4.0.0,>=3.7.1" files = [ - {file = "voyageai-0.2.1-py3-none-any.whl", hash = "sha256:a00978f880adb689718940f8a5c5e4b80f76053e51d1e7e2dd35a9f2025b5506"}, - {file = "voyageai-0.2.1.tar.gz", hash = "sha256:209ddf06343a271538a1f48340bcc4ddf93f346797462d4cf58d32a891d56093"}, + {file = "voyageai-0.2.2-py3-none-any.whl", hash = "sha256:caba84fa448bb82eeb39a4c4479978dc08bff9e2473773fea9cdcdd737560e4d"}, + {file = "voyageai-0.2.2.tar.gz", hash = "sha256:e477ea2aa6d54580426c7a4a67ad45cfba5480db2bad4da3eb74007b3984f3a5"}, ] [package.dependencies] @@ -5441,17 +5429,17 @@ files = [ [[package]] name = "websocket-client" -version = "1.7.0" +version = "1.8.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, - {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, ] [package.extras] -docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] @@ -5538,13 +5526,13 @@ files = [ [[package]] name = "werkzeug" -version = "3.0.1" +version = "3.0.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.1-py3-none-any.whl", hash = "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10"}, - {file = "werkzeug-3.0.1.tar.gz", hash = "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc"}, + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, ] [package.dependencies] @@ -5669,18 +5657,18 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.17.0" +version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "trafilatura", "transformers", "voyageai"] @@ -5719,4 +5707,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "edfa749ceeaae8216026c5c18245dbb284383a3b6772d648319253cc9657a2d1" +content-hash = "d6bedf8297bbcd3c597bf93c4fb25e57192a8195941d0ad462bbacb9835c8607" diff --git a/pyproject.toml b/pyproject.toml index c7f89bdca..e60ec709a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -152,11 +152,10 @@ pytest-clarity = "^1.0.1" optional = true [tool.poetry.group.dev.dependencies] -ruff = "^0.0.286" -black = "^23.7.0" -pyright = "^1.1.355" -pre-commit = "^3.5.0" -boto3-stubs = {extras = ["bedrock", "iam", "opensearch", "s3", "sagemaker"], version = "^1.34.18"} +ruff = "^0.4.4" +pyright = "^1.1.363" +pre-commit = "^3.7.1" +boto3-stubs = {extras = ["bedrock", "iam", "opensearch", "s3", "sagemaker"], version = "^1.34.105"} [tool.poetry.group.docs] @@ -172,12 +171,11 @@ mkdocs-literate-nav = "^0.6.0" mkdocs-section-index = "^0.3.6" pymdown-extensions = "^10.3" -[tool.black] -line-length=120 -skip_magic_trailing_comma = true - [tool.ruff] -line-length=120 +line-length = 120 + +[tool.ruff.format] +skip-magic-trailing-comma = true [tool.pyright] venvPath = "." diff --git a/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py b/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py index 2c911da18..a2c51f58b 100644 --- a/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py +++ b/tests/unit/drivers/image_generation/test_amazon_bedrock_stable_diffusion_image_generation_driver.py @@ -37,9 +37,7 @@ def test_init(self, driver): def test_init_requires_image_generation_model_driver(self, session): with pytest.raises(TypeError): - AmazonBedrockImageGenerationDriver( - session=session, model="stability.stable-diffusion-xl-v1" - ) # pyright: ignore + AmazonBedrockImageGenerationDriver(session=session, model="stability.stable-diffusion-xl-v1") # pyright: ignore def test_try_text_to_image(self, driver): driver.bedrock_client.invoke_model.return_value = { diff --git a/tests/unit/drivers/web_scraper/test_markdownify_web_scraper_driver.py b/tests/unit/drivers/web_scraper/test_markdownify_web_scraper_driver.py index 4e7487c6b..33500839f 100644 --- a/tests/unit/drivers/web_scraper/test_markdownify_web_scraper_driver.py +++ b/tests/unit/drivers/web_scraper/test_markdownify_web_scraper_driver.py @@ -2,7 +2,6 @@ import pytest from griptape.drivers.web_scraper.markdownify_web_scraper_driver import MarkdownifyWebScraperDriver -from griptape.utils.import_utils import import_optional_dependency class TestMarkdownifyWebScraperDriver: @@ -12,9 +11,7 @@ def mock_playwright(self, mocker): @pytest.fixture(autouse=True) def mock_content(self, mock_playwright): - mock_content = ( - mock_playwright.__enter__.return_value.chromium.launch.return_value.__enter__.return_value.new_page.return_value.content - ) + mock_content = mock_playwright.__enter__.return_value.chromium.launch.return_value.__enter__.return_value.new_page.return_value.content mock_content.return_value = 'foobar' return mock_content From e2f7f72d8895f4c9cbd9834dadb744a748c24364 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 20 May 2024 08:35:30 -0700 Subject: [PATCH 050/145] Refactor how configs work (#765) --- docs/examples/multiple-agent-shared-memory.md | 10 +- docs/griptape-framework/data/chunkers.md | 2 +- .../drivers/embedding-drivers.md | 11 +- .../drivers/event-listener-drivers.md | 8 +- .../drivers/prompt-drivers.md | 188 ++++++++---------- docs/griptape-framework/misc/events.md | 9 +- docs/griptape-framework/misc/tokenizers.md | 2 +- docs/griptape-framework/structures/config.md | 51 +---- .../official-tools/rest-api-client.md | 12 +- griptape/config/__init__.py | 14 -- .../config/amazon_bedrock_structure_config.py | 84 ++++---- griptape/config/anthropic_structure_config.py | 59 ++---- griptape/config/base_structure_config.py | 23 ++- griptape/config/google_structure_config.py | 50 ++--- griptape/config/openai_structure_config.py | 60 +++--- griptape/config/structure_config.py | 65 +++--- .../config/structure_global_drivers_config.py | 45 ----- .../config/structure_task_memory_config.py | 23 --- ...re_task_memory_extraction_engine_config.py | 18 -- ...ask_memory_extraction_engine_csv_config.py | 11 - ...sk_memory_extraction_engine_json_config.py | 11 - ...ructure_task_memory_query_engine_config.py | 22 -- ...cture_task_memory_summary_engine_config.py | 11 - .../structure/summary_conversation_memory.py | 2 +- .../task/storage/text_artifact_storage.py | 10 +- griptape/structures/structure.py | 72 ++----- griptape/tasks/csv_extraction_task.py | 4 +- griptape/tasks/image_query_task.py | 4 +- .../tasks/inpainting_image_generation_task.py | 2 +- griptape/tasks/json_extraction_task.py | 4 +- .../outpainting_image_generation_task.py | 2 +- .../tasks/prompt_image_generation_task.py | 2 +- griptape/tasks/prompt_task.py | 2 +- griptape/tasks/text_query_task.py | 4 +- griptape/tasks/text_summary_task.py | 4 +- griptape/tasks/text_to_speech_task.py | 2 +- .../tasks/variation_image_generation_task.py | 2 +- griptape/utils/chat.py | 4 +- griptape/utils/prompt_stack.py | 2 +- griptape/utils/stream.py | 2 +- tests/mocks/mock_structure_config.py | 59 ++---- .../test_amazon_bedrock_structure_config.py | 135 +++---------- .../config/test_anthropic_structure_config.py | 113 +++-------- .../config/test_google_structure_config.py | 108 ++-------- .../config/test_openai_structure_config.py | 162 ++++----------- tests/unit/config/test_structure_config.py | 91 ++------- tests/unit/tasks/test_json_extraction_task.py | 6 +- tests/utils/structure_tester.py | 5 +- 48 files changed, 459 insertions(+), 1133 deletions(-) delete mode 100644 griptape/config/structure_global_drivers_config.py delete mode 100644 griptape/config/structure_task_memory_config.py delete mode 100644 griptape/config/structure_task_memory_extraction_engine_config.py delete mode 100644 griptape/config/structure_task_memory_extraction_engine_csv_config.py delete mode 100644 griptape/config/structure_task_memory_extraction_engine_json_config.py delete mode 100644 griptape/config/structure_task_memory_query_engine_config.py delete mode 100644 griptape/config/structure_task_memory_summary_engine_config.py diff --git a/docs/examples/multiple-agent-shared-memory.md b/docs/examples/multiple-agent-shared-memory.md index cf3966c97..ac69abcd4 100644 --- a/docs/examples/multiple-agent-shared-memory.md +++ b/docs/examples/multiple-agent-shared-memory.md @@ -15,7 +15,7 @@ from griptape.engines import VectorQueryEngine, PromptSummaryEngine, CsvExtracti from griptape.memory import TaskMemory from griptape.artifacts import TextArtifact from griptape.memory.task.storage import TextArtifactStorage -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig AZURE_OPENAI_ENDPOINT_1 = os.environ["AZURE_OPENAI_ENDPOINT_1"] @@ -59,11 +59,9 @@ loader = Agent( WebScraper() ], config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=azure_prompt_driver, - vector_store_driver=mongo_driver, - embedding_driver=azure_embedding_driver - ) + prompt_driver=azure_prompt_driver, + vector_store_driver=mongo_driver, + embedding_driver=azure_embedding_driver ), ) asker = Agent( diff --git a/docs/griptape-framework/data/chunkers.md b/docs/griptape-framework/data/chunkers.md index 0df73f965..b67951b2a 100644 --- a/docs/griptape-framework/data/chunkers.md +++ b/docs/griptape-framework/data/chunkers.md @@ -15,7 +15,7 @@ from griptape.chunkers import TextChunker from griptape.tokenizers import OpenAiTokenizer TextChunker( # set an optional custom tokenizer - tokenizer=OpenAiTokenizer(model="gpt-4"), + tokenizer=OpenAiTokenizer(model="gpt-4o"), # optionally modify default number of tokens max_tokens=100 ).chunk("long text") diff --git a/docs/griptape-framework/drivers/embedding-drivers.md b/docs/griptape-framework/drivers/embedding-drivers.md index 332e9674a..876013e7f 100644 --- a/docs/griptape-framework/drivers/embedding-drivers.md +++ b/docs/griptape-framework/drivers/embedding-drivers.md @@ -174,18 +174,13 @@ from griptape.drivers import ( OpenAiChatPromptDriver, VoyageAiEmbeddingDriver, ) -from griptape.config import ( - StructureGlobalDriversConfig, - StructureConfig, -) +from griptape.config import StructureConfig agent = Agent( tools=[WebScraper(), TaskMemoryClient(off_prompt=False)], config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=OpenAiChatPromptDriver(model="gpt-4"), - embedding_driver=VoyageAiEmbeddingDriver(), - ) + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o"), + embedding_driver=VoyageAiEmbeddingDriver(), ), ) diff --git a/docs/griptape-framework/drivers/event-listener-drivers.md b/docs/griptape-framework/drivers/event-listener-drivers.md index da9a6c05d..d35489f98 100644 --- a/docs/griptape-framework/drivers/event-listener-drivers.md +++ b/docs/griptape-framework/drivers/event-listener-drivers.md @@ -118,7 +118,7 @@ The [AwsIotCoreEventListenerDriver](../../reference/griptape/drivers/event_liste ```python import os -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig from griptape.drivers import AwsIotCoreEventListenerDriver, OpenAiChatPromptDriver from griptape.events import ( EventListener, @@ -134,10 +134,8 @@ agent = Agent( ) ], config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=OpenAiChatPromptDriver( - model="gpt-3.5-turbo", temperature=0.7 - ), + prompt_driver=OpenAiChatPromptDriver( + model="gpt-3.5-turbo", temperature=0.7 ) ), event_listeners=[ diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index db6bf5d96..ae798b22e 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -8,13 +8,11 @@ You can instantiate drivers and pass them to structures: from griptape.structures import Agent from griptape.drivers import OpenAiChatPromptDriver from griptape.rules import Rule -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=OpenAiChatPromptDriver(model="gpt-4", temperature=0.3), - ) + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o", temperature=0.3), ), input_template="You will be provided with a tweet, and your task is to classify its sentiment as positive, neutral, or negative. Tweet: {{ args[0] }}", rules=[ @@ -70,18 +68,16 @@ import os from griptape.structures import Agent from griptape.drivers import OpenAiChatPromptDriver from griptape.rules import Rule -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=OpenAiChatPromptDriver( - api_key=os.environ["OPENAI_API_KEY"], - temperature=0.1, - model="gpt-3.5-turbo", - response_format="json_object", - seed=42, - ) + prompt_driver=OpenAiChatPromptDriver( + api_key=os.environ["OPENAI_API_KEY"], + temperature=0.1, + model="gpt-3.5-turbo", + response_format="json_object", + seed=42, ) ), input_template="You will be provided with a description of a mood, and your task is to generate the CSS code for a color that matches it. Description: {{ args[0] }}", @@ -107,17 +103,15 @@ import os from griptape.structures import Agent from griptape.rules import Rule from griptape.drivers import AzureOpenAiChatPromptDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AzureOpenAiChatPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY_1"], - model="gpt-3.5-turbo-16k", - azure_deployment=os.environ["AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], - ) + prompt_driver=AzureOpenAiChatPromptDriver( + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], + model="gpt-3.5-turbo-16k", + azure_deployment=os.environ["AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], ) ), rules=[ @@ -139,18 +133,16 @@ The [AzureOpenAiCompletionPromptDriver](../../reference/griptape/drivers/prompt/ import os from griptape.structures import Agent from griptape.drivers import AzureOpenAiCompletionPromptDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AzureOpenAiCompletionPromptDriver( - api_key=os.environ["AZURE_OPENAI_API_KEY_1"], - model="text-davinci-003", - azure_deployment=os.environ["AZURE_OPENAI_DAVINCI_DEPLOYMENT_ID"], - azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], - temperature=1 - ) + prompt_driver=AzureOpenAiCompletionPromptDriver( + api_key=os.environ["AZURE_OPENAI_API_KEY_1"], + model="text-davinci-003", + azure_deployment=os.environ["AZURE_OPENAI_DAVINCI_DEPLOYMENT_ID"], + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], + temperature=1 ) ) ) @@ -176,15 +168,13 @@ The [CoherePromptDriver](../../reference/griptape/drivers/prompt/cohere_prompt_d import os from griptape.structures import Agent from griptape.drivers import CoherePromptDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=CoherePromptDriver( - model="command", - api_key=os.environ['COHERE_API_KEY'], - ) + prompt_driver=CoherePromptDriver( + model="command", + api_key=os.environ['COHERE_API_KEY'], ) ) ) @@ -203,15 +193,13 @@ The [AnthropicPromptDriver](../../reference/griptape/drivers/prompt/anthropic_pr import os from griptape.structures import Agent from griptape.drivers import AnthropicPromptDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AnthropicPromptDriver( - model="claude-3-opus-20240229", - api_key=os.environ['ANTHROPIC_API_KEY'], - ) + prompt_driver=AnthropicPromptDriver( + model="claude-3-opus-20240229", + api_key=os.environ['ANTHROPIC_API_KEY'], ) ) ) @@ -230,15 +218,13 @@ The [GooglePromptDriver](../../reference/griptape/drivers/prompt/google_prompt_d import os from griptape.structures import Agent from griptape.drivers import GooglePromptDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=GooglePromptDriver( - model="gemini-pro", - api_key=os.environ['GOOGLE_API_KEY'], - ) + prompt_driver=GooglePromptDriver( + model="gemini-pro", + api_key=os.environ['GOOGLE_API_KEY'], ) ) ) @@ -264,7 +250,7 @@ from griptape.structures import Agent from griptape.drivers import HuggingFaceHubPromptDriver from griptape.rules import Rule, Ruleset from griptape.utils import PromptStack -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: @@ -284,12 +270,10 @@ def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=HuggingFaceHubPromptDriver( - model="tiiuae/falcon-7b-instruct", - api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], - prompt_stack_to_string=prompt_stack_to_string_converter, - ) + prompt_driver=HuggingFaceHubPromptDriver( + model="tiiuae/falcon-7b-instruct", + api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + prompt_stack_to_string=prompt_stack_to_string_converter, ) ), rulesets=[ @@ -317,17 +301,15 @@ The [HuggingFaceHubPromptDriver](#hugging-face-hub) also supports [Text Generati import os from griptape.structures import Agent from griptape.drivers import HuggingFaceHubPromptDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=HuggingFaceHubPromptDriver( - model="http://127.0.0.1:8080", - api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], - ), - ) + prompt_driver=HuggingFaceHubPromptDriver( + model="http://127.0.0.1:8080", + api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + ), ), ) @@ -353,7 +335,7 @@ from griptape.structures import Agent from griptape.drivers import HuggingFaceHubPromptDriver from griptape.rules import Rule, Ruleset from griptape.utils import PromptStack -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig # Override the default Prompt Stack to string converter @@ -375,12 +357,10 @@ def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=HuggingFaceHubPromptDriver( - model="tiiuae/falcon-7b-instruct", - api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], - prompt_stack_to_string=prompt_stack_to_string_converter, - ), + prompt_driver=HuggingFaceHubPromptDriver( + model="tiiuae/falcon-7b-instruct", + api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + prompt_stack_to_string=prompt_stack_to_string_converter, ) ), rulesets=[ @@ -423,16 +403,14 @@ from griptape.drivers import ( SageMakerLlamaPromptModelDriver, ) from griptape.rules import Rule -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AmazonSageMakerPromptDriver( - model=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], - prompt_model_driver=SageMakerLlamaPromptModelDriver(), - temperature=0.75, - ), + prompt_driver=AmazonSageMakerPromptDriver( + model=os.environ["SAGEMAKER_LLAMA_ENDPOINT_NAME"], + prompt_model_driver=SageMakerLlamaPromptModelDriver(), + temperature=0.75, ) ), rules=[ @@ -455,15 +433,13 @@ from griptape.drivers import ( AmazonSageMakerPromptDriver, SageMakerFalconPromptModelDriver, ) -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AmazonSageMakerPromptDriver( - model=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], - prompt_model_driver=SageMakerFalconPromptModelDriver(), - ), + prompt_driver=AmazonSageMakerPromptDriver( + model=os.environ["SAGEMAKER_FALCON_ENDPOINT_NAME"], + prompt_model_driver=SageMakerFalconPromptModelDriver(), ) ) ) @@ -486,16 +462,14 @@ To use this model with Amazon Bedrock, use the [BedrockTitanPromptModelDriver](. ```python from griptape.structures import Agent from griptape.drivers import AmazonBedrockPromptDriver, BedrockTitanPromptModelDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="amazon.titan-text-express-v1", - prompt_model_driver=BedrockTitanPromptModelDriver( - top_p=1, - ) + prompt_driver=AmazonBedrockPromptDriver( + model="amazon.titan-text-express-v1", + prompt_model_driver=BedrockTitanPromptModelDriver( + top_p=1, ) ) ) @@ -515,17 +489,15 @@ To use this model with Amazon Bedrock, use the [BedrockClaudePromptModelDriver]( from griptape.structures import Agent from griptape.drivers import AmazonBedrockPromptDriver, BedrockClaudePromptModelDriver from griptape.rules import Rule -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-3-sonnet-20240229-v1:0", - prompt_model_driver=BedrockClaudePromptModelDriver( - top_p=1, - ), - ), + prompt_driver=AmazonBedrockPromptDriver( + model="anthropic.claude-3-sonnet-20240229-v1:0", + prompt_model_driver=BedrockClaudePromptModelDriver( + top_p=1, + ) ) ), rules=[ @@ -554,15 +526,13 @@ To use this model with Amazon Bedrock, use the [BedrockLlamaPromptModelDriver](. ```python from griptape.structures import Agent from griptape.drivers import AmazonBedrockPromptDriver, BedrockLlamaPromptModelDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="meta.llama2-13b-chat-v1", - prompt_model_driver=BedrockLlamaPromptModelDriver(), - ), + prompt_driver=AmazonBedrockPromptDriver( + model="meta.llama2-13b-chat-v1", + prompt_model_driver=BedrockLlamaPromptModelDriver(), ) ) ) @@ -578,16 +548,14 @@ To use this model with Amazon Bedrock, use the [BedrockJurassicPromptModelDriver ```python from griptape.structures import Agent from griptape.drivers import AmazonBedrockPromptDriver, BedrockJurassicPromptModelDriver -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="ai21.j2-ultra-v1", - prompt_model_driver=BedrockJurassicPromptModelDriver(top_p=0.95), - temperature=0.7, - ) + prompt_driver=AmazonBedrockPromptDriver( + model="ai21.j2-ultra-v1", + prompt_model_driver=BedrockJurassicPromptModelDriver(top_p=0.95), + temperature=0.7, ) ) ) diff --git a/docs/griptape-framework/misc/events.md b/docs/griptape-framework/misc/events.md index f45f77199..e4ff8b8f3 100644 --- a/docs/griptape-framework/misc/events.md +++ b/docs/griptape-framework/misc/events.md @@ -130,15 +130,20 @@ from griptape.events import CompletionChunkEvent, EventListener from griptape.tasks import ToolkitTask from griptape.structures import Pipeline from griptape.tools import WebScraper, TaskMemoryClient +from griptape.config import OpenAiStructureConfig +from griptape.drivers import OpenAiChatPromptDriver pipeline = Pipeline( + config=OpenAiStructureConfig( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o", stream=True) + ), event_listeners=[ EventListener( lambda e: print(e.token, end="", flush=True), event_types=[CompletionChunkEvent], ) - ] + ], ) pipeline.add_tasks( @@ -162,7 +167,7 @@ from griptape.tools import WebScraper pipeline = Pipeline() -pipeline.config.global_drivers.prompt_driver.stream = True +pipeline.config.prompt_driver.stream = True pipeline.add_tasks(ToolkitTask("Based on https://griptape.ai, tell me what griptape is.", tools=[WebScraper()])) for artifact in Stream(pipeline).run(): diff --git a/docs/griptape-framework/misc/tokenizers.md b/docs/griptape-framework/misc/tokenizers.md index b523d04e4..aaf488187 100644 --- a/docs/griptape-framework/misc/tokenizers.md +++ b/docs/griptape-framework/misc/tokenizers.md @@ -13,7 +13,7 @@ Tokenizers are a low level abstraction that you will rarely interact with direct from griptape.tokenizers import OpenAiTokenizer -tokenizer = OpenAiTokenizer(model="gpt-4") +tokenizer = OpenAiTokenizer(model="gpt-4o") print(tokenizer.count_tokens("Hello world!")) print(tokenizer.count_input_tokens_left("Hello world!")) diff --git a/docs/griptape-framework/structures/config.md b/docs/griptape-framework/structures/config.md index c392200f9..817dfb7fe 100644 --- a/docs/griptape-framework/structures/config.md +++ b/docs/griptape-framework/structures/config.md @@ -74,44 +74,19 @@ This approach ensures that you are informed through clear error messages if you ```python import os from griptape.structures import Agent -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig from griptape.drivers import AnthropicPromptDriver agent = Agent( config=StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=AnthropicPromptDriver( - model="claude-3-sonnet-20240229", - api_key=os.environ["ANTHROPIC_API_KEY"], - ) + prompt_driver=AnthropicPromptDriver( + model="claude-3-sonnet-20240229", + api_key=os.environ["ANTHROPIC_API_KEY"], ) ), ) ``` -### Task Memory - -Griptape allows for detailed control over [Task Memory](./task-memory.md) settings, permitting overrides on a per Engine basis, beyond the global Drivers configuration. - -```python -from griptape.structures import Agent -from griptape.config import StructureConfig, StructureTaskMemoryConfig, StructureTaskMemoryQueryEngineConfig -from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver - - -agent = Agent( - config=StructureConfig( - task_memory=StructureTaskMemoryConfig( - query_engine=StructureTaskMemoryQueryEngineConfig( - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=OpenAiEmbeddingDriver(), - ) - ) - ) - ) -) -``` - ### Loading/Saving Configs Configuration classes in Griptape offer utility methods for loading, saving, and merging configurations, streamlining the management of complex setups. @@ -122,19 +97,15 @@ from griptape.config import AmazonBedrockStructureConfig from griptape.drivers import AmazonBedrockCohereEmbeddingDriver custom_config = AmazonBedrockStructureConfig() -custom_config.global_drivers.embedding_driver = AmazonBedrockCohereEmbeddingDriver() +custom_config.embedding_driver = AmazonBedrockCohereEmbeddingDriver() custom_config.merge_config( { - "task_memory": { - "summary_engine": { - "prompt_driver": { - "model": "amazon.titan-text-express-v1", - "prompt_model_driver": { - "type": "BedrockTitanPromptModelDriver", - }, - } - } - } + "embedding_driver": { + "base_url": None, + "model": "text-embedding-3-small", + "organization": None, + "type": "OpenAiEmbeddingDriver", + }, } ) serialized_config = custom_config.to_json() diff --git a/docs/griptape-tools/official-tools/rest-api-client.md b/docs/griptape-tools/official-tools/rest-api-client.md index b253d0bce..a889f0e81 100644 --- a/docs/griptape-tools/official-tools/rest-api-client.md +++ b/docs/griptape-tools/official-tools/rest-api-client.md @@ -14,7 +14,7 @@ from griptape.memory.structure import ConversationMemory from griptape.structures import Pipeline from griptape.tasks import ToolkitTask from griptape.tools import RestApiClient -from griptape.config import StructureConfig, StructureGlobalDriversConfig +from griptape.config import StructureConfig posts_client = RestApiClient( base_url="https://jsonplaceholder.typicode.com", @@ -119,12 +119,10 @@ posts_client = RestApiClient( pipeline = Pipeline( conversation_memory=ConversationMemory(), config = StructureConfig( - global_drivers=StructureGlobalDriversConfig( - prompt_driver=OpenAiChatPromptDriver( - model="gpt-4", - temperature=0.1 - ), - ) + prompt_driver=OpenAiChatPromptDriver( + model="gpt-4o", + temperature=0.1 + ), ), ) diff --git a/griptape/config/__init__.py b/griptape/config/__init__.py index 273a338f2..849556017 100644 --- a/griptape/config/__init__.py +++ b/griptape/config/__init__.py @@ -1,12 +1,5 @@ from .base_config import BaseConfig -from .structure_global_drivers_config import StructureGlobalDriversConfig -from .structure_task_memory_extraction_engine_csv_config import StructureTaskMemoryExtractionEngineCsvConfig -from .structure_task_memory_extraction_engine_json_config import StructureTaskMemoryExtractionEngineJsonConfig -from .structure_task_memory_extraction_engine_config import StructureTaskMemoryExtractionEngineConfig -from .structure_task_memory_query_engine_config import StructureTaskMemoryQueryEngineConfig -from .structure_task_memory_summary_engine_config import StructureTaskMemorySummaryEngineConfig -from .structure_task_memory_config import StructureTaskMemoryConfig from .base_structure_config import BaseStructureConfig from .structure_config import StructureConfig @@ -19,13 +12,6 @@ __all__ = [ "BaseConfig", "BaseStructureConfig", - "StructureTaskMemoryConfig", - "StructureGlobalDriversConfig", - "StructureTaskMemoryQueryEngineConfig", - "StructureTaskMemorySummaryEngineConfig", - "StructureTaskMemoryExtractionEngineConfig", - "StructureTaskMemoryExtractionEngineCsvConfig", - "StructureTaskMemoryExtractionEngineJsonConfig", "StructureConfig", "OpenAiStructureConfig", "AmazonBedrockStructureConfig", diff --git a/griptape/config/amazon_bedrock_structure_config.py b/griptape/config/amazon_bedrock_structure_config.py index 54b8d91c7..cefb97f57 100644 --- a/griptape/config/amazon_bedrock_structure_config.py +++ b/griptape/config/amazon_bedrock_structure_config.py @@ -1,69 +1,61 @@ from attrs import Factory, define, field -from griptape.config import ( - BaseStructureConfig, - StructureGlobalDriversConfig, - StructureTaskMemoryConfig, - StructureTaskMemoryExtractionEngineConfig, - StructureTaskMemoryExtractionEngineCsvConfig, - StructureTaskMemoryExtractionEngineJsonConfig, - StructureTaskMemoryQueryEngineConfig, - StructureTaskMemorySummaryEngineConfig, -) +from griptape.config import StructureConfig from griptape.drivers import ( AmazonBedrockImageGenerationDriver, AmazonBedrockImageQueryDriver, AmazonBedrockPromptDriver, AmazonBedrockTitanEmbeddingDriver, - BedrockClaudePromptModelDriver, + BaseEmbeddingDriver, + BaseImageGenerationDriver, + BasePromptDriver, + BaseVectorStoreDriver, BedrockClaudeImageQueryModelDriver, + BedrockClaudePromptModelDriver, BedrockTitanImageGenerationModelDriver, LocalVectorStoreDriver, ) @define() -class AmazonBedrockStructureConfig(BaseStructureConfig): - global_drivers: StructureGlobalDriversConfig = field( +class AmazonBedrockStructureConfig(StructureConfig): + prompt_driver: BasePromptDriver = field( + default=Factory( + lambda: AmazonBedrockPromptDriver( + model="anthropic.claude-3-sonnet-20240229-v1:0", + stream=False, + prompt_model_driver=BedrockClaudePromptModelDriver(), + ) + ), + metadata={"serializable": True}, + ) + image_generation_driver: BaseImageGenerationDriver = field( default=Factory( - lambda: StructureGlobalDriversConfig( - prompt_driver=AmazonBedrockPromptDriver( - model="anthropic.claude-3-sonnet-20240229-v1:0", - stream=False, - prompt_model_driver=BedrockClaudePromptModelDriver(), - ), - image_generation_driver=AmazonBedrockImageGenerationDriver( - model="amazon.titan-image-generator-v1", - image_generation_model_driver=BedrockTitanImageGenerationModelDriver(), - ), - image_query_driver=AmazonBedrockImageQueryDriver( - model="anthropic.claude-3-sonnet-20240229-v1:0", - image_query_model_driver=BedrockClaudeImageQueryModelDriver(), - ), - embedding_driver=AmazonBedrockTitanEmbeddingDriver(model="amazon.titan-embed-text-v1"), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=AmazonBedrockTitanEmbeddingDriver(model="amazon.titan-embed-text-v1") - ), + lambda: AmazonBedrockImageGenerationDriver( + model="amazon.titan-image-generator-v1", + image_generation_model_driver=BedrockTitanImageGenerationModelDriver(), ) ), - kw_only=True, metadata={"serializable": True}, ) - task_memory: StructureTaskMemoryConfig = field( + image_query_driver: BaseImageGenerationDriver = field( default=Factory( - lambda self: StructureTaskMemoryConfig( - query_engine=StructureTaskMemoryQueryEngineConfig( - prompt_driver=self.global_drivers.prompt_driver, - vector_store_driver=self.global_drivers.vector_store_driver, - ), - extraction_engine=StructureTaskMemoryExtractionEngineConfig( - csv=StructureTaskMemoryExtractionEngineCsvConfig(prompt_driver=self.global_drivers.prompt_driver), - json=StructureTaskMemoryExtractionEngineJsonConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - summary_engine=StructureTaskMemorySummaryEngineConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - takes_self=True, + lambda: AmazonBedrockImageQueryDriver( + model="anthropic.claude-3-sonnet-20240229-v1:0", + image_query_model_driver=BedrockClaudeImageQueryModelDriver(), + ) + ), + metadata={"serializable": True}, + ) + embedding_driver: BaseEmbeddingDriver = field( + default=Factory(lambda: AmazonBedrockTitanEmbeddingDriver(model="amazon.titan-embed-text-v1")), + metadata={"serializable": True}, + ) + vector_store_driver: BaseVectorStoreDriver = field( + default=Factory( + lambda: LocalVectorStoreDriver( + embedding_driver=AmazonBedrockTitanEmbeddingDriver(model="amazon.titan-embed-text-v1") + ) ), - kw_only=True, metadata={"serializable": True}, ) diff --git a/griptape/config/anthropic_structure_config.py b/griptape/config/anthropic_structure_config.py index 06978a5c2..8984300a5 100644 --- a/griptape/config/anthropic_structure_config.py +++ b/griptape/config/anthropic_structure_config.py @@ -1,54 +1,39 @@ from attrs import Factory, define, field -from griptape.config import ( - BaseStructureConfig, - StructureGlobalDriversConfig, - StructureTaskMemoryConfig, - StructureTaskMemoryExtractionEngineConfig, - StructureTaskMemoryExtractionEngineCsvConfig, - StructureTaskMemoryExtractionEngineJsonConfig, - StructureTaskMemoryQueryEngineConfig, - StructureTaskMemorySummaryEngineConfig, -) +from griptape.config import StructureConfig from griptape.drivers import ( - LocalVectorStoreDriver, - AnthropicPromptDriver, AnthropicImageQueryDriver, + AnthropicPromptDriver, + BaseEmbeddingDriver, + BaseImageQueryDriver, + BasePromptDriver, + BaseVectorStoreDriver, + LocalVectorStoreDriver, VoyageAiEmbeddingDriver, ) @define -class AnthropicStructureConfig(BaseStructureConfig): - global_drivers: StructureGlobalDriversConfig = field( - default=Factory( - lambda: StructureGlobalDriversConfig( - prompt_driver=AnthropicPromptDriver(model="claude-3-opus-20240229"), - embedding_driver=VoyageAiEmbeddingDriver(model="voyage-large-2"), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=VoyageAiEmbeddingDriver(model="voyage-large-2") - ), - image_query_driver=AnthropicImageQueryDriver(model="claude-3-opus-20240229"), - ) - ), +class AnthropicStructureConfig(StructureConfig): + prompt_driver: BasePromptDriver = field( + default=Factory(lambda: AnthropicPromptDriver(model="claude-3-opus-20240229")), + metadata={"serializable": True}, kw_only=True, + ) + embedding_driver: BaseEmbeddingDriver = field( + default=Factory(lambda: VoyageAiEmbeddingDriver(model="voyage-large-2")), metadata={"serializable": True}, + kw_only=True, ) - task_memory: StructureTaskMemoryConfig = field( + vector_store_driver: BaseVectorStoreDriver = field( default=Factory( - lambda self: StructureTaskMemoryConfig( - query_engine=StructureTaskMemoryQueryEngineConfig( - prompt_driver=self.global_drivers.prompt_driver, - vector_store_driver=LocalVectorStoreDriver(embedding_driver=self.global_drivers.embedding_driver), - ), - extraction_engine=StructureTaskMemoryExtractionEngineConfig( - csv=StructureTaskMemoryExtractionEngineCsvConfig(prompt_driver=self.global_drivers.prompt_driver), - json=StructureTaskMemoryExtractionEngineJsonConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - summary_engine=StructureTaskMemorySummaryEngineConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - takes_self=True, + lambda: LocalVectorStoreDriver(embedding_driver=VoyageAiEmbeddingDriver(model="voyage-large-2")) ), kw_only=True, metadata={"serializable": True}, ) + image_query_driver: BaseImageQueryDriver = field( + default=Factory(lambda: AnthropicImageQueryDriver(model="claude-3-opus-20240229")), + kw_only=True, + metadata={"serializable": True}, + ) diff --git a/griptape/config/base_structure_config.py b/griptape/config/base_structure_config.py index afa8e4012..d716205c8 100644 --- a/griptape/config/base_structure_config.py +++ b/griptape/config/base_structure_config.py @@ -1,17 +1,34 @@ from __future__ import annotations from abc import ABC +from typing import Optional from attr import define, field -from griptape.config import BaseConfig, StructureGlobalDriversConfig, StructureTaskMemoryConfig +from griptape.config import BaseConfig +from griptape.drivers import ( + BaseConversationMemoryDriver, + BaseEmbeddingDriver, + BaseImageGenerationDriver, + BaseImageQueryDriver, + BasePromptDriver, + BaseVectorStoreDriver, + BaseTextToSpeechDriver, +) from griptape.utils import dict_merge @define class BaseStructureConfig(BaseConfig, ABC): - global_drivers: StructureGlobalDriversConfig = field(kw_only=True, metadata={"serializable": True}) - task_memory: StructureTaskMemoryConfig = field(kw_only=True, metadata={"serializable": True}) + prompt_driver: BasePromptDriver = field(kw_only=True, metadata={"serializable": True}) + image_generation_driver: BaseImageGenerationDriver = field(kw_only=True, metadata={"serializable": True}) + image_query_driver: BaseImageQueryDriver = field(kw_only=True, metadata={"serializable": True}) + embedding_driver: BaseEmbeddingDriver = field(kw_only=True, metadata={"serializable": True}) + vector_store_driver: BaseVectorStoreDriver = field(kw_only=True, metadata={"serializable": True}) + conversation_memory_driver: Optional[BaseConversationMemoryDriver] = field( + default=None, kw_only=True, metadata={"serializable": True} + ) + text_to_speech_driver: BaseTextToSpeechDriver = field(kw_only=True, metadata={"serializable": True}) def merge_config(self, config: dict) -> BaseStructureConfig: base_config = self.to_dict() diff --git a/griptape/config/google_structure_config.py b/griptape/config/google_structure_config.py index 9ba40622f..744d08782 100644 --- a/griptape/config/google_structure_config.py +++ b/griptape/config/google_structure_config.py @@ -1,47 +1,29 @@ from attrs import Factory, define, field -from griptape.config import ( - BaseStructureConfig, - StructureGlobalDriversConfig, - StructureTaskMemoryConfig, - StructureTaskMemoryExtractionEngineConfig, - StructureTaskMemoryExtractionEngineCsvConfig, - StructureTaskMemoryExtractionEngineJsonConfig, - StructureTaskMemoryQueryEngineConfig, - StructureTaskMemorySummaryEngineConfig, +from griptape.config import StructureConfig +from griptape.drivers import ( + BaseEmbeddingDriver, + BasePromptDriver, + BaseVectorStoreDriver, + GoogleEmbeddingDriver, + GooglePromptDriver, + LocalVectorStoreDriver, ) -from griptape.drivers import LocalVectorStoreDriver, GooglePromptDriver, GoogleEmbeddingDriver @define -class GoogleStructureConfig(BaseStructureConfig): - global_drivers: StructureGlobalDriversConfig = field( - default=Factory( - lambda: StructureGlobalDriversConfig( - prompt_driver=GooglePromptDriver(model="gemini-pro"), - embedding_driver=GoogleEmbeddingDriver(model="models/embedding-001"), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=GoogleEmbeddingDriver(model="models/embedding-001") - ), - ) - ), +class GoogleStructureConfig(StructureConfig): + prompt_driver: BasePromptDriver = field( + default=Factory(lambda: GooglePromptDriver(model="gemini-pro")), kw_only=True, metadata={"serializable": True} + ) + embedding_driver: BaseEmbeddingDriver = field( + default=Factory(lambda: GoogleEmbeddingDriver(model="models/embedding-001")), kw_only=True, metadata={"serializable": True}, ) - task_memory: StructureTaskMemoryConfig = field( + vector_store_driver: BaseVectorStoreDriver = field( default=Factory( - lambda self: StructureTaskMemoryConfig( - query_engine=StructureTaskMemoryQueryEngineConfig( - prompt_driver=self.global_drivers.prompt_driver, - vector_store_driver=LocalVectorStoreDriver(embedding_driver=self.global_drivers.embedding_driver), - ), - extraction_engine=StructureTaskMemoryExtractionEngineConfig( - csv=StructureTaskMemoryExtractionEngineCsvConfig(prompt_driver=self.global_drivers.prompt_driver), - json=StructureTaskMemoryExtractionEngineJsonConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - summary_engine=StructureTaskMemorySummaryEngineConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - takes_self=True, + lambda: LocalVectorStoreDriver(embedding_driver=GoogleEmbeddingDriver(model="models/embedding-001")) ), kw_only=True, metadata={"serializable": True}, diff --git a/griptape/config/openai_structure_config.py b/griptape/config/openai_structure_config.py index 64c32ecec..5b2e163ba 100644 --- a/griptape/config/openai_structure_config.py +++ b/griptape/config/openai_structure_config.py @@ -1,16 +1,12 @@ from attrs import Factory, define, field -from griptape.config import ( - BaseStructureConfig, - StructureGlobalDriversConfig, - StructureTaskMemoryConfig, - StructureTaskMemoryExtractionEngineConfig, - StructureTaskMemoryExtractionEngineCsvConfig, - StructureTaskMemoryExtractionEngineJsonConfig, - StructureTaskMemoryQueryEngineConfig, - StructureTaskMemorySummaryEngineConfig, -) +from griptape.config import StructureConfig from griptape.drivers import ( + BaseEmbeddingDriver, + BaseImageGenerationDriver, + BaseImageQueryDriver, + BasePromptDriver, + BaseVectorStoreDriver, LocalVectorStoreDriver, OpenAiChatPromptDriver, OpenAiEmbeddingDriver, @@ -20,36 +16,28 @@ @define -class OpenAiStructureConfig(BaseStructureConfig): - global_drivers: StructureGlobalDriversConfig = field( - default=Factory( - lambda: StructureGlobalDriversConfig( - prompt_driver=OpenAiChatPromptDriver(model="gpt-4o"), - image_generation_driver=OpenAiImageGenerationDriver(model="dall-e-2", image_size="512x512"), - image_query_driver=OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview"), - embedding_driver=OpenAiEmbeddingDriver(model="text-embedding-3-small"), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=OpenAiEmbeddingDriver(model="text-embedding-3-small") - ), - ) - ), +class OpenAiStructureConfig(StructureConfig): + prompt_driver: BasePromptDriver = field( + default=Factory(lambda: OpenAiChatPromptDriver(model="gpt-4o")), metadata={"serializable": True}, kw_only=True + ) + image_generation_driver: BaseImageGenerationDriver = field( + default=Factory(lambda: OpenAiImageGenerationDriver(model="dall-e-2", image_size="512x512")), + kw_only=True, + metadata={"serializable": True}, + ) + image_query_driver: BaseImageQueryDriver = field( + default=Factory(lambda: OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview")), kw_only=True, metadata={"serializable": True}, ) - task_memory: StructureTaskMemoryConfig = field( + embedding_driver: BaseEmbeddingDriver = field( + default=Factory(lambda: OpenAiEmbeddingDriver(model="text-embedding-3-small")), + metadata={"serializable": True}, + kw_only=True, + ) + vector_store_driver: BaseVectorStoreDriver = field( default=Factory( - lambda self: StructureTaskMemoryConfig( - query_engine=StructureTaskMemoryQueryEngineConfig( - prompt_driver=self.global_drivers.prompt_driver, - vector_store_driver=LocalVectorStoreDriver(embedding_driver=self.global_drivers.embedding_driver), - ), - extraction_engine=StructureTaskMemoryExtractionEngineConfig( - csv=StructureTaskMemoryExtractionEngineCsvConfig(prompt_driver=self.global_drivers.prompt_driver), - json=StructureTaskMemoryExtractionEngineJsonConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - summary_engine=StructureTaskMemorySummaryEngineConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - takes_self=True, + lambda: LocalVectorStoreDriver(embedding_driver=OpenAiEmbeddingDriver(model="text-embedding-3-small")) ), kw_only=True, metadata={"serializable": True}, diff --git a/griptape/config/structure_config.py b/griptape/config/structure_config.py index 6381450f4..63f1ea9f3 100644 --- a/griptape/config/structure_config.py +++ b/griptape/config/structure_config.py @@ -1,38 +1,45 @@ from attrs import Factory, define, field +from typing import Optional -from griptape.config import ( - BaseStructureConfig, - StructureGlobalDriversConfig, - StructureTaskMemoryConfig, - StructureTaskMemoryExtractionEngineConfig, - StructureTaskMemoryExtractionEngineCsvConfig, - StructureTaskMemoryExtractionEngineJsonConfig, - StructureTaskMemoryQueryEngineConfig, - StructureTaskMemorySummaryEngineConfig, +from griptape.config import BaseStructureConfig + +from griptape.drivers import ( + BaseConversationMemoryDriver, + BaseEmbeddingDriver, + BaseImageGenerationDriver, + BasePromptDriver, + BaseVectorStoreDriver, + DummyVectorStoreDriver, + DummyEmbeddingDriver, + DummyImageGenerationDriver, + DummyPromptDriver, + DummyImageQueryDriver, + BaseImageQueryDriver, + BaseTextToSpeechDriver, + DummyTextToSpeechDriver, ) -from griptape.drivers import LocalVectorStoreDriver @define class StructureConfig(BaseStructureConfig): - global_drivers: StructureGlobalDriversConfig = field( - default=Factory(lambda: StructureGlobalDriversConfig()), kw_only=True, metadata={"serializable": True} + prompt_driver: BasePromptDriver = field( + kw_only=True, default=Factory(lambda: DummyPromptDriver()), metadata={"serializable": True} + ) + image_generation_driver: BaseImageGenerationDriver = field( + kw_only=True, default=Factory(lambda: DummyImageGenerationDriver()), metadata={"serializable": True} + ) + image_query_driver: BaseImageQueryDriver = field( + kw_only=True, default=Factory(lambda: DummyImageQueryDriver()), metadata={"serializable": True} + ) + embedding_driver: BaseEmbeddingDriver = field( + kw_only=True, default=Factory(lambda: DummyEmbeddingDriver()), metadata={"serializable": True} + ) + vector_store_driver: BaseVectorStoreDriver = field( + default=Factory(lambda: DummyVectorStoreDriver()), kw_only=True, metadata={"serializable": True} + ) + conversation_memory_driver: Optional[BaseConversationMemoryDriver] = field( + default=None, kw_only=True, metadata={"serializable": True} ) - task_memory: StructureTaskMemoryConfig = field( - default=Factory( - lambda self: StructureTaskMemoryConfig( - query_engine=StructureTaskMemoryQueryEngineConfig( - prompt_driver=self.global_drivers.prompt_driver, - vector_store_driver=LocalVectorStoreDriver(embedding_driver=self.global_drivers.embedding_driver), - ), - extraction_engine=StructureTaskMemoryExtractionEngineConfig( - csv=StructureTaskMemoryExtractionEngineCsvConfig(prompt_driver=self.global_drivers.prompt_driver), - json=StructureTaskMemoryExtractionEngineJsonConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - summary_engine=StructureTaskMemorySummaryEngineConfig(prompt_driver=self.global_drivers.prompt_driver), - ), - takes_self=True, - ), - kw_only=True, - metadata={"serializable": True}, + text_to_speech_driver: BaseTextToSpeechDriver = field( + default=Factory(lambda: DummyTextToSpeechDriver()), kw_only=True, metadata={"serializable": True} ) diff --git a/griptape/config/structure_global_drivers_config.py b/griptape/config/structure_global_drivers_config.py deleted file mode 100644 index b599039a2..000000000 --- a/griptape/config/structure_global_drivers_config.py +++ /dev/null @@ -1,45 +0,0 @@ -from typing import Optional - -from attrs import Factory, define, field - -from griptape.drivers import ( - BaseConversationMemoryDriver, - BaseEmbeddingDriver, - BaseImageGenerationDriver, - BasePromptDriver, - BaseVectorStoreDriver, - DummyVectorStoreDriver, - DummyEmbeddingDriver, - DummyImageGenerationDriver, - DummyPromptDriver, - DummyImageQueryDriver, - BaseImageQueryDriver, - BaseTextToSpeechDriver, -) -from griptape.drivers.text_to_speech.dummy_text_to_speech_driver import DummyTextToSpeechDriver -from griptape.mixins.serializable_mixin import SerializableMixin - - -@define -class StructureGlobalDriversConfig(SerializableMixin): - prompt_driver: BasePromptDriver = field( - kw_only=True, default=Factory(lambda: DummyPromptDriver()), metadata={"serializable": True} - ) - image_generation_driver: BaseImageGenerationDriver = field( - kw_only=True, default=Factory(lambda: DummyImageGenerationDriver()), metadata={"serializable": True} - ) - image_query_driver: BaseImageQueryDriver = field( - kw_only=True, default=Factory(lambda: DummyImageQueryDriver()), metadata={"serializable": True} - ) - embedding_driver: BaseEmbeddingDriver = field( - kw_only=True, default=Factory(lambda: DummyEmbeddingDriver()), metadata={"serializable": True} - ) - vector_store_driver: BaseVectorStoreDriver = field( - default=Factory(lambda: DummyVectorStoreDriver()), kw_only=True, metadata={"serializable": True} - ) - conversation_memory_driver: Optional[BaseConversationMemoryDriver] = field( - default=None, kw_only=True, metadata={"serializable": True} - ) - text_to_speech_driver: BaseTextToSpeechDriver = field( - default=Factory(lambda: DummyTextToSpeechDriver()), kw_only=True, metadata={"serializable": True} - ) diff --git a/griptape/config/structure_task_memory_config.py b/griptape/config/structure_task_memory_config.py deleted file mode 100644 index 3b8648dcf..000000000 --- a/griptape/config/structure_task_memory_config.py +++ /dev/null @@ -1,23 +0,0 @@ -from attrs import Factory, define, field - -from griptape.config import ( - StructureTaskMemoryExtractionEngineConfig, - StructureTaskMemoryQueryEngineConfig, - StructureTaskMemorySummaryEngineConfig, -) -from griptape.mixins.serializable_mixin import SerializableMixin - - -@define -class StructureTaskMemoryConfig(SerializableMixin): - query_engine: StructureTaskMemoryQueryEngineConfig = field( - kw_only=True, default=Factory(lambda: StructureTaskMemoryQueryEngineConfig()), metadata={"serializable": True} - ) - extraction_engine: StructureTaskMemoryExtractionEngineConfig = field( - kw_only=True, - default=Factory(lambda: StructureTaskMemoryExtractionEngineConfig()), - metadata={"serializable": True}, - ) - summary_engine: StructureTaskMemorySummaryEngineConfig = field( - kw_only=True, default=Factory(lambda: StructureTaskMemorySummaryEngineConfig()), metadata={"serializable": True} - ) diff --git a/griptape/config/structure_task_memory_extraction_engine_config.py b/griptape/config/structure_task_memory_extraction_engine_config.py deleted file mode 100644 index 8c2a58f02..000000000 --- a/griptape/config/structure_task_memory_extraction_engine_config.py +++ /dev/null @@ -1,18 +0,0 @@ -from attrs import Factory, define, field - -from griptape.config import StructureTaskMemoryExtractionEngineCsvConfig, StructureTaskMemoryExtractionEngineJsonConfig -from griptape.mixins.serializable_mixin import SerializableMixin - - -@define -class StructureTaskMemoryExtractionEngineConfig(SerializableMixin): - csv: StructureTaskMemoryExtractionEngineCsvConfig = field( - kw_only=True, - default=Factory(lambda: StructureTaskMemoryExtractionEngineCsvConfig()), - metadata={"serializable": True}, - ) - json: StructureTaskMemoryExtractionEngineJsonConfig = field( - kw_only=True, - default=Factory(lambda: StructureTaskMemoryExtractionEngineJsonConfig()), - metadata={"serializable": True}, - ) diff --git a/griptape/config/structure_task_memory_extraction_engine_csv_config.py b/griptape/config/structure_task_memory_extraction_engine_csv_config.py deleted file mode 100644 index cce5f3e02..000000000 --- a/griptape/config/structure_task_memory_extraction_engine_csv_config.py +++ /dev/null @@ -1,11 +0,0 @@ -from attrs import define, field, Factory - -from griptape.drivers import BasePromptDriver, DummyPromptDriver -from griptape.mixins.serializable_mixin import SerializableMixin - - -@define -class StructureTaskMemoryExtractionEngineCsvConfig(SerializableMixin): - prompt_driver: BasePromptDriver = field( - kw_only=True, default=Factory(lambda: DummyPromptDriver()), metadata={"serializable": True} - ) diff --git a/griptape/config/structure_task_memory_extraction_engine_json_config.py b/griptape/config/structure_task_memory_extraction_engine_json_config.py deleted file mode 100644 index 04210b8c8..000000000 --- a/griptape/config/structure_task_memory_extraction_engine_json_config.py +++ /dev/null @@ -1,11 +0,0 @@ -from attrs import define, field, Factory - -from griptape.drivers import BasePromptDriver, DummyPromptDriver -from griptape.mixins.serializable_mixin import SerializableMixin - - -@define -class StructureTaskMemoryExtractionEngineJsonConfig(SerializableMixin): - prompt_driver: BasePromptDriver = field( - kw_only=True, default=Factory(lambda: DummyPromptDriver()), metadata={"serializable": True} - ) diff --git a/griptape/config/structure_task_memory_query_engine_config.py b/griptape/config/structure_task_memory_query_engine_config.py deleted file mode 100644 index 30d6bbcf9..000000000 --- a/griptape/config/structure_task_memory_query_engine_config.py +++ /dev/null @@ -1,22 +0,0 @@ -from attrs import Factory, define, field - -from griptape.drivers import ( - BasePromptDriver, - BaseVectorStoreDriver, - DummyVectorStoreDriver, - DummyEmbeddingDriver, - DummyPromptDriver, -) -from griptape.mixins.serializable_mixin import SerializableMixin - - -@define -class StructureTaskMemoryQueryEngineConfig(SerializableMixin): - prompt_driver: BasePromptDriver = field( - kw_only=True, default=Factory(lambda: DummyPromptDriver()), metadata={"serializable": True} - ) - vector_store_driver: BaseVectorStoreDriver = field( - kw_only=True, - default=Factory(lambda: DummyVectorStoreDriver(embedding_driver=DummyEmbeddingDriver())), - metadata={"serializable": True}, - ) diff --git a/griptape/config/structure_task_memory_summary_engine_config.py b/griptape/config/structure_task_memory_summary_engine_config.py deleted file mode 100644 index 100f9d8f1..000000000 --- a/griptape/config/structure_task_memory_summary_engine_config.py +++ /dev/null @@ -1,11 +0,0 @@ -from attrs import Factory, define, field - -from griptape.drivers import BasePromptDriver, DummyPromptDriver -from griptape.mixins.serializable_mixin import SerializableMixin - - -@define -class StructureTaskMemorySummaryEngineConfig(SerializableMixin): - prompt_driver: BasePromptDriver = field( - kw_only=True, default=Factory(lambda: DummyPromptDriver()), metadata={"serializable": True} - ) diff --git a/griptape/memory/structure/summary_conversation_memory.py b/griptape/memory/structure/summary_conversation_memory.py index 1f622b0d2..fa06a3c76 100644 --- a/griptape/memory/structure/summary_conversation_memory.py +++ b/griptape/memory/structure/summary_conversation_memory.py @@ -25,7 +25,7 @@ class SummaryConversationMemory(ConversationMemory): def prompt_driver(self) -> BasePromptDriver: if self._prompt_driver is None: if self.structure is not None: - self._prompt_driver = self.structure.config.global_drivers.prompt_driver + self._prompt_driver = self.structure.config.prompt_driver else: raise ValueError("Prompt Driver is not set.") return self._prompt_driver diff --git a/griptape/memory/task/storage/text_artifact_storage.py b/griptape/memory/task/storage/text_artifact_storage.py index e5cd73eb8..8e4423f54 100644 --- a/griptape/memory/task/storage/text_artifact_storage.py +++ b/griptape/memory/task/storage/text_artifact_storage.py @@ -1,5 +1,5 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, Optional from attr import define, field from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact from griptape.memory.task.storage import BaseArtifactStorage @@ -11,9 +11,9 @@ @define class TextArtifactStorage(BaseArtifactStorage): query_engine: VectorQueryEngine = field(kw_only=True) - summary_engine: BaseSummaryEngine = field(kw_only=True) - csv_extraction_engine: CsvExtractionEngine = field(kw_only=True) - json_extraction_engine: JsonExtractionEngine = field(kw_only=True) + summary_engine: Optional[BaseSummaryEngine] = field(kw_only=True, default=None) + csv_extraction_engine: Optional[CsvExtractionEngine] = field(kw_only=True, default=None) + json_extraction_engine: Optional[JsonExtractionEngine] = field(kw_only=True, default=None) def can_store(self, artifact: BaseArtifact) -> bool: return isinstance(artifact, TextArtifact) @@ -28,6 +28,8 @@ def load_artifacts(self, namespace: str) -> ListArtifact: return self.query_engine.load_artifacts(namespace) def summarize(self, namespace: str) -> TextArtifact: + if self.summary_engine is None: + raise ValueError("Summary engine is not set.") return self.summary_engine.summarize_artifacts(self.load_artifacts(namespace)) def query(self, namespace: str, query: str, metadata: Any = None) -> TextArtifact: diff --git a/griptape/structures/structure.py b/griptape/structures/structure.py index c3912649d..8b71dd905 100644 --- a/griptape/structures/structure.py +++ b/griptape/structures/structure.py @@ -11,14 +11,7 @@ from griptape.artifacts import BlobArtifact, TextArtifact from griptape.config import BaseStructureConfig, OpenAiStructureConfig, StructureConfig -from griptape.drivers import ( - BaseEmbeddingDriver, - BasePromptDriver, - DummyPromptDriver, - DummyVectorStoreDriver, - OpenAiEmbeddingDriver, - OpenAiChatPromptDriver, -) +from griptape.drivers import BaseEmbeddingDriver, BasePromptDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver from griptape.drivers.vector.local_vector_store_driver import LocalVectorStoreDriver from griptape.engines import CsvExtractionEngine, JsonExtractionEngine, PromptSummaryEngine, VectorQueryEngine from griptape.events import BaseEvent, EventListener @@ -55,8 +48,7 @@ class Structure(ABC): event_listeners: list[EventListener] = field(factory=list, kw_only=True) conversation_memory: Optional[BaseConversationMemory] = field( default=Factory( - lambda self: ConversationMemory(driver=self.config.global_drivers.conversation_memory_driver), - takes_self=True, + lambda self: ConversationMemory(driver=self.config.conversation_memory_driver), takes_self=True ), kw_only=True, ) @@ -97,19 +89,17 @@ def __add__(self, other: BaseTask | list[BaseTask]) -> list[BaseTask]: @prompt_driver.validator # pyright: ignore def validate_prompt_driver(self, attribute, value): if value is not None: - deprecation_warn(f"`{attribute.name}` is deprecated, use `config.global_drivers.prompt_driver` instead.") + deprecation_warn(f"`{attribute.name}` is deprecated, use `config.prompt_driver` instead.") @embedding_driver.validator # pyright: ignore def validate_embedding_driver(self, attribute, value): if value is not None: - deprecation_warn(f"`{attribute.name}` is deprecated, use `config.global_drivers.embedding_driver` instead.") + deprecation_warn(f"`{attribute.name}` is deprecated, use `config.embedding_driver` instead.") @stream.validator # pyright: ignore def validate_stream(self, attribute, value): if value is not None: - deprecation_warn( - f"`{attribute.name}` is deprecated, use `config.global_drivers.prompt_driver.stream` instead." - ) + deprecation_warn(f"`{attribute.name}` is deprecated, use `config.prompt_driver.stream` instead.") @property def execution_args(self) -> tuple: @@ -147,7 +137,7 @@ def default_config(self) -> BaseStructureConfig: config = StructureConfig() if self.prompt_driver is None: - prompt_driver = OpenAiChatPromptDriver(model="gpt-4") + prompt_driver = OpenAiChatPromptDriver(model="gpt-4o") else: prompt_driver = self.prompt_driver @@ -161,15 +151,9 @@ def default_config(self) -> BaseStructureConfig: vector_store_driver = LocalVectorStoreDriver(embedding_driver=embedding_driver) - config.global_drivers.prompt_driver = prompt_driver - config.global_drivers.vector_store_driver = vector_store_driver - config.global_drivers.embedding_driver = embedding_driver - - config.task_memory.query_engine.prompt_driver = prompt_driver - config.task_memory.query_engine.vector_store_driver = vector_store_driver - config.task_memory.summary_engine.prompt_driver = prompt_driver - config.task_memory.extraction_engine.csv.prompt_driver = prompt_driver - config.task_memory.extraction_engine.json.prompt_driver = prompt_driver + config.prompt_driver = prompt_driver + config.vector_store_driver = vector_store_driver + config.embedding_driver = embedding_driver else: config = OpenAiStructureConfig() @@ -177,45 +161,15 @@ def default_config(self) -> BaseStructureConfig: @property def default_task_memory(self) -> TaskMemory: - global_drivers = self.config.global_drivers - task_memory = self.config.task_memory - return TaskMemory( artifact_storages={ TextArtifact: TextArtifactStorage( query_engine=VectorQueryEngine( - prompt_driver=( - global_drivers.prompt_driver - if isinstance(task_memory.query_engine.prompt_driver, DummyPromptDriver) - else task_memory.query_engine.prompt_driver - ), - vector_store_driver=( - global_drivers.vector_store_driver - if isinstance(task_memory.query_engine.prompt_driver, DummyVectorStoreDriver) - else task_memory.query_engine.vector_store_driver - ), - ), - summary_engine=PromptSummaryEngine( - prompt_driver=( - global_drivers.prompt_driver - if isinstance(task_memory.summary_engine.prompt_driver, DummyPromptDriver) - else task_memory.summary_engine.prompt_driver - ) - ), - csv_extraction_engine=CsvExtractionEngine( - prompt_driver=( - global_drivers.prompt_driver - if isinstance(task_memory.extraction_engine.csv.prompt_driver, DummyPromptDriver) - else task_memory.extraction_engine.csv.prompt_driver - ) - ), - json_extraction_engine=JsonExtractionEngine( - prompt_driver=( - global_drivers.prompt_driver - if isinstance(task_memory.extraction_engine.json.prompt_driver, DummyPromptDriver) - else task_memory.extraction_engine.json.prompt_driver - ) + prompt_driver=self.config.prompt_driver, vector_store_driver=self.config.vector_store_driver ), + summary_engine=PromptSummaryEngine(prompt_driver=self.config.prompt_driver), + csv_extraction_engine=CsvExtractionEngine(prompt_driver=self.config.prompt_driver), + json_extraction_engine=JsonExtractionEngine(prompt_driver=self.config.prompt_driver), ), BlobArtifact: BlobArtifactStorage(), } diff --git a/griptape/tasks/csv_extraction_task.py b/griptape/tasks/csv_extraction_task.py index ae71ea5d4..2f5f3db56 100644 --- a/griptape/tasks/csv_extraction_task.py +++ b/griptape/tasks/csv_extraction_task.py @@ -12,9 +12,7 @@ class CsvExtractionTask(ExtractionTask): def extraction_engine(self) -> CsvExtractionEngine: if self._extraction_engine is None: if self.structure is not None: - self._extraction_engine = CsvExtractionEngine( - prompt_driver=self.structure.config.global_drivers.prompt_driver - ) + self._extraction_engine = CsvExtractionEngine(prompt_driver=self.structure.config.prompt_driver) else: raise ValueError("Extraction Engine is not set.") return self._extraction_engine diff --git a/griptape/tasks/image_query_task.py b/griptape/tasks/image_query_task.py index 29077a055..94be4f483 100644 --- a/griptape/tasks/image_query_task.py +++ b/griptape/tasks/image_query_task.py @@ -58,9 +58,7 @@ def input( def image_query_engine(self) -> ImageQueryEngine: if self._image_query_engine is None: if self.structure is not None: - self._image_query_engine = ImageQueryEngine( - image_query_driver=self.structure.config.global_drivers.image_query_driver - ) + self._image_query_engine = ImageQueryEngine(image_query_driver=self.structure.config.image_query_driver) else: raise ValueError("Image Query Engine is not set.") return self._image_query_engine diff --git a/griptape/tasks/inpainting_image_generation_task.py b/griptape/tasks/inpainting_image_generation_task.py index 028ae336e..f3b2edb7a 100644 --- a/griptape/tasks/inpainting_image_generation_task.py +++ b/griptape/tasks/inpainting_image_generation_task.py @@ -57,7 +57,7 @@ def image_generation_engine(self) -> InpaintingImageGenerationEngine: if self._image_generation_engine is None: if self.structure is not None: self._image_generation_engine = InpaintingImageGenerationEngine( - image_generation_driver=self.structure.config.global_drivers.image_generation_driver + image_generation_driver=self.structure.config.image_generation_driver ) else: raise ValueError("Image Generation Engine is not set.") diff --git a/griptape/tasks/json_extraction_task.py b/griptape/tasks/json_extraction_task.py index a43b1e1e2..e1f082fd8 100644 --- a/griptape/tasks/json_extraction_task.py +++ b/griptape/tasks/json_extraction_task.py @@ -12,9 +12,7 @@ class JsonExtractionTask(ExtractionTask): def extraction_engine(self) -> JsonExtractionEngine: if self._extraction_engine is None: if self.structure is not None: - self._extraction_engine = JsonExtractionEngine( - prompt_driver=self.structure.config.global_drivers.prompt_driver - ) + self._extraction_engine = JsonExtractionEngine(prompt_driver=self.structure.config.prompt_driver) else: raise ValueError("Extraction Engine is not set.") return self._extraction_engine diff --git a/griptape/tasks/outpainting_image_generation_task.py b/griptape/tasks/outpainting_image_generation_task.py index 7b0ffd06b..fd2d335e5 100644 --- a/griptape/tasks/outpainting_image_generation_task.py +++ b/griptape/tasks/outpainting_image_generation_task.py @@ -57,7 +57,7 @@ def image_generation_engine(self) -> OutpaintingImageGenerationEngine: if self._image_generation_engine is None: if self.structure is not None: self._image_generation_engine = OutpaintingImageGenerationEngine( - image_generation_driver=self.structure.config.global_drivers.image_generation_driver + image_generation_driver=self.structure.config.image_generation_driver ) else: raise ValueError("Image Generation Engine is not set.") diff --git a/griptape/tasks/prompt_image_generation_task.py b/griptape/tasks/prompt_image_generation_task.py index 24971d1cb..93404ef84 100644 --- a/griptape/tasks/prompt_image_generation_task.py +++ b/griptape/tasks/prompt_image_generation_task.py @@ -50,7 +50,7 @@ def image_generation_engine(self) -> PromptImageGenerationEngine: if self._image_generation_engine is None: if self.structure is not None: self._image_generation_engine = PromptImageGenerationEngine( - image_generation_driver=self.structure.config.global_drivers.image_generation_driver + image_generation_driver=self.structure.config.image_generation_driver ) else: raise ValueError("Image Generation Engine is not set.") diff --git a/griptape/tasks/prompt_task.py b/griptape/tasks/prompt_task.py index 525e21eef..16f7c6dac 100644 --- a/griptape/tasks/prompt_task.py +++ b/griptape/tasks/prompt_task.py @@ -42,7 +42,7 @@ def prompt_stack(self) -> PromptStack: def prompt_driver(self) -> BasePromptDriver: if self._prompt_driver is None: if self.structure is not None: - self._prompt_driver = self.structure.config.global_drivers.prompt_driver + self._prompt_driver = self.structure.config.prompt_driver else: raise ValueError("Prompt Driver is not set") return self._prompt_driver diff --git a/griptape/tasks/text_query_task.py b/griptape/tasks/text_query_task.py index 88fb94d10..5fee68103 100644 --- a/griptape/tasks/text_query_task.py +++ b/griptape/tasks/text_query_task.py @@ -18,8 +18,8 @@ def query_engine(self) -> BaseQueryEngine: if self._query_engine is None: if self.structure is not None: self._query_engine = VectorQueryEngine( - prompt_driver=self.structure.config.global_drivers.prompt_driver, - vector_store_driver=self.structure.config.global_drivers.vector_store_driver, + prompt_driver=self.structure.config.prompt_driver, + vector_store_driver=self.structure.config.vector_store_driver, ) else: raise ValueError("Query Engine is not set.") diff --git a/griptape/tasks/text_summary_task.py b/griptape/tasks/text_summary_task.py index 7cb6a8a0b..f10f851d0 100644 --- a/griptape/tasks/text_summary_task.py +++ b/griptape/tasks/text_summary_task.py @@ -17,9 +17,7 @@ class TextSummaryTask(BaseTextInputTask): def summary_engine(self) -> Optional[BaseSummaryEngine]: if self._summary_engine is None: if self.structure is not None: - self._summary_engine = PromptSummaryEngine( - prompt_driver=self.structure.config.global_drivers.prompt_driver - ) + self._summary_engine = PromptSummaryEngine(prompt_driver=self.structure.config.prompt_driver) else: raise ValueError("Summary Engine is not set.") return self._summary_engine diff --git a/griptape/tasks/text_to_speech_task.py b/griptape/tasks/text_to_speech_task.py index ab90b1bbb..8a69227c5 100644 --- a/griptape/tasks/text_to_speech_task.py +++ b/griptape/tasks/text_to_speech_task.py @@ -37,7 +37,7 @@ def text_to_speech_engine(self) -> TextToSpeechEngine: if self._text_to_speech_engine is None: if self.structure is not None: self._text_to_speech_engine = TextToSpeechEngine( - text_to_speech_driver=self.structure.config.global_drivers.text_to_speech_driver + text_to_speech_driver=self.structure.config.text_to_speech_driver ) else: raise ValueError("Audio Generation Engine is not set.") diff --git a/griptape/tasks/variation_image_generation_task.py b/griptape/tasks/variation_image_generation_task.py index 650d395c3..1242bc59b 100644 --- a/griptape/tasks/variation_image_generation_task.py +++ b/griptape/tasks/variation_image_generation_task.py @@ -56,7 +56,7 @@ def image_generation_engine(self) -> VariationImageGenerationEngine: if self._image_generation_engine is None: if self.structure is not None: self._image_generation_engine = VariationImageGenerationEngine( - image_generation_driver=self.structure.config.global_drivers.image_generation_driver + image_generation_driver=self.structure.config.image_generation_driver ) else: raise ValueError("Image Generation Engine is not set.") diff --git a/griptape/utils/chat.py b/griptape/utils/chat.py index 110a427da..549d93e53 100644 --- a/griptape/utils/chat.py +++ b/griptape/utils/chat.py @@ -21,7 +21,7 @@ class Chat: ) def default_output_fn(self, text: str) -> None: - if self.structure.config.global_drivers.prompt_driver.stream: + if self.structure.config.prompt_driver.stream: print(text, end="", flush=True) else: print(text) @@ -36,7 +36,7 @@ def start(self) -> None: self.output_fn(self.exiting_text) break - if self.structure.config.global_drivers.prompt_driver.stream: + if self.structure.config.prompt_driver.stream: self.output_fn(self.processing_text + "\n") stream = Stream(self.structure).run(question) first_chunk = next(stream) diff --git a/griptape/utils/prompt_stack.py b/griptape/utils/prompt_stack.py index f4dda1462..a5f336030 100644 --- a/griptape/utils/prompt_stack.py +++ b/griptape/utils/prompt_stack.py @@ -66,7 +66,7 @@ def add_conversation_memory(self, memory: BaseConversationMemory, index: Optiona if memory.autoprune and hasattr(memory, "structure"): should_prune = True - prompt_driver = memory.structure.config.global_drivers.prompt_driver + prompt_driver = memory.structure.config.prompt_driver temp_stack = PromptStack() # Try to determine how many Conversation Memory runs we can diff --git a/griptape/utils/stream.py b/griptape/utils/stream.py index a0251fa57..8cb2c3a7c 100644 --- a/griptape/utils/stream.py +++ b/griptape/utils/stream.py @@ -33,7 +33,7 @@ class Stream: @structure.validator # pyright: ignore def validate_structure(self, _, structure: Structure): - if structure and not structure.config.global_drivers.prompt_driver.stream: + if structure and not structure.config.prompt_driver.stream: raise ValueError("prompt driver does not have streaming enabled, enable with stream=True") _event_queue: Queue[BaseEvent] = field(default=Factory(lambda: Queue())) diff --git a/tests/mocks/mock_structure_config.py b/tests/mocks/mock_structure_config.py index 2ac901009..8309f541b 100644 --- a/tests/mocks/mock_structure_config.py +++ b/tests/mocks/mock_structure_config.py @@ -1,15 +1,5 @@ from attrs import define, field, Factory -from griptape.drivers import LocalVectorStoreDriver -from griptape.config import ( - BaseStructureConfig, - StructureGlobalDriversConfig, - StructureTaskMemoryConfig, - StructureTaskMemoryQueryEngineConfig, - StructureTaskMemoryExtractionEngineConfig, - StructureTaskMemorySummaryEngineConfig, - StructureTaskMemoryExtractionEngineJsonConfig, - StructureTaskMemoryExtractionEngineCsvConfig, -) +from griptape.config import StructureConfig from tests.mocks.mock_image_generation_driver import MockImageGenerationDriver from tests.mocks.mock_image_query_driver import MockImageQueryDriver from tests.mocks.mock_prompt_driver import MockPromptDriver @@ -17,41 +7,16 @@ @define -class MockStructureConfig(BaseStructureConfig): - global_drivers: StructureGlobalDriversConfig = field( - default=Factory( - lambda: StructureGlobalDriversConfig( - prompt_driver=MockPromptDriver(), - image_generation_driver=MockImageGenerationDriver(model="dall-e-2"), - image_query_driver=MockImageQueryDriver(model="gpt-4-vision-preview"), - embedding_driver=MockEmbeddingDriver(model="text-embedding-3-small"), - ) - ), - kw_only=True, - metadata={"serializable": True}, +class MockStructureConfig(StructureConfig): + prompt_driver: MockPromptDriver = field( + default=Factory(lambda: MockPromptDriver()), metadata={"serializable": True} ) - task_memory: StructureTaskMemoryConfig = field( - default=Factory( - lambda: StructureTaskMemoryConfig( - query_engine=StructureTaskMemoryQueryEngineConfig( - prompt_driver=MockPromptDriver(model="gpt-3.5-turbo"), - vector_store_driver=LocalVectorStoreDriver( - embedding_driver=MockEmbeddingDriver(model="text-embedding-3-small") - ), - ), - extraction_engine=StructureTaskMemoryExtractionEngineConfig( - csv=StructureTaskMemoryExtractionEngineCsvConfig( - prompt_driver=MockPromptDriver(model="gpt-3.5-turbo") - ), - json=StructureTaskMemoryExtractionEngineJsonConfig( - prompt_driver=MockPromptDriver(model="gpt-3.5-turbo") - ), - ), - summary_engine=StructureTaskMemorySummaryEngineConfig( - prompt_driver=MockPromptDriver(model="gpt-3.5-turbo") - ), - ) - ), - kw_only=True, - metadata={"serializable": True}, + image_generation_driver: MockImageGenerationDriver = field( + default=Factory(lambda: MockImageGenerationDriver(model="dall-e-2")), metadata={"serializable": True} + ) + image_query_driver: MockImageQueryDriver = field( + default=Factory(lambda: MockImageQueryDriver(model="gpt-4-vision-preview")), metadata={"serializable": True} + ) + embedding_driver: MockEmbeddingDriver = field( + default=Factory(lambda: MockEmbeddingDriver(model="text-embedding-3-small")), metadata={"serializable": True} ) diff --git a/tests/unit/config/test_amazon_bedrock_structure_config.py b/tests/unit/config/test_amazon_bedrock_structure_config.py index 05eda5644..66ca44bb5 100644 --- a/tests/unit/config/test_amazon_bedrock_structure_config.py +++ b/tests/unit/config/test_amazon_bedrock_structure_config.py @@ -14,115 +14,44 @@ def config(self): def test_to_dict(self, config): assert config.to_dict() == { - "global_drivers": { - "conversation_memory_driver": None, + "conversation_memory_driver": None, + "embedding_driver": {"model": "amazon.titan-embed-text-v1", "type": "AmazonBedrockTitanEmbeddingDriver"}, + "image_generation_driver": { + "image_generation_model_driver": { + "cfg_scale": 7, + "outpainting_mode": "PRECISE", + "quality": "standard", + "type": "BedrockTitanImageGenerationModelDriver", + }, + "image_height": 512, + "image_width": 512, + "model": "amazon.titan-image-generator-v1", + "seed": None, + "type": "AmazonBedrockImageGenerationDriver", + }, + "image_query_driver": { + "type": "AmazonBedrockImageQueryDriver", + "model": "anthropic.claude-3-sonnet-20240229-v1:0", + "max_tokens": 256, + "image_query_model_driver": {"type": "BedrockClaudeImageQueryModelDriver"}, + }, + "prompt_driver": { + "max_tokens": None, + "model": "anthropic.claude-3-sonnet-20240229-v1:0", + "prompt_model_driver": {"type": "BedrockClaudePromptModelDriver", "top_k": 250, "top_p": 0.999}, + "stream": False, + "temperature": 0.1, + "type": "AmazonBedrockPromptDriver", + }, + "vector_store_driver": { "embedding_driver": { "model": "amazon.titan-embed-text-v1", "type": "AmazonBedrockTitanEmbeddingDriver", }, - "image_generation_driver": { - "image_generation_model_driver": { - "cfg_scale": 7, - "outpainting_mode": "PRECISE", - "quality": "standard", - "type": "BedrockTitanImageGenerationModelDriver", - }, - "image_height": 512, - "image_width": 512, - "model": "amazon.titan-image-generator-v1", - "seed": None, - "type": "AmazonBedrockImageGenerationDriver", - }, - "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, - "image_query_driver": { - "type": "AmazonBedrockImageQueryDriver", - "model": "anthropic.claude-3-sonnet-20240229-v1:0", - "max_tokens": 256, - "image_query_model_driver": {"type": "BedrockClaudeImageQueryModelDriver"}, - }, - "prompt_driver": { - "max_tokens": None, - "model": "anthropic.claude-3-sonnet-20240229-v1:0", - "prompt_model_driver": {"type": "BedrockClaudePromptModelDriver", "top_k": 250, "top_p": 0.999}, - "stream": False, - "temperature": 0.1, - "type": "AmazonBedrockPromptDriver", - }, - "type": "StructureGlobalDriversConfig", - "vector_store_driver": { - "embedding_driver": { - "model": "amazon.titan-embed-text-v1", - "type": "AmazonBedrockTitanEmbeddingDriver", - }, - "type": "LocalVectorStoreDriver", - }, + "type": "LocalVectorStoreDriver", }, "type": "AmazonBedrockStructureConfig", - "task_memory": { - "type": "StructureTaskMemoryConfig", - "query_engine": { - "type": "StructureTaskMemoryQueryEngineConfig", - "prompt_driver": { - "type": "AmazonBedrockPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "model": "anthropic.claude-3-sonnet-20240229-v1:0", - "prompt_model_driver": {"type": "BedrockClaudePromptModelDriver", "top_k": 250, "top_p": 0.999}, - "stream": False, - }, - "vector_store_driver": { - "type": "LocalVectorStoreDriver", - "embedding_driver": { - "type": "AmazonBedrockTitanEmbeddingDriver", - "model": "amazon.titan-embed-text-v1", - }, - }, - }, - "extraction_engine": { - "type": "StructureTaskMemoryExtractionEngineConfig", - "csv": { - "type": "StructureTaskMemoryExtractionEngineCsvConfig", - "prompt_driver": { - "type": "AmazonBedrockPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "model": "anthropic.claude-3-sonnet-20240229-v1:0", - "prompt_model_driver": { - "type": "BedrockClaudePromptModelDriver", - "top_k": 250, - "top_p": 0.999, - }, - "stream": False, - }, - }, - "json": { - "type": "StructureTaskMemoryExtractionEngineJsonConfig", - "prompt_driver": { - "type": "AmazonBedrockPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "model": "anthropic.claude-3-sonnet-20240229-v1:0", - "prompt_model_driver": { - "type": "BedrockClaudePromptModelDriver", - "top_k": 250, - "top_p": 0.999, - }, - "stream": False, - }, - }, - }, - "summary_engine": { - "type": "StructureTaskMemorySummaryEngineConfig", - "prompt_driver": { - "type": "AmazonBedrockPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "model": "anthropic.claude-3-sonnet-20240229-v1:0", - "prompt_model_driver": {"type": "BedrockClaudePromptModelDriver", "top_k": 250, "top_p": 0.999}, - "stream": False, - }, - }, - }, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, } def test_from_dict(self, config): diff --git a/tests/unit/config/test_anthropic_structure_config.py b/tests/unit/config/test_anthropic_structure_config.py index b637eb929..9f014092a 100644 --- a/tests/unit/config/test_anthropic_structure_config.py +++ b/tests/unit/config/test_anthropic_structure_config.py @@ -15,101 +15,36 @@ def config(self): def test_to_dict(self, config): assert config.to_dict() == { "type": "AnthropicStructureConfig", - "global_drivers": { - "type": "StructureGlobalDriversConfig", - "prompt_driver": { - "type": "AnthropicPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "claude-3-opus-20240229", - "top_p": 0.999, - "top_k": 250, - }, - "image_generation_driver": {"type": "DummyImageGenerationDriver"}, - "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, - "image_query_driver": { - "type": "AnthropicImageQueryDriver", - "model": "claude-3-opus-20240229", - "max_tokens": 256, - }, + "prompt_driver": { + "type": "AnthropicPromptDriver", + "temperature": 0.1, + "max_tokens": None, + "stream": False, + "model": "claude-3-opus-20240229", + "top_p": 0.999, + "top_k": 250, + }, + "image_generation_driver": {"type": "DummyImageGenerationDriver"}, + "image_query_driver": { + "type": "AnthropicImageQueryDriver", + "model": "claude-3-opus-20240229", + "max_tokens": 256, + }, + "embedding_driver": { + "type": "VoyageAiEmbeddingDriver", + "model": "voyage-large-2", + "input_type": "document", + }, + "vector_store_driver": { + "type": "LocalVectorStoreDriver", "embedding_driver": { "type": "VoyageAiEmbeddingDriver", "model": "voyage-large-2", "input_type": "document", }, - "vector_store_driver": { - "type": "LocalVectorStoreDriver", - "embedding_driver": { - "type": "VoyageAiEmbeddingDriver", - "model": "voyage-large-2", - "input_type": "document", - }, - }, - "conversation_memory_driver": None, - }, - "task_memory": { - "type": "StructureTaskMemoryConfig", - "query_engine": { - "type": "StructureTaskMemoryQueryEngineConfig", - "prompt_driver": { - "type": "AnthropicPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "claude-3-opus-20240229", - "top_p": 0.999, - "top_k": 250, - }, - "vector_store_driver": { - "type": "LocalVectorStoreDriver", - "embedding_driver": { - "type": "VoyageAiEmbeddingDriver", - "model": "voyage-large-2", - "input_type": "document", - }, - }, - }, - "extraction_engine": { - "type": "StructureTaskMemoryExtractionEngineConfig", - "csv": { - "type": "StructureTaskMemoryExtractionEngineCsvConfig", - "prompt_driver": { - "type": "AnthropicPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "claude-3-opus-20240229", - "top_p": 0.999, - "top_k": 250, - }, - }, - "json": { - "type": "StructureTaskMemoryExtractionEngineJsonConfig", - "prompt_driver": { - "type": "AnthropicPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "claude-3-opus-20240229", - "top_p": 0.999, - "top_k": 250, - }, - }, - }, - "summary_engine": { - "type": "StructureTaskMemorySummaryEngineConfig", - "prompt_driver": { - "type": "AnthropicPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "claude-3-opus-20240229", - "top_p": 0.999, - "top_k": 250, - }, - }, }, + "conversation_memory_driver": None, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, } def test_from_dict(self, config): diff --git a/tests/unit/config/test_google_structure_config.py b/tests/unit/config/test_google_structure_config.py index 2a4d50641..f089b611b 100644 --- a/tests/unit/config/test_google_structure_config.py +++ b/tests/unit/config/test_google_structure_config.py @@ -14,100 +14,34 @@ def config(self): def test_to_dict(self, config): assert config.to_dict() == { "type": "GoogleStructureConfig", - "global_drivers": { - "type": "StructureGlobalDriversConfig", - "prompt_driver": { - "type": "GooglePromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "gemini-pro", - "top_p": None, - "top_k": None, - }, - "image_generation_driver": {"type": "DummyImageGenerationDriver"}, - "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, - "image_query_driver": {"type": "DummyImageQueryDriver"}, + "prompt_driver": { + "type": "GooglePromptDriver", + "temperature": 0.1, + "max_tokens": None, + "stream": False, + "model": "gemini-pro", + "top_p": None, + "top_k": None, + }, + "image_generation_driver": {"type": "DummyImageGenerationDriver"}, + "image_query_driver": {"type": "DummyImageQueryDriver"}, + "embedding_driver": { + "type": "GoogleEmbeddingDriver", + "model": "models/embedding-001", + "task_type": "retrieval_document", + "title": None, + }, + "vector_store_driver": { + "type": "LocalVectorStoreDriver", "embedding_driver": { "type": "GoogleEmbeddingDriver", "model": "models/embedding-001", "task_type": "retrieval_document", "title": None, }, - "vector_store_driver": { - "type": "LocalVectorStoreDriver", - "embedding_driver": { - "type": "GoogleEmbeddingDriver", - "model": "models/embedding-001", - "task_type": "retrieval_document", - "title": None, - }, - }, - "conversation_memory_driver": None, - }, - "task_memory": { - "type": "StructureTaskMemoryConfig", - "query_engine": { - "type": "StructureTaskMemoryQueryEngineConfig", - "prompt_driver": { - "type": "GooglePromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "gemini-pro", - "top_p": None, - "top_k": None, - }, - "vector_store_driver": { - "type": "LocalVectorStoreDriver", - "embedding_driver": { - "type": "GoogleEmbeddingDriver", - "model": "models/embedding-001", - "task_type": "retrieval_document", - "title": None, - }, - }, - }, - "extraction_engine": { - "type": "StructureTaskMemoryExtractionEngineConfig", - "csv": { - "type": "StructureTaskMemoryExtractionEngineCsvConfig", - "prompt_driver": { - "type": "GooglePromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "gemini-pro", - "top_p": None, - "top_k": None, - }, - }, - "json": { - "type": "StructureTaskMemoryExtractionEngineJsonConfig", - "prompt_driver": { - "type": "GooglePromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "gemini-pro", - "top_p": None, - "top_k": None, - }, - }, - }, - "summary_engine": { - "type": "StructureTaskMemorySummaryEngineConfig", - "prompt_driver": { - "type": "GooglePromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "model": "gemini-pro", - "top_p": None, - "top_k": None, - }, - }, }, + "conversation_memory_driver": None, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, } def test_from_dict(self, config): diff --git a/tests/unit/config/test_openai_structure_config.py b/tests/unit/config/test_openai_structure_config.py index 4a0ab7369..bd8db27cd 100644 --- a/tests/unit/config/test_openai_structure_config.py +++ b/tests/unit/config/test_openai_structure_config.py @@ -14,132 +14,54 @@ def config(self): def test_to_dict(self, config): assert config.to_dict() == { "type": "OpenAiStructureConfig", - "global_drivers": { - "type": "StructureGlobalDriversConfig", - "prompt_driver": { - "type": "OpenAiChatPromptDriver", - "base_url": None, - "model": "gpt-4o", - "organization": None, - "response_format": None, - "seed": None, - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "user": "", - }, - "conversation_memory_driver": None, + "prompt_driver": { + "type": "OpenAiChatPromptDriver", + "base_url": None, + "model": "gpt-4o", + "organization": None, + "response_format": None, + "seed": None, + "temperature": 0.1, + "max_tokens": None, + "stream": False, + "user": "", + }, + "conversation_memory_driver": None, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, + "embedding_driver": { + "base_url": None, + "model": "text-embedding-3-small", + "organization": None, + "type": "OpenAiEmbeddingDriver", + }, + "image_generation_driver": { + "api_version": None, + "base_url": None, + "image_size": "512x512", + "model": "dall-e-2", + "organization": None, + "quality": "standard", + "response_format": "b64_json", + "style": None, + "type": "OpenAiImageGenerationDriver", + }, + "image_query_driver": { + "api_version": None, + "base_url": None, + "image_quality": "auto", + "max_tokens": 256, + "model": "gpt-4-vision-preview", + "organization": None, + "type": "OpenAiVisionImageQueryDriver", + }, + "vector_store_driver": { "embedding_driver": { "base_url": None, "model": "text-embedding-3-small", "organization": None, "type": "OpenAiEmbeddingDriver", }, - "image_generation_driver": { - "api_version": None, - "base_url": None, - "image_size": "512x512", - "model": "dall-e-2", - "organization": None, - "quality": "standard", - "response_format": "b64_json", - "style": None, - "type": "OpenAiImageGenerationDriver", - }, - "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, - "image_query_driver": { - "api_version": None, - "base_url": None, - "image_quality": "auto", - "max_tokens": 256, - "model": "gpt-4-vision-preview", - "organization": None, - "type": "OpenAiVisionImageQueryDriver", - }, - "vector_store_driver": { - "embedding_driver": { - "base_url": None, - "model": "text-embedding-3-small", - "organization": None, - "type": "OpenAiEmbeddingDriver", - }, - "type": "LocalVectorStoreDriver", - }, - }, - "task_memory": { - "type": "StructureTaskMemoryConfig", - "query_engine": { - "type": "StructureTaskMemoryQueryEngineConfig", - "prompt_driver": { - "base_url": None, - "type": "OpenAiChatPromptDriver", - "model": "gpt-4o", - "organization": None, - "response_format": None, - "seed": None, - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "user": "", - }, - "vector_store_driver": { - "type": "LocalVectorStoreDriver", - "embedding_driver": { - "type": "OpenAiEmbeddingDriver", - "base_url": None, - "organization": None, - "model": "text-embedding-3-small", - }, - }, - }, - "extraction_engine": { - "type": "StructureTaskMemoryExtractionEngineConfig", - "csv": { - "type": "StructureTaskMemoryExtractionEngineCsvConfig", - "prompt_driver": { - "type": "OpenAiChatPromptDriver", - "base_url": None, - "model": "gpt-4o", - "organization": None, - "response_format": None, - "seed": None, - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "user": "", - }, - }, - "json": { - "type": "StructureTaskMemoryExtractionEngineJsonConfig", - "prompt_driver": { - "type": "OpenAiChatPromptDriver", - "base_url": None, - "model": "gpt-4o", - "organization": None, - "response_format": None, - "seed": None, - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "user": "", - }, - }, - }, - "summary_engine": { - "type": "StructureTaskMemorySummaryEngineConfig", - "prompt_driver": { - "type": "OpenAiChatPromptDriver", - "base_url": None, - "model": "gpt-4o", - "organization": None, - "response_format": None, - "seed": None, - "temperature": 0.1, - "max_tokens": None, - "stream": False, - "user": "", - }, - }, + "type": "LocalVectorStoreDriver", }, } diff --git a/tests/unit/config/test_structure_config.py b/tests/unit/config/test_structure_config.py index 16f189b02..9e1b00038 100644 --- a/tests/unit/config/test_structure_config.py +++ b/tests/unit/config/test_structure_config.py @@ -10,65 +10,16 @@ def config(self): def test_to_dict(self, config): assert config.to_dict() == { "type": "StructureConfig", - "global_drivers": { - "type": "StructureGlobalDriversConfig", - "prompt_driver": {"type": "DummyPromptDriver", "temperature": 0.1, "max_tokens": None, "stream": False}, - "conversation_memory_driver": None, + "prompt_driver": {"type": "DummyPromptDriver", "temperature": 0.1, "max_tokens": None, "stream": False}, + "conversation_memory_driver": None, + "embedding_driver": {"type": "DummyEmbeddingDriver"}, + "image_generation_driver": {"type": "DummyImageGenerationDriver"}, + "image_query_driver": {"type": "DummyImageQueryDriver"}, + "vector_store_driver": { "embedding_driver": {"type": "DummyEmbeddingDriver"}, - "image_generation_driver": {"type": "DummyImageGenerationDriver"}, - "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, - "image_query_driver": {"type": "DummyImageQueryDriver"}, - "vector_store_driver": { - "embedding_driver": {"type": "DummyEmbeddingDriver"}, - "type": "DummyVectorStoreDriver", - }, - }, - "task_memory": { - "type": "StructureTaskMemoryConfig", - "query_engine": { - "type": "StructureTaskMemoryQueryEngineConfig", - "prompt_driver": { - "type": "DummyPromptDriver", - "stream": False, - "temperature": 0.1, - "max_tokens": None, - }, - "vector_store_driver": { - "type": "LocalVectorStoreDriver", - "embedding_driver": {"type": "DummyEmbeddingDriver"}, - }, - }, - "extraction_engine": { - "type": "StructureTaskMemoryExtractionEngineConfig", - "csv": { - "type": "StructureTaskMemoryExtractionEngineCsvConfig", - "prompt_driver": { - "type": "DummyPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - }, - }, - "json": { - "type": "StructureTaskMemoryExtractionEngineJsonConfig", - "prompt_driver": { - "type": "DummyPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - }, - }, - }, - "summary_engine": { - "type": "StructureTaskMemorySummaryEngineConfig", - "prompt_driver": { - "type": "DummyPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - }, - }, + "type": "DummyVectorStoreDriver", }, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, } def test_from_dict(self, config): @@ -79,19 +30,11 @@ def test_unchanged_merge_config(self, config): config.merge_config( { "type": "StructureConfig", - "task_memory": { - "extraction_engine": { - "type": "StructureTaskMemoryExtractionEngineConfig", - "csv": { - "type": "StructureTaskMemoryExtractionEngineCsvConfig", - "prompt_driver": { - "type": "DummyPromptDriver", - "temperature": 0.1, - "max_tokens": None, - "stream": False, - }, - }, - } + "prompt_driver": { + "type": "DummyPromptDriver", + "temperature": 0.1, + "max_tokens": None, + "stream": False, }, } ).to_dict() @@ -100,12 +43,12 @@ def test_unchanged_merge_config(self, config): def test_changed_merge_config(self, config): config = config.merge_config( - {"task_memory": {"extraction_engine": {"csv": {"prompt_driver": {"stream": True}}}}} + {"prompt_driver": {"type": "DummyPromptDriver", "temperature": 0.1, "max_tokens": None, "stream": False}} ) - assert config.task_memory.extraction_engine.csv.prompt_driver.stream is True + assert config.prompt_driver.temperature == 0.1 def test_dot_update(self, config): - config.task_memory.extraction_engine.csv.prompt_driver.stream = True + config.prompt_driver.max_tokens = 10 - assert config.task_memory.extraction_engine.csv.prompt_driver.stream is True + assert config.prompt_driver.max_tokens == 10 diff --git a/tests/unit/tasks/test_json_extraction_task.py b/tests/unit/tasks/test_json_extraction_task.py index 1ffa24ecd..0366652b0 100644 --- a/tests/unit/tasks/test_json_extraction_task.py +++ b/tests/unit/tasks/test_json_extraction_task.py @@ -14,10 +14,8 @@ def task(self): def test_run(self, task): mock_config = MockStructureConfig() - assert isinstance(mock_config.global_drivers.prompt_driver, MockPromptDriver) - mock_config.global_drivers.prompt_driver.mock_output = ( - '[{"test_key_1": "test_value_1"}, {"test_key_2": "test_value_2"}]' - ) + assert isinstance(mock_config.prompt_driver, MockPromptDriver) + mock_config.prompt_driver.mock_output = '[{"test_key_1": "test_value_1"}, {"test_key_2": "test_value_2"}]' agent = Agent(config=mock_config) agent.add_task(task) diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index e9972660f..abd8f0e0a 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -62,6 +62,9 @@ class TesterPromptDriverOption: "OPENAI_CHAT_4": TesterPromptDriverOption( prompt_driver=OpenAiChatPromptDriver(model="gpt-4", api_key=os.environ["OPENAI_API_KEY"]), enabled=True ), + "OPENAI_CHAT_4o": TesterPromptDriverOption( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4o", api_key=os.environ["OPENAI_API_KEY"]), enabled=True + ), "OPENAI_CHAT_4_1106_PREVIEW": TesterPromptDriverOption( prompt_driver=OpenAiChatPromptDriver(model="gpt-4-1106-preview", api_key=os.environ["OPENAI_API_KEY"]), enabled=True, @@ -275,7 +278,7 @@ def verify_structure_output(self, structure) -> dict: ], prompt_driver=AzureOpenAiChatPromptDriver( api_key=os.environ["AZURE_OPENAI_API_KEY_1"], - model="gpt-4", + model="gpt-4o", azure_deployment=os.environ["AZURE_OPENAI_4_DEPLOYMENT_ID"], azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_1"], response_format="json_object", From 7ed3b9011f0e3e38255df1088ac791e5ec56633d Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 20 May 2024 15:05:35 -0700 Subject: [PATCH 051/145] Add codecov (#794) --- .github/workflows/code-checks.yml | 26 +++++++++++++++++++++++--- README.md | 1 + poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.github/workflows/code-checks.yml b/.github/workflows/code-checks.yml index 19b65bce9..16c9b58b4 100644 --- a/.github/workflows/code-checks.yml +++ b/.github/workflows/code-checks.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.9"] + python-version: ["3.12"] steps: - name: Checkout actions uses: actions/checkout@v3 @@ -25,7 +25,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.9" ] + python-version: [ "3.12" ] steps: - name: Checkout actions uses: actions/checkout@v3 @@ -38,7 +38,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.9" ] + python-version: [ "3.12" ] steps: - name: Checkout actions uses: actions/checkout@v3 @@ -46,3 +46,23 @@ jobs: uses: ./.github/actions/init-environment - name: Run linter run: poetry run ruff check griptape/ + coverage: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.12"] + steps: + - name: Checkout actions + uses: actions/checkout@v3 + - name: Init environment + uses: ./.github/actions/init-environment + - name: Run unit tests + run: pytest -n auto --cov=griptape tests/unit + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v4 + with: + flags: smart-tests + verbose: true + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/README.md b/README.md index aed7cdaac..405f729e3 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![Docs](https://readthedocs.org/projects/griptape/badge/)](https://griptape.readthedocs.io/) [![Checked with pyright](https://microsoft.github.io/pyright/img/pyright_badge.svg)](https://microsoft.github.io/pyright/) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) +[![codecov](https://codecov.io/github/griptape-ai/griptape/graph/badge.svg?token=HUBqUpl3NB)](https://codecov.io/github/griptape-ai/griptape) [![Griptape Discord](https://dcbadge.vercel.app/api/server/gnWRz88eym?compact=true&style=flat)](https://discord.gg/gnWRz88eym) Griptape is a modular Python framework for building AI-powered applications that securely connect to your enterprise data and APIs. It offers developers the ability to maintain control and flexibility at every step. diff --git a/poetry.lock b/poetry.lock index b46742b6c..02da58de3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3872,13 +3872,13 @@ rich = ">=8.0.0" [[package]] name = "pytest-cov" -version = "4.1.0" +version = "5.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, ] [package.dependencies] @@ -3886,7 +3886,7 @@ coverage = {version = ">=5.2.1", extras = ["toml"]} pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] [[package]] name = "pytest-env" @@ -5707,4 +5707,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "d6bedf8297bbcd3c597bf93c4fb25e57192a8195941d0ad462bbacb9835c8607" +content-hash = "7e866d7a5968b9e5a5c166be3cf667488d00d03d412deabe29090a9f6d1ab83d" diff --git a/pyproject.toml b/pyproject.toml index e60ec709a..9206f23c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -142,7 +142,7 @@ mongomock = "*" twine = ">=4" moto = {extras = ["dynamodb", "iotdata", "sqs"], version = "^4.2.13"} pytest-xdist = "^3.3.1" -pytest-cov = "^4.1.0" +pytest-cov = "^5.0.0" pytest-env = "^1.1.1" fuzzywuzzy = "^0.18.0" pytest-clarity = "^1.0.1" From 540e8f321d5b43663085b021b912e41711872a6d Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Mon, 20 May 2024 18:13:03 -0500 Subject: [PATCH 052/145] Add `AzureOpenAiStructureConfig`, default `azure_deployment` (#788) --- .github/workflows/docs-integration-tests.yml | 2 + CHANGELOG.md | 8 ++ docs/examples/multiple-agent-shared-memory.md | 33 +++--- .../drivers/image-query-drivers.md | 33 +++++- docs/griptape-framework/structures/config.md | 28 ++++- griptape/config/__init__.py | 2 + .../config/azure_openai_structure_config.py | 102 ++++++++++++++++++ griptape/drivers/__init__.py | 2 + .../azure_openai_embedding_driver.py | 6 +- .../azure_openai_image_generation_driver.py | 8 +- .../azure_openai_vision_image_query_driver.py | 45 ++++++++ .../prompt/azure_openai_chat_prompt_driver.py | 8 +- .../azure_openai_completion_prompt_driver.py | 8 +- .../test_azure_openai_structure_config.py | 97 +++++++++++++++++ .../test_azure_openai_embedding_driver.py | 1 + ...st_azure_openai_image_generation_driver.py | 12 +-- .../test_azure_openai_image_query_driver.py | 70 ++++++++++++ .../test_azure_openai_chat_prompt_driver.py | 1 + ...t_azure_openai_completion_prompt_driver.py | 4 + 19 files changed, 432 insertions(+), 38 deletions(-) create mode 100644 griptape/config/azure_openai_structure_config.py create mode 100644 griptape/drivers/image_query/azure_openai_vision_image_query_driver.py create mode 100644 tests/unit/config/test_azure_openai_structure_config.py create mode 100644 tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 14051de7f..cb4add5ae 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -75,6 +75,8 @@ jobs: AZURE_OPENAI_API_KEY_1: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_1 }} AZURE_OPENAI_ENDPOINT_2: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_2 }} AZURE_OPENAI_API_KEY_2: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_2 }} + AZURE_OPENAI_ENDPOINT_3: ${{ secrets.INTEG_AZURE_OPENAI_ENDPOINT_3 }} + AZURE_OPENAI_API_KEY_3: ${{ secrets.INTEG_AZURE_OPENAI_API_KEY_3 }} AZURE_OPENAI_35_TURBO_16K_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_35_TURBO_16K_DEPLOYMENT_ID }} AZURE_OPENAI_DAVINCI_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_DAVINCI_DEPLOYMENT_ID }} AZURE_OPENAI_4_DEPLOYMENT_ID: ${{ secrets.INTEG_OPENAI_4_DEPLOYMENT_ID }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 519708d18..aaa95e7a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added +- `AzureOpenAiStructureConfig` for providing Structures with all Azure OpenAI Driver configuration. +- `AzureOpenAiVisionImageQueryDriver` to support queries on images using Azure's OpenAI Vision models. + +### Changed +- Default the value of `azure_deployment` on all Azure Drivers to the model the Driver is using. +- Field `azure_ad_token` on all Azure Drivers is no longer serializable. + ## [0.25.1] - 2024-05-15 ### Fixed diff --git a/docs/examples/multiple-agent-shared-memory.md b/docs/examples/multiple-agent-shared-memory.md index ac69abcd4..7332de165 100644 --- a/docs/examples/multiple-agent-shared-memory.md +++ b/docs/examples/multiple-agent-shared-memory.md @@ -10,12 +10,12 @@ The `MongoDbAtlasVectorStoreDriver` assumes that you have a vector index configu import os from griptape.tools import WebScraper, VectorStoreClient, TaskMemoryClient from griptape.structures import Agent -from griptape.drivers import AzureOpenAiChatPromptDriver, AzureOpenAiEmbeddingDriver, AzureMongoDbVectorStoreDriver +from griptape.drivers import AzureOpenAiEmbeddingDriver, AzureMongoDbVectorStoreDriver from griptape.engines import VectorQueryEngine, PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine from griptape.memory import TaskMemory from griptape.artifacts import TextArtifact from griptape.memory.task.storage import TextArtifactStorage -from griptape.config import StructureConfig +from griptape.config import AzureOpenAiStructureConfig AZURE_OPENAI_ENDPOINT_1 = os.environ["AZURE_OPENAI_ENDPOINT_1"] @@ -31,38 +31,32 @@ MONGODB_VECTOR_PATH = os.environ["MONGODB_VECTOR_PATH"] MONGODB_CONNECTION_STRING = f"mongodb+srv://{MONGODB_USERNAME}:{MONGODB_PASSWORD}@{MONGODB_HOST}/{MONGODB_DATABASE_NAME}?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000" -azure_embedding_driver = AzureOpenAiEmbeddingDriver( +embedding_driver = AzureOpenAiEmbeddingDriver( model='text-embedding-ada-002', azure_endpoint=AZURE_OPENAI_ENDPOINT_1, api_key=AZURE_OPENAI_API_KEY_1, - azure_deployment='text-embedding-ada-002' -) - -azure_prompt_driver = AzureOpenAiChatPromptDriver( - model='gpt-4', - azure_endpoint=AZURE_OPENAI_ENDPOINT_1, - api_key=AZURE_OPENAI_API_KEY_1, - azure_deployment='gpt-4' ) mongo_driver = AzureMongoDbVectorStoreDriver( connection_string=MONGODB_CONNECTION_STRING, database_name=MONGODB_DATABASE_NAME, collection_name=MONGODB_COLLECTION_NAME, - embedding_driver=azure_embedding_driver, + embedding_driver=embedding_driver, index_name=MONGODB_INDEX_NAME, - vector_path=MONGODB_VECTOR_PATH + vector_path=MONGODB_VECTOR_PATH, +) + +config = AzureOpenAiStructureConfig( + azure_endpoint=AZURE_OPENAI_ENDPOINT_1, + vector_store_driver=mongo_driver, + embedding_driver=embedding_driver, ) loader = Agent( tools=[ - WebScraper() + WebScraper(), ], - config=StructureConfig( - prompt_driver=azure_prompt_driver, - vector_store_driver=mongo_driver, - embedding_driver=azure_embedding_driver - ), + config=config, ) asker = Agent( tools=[ @@ -70,6 +64,7 @@ asker = Agent( ], meta_memory=loader.meta_memory, task_memory=loader.task_memory, + config=config, ) if __name__ == "__main__": diff --git a/docs/griptape-framework/drivers/image-query-drivers.md b/docs/griptape-framework/drivers/image-query-drivers.md index f643b09eb..7538496b1 100644 --- a/docs/griptape-framework/drivers/image-query-drivers.md +++ b/docs/griptape-framework/drivers/image-query-drivers.md @@ -62,7 +62,7 @@ print(result) ## OpenAiVisionImageQueryDriver !!! info - This Driver defaults to using the `gpt-4-vision-preview` model. As other multimodal models are released, they can be specified using the `model` field. While the `max_tokens` field is optional, it is recommended to set this to a value that corresponds to the desired response length. Without an explicit value, the model will default to very short responses. See [OpenAI's documentation](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information on how to relate token count to response length. + While the `max_tokens` field is optional, it is recommended to set this to a value that corresponds to the desired response length. Without an explicit value, the model will default to very short responses. See [OpenAI's documentation](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information on how to relate token count to response length. The [OpenAiVisionImageQueryDriver](../../reference/griptape/drivers/image_query/openai_vision_image_query_driver.md) is used to query images using the OpenAI Vision API. Here is an example of how to use it: @@ -86,6 +86,37 @@ with open("tests/resources/mountain.png", "rb") as f: engine.run("Describe the weather in the image", [image_artifact]) ``` +## AzureOpenAiVisionImageQueryDriver + +!!! info + In order to use the `gpt-4-vision-preview` model on Azure OpenAI, the `gpt-4` model must be deployed with the version set to `vision-preview`. More information can be found in the [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/gpt-with-vision). + +The [AzureOpenAiVisionImageQueryDriver](../../reference/griptape/drivers/image_query/azure_openai_vision_image_query_driver.md) is used to query images using the Azure OpenAI Vision API. Here is an example of how to use it: + +```python +import os +from griptape.drivers import AzureOpenAiVisionImageQueryDriver +from griptape.engines import ImageQueryEngine +from griptape.loaders import ImageLoader + +driver = AzureOpenAiVisionImageQueryDriver( + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_3"], + api_key=os.environ["AZURE_OPENAI_API_KEY_3"], + model="gpt-4", + azure_deployment="gpt-4-vision-preview", + max_tokens=256, +) + +engine = ImageQueryEngine( + image_query_driver=driver, +) + +with open("tests/resources/mountain.png", "rb") as f: + image_artifact = ImageLoader().load(f.read()) + +engine.run("Describe the weather in the image", [image_artifact]) +``` + ## AmazonBedrockImageQueryDriver The [Amazon Bedrock Image Query Driver](../../reference/griptape/drivers/image_query/amazon_bedrock_image_query_driver.md) provides multi-model access to image query models hosted by Amazon Bedrock. This Driver manages API calls to the Bedrock API, while the specific Model Drivers below format the API requests and parse the responses. diff --git a/docs/griptape-framework/structures/config.md b/docs/griptape-framework/structures/config.md index 817dfb7fe..374468639 100644 --- a/docs/griptape-framework/structures/config.md +++ b/docs/griptape-framework/structures/config.md @@ -22,6 +22,28 @@ agent = Agent( agent = Agent() # This is equivalent to the above ``` +#### Azure OpenAI + +The [Azure OpenAI Structure Config](../../reference/griptape/config/azure_openai_structure_config.md) provides default Drivers for Azure's OpenAI APIs. + + +```python +import os +from griptape.structures import Agent +from griptape.config import AzureOpenAiStructureConfig + +agent = Agent( + config=AzureOpenAiStructureConfig( + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_3"], + api_key=os.environ["AZURE_OPENAI_API_KEY_3"] + ).merge_config({ + "image_query_driver": { + "azure_deployment": "gpt-4-vision-preview", + }, + }), +) +``` + #### Amazon Bedrock The [Amazon Bedrock Structure Config](../../reference/griptape/config/amazon_bedrock_structure_config.md) provides default Drivers for Amazon Bedrock's APIs. @@ -112,7 +134,11 @@ serialized_config = custom_config.to_json() deserialized_config = AmazonBedrockStructureConfig.from_json(serialized_config) agent = Agent( - config=deserialized_config, + config=deserialized_config.merge_config({ + "prompt_driver" : { + "model": "anthropic.claude-3-sonnet-20240229-v1:0", + }, + }), ) ``` diff --git a/griptape/config/__init__.py b/griptape/config/__init__.py index 849556017..7783b3886 100644 --- a/griptape/config/__init__.py +++ b/griptape/config/__init__.py @@ -4,6 +4,7 @@ from .structure_config import StructureConfig from .openai_structure_config import OpenAiStructureConfig +from .azure_openai_structure_config import AzureOpenAiStructureConfig from .amazon_bedrock_structure_config import AmazonBedrockStructureConfig from .anthropic_structure_config import AnthropicStructureConfig from .google_structure_config import GoogleStructureConfig @@ -14,6 +15,7 @@ "BaseStructureConfig", "StructureConfig", "OpenAiStructureConfig", + "AzureOpenAiStructureConfig", "AmazonBedrockStructureConfig", "AnthropicStructureConfig", "GoogleStructureConfig", diff --git a/griptape/config/azure_openai_structure_config.py b/griptape/config/azure_openai_structure_config.py new file mode 100644 index 000000000..8c7ce82d3 --- /dev/null +++ b/griptape/config/azure_openai_structure_config.py @@ -0,0 +1,102 @@ +from typing import Callable, Optional +from attrs import Factory, define, field + +from griptape.config import StructureConfig +from griptape.drivers import ( + LocalVectorStoreDriver, + AzureOpenAiChatPromptDriver, + AzureOpenAiEmbeddingDriver, + AzureOpenAiImageGenerationDriver, + AzureOpenAiVisionImageQueryDriver, + BasePromptDriver, + BaseEmbeddingDriver, + BaseImageGenerationDriver, + BaseImageQueryDriver, + BaseVectorStoreDriver, +) + + +@define +class AzureOpenAiStructureConfig(StructureConfig): + """Azure OpenAI Structure Configuration. + + Attributes: + azure_endpoint: The endpoint for the Azure OpenAI instance. + azure_ad_token: An optional Azure Active Directory token. + azure_ad_token_provider: An optional Azure Active Directory token provider. + api_key: An optional Azure API key. + prompt_driver: An Azure OpenAI Chat Prompt Driver. + image_generation_driver: An Azure OpenAI Image Generation Driver. + image_query_driver: An Azure OpenAI Vision Image Query Driver. + embedding_driver: An Azure OpenAI Embedding Driver. + vector_store_driver: A Local Vector Store Driver. + """ + + azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) + azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) + azure_ad_token_provider: Optional[Callable[[], str]] = field( + kw_only=True, default=None, metadata={"serializable": False} + ) + api_key: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) + prompt_driver: BasePromptDriver = field( + default=Factory( + lambda self: AzureOpenAiChatPromptDriver( + model="gpt-4", + azure_endpoint=self.azure_endpoint, + api_key=self.api_key, + azure_ad_token=self.azure_ad_token, + azure_ad_token_provider=self.azure_ad_token_provider, + ), + takes_self=True, + ), + metadata={"serializable": True}, + kw_only=True, + ) + image_generation_driver: BaseImageGenerationDriver = field( + default=Factory( + lambda self: AzureOpenAiImageGenerationDriver( + model="dall-e-2", + azure_endpoint=self.azure_endpoint, + api_key=self.api_key, + azure_ad_token=self.azure_ad_token, + azure_ad_token_provider=self.azure_ad_token_provider, + image_size="512x512", + ), + takes_self=True, + ), + metadata={"serializable": True}, + kw_only=True, + ) + image_query_driver: BaseImageQueryDriver = field( + default=Factory( + lambda self: AzureOpenAiVisionImageQueryDriver( + model="gpt-4", + azure_endpoint=self.azure_endpoint, + api_key=self.api_key, + azure_ad_token=self.azure_ad_token, + azure_ad_token_provider=self.azure_ad_token_provider, + ), + takes_self=True, + ), + metadata={"serializable": True}, + kw_only=True, + ) + embedding_driver: BaseEmbeddingDriver = field( + default=Factory( + lambda self: AzureOpenAiEmbeddingDriver( + model="text-embedding-3-small", + azure_endpoint=self.azure_endpoint, + api_key=self.api_key, + azure_ad_token=self.azure_ad_token, + azure_ad_token_provider=self.azure_ad_token_provider, + ), + takes_self=True, + ), + metadata={"serializable": True}, + kw_only=True, + ) + vector_store_driver: BaseVectorStoreDriver = field( + default=Factory(lambda self: LocalVectorStoreDriver(embedding_driver=self.embedding_driver), takes_self=True), + metadata={"serializable": True}, + kw_only=True, + ) diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 7941ed61e..1d76ba30d 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -81,6 +81,7 @@ from .image_query.dummy_image_query_driver import DummyImageQueryDriver from .image_query.openai_vision_image_query_driver import OpenAiVisionImageQueryDriver from .image_query.anthropic_image_query_driver import AnthropicImageQueryDriver +from .image_query.azure_openai_vision_image_query_driver import AzureOpenAiVisionImageQueryDriver from .image_query.amazon_bedrock_image_query_driver import AmazonBedrockImageQueryDriver from .web_scraper.base_web_scraper_driver import BaseWebScraperDriver @@ -175,6 +176,7 @@ "BedrockClaudeImageQueryModelDriver", "BaseImageQueryDriver", "OpenAiVisionImageQueryDriver", + "AzureOpenAiVisionImageQueryDriver", "DummyImageQueryDriver", "AnthropicImageQueryDriver", "BaseMultiModelImageQueryDriver", diff --git a/griptape/drivers/embedding/azure_openai_embedding_driver.py b/griptape/drivers/embedding/azure_openai_embedding_driver.py index 3cf473c06..f2c3b8d39 100644 --- a/griptape/drivers/embedding/azure_openai_embedding_driver.py +++ b/griptape/drivers/embedding/azure_openai_embedding_driver.py @@ -11,7 +11,7 @@ class AzureOpenAiEmbeddingDriver(OpenAiEmbeddingDriver): """ Attributes: - azure_deployment: An Azure OpenAi deployment id. + azure_deployment: An optional Azure OpenAi deployment id. Defaults to the model name. azure_endpoint: An Azure OpenAi endpoint. azure_ad_token: An optional Azure Active Directory token. azure_ad_token_provider: An optional Azure Active Directory token provider. @@ -20,7 +20,9 @@ class AzureOpenAiEmbeddingDriver(OpenAiEmbeddingDriver): client: An `openai.AzureOpenAI` client. """ - azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) + azure_deployment: str = field( + kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={"serializable": True} + ) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) azure_ad_token_provider: Optional[Callable[[], str]] = field( diff --git a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py index d037656ca..f6cbbe1a9 100644 --- a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py @@ -12,7 +12,7 @@ class AzureOpenAiImageGenerationDriver(OpenAiImageGenerationDriver): """Driver for Azure-hosted OpenAI image generation API. Attributes: - azure_deployment: An Azure OpenAi deployment id. + azure_deployment: An optional Azure OpenAi deployment id. Defaults to the model name. azure_endpoint: An Azure OpenAi endpoint. azure_ad_token: An optional Azure Active Directory token. azure_ad_token_provider: An optional Azure Active Directory token provider. @@ -20,9 +20,11 @@ class AzureOpenAiImageGenerationDriver(OpenAiImageGenerationDriver): client: An `openai.AzureOpenAI` client. """ - azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) + azure_deployment: str = field( + kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={"serializable": True} + ) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) - azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) azure_ad_token_provider: Optional[Callable[[], str]] = field( kw_only=True, default=None, metadata={"serializable": False} ) diff --git a/griptape/drivers/image_query/azure_openai_vision_image_query_driver.py b/griptape/drivers/image_query/azure_openai_vision_image_query_driver.py new file mode 100644 index 000000000..06b329c03 --- /dev/null +++ b/griptape/drivers/image_query/azure_openai_vision_image_query_driver.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +from typing import Callable, Optional + +from attr import define, field, Factory +import openai +from griptape.drivers.image_query.openai_vision_image_query_driver import OpenAiVisionImageQueryDriver + + +@define +class AzureOpenAiVisionImageQueryDriver(OpenAiVisionImageQueryDriver): + """Driver for Azure-hosted OpenAI image query API. + + Attributes: + azure_deployment: An optional Azure OpenAi deployment id. Defaults to the model name. + azure_endpoint: An Azure OpenAi endpoint. + azure_ad_token: An optional Azure Active Directory token. + azure_ad_token_provider: An optional Azure Active Directory token provider. + api_version: An Azure OpenAi API version. + client: An `openai.AzureOpenAI` client. + """ + + azure_deployment: str = field( + kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={"serializable": True} + ) + azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) + azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) + azure_ad_token_provider: Optional[Callable[[], str]] = field( + kw_only=True, default=None, metadata={"serializable": False} + ) + api_version: str = field(default="2024-02-01", kw_only=True, metadata={"serializable": True}) + client: openai.AzureOpenAI = field( + default=Factory( + lambda self: openai.AzureOpenAI( + organization=self.organization, + api_key=self.api_key, + api_version=self.api_version, + azure_endpoint=self.azure_endpoint, + azure_deployment=self.azure_deployment, + azure_ad_token=self.azure_ad_token, + azure_ad_token_provider=self.azure_ad_token_provider, + ), + takes_self=True, + ) + ) diff --git a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py index 9824c31a0..0583369c4 100644 --- a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py @@ -9,7 +9,7 @@ class AzureOpenAiChatPromptDriver(OpenAiChatPromptDriver): """ Attributes: - azure_deployment: An Azure OpenAi deployment id. + azure_deployment: An optional Azure OpenAi deployment id. Defaults to the model name. azure_endpoint: An Azure OpenAi endpoint. azure_ad_token: An optional Azure Active Directory token. azure_ad_token_provider: An optional Azure Active Directory token provider. @@ -17,9 +17,11 @@ class AzureOpenAiChatPromptDriver(OpenAiChatPromptDriver): client: An `openai.AzureOpenAI` client. """ - azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) + azure_deployment: str = field( + kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={"serializable": True} + ) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) - azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) azure_ad_token_provider: Optional[Callable[[], str]] = field( kw_only=True, default=None, metadata={"serializable": False} ) diff --git a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py b/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py index 805b45519..89f2651ef 100644 --- a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py @@ -8,7 +8,7 @@ class AzureOpenAiCompletionPromptDriver(OpenAiCompletionPromptDriver): """ Attributes: - azure_deployment: An Azure OpenAi deployment id. + azure_deployment: An optional Azure OpenAi deployment id. Defaults to the model name. azure_endpoint: An Azure OpenAi endpoint. azure_ad_token: An optional Azure Active Directory token. azure_ad_token_provider: An optional Azure Active Directory token provider. @@ -16,9 +16,11 @@ class AzureOpenAiCompletionPromptDriver(OpenAiCompletionPromptDriver): client: An `openai.AzureOpenAI` client. """ - azure_deployment: str = field(kw_only=True, metadata={"serializable": True}) + azure_deployment: str = field( + kw_only=True, default=Factory(lambda self: self.model, takes_self=True), metadata={"serializable": True} + ) azure_endpoint: str = field(kw_only=True, metadata={"serializable": True}) - azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) + azure_ad_token: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": False}) azure_ad_token_provider: Optional[Callable[[], str]] = field( kw_only=True, default=None, metadata={"serializable": False} ) diff --git a/tests/unit/config/test_azure_openai_structure_config.py b/tests/unit/config/test_azure_openai_structure_config.py new file mode 100644 index 000000000..acec4526a --- /dev/null +++ b/tests/unit/config/test_azure_openai_structure_config.py @@ -0,0 +1,97 @@ +from pytest import fixture +from griptape.config import AzureOpenAiStructureConfig + + +class TestAzureOpenAiStructureConfig: + @fixture(autouse=True) + def mock_openai(self, mocker): + return mocker.patch("openai.AzureOpenAI") + + @fixture + def config(self): + return AzureOpenAiStructureConfig( + azure_endpoint="http://localhost:8080", + azure_ad_token="test-token", + azure_ad_token_provider=lambda: "test-provider", + ) + + def test_to_dict(self, config): + assert config.to_dict() == { + "type": "AzureOpenAiStructureConfig", + "azure_endpoint": "http://localhost:8080", + "prompt_driver": { + "type": "AzureOpenAiChatPromptDriver", + "base_url": None, + "model": "gpt-4", + "azure_deployment": "gpt-4", + "azure_endpoint": "http://localhost:8080", + "api_version": "2023-05-15", + "organization": None, + "response_format": None, + "seed": None, + "temperature": 0.1, + "max_tokens": None, + "stream": False, + "user": "", + }, + "conversation_memory_driver": None, + "embedding_driver": { + "base_url": None, + "model": "text-embedding-3-small", + "api_version": "2023-05-15", + "azure_deployment": "text-embedding-3-small", + "azure_endpoint": "http://localhost:8080", + "organization": None, + "type": "AzureOpenAiEmbeddingDriver", + }, + "image_generation_driver": { + "api_version": "2024-02-01", + "base_url": None, + "image_size": "512x512", + "model": "dall-e-2", + "azure_deployment": "dall-e-2", + "azure_endpoint": "http://localhost:8080", + "organization": None, + "quality": "standard", + "response_format": "b64_json", + "style": None, + "type": "AzureOpenAiImageGenerationDriver", + }, + "text_to_speech_driver": {"type": "DummyTextToSpeechDriver"}, + "image_query_driver": { + "base_url": None, + "image_quality": "auto", + "max_tokens": 256, + "model": "gpt-4", + "api_version": "2024-02-01", + "azure_deployment": "gpt-4", + "azure_endpoint": "http://localhost:8080", + "organization": None, + "type": "AzureOpenAiVisionImageQueryDriver", + }, + "vector_store_driver": { + "embedding_driver": { + "base_url": None, + "model": "text-embedding-3-small", + "api_version": "2023-05-15", + "azure_deployment": "text-embedding-3-small", + "azure_endpoint": "http://localhost:8080", + "organization": None, + "type": "AzureOpenAiEmbeddingDriver", + }, + "type": "LocalVectorStoreDriver", + }, + } + + def test_from_dict(self, config: AzureOpenAiStructureConfig): + assert AzureOpenAiStructureConfig.from_dict(config.to_dict()).to_dict() == config.to_dict() + + # override values in the dict config + # serialize and deserialize the config + new_config = config.merge_config( + { + "prompt_driver": {"azure_deployment": "new-test-gpt-4"}, + "embedding_driver": {"model": "new-text-embedding-3-small"}, + } + ).to_dict() + assert AzureOpenAiStructureConfig.from_dict(new_config).to_dict() == new_config diff --git a/tests/unit/drivers/embedding/test_azure_openai_embedding_driver.py b/tests/unit/drivers/embedding/test_azure_openai_embedding_driver.py index f22ad02f0..d2c20c043 100644 --- a/tests/unit/drivers/embedding/test_azure_openai_embedding_driver.py +++ b/tests/unit/drivers/embedding/test_azure_openai_embedding_driver.py @@ -23,6 +23,7 @@ def driver(self): def test_init(self, driver): assert driver + assert AzureOpenAiEmbeddingDriver(azure_endpoint="foobar", model="gpt-4").azure_deployment == "gpt-4" def test_embed_chunk(self, driver): assert driver.try_embed_chunk("foobar") == [0, 1, 0] diff --git a/tests/unit/drivers/image_generation/test_azure_openai_image_generation_driver.py b/tests/unit/drivers/image_generation/test_azure_openai_image_generation_driver.py index 13b122af7..2166bc28a 100644 --- a/tests/unit/drivers/image_generation/test_azure_openai_image_generation_driver.py +++ b/tests/unit/drivers/image_generation/test_azure_openai_image_generation_driver.py @@ -16,6 +16,12 @@ def driver(self): def test_init(self, driver): assert driver + assert ( + AzureOpenAiImageGenerationDriver( + model="dall-e-3", client=Mock(), azure_endpoint="https://dalle.example.com", image_size="512x512" + ).azure_deployment + == "dall-e-3" + ) def test_init_requires_endpoint(self): with pytest.raises(TypeError): @@ -23,12 +29,6 @@ def test_init_requires_endpoint(self): model="dall-e-3", client=Mock(), azure_deployment="dalle-deployment", image_size="512x512" ) # pyright: ignore - def test_init_requires_deployment(self): - with pytest.raises(TypeError): - AzureOpenAiImageGenerationDriver( - model="dall-e-3", client=Mock(), azure_endpoint="https://dalle.example.com", image_size="512x512" - ) # pyright: ignore - def test_try_text_to_image(self, driver): driver.client.images.generate.return_value = Mock(data=[Mock(b64_json=b"aW1hZ2UgZGF0YQ==")]) diff --git a/tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py b/tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py new file mode 100644 index 000000000..d3a34fe44 --- /dev/null +++ b/tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py @@ -0,0 +1,70 @@ +import pytest +from unittest.mock import Mock +from griptape.drivers import AzureOpenAiVisionImageQueryDriver +from griptape.artifacts import ImageArtifact + + +class TestAzureOpenAiVisionImageQueryDriver: + @pytest.fixture + def mock_completion_create(self, mocker): + mock_chat_create = mocker.patch("openai.AzureOpenAI").return_value.chat.completions.create + mock_choice = Mock(message=Mock(content="expected_output_text")) + mock_chat_create.return_value.choices = [mock_choice] + return mock_chat_create + + def test_init(self): + assert AzureOpenAiVisionImageQueryDriver( + azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4" + ) + assert ( + AzureOpenAiVisionImageQueryDriver(azure_endpoint="test-endpoint", model="gpt-4").azure_deployment == "gpt-4" + ) + + def test_try_query_defaults(self, mock_completion_create): + driver = AzureOpenAiVisionImageQueryDriver( + azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4" + ) + test_prompt_string = "Prompt String" + test_binary_data = b"test-data" + test_image = ImageArtifact(value=test_binary_data, width=100, height=100, format="png") + text_artifact = driver.try_query(test_prompt_string, [test_image]) + + messages = self._expected_messages(test_prompt_string, test_image.base64) + + mock_completion_create.assert_called_once_with(model=driver.model, messages=[messages], max_tokens=256) + + assert text_artifact.value == "expected_output_text" + + def test_try_query_max_tokens(self, mock_completion_create): + driver = AzureOpenAiVisionImageQueryDriver( + azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4", max_tokens=1024 + ) + test_prompt_string = "Prompt String" + test_binary_data = b"test-data" + test_image = ImageArtifact(value=test_binary_data, width=100, height=100, format="png") + driver.try_query(test_prompt_string, [test_image]) + + messages = self._expected_messages(test_prompt_string, test_image.base64) + + mock_completion_create.assert_called_once_with(model=driver.model, messages=[messages], max_tokens=1024) + + def test_try_query_multiple_choices(self, mock_completion_create): + mock_completion_create.return_value.choices.append(Mock(message=Mock(content="expected_output_text2"))) + driver = AzureOpenAiVisionImageQueryDriver( + azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4" + ) + + with pytest.raises(Exception): + driver.try_query("Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100, format="png")]) + + def _expected_messages(self, expected_prompt_string, expected_binary_data): + return { + "content": [ + {"type": "text", "text": expected_prompt_string}, + { + "type": "image_url", + "image_url": {"url": f"data:image/png;base64,{expected_binary_data}", "detail": "auto"}, + }, + ], + "role": "user", + } diff --git a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py index ebf598570..9446d0520 100644 --- a/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_azure_openai_chat_prompt_driver.py @@ -26,6 +26,7 @@ def mock_chat_completion_stream_create(self, mocker): def test_init(self): assert AzureOpenAiChatPromptDriver(azure_endpoint="foobar", azure_deployment="foobar", model="gpt-4") + assert AzureOpenAiChatPromptDriver(azure_endpoint="foobar", model="gpt-4").azure_deployment == "gpt-4" def test_try_run(self, mock_chat_completion_create, prompt_stack, messages): # Given diff --git a/tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py b/tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py index cf92f64e9..65758843a 100644 --- a/tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py +++ b/tests/unit/drivers/prompt/test_azure_openai_completion_prompt_driver.py @@ -28,6 +28,10 @@ def test_init(self): assert AzureOpenAiCompletionPromptDriver( azure_endpoint="endpoint", azure_deployment="deployment", model="text-davinci-003" ) + assert ( + AzureOpenAiCompletionPromptDriver(azure_endpoint="endpoint", model="text-davinci-003").azure_deployment + == "text-davinci-003" + ) def test_try_run(self, mock_completion_create, prompt_stack, prompt): # Given From 9db5c8d862162b00d3f6b44cf95d859f2252857d Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Mon, 20 May 2024 19:02:04 -0500 Subject: [PATCH 053/145] Run integration tests on push to `main` and `dev` (#795) --- .github/workflows/docs-integration-tests.yml | 11 ++++++++--- tests/integration/test_code_blocks.py | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index cb4add5ae..ed2720917 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -3,9 +3,13 @@ name: Docs Integration Tests on: pull_request_review: types: [submitted] + push: + branches: + - main + - dev jobs: test: - if: github.event.review.state == 'APPROVED' + if: github.event.review.state == 'APPROVED' || github.event_name == 'push' runs-on: ubuntu-latest strategy: fail-fast: false @@ -125,6 +129,7 @@ jobs: - name: Get changed files id: changed-files uses: tj-actions/changed-files@v44 + if: github.event_name == 'pull_request_review' with: files: | **.md @@ -136,7 +141,7 @@ jobs: echo "$file was changed" done - name: Run integration tests - if: steps.changed-files.outputs.any_changed == 'true' + if: steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'push' run: pytest -n auto tests/integration/test_code_blocks.py env: - DOCS_ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + DOCS_ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files || '' }} diff --git a/tests/integration/test_code_blocks.py b/tests/integration/test_code_blocks.py index a37e0d086..3a267a529 100644 --- a/tests/integration/test_code_blocks.py +++ b/tests/integration/test_code_blocks.py @@ -5,7 +5,7 @@ from tests.utils.code_blocks import get_all_code_blocks, check_py_string -if "DOCS_ALL_CHANGED_FILES" in os.environ: +if "DOCS_ALL_CHANGED_FILES" in os.environ and os.environ["DOCS_ALL_CHANGED_FILES"] != "": docs_all_changed_files = os.environ["DOCS_ALL_CHANGED_FILES"].split() all_code_blocks = [get_all_code_blocks(changed_file) for changed_file in docs_all_changed_files] From b0606c7cdfd07afd00f76e34463d8b0d60029466 Mon Sep 17 00:00:00 2001 From: dylanholmes <4370153+dylanholmes@users.noreply.github.com> Date: Wed, 22 May 2024 11:02:50 -0700 Subject: [PATCH 054/145] Fix hugging face prompt pipeline driver + docs (#796) --- .../drivers/prompt-drivers.md | 20 +- .../huggingface_pipeline_prompt_driver.py | 1 + poetry.lock | 321 +++++++++++++++++- pyproject.toml | 3 + 4 files changed, 336 insertions(+), 9 deletions(-) diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index ae798b22e..e2b324ee1 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -242,6 +242,15 @@ The [HuggingFaceHubPromptDriver](../../reference/griptape/drivers/prompt/hugging - text2text-generation - text-generation +!!! warning + Not all models featured on the Hugging Face Hub are supported by this driver. Models that are not supported by + [Hugging Face serverless inference](https://huggingface.co/docs/api-inference/en/index) will not work with this driver. + Due to the limitations of Hugging Face serverless inference, only models that are than 10GB are supported. + +!!! info + The `prompt_stack_to_string_converter` function is intended to convert a `PromptStack` to model specific input. You + should consult the model's documentation to determine the correct format. + Let's recreate the [Falcon-7B-Instruct](https://huggingface.co/tiiuae/falcon-7b-instruct) example using Griptape: ```python @@ -319,9 +328,9 @@ agent.run("Write the code for a snake game.") ### Hugging Face Pipeline !!! info - This driver requires the `drivers-prompt-huggingface` [extra](../index.md#extras). + This driver requires the `drivers-prompt-huggingface-pipeline` [extra](../index.md#extras). -The [HuggingFaceHubPromptDriver](../../reference/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.md) uses [Hugging Face Pipelines](https://huggingface.co/docs/transformers/main_classes/pipelines) for inference locally. It supports models with the following tasks: +The [HuggingFacePipelinePromptDriver](../../reference/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.md) uses [Hugging Face Pipelines](https://huggingface.co/docs/transformers/main_classes/pipelines) for inference locally. It supports models with the following tasks: - text2text-generation - text-generation @@ -332,7 +341,7 @@ The [HuggingFaceHubPromptDriver](../../reference/griptape/drivers/prompt/hugging ```python import os from griptape.structures import Agent -from griptape.drivers import HuggingFaceHubPromptDriver +from griptape.drivers import HuggingFacePipelinePromptDriver from griptape.rules import Rule, Ruleset from griptape.utils import PromptStack from griptape.config import StructureConfig @@ -357,9 +366,8 @@ def prompt_stack_to_string_converter(prompt_stack: PromptStack) -> str: agent = Agent( config=StructureConfig( - prompt_driver=HuggingFaceHubPromptDriver( - model="tiiuae/falcon-7b-instruct", - api_token=os.environ["HUGGINGFACE_HUB_ACCESS_TOKEN"], + prompt_driver=HuggingFacePipelinePromptDriver( + model="TinyLlama/TinyLlama-1.1B-Chat-v0.6", prompt_stack_to_string=prompt_stack_to_string_converter, ) ), diff --git a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py index d93a3a10c..9fb8b9ece 100644 --- a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py @@ -21,6 +21,7 @@ class HuggingFacePipelinePromptDriver(BasePromptDriver): SUPPORTED_TASKS = ["text2text-generation", "text-generation"] DEFAULT_PARAMS = {"return_full_text": False, "num_return_sequences": 1} + max_tokens: int = field(default=250, kw_only=True, metadata={"serializable": True}) model: str = field(kw_only=True, metadata={"serializable": True}) params: dict = field(factory=dict, kw_only=True, metadata={"serializable": True}) tokenizer: HuggingFaceTokenizer = field( diff --git a/poetry.lock b/poetry.lock index 02da58de3..c4e2e1024 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1954,6 +1954,20 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] +[[package]] +name = "intel-openmp" +version = "2021.4.0" +description = "Intel OpenMP* Runtime Library" +optional = true +python-versions = "*" +files = [ + {file = "intel_openmp-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:41c01e266a7fdb631a7609191709322da2bbf24b252ba763f125dd651bcc7675"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:3b921236a38384e2016f0f3d65af6732cf2c12918087128a9163225451e776f2"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:e2240ab8d01472fed04f3544a878cda5da16c26232b7ea1b59132dbfb48b186e"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:6e863d8fd3d7e8ef389d52cf97a50fe2afe1a19247e8c0d168ce021546f96fc9"}, + {file = "intel_openmp-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:eef4c8bcc8acefd7f5cd3b9384dbf73d59e2c99fc56545712ded913f43c4a94f"}, +] + [[package]] name = "ipython" version = "8.18.1" @@ -2672,6 +2686,24 @@ files = [ griffe = ">=0.37" mkdocstrings = ">=0.20" +[[package]] +name = "mkl" +version = "2021.4.0" +description = "Intel® oneAPI Math Kernel Library" +optional = true +python-versions = "*" +files = [ + {file = "mkl-2021.4.0-py2.py3-none-macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:67460f5cd7e30e405b54d70d1ed3ca78118370b65f7327d495e9c8847705e2fb"}, + {file = "mkl-2021.4.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:636d07d90e68ccc9630c654d47ce9fdeb036bb46e2b193b3a9ac8cfea683cce5"}, + {file = "mkl-2021.4.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:398dbf2b0d12acaf54117a5210e8f191827f373d362d796091d161f610c1ebfb"}, + {file = "mkl-2021.4.0-py2.py3-none-win32.whl", hash = "sha256:439c640b269a5668134e3dcbcea4350459c4a8bc46469669b2d67e07e3d330e8"}, + {file = "mkl-2021.4.0-py2.py3-none-win_amd64.whl", hash = "sha256:ceef3cafce4c009dd25f65d7ad0d833a0fbadc3d8903991ec92351fe5de1e718"}, +] + +[package.dependencies] +intel-openmp = "==2021.*" +tbb = "==2021.*" + [[package]] name = "mongomock" version = "4.1.2" @@ -2745,6 +2777,23 @@ server = ["PyYAML (>=5.1)", "aws-xray-sdk (>=0.93,!=0.96)", "cfn-lint (>=0.40.0) ssm = ["PyYAML (>=5.1)"] xray = ["aws-xray-sdk (>=0.93,!=0.96)", "setuptools"] +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = true +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + [[package]] name = "multidict" version = "6.0.5" @@ -2914,6 +2963,24 @@ files = [ [package.dependencies] typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.12\""} +[[package]] +name = "networkx" +version = "3.2.1" +description = "Python package for creating and manipulating graphs and networks" +optional = true +python-versions = ">=3.9" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + [[package]] name = "nh3" version = "0.2.17" @@ -2998,6 +3065,148 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "nvidia-cublas-cu12" +version = "12.1.3.1" +description = "CUBLAS native runtime libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, + {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.1.105" +description = "CUDA profiling tools runtime libs." +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, + {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.1.105" +description = "NVRTC native runtime libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, + {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.1.105" +description = "CUDA Runtime native Libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, + {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "8.9.2.26" +description = "cuDNN runtime libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl", hash = "sha256:5ccb288774fdfb07a7e7025ffec286971c06d8d7b4fb162525334616d7629ff9"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.0.2.54" +description = "CUFFT native runtime libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, + {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, +] + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.2.106" +description = "CURAND native runtime libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, + {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.4.5.107" +description = "CUDA solver native runtime libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, + {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" +nvidia-cusparse-cu12 = "*" +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.1.0.106" +description = "CUSPARSE native runtime libraries" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, + {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, +] + +[package.dependencies] +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.20.5" +description = "NVIDIA Collective Communication Library (NCCL) Runtime" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"}, + {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"}, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.4.127" +description = "Nvidia JIT LTO Library" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, + {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.1.105" +description = "NVIDIA Tools Extension" +optional = true +python-versions = ">=3" +files = [ + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, + {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, +] + [[package]] name = "openai" version = "1.30.1" @@ -4027,6 +4236,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4869,6 +5079,33 @@ files = [ {file = "stringcase-1.2.0.tar.gz", hash = "sha256:48a06980661908efe8d9d34eab2b6c13aefa2163b3ced26972902e3bdfd87008"}, ] +[[package]] +name = "sympy" +version = "1.12" +description = "Computer algebra system (CAS) in Python" +optional = true +python-versions = ">=3.8" +files = [ + {file = "sympy-1.12-py3-none-any.whl", hash = "sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5"}, + {file = "sympy-1.12.tar.gz", hash = "sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8"}, +] + +[package.dependencies] +mpmath = ">=0.19" + +[[package]] +name = "tbb" +version = "2021.12.0" +description = "Intel® oneAPI Threading Building Blocks (oneTBB)" +optional = true +python-versions = "*" +files = [ + {file = "tbb-2021.12.0-py2.py3-none-manylinux1_i686.whl", hash = "sha256:f2cc9a7f8ababaa506cbff796ce97c3bf91062ba521e15054394f773375d81d8"}, + {file = "tbb-2021.12.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:a925e9a7c77d3a46ae31c34b0bb7f801c4118e857d137b68f68a8e458fcf2bd7"}, + {file = "tbb-2021.12.0-py3-none-win32.whl", hash = "sha256:b1725b30c174048edc8be70bd43bb95473f396ce895d91151a474d0fa9f450a8"}, + {file = "tbb-2021.12.0-py3-none-win_amd64.whl", hash = "sha256:fc2772d850229f2f3df85f1109c4844c495a2db7433d38200959ee9265b34789"}, +] + [[package]] name = "tenacity" version = "8.3.0" @@ -5086,6 +5323,60 @@ files = [ {file = "tomlkit-0.12.5.tar.gz", hash = "sha256:eef34fba39834d4d6b73c9ba7f3e4d1c417a4e56f89a7e96e090dd0d24b8fb3c"}, ] +[[package]] +name = "torch" +version = "2.3.0" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +optional = true +python-versions = ">=3.8.0" +files = [ + {file = "torch-2.3.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:d8ea5a465dbfd8501f33c937d1f693176c9aef9d1c1b0ca1d44ed7b0a18c52ac"}, + {file = "torch-2.3.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:09c81c5859a5b819956c6925a405ef1cdda393c9d8a01ce3851453f699d3358c"}, + {file = "torch-2.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:1bf023aa20902586f614f7682fedfa463e773e26c58820b74158a72470259459"}, + {file = "torch-2.3.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:758ef938de87a2653bba74b91f703458c15569f1562bf4b6c63c62d9c5a0c1f5"}, + {file = "torch-2.3.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:493d54ee2f9df100b5ce1d18c96dbb8d14908721f76351e908c9d2622773a788"}, + {file = "torch-2.3.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:bce43af735c3da16cc14c7de2be7ad038e2fbf75654c2e274e575c6c05772ace"}, + {file = "torch-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:729804e97b7cf19ae9ab4181f91f5e612af07956f35c8b2c8e9d9f3596a8e877"}, + {file = "torch-2.3.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:d24e328226d8e2af7cf80fcb1d2f1d108e0de32777fab4aaa2b37b9765d8be73"}, + {file = "torch-2.3.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:b0de2bdc0486ea7b14fc47ff805172df44e421a7318b7c4d92ef589a75d27410"}, + {file = "torch-2.3.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a306c87a3eead1ed47457822c01dfbd459fe2920f2d38cbdf90de18f23f72542"}, + {file = "torch-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9b98bf1a3c8af2d4c41f0bf1433920900896c446d1ddc128290ff146d1eb4bd"}, + {file = "torch-2.3.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:dca986214267b34065a79000cee54232e62b41dff1ec2cab9abc3fc8b3dee0ad"}, + {file = "torch-2.3.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:20572f426965dd8a04e92a473d7e445fa579e09943cc0354f3e6fef6130ce061"}, + {file = "torch-2.3.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e65ba85ae292909cde0dde6369826d51165a3fc8823dc1854cd9432d7f79b932"}, + {file = "torch-2.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:5515503a193781fd1b3f5c474e89c9dfa2faaa782b2795cc4a7ab7e67de923f6"}, + {file = "torch-2.3.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6ae9f64b09516baa4ef890af0672dc981c20b1f0d829ce115d4420a247e88fba"}, + {file = "torch-2.3.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cd0dc498b961ab19cb3f8dbf0c6c50e244f2f37dbfa05754ab44ea057c944ef9"}, + {file = "torch-2.3.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:e05f836559251e4096f3786ee99f4a8cbe67bc7fbedba8ad5e799681e47c5e80"}, + {file = "torch-2.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:4fb27b35dbb32303c2927da86e27b54a92209ddfb7234afb1949ea2b3effffea"}, + {file = "torch-2.3.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:760f8bedff506ce9e6e103498f9b1e9e15809e008368594c3a66bf74a8a51380"}, +] + +[package.dependencies] +filelock = "*" +fsspec = "*" +jinja2 = "*" +mkl = {version = ">=2021.1.1,<=2021.4.0", markers = "platform_system == \"Windows\""} +networkx = "*" +nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cudnn-cu12 = {version = "8.9.2.26", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +sympy = "*" +triton = {version = "2.3.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} +typing-extensions = ">=4.8.0" + +[package.extras] +opt-einsum = ["opt-einsum (>=3.3)"] +optree = ["optree (>=0.9.1)"] + [[package]] name = "tqdm" version = "4.66.4" @@ -5213,6 +5504,29 @@ torchhub = ["filelock", "huggingface-hub (>=0.19.3,<1.0)", "importlib-metadata", video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] +[[package]] +name = "triton" +version = "2.3.0" +description = "A language and compiler for custom Deep Learning operations" +optional = true +python-versions = "*" +files = [ + {file = "triton-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ce4b8ff70c48e47274c66f269cce8861cf1dc347ceeb7a67414ca151b1822d8"}, + {file = "triton-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c3d9607f85103afdb279938fc1dd2a66e4f5999a58eb48a346bd42738f986dd"}, + {file = "triton-2.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:218d742e67480d9581bafb73ed598416cc8a56f6316152e5562ee65e33de01c0"}, + {file = "triton-2.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381ec6b3dac06922d3e4099cfc943ef032893b25415de295e82b1a82b0359d2c"}, + {file = "triton-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038e06a09c06a164fef9c48de3af1e13a63dc1ba3c792871e61a8e79720ea440"}, + {file = "triton-2.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8f636e0341ac348899a47a057c3daea99ea7db31528a225a3ba4ded28ccc65"}, +] + +[package.dependencies] +filelock = "*" + +[package.extras] +build = ["cmake (>=3.20)", "lit"] +tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"] +tutorials = ["matplotlib", "pandas", "tabulate", "torch"] + [[package]] name = "twine" version = "5.0.0" @@ -5671,7 +5985,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "trafilatura", "transformers", "voyageai"] +all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-google = ["google-generativeai"] @@ -5687,6 +6001,7 @@ drivers-prompt-anthropic = ["anthropic"] drivers-prompt-cohere = ["cohere"] drivers-prompt-google = ["google-generativeai"] drivers-prompt-huggingface = ["huggingface-hub", "transformers"] +drivers-prompt-huggingface-pipeline = ["huggingface-hub", "torch", "transformers"] drivers-sql-postgres = ["pgvector", "psycopg2-binary"] drivers-sql-redshift = ["boto3", "sqlalchemy-redshift"] drivers-sql-snowflake = ["snowflake-sqlalchemy"] @@ -5707,4 +6022,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "7e866d7a5968b9e5a5c166be3cf667488d00d03d412deabe29090a9f6d1ab83d" +content-hash = "2590fc0528b584775d753939abbde032c34055a92db2538385002b9808d1fa31" diff --git a/pyproject.toml b/pyproject.toml index 9206f23c9..5ca064399 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,6 +52,7 @@ beautifulsoup4 = {version = "^4.12.3", optional = true} markdownify = {version = "^0.11.6", optional = true} voyageai = {version = "^0.2.1", optional = true} elevenlabs = {version = "^1.1.2", optional = true} +torch = {version = "^2.3.0", optional = true} # loaders pandas = {version = "^1.3", optional = true} @@ -63,6 +64,7 @@ mail-parser = {version = "^3.15.0", optional = true} drivers-prompt-cohere = ["cohere"] drivers-prompt-anthropic = ["anthropic"] drivers-prompt-huggingface = ["huggingface-hub", "transformers"] +drivers-prompt-huggingface-pipeline = ["huggingface-hub", "transformers", "torch"] drivers-prompt-amazon-bedrock = ["boto3", "anthropic"] drivers-prompt-amazon-sagemaker = ["boto3", "transformers"] drivers-prompt-google = ["google-generativeai"] @@ -123,6 +125,7 @@ all = [ "markdownify", "voyageai", "elevenlabs", + "torch", # loaders "pandas", From f7bf18048b9e23ec7236f35a04acfb3d6d60fe7d Mon Sep 17 00:00:00 2001 From: Andrew French Date: Wed, 22 May 2024 14:27:06 -0700 Subject: [PATCH 055/145] Makefile target for big install command (#797) --- Makefile | 4 ++++ README.md | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 70378dd38..c6374c380 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,10 @@ publish: ## Push git tag and publish version to PyPI. @poetry build @poetry publish +.PHONY: install +install: ## Install all dependencies. + @poetry install --with dev --with test --with docs --all-extras + .DEFAULT_GOAL := help .PHONY: help help: ## Print Makefile help text. diff --git a/README.md b/README.md index 405f729e3..2f57670ee 100644 --- a/README.md +++ b/README.md @@ -184,10 +184,16 @@ We welcome and encourage pull requests. To streamline the process, please follow ### Tools -Install dev dependencies with Poetry: +Install dev dependencies via Make: ```shell -poetry install --all-extras --with dev --with test +make install +``` + +Or install by calling Poetry directly: + +```shell +poetry install --all-extras --with dev --with test --with docs ``` Configure pre-commit to ensure that your code is formatted correctly and passes all checks: From 157186afa89061682ff696107159aff6ec20fa85 Mon Sep 17 00:00:00 2001 From: Andrew French Date: Thu, 23 May 2024 08:40:50 -0700 Subject: [PATCH 056/145] Update Makefile + process-as-code (#799) --- .github/workflows/code-checks.yml | 8 ++--- .github/workflows/docs-integration-tests.yml | 2 +- .github/workflows/unit-tests.yml | 2 +- .pre-commit-config.yaml | 7 ++-- Makefile | 38 ++++++++++++++++++++ 5 files changed, 47 insertions(+), 10 deletions(-) diff --git a/.github/workflows/code-checks.yml b/.github/workflows/code-checks.yml index 16c9b58b4..56cbe717f 100644 --- a/.github/workflows/code-checks.yml +++ b/.github/workflows/code-checks.yml @@ -19,7 +19,7 @@ jobs: - name: Init environment uses: ./.github/actions/init-environment - name: Run formatter - run: poetry run ruff format --check . + run: make check/format type-check: runs-on: ubuntu-latest strategy: @@ -32,7 +32,7 @@ jobs: - name: Init environment uses: ./.github/actions/init-environment - name: Run type checker - run: poetry run pyright griptape/ + run: make check/types lint: runs-on: ubuntu-latest strategy: @@ -45,7 +45,7 @@ jobs: - name: Init environment uses: ./.github/actions/init-environment - name: Run linter - run: poetry run ruff check griptape/ + run: make check/lint coverage: runs-on: ubuntu-latest strategy: @@ -58,7 +58,7 @@ jobs: - name: Init environment uses: ./.github/actions/init-environment - name: Run unit tests - run: pytest -n auto --cov=griptape tests/unit + run: make test/unit/coverage - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index ed2720917..08c600fb0 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -142,6 +142,6 @@ jobs: done - name: Run integration tests if: steps.changed-files.outputs.any_changed == 'true' || github.event_name == 'push' - run: pytest -n auto tests/integration/test_code_blocks.py + run: make test/integration env: DOCS_ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files || '' }} diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 8c8b4cc56..e7bb5689b 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -19,4 +19,4 @@ jobs: - name: Init environment uses: ./.github/actions/init-environment - name: Run unit tests - run: pytest -n auto tests/unit + run: make test/unit diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 69209ba17..a54182464 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,21 +8,20 @@ repos: hooks: - id: ruff-lint name: Ruff - entry: poetry run ruff check - args: [--fix] + entry: make lint language: system types: [python] - repo: local hooks: - id: ruff-format name: Ruff - entry: poetry run ruff format + entry: make format language: system types: [python] - repo: local hooks: - id: pyright name: Pyright - entry: poetry run pyright + entry: make check/types language: system types: [python] diff --git a/Makefile b/Makefile index c6374c380..61d91e6a1 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,44 @@ publish: ## Push git tag and publish version to PyPI. install: ## Install all dependencies. @poetry install --with dev --with test --with docs --all-extras +.PHONY: test +test: test/unit test/integration ## Run all tests. + +.PHONY: test/unit +test/unit: ## Run unit tests. + @poetry run pytest -n auto tests/unit + +.PHONY: test/unit/coverage +test/unit/coverage: + @poetry run pytest -n auto --cov=griptape tests/unit + +.PHONY: test/integration +test/integration: + @poetry run pytest -n auto tests/integration/test_code_blocks.py + +.PHONY: lint +lint: ## Lint project. + @poetry run ruff check --fix griptape/ + +.PHONY: format +format: ## Format project. + @poetry run ruff format . + +.PHONY: check +check: check/format check/lint check/types ## Run all checks. + +.PHONY: check/format +check/format: + @poetry run ruff format --check griptape/ + +.PHONY: check/lint +check/lint: + @poetry run ruff check griptape/ + +.PHONY: check/types +check/types: + @poetry run pyright griptape/ + .DEFAULT_GOAL := help .PHONY: help help: ## Print Makefile help text. From 74706844048b039d56c620beebcd2131c0c7e74b Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 23 May 2024 10:09:32 -0700 Subject: [PATCH 057/145] Set concurrency for actions (#801) --- .github/workflows/code-checks.yml | 4 ++++ .github/workflows/docs-integration-tests.yml | 5 +++++ .github/workflows/pull-request-links.yml | 4 ++++ .github/workflows/unit-tests.yml | 4 ++++ 4 files changed, 17 insertions(+) diff --git a/.github/workflows/code-checks.yml b/.github/workflows/code-checks.yml index 56cbe717f..03b1f0a17 100644 --- a/.github/workflows/code-checks.yml +++ b/.github/workflows/code-checks.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [ "main", "dev" ] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: format: runs-on: ubuntu-latest diff --git a/.github/workflows/docs-integration-tests.yml b/.github/workflows/docs-integration-tests.yml index 08c600fb0..eb3621870 100644 --- a/.github/workflows/docs-integration-tests.yml +++ b/.github/workflows/docs-integration-tests.yml @@ -7,6 +7,11 @@ on: branches: - main - dev + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: test: if: github.event.review.state == 'APPROVED' || github.event_name == 'push' diff --git a/.github/workflows/pull-request-links.yml b/.github/workflows/pull-request-links.yml index 0d937ac94..36a8d51a4 100644 --- a/.github/workflows/pull-request-links.yml +++ b/.github/workflows/pull-request-links.yml @@ -6,6 +6,10 @@ on: paths: - "docs/**" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + permissions: pull-requests: write diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index e7bb5689b..d24a0d541 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [ "main", "dev" ] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: test: runs-on: ubuntu-latest From 04af7d1df7c4cfb45bf3f42ce0808a491843d5ae Mon Sep 17 00:00:00 2001 From: Andrew French Date: Thu, 23 May 2024 13:58:52 -0700 Subject: [PATCH 058/145] Update OpenAI image query default model to GPT-4o (#802) --- CHANGELOG.md | 2 ++ .../drivers/image-query-drivers.md | 22 +++++++++---------- .../engines/image-query-engines.md | 8 +++---- docs/griptape-framework/structures/config.md | 2 +- docs/griptape-framework/structures/tasks.md | 7 +++--- .../official-tools/image-query-client.md | 10 ++++----- .../config/azure_openai_structure_config.py | 8 +++---- griptape/config/openai_structure_config.py | 6 ++--- griptape/drivers/__init__.py | 8 +++---- ....py => azure_openai_image_query_driver.py} | 4 ++-- ...driver.py => openai_image_query_driver.py} | 2 +- .../test_azure_openai_structure_config.py | 10 ++++----- .../config/test_openai_structure_config.py | 4 ++-- .../test_azure_openai_image_query_driver.py | 14 +++++------- .../test_openai_image_query_driver.py | 10 ++++----- 15 files changed, 57 insertions(+), 60 deletions(-) rename griptape/drivers/image_query/{azure_openai_vision_image_query_driver.py => azure_openai_image_query_driver.py} (90%) rename griptape/drivers/image_query/{openai_vision_image_query_driver.py => openai_image_query_driver.py} (97%) diff --git a/CHANGELOG.md b/CHANGELOG.md index aaa95e7a5..99a15137e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Default the value of `azure_deployment` on all Azure Drivers to the model the Driver is using. - Field `azure_ad_token` on all Azure Drivers is no longer serializable. +- Default standard OpenAI and Azure OpenAI image query model to `gpt-4o`. +- **BREAKING**: Updated OpenAI-based image query drivers to remove Vision from the name. ## [0.25.1] - 2024-05-15 diff --git a/docs/griptape-framework/drivers/image-query-drivers.md b/docs/griptape-framework/drivers/image-query-drivers.md index 7538496b1..d795838d4 100644 --- a/docs/griptape-framework/drivers/image-query-drivers.md +++ b/docs/griptape-framework/drivers/image-query-drivers.md @@ -64,15 +64,15 @@ print(result) !!! info While the `max_tokens` field is optional, it is recommended to set this to a value that corresponds to the desired response length. Without an explicit value, the model will default to very short responses. See [OpenAI's documentation](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information on how to relate token count to response length. -The [OpenAiVisionImageQueryDriver](../../reference/griptape/drivers/image_query/openai_vision_image_query_driver.md) is used to query images using the OpenAI Vision API. Here is an example of how to use it: +The [OpenAiVisionImageQueryDriver](../../reference/griptape/drivers/image_query/openai_image_query_driver.md) is used to query images using the OpenAI Vision API. Here is an example of how to use it: ```python -from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.drivers import OpenAiImageQueryDriver from griptape.engines import ImageQueryEngine from griptape.loaders import ImageLoader -driver = OpenAiVisionImageQueryDriver( - model="gpt-4-vision-preview", +driver = OpenAiImageQueryDriver( + model="gpt-4o", max_tokens=256, ) @@ -91,19 +91,19 @@ engine.run("Describe the weather in the image", [image_artifact]) !!! info In order to use the `gpt-4-vision-preview` model on Azure OpenAI, the `gpt-4` model must be deployed with the version set to `vision-preview`. More information can be found in the [Azure OpenAI documentation](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/gpt-with-vision). -The [AzureOpenAiVisionImageQueryDriver](../../reference/griptape/drivers/image_query/azure_openai_vision_image_query_driver.md) is used to query images using the Azure OpenAI Vision API. Here is an example of how to use it: +The [AzureOpenAiVisionImageQueryDriver](../../reference/griptape/drivers/image_query/azure_openai_image_query_driver.md) is used to query images using the Azure OpenAI Vision API. Here is an example of how to use it: ```python import os -from griptape.drivers import AzureOpenAiVisionImageQueryDriver +from griptape.drivers import AzureOpenAiImageQueryDriver from griptape.engines import ImageQueryEngine from griptape.loaders import ImageLoader -driver = AzureOpenAiVisionImageQueryDriver( - azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_3"], - api_key=os.environ["AZURE_OPENAI_API_KEY_3"], - model="gpt-4", - azure_deployment="gpt-4-vision-preview", +driver = AzureOpenAiImageQueryDriver( + azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT_2"], + api_key=os.environ["AZURE_OPENAI_API_KEY_2"], + model="gpt-4o", + azure_deployment="gpt-4o", max_tokens=256, ) diff --git a/docs/griptape-framework/engines/image-query-engines.md b/docs/griptape-framework/engines/image-query-engines.md index a0b9309d8..0457657f8 100644 --- a/docs/griptape-framework/engines/image-query-engines.md +++ b/docs/griptape-framework/engines/image-query-engines.md @@ -2,15 +2,15 @@ The [Image Query Engine](../../reference/griptape/engines/image_query/image_query_engine.md) is used to execute natural language queries on the contents of images. You can specify the provider and model used to query the image by providing the Engine with a particular [Image Query Driver](../drivers/image-query-drivers.md). -All Image Query Drivers default to a `max_tokens` of 256. You can tune this value based on your use case and the [Image Query Driver](../drivers/image-query-drivers.md) you are providing. +All Image Query Drivers default to a `max_tokens` of 256. You can tune this value based on your use case and the [Image Query Driver](../drivers/image-query-drivers.md) you are providing. ```python -from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.drivers import OpenAiImageQueryDriver from griptape.engines import ImageQueryEngine from griptape.loaders import ImageLoader -driver = OpenAiVisionImageQueryDriver( - model="gpt-4-vision-preview", +driver = OpenAiImageQueryDriver( + model="gpt-4o", max_tokens=256 ) diff --git a/docs/griptape-framework/structures/config.md b/docs/griptape-framework/structures/config.md index 374468639..9637eaf35 100644 --- a/docs/griptape-framework/structures/config.md +++ b/docs/griptape-framework/structures/config.md @@ -38,7 +38,7 @@ agent = Agent( api_key=os.environ["AZURE_OPENAI_API_KEY_3"] ).merge_config({ "image_query_driver": { - "azure_deployment": "gpt-4-vision-preview", + "azure_deployment": "gpt-4o", }, }), ) diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index c7f9e78cd..683648cef 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -633,15 +633,14 @@ This Task accepts two inputs: a query (represented by either a string or a [Text ```python from griptape.engines import ImageQueryEngine -from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.drivers import OpenAiImageQueryDriver from griptape.tasks import ImageQueryTask from griptape.loaders import ImageLoader from griptape.structures import Pipeline - # Create a driver configured to use OpenAI's GPT-4 Vision model. -driver = OpenAiVisionImageQueryDriver( - model="gpt-4-vision-preview", +driver = OpenAiImageQueryDriver( + model="gpt-4o", max_tokens=100, ) diff --git a/docs/griptape-tools/official-tools/image-query-client.md b/docs/griptape-tools/official-tools/image-query-client.md index fb5dcca33..8da058d3e 100644 --- a/docs/griptape-tools/official-tools/image-query-client.md +++ b/docs/griptape-tools/official-tools/image-query-client.md @@ -5,14 +5,14 @@ This tool allows Agents to execute natural language queries on the contents of i ```python from griptape.structures import Agent from griptape.tools import ImageQueryClient -from griptape.drivers import OpenAiVisionImageQueryDriver -from griptape.engines import ImageQueryEngine +from griptape.drivers import OpenAiImageQueryDriver +from griptape.engines import ImageQueryEngine # Create an Image Query Driver. -driver = OpenAiVisionImageQueryDriver( - model="gpt-4-vision-preview" +driver = OpenAiImageQueryDriver( + model="gpt-4o" ) - + # Create an Image Query Engine configured to use the driver. engine = ImageQueryEngine( image_query_driver=driver, diff --git a/griptape/config/azure_openai_structure_config.py b/griptape/config/azure_openai_structure_config.py index 8c7ce82d3..3aee53f32 100644 --- a/griptape/config/azure_openai_structure_config.py +++ b/griptape/config/azure_openai_structure_config.py @@ -7,7 +7,7 @@ AzureOpenAiChatPromptDriver, AzureOpenAiEmbeddingDriver, AzureOpenAiImageGenerationDriver, - AzureOpenAiVisionImageQueryDriver, + AzureOpenAiImageQueryDriver, BasePromptDriver, BaseEmbeddingDriver, BaseImageGenerationDriver, @@ -41,7 +41,7 @@ class AzureOpenAiStructureConfig(StructureConfig): prompt_driver: BasePromptDriver = field( default=Factory( lambda self: AzureOpenAiChatPromptDriver( - model="gpt-4", + model="gpt-4o", azure_endpoint=self.azure_endpoint, api_key=self.api_key, azure_ad_token=self.azure_ad_token, @@ -69,8 +69,8 @@ class AzureOpenAiStructureConfig(StructureConfig): ) image_query_driver: BaseImageQueryDriver = field( default=Factory( - lambda self: AzureOpenAiVisionImageQueryDriver( - model="gpt-4", + lambda self: AzureOpenAiImageQueryDriver( + model="gpt-4o", azure_endpoint=self.azure_endpoint, api_key=self.api_key, azure_ad_token=self.azure_ad_token, diff --git a/griptape/config/openai_structure_config.py b/griptape/config/openai_structure_config.py index 5b2e163ba..459160b11 100644 --- a/griptape/config/openai_structure_config.py +++ b/griptape/config/openai_structure_config.py @@ -11,7 +11,7 @@ OpenAiChatPromptDriver, OpenAiEmbeddingDriver, OpenAiImageGenerationDriver, - OpenAiVisionImageQueryDriver, + OpenAiImageQueryDriver, ) @@ -26,9 +26,7 @@ class OpenAiStructureConfig(StructureConfig): metadata={"serializable": True}, ) image_query_driver: BaseImageQueryDriver = field( - default=Factory(lambda: OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview")), - kw_only=True, - metadata={"serializable": True}, + default=Factory(lambda: OpenAiImageQueryDriver(model="gpt-4o")), kw_only=True, metadata={"serializable": True} ) embedding_driver: BaseEmbeddingDriver = field( default=Factory(lambda: OpenAiEmbeddingDriver(model="text-embedding-3-small")), diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 1d76ba30d..6043b0b43 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -79,9 +79,9 @@ from .image_query.base_image_query_driver import BaseImageQueryDriver from .image_query.base_multi_model_image_query_driver import BaseMultiModelImageQueryDriver from .image_query.dummy_image_query_driver import DummyImageQueryDriver -from .image_query.openai_vision_image_query_driver import OpenAiVisionImageQueryDriver +from .image_query.openai_image_query_driver import OpenAiImageQueryDriver from .image_query.anthropic_image_query_driver import AnthropicImageQueryDriver -from .image_query.azure_openai_vision_image_query_driver import AzureOpenAiVisionImageQueryDriver +from .image_query.azure_openai_image_query_driver import AzureOpenAiImageQueryDriver from .image_query.amazon_bedrock_image_query_driver import AmazonBedrockImageQueryDriver from .web_scraper.base_web_scraper_driver import BaseWebScraperDriver @@ -175,8 +175,8 @@ "BaseImageQueryModelDriver", "BedrockClaudeImageQueryModelDriver", "BaseImageQueryDriver", - "OpenAiVisionImageQueryDriver", - "AzureOpenAiVisionImageQueryDriver", + "OpenAiImageQueryDriver", + "AzureOpenAiImageQueryDriver", "DummyImageQueryDriver", "AnthropicImageQueryDriver", "BaseMultiModelImageQueryDriver", diff --git a/griptape/drivers/image_query/azure_openai_vision_image_query_driver.py b/griptape/drivers/image_query/azure_openai_image_query_driver.py similarity index 90% rename from griptape/drivers/image_query/azure_openai_vision_image_query_driver.py rename to griptape/drivers/image_query/azure_openai_image_query_driver.py index 06b329c03..017c98f1f 100644 --- a/griptape/drivers/image_query/azure_openai_vision_image_query_driver.py +++ b/griptape/drivers/image_query/azure_openai_image_query_driver.py @@ -4,11 +4,11 @@ from attr import define, field, Factory import openai -from griptape.drivers.image_query.openai_vision_image_query_driver import OpenAiVisionImageQueryDriver +from griptape.drivers.image_query.openai_image_query_driver import OpenAiImageQueryDriver @define -class AzureOpenAiVisionImageQueryDriver(OpenAiVisionImageQueryDriver): +class AzureOpenAiImageQueryDriver(OpenAiImageQueryDriver): """Driver for Azure-hosted OpenAI image query API. Attributes: diff --git a/griptape/drivers/image_query/openai_vision_image_query_driver.py b/griptape/drivers/image_query/openai_image_query_driver.py similarity index 97% rename from griptape/drivers/image_query/openai_vision_image_query_driver.py rename to griptape/drivers/image_query/openai_image_query_driver.py index c37cebba9..515bdcc7c 100644 --- a/griptape/drivers/image_query/openai_vision_image_query_driver.py +++ b/griptape/drivers/image_query/openai_image_query_driver.py @@ -16,7 +16,7 @@ @define -class OpenAiVisionImageQueryDriver(BaseImageQueryDriver): +class OpenAiImageQueryDriver(BaseImageQueryDriver): model: str = field(kw_only=True, metadata={"serializable": True}) api_type: str = field(default=openai.api_type, kw_only=True) api_version: Optional[str] = field(default=openai.api_version, kw_only=True, metadata={"serializable": True}) diff --git a/tests/unit/config/test_azure_openai_structure_config.py b/tests/unit/config/test_azure_openai_structure_config.py index acec4526a..dd5cd56a7 100644 --- a/tests/unit/config/test_azure_openai_structure_config.py +++ b/tests/unit/config/test_azure_openai_structure_config.py @@ -22,8 +22,8 @@ def test_to_dict(self, config): "prompt_driver": { "type": "AzureOpenAiChatPromptDriver", "base_url": None, - "model": "gpt-4", - "azure_deployment": "gpt-4", + "model": "gpt-4o", + "azure_deployment": "gpt-4o", "azure_endpoint": "http://localhost:8080", "api_version": "2023-05-15", "organization": None, @@ -62,12 +62,12 @@ def test_to_dict(self, config): "base_url": None, "image_quality": "auto", "max_tokens": 256, - "model": "gpt-4", + "model": "gpt-4o", "api_version": "2024-02-01", - "azure_deployment": "gpt-4", + "azure_deployment": "gpt-4o", "azure_endpoint": "http://localhost:8080", "organization": None, - "type": "AzureOpenAiVisionImageQueryDriver", + "type": "AzureOpenAiImageQueryDriver", }, "vector_store_driver": { "embedding_driver": { diff --git a/tests/unit/config/test_openai_structure_config.py b/tests/unit/config/test_openai_structure_config.py index bd8db27cd..efcac008e 100644 --- a/tests/unit/config/test_openai_structure_config.py +++ b/tests/unit/config/test_openai_structure_config.py @@ -50,9 +50,9 @@ def test_to_dict(self, config): "base_url": None, "image_quality": "auto", "max_tokens": 256, - "model": "gpt-4-vision-preview", + "model": "gpt-4o", "organization": None, - "type": "OpenAiVisionImageQueryDriver", + "type": "OpenAiImageQueryDriver", }, "vector_store_driver": { "embedding_driver": { diff --git a/tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py b/tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py index d3a34fe44..a44319861 100644 --- a/tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py +++ b/tests/unit/drivers/image_query/test_azure_openai_image_query_driver.py @@ -1,6 +1,6 @@ import pytest from unittest.mock import Mock -from griptape.drivers import AzureOpenAiVisionImageQueryDriver +from griptape.drivers import AzureOpenAiImageQueryDriver from griptape.artifacts import ImageArtifact @@ -13,15 +13,13 @@ def mock_completion_create(self, mocker): return mock_chat_create def test_init(self): - assert AzureOpenAiVisionImageQueryDriver( + assert AzureOpenAiImageQueryDriver( azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4" ) - assert ( - AzureOpenAiVisionImageQueryDriver(azure_endpoint="test-endpoint", model="gpt-4").azure_deployment == "gpt-4" - ) + assert AzureOpenAiImageQueryDriver(azure_endpoint="test-endpoint", model="gpt-4").azure_deployment == "gpt-4" def test_try_query_defaults(self, mock_completion_create): - driver = AzureOpenAiVisionImageQueryDriver( + driver = AzureOpenAiImageQueryDriver( azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4" ) test_prompt_string = "Prompt String" @@ -36,7 +34,7 @@ def test_try_query_defaults(self, mock_completion_create): assert text_artifact.value == "expected_output_text" def test_try_query_max_tokens(self, mock_completion_create): - driver = AzureOpenAiVisionImageQueryDriver( + driver = AzureOpenAiImageQueryDriver( azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4", max_tokens=1024 ) test_prompt_string = "Prompt String" @@ -50,7 +48,7 @@ def test_try_query_max_tokens(self, mock_completion_create): def test_try_query_multiple_choices(self, mock_completion_create): mock_completion_create.return_value.choices.append(Mock(message=Mock(content="expected_output_text2"))) - driver = AzureOpenAiVisionImageQueryDriver( + driver = AzureOpenAiImageQueryDriver( azure_endpoint="test-endpoint", azure_deployment="test-deployment", model="gpt-4" ) diff --git a/tests/unit/drivers/image_query/test_openai_image_query_driver.py b/tests/unit/drivers/image_query/test_openai_image_query_driver.py index d6ce8550b..08f0c70c9 100644 --- a/tests/unit/drivers/image_query/test_openai_image_query_driver.py +++ b/tests/unit/drivers/image_query/test_openai_image_query_driver.py @@ -1,6 +1,6 @@ import pytest from unittest.mock import Mock -from griptape.drivers import OpenAiVisionImageQueryDriver +from griptape.drivers import OpenAiImageQueryDriver from griptape.artifacts import ImageArtifact @@ -13,10 +13,10 @@ def mock_completion_create(self, mocker): return mock_chat_create def test_init(self): - assert OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview") + assert OpenAiImageQueryDriver(model="gpt-4-vision-preview") def test_try_query_defaults(self, mock_completion_create): - driver = OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview") + driver = OpenAiImageQueryDriver(model="gpt-4-vision-preview") test_prompt_string = "Prompt String" test_binary_data = b"test-data" test_image = ImageArtifact(value=test_binary_data, width=100, height=100, format="png") @@ -29,7 +29,7 @@ def test_try_query_defaults(self, mock_completion_create): assert text_artifact.value == "expected_output_text" def test_try_query_max_tokens(self, mock_completion_create): - driver = OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview", max_tokens=1024) + driver = OpenAiImageQueryDriver(model="gpt-4-vision-preview", max_tokens=1024) test_prompt_string = "Prompt String" test_binary_data = b"test-data" test_image = ImageArtifact(value=test_binary_data, width=100, height=100, format="png") @@ -41,7 +41,7 @@ def test_try_query_max_tokens(self, mock_completion_create): def test_try_query_multiple_choices(self, mock_completion_create): mock_completion_create.return_value.choices.append(Mock(message=Mock(content="expected_output_text2"))) - driver = OpenAiVisionImageQueryDriver(model="gpt-4-vision-preview") + driver = OpenAiImageQueryDriver(model="gpt-4-vision-preview") with pytest.raises(Exception): driver.try_query("Prompt String", [ImageArtifact(value=b"test-data", width=100, height=100, format="png")]) From 2e030bb105a00e9b3d8c1a2a0a56cb86849beafe Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Thu, 23 May 2024 14:50:59 -0700 Subject: [PATCH 059/145] Fix/docs extras (#803) --- CHANGELOG.md | 3 ++- docs/griptape-framework/drivers/web-scraper-drivers.md | 3 +++ griptape/utils/import_utils.py | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99a15137e..fb2e5636a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,10 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `AzureOpenAiVisionImageQueryDriver` to support queries on images using Azure's OpenAI Vision models. ### Changed +- **BREAKING**: Updated OpenAI-based image query drivers to remove Vision from the name. - Default the value of `azure_deployment` on all Azure Drivers to the model the Driver is using. - Field `azure_ad_token` on all Azure Drivers is no longer serializable. - Default standard OpenAI and Azure OpenAI image query model to `gpt-4o`. -- **BREAKING**: Updated OpenAI-based image query drivers to remove Vision from the name. +- Error message to be more helpful when importing optional dependencies. ## [0.25.1] - 2024-05-15 diff --git a/docs/griptape-framework/drivers/web-scraper-drivers.md b/docs/griptape-framework/drivers/web-scraper-drivers.md index e1a3f53b3..888605b73 100644 --- a/docs/griptape-framework/drivers/web-scraper-drivers.md +++ b/docs/griptape-framework/drivers/web-scraper-drivers.md @@ -66,6 +66,9 @@ agent.run("List all email addresses on griptape.ai in a flat numbered markdown l ## Trafilatura Web Scraper Driver +!!! info + This driver requires the `drivers-web-scraper-trafilatura` [extra](../index.md#extras). + The [TrafilaturaWebScraperDriver](../../reference/griptape/drivers/web_scraper/trafilatura_web_scraper_driver.md) scrapes text from a webpage using the [Trafilatura](https://trafilatura.readthedocs.io) library. Example of using `TrafilaturaWebScraperDriver` directly: diff --git a/griptape/utils/import_utils.py b/griptape/utils/import_utils.py index dd5b5b68e..5e00551f8 100644 --- a/griptape/utils/import_utils.py +++ b/griptape/utils/import_utils.py @@ -26,7 +26,10 @@ def import_optional_dependency(name: str) -> Optional[ModuleType]: package_name = INSTALL_MAPPING.get(name) install_name = package_name if package_name is not None else name - msg = f"Missing optional dependency: '{install_name}'. " f"Use poetry or pip to install '{install_name}'." + msg = ( + f"Missing optional dependency: '{install_name}'. " + f"Please install the appropriate extra: https://docs.griptape.ai/stable/griptape-framework/#extras." + ) try: module = import_module(name) except ImportError: From 3f3f8b9df0cf16279123129bc9e0921055429564 Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Thu, 23 May 2024 19:03:28 -0500 Subject: [PATCH 060/145] Update `init=False` instances (#804) --- griptape/drivers/embedding/base_embedding_driver.py | 5 ++--- griptape/drivers/embedding/dummy_embedding_driver.py | 2 +- .../image_generation/dummy_image_generation_driver.py | 2 +- griptape/drivers/image_query/dummy_image_query_driver.py | 4 ++-- griptape/drivers/prompt/dummy_prompt_driver.py | 2 +- .../drivers/text_to_speech/dummy_text_to_speech_driver.py | 2 +- griptape/tokenizers/dummy_tokenizer.py | 8 ++++---- griptape/tokenizers/huggingface_tokenizer.py | 2 +- griptape/tokenizers/simple_tokenizer.py | 3 ++- 9 files changed, 15 insertions(+), 15 deletions(-) diff --git a/griptape/drivers/embedding/base_embedding_driver.py b/griptape/drivers/embedding/base_embedding_driver.py index 938bdd476..6f74b9306 100644 --- a/griptape/drivers/embedding/base_embedding_driver.py +++ b/griptape/drivers/embedding/base_embedding_driver.py @@ -20,11 +20,10 @@ class BaseEmbeddingDriver(SerializableMixin, ExponentialBackoffMixin, ABC): model: str = field(kw_only=True, metadata={"serializable": True}) tokenizer: Optional[BaseTokenizer] = field(default=None, kw_only=True) - chunker: BaseChunker = field(init=False) + chunker: Optional[BaseChunker] = field(init=False) def __attrs_post_init__(self) -> None: - if self.tokenizer: - self.chunker = TextChunker(tokenizer=self.tokenizer) + self.chunker = TextChunker(tokenizer=self.tokenizer) if self.tokenizer else None def embed_text_artifact(self, artifact: TextArtifact) -> list[float]: return self.embed_string(artifact.to_text()) diff --git a/griptape/drivers/embedding/dummy_embedding_driver.py b/griptape/drivers/embedding/dummy_embedding_driver.py index 1dd9390cf..3aa4f739e 100644 --- a/griptape/drivers/embedding/dummy_embedding_driver.py +++ b/griptape/drivers/embedding/dummy_embedding_driver.py @@ -5,7 +5,7 @@ @define class DummyEmbeddingDriver(BaseEmbeddingDriver): - model: str = field(init=False) + model: None = field(init=False, default=None, kw_only=True) def try_embed_chunk(self, chunk: str) -> list[float]: raise DummyException(__class__.__name__, "try_embed_chunk") diff --git a/griptape/drivers/image_generation/dummy_image_generation_driver.py b/griptape/drivers/image_generation/dummy_image_generation_driver.py index 97bebaecd..0f6b622f7 100644 --- a/griptape/drivers/image_generation/dummy_image_generation_driver.py +++ b/griptape/drivers/image_generation/dummy_image_generation_driver.py @@ -7,7 +7,7 @@ @define class DummyImageGenerationDriver(BaseImageGenerationDriver): - model: str = field(init=False) + model: None = field(init=False, default=None, kw_only=True) def try_text_to_image(self, prompts: list[str], negative_prompts: Optional[list[str]] = None) -> ImageArtifact: raise DummyException(__class__.__name__, "try_text_to_image") diff --git a/griptape/drivers/image_query/dummy_image_query_driver.py b/griptape/drivers/image_query/dummy_image_query_driver.py index 1dea5ee14..ebf579dd4 100644 --- a/griptape/drivers/image_query/dummy_image_query_driver.py +++ b/griptape/drivers/image_query/dummy_image_query_driver.py @@ -7,8 +7,8 @@ @define class DummyImageQueryDriver(BaseImageQueryDriver): - model: str = field(init=False) - max_tokens: int = field(init=False) # pyright: ignore[reportGeneralTypeIssues] + model: None = field(init=False, default=None, kw_only=True) + max_tokens: None = field(init=False, default=None, kw_only=True) def try_query(self, query: str, images: list[ImageArtifact]) -> TextArtifact: raise DummyException(__class__.__name__, "try_query") diff --git a/griptape/drivers/prompt/dummy_prompt_driver.py b/griptape/drivers/prompt/dummy_prompt_driver.py index c7f5bb1c8..f92f9cbc1 100644 --- a/griptape/drivers/prompt/dummy_prompt_driver.py +++ b/griptape/drivers/prompt/dummy_prompt_driver.py @@ -9,7 +9,7 @@ @define class DummyPromptDriver(BasePromptDriver): - model: str = field(init=False) + model: None = field(init=False, default=None, kw_only=True) tokenizer: DummyTokenizer = field(default=Factory(lambda: DummyTokenizer()), kw_only=True) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: diff --git a/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py b/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py index ca109c8eb..b34b06019 100644 --- a/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py +++ b/griptape/drivers/text_to_speech/dummy_text_to_speech_driver.py @@ -6,7 +6,7 @@ @define class DummyTextToSpeechDriver(BaseTextToSpeechDriver): - model: str = field(init=False) + model: None = field(init=False, default=None, kw_only=True) def try_text_to_audio(self, prompts: list[str]) -> AudioArtifact: raise DummyException(__class__.__name__, "try_text_to_audio") diff --git a/griptape/tokenizers/dummy_tokenizer.py b/griptape/tokenizers/dummy_tokenizer.py index 68a730ccd..74f6d104c 100644 --- a/griptape/tokenizers/dummy_tokenizer.py +++ b/griptape/tokenizers/dummy_tokenizer.py @@ -4,11 +4,11 @@ from griptape.tokenizers import BaseTokenizer -@define() +@define class DummyTokenizer(BaseTokenizer): - model: str = field(init=False) - max_input_tokens: int = field(default=0, kw_only=True) - max_output_tokens: int = field(default=0, kw_only=True) + model: None = field(init=False, default=None, kw_only=True) + max_input_tokens: int = field(init=False, default=0, kw_only=True) + max_output_tokens: int = field(init=False, default=0, kw_only=True) def count_tokens(self, text: str | list) -> int: raise DummyException(__class__.__name__, "count_tokens") diff --git a/griptape/tokenizers/huggingface_tokenizer.py b/griptape/tokenizers/huggingface_tokenizer.py index 4c548d8ab..c3203d4a9 100644 --- a/griptape/tokenizers/huggingface_tokenizer.py +++ b/griptape/tokenizers/huggingface_tokenizer.py @@ -10,7 +10,7 @@ @define() class HuggingFaceTokenizer(BaseTokenizer): tokenizer: PreTrainedTokenizerBase = field(kw_only=True) - model: str = field(init=False, kw_only=True) + model: None = field(init=False, default=None, kw_only=True) max_input_tokens: int = field( default=Factory(lambda self: self.tokenizer.model_max_length, takes_self=True), kw_only=True ) diff --git a/griptape/tokenizers/simple_tokenizer.py b/griptape/tokenizers/simple_tokenizer.py index 5dfa0bcb3..d97c3bd89 100644 --- a/griptape/tokenizers/simple_tokenizer.py +++ b/griptape/tokenizers/simple_tokenizer.py @@ -1,11 +1,12 @@ from __future__ import annotations +from typing import Optional from attr import define, field from griptape.tokenizers import BaseTokenizer @define() class SimpleTokenizer(BaseTokenizer): - model: str = field(kw_only=True, init=False) + model: Optional[str] = field(init=False, kw_only=True, default=None) characters_per_token: int = field(kw_only=True) def count_tokens(self, text: str | list) -> int: From 943ce723b4227778c732e5e0dbf6d405f092a3fc Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Fri, 31 May 2024 09:09:07 -0700 Subject: [PATCH 061/145] Use environment variables for structure runs (#808) --- CHANGELOG.md | 1 + .../base_structure_run_driver.py | 10 +++++++- .../griptape_cloud_structure_run_driver.py | 4 +++- .../local_structure_run_driver.py | 10 +++++++- tests/mocks/mock_prompt_driver.py | 7 +++--- ...est_griptape_cloud_structure_run_driver.py | 2 +- .../test_local_structure_run_driver.py | 23 ++++++++++++------- 7 files changed, 42 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb2e5636a..8dee34445 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `AzureOpenAiStructureConfig` for providing Structures with all Azure OpenAI Driver configuration. - `AzureOpenAiVisionImageQueryDriver` to support queries on images using Azure's OpenAI Vision models. +- Parameter `env` to `BaseStructureRunDriver` to set environment variables for a Structure Run. ### Changed - **BREAKING**: Updated OpenAI-based image query drivers to remove Vision from the name. diff --git a/griptape/drivers/structure_run/base_structure_run_driver.py b/griptape/drivers/structure_run/base_structure_run_driver.py index 5c188a18d..4ff9b6eb2 100644 --- a/griptape/drivers/structure_run/base_structure_run_driver.py +++ b/griptape/drivers/structure_run/base_structure_run_driver.py @@ -1,12 +1,20 @@ from abc import ABC, abstractmethod -from attrs import define +from attrs import define, Factory, field from griptape.artifacts import BaseArtifact @define class BaseStructureRunDriver(ABC): + """Base class for Structure Run Drivers. + + Attributes: + env: Environment variables to set before running the Structure. + """ + + env: dict[str, str] = field(default=Factory(dict), kw_only=True) + def run(self, *args: BaseArtifact) -> BaseArtifact: return self.try_run(*args) diff --git a/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.py b/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.py index 9ed036995..40e6ff874 100644 --- a/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.py +++ b/griptape/drivers/structure_run/griptape_cloud_structure_run_driver.py @@ -28,7 +28,9 @@ def try_run(self, *args: BaseArtifact) -> BaseArtifact: url = urljoin(self.base_url.strip("/"), f"/api/structures/{self.structure_id}/runs") try: - response: Response = post(url, json={"args": [arg.value for arg in args]}, headers=self.headers) + response: Response = post( + url, json={"args": [arg.value for arg in args], "env": self.env}, headers=self.headers + ) response.raise_for_status() response_json = response.json() diff --git a/griptape/drivers/structure_run/local_structure_run_driver.py b/griptape/drivers/structure_run/local_structure_run_driver.py index 255f91445..4f140c1fe 100644 --- a/griptape/drivers/structure_run/local_structure_run_driver.py +++ b/griptape/drivers/structure_run/local_structure_run_driver.py @@ -6,6 +6,8 @@ from griptape.artifacts import BaseArtifact, InfoArtifact from griptape.drivers.structure_run.base_structure_run_driver import BaseStructureRunDriver +import os + if TYPE_CHECKING: from griptape.structures import Structure @@ -15,7 +17,13 @@ class LocalStructureRunDriver(BaseStructureRunDriver): structure_factory_fn: Callable[[], Structure] = field(kw_only=True) def try_run(self, *args: BaseArtifact) -> BaseArtifact: - structure_factory_fn = self.structure_factory_fn().run(*[arg.value for arg in args]) + old_env = os.environ.copy() + try: + os.environ.update(self.env) + structure_factory_fn = self.structure_factory_fn().run(*[arg.value for arg in args]) + finally: + os.environ.clear() + os.environ.update(old_env) if structure_factory_fn.output_task.output is not None: return structure_factory_fn.output_task.output diff --git a/tests/mocks/mock_prompt_driver.py b/tests/mocks/mock_prompt_driver.py index ca1f67f5f..e2018c6f6 100644 --- a/tests/mocks/mock_prompt_driver.py +++ b/tests/mocks/mock_prompt_driver.py @@ -1,5 +1,6 @@ from collections.abc import Iterator -from attr import define, field +from typing import Callable +from attr import Factory, define, field from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver from griptape.tokenizers import BaseTokenizer @@ -11,10 +12,10 @@ class MockPromptDriver(BasePromptDriver): model: str = "test-model" tokenizer: BaseTokenizer = MockTokenizer(model="test-model", max_input_tokens=4096, max_output_tokens=4096) - mock_output: str = field(default="mock output", kw_only=True) + mock_output: str | Callable[[], str] = field(default="mock output", kw_only=True) def try_run(self, prompt_stack: PromptStack) -> TextArtifact: - return TextArtifact(value=self.mock_output) + return TextArtifact(value=self.mock_output() if isinstance(self.mock_output, Callable) else self.mock_output) def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: yield TextArtifact(value=self.mock_output) diff --git a/tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py b/tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py index 8318553b1..b056241ec 100644 --- a/tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py +++ b/tests/unit/drivers/structure_run/test_griptape_cloud_structure_run_driver.py @@ -20,7 +20,7 @@ def driver(self, mocker): mocker.patch("requests.get", return_value=mock_response) return GriptapeCloudStructureRunDriver( - base_url="https://cloud-foo.griptape.ai", api_key="foo bar", structure_id="1" + base_url="https://cloud-foo.griptape.ai", api_key="foo bar", structure_id="1", env={"key": "value"} ) def test_run(self, driver): diff --git a/tests/unit/drivers/structure_run/test_local_structure_run_driver.py b/tests/unit/drivers/structure_run/test_local_structure_run_driver.py index 04da4f2cf..921a4b013 100644 --- a/tests/unit/drivers/structure_run/test_local_structure_run_driver.py +++ b/tests/unit/drivers/structure_run/test_local_structure_run_driver.py @@ -1,4 +1,6 @@ +import os import pytest +from griptape.artifacts.text_artifact import TextArtifact from griptape.tasks import StructureRunTask from griptape.structures import Agent from tests.mocks.mock_prompt_driver import MockPromptDriver @@ -7,18 +9,23 @@ class TestLocalStructureRunDriver: - @pytest.fixture - def driver(self): - agent = Agent(prompt_driver=MockPromptDriver(mock_output="agent mock output")) - driver = LocalStructureRunDriver(structure_factory_fn=lambda: agent) + def test_run(self): + pipeline = Pipeline() + driver = LocalStructureRunDriver(structure_factory_fn=lambda: Agent(prompt_driver=MockPromptDriver())) - return driver + task = StructureRunTask(driver=driver) + + pipeline.add_task(task) + + assert task.run().to_text() == "mock output" - def test_run(self, driver): - pipeline = Pipeline(prompt_driver=MockPromptDriver(mock_output="pipeline mock output")) + def test_run_with_env(self): + pipeline = Pipeline() + agent = Agent(prompt_driver=MockPromptDriver(mock_output=lambda: os.environ["key"])) + driver = LocalStructureRunDriver(structure_factory_fn=lambda: agent, env={"key": "value"}) task = StructureRunTask(driver=driver) pipeline.add_task(task) - assert task.run().to_text() == "agent mock output" + assert task.run().to_text() == "value" From 427df75d61d8862c043b6b1045a1cbdc85aaf5af Mon Sep 17 00:00:00 2001 From: Matt Vallillo Date: Fri, 31 May 2024 10:43:40 -0700 Subject: [PATCH 062/145] chore: update `attr` to `attrs` (#810) Co-authored-by: Collin Dutter --- griptape/artifacts/audio_artifact.py | 2 +- griptape/artifacts/base_artifact.py | 2 +- griptape/artifacts/blob_artifact.py | 2 +- griptape/artifacts/csv_row_artifact.py | 2 +- griptape/artifacts/error_artifact.py | 2 +- griptape/artifacts/image_artifact.py | 2 +- griptape/artifacts/info_artifact.py | 2 +- griptape/artifacts/list_artifact.py | 2 +- griptape/artifacts/media_artifact.py | 2 +- griptape/artifacts/text_artifact.py | 2 +- griptape/chunkers/base_chunker.py | 2 +- griptape/config/base_structure_config.py | 2 +- .../amazon_bedrock_cohere_embedding_driver.py | 2 +- .../amazon_bedrock_titan_embedding_driver.py | 2 +- .../amazon_sagemaker_embedding_driver.py | 2 +- .../azure_openai_embedding_driver.py | 2 +- .../embedding/base_embedding_driver.py | 2 +- .../base_multi_model_embedding_driver.py | 2 +- .../embedding/google_embedding_driver.py | 2 +- .../huggingface_hub_embedding_driver.py | 2 +- .../embedding/openai_embedding_driver.py | 2 +- .../embedding/voyageai_embedding_driver.py | 2 +- .../base_embedding_model_driver.py | 2 +- ...aker_huggingface_embedding_model_driver.py | 2 +- ...r_tensorflow_hub_embedding_model_driver.py | 2 +- .../amazon_sqs_event_listener_driver.py | 2 +- .../aws_iot_core_event_listener_driver.py | 2 +- .../base_event_listener_driver.py | 2 +- .../griptape_cloud_event_listener_driver.py | 2 +- .../webhook_event_listener_driver.py | 2 +- .../amazon_s3_file_manager_driver.py | 2 +- .../file_manager/base_file_manager_driver.py | 2 +- .../file_manager/local_file_manager_driver.py | 2 +- .../amazon_bedrock_image_generation_driver.py | 2 +- .../azure_openai_image_generation_driver.py | 2 +- .../base_image_generation_driver.py | 2 +- ...ase_multi_model_image_generation_driver.py | 2 +- .../leonardo_image_generation_driver.py | 2 +- .../openai_image_generation_driver.py | 2 +- .../base_image_generation_model_driver.py | 2 +- ...diffusion_image_generation_model_driver.py | 2 +- ...ock_titan_image_generation_model_driver.py | 2 +- .../amazon_bedrock_image_query_driver.py | 2 +- .../anthropic_image_query_driver.py | 2 +- .../azure_openai_image_query_driver.py | 2 +- .../image_query/base_image_query_driver.py | 2 +- .../base_multi_model_image_query_driver.py | 2 +- .../image_query/dummy_image_query_driver.py | 2 +- .../image_query/openai_image_query_driver.py | 2 +- .../base_image_query_model_driver.py | 2 +- ...bedrock_claude_image_query_model_driver.py | 2 +- ...zon_dynamodb_conversation_memory_driver.py | 2 +- .../local_conversation_memory_driver.py | 2 +- .../redis_conversation_memory_driver.py | 2 +- .../prompt/amazon_bedrock_prompt_driver.py | 2 +- .../prompt/amazon_sagemaker_prompt_driver.py | 2 +- .../drivers/prompt/anthropic_prompt_driver.py | 2 +- .../prompt/azure_openai_chat_prompt_driver.py | 2 +- .../azure_openai_completion_prompt_driver.py | 2 +- griptape/drivers/prompt/base_prompt_driver.py | 2 +- .../drivers/prompt/cohere_prompt_driver.py | 2 +- .../drivers/prompt/google_prompt_driver.py | 2 +- .../prompt/huggingface_hub_prompt_driver.py | 2 +- .../huggingface_pipeline_prompt_driver.py | 2 +- .../prompt/openai_chat_prompt_driver.py | 2 +- .../prompt/openai_completion_prompt_driver.py | 2 +- .../prompt_model/base_prompt_model_driver.py | 2 +- .../bedrock_claude_prompt_model_driver.py | 2 +- .../bedrock_jurassic_prompt_model_driver.py | 2 +- .../bedrock_llama_prompt_model_driver.py | 2 +- .../bedrock_titan_prompt_model_driver.py | 2 +- .../sagemaker_falcon_prompt_model_driver.py | 2 +- .../sagemaker_llama_prompt_model_driver.py | 2 +- .../drivers/sql/amazon_redshift_sql_driver.py | 2 +- griptape/drivers/sql/base_sql_driver.py | 2 +- griptape/drivers/sql/snowflake_sql_driver.py | 2 +- griptape/drivers/sql/sql_driver.py | 2 +- .../base_text_to_speech_driver.py | 2 +- .../elevenlabs_text_to_speech_driver.py | 2 +- .../openai_text_to_speech_driver.py | 2 +- .../amazon_opensearch_vector_store_driver.py | 2 +- .../azure_mongodb_vector_store_driver.py | 2 +- .../vector/base_vector_store_driver.py | 2 +- .../vector/local_vector_store_driver.py | 2 +- .../vector/marqo_vector_store_driver.py | 2 +- .../mongodb_atlas_vector_store_driver.py | 2 +- .../vector/opensearch_vector_store_driver.py | 2 +- .../vector/pgvector_vector_store_driver.py | 2 +- .../vector/pinecone_vector_store_driver.py | 2 +- .../vector/redis_vector_store_driver.py | 2 +- .../markdownify_web_scraper_driver.py | 2 +- .../trafilatura_web_scraper_driver.py | 2 +- .../engines/audio/text_to_speech_engine.py | 2 +- .../extraction/base_extraction_engine.py | 2 +- .../extraction/csv_extraction_engine.py | 2 +- .../extraction/json_extraction_engine.py | 2 +- .../image/base_image_generation_engine.py | 2 +- .../inpainting_image_generation_engine.py | 2 +- .../outpainting_image_generation_engine.py | 2 +- .../image/prompt_image_generation_engine.py | 2 +- .../variation_image_generation_engine.py | 2 +- .../engines/image_query/image_query_engine.py | 2 +- griptape/engines/query/base_query_engine.py | 2 +- griptape/engines/query/vector_query_engine.py | 2 +- .../engines/summary/base_summary_engine.py | 2 +- .../engines/summary/prompt_summary_engine.py | 2 +- griptape/events/base_event.py | 2 +- griptape/events/base_image_query_event.py | 2 +- griptape/events/completion_chunk_event.py | 2 +- griptape/events/finish_image_query_event.py | 2 +- .../events/start_image_generation_event.py | 2 +- griptape/events/start_image_query_event.py | 2 +- griptape/events/start_text_to_speech_event.py | 2 +- griptape/loaders/base_loader.py | 2 +- griptape/loaders/blob_loader.py | 2 +- griptape/loaders/csv_loader.py | 2 +- griptape/loaders/dataframe_loader.py | 2 +- griptape/loaders/email_loader.py | 2 +- griptape/loaders/image_loader.py | 2 +- griptape/loaders/pdf_loader.py | 2 +- griptape/loaders/sql_loader.py | 2 +- griptape/loaders/text_loader.py | 2 +- griptape/loaders/web_loader.py | 2 +- .../memory/meta/action_subtask_meta_entry.py | 2 +- griptape/memory/meta/base_meta_entry.py | 2 +- griptape/memory/meta/meta_memory.py | 2 +- .../structure/base_conversation_memory.py | 2 +- .../memory/structure/conversation_memory.py | 2 +- griptape/memory/structure/run.py | 2 +- .../structure/summary_conversation_memory.py | 2 +- .../task/storage/base_artifact_storage.py | 2 +- .../task/storage/blob_artifact_storage.py | 2 +- .../task/storage/text_artifact_storage.py | 2 +- griptape/memory/task/task_memory.py | 2 +- .../mixins/actions_subtask_origin_mixin.py | 2 +- griptape/mixins/activity_mixin.py | 2 +- griptape/mixins/exponential_backoff_mixin.py | 6 +-- .../media_artifact_file_output_mixin.py | 2 +- griptape/mixins/rule_mixin.py | 2 +- griptape/mixins/serializable_mixin.py | 2 +- griptape/rules/rule.py | 2 +- griptape/rules/ruleset.py | 2 +- griptape/structures/agent.py | 2 +- griptape/structures/pipeline.py | 2 +- griptape/structures/workflow.py | 2 +- griptape/tasks/actions_subtask.py | 2 +- griptape/tasks/base_audio_generation_task.py | 2 +- griptape/tasks/base_image_generation_task.py | 2 +- griptape/tasks/base_multi_text_input_task.py | 2 +- griptape/tasks/base_task.py | 2 +- griptape/tasks/base_text_input_task.py | 2 +- griptape/tasks/code_execution_task.py | 2 +- griptape/tasks/csv_extraction_task.py | 2 +- griptape/tasks/extraction_task.py | 2 +- griptape/tasks/image_query_task.py | 2 +- .../tasks/inpainting_image_generation_task.py | 2 +- .../outpainting_image_generation_task.py | 2 +- .../tasks/prompt_image_generation_task.py | 2 +- griptape/tasks/prompt_task.py | 2 +- griptape/tasks/structure_run_task.py | 2 +- griptape/tasks/text_query_task.py | 2 +- griptape/tasks/text_summary_task.py | 2 +- griptape/tasks/text_to_speech_task.py | 2 +- griptape/tasks/tool_task.py | 2 +- griptape/tasks/toolkit_task.py | 2 +- .../tasks/variation_image_generation_task.py | 2 +- griptape/tokenizers/anthropic_tokenizer.py | 2 +- griptape/tokenizers/base_tokenizer.py | 2 +- .../tokenizers/bedrock_claude_tokenizer.py | 2 +- .../tokenizers/bedrock_cohere_tokenizer.py | 2 +- .../tokenizers/bedrock_jurassic_tokenizer.py | 2 +- .../tokenizers/bedrock_llama_tokenizer.py | 2 +- .../tokenizers/bedrock_titan_tokenizer.py | 2 +- griptape/tokenizers/cohere_tokenizer.py | 2 +- griptape/tokenizers/google_tokenizer.py | 2 +- griptape/tokenizers/huggingface_tokenizer.py | 2 +- griptape/tokenizers/openai_tokenizer.py | 2 +- griptape/tokenizers/simple_tokenizer.py | 2 +- griptape/tokenizers/voyageai_tokenizer.py | 2 +- griptape/tools/aws_iam_client/tool.py | 2 +- griptape/tools/aws_s3_client/tool.py | 2 +- griptape/tools/base_aws_client.py | 2 +- griptape/tools/base_google_client.py | 2 +- griptape/tools/base_griptape_cloud_client.py | 2 +- griptape/tools/base_tool.py | 2 +- griptape/tools/computer/tool.py | 2 +- griptape/tools/email_client/tool.py | 2 +- griptape/tools/file_manager/tool.py | 2 +- griptape/tools/google_cal/tool.py | 2 +- griptape/tools/google_docs/tool.py | 2 +- griptape/tools/google_drive/tool.py | 2 +- griptape/tools/google_gmail/tool.py | 2 +- .../tool.py | 2 +- griptape/tools/image_query_client/tool.py | 2 +- griptape/tools/openweather_client/tool.py | 2 +- griptape/tools/rest_api_client/tool.py | 6 +-- griptape/tools/sql_client/tool.py | 2 +- griptape/tools/structure_run_client/tool.py | 2 +- griptape/tools/task_memory_client/tool.py | 2 +- griptape/tools/vector_store_client/tool.py | 2 +- griptape/tools/web_scraper/tool.py | 2 +- griptape/tools/web_search/tool.py | 2 +- griptape/utils/chat.py | 2 +- griptape/utils/command_runner.py | 2 +- griptape/utils/conversation.py | 2 +- griptape/utils/j2.py | 2 +- griptape/utils/prompt_stack.py | 2 +- griptape/utils/python_runner.py | 2 +- griptape/utils/token_counter.py | 2 +- poetry.lock | 39 +++++++++---------- pyproject.toml | 8 +++- tests/mocks/invalid_mock_tool/tool.py | 2 +- tests/mocks/mock_embedding_driver.py | 2 +- tests/mocks/mock_event_listener_driver.py | 2 +- tests/mocks/mock_failing_prompt_driver.py | 4 +- tests/mocks/mock_image_generation_driver.py | 2 +- tests/mocks/mock_image_generation_task.py | 2 +- tests/mocks/mock_image_query_driver.py | 2 +- tests/mocks/mock_multi_text_input_task.py | 2 +- tests/mocks/mock_prompt_driver.py | 3 +- tests/mocks/mock_task.py | 2 +- tests/mocks/mock_text_input_task.py | 2 +- tests/mocks/mock_tokenizer.py | 2 +- tests/mocks/mock_tool/tool.py | 2 +- tests/mocks/mock_value_prompt_driver.py | 2 +- .../artifacts/test_base_media_artifact.py | 2 +- tests/utils/structure_tester.py | 2 +- 227 files changed, 257 insertions(+), 251 deletions(-) diff --git a/griptape/artifacts/audio_artifact.py b/griptape/artifacts/audio_artifact.py index b6d4667e4..3dc67fa36 100644 --- a/griptape/artifacts/audio_artifact.py +++ b/griptape/artifacts/audio_artifact.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define +from attrs import define from griptape.artifacts import MediaArtifact diff --git a/griptape/artifacts/base_artifact.py b/griptape/artifacts/base_artifact.py index daaa32c4f..a7a1811ea 100644 --- a/griptape/artifacts/base_artifact.py +++ b/griptape/artifacts/base_artifact.py @@ -4,7 +4,7 @@ import json import uuid from abc import ABC, abstractmethod -from attr import define, field, Factory +from attrs import define, field, Factory @define() diff --git a/griptape/artifacts/blob_artifact.py b/griptape/artifacts/blob_artifact.py index 7b5173736..5d2f32272 100644 --- a/griptape/artifacts/blob_artifact.py +++ b/griptape/artifacts/blob_artifact.py @@ -1,7 +1,7 @@ from __future__ import annotations import os.path from typing import Optional -from attr import field, define +from attrs import field, define from griptape.artifacts import BaseArtifact diff --git a/griptape/artifacts/csv_row_artifact.py b/griptape/artifacts/csv_row_artifact.py index 14fc1c0f9..7572b7a2f 100644 --- a/griptape/artifacts/csv_row_artifact.py +++ b/griptape/artifacts/csv_row_artifact.py @@ -1,7 +1,7 @@ from __future__ import annotations import csv import io -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, BaseArtifact diff --git a/griptape/artifacts/error_artifact.py b/griptape/artifacts/error_artifact.py index f2fb02a8f..1900002b3 100644 --- a/griptape/artifacts/error_artifact.py +++ b/griptape/artifacts/error_artifact.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import BaseArtifact diff --git a/griptape/artifacts/image_artifact.py b/griptape/artifacts/image_artifact.py index 068cf6d00..e963b3881 100644 --- a/griptape/artifacts/image_artifact.py +++ b/griptape/artifacts/image_artifact.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import MediaArtifact diff --git a/griptape/artifacts/info_artifact.py b/griptape/artifacts/info_artifact.py index 19b50a043..3692e9631 100644 --- a/griptape/artifacts/info_artifact.py +++ b/griptape/artifacts/info_artifact.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import BaseArtifact diff --git a/griptape/artifacts/list_artifact.py b/griptape/artifacts/list_artifact.py index 3a8c93d50..558f32432 100644 --- a/griptape/artifacts/list_artifact.py +++ b/griptape/artifacts/list_artifact.py @@ -1,6 +1,6 @@ from typing import Optional from collections.abc import Sequence -from attr import field, define +from attrs import field, define from griptape.artifacts import BaseArtifact diff --git a/griptape/artifacts/media_artifact.py b/griptape/artifacts/media_artifact.py index dc78ea352..92cc0d9cd 100644 --- a/griptape/artifacts/media_artifact.py +++ b/griptape/artifacts/media_artifact.py @@ -5,7 +5,7 @@ import random from typing import Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import BlobArtifact import base64 diff --git a/griptape/artifacts/text_artifact.py b/griptape/artifacts/text_artifact.py index ef0567d03..e8a2bb2a7 100644 --- a/griptape/artifacts/text_artifact.py +++ b/griptape/artifacts/text_artifact.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import BaseArtifact if TYPE_CHECKING: diff --git a/griptape/chunkers/base_chunker.py b/griptape/chunkers/base_chunker.py index c9700a91f..f2cc452ad 100644 --- a/griptape/chunkers/base_chunker.py +++ b/griptape/chunkers/base_chunker.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABC from typing import Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.chunkers import ChunkSeparator from griptape.tokenizers import BaseTokenizer, OpenAiTokenizer diff --git a/griptape/config/base_structure_config.py b/griptape/config/base_structure_config.py index d716205c8..a94cf75d9 100644 --- a/griptape/config/base_structure_config.py +++ b/griptape/config/base_structure_config.py @@ -3,7 +3,7 @@ from abc import ABC from typing import Optional -from attr import define, field +from attrs import define, field from griptape.config import BaseConfig from griptape.drivers import ( diff --git a/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py b/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py index e3161b38a..15ce67c4c 100644 --- a/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py +++ b/griptape/drivers/embedding/amazon_bedrock_cohere_embedding_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations import json from typing import Any, TYPE_CHECKING -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver from griptape.tokenizers import BedrockCohereTokenizer from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py b/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py index f3e0cb7f7..a510c618c 100644 --- a/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py +++ b/griptape/drivers/embedding/amazon_bedrock_titan_embedding_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations import json from typing import Any, TYPE_CHECKING -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver from griptape.tokenizers import BedrockTitanTokenizer from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py b/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py index 376836bbd..4ab6d2bf7 100644 --- a/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py +++ b/griptape/drivers/embedding/amazon_sagemaker_embedding_driver.py @@ -3,7 +3,7 @@ import json from typing import Any -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.drivers import BaseMultiModelEmbeddingDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/embedding/azure_openai_embedding_driver.py b/griptape/drivers/embedding/azure_openai_embedding_driver.py index f2c3b8d39..c92197e9b 100644 --- a/griptape/drivers/embedding/azure_openai_embedding_driver.py +++ b/griptape/drivers/embedding/azure_openai_embedding_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Callable, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import OpenAiEmbeddingDriver from griptape.tokenizers import OpenAiTokenizer import openai diff --git a/griptape/drivers/embedding/base_embedding_driver.py b/griptape/drivers/embedding/base_embedding_driver.py index 6f74b9306..0fcc05fc1 100644 --- a/griptape/drivers/embedding/base_embedding_driver.py +++ b/griptape/drivers/embedding/base_embedding_driver.py @@ -2,7 +2,7 @@ import numpy as np from typing import Optional from abc import ABC, abstractmethod -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.mixins import ExponentialBackoffMixin from griptape.tokenizers import BaseTokenizer diff --git a/griptape/drivers/embedding/base_multi_model_embedding_driver.py b/griptape/drivers/embedding/base_multi_model_embedding_driver.py index 792c13c4b..90f827ad2 100644 --- a/griptape/drivers/embedding/base_multi_model_embedding_driver.py +++ b/griptape/drivers/embedding/base_multi_model_embedding_driver.py @@ -2,7 +2,7 @@ from abc import ABC from typing import TYPE_CHECKING -from attr import define, field +from attrs import define, field from griptape.drivers import BaseEmbeddingDriver diff --git a/griptape/drivers/embedding/google_embedding_driver.py b/griptape/drivers/embedding/google_embedding_driver.py index 3467d3360..884a40c3c 100644 --- a/griptape/drivers/embedding/google_embedding_driver.py +++ b/griptape/drivers/embedding/google_embedding_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional -from attr import define, field +from attrs import define, field from griptape.drivers import BaseEmbeddingDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/embedding/huggingface_hub_embedding_driver.py b/griptape/drivers/embedding/huggingface_hub_embedding_driver.py index 8e90513cc..71abef81f 100644 --- a/griptape/drivers/embedding/huggingface_hub_embedding_driver.py +++ b/griptape/drivers/embedding/huggingface_hub_embedding_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from griptape.utils import import_optional_dependency -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver if TYPE_CHECKING: diff --git a/griptape/drivers/embedding/openai_embedding_driver.py b/griptape/drivers/embedding/openai_embedding_driver.py index 676a6209b..089875c1a 100644 --- a/griptape/drivers/embedding/openai_embedding_driver.py +++ b/griptape/drivers/embedding/openai_embedding_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import BaseEmbeddingDriver from griptape.tokenizers import OpenAiTokenizer import openai diff --git a/griptape/drivers/embedding/voyageai_embedding_driver.py b/griptape/drivers/embedding/voyageai_embedding_driver.py index 1f1779b50..0cfac6fda 100644 --- a/griptape/drivers/embedding/voyageai_embedding_driver.py +++ b/griptape/drivers/embedding/voyageai_embedding_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional, Any -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.utils import import_optional_dependency from griptape.drivers import BaseEmbeddingDriver from griptape.tokenizers import VoyageAiTokenizer diff --git a/griptape/drivers/embedding_model/base_embedding_model_driver.py b/griptape/drivers/embedding_model/base_embedding_model_driver.py index d2b169495..ad7bf3bda 100644 --- a/griptape/drivers/embedding_model/base_embedding_model_driver.py +++ b/griptape/drivers/embedding_model/base_embedding_model_driver.py @@ -1,4 +1,4 @@ -from attr import define +from attrs import define from abc import ABC, abstractmethod diff --git a/griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py b/griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py index 602902c3f..dceffcd8a 100644 --- a/griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py +++ b/griptape/drivers/embedding_model/sagemaker_huggingface_embedding_model_driver.py @@ -1,4 +1,4 @@ -from attr import define +from attrs import define from griptape.drivers import BaseEmbeddingModelDriver diff --git a/griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py b/griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py index 1b509a698..9d9632fb0 100644 --- a/griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py +++ b/griptape/drivers/embedding_model/sagemaker_tensorflow_hub_embedding_model_driver.py @@ -1,4 +1,4 @@ -from attr import define +from attrs import define from griptape.drivers import BaseEmbeddingModelDriver diff --git a/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py index 1c8132b67..4c632cb01 100644 --- a/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py +++ b/griptape/drivers/event_listener/amazon_sqs_event_listener_driver.py @@ -3,7 +3,7 @@ import json from typing import TYPE_CHECKING, Any -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py index c4fd72084..3b014aed4 100644 --- a/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py +++ b/griptape/drivers/event_listener/aws_iot_core_event_listener_driver.py @@ -3,7 +3,7 @@ import json from typing import TYPE_CHECKING, Any -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/event_listener/base_event_listener_driver.py b/griptape/drivers/event_listener/base_event_listener_driver.py index 9ff18cf4f..b6d2d9b12 100644 --- a/griptape/drivers/event_listener/base_event_listener_driver.py +++ b/griptape/drivers/event_listener/base_event_listener_driver.py @@ -4,7 +4,7 @@ from concurrent import futures from logging import Logger -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.events import BaseEvent diff --git a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py index 2c4149ae7..c481d3081 100644 --- a/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py +++ b/griptape/drivers/event_listener/griptape_cloud_event_listener_driver.py @@ -4,7 +4,7 @@ import requests from urllib.parse import urljoin -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver diff --git a/griptape/drivers/event_listener/webhook_event_listener_driver.py b/griptape/drivers/event_listener/webhook_event_listener_driver.py index 242e5428a..a0eb5ab5f 100644 --- a/griptape/drivers/event_listener/webhook_event_listener_driver.py +++ b/griptape/drivers/event_listener/webhook_event_listener_driver.py @@ -2,7 +2,7 @@ import requests -from attr import define, field +from attrs import define, field from griptape.drivers.event_listener.base_event_listener_driver import BaseEventListenerDriver diff --git a/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py b/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py index cbf2109ef..bdb4d787c 100644 --- a/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py +++ b/griptape/drivers/file_manager/amazon_s3_file_manager_driver.py @@ -2,7 +2,7 @@ import os from pathlib import Path from typing import TYPE_CHECKING, Any -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.utils.import_utils import import_optional_dependency from .base_file_manager_driver import BaseFileManagerDriver diff --git a/griptape/drivers/file_manager/base_file_manager_driver.py b/griptape/drivers/file_manager/base_file_manager_driver.py index 1cff06d06..56f19b3cc 100644 --- a/griptape/drivers/file_manager/base_file_manager_driver.py +++ b/griptape/drivers/file_manager/base_file_manager_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from abc import ABC, abstractmethod -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.artifacts import BaseArtifact, ErrorArtifact, TextArtifact, InfoArtifact, ListArtifact import griptape.loaders as loaders diff --git a/griptape/drivers/file_manager/local_file_manager_driver.py b/griptape/drivers/file_manager/local_file_manager_driver.py index 96766fa9a..186296aa3 100644 --- a/griptape/drivers/file_manager/local_file_manager_driver.py +++ b/griptape/drivers/file_manager/local_file_manager_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations import os from pathlib import Path -from attr import define, field, Factory +from attrs import define, field, Factory from .base_file_manager_driver import BaseFileManagerDriver diff --git a/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py b/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py index e3e72d55e..2edb9f862 100644 --- a/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py +++ b/griptape/drivers/image_generation/amazon_bedrock_image_generation_driver.py @@ -3,7 +3,7 @@ import json from typing import TYPE_CHECKING, Any, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import ImageArtifact from griptape.drivers import BaseMultiModelImageGenerationDriver diff --git a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py index f6cbbe1a9..b631703d8 100644 --- a/griptape/drivers/image_generation/azure_openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/azure_openai_image_generation_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations import openai -from attr import field, Factory, define +from attrs import field, Factory, define from typing import Callable, Optional from griptape.drivers import OpenAiImageGenerationDriver diff --git a/griptape/drivers/image_generation/base_image_generation_driver.py b/griptape/drivers/image_generation/base_image_generation_driver.py index 771fc30dc..dbe42442f 100644 --- a/griptape/drivers/image_generation/base_image_generation_driver.py +++ b/griptape/drivers/image_generation/base_image_generation_driver.py @@ -3,7 +3,7 @@ from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import ImageArtifact from griptape.events import StartImageGenerationEvent, FinishImageGenerationEvent diff --git a/griptape/drivers/image_generation/base_multi_model_image_generation_driver.py b/griptape/drivers/image_generation/base_multi_model_image_generation_driver.py index 9b1bb9932..12c2fbef5 100644 --- a/griptape/drivers/image_generation/base_multi_model_image_generation_driver.py +++ b/griptape/drivers/image_generation/base_multi_model_image_generation_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABC -from attr import field, define +from attrs import field, define from griptape.drivers import BaseImageGenerationDriver, BaseImageGenerationModelDriver diff --git a/griptape/drivers/image_generation/leonardo_image_generation_driver.py b/griptape/drivers/image_generation/leonardo_image_generation_driver.py index c41b15d97..d274970ee 100644 --- a/griptape/drivers/image_generation/leonardo_image_generation_driver.py +++ b/griptape/drivers/image_generation/leonardo_image_generation_driver.py @@ -3,7 +3,7 @@ from typing import Optional, Literal import requests -from attr import field, define, Factory +from attrs import field, define, Factory from griptape.artifacts import ImageArtifact from griptape.drivers import BaseImageGenerationDriver diff --git a/griptape/drivers/image_generation/openai_image_generation_driver.py b/griptape/drivers/image_generation/openai_image_generation_driver.py index 327132f64..abc961e3d 100644 --- a/griptape/drivers/image_generation/openai_image_generation_driver.py +++ b/griptape/drivers/image_generation/openai_image_generation_driver.py @@ -5,7 +5,7 @@ import openai from openai.types.images_response import ImagesResponse -from attr import field, Factory, define +from attrs import field, Factory, define from griptape.artifacts import ImageArtifact from griptape.drivers import BaseImageGenerationDriver diff --git a/griptape/drivers/image_generation_model/base_image_generation_model_driver.py b/griptape/drivers/image_generation_model/base_image_generation_model_driver.py index 328bbf4d7..803863319 100644 --- a/griptape/drivers/image_generation_model/base_image_generation_model_driver.py +++ b/griptape/drivers/image_generation_model/base_image_generation_model_driver.py @@ -3,7 +3,7 @@ from abc import ABC, abstractmethod from typing import Any, Optional -from attr import define +from attrs import define from griptape.artifacts import ImageArtifact from griptape.mixins import SerializableMixin diff --git a/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py b/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py index 5018b42e4..03d593eac 100644 --- a/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py +++ b/griptape/drivers/image_generation_model/bedrock_stable_diffusion_image_generation_model_driver.py @@ -4,7 +4,7 @@ import logging from typing import Optional -from attr import field, define +from attrs import field, define from griptape.artifacts import ImageArtifact from griptape.drivers import BaseImageGenerationModelDriver diff --git a/griptape/drivers/image_generation_model/bedrock_titan_image_generation_model_driver.py b/griptape/drivers/image_generation_model/bedrock_titan_image_generation_model_driver.py index 8602b386b..2f4577aa7 100644 --- a/griptape/drivers/image_generation_model/bedrock_titan_image_generation_model_driver.py +++ b/griptape/drivers/image_generation_model/bedrock_titan_image_generation_model_driver.py @@ -3,7 +3,7 @@ import base64 from typing import Any, Optional -from attr import field, define +from attrs import field, define from griptape.artifacts import ImageArtifact from griptape.drivers import BaseImageGenerationModelDriver diff --git a/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py b/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py index a5a7c6f15..eabe9d27e 100644 --- a/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py +++ b/griptape/drivers/image_query/amazon_bedrock_image_query_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import ImageArtifact, TextArtifact from griptape.drivers import BaseMultiModelImageQueryDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/image_query/anthropic_image_query_driver.py b/griptape/drivers/image_query/anthropic_image_query_driver.py index cfb1a1d48..aca06ac2f 100644 --- a/griptape/drivers/image_query/anthropic_image_query_driver.py +++ b/griptape/drivers/image_query/anthropic_image_query_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional, Any -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import ImageArtifact, TextArtifact from griptape.drivers import BaseImageQueryDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/image_query/azure_openai_image_query_driver.py b/griptape/drivers/image_query/azure_openai_image_query_driver.py index 017c98f1f..f59c64823 100644 --- a/griptape/drivers/image_query/azure_openai_image_query_driver.py +++ b/griptape/drivers/image_query/azure_openai_image_query_driver.py @@ -2,7 +2,7 @@ from typing import Callable, Optional -from attr import define, field, Factory +from attrs import define, field, Factory import openai from griptape.drivers.image_query.openai_image_query_driver import OpenAiImageQueryDriver diff --git a/griptape/drivers/image_query/base_image_query_driver.py b/griptape/drivers/image_query/base_image_query_driver.py index 8f7425732..8944dd931 100644 --- a/griptape/drivers/image_query/base_image_query_driver.py +++ b/griptape/drivers/image_query/base_image_query_driver.py @@ -3,7 +3,7 @@ from abc import abstractmethod, ABC from typing import Optional, TYPE_CHECKING -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, ImageArtifact from griptape.events import StartImageQueryEvent, FinishImageQueryEvent diff --git a/griptape/drivers/image_query/base_multi_model_image_query_driver.py b/griptape/drivers/image_query/base_multi_model_image_query_driver.py index 07d5b7c27..d801fd917 100644 --- a/griptape/drivers/image_query/base_multi_model_image_query_driver.py +++ b/griptape/drivers/image_query/base_multi_model_image_query_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABC -from attr import field, define +from attrs import field, define from griptape.drivers import BaseImageQueryDriver, BaseImageQueryModelDriver diff --git a/griptape/drivers/image_query/dummy_image_query_driver.py b/griptape/drivers/image_query/dummy_image_query_driver.py index ebf579dd4..ddc6e2318 100644 --- a/griptape/drivers/image_query/dummy_image_query_driver.py +++ b/griptape/drivers/image_query/dummy_image_query_driver.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, ImageArtifact from griptape.drivers import BaseImageQueryDriver diff --git a/griptape/drivers/image_query/openai_image_query_driver.py b/griptape/drivers/image_query/openai_image_query_driver.py index 515bdcc7c..8b0020c2c 100644 --- a/griptape/drivers/image_query/openai_image_query_driver.py +++ b/griptape/drivers/image_query/openai_image_query_driver.py @@ -2,7 +2,7 @@ from typing import Literal, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from openai.types.chat import ( ChatCompletionUserMessageParam, ChatCompletionContentPartParam, diff --git a/griptape/drivers/image_query_model/base_image_query_model_driver.py b/griptape/drivers/image_query_model/base_image_query_model_driver.py index 9bddbb979..746a9f84c 100644 --- a/griptape/drivers/image_query_model/base_image_query_model_driver.py +++ b/griptape/drivers/image_query_model/base_image_query_model_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from abc import ABC, abstractmethod -from attr import define +from attrs import define from griptape.artifacts import TextArtifact, ImageArtifact from griptape.mixins import SerializableMixin diff --git a/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py b/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py index df7dd326a..3d3ca0164 100644 --- a/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py +++ b/griptape/drivers/image_query_model/bedrock_claude_image_query_model_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define +from attrs import define from griptape.artifacts import ImageArtifact, TextArtifact from griptape.drivers import BaseImageQueryModelDriver diff --git a/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py b/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py index 545ad559b..87c3667fe 100644 --- a/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py +++ b/griptape/drivers/memory/conversation/amazon_dynamodb_conversation_memory_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from typing import Optional, TYPE_CHECKING, Any from griptape.utils import import_optional_dependency from griptape.drivers import BaseConversationMemoryDriver diff --git a/griptape/drivers/memory/conversation/local_conversation_memory_driver.py b/griptape/drivers/memory/conversation/local_conversation_memory_driver.py index b22c1c896..9e3f4ffc9 100644 --- a/griptape/drivers/memory/conversation/local_conversation_memory_driver.py +++ b/griptape/drivers/memory/conversation/local_conversation_memory_driver.py @@ -1,5 +1,5 @@ import os -from attr import define, field +from attrs import define, field from typing import Optional from griptape.drivers import BaseConversationMemoryDriver from griptape.memory.structure import BaseConversationMemory diff --git a/griptape/drivers/memory/conversation/redis_conversation_memory_driver.py b/griptape/drivers/memory/conversation/redis_conversation_memory_driver.py index 0531d5f9d..3de8737b8 100644 --- a/griptape/drivers/memory/conversation/redis_conversation_memory_driver.py +++ b/griptape/drivers/memory/conversation/redis_conversation_memory_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations import uuid -from attr import define, field, Factory +from attrs import define, field, Factory from typing import Optional, TYPE_CHECKING from griptape.drivers import BaseConversationMemoryDriver from griptape.memory.structure import BaseConversationMemory diff --git a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py index b645da39a..0675e7f92 100644 --- a/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_bedrock_prompt_driver.py @@ -2,7 +2,7 @@ import json from typing import TYPE_CHECKING, Any from collections.abc import Iterator -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.utils import import_optional_dependency from .base_multi_model_prompt_driver import BaseMultiModelPromptDriver diff --git a/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py b/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py index bca558c72..342faf909 100644 --- a/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py +++ b/griptape/drivers/prompt/amazon_sagemaker_prompt_driver.py @@ -2,7 +2,7 @@ import json from typing import TYPE_CHECKING, Any from collections.abc import Iterator -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.utils import import_optional_dependency from .base_multi_model_prompt_driver import BaseMultiModelPromptDriver diff --git a/griptape/drivers/prompt/anthropic_prompt_driver.py b/griptape/drivers/prompt/anthropic_prompt_driver.py index 35b411ac5..486233643 100644 --- a/griptape/drivers/prompt/anthropic_prompt_driver.py +++ b/griptape/drivers/prompt/anthropic_prompt_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Optional, Any from collections.abc import Iterator -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.utils import PromptStack, import_optional_dependency from griptape.drivers import BasePromptDriver diff --git a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py index 0583369c4..41c91cb65 100644 --- a/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_chat_prompt_driver.py @@ -1,4 +1,4 @@ -from attr import define, field, Factory +from attrs import define, field, Factory from typing import Callable, Optional from griptape.utils import PromptStack from griptape.drivers import OpenAiChatPromptDriver diff --git a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py b/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py index 89f2651ef..4ff2a4902 100644 --- a/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py +++ b/griptape/drivers/prompt/azure_openai_completion_prompt_driver.py @@ -1,5 +1,5 @@ from typing import Callable, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import OpenAiCompletionPromptDriver import openai diff --git a/griptape/drivers/prompt/base_prompt_driver.py b/griptape/drivers/prompt/base_prompt_driver.py index ef6a35bcf..096035f8b 100644 --- a/griptape/drivers/prompt/base_prompt_driver.py +++ b/griptape/drivers/prompt/base_prompt_driver.py @@ -2,7 +2,7 @@ from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Optional, Callable from collections.abc import Iterator -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.events import StartPromptEvent, FinishPromptEvent, CompletionChunkEvent from griptape.mixins.serializable_mixin import SerializableMixin from griptape.utils import PromptStack diff --git a/griptape/drivers/prompt/cohere_prompt_driver.py b/griptape/drivers/prompt/cohere_prompt_driver.py index 07ae7717d..2f85c49bf 100644 --- a/griptape/drivers/prompt/cohere_prompt_driver.py +++ b/griptape/drivers/prompt/cohere_prompt_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from collections.abc import Iterator -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver from griptape.tokenizers import CohereTokenizer diff --git a/griptape/drivers/prompt/google_prompt_driver.py b/griptape/drivers/prompt/google_prompt_driver.py index b576a440b..9f833c035 100644 --- a/griptape/drivers/prompt/google_prompt_driver.py +++ b/griptape/drivers/prompt/google_prompt_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from collections.abc import Iterator from typing import TYPE_CHECKING, Optional, Any -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.utils import PromptStack, import_optional_dependency from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver diff --git a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py index a1a6f31d5..062672aa8 100644 --- a/griptape/drivers/prompt/huggingface_hub_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_hub_prompt_driver.py @@ -3,7 +3,7 @@ from collections.abc import Iterator from typing import TYPE_CHECKING -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver diff --git a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py index 9fb8b9ece..bde6d5e4e 100644 --- a/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py +++ b/griptape/drivers/prompt/huggingface_pipeline_prompt_driver.py @@ -1,6 +1,6 @@ from collections.abc import Iterator -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.artifacts import TextArtifact from griptape.drivers import BasePromptDriver diff --git a/griptape/drivers/prompt/openai_chat_prompt_driver.py b/griptape/drivers/prompt/openai_chat_prompt_driver.py index eee6e2d97..3d19063d3 100644 --- a/griptape/drivers/prompt/openai_chat_prompt_driver.py +++ b/griptape/drivers/prompt/openai_chat_prompt_driver.py @@ -2,7 +2,7 @@ from typing import Optional, Any, Literal from collections.abc import Iterator import openai -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver diff --git a/griptape/drivers/prompt/openai_completion_prompt_driver.py b/griptape/drivers/prompt/openai_completion_prompt_driver.py index 92ae4f36f..1a738a487 100644 --- a/griptape/drivers/prompt/openai_completion_prompt_driver.py +++ b/griptape/drivers/prompt/openai_completion_prompt_driver.py @@ -1,6 +1,6 @@ from typing import Optional from collections.abc import Iterator -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver diff --git a/griptape/drivers/prompt_model/base_prompt_model_driver.py b/griptape/drivers/prompt_model/base_prompt_model_driver.py index 9738127db..de9b6b6d6 100644 --- a/griptape/drivers/prompt_model/base_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/base_prompt_model_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABC, abstractmethod from typing import Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver diff --git a/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py index 1233a8f04..032940d66 100644 --- a/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_claude_prompt_model_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Optional import json -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.utils import PromptStack from griptape.drivers import BasePromptModelDriver, AmazonBedrockPromptDriver diff --git a/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py index 47d9f1199..3b51eef1c 100644 --- a/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_jurassic_prompt_model_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Optional import json -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.utils import PromptStack from griptape.drivers import BasePromptModelDriver diff --git a/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py index ae7de03eb..6c6dab1d2 100644 --- a/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_llama_prompt_model_driver.py @@ -2,7 +2,7 @@ import json import itertools as it from typing import Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.utils import PromptStack from griptape.drivers import BasePromptModelDriver diff --git a/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py b/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py index 5e03e491a..00621416a 100644 --- a/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/bedrock_titan_prompt_model_driver.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Optional import json -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.utils import PromptStack from griptape.drivers import BasePromptModelDriver diff --git a/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py b/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py index 0fd50386b..a6859f13c 100644 --- a/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/sagemaker_falcon_prompt_model_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.utils import PromptStack, import_optional_dependency from griptape.drivers import BasePromptModelDriver diff --git a/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py b/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py index 31f22427d..7864a70a8 100644 --- a/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py +++ b/griptape/drivers/prompt_model/sagemaker_llama_prompt_model_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.utils import PromptStack, import_optional_dependency from griptape.drivers import BasePromptModelDriver diff --git a/griptape/drivers/sql/amazon_redshift_sql_driver.py b/griptape/drivers/sql/amazon_redshift_sql_driver.py index 51acbfa04..e6ec8b2b9 100644 --- a/griptape/drivers/sql/amazon_redshift_sql_driver.py +++ b/griptape/drivers/sql/amazon_redshift_sql_driver.py @@ -2,7 +2,7 @@ import time from typing import Optional, TYPE_CHECKING, Any from griptape.drivers import BaseSqlDriver -from attr import Factory, define, field +from attrs import Factory, define, field if TYPE_CHECKING: import boto3 diff --git a/griptape/drivers/sql/base_sql_driver.py b/griptape/drivers/sql/base_sql_driver.py index 95d1d0fa2..564746389 100644 --- a/griptape/drivers/sql/base_sql_driver.py +++ b/griptape/drivers/sql/base_sql_driver.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod from dataclasses import dataclass from typing import Optional, Any -from attr import define +from attrs import define @define diff --git a/griptape/drivers/sql/snowflake_sql_driver.py b/griptape/drivers/sql/snowflake_sql_driver.py index c4519b6c8..4c85ab3a3 100644 --- a/griptape/drivers/sql/snowflake_sql_driver.py +++ b/griptape/drivers/sql/snowflake_sql_driver.py @@ -2,7 +2,7 @@ from typing import Callable, Optional, TYPE_CHECKING, Any from griptape.utils import import_optional_dependency from griptape.drivers import BaseSqlDriver -from attr import Factory, define, field +from attrs import Factory, define, field if TYPE_CHECKING: from sqlalchemy.engine import Engine diff --git a/griptape/drivers/sql/sql_driver.py b/griptape/drivers/sql/sql_driver.py index ad6d5637c..a789a90c3 100644 --- a/griptape/drivers/sql/sql_driver.py +++ b/griptape/drivers/sql/sql_driver.py @@ -2,7 +2,7 @@ from typing import Optional, TYPE_CHECKING, Any from griptape.drivers import BaseSqlDriver from griptape.utils import import_optional_dependency -from attr import define, field +from attrs import define, field if TYPE_CHECKING: from sqlalchemy.engine import Engine diff --git a/griptape/drivers/text_to_speech/base_text_to_speech_driver.py b/griptape/drivers/text_to_speech/base_text_to_speech_driver.py index e1365a69f..4f6dbcf25 100644 --- a/griptape/drivers/text_to_speech/base_text_to_speech_driver.py +++ b/griptape/drivers/text_to_speech/base_text_to_speech_driver.py @@ -3,7 +3,7 @@ from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.artifacts.audio_artifact import AudioArtifact from griptape.events.finish_text_to_speech_event import FinishTextToSpeechEvent diff --git a/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py b/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py index cf342b87b..02d55c023 100644 --- a/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py +++ b/griptape/drivers/text_to_speech/elevenlabs_text_to_speech_driver.py @@ -2,7 +2,7 @@ from typing import Any -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts.audio_artifact import AudioArtifact from griptape.drivers import BaseTextToSpeechDriver diff --git a/griptape/drivers/text_to_speech/openai_text_to_speech_driver.py b/griptape/drivers/text_to_speech/openai_text_to_speech_driver.py index e6022b29d..2d6e7b155 100644 --- a/griptape/drivers/text_to_speech/openai_text_to_speech_driver.py +++ b/griptape/drivers/text_to_speech/openai_text_to_speech_driver.py @@ -3,7 +3,7 @@ from typing import Optional, Literal import openai -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts.audio_artifact import AudioArtifact from griptape.drivers import BaseTextToSpeechDriver diff --git a/griptape/drivers/vector/amazon_opensearch_vector_store_driver.py b/griptape/drivers/vector/amazon_opensearch_vector_store_driver.py index 15ff16546..668f89b7e 100644 --- a/griptape/drivers/vector/amazon_opensearch_vector_store_driver.py +++ b/griptape/drivers/vector/amazon_opensearch_vector_store_driver.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from typing import Optional, TYPE_CHECKING from griptape.drivers import OpenSearchVectorStoreDriver from griptape.utils import import_optional_dependency, str_to_hash diff --git a/griptape/drivers/vector/azure_mongodb_vector_store_driver.py b/griptape/drivers/vector/azure_mongodb_vector_store_driver.py index 47eb7d0d1..2e9968b63 100644 --- a/griptape/drivers/vector/azure_mongodb_vector_store_driver.py +++ b/griptape/drivers/vector/azure_mongodb_vector_store_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional -from attr import define +from attrs import define from griptape.drivers import BaseVectorStoreDriver, MongoDbAtlasVectorStoreDriver diff --git a/griptape/drivers/vector/base_vector_store_driver.py b/griptape/drivers/vector/base_vector_store_driver.py index 0667df8a9..55a758da1 100644 --- a/griptape/drivers/vector/base_vector_store_driver.py +++ b/griptape/drivers/vector/base_vector_store_driver.py @@ -2,7 +2,7 @@ from abc import ABC, abstractmethod from concurrent import futures from dataclasses import dataclass -from attr import define, field, Factory +from attrs import define, field, Factory from typing import Optional from griptape import utils from griptape.mixins import SerializableMixin diff --git a/griptape/drivers/vector/local_vector_store_driver.py b/griptape/drivers/vector/local_vector_store_driver.py index bea8dc579..4b9dae00f 100644 --- a/griptape/drivers/vector/local_vector_store_driver.py +++ b/griptape/drivers/vector/local_vector_store_driver.py @@ -3,7 +3,7 @@ from numpy.linalg import norm from griptape import utils from griptape.drivers import BaseVectorStoreDriver -from attr import define, field +from attrs import define, field @define diff --git a/griptape/drivers/vector/marqo_vector_store_driver.py b/griptape/drivers/vector/marqo_vector_store_driver.py index 100c75d79..cccc716f8 100644 --- a/griptape/drivers/vector/marqo_vector_store_driver.py +++ b/griptape/drivers/vector/marqo_vector_store_driver.py @@ -3,7 +3,7 @@ from griptape.utils import import_optional_dependency from griptape.drivers import BaseVectorStoreDriver from griptape.artifacts import TextArtifact -from attr import define, field, Factory +from attrs import define, field, Factory if TYPE_CHECKING: import marqo diff --git a/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py b/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py index df47dc5e1..c5368de3d 100644 --- a/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py +++ b/griptape/drivers/vector/mongodb_atlas_vector_store_driver.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import BaseVectorStoreDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/vector/opensearch_vector_store_driver.py b/griptape/drivers/vector/opensearch_vector_store_driver.py index 41bae7254..7ff00d2de 100644 --- a/griptape/drivers/vector/opensearch_vector_store_driver.py +++ b/griptape/drivers/vector/opensearch_vector_store_driver.py @@ -4,7 +4,7 @@ import logging from griptape.utils import import_optional_dependency from griptape.drivers import BaseVectorStoreDriver -from attr import define, field, Factory +from attrs import define, field, Factory if TYPE_CHECKING: from opensearchpy import OpenSearch diff --git a/griptape/drivers/vector/pgvector_vector_store_driver.py b/griptape/drivers/vector/pgvector_vector_store_driver.py index 29d5afb67..8058c8774 100644 --- a/griptape/drivers/vector/pgvector_vector_store_driver.py +++ b/griptape/drivers/vector/pgvector_vector_store_driver.py @@ -1,6 +1,6 @@ import uuid from typing import Optional, Any, cast -from attr import define, field, Factory +from attrs import define, field, Factory from dataclasses import dataclass from griptape.drivers import BaseVectorStoreDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/vector/pinecone_vector_store_driver.py b/griptape/drivers/vector/pinecone_vector_store_driver.py index 7b573ed68..daf378087 100644 --- a/griptape/drivers/vector/pinecone_vector_store_driver.py +++ b/griptape/drivers/vector/pinecone_vector_store_driver.py @@ -2,7 +2,7 @@ from typing import Optional, TYPE_CHECKING, Any from griptape.utils import str_to_hash, import_optional_dependency from griptape.drivers import BaseVectorStoreDriver -from attr import define, field +from attrs import define, field if TYPE_CHECKING: import pinecone diff --git a/griptape/drivers/vector/redis_vector_store_driver.py b/griptape/drivers/vector/redis_vector_store_driver.py index b347bfa41..6e39775b7 100644 --- a/griptape/drivers/vector/redis_vector_store_driver.py +++ b/griptape/drivers/vector/redis_vector_store_driver.py @@ -4,7 +4,7 @@ import numpy as np from griptape.utils import import_optional_dependency, str_to_hash from typing import Optional, TYPE_CHECKING -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import BaseVectorStoreDriver logging.basicConfig(level=logging.WARNING) diff --git a/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py b/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py index 3b4931579..eb33aeb19 100644 --- a/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py +++ b/griptape/drivers/web_scraper/markdownify_web_scraper_driver.py @@ -1,6 +1,6 @@ import re from typing import Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.drivers import BaseWebScraperDriver from griptape.utils import import_optional_dependency diff --git a/griptape/drivers/web_scraper/trafilatura_web_scraper_driver.py b/griptape/drivers/web_scraper/trafilatura_web_scraper_driver.py index 787dd24d7..cc0ca3a18 100644 --- a/griptape/drivers/web_scraper/trafilatura_web_scraper_driver.py +++ b/griptape/drivers/web_scraper/trafilatura_web_scraper_driver.py @@ -1,6 +1,6 @@ import json import logging -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.drivers import BaseWebScraperDriver from griptape.utils import import_optional_dependency diff --git a/griptape/engines/audio/text_to_speech_engine.py b/griptape/engines/audio/text_to_speech_engine.py index 29118848e..634837d82 100644 --- a/griptape/engines/audio/text_to_speech_engine.py +++ b/griptape/engines/audio/text_to_speech_engine.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts.audio_artifact import AudioArtifact from griptape.drivers import BaseTextToSpeechDriver diff --git a/griptape/engines/extraction/base_extraction_engine.py b/griptape/engines/extraction/base_extraction_engine.py index 760a77d39..e8bd29129 100644 --- a/griptape/engines/extraction/base_extraction_engine.py +++ b/griptape/engines/extraction/base_extraction_engine.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Optional from abc import ABC, abstractmethod -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import ListArtifact, ErrorArtifact from griptape.chunkers import BaseChunker, TextChunker from griptape.drivers import BasePromptDriver diff --git a/griptape/engines/extraction/csv_extraction_engine.py b/griptape/engines/extraction/csv_extraction_engine.py index 696abd6d3..fe4d0e6c7 100644 --- a/griptape/engines/extraction/csv_extraction_engine.py +++ b/griptape/engines/extraction/csv_extraction_engine.py @@ -2,7 +2,7 @@ from typing import Optional, cast import csv import io -from attr import field, Factory, define +from attrs import field, Factory, define from griptape.artifacts import TextArtifact, CsvRowArtifact, ListArtifact, ErrorArtifact from griptape.utils import PromptStack from griptape.engines import BaseExtractionEngine diff --git a/griptape/engines/extraction/json_extraction_engine.py b/griptape/engines/extraction/json_extraction_engine.py index e14e40d5a..05db19d40 100644 --- a/griptape/engines/extraction/json_extraction_engine.py +++ b/griptape/engines/extraction/json_extraction_engine.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Optional, cast import json -from attr import field, Factory, define +from attrs import field, Factory, define from griptape.artifacts import TextArtifact, ListArtifact, ErrorArtifact from griptape.engines import BaseExtractionEngine from griptape.utils import J2 diff --git a/griptape/engines/image/base_image_generation_engine.py b/griptape/engines/image/base_image_generation_engine.py index 73dd5ac74..2c65c1a60 100644 --- a/griptape/engines/image/base_image_generation_engine.py +++ b/griptape/engines/image/base_image_generation_engine.py @@ -1,7 +1,7 @@ from __future__ import annotations from abc import ABC, abstractmethod -from attr import field, define +from attrs import field, define from typing import Optional from griptape.artifacts import ImageArtifact diff --git a/griptape/engines/image/inpainting_image_generation_engine.py b/griptape/engines/image/inpainting_image_generation_engine.py index 3f1295866..7fb83d66f 100644 --- a/griptape/engines/image/inpainting_image_generation_engine.py +++ b/griptape/engines/image/inpainting_image_generation_engine.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define +from attrs import define from typing import Optional from griptape.engines import BaseImageGenerationEngine diff --git a/griptape/engines/image/outpainting_image_generation_engine.py b/griptape/engines/image/outpainting_image_generation_engine.py index 0d4008543..135e3c77d 100644 --- a/griptape/engines/image/outpainting_image_generation_engine.py +++ b/griptape/engines/image/outpainting_image_generation_engine.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define +from attrs import define from typing import Optional from griptape.artifacts import ImageArtifact diff --git a/griptape/engines/image/prompt_image_generation_engine.py b/griptape/engines/image/prompt_image_generation_engine.py index c7d304beb..4b4a9ce63 100644 --- a/griptape/engines/image/prompt_image_generation_engine.py +++ b/griptape/engines/image/prompt_image_generation_engine.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define +from attrs import define from typing import Optional from griptape.rules import Ruleset diff --git a/griptape/engines/image/variation_image_generation_engine.py b/griptape/engines/image/variation_image_generation_engine.py index e07a6fc9d..7b932ac2a 100644 --- a/griptape/engines/image/variation_image_generation_engine.py +++ b/griptape/engines/image/variation_image_generation_engine.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define +from attrs import define from typing import Optional from griptape.engines import BaseImageGenerationEngine diff --git a/griptape/engines/image_query/image_query_engine.py b/griptape/engines/image_query/image_query_engine.py index 4cbac9755..9cb61cd92 100644 --- a/griptape/engines/image_query/image_query_engine.py +++ b/griptape/engines/image_query/image_query_engine.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from griptape.artifacts import ImageArtifact, TextArtifact from griptape.drivers import BaseImageQueryDriver diff --git a/griptape/engines/query/base_query_engine.py b/griptape/engines/query/base_query_engine.py index 9477b3bd0..61a488547 100644 --- a/griptape/engines/query/base_query_engine.py +++ b/griptape/engines/query/base_query_engine.py @@ -1,6 +1,6 @@ from __future__ import annotations from abc import ABC, abstractmethod -from attr import define +from attrs import define from typing import Optional from griptape.artifacts import TextArtifact, ListArtifact from griptape.rules import Ruleset diff --git a/griptape/engines/query/vector_query_engine.py b/griptape/engines/query/vector_query_engine.py index 34667d592..adfa4b2db 100644 --- a/griptape/engines/query/vector_query_engine.py +++ b/griptape/engines/query/vector_query_engine.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact from griptape.utils import PromptStack from griptape.engines import BaseQueryEngine diff --git a/griptape/engines/summary/base_summary_engine.py b/griptape/engines/summary/base_summary_engine.py index 4a5aca520..26a5cd46d 100644 --- a/griptape/engines/summary/base_summary_engine.py +++ b/griptape/engines/summary/base_summary_engine.py @@ -1,6 +1,6 @@ from abc import ABC, abstractmethod from typing import Optional -from attr import define +from attrs import define from griptape.artifacts import TextArtifact, ListArtifact from griptape.rules import Ruleset diff --git a/griptape/engines/summary/prompt_summary_engine.py b/griptape/engines/summary/prompt_summary_engine.py index bb74cfd6f..0da99cb0a 100644 --- a/griptape/engines/summary/prompt_summary_engine.py +++ b/griptape/engines/summary/prompt_summary_engine.py @@ -1,5 +1,5 @@ from typing import Optional, cast -from attr import define, Factory, field +from attrs import define, Factory, field from griptape.artifacts import TextArtifact, ListArtifact from griptape.chunkers import BaseChunker, TextChunker from griptape.utils import PromptStack diff --git a/griptape/events/base_event.py b/griptape/events/base_event.py index 48a48890e..9ab8e6c47 100644 --- a/griptape/events/base_event.py +++ b/griptape/events/base_event.py @@ -4,7 +4,7 @@ import uuid from abc import ABC -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.mixins import SerializableMixin diff --git a/griptape/events/base_image_query_event.py b/griptape/events/base_image_query_event.py index 8ed796072..b634f2bf0 100644 --- a/griptape/events/base_image_query_event.py +++ b/griptape/events/base_image_query_event.py @@ -1,6 +1,6 @@ from abc import ABC -from attr import define +from attrs import define from griptape.events import BaseEvent diff --git a/griptape/events/completion_chunk_event.py b/griptape/events/completion_chunk_event.py index 829b07c1b..a4244bd5d 100644 --- a/griptape/events/completion_chunk_event.py +++ b/griptape/events/completion_chunk_event.py @@ -1,4 +1,4 @@ -from attr import field +from attrs import field from attrs import define from griptape.events.base_event import BaseEvent diff --git a/griptape/events/finish_image_query_event.py b/griptape/events/finish_image_query_event.py index bdcad2ca3..3eb2e7ccb 100644 --- a/griptape/events/finish_image_query_event.py +++ b/griptape/events/finish_image_query_event.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from griptape.events.base_image_query_event import BaseImageQueryEvent diff --git a/griptape/events/start_image_generation_event.py b/griptape/events/start_image_generation_event.py index a8f2d6b2a..c673f34c4 100644 --- a/griptape/events/start_image_generation_event.py +++ b/griptape/events/start_image_generation_event.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Optional -from attr import define, field +from attrs import define, field from .base_image_generation_event import BaseImageGenerationEvent diff --git a/griptape/events/start_image_query_event.py b/griptape/events/start_image_query_event.py index e72579b04..46001a43f 100644 --- a/griptape/events/start_image_query_event.py +++ b/griptape/events/start_image_query_event.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from griptape.events.base_image_query_event import BaseImageQueryEvent diff --git a/griptape/events/start_text_to_speech_event.py b/griptape/events/start_text_to_speech_event.py index 9824a9827..4c3f27ca0 100644 --- a/griptape/events/start_text_to_speech_event.py +++ b/griptape/events/start_text_to_speech_event.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from .base_text_to_speech_event import BaseTextToSpeechEvent diff --git a/griptape/loaders/base_loader.py b/griptape/loaders/base_loader.py index 56c3e840c..1648b8f26 100644 --- a/griptape/loaders/base_loader.py +++ b/griptape/loaders/base_loader.py @@ -5,7 +5,7 @@ from typing import Any, Optional from collections.abc import Mapping, Sequence -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import BaseArtifact from griptape.utils.futures import execute_futures_dict diff --git a/griptape/loaders/blob_loader.py b/griptape/loaders/blob_loader.py index c85c63bcb..8b9ea4bf9 100644 --- a/griptape/loaders/blob_loader.py +++ b/griptape/loaders/blob_loader.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Any, Union, cast -from attr import define +from attrs import define from griptape.artifacts import BlobArtifact, ErrorArtifact from griptape.loaders import BaseLoader diff --git a/griptape/loaders/csv_loader.py b/griptape/loaders/csv_loader.py index 72fdcc73a..d396f80bc 100644 --- a/griptape/loaders/csv_loader.py +++ b/griptape/loaders/csv_loader.py @@ -3,7 +3,7 @@ from io import StringIO from typing import Optional, Union, cast -from attr import define, field +from attrs import define, field from griptape.artifacts import CsvRowArtifact, ErrorArtifact from griptape.drivers import BaseEmbeddingDriver diff --git a/griptape/loaders/dataframe_loader.py b/griptape/loaders/dataframe_loader.py index 1c652d8d2..3d5a0f48b 100644 --- a/griptape/loaders/dataframe_loader.py +++ b/griptape/loaders/dataframe_loader.py @@ -2,7 +2,7 @@ from typing import Optional, TYPE_CHECKING, cast -from attr import define, field +from attrs import define, field from griptape.artifacts import CsvRowArtifact from griptape.drivers import BaseEmbeddingDriver diff --git a/griptape/loaders/email_loader.py b/griptape/loaders/email_loader.py index dbb6f3afe..a7598e2a6 100644 --- a/griptape/loaders/email_loader.py +++ b/griptape/loaders/email_loader.py @@ -4,7 +4,7 @@ import logging import imaplib -from attr import astuple, define, field +from attrs import astuple, define, field from griptape.utils import import_optional_dependency from griptape.artifacts import ErrorArtifact, ListArtifact, TextArtifact diff --git a/griptape/loaders/image_loader.py b/griptape/loaders/image_loader.py index 71908a3bc..ca0ba776a 100644 --- a/griptape/loaders/image_loader.py +++ b/griptape/loaders/image_loader.py @@ -3,7 +3,7 @@ from io import BytesIO from typing import Optional, cast -from attr import define, field +from attrs import define, field from griptape.utils import import_optional_dependency from griptape.artifacts import ImageArtifact diff --git a/griptape/loaders/pdf_loader.py b/griptape/loaders/pdf_loader.py index 66b1e1a01..8e4560cfc 100644 --- a/griptape/loaders/pdf_loader.py +++ b/griptape/loaders/pdf_loader.py @@ -1,7 +1,7 @@ from __future__ import annotations from io import BytesIO -from attr import define, field, Factory +from attrs import define, field, Factory from typing import Optional, Union, cast from griptape.artifacts.error_artifact import ErrorArtifact diff --git a/griptape/loaders/sql_loader.py b/griptape/loaders/sql_loader.py index 527b74de4..c20fb022d 100644 --- a/griptape/loaders/sql_loader.py +++ b/griptape/loaders/sql_loader.py @@ -1,6 +1,6 @@ from typing import Optional, cast -from attr import define, field +from attrs import define, field from griptape.artifacts import CsvRowArtifact from griptape.drivers import BaseSqlDriver, BaseEmbeddingDriver diff --git a/griptape/loaders/text_loader.py b/griptape/loaders/text_loader.py index 3bba6023d..e8a80fa64 100644 --- a/griptape/loaders/text_loader.py +++ b/griptape/loaders/text_loader.py @@ -2,7 +2,7 @@ from typing import Optional, Union, cast -from attr import field, define, Factory +from attrs import field, define, Factory from griptape.artifacts import TextArtifact from griptape.artifacts.error_artifact import ErrorArtifact diff --git a/griptape/loaders/web_loader.py b/griptape/loaders/web_loader.py index d6e38f7e0..f8862f7cd 100644 --- a/griptape/loaders/web_loader.py +++ b/griptape/loaders/web_loader.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts.error_artifact import ErrorArtifact from griptape.drivers import BaseWebScraperDriver, TrafilaturaWebScraperDriver from griptape.artifacts import TextArtifact diff --git a/griptape/memory/meta/action_subtask_meta_entry.py b/griptape/memory/meta/action_subtask_meta_entry.py index 19c60e8fa..6b5124971 100644 --- a/griptape/memory/meta/action_subtask_meta_entry.py +++ b/griptape/memory/meta/action_subtask_meta_entry.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional -from attr import field, define +from attrs import field, define from griptape.memory.meta import BaseMetaEntry diff --git a/griptape/memory/meta/base_meta_entry.py b/griptape/memory/meta/base_meta_entry.py index a7be50dda..c79ec4731 100644 --- a/griptape/memory/meta/base_meta_entry.py +++ b/griptape/memory/meta/base_meta_entry.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define +from attrs import define from abc import ABC from griptape.mixins import SerializableMixin diff --git a/griptape/memory/meta/meta_memory.py b/griptape/memory/meta/meta_memory.py index 05d256455..214e6e285 100644 --- a/griptape/memory/meta/meta_memory.py +++ b/griptape/memory/meta/meta_memory.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from griptape.memory.meta import BaseMetaEntry diff --git a/griptape/memory/structure/base_conversation_memory.py b/griptape/memory/structure/base_conversation_memory.py index 85c90d3e1..6db05c92c 100644 --- a/griptape/memory/structure/base_conversation_memory.py +++ b/griptape/memory/structure/base_conversation_memory.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.memory.structure import Run from griptape.utils import PromptStack from griptape.mixins import SerializableMixin diff --git a/griptape/memory/structure/conversation_memory.py b/griptape/memory/structure/conversation_memory.py index 71e41c431..94e73d80c 100644 --- a/griptape/memory/structure/conversation_memory.py +++ b/griptape/memory/structure/conversation_memory.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define +from attrs import define from typing import Optional from griptape.memory.structure import Run, BaseConversationMemory from griptape.utils import PromptStack diff --git a/griptape/memory/structure/run.py b/griptape/memory/structure/run.py index f725bb9f4..c5a2b9b55 100644 --- a/griptape/memory/structure/run.py +++ b/griptape/memory/structure/run.py @@ -1,5 +1,5 @@ import uuid -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.mixins import SerializableMixin diff --git a/griptape/memory/structure/summary_conversation_memory.py b/griptape/memory/structure/summary_conversation_memory.py index fa06a3c76..e4d5597d5 100644 --- a/griptape/memory/structure/summary_conversation_memory.py +++ b/griptape/memory/structure/summary_conversation_memory.py @@ -1,7 +1,7 @@ from __future__ import annotations import logging from typing import TYPE_CHECKING, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.utils import J2, PromptStack from griptape.memory.structure import ConversationMemory diff --git a/griptape/memory/task/storage/base_artifact_storage.py b/griptape/memory/task/storage/base_artifact_storage.py index cb3d963be..fbd226363 100644 --- a/griptape/memory/task/storage/base_artifact_storage.py +++ b/griptape/memory/task/storage/base_artifact_storage.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import Any from abc import ABC, abstractmethod -from attr import define +from attrs import define from griptape.artifacts import BaseArtifact, ListArtifact, TextArtifact, InfoArtifact diff --git a/griptape/memory/task/storage/blob_artifact_storage.py b/griptape/memory/task/storage/blob_artifact_storage.py index 322d06617..79b5798df 100644 --- a/griptape/memory/task/storage/blob_artifact_storage.py +++ b/griptape/memory/task/storage/blob_artifact_storage.py @@ -1,5 +1,5 @@ from typing import Any -from attr import define, field +from attrs import define, field from griptape.artifacts import BaseArtifact, ListArtifact, BlobArtifact, InfoArtifact from griptape.memory.task.storage import BaseArtifactStorage diff --git a/griptape/memory/task/storage/text_artifact_storage.py b/griptape/memory/task/storage/text_artifact_storage.py index 8e4423f54..3b3162751 100644 --- a/griptape/memory/task/storage/text_artifact_storage.py +++ b/griptape/memory/task/storage/text_artifact_storage.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, BaseArtifact, ListArtifact from griptape.memory.task.storage import BaseArtifactStorage diff --git a/griptape/memory/task/task_memory.py b/griptape/memory/task/task_memory.py index 597b151c0..2f1fdbe16 100644 --- a/griptape/memory/task/task_memory.py +++ b/griptape/memory/task/task_memory.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional, Any, Callable -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import BaseArtifact, InfoArtifact, ListArtifact, ErrorArtifact, TextArtifact from griptape.memory.meta import ActionSubtaskMetaEntry from griptape.mixins import ActivityMixin diff --git a/griptape/mixins/actions_subtask_origin_mixin.py b/griptape/mixins/actions_subtask_origin_mixin.py index 01711140b..22f06a1c6 100644 --- a/griptape/mixins/actions_subtask_origin_mixin.py +++ b/griptape/mixins/actions_subtask_origin_mixin.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from abc import abstractmethod -from attr import define +from attrs import define from schema import Schema, Literal if TYPE_CHECKING: diff --git a/griptape/mixins/activity_mixin.py b/griptape/mixins/activity_mixin.py index a28a8b412..73810864f 100644 --- a/griptape/mixins/activity_mixin.py +++ b/griptape/mixins/activity_mixin.py @@ -1,6 +1,6 @@ import inspect from typing import Optional, Callable -from attr import define, field +from attrs import define, field from jinja2 import Template from schema import Schema, Literal diff --git a/griptape/mixins/exponential_backoff_mixin.py b/griptape/mixins/exponential_backoff_mixin.py index 6559b7460..5045575f1 100644 --- a/griptape/mixins/exponential_backoff_mixin.py +++ b/griptape/mixins/exponential_backoff_mixin.py @@ -1,8 +1,8 @@ import logging from abc import ABC -from attr import define, field +from attrs import define, field from tenacity import Retrying, wait_exponential, stop_after_attempt, retry_if_not_exception_type -from typing import Tuple, Type, Callable +from typing import Callable @define(slots=False) @@ -11,7 +11,7 @@ class ExponentialBackoffMixin(ABC): max_retry_delay: float = field(default=10, kw_only=True) max_attempts: int = field(default=10, kw_only=True) after_hook: Callable = field(default=lambda s: logging.warning(s), kw_only=True) - ignored_exception_types: Tuple[Type[Exception], ...] = field(factory=tuple, kw_only=True) + ignored_exception_types: tuple[type[Exception], ...] = field(factory=tuple, kw_only=True) def retrying(self) -> Retrying: return Retrying( diff --git a/griptape/mixins/media_artifact_file_output_mixin.py b/griptape/mixins/media_artifact_file_output_mixin.py index d7d6f584c..14dcd4898 100644 --- a/griptape/mixins/media_artifact_file_output_mixin.py +++ b/griptape/mixins/media_artifact_file_output_mixin.py @@ -3,7 +3,7 @@ import os from typing import TYPE_CHECKING -from attr import define, field +from attrs import define, field from typing import Optional if TYPE_CHECKING: diff --git a/griptape/mixins/rule_mixin.py b/griptape/mixins/rule_mixin.py index 4c7c98225..a89309a15 100644 --- a/griptape/mixins/rule_mixin.py +++ b/griptape/mixins/rule_mixin.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.rules import Ruleset, Rule diff --git a/griptape/mixins/serializable_mixin.py b/griptape/mixins/serializable_mixin.py index ee80f5efa..c7a0bf035 100644 --- a/griptape/mixins/serializable_mixin.py +++ b/griptape/mixins/serializable_mixin.py @@ -3,7 +3,7 @@ import json from typing import TypeVar, Generic, cast, Optional -from attr import Factory, define, field +from attrs import Factory, define, field from abc import ABC from marshmallow import Schema diff --git a/griptape/rules/rule.py b/griptape/rules/rule.py index 5239396c8..f2a33c7e5 100644 --- a/griptape/rules/rule.py +++ b/griptape/rules/rule.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define +from attrs import define @define(frozen=True) diff --git a/griptape/rules/ruleset.py b/griptape/rules/ruleset.py index 71c0a78e7..9a78b58b8 100644 --- a/griptape/rules/ruleset.py +++ b/griptape/rules/ruleset.py @@ -1,4 +1,4 @@ -from attr import field, define +from attrs import field, define from griptape.rules import Rule diff --git a/griptape/structures/agent.py b/griptape/structures/agent.py index aee95dbf8..79b831f63 100644 --- a/griptape/structures/agent.py +++ b/griptape/structures/agent.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.tools import BaseTool from griptape.memory.structure import Run from griptape.structures import Structure diff --git a/griptape/structures/pipeline.py b/griptape/structures/pipeline.py index 8db5cfae9..00c5f1d09 100644 --- a/griptape/structures/pipeline.py +++ b/griptape/structures/pipeline.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional, Any -from attr import define +from attrs import define from griptape.artifacts import ErrorArtifact from griptape.memory.structure import Run from griptape.structures import Structure diff --git a/griptape/structures/workflow.py b/griptape/structures/workflow.py index 3d59b656d..e60efa425 100644 --- a/griptape/structures/workflow.py +++ b/griptape/structures/workflow.py @@ -2,7 +2,7 @@ import concurrent.futures as futures from graphlib import TopologicalSorter from typing import Any -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import ErrorArtifact from griptape.structures import Structure from griptape.tasks import BaseTask diff --git a/griptape/tasks/actions_subtask.py b/griptape/tasks/actions_subtask.py index ef2c2ce6f..d47d1df32 100644 --- a/griptape/tasks/actions_subtask.py +++ b/griptape/tasks/actions_subtask.py @@ -4,7 +4,7 @@ from typing import Optional, TYPE_CHECKING, Callable import schema -from attr import define, field +from attrs import define, field from griptape import utils from griptape.utils import remove_null_values_in_dict_recursively from griptape.mixins import ActionsSubtaskOriginMixin diff --git a/griptape/tasks/base_audio_generation_task.py b/griptape/tasks/base_audio_generation_task.py index 2e5572aba..d401af0a5 100644 --- a/griptape/tasks/base_audio_generation_task.py +++ b/griptape/tasks/base_audio_generation_task.py @@ -2,7 +2,7 @@ from abc import ABC -from attr import define +from attrs import define from griptape.mixins import RuleMixin, BlobArtifactFileOutputMixin from griptape.tasks import BaseTask diff --git a/griptape/tasks/base_image_generation_task.py b/griptape/tasks/base_image_generation_task.py index 2dbab4ce9..75f57b711 100644 --- a/griptape/tasks/base_image_generation_task.py +++ b/griptape/tasks/base_image_generation_task.py @@ -3,7 +3,7 @@ import os from abc import ABC -from attr import field, define +from attrs import field, define from griptape.artifacts import MediaArtifact from griptape.loaders import ImageLoader diff --git a/griptape/tasks/base_multi_text_input_task.py b/griptape/tasks/base_multi_text_input_task.py index eb00af6ca..314cdb596 100644 --- a/griptape/tasks/base_multi_text_input_task.py +++ b/griptape/tasks/base_multi_text_input_task.py @@ -3,7 +3,7 @@ from abc import ABC from typing import Callable -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact from griptape.mixins.rule_mixin import RuleMixin diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index 037a3e526..79552ce66 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Any, Optional from collections.abc import Sequence -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.events import StartTaskEvent, FinishTaskEvent from griptape.artifacts import ErrorArtifact diff --git a/griptape/tasks/base_text_input_task.py b/griptape/tasks/base_text_input_task.py index 3dd5d7009..c5641bb14 100644 --- a/griptape/tasks/base_text_input_task.py +++ b/griptape/tasks/base_text_input_task.py @@ -3,7 +3,7 @@ from abc import ABC from typing import Callable -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.mixins.rule_mixin import RuleMixin diff --git a/griptape/tasks/code_execution_task.py b/griptape/tasks/code_execution_task.py index a1255093d..038642b76 100644 --- a/griptape/tasks/code_execution_task.py +++ b/griptape/tasks/code_execution_task.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import BaseArtifact, ErrorArtifact from griptape.tasks import BaseTextInputTask from typing import Callable diff --git a/griptape/tasks/csv_extraction_task.py b/griptape/tasks/csv_extraction_task.py index 2f5f3db56..8770187f0 100644 --- a/griptape/tasks/csv_extraction_task.py +++ b/griptape/tasks/csv_extraction_task.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.engines import CsvExtractionEngine from griptape.tasks import ExtractionTask diff --git a/griptape/tasks/extraction_task.py b/griptape/tasks/extraction_task.py index 76c0be395..03838ef6c 100644 --- a/griptape/tasks/extraction_task.py +++ b/griptape/tasks/extraction_task.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import ListArtifact, ErrorArtifact from griptape.engines import BaseExtractionEngine from griptape.tasks import BaseTextInputTask diff --git a/griptape/tasks/image_query_task.py b/griptape/tasks/image_query_task.py index 94be4f483..f6791f5a6 100644 --- a/griptape/tasks/image_query_task.py +++ b/griptape/tasks/image_query_task.py @@ -2,7 +2,7 @@ from typing import Callable -from attr import define, field +from attrs import define, field from griptape.artifacts import ImageArtifact, TextArtifact from griptape.engines import ImageQueryEngine diff --git a/griptape/tasks/inpainting_image_generation_task.py b/griptape/tasks/inpainting_image_generation_task.py index f3b2edb7a..374820d01 100644 --- a/griptape/tasks/inpainting_image_generation_task.py +++ b/griptape/tasks/inpainting_image_generation_task.py @@ -2,7 +2,7 @@ from typing import Callable -from attr import define, field +from attrs import define, field from griptape.engines import InpaintingImageGenerationEngine from griptape.artifacts import ImageArtifact, TextArtifact diff --git a/griptape/tasks/outpainting_image_generation_task.py b/griptape/tasks/outpainting_image_generation_task.py index fd2d335e5..a35671de3 100644 --- a/griptape/tasks/outpainting_image_generation_task.py +++ b/griptape/tasks/outpainting_image_generation_task.py @@ -2,7 +2,7 @@ from typing import Callable -from attr import define, field +from attrs import define, field from griptape.engines import OutpaintingImageGenerationEngine from griptape.artifacts import ImageArtifact, TextArtifact diff --git a/griptape/tasks/prompt_image_generation_task.py b/griptape/tasks/prompt_image_generation_task.py index 93404ef84..577abacbb 100644 --- a/griptape/tasks/prompt_image_generation_task.py +++ b/griptape/tasks/prompt_image_generation_task.py @@ -2,7 +2,7 @@ from typing import Callable -from attr import define, field +from attrs import define, field from griptape.engines import PromptImageGenerationEngine from griptape.artifacts import ImageArtifact, TextArtifact diff --git a/griptape/tasks/prompt_task.py b/griptape/tasks/prompt_task.py index 16f7c6dac..75051db74 100644 --- a/griptape/tasks/prompt_task.py +++ b/griptape/tasks/prompt_task.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional, Callable -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.utils import PromptStack from griptape.utils import J2 from griptape.tasks import BaseTextInputTask diff --git a/griptape/tasks/structure_run_task.py b/griptape/tasks/structure_run_task.py index b7a8f9ea9..012f5c235 100644 --- a/griptape/tasks/structure_run_task.py +++ b/griptape/tasks/structure_run_task.py @@ -1,7 +1,7 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import BaseArtifact from griptape.drivers.structure_run.base_structure_run_driver import BaseStructureRunDriver diff --git a/griptape/tasks/text_query_task.py b/griptape/tasks/text_query_task.py index 5fee68103..f35161c17 100644 --- a/griptape/tasks/text_query_task.py +++ b/griptape/tasks/text_query_task.py @@ -1,4 +1,4 @@ -from attr import define, field, Factory +from attrs import define, field, Factory from typing import Optional from griptape.artifacts import TextArtifact from griptape.engines import BaseQueryEngine, VectorQueryEngine diff --git a/griptape/tasks/text_summary_task.py b/griptape/tasks/text_summary_task.py index f10f851d0..648fb1cf1 100644 --- a/griptape/tasks/text_summary_task.py +++ b/griptape/tasks/text_summary_task.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact from griptape.engines import PromptSummaryEngine from griptape.tasks import BaseTextInputTask diff --git a/griptape/tasks/text_to_speech_task.py b/griptape/tasks/text_to_speech_task.py index 8a69227c5..d69e907b1 100644 --- a/griptape/tasks/text_to_speech_task.py +++ b/griptape/tasks/text_to_speech_task.py @@ -2,7 +2,7 @@ from typing import Callable -from attr import define, field +from attrs import define, field from griptape.artifacts.audio_artifact import AudioArtifact from griptape.engines import TextToSpeechEngine diff --git a/griptape/tasks/tool_task.py b/griptape/tasks/tool_task.py index f875186ea..edd90c26e 100644 --- a/griptape/tasks/tool_task.py +++ b/griptape/tasks/tool_task.py @@ -2,7 +2,7 @@ import re import json from typing import Optional, TYPE_CHECKING -from attr import define, field +from attrs import define, field from schema import Schema from griptape import utils diff --git a/griptape/tasks/toolkit_task.py b/griptape/tasks/toolkit_task.py index ead020c47..ed787aa45 100644 --- a/griptape/tasks/toolkit_task.py +++ b/griptape/tasks/toolkit_task.py @@ -1,7 +1,7 @@ from __future__ import annotations import json from typing import TYPE_CHECKING, Callable, Optional -from attr import define, field, Factory +from attrs import define, field, Factory from schema import Schema from griptape import utils diff --git a/griptape/tasks/variation_image_generation_task.py b/griptape/tasks/variation_image_generation_task.py index 1242bc59b..0d1269840 100644 --- a/griptape/tasks/variation_image_generation_task.py +++ b/griptape/tasks/variation_image_generation_task.py @@ -2,7 +2,7 @@ from typing import Callable -from attr import define, field +from attrs import define, field from griptape.engines import VariationImageGenerationEngine from griptape.artifacts import ImageArtifact, TextArtifact diff --git a/griptape/tokenizers/anthropic_tokenizer.py b/griptape/tokenizers/anthropic_tokenizer.py index 3aefbc980..577df7b93 100644 --- a/griptape/tokenizers/anthropic_tokenizer.py +++ b/griptape/tokenizers/anthropic_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from typing import TYPE_CHECKING from griptape.utils import import_optional_dependency from griptape.tokenizers import BaseTokenizer diff --git a/griptape/tokenizers/base_tokenizer.py b/griptape/tokenizers/base_tokenizer.py index 28f30e66c..179d2fb59 100644 --- a/griptape/tokenizers/base_tokenizer.py +++ b/griptape/tokenizers/base_tokenizer.py @@ -1,6 +1,6 @@ from __future__ import annotations from abc import ABC, abstractmethod -from attr import define, field, Factory +from attrs import define, field, Factory from griptape import utils diff --git a/griptape/tokenizers/bedrock_claude_tokenizer.py b/griptape/tokenizers/bedrock_claude_tokenizer.py index d5ff9722b..d44116e2c 100644 --- a/griptape/tokenizers/bedrock_claude_tokenizer.py +++ b/griptape/tokenizers/bedrock_claude_tokenizer.py @@ -1,4 +1,4 @@ -from attr import define +from attrs import define from griptape.tokenizers import AnthropicTokenizer diff --git a/griptape/tokenizers/bedrock_cohere_tokenizer.py b/griptape/tokenizers/bedrock_cohere_tokenizer.py index 772453eb5..44ccb4ac6 100644 --- a/griptape/tokenizers/bedrock_cohere_tokenizer.py +++ b/griptape/tokenizers/bedrock_cohere_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from .simple_tokenizer import SimpleTokenizer diff --git a/griptape/tokenizers/bedrock_jurassic_tokenizer.py b/griptape/tokenizers/bedrock_jurassic_tokenizer.py index 525e2e211..7511138b3 100644 --- a/griptape/tokenizers/bedrock_jurassic_tokenizer.py +++ b/griptape/tokenizers/bedrock_jurassic_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from .simple_tokenizer import SimpleTokenizer diff --git a/griptape/tokenizers/bedrock_llama_tokenizer.py b/griptape/tokenizers/bedrock_llama_tokenizer.py index 051b4552d..e7d1ec829 100644 --- a/griptape/tokenizers/bedrock_llama_tokenizer.py +++ b/griptape/tokenizers/bedrock_llama_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from .simple_tokenizer import SimpleTokenizer diff --git a/griptape/tokenizers/bedrock_titan_tokenizer.py b/griptape/tokenizers/bedrock_titan_tokenizer.py index 403fa2039..0d8ba0273 100644 --- a/griptape/tokenizers/bedrock_titan_tokenizer.py +++ b/griptape/tokenizers/bedrock_titan_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from .simple_tokenizer import SimpleTokenizer diff --git a/griptape/tokenizers/cohere_tokenizer.py b/griptape/tokenizers/cohere_tokenizer.py index 4856b7ff7..0a3c6a236 100644 --- a/griptape/tokenizers/cohere_tokenizer.py +++ b/griptape/tokenizers/cohere_tokenizer.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING -from attr import define, field +from attrs import define, field from griptape.tokenizers import BaseTokenizer if TYPE_CHECKING: diff --git a/griptape/tokenizers/google_tokenizer.py b/griptape/tokenizers/google_tokenizer.py index 26d1f16b0..55942f597 100644 --- a/griptape/tokenizers/google_tokenizer.py +++ b/griptape/tokenizers/google_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from typing import TYPE_CHECKING from griptape.utils import import_optional_dependency from griptape.tokenizers import BaseTokenizer diff --git a/griptape/tokenizers/huggingface_tokenizer.py b/griptape/tokenizers/huggingface_tokenizer.py index c3203d4a9..dbfba5429 100644 --- a/griptape/tokenizers/huggingface_tokenizer.py +++ b/griptape/tokenizers/huggingface_tokenizer.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.tokenizers import BaseTokenizer if TYPE_CHECKING: diff --git a/griptape/tokenizers/openai_tokenizer.py b/griptape/tokenizers/openai_tokenizer.py index dda8bfe15..ec127ca1a 100644 --- a/griptape/tokenizers/openai_tokenizer.py +++ b/griptape/tokenizers/openai_tokenizer.py @@ -1,6 +1,6 @@ from __future__ import annotations import logging -from attr import define +from attrs import define import tiktoken from griptape.tokenizers import BaseTokenizer from typing import Optional diff --git a/griptape/tokenizers/simple_tokenizer.py b/griptape/tokenizers/simple_tokenizer.py index d97c3bd89..484afe69f 100644 --- a/griptape/tokenizers/simple_tokenizer.py +++ b/griptape/tokenizers/simple_tokenizer.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional -from attr import define, field +from attrs import define, field from griptape.tokenizers import BaseTokenizer diff --git a/griptape/tokenizers/voyageai_tokenizer.py b/griptape/tokenizers/voyageai_tokenizer.py index 799c64276..565e53faa 100644 --- a/griptape/tokenizers/voyageai_tokenizer.py +++ b/griptape/tokenizers/voyageai_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from typing import TYPE_CHECKING, Optional from griptape.utils import import_optional_dependency from griptape.tokenizers import BaseTokenizer diff --git a/griptape/tools/aws_iam_client/tool.py b/griptape/tools/aws_iam_client/tool.py index 0c94be90e..467540829 100644 --- a/griptape/tools/aws_iam_client/tool.py +++ b/griptape/tools/aws_iam_client/tool.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from schema import Schema, Literal -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact, ErrorArtifact, ListArtifact from griptape.utils.decorators import activity from griptape.tools import BaseAwsClient diff --git a/griptape/tools/aws_s3_client/tool.py b/griptape/tools/aws_s3_client/tool.py index fc63f3988..9d50c7cf8 100644 --- a/griptape/tools/aws_s3_client/tool.py +++ b/griptape/tools/aws_s3_client/tool.py @@ -2,7 +2,7 @@ import io from typing import Any, TYPE_CHECKING from schema import Schema, Literal -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import TextArtifact, ErrorArtifact, InfoArtifact, ListArtifact, BlobArtifact from griptape.utils.decorators import activity from griptape.tools import BaseAwsClient diff --git a/griptape/tools/base_aws_client.py b/griptape/tools/base_aws_client.py index cb6159a34..bd7b41e59 100644 --- a/griptape/tools/base_aws_client.py +++ b/griptape/tools/base_aws_client.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from abc import ABC -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, ErrorArtifact, BaseArtifact from griptape.tools import BaseTool from griptape.utils.decorators import activity diff --git a/griptape/tools/base_google_client.py b/griptape/tools/base_google_client.py index b0da963b5..51ae2f946 100644 --- a/griptape/tools/base_google_client.py +++ b/griptape/tools/base_google_client.py @@ -1,5 +1,5 @@ from abc import ABC -from attr import define, field +from attrs import define, field from griptape.tools import BaseTool from typing import Optional, Any diff --git a/griptape/tools/base_griptape_cloud_client.py b/griptape/tools/base_griptape_cloud_client.py index cafe01cd1..8c42f817e 100644 --- a/griptape/tools/base_griptape_cloud_client.py +++ b/griptape/tools/base_griptape_cloud_client.py @@ -1,6 +1,6 @@ from __future__ import annotations from abc import ABC -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.tools import BaseTool diff --git a/griptape/tools/base_tool.py b/griptape/tools/base_tool.py index 2c9f74839..4f1255665 100644 --- a/griptape/tools/base_tool.py +++ b/griptape/tools/base_tool.py @@ -9,7 +9,7 @@ from abc import ABC from typing import Optional import yaml -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import BaseArtifact, InfoArtifact, TextArtifact from griptape.mixins import ActivityMixin diff --git a/griptape/tools/computer/tool.py b/griptape/tools/computer/tool.py index 57953f005..b63ba9e0b 100644 --- a/griptape/tools/computer/tool.py +++ b/griptape/tools/computer/tool.py @@ -5,7 +5,7 @@ import tempfile from pathlib import Path from typing import Optional, TYPE_CHECKING -from attr import define, field, Factory +from attrs import define, field, Factory from docker.models.containers import Container from schema import Schema, Literal import stringcase diff --git a/griptape/tools/email_client/tool.py b/griptape/tools/email_client/tool.py index b67a16e4c..e2b42ea7e 100644 --- a/griptape/tools/email_client/tool.py +++ b/griptape/tools/email_client/tool.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import Factory, define, field +from attrs import Factory, define, field from email.mime.text import MIMEText from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact from griptape.loaders.email_loader import EmailLoader diff --git a/griptape/tools/file_manager/tool.py b/griptape/tools/file_manager/tool.py index 6aa2c85c0..162b546a6 100644 --- a/griptape/tools/file_manager/tool.py +++ b/griptape/tools/file_manager/tool.py @@ -1,6 +1,6 @@ from __future__ import annotations import os -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact, TextArtifact from griptape.drivers import BaseFileManagerDriver, LocalFileManagerDriver from griptape.tools import BaseTool diff --git a/griptape/tools/google_cal/tool.py b/griptape/tools/google_cal/tool.py index 7ca83e3a5..b18c5f41c 100644 --- a/griptape/tools/google_cal/tool.py +++ b/griptape/tools/google_cal/tool.py @@ -2,7 +2,7 @@ import logging import datetime from schema import Schema, Literal, Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, ErrorArtifact, InfoArtifact, ListArtifact from griptape.utils.decorators import activity from griptape.tools import BaseGoogleClient diff --git a/griptape/tools/google_docs/tool.py b/griptape/tools/google_docs/tool.py index 2aaffa13e..48dbbe39c 100644 --- a/griptape/tools/google_docs/tool.py +++ b/griptape/tools/google_docs/tool.py @@ -1,6 +1,6 @@ from __future__ import annotations import logging -from attr import field, define +from attrs import field, define from schema import Schema, Optional, Literal from griptape.artifacts import ErrorArtifact, InfoArtifact diff --git a/griptape/tools/google_drive/tool.py b/griptape/tools/google_drive/tool.py index 761b38754..fcb042cfb 100644 --- a/griptape/tools/google_drive/tool.py +++ b/griptape/tools/google_drive/tool.py @@ -3,7 +3,7 @@ from typing import Any, Optional import schema from schema import Schema, Literal, Or -from attr import define, field +from attrs import define, field from griptape.artifacts import ErrorArtifact, InfoArtifact, ListArtifact, BlobArtifact, TextArtifact from griptape.utils.decorators import activity from griptape.tools import BaseGoogleClient diff --git a/griptape/tools/google_gmail/tool.py b/griptape/tools/google_gmail/tool.py index 7539b6668..5b4bf5cd5 100644 --- a/griptape/tools/google_gmail/tool.py +++ b/griptape/tools/google_gmail/tool.py @@ -3,7 +3,7 @@ import base64 from email.message import EmailMessage from schema import Schema, Literal -from attr import define, field +from attrs import define, field from griptape.artifacts import InfoArtifact, ErrorArtifact from griptape.utils.decorators import activity from griptape.tools import BaseGoogleClient diff --git a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py index 89a284c98..917406cdd 100644 --- a/griptape/tools/griptape_cloud_knowledge_base_client/tool.py +++ b/griptape/tools/griptape_cloud_knowledge_base_client/tool.py @@ -2,7 +2,7 @@ from typing import Optional from urllib.parse import urljoin from schema import Schema, Literal -from attr import define, field +from attrs import define, field from griptape.tools.base_griptape_cloud_client import BaseGriptapeCloudClient from griptape.utils.decorators import activity from griptape.artifacts import TextArtifact, ErrorArtifact diff --git a/griptape/tools/image_query_client/tool.py b/griptape/tools/image_query_client/tool.py index eab3b5e3e..60f2970ff 100644 --- a/griptape/tools/image_query_client/tool.py +++ b/griptape/tools/image_query_client/tool.py @@ -2,7 +2,7 @@ from typing import Any, cast -from attr import define, field, Factory +from attrs import define, field, Factory from schema import Schema, Literal from griptape.artifacts import TextArtifact, ImageArtifact, ErrorArtifact, BlobArtifact diff --git a/griptape/tools/openweather_client/tool.py b/griptape/tools/openweather_client/tool.py index 875fc2cf4..e338677dd 100644 --- a/griptape/tools/openweather_client/tool.py +++ b/griptape/tools/openweather_client/tool.py @@ -4,7 +4,7 @@ from griptape.utils.decorators import activity from schema import Schema, Literal from typing import Optional -from attr import define, field +from attrs import define, field import requests import logging diff --git a/griptape/tools/rest_api_client/tool.py b/griptape/tools/rest_api_client/tool.py index 97bd9384e..e33971cc2 100644 --- a/griptape/tools/rest_api_client/tool.py +++ b/griptape/tools/rest_api_client/tool.py @@ -1,9 +1,9 @@ from textwrap import dedent -from typing import Optional, Dict +from typing import Optional from urllib.parse import urljoin import schema from schema import Schema, Literal -from attr import define, field +from attrs import define, field from griptape.tools import BaseTool from griptape.utils.decorators import activity from griptape.artifacts import BaseArtifact, TextArtifact, ErrorArtifact @@ -30,7 +30,7 @@ class RestApiClient(BaseTool): request_query_params_schema: Optional[str] = field(default=None, kw_only=True) request_body_schema: Optional[str] = field(default=None, kw_only=True) response_body_schema: Optional[str] = field(default=None, kw_only=True) - request_headers: Optional[Dict[str, str]] = field(default=None, kw_only=True) + request_headers: Optional[dict[str, str]] = field(default=None, kw_only=True) @property def full_url(self) -> str: diff --git a/griptape/tools/sql_client/tool.py b/griptape/tools/sql_client/tool.py index e5ed9263e..a07c2e734 100644 --- a/griptape/tools/sql_client/tool.py +++ b/griptape/tools/sql_client/tool.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import Optional -from attr import define, field +from attrs import define, field from griptape.artifacts import InfoArtifact, ListArtifact, ErrorArtifact from griptape.tools import BaseTool from griptape.utils.decorators import activity diff --git a/griptape/tools/structure_run_client/tool.py b/griptape/tools/structure_run_client/tool.py index c62b53e97..f48e84a1d 100644 --- a/griptape/tools/structure_run_client/tool.py +++ b/griptape/tools/structure_run_client/tool.py @@ -1,6 +1,6 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from schema import Literal, Schema from griptape.artifacts import BaseArtifact, TextArtifact diff --git a/griptape/tools/task_memory_client/tool.py b/griptape/tools/task_memory_client/tool.py index b7234aca2..2a85a7c0f 100644 --- a/griptape/tools/task_memory_client/tool.py +++ b/griptape/tools/task_memory_client/tool.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from schema import Schema, Literal from griptape.artifacts import TextArtifact, ErrorArtifact, InfoArtifact from griptape.tools import BaseTool diff --git a/griptape/tools/vector_store_client/tool.py b/griptape/tools/vector_store_client/tool.py index 90ba845c0..f2dc785b0 100644 --- a/griptape/tools/vector_store_client/tool.py +++ b/griptape/tools/vector_store_client/tool.py @@ -1,7 +1,7 @@ from typing import Optional from griptape.engines import VectorQueryEngine from schema import Schema, Literal -from attr import define, field +from attrs import define, field from griptape.artifacts import BaseArtifact, ErrorArtifact from griptape.tools import BaseTool from griptape.utils.decorators import activity diff --git a/griptape/tools/web_scraper/tool.py b/griptape/tools/web_scraper/tool.py index bff46473f..c42dedad9 100644 --- a/griptape/tools/web_scraper/tool.py +++ b/griptape/tools/web_scraper/tool.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.artifacts import ErrorArtifact, ListArtifact from schema import Schema, Literal from griptape.tools import BaseTool diff --git a/griptape/tools/web_search/tool.py b/griptape/tools/web_search/tool.py index af8a75d11..6ad25ebf0 100644 --- a/griptape/tools/web_search/tool.py +++ b/griptape/tools/web_search/tool.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, ErrorArtifact, ListArtifact from schema import Schema, Literal from griptape.tools import BaseTool diff --git a/griptape/utils/chat.py b/griptape/utils/chat.py index 549d93e53..12653ce9e 100644 --- a/griptape/utils/chat.py +++ b/griptape/utils/chat.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional, Callable -from attr import Factory, define, field +from attrs import Factory, define, field from griptape.utils.stream import Stream if TYPE_CHECKING: diff --git a/griptape/utils/command_runner.py b/griptape/utils/command_runner.py index c1ad9c9fe..bbc03ec39 100644 --- a/griptape/utils/command_runner.py +++ b/griptape/utils/command_runner.py @@ -1,5 +1,5 @@ import subprocess -from attr import define +from attrs import define from griptape.artifacts import BaseArtifact, TextArtifact, ErrorArtifact diff --git a/griptape/utils/conversation.py b/griptape/utils/conversation.py index 38b3e30a9..2d87563ae 100644 --- a/griptape/utils/conversation.py +++ b/griptape/utils/conversation.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING -from attr import define, field +from attrs import define, field if TYPE_CHECKING: from griptape.memory.structure import ConversationMemory diff --git a/griptape/utils/j2.py b/griptape/utils/j2.py index 6b57e274c..ca54fed9e 100644 --- a/griptape/utils/j2.py +++ b/griptape/utils/j2.py @@ -1,5 +1,5 @@ from typing import Optional -from attr import define, field, Factory +from attrs import define, field, Factory from jinja2 import Environment, FileSystemLoader from .paths import abs_path diff --git a/griptape/utils/prompt_stack.py b/griptape/utils/prompt_stack.py index a5f336030..f04cef486 100644 --- a/griptape/utils/prompt_stack.py +++ b/griptape/utils/prompt_stack.py @@ -1,6 +1,6 @@ from __future__ import annotations from typing import TYPE_CHECKING, Optional -from attr import define, field +from attrs import define, field from griptape.mixins import SerializableMixin diff --git a/griptape/utils/python_runner.py b/griptape/utils/python_runner.py index 0c54ad652..75b6e53c2 100644 --- a/griptape/utils/python_runner.py +++ b/griptape/utils/python_runner.py @@ -1,7 +1,7 @@ import importlib import sys from io import StringIO -from attr import define, field +from attrs import define, field @define diff --git a/griptape/utils/token_counter.py b/griptape/utils/token_counter.py index eccae3afd..2732d95f1 100644 --- a/griptape/utils/token_counter.py +++ b/griptape/utils/token_counter.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field @define diff --git a/poetry.lock b/poetry.lock index c4e2e1024..c78b72391 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4236,7 +4236,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4512,28 +4511,28 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -version = "0.4.4" +version = "0.4.6" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d44ef5bb6a08e235c8249294fa8d431adc1426bfda99ed493119e6f9ea1bf6"}, - {file = "ruff-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c4efe62b5bbb24178c950732ddd40712b878a9b96b1d02b0ff0b08a090cbd891"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c8e2f1e8fc12d07ab521a9005d68a969e167b589cbcaee354cb61e9d9de9c15"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60ed88b636a463214905c002fa3eaab19795679ed55529f91e488db3fe8976ab"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b90fc5e170fc71c712cc4d9ab0e24ea505c6a9e4ebf346787a67e691dfb72e85"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8e7e6ebc10ef16dcdc77fd5557ee60647512b400e4a60bdc4849468f076f6eef"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9ddb2c494fb79fc208cd15ffe08f32b7682519e067413dbaf5f4b01a6087bcd"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c51c928a14f9f0a871082603e25a1588059b7e08a920f2f9fa7157b5bf08cfe9"}, - {file = "ruff-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5eb0a4bfd6400b7d07c09a7725e1a98c3b838be557fee229ac0f84d9aa49c36"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b1867ee9bf3acc21778dcb293db504692eda5f7a11a6e6cc40890182a9f9e595"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1aecced1269481ef2894cc495647392a34b0bf3e28ff53ed95a385b13aa45768"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9da73eb616b3241a307b837f32756dc20a0b07e2bcb694fec73699c93d04a69e"}, - {file = "ruff-0.4.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:958b4ea5589706a81065e2a776237de2ecc3e763342e5cc8e02a4a4d8a5e6f95"}, - {file = "ruff-0.4.4-py3-none-win32.whl", hash = "sha256:cb53473849f011bca6e754f2cdf47cafc9c4f4ff4570003a0dad0b9b6890e876"}, - {file = "ruff-0.4.4-py3-none-win_amd64.whl", hash = "sha256:424e5b72597482543b684c11def82669cc6b395aa8cc69acc1858b5ef3e5daae"}, - {file = "ruff-0.4.4-py3-none-win_arm64.whl", hash = "sha256:39df0537b47d3b597293edbb95baf54ff5b49589eb7ff41926d8243caa995ea6"}, - {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, + {file = "ruff-0.4.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ef995583a038cd4a7edf1422c9e19118e2511b8ba0b015861b4abd26ec5367c5"}, + {file = "ruff-0.4.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:602ebd7ad909eab6e7da65d3c091547781bb06f5f826974a53dbe563d357e53c"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f9ced5cbb7510fd7525448eeb204e0a22cabb6e99a3cb160272262817d49786"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04a80acfc862e0e1630c8b738e70dcca03f350bad9e106968a8108379e12b31f"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be47700ecb004dfa3fd4dcdddf7322d4e632de3c06cd05329d69c45c0280e618"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1ff930d6e05f444090a0139e4e13e1e2e1f02bd51bb4547734823c760c621e79"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f13410aabd3b5776f9c5699f42b37a3a348d65498c4310589bc6e5c548dc8a2f"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cf5cc02d3ae52dfb0c8a946eb7a1d6ffe4d91846ffc8ce388baa8f627e3bd50"}, + {file = "ruff-0.4.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea3424793c29906407e3cf417f28fc33f689dacbbadfb52b7e9a809dd535dcef"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1fa8561489fadf483ffbb091ea94b9c39a00ed63efacd426aae2f197a45e67fc"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4d5b914818d8047270308fe3e85d9d7f4a31ec86c6475c9f418fbd1624d198e0"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4f02284335c766678778475e7698b7ab83abaf2f9ff0554a07b6f28df3b5c259"}, + {file = "ruff-0.4.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3a6a0a4f4b5f54fff7c860010ab3dd81425445e37d35701a965c0248819dde7a"}, + {file = "ruff-0.4.6-py3-none-win32.whl", hash = "sha256:9018bf59b3aa8ad4fba2b1dc0299a6e4e60a4c3bc62bbeaea222679865453062"}, + {file = "ruff-0.4.6-py3-none-win_amd64.whl", hash = "sha256:a769ae07ac74ff1a019d6bd529426427c3e30d75bdf1e08bb3d46ac8f417326a"}, + {file = "ruff-0.4.6-py3-none-win_arm64.whl", hash = "sha256:735a16407a1a8f58e4c5b913ad6102722e80b562dd17acb88887685ff6f20cf6"}, + {file = "ruff-0.4.6.tar.gz", hash = "sha256:a797a87da50603f71e6d0765282098245aca6e3b94b7c17473115167d8dfb0b7"}, ] [[package]] @@ -6022,4 +6021,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "2590fc0528b584775d753939abbde032c34055a92db2538385002b9808d1fa31" +content-hash = "ce7c88b4d4ea368bd7a6c08c8e0f4310b2c10f1237d77d80f50bda4b35612481" diff --git a/pyproject.toml b/pyproject.toml index 5ca064399..af264a5dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -155,7 +155,7 @@ pytest-clarity = "^1.0.1" optional = true [tool.poetry.group.dev.dependencies] -ruff = "^0.4.4" +ruff = "^0.4.6" pyright = "^1.1.363" pre-commit = "^3.7.1" boto3-stubs = {extras = ["bedrock", "iam", "opensearch", "s3", "sagemaker"], version = "^1.34.105"} @@ -180,6 +180,12 @@ line-length = 120 [tool.ruff.format] skip-magic-trailing-comma = true +[tool.ruff.lint] +select = ["E4", "E7", "E9", "F", "TID251"] + +[tool.ruff.lint.flake8-tidy-imports.banned-api] +"attr".msg = "The attr module is deprecated, use attrs instead." + [tool.pyright] venvPath = "." venv = ".venv" diff --git a/tests/mocks/invalid_mock_tool/tool.py b/tests/mocks/invalid_mock_tool/tool.py index 3700d28eb..91b2f78f7 100644 --- a/tests/mocks/invalid_mock_tool/tool.py +++ b/tests/mocks/invalid_mock_tool/tool.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from schema import Schema, Literal from griptape.tools import BaseTool from griptape.utils.decorators import activity diff --git a/tests/mocks/mock_embedding_driver.py b/tests/mocks/mock_embedding_driver.py index 9502421a9..e21c56308 100644 --- a/tests/mocks/mock_embedding_driver.py +++ b/tests/mocks/mock_embedding_driver.py @@ -1,4 +1,4 @@ -from attr import field, define +from attrs import field, define from griptape.drivers import BaseEmbeddingDriver from tests.mocks.mock_tokenizer import MockTokenizer diff --git a/tests/mocks/mock_event_listener_driver.py b/tests/mocks/mock_event_listener_driver.py index dd54eeb73..560fb8733 100644 --- a/tests/mocks/mock_event_listener_driver.py +++ b/tests/mocks/mock_event_listener_driver.py @@ -1,4 +1,4 @@ -from attr import define +from attrs import define from griptape.drivers import BaseEventListenerDriver diff --git a/tests/mocks/mock_failing_prompt_driver.py b/tests/mocks/mock_failing_prompt_driver.py index 3bc0e1511..c97b25d86 100644 --- a/tests/mocks/mock_failing_prompt_driver.py +++ b/tests/mocks/mock_failing_prompt_driver.py @@ -1,5 +1,5 @@ -from typing import Iterator -from attr import define +from collections.abc import Iterator +from attrs import define from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver diff --git a/tests/mocks/mock_image_generation_driver.py b/tests/mocks/mock_image_generation_driver.py index 0775ad5e2..de94771e2 100644 --- a/tests/mocks/mock_image_generation_driver.py +++ b/tests/mocks/mock_image_generation_driver.py @@ -1,5 +1,5 @@ from typing import Optional -from attr import define +from attrs import define from griptape.artifacts import ImageArtifact from griptape.drivers.image_generation.base_image_generation_driver import BaseImageGenerationDriver diff --git a/tests/mocks/mock_image_generation_task.py b/tests/mocks/mock_image_generation_task.py index 24c25dc37..1c79b42a9 100644 --- a/tests/mocks/mock_image_generation_task.py +++ b/tests/mocks/mock_image_generation_task.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from griptape.artifacts import ImageArtifact, TextArtifact from griptape.tasks import BaseImageGenerationTask diff --git a/tests/mocks/mock_image_query_driver.py b/tests/mocks/mock_image_query_driver.py index b25684178..d3bec164f 100644 --- a/tests/mocks/mock_image_query_driver.py +++ b/tests/mocks/mock_image_query_driver.py @@ -1,5 +1,5 @@ from typing import Optional -from attr import define +from attrs import define from griptape.artifacts import ImageArtifact, TextArtifact from griptape.drivers import BaseImageQueryDriver from griptape.drivers.image_generation.base_image_generation_driver import BaseImageGenerationDriver diff --git a/tests/mocks/mock_multi_text_input_task.py b/tests/mocks/mock_multi_text_input_task.py index 1da645ee4..7ab5aedf9 100644 --- a/tests/mocks/mock_multi_text_input_task.py +++ b/tests/mocks/mock_multi_text_input_task.py @@ -1,4 +1,4 @@ -from attr import define +from attrs import define from griptape.artifacts import TextArtifact from griptape.tasks import BaseMultiTextInputTask diff --git a/tests/mocks/mock_prompt_driver.py b/tests/mocks/mock_prompt_driver.py index e2018c6f6..20913a965 100644 --- a/tests/mocks/mock_prompt_driver.py +++ b/tests/mocks/mock_prompt_driver.py @@ -1,6 +1,7 @@ +from __future__ import annotations from collections.abc import Iterator from typing import Callable -from attr import Factory, define, field +from attrs import define, field from griptape.utils import PromptStack from griptape.drivers import BasePromptDriver from griptape.tokenizers import BaseTokenizer diff --git a/tests/mocks/mock_task.py b/tests/mocks/mock_task.py index a3ea7688d..42595f6eb 100644 --- a/tests/mocks/mock_task.py +++ b/tests/mocks/mock_task.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from griptape.artifacts import TextArtifact, BaseArtifact from griptape.tasks import BaseTask diff --git a/tests/mocks/mock_text_input_task.py b/tests/mocks/mock_text_input_task.py index 5c8c8174c..930c77e74 100644 --- a/tests/mocks/mock_text_input_task.py +++ b/tests/mocks/mock_text_input_task.py @@ -1,4 +1,4 @@ -from attr import define +from attrs import define from griptape.artifacts import TextArtifact from griptape.tasks import BaseTextInputTask diff --git a/tests/mocks/mock_tokenizer.py b/tests/mocks/mock_tokenizer.py index 56a5bc5cc..a333f9a13 100644 --- a/tests/mocks/mock_tokenizer.py +++ b/tests/mocks/mock_tokenizer.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attr import define, field +from attrs import define, field from griptape.tokenizers import BaseTokenizer diff --git a/tests/mocks/mock_tool/tool.py b/tests/mocks/mock_tool/tool.py index ea66b4aa1..266f77c1b 100644 --- a/tests/mocks/mock_tool/tool.py +++ b/tests/mocks/mock_tool/tool.py @@ -1,4 +1,4 @@ -from attr import define, field +from attrs import define, field from schema import Schema, Literal from griptape.artifacts import TextArtifact, ErrorArtifact, BaseArtifact, ListArtifact from griptape.tools import BaseTool diff --git a/tests/mocks/mock_value_prompt_driver.py b/tests/mocks/mock_value_prompt_driver.py index 8c660602b..12ddeec9f 100644 --- a/tests/mocks/mock_value_prompt_driver.py +++ b/tests/mocks/mock_value_prompt_driver.py @@ -1,5 +1,5 @@ from collections.abc import Iterator -from attr import define, field, Factory +from attrs import define, field, Factory from griptape.drivers import BasePromptDriver from griptape.tokenizers import OpenAiTokenizer, BaseTokenizer from griptape.artifacts import TextArtifact diff --git a/tests/unit/artifacts/test_base_media_artifact.py b/tests/unit/artifacts/test_base_media_artifact.py index d72a8bb02..2829a1e2f 100644 --- a/tests/unit/artifacts/test_base_media_artifact.py +++ b/tests/unit/artifacts/test_base_media_artifact.py @@ -1,6 +1,6 @@ import pytest -from attr import define +from attrs import define from griptape.artifacts import MediaArtifact diff --git a/tests/utils/structure_tester.py b/tests/utils/structure_tester.py index abd8f0e0a..4f111b8d8 100644 --- a/tests/utils/structure_tester.py +++ b/tests/utils/structure_tester.py @@ -1,6 +1,6 @@ from __future__ import annotations import os -from attr import field, define +from attrs import field, define from schema import Schema, Literal import logging import json From 5a0e1c3e0a99d4fab8ad27263c569b644a3b571a Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 31 May 2024 11:11:24 -0700 Subject: [PATCH 063/145] Refactor tasks to use ListArtifact as input (#811) --- griptape/artifacts/list_artifact.py | 3 +- griptape/events/base_task_event.py | 7 +-- griptape/events/finish_structure_run_event.py | 7 +-- griptape/events/start_structure_run_event.py | 7 +-- griptape/tasks/base_multi_text_input_task.py | 17 +++--- griptape/tasks/base_task.py | 3 +- griptape/tasks/image_query_task.py | 31 +++++++---- .../tasks/inpainting_image_generation_task.py | 23 +++++--- .../outpainting_image_generation_task.py | 23 +++++--- .../tasks/variation_image_generation_task.py | 17 +++--- tests/unit/artifacts/test_list_artifact.py | 2 +- .../events/test_finish_structure_run_event.py | 14 +++-- .../tasks/test_base_multi_text_input_task.py | 1 - tests/unit/tasks/test_image_query_task.py | 52 +++++++++++++++---- .../test_inpainting_image_generation_task.py | 25 ++++++--- .../test_outpainting_image_generation_task.py | 25 ++++++--- .../test_variation_image_generation_task.py | 22 +++++--- 17 files changed, 188 insertions(+), 91 deletions(-) diff --git a/griptape/artifacts/list_artifact.py b/griptape/artifacts/list_artifact.py index 558f32432..68b377df2 100644 --- a/griptape/artifacts/list_artifact.py +++ b/griptape/artifacts/list_artifact.py @@ -8,10 +8,11 @@ class ListArtifact(BaseArtifact): value: Sequence[BaseArtifact] = field(factory=list, metadata={"serializable": True}) item_separator: str = field(default="\n\n", kw_only=True, metadata={"serializable": True}) + validate_uniform_types: bool = field(default=False, kw_only=True, metadata={"serializable": True}) @value.validator # pyright: ignore def validate_value(self, _, value: list[BaseArtifact]) -> None: - if len(value) > 0: + if self.validate_uniform_types and len(value) > 0: first_type = type(value[0]) if not all(isinstance(v, first_type) for v in value): diff --git a/griptape/events/base_task_event.py b/griptape/events/base_task_event.py index c037ec7ab..e853114d5 100644 --- a/griptape/events/base_task_event.py +++ b/griptape/events/base_task_event.py @@ -1,8 +1,7 @@ from __future__ import annotations from attrs import define, field from abc import ABC -from typing import Optional, Union -from collections.abc import Sequence +from typing import Optional from griptape.artifacts import BaseArtifact from .base_event import BaseEvent @@ -13,7 +12,5 @@ class BaseTaskEvent(BaseEvent, ABC): task_parent_ids: list[str] = field(kw_only=True, metadata={"serializable": True}) task_child_ids: list[str] = field(kw_only=True, metadata={"serializable": True}) - task_input: Union[BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]]] = field( - kw_only=True, metadata={"serializable": True} - ) + task_input: BaseArtifact = field(kw_only=True, metadata={"serializable": True}) task_output: Optional[BaseArtifact] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/finish_structure_run_event.py b/griptape/events/finish_structure_run_event.py index 2ff7786d8..588a5be31 100644 --- a/griptape/events/finish_structure_run_event.py +++ b/griptape/events/finish_structure_run_event.py @@ -1,5 +1,4 @@ -from typing import Optional, Union -from collections.abc import Sequence +from typing import Optional from attrs import define, field @@ -10,7 +9,5 @@ @define class FinishStructureRunEvent(BaseEvent): structure_id: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - output_task_input: Union[BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]]] = ( - field(kw_only=True, metadata={"serializable": True}) - ) + output_task_input: BaseArtifact = field(kw_only=True, metadata={"serializable": True}) output_task_output: Optional[BaseArtifact] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/events/start_structure_run_event.py b/griptape/events/start_structure_run_event.py index e75c5cd68..f0bb5528c 100644 --- a/griptape/events/start_structure_run_event.py +++ b/griptape/events/start_structure_run_event.py @@ -1,5 +1,4 @@ -from typing import Optional, Union -from collections.abc import Sequence +from typing import Optional from attrs import define, field @@ -10,7 +9,5 @@ @define class StartStructureRunEvent(BaseEvent): structure_id: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True}) - input_task_input: Union[BaseArtifact, tuple[BaseArtifact, ...], tuple[BaseArtifact, Sequence[BaseArtifact]]] = ( - field(kw_only=True, metadata={"serializable": True}) - ) + input_task_input: BaseArtifact = field(kw_only=True, metadata={"serializable": True}) input_task_output: Optional[BaseArtifact] = field(kw_only=True, metadata={"serializable": True}) diff --git a/griptape/tasks/base_multi_text_input_task.py b/griptape/tasks/base_multi_text_input_task.py index 314cdb596..385bc9b5b 100644 --- a/griptape/tasks/base_multi_text_input_task.py +++ b/griptape/tasks/base_multi_text_input_task.py @@ -5,7 +5,7 @@ from attrs import define, field, Factory -from griptape.artifacts import TextArtifact +from griptape.artifacts import ListArtifact, TextArtifact from griptape.mixins.rule_mixin import RuleMixin from griptape.tasks import BaseTask from griptape.utils import J2 @@ -20,20 +20,19 @@ class BaseMultiTextInputTask(RuleMixin, BaseTask, ABC): ) @property - def input(self) -> tuple[TextArtifact, ...]: + def input(self) -> ListArtifact: if all(isinstance(elem, TextArtifact) for elem in self._input): - return self._input # pyright: ignore + return ListArtifact([artifact for artifact in self._input if isinstance(artifact, TextArtifact)]) elif all(isinstance(elem, Callable) for elem in self._input): - return tuple([elem(self) for elem in self._input]) # pyright: ignore - elif isinstance(self._input, tuple): - return tuple( + return ListArtifact([callable(self) for callable in self._input if isinstance(callable, Callable)]) + else: + return ListArtifact( [ - TextArtifact(J2().render_from_string(input_template, **self.full_context)) # pyright: ignore + TextArtifact(J2().render_from_string(input_template, **self.full_context)) for input_template in self._input + if isinstance(input_template, str) ] ) - else: - return tuple([TextArtifact(J2().render_from_string(self._input, **self.full_context))]) @input.setter def input( diff --git a/griptape/tasks/base_task.py b/griptape/tasks/base_task.py index 79552ce66..771fe4dc8 100644 --- a/griptape/tasks/base_task.py +++ b/griptape/tasks/base_task.py @@ -5,7 +5,6 @@ from concurrent import futures from enum import Enum from typing import TYPE_CHECKING, Any, Optional -from collections.abc import Sequence from attrs import define, field, Factory @@ -38,7 +37,7 @@ class State(Enum): @property @abstractmethod - def input(self) -> BaseArtifact | tuple[BaseArtifact, ...] | tuple[BaseArtifact, Sequence[BaseArtifact]]: ... + def input(self) -> BaseArtifact: ... @property def parents(self) -> list[BaseTask]: diff --git a/griptape/tasks/image_query_task.py b/griptape/tasks/image_query_task.py index f6791f5a6..85b25715a 100644 --- a/griptape/tasks/image_query_task.py +++ b/griptape/tasks/image_query_task.py @@ -4,7 +4,7 @@ from attrs import define, field -from griptape.artifacts import ImageArtifact, TextArtifact +from griptape.artifacts import ImageArtifact, ListArtifact, TextArtifact from griptape.engines import ImageQueryEngine from griptape.tasks import BaseTask from griptape.utils import J2 @@ -26,18 +26,21 @@ class ImageQueryTask(BaseTask): _input: ( tuple[str, list[ImageArtifact]] | tuple[TextArtifact, list[ImageArtifact]] - | Callable[[BaseTask], tuple[TextArtifact, list[ImageArtifact]]] + | Callable[[BaseTask], ListArtifact] + | ListArtifact ) = field(default=None, alias="input") @property - def input(self) -> tuple[TextArtifact, list[ImageArtifact]]: - if isinstance(self._input, tuple): + def input(self) -> ListArtifact: + if isinstance(self._input, ListArtifact): + return self._input + elif isinstance(self._input, tuple): if isinstance(self._input[0], TextArtifact): query_text = self._input[0] else: query_text = TextArtifact(J2().render_from_string(self._input[0], **self.full_context)) - return query_text, self._input[1] + return ListArtifact([query_text, *self._input[1]]) elif isinstance(self._input, Callable): return self._input(self) else: @@ -49,8 +52,11 @@ def input(self) -> tuple[TextArtifact, list[ImageArtifact]]: @input.setter def input( self, - value: tuple[TextArtifact, list[ImageArtifact]] - | Callable[[BaseTask], tuple[TextArtifact, list[ImageArtifact]]], + value: ( + tuple[str, list[ImageArtifact]] + | tuple[TextArtifact, list[ImageArtifact]] + | Callable[[BaseTask], ListArtifact] + ), ) -> None: self._input = value @@ -68,8 +74,13 @@ def image_query_engine(self, value: ImageQueryEngine) -> None: self._image_query_engine = value def run(self) -> TextArtifact: - query, image_artifacts = self.input + query = self.input.value[0] - response = self.image_query_engine.run(query.value, image_artifacts) + if all([isinstance(input, ImageArtifact) for input in self.input.value[1:]]): + image_artifacts = [input for input in self.input.value[1:] if isinstance(input, ImageArtifact)] + else: + raise ValueError("All inputs after the query must be ImageArtifacts.") + + self.output = self.image_query_engine.run(query.value, image_artifacts) - return response + return self.output diff --git a/griptape/tasks/inpainting_image_generation_task.py b/griptape/tasks/inpainting_image_generation_task.py index 374820d01..b0fae9118 100644 --- a/griptape/tasks/inpainting_image_generation_task.py +++ b/griptape/tasks/inpainting_image_generation_task.py @@ -5,7 +5,7 @@ from attrs import define, field from griptape.engines import InpaintingImageGenerationEngine -from griptape.artifacts import ImageArtifact, TextArtifact +from griptape.artifacts import ImageArtifact, TextArtifact, ListArtifact from griptape.tasks import BaseImageGenerationTask, BaseTask from griptape.utils import J2 @@ -30,26 +30,29 @@ class InpaintingImageGenerationTask(BaseImageGenerationTask): default=None, kw_only=True, alias="image_generation_engine" ) _input: ( - tuple[str | TextArtifact, ImageArtifact, ImageArtifact] - | Callable[[BaseTask], tuple[TextArtifact, ImageArtifact, ImageArtifact]] + tuple[str | TextArtifact, ImageArtifact, ImageArtifact] | Callable[[BaseTask], ListArtifact] | ListArtifact ) = field(default=None) @property - def input(self) -> tuple[TextArtifact, ImageArtifact, ImageArtifact]: - if isinstance(self._input, tuple): + def input(self) -> ListArtifact: + if isinstance(self._input, ListArtifact): + return self._input + elif isinstance(self._input, tuple): if isinstance(self._input[0], TextArtifact): input_text = self._input[0] else: input_text = TextArtifact(J2().render_from_string(self._input[0], **self.full_context)) - return input_text, self._input[1], self._input[2] + return ListArtifact([input_text, self._input[1], self._input[2]]) elif isinstance(self._input, Callable): return self._input(self) else: raise ValueError("Input must be a tuple of (text, image, mask) or a callable that returns such a tuple.") @input.setter - def input(self, value: tuple[TextArtifact, ImageArtifact, ImageArtifact]) -> None: + def input( + self, value: tuple[str | TextArtifact, ImageArtifact, ImageArtifact] | Callable[[BaseTask], ListArtifact] + ) -> None: self._input = value @property @@ -69,8 +72,14 @@ def image_generation_engine(self, value: InpaintingImageGenerationEngine) -> Non def run(self) -> ImageArtifact: prompt_artifact = self.input[0] + image_artifact = self.input[1] + if not isinstance(image_artifact, ImageArtifact): + raise ValueError("Image must be an ImageArtifact.") + mask_artifact = self.input[2] + if not isinstance(mask_artifact, ImageArtifact): + raise ValueError("Mask must be an ImageArtifact.") output_image_artifact = self.image_generation_engine.run( prompts=[prompt_artifact.to_text()], diff --git a/griptape/tasks/outpainting_image_generation_task.py b/griptape/tasks/outpainting_image_generation_task.py index a35671de3..61a7c1b8a 100644 --- a/griptape/tasks/outpainting_image_generation_task.py +++ b/griptape/tasks/outpainting_image_generation_task.py @@ -5,7 +5,7 @@ from attrs import define, field from griptape.engines import OutpaintingImageGenerationEngine -from griptape.artifacts import ImageArtifact, TextArtifact +from griptape.artifacts import ImageArtifact, TextArtifact, ListArtifact from griptape.tasks import BaseImageGenerationTask, BaseTask from griptape.utils import J2 @@ -30,26 +30,29 @@ class OutpaintingImageGenerationTask(BaseImageGenerationTask): default=None, kw_only=True, alias="image_generation_engine" ) _input: ( - tuple[str | TextArtifact, ImageArtifact, ImageArtifact] - | Callable[[BaseTask], tuple[TextArtifact, ImageArtifact, ImageArtifact]] + tuple[str | TextArtifact, ImageArtifact, ImageArtifact] | Callable[[BaseTask], ListArtifact] | ListArtifact ) = field(default=None) @property - def input(self) -> tuple[TextArtifact, ImageArtifact, ImageArtifact]: - if isinstance(self._input, tuple): + def input(self) -> ListArtifact: + if isinstance(self._input, ListArtifact): + return self._input + elif isinstance(self._input, tuple): if isinstance(self._input[0], TextArtifact): input_text = self._input[0] else: input_text = TextArtifact(J2().render_from_string(self._input[0], **self.full_context)) - return input_text, self._input[1], self._input[2] + return ListArtifact([input_text, self._input[1], self._input[2]]) elif isinstance(self._input, Callable): return self._input(self) else: raise ValueError("Input must be a tuple of (text, image, mask) or a callable that returns such a tuple.") @input.setter - def input(self, value: tuple[TextArtifact, ImageArtifact, ImageArtifact]) -> None: + def input( + self, value: tuple[str | TextArtifact, ImageArtifact, ImageArtifact] | Callable[[BaseTask], ListArtifact] + ) -> None: self._input = value @property @@ -70,8 +73,14 @@ def image_generation_engine(self, value: OutpaintingImageGenerationEngine) -> No def run(self) -> ImageArtifact: prompt_artifact = self.input[0] + image_artifact = self.input[1] + if not isinstance(image_artifact, ImageArtifact): + raise ValueError("Image must be an ImageArtifact.") + mask_artifact = self.input[2] + if not isinstance(mask_artifact, ImageArtifact): + raise ValueError("Mask must be an ImageArtifact.") output_image_artifact = self.image_generation_engine.run( prompts=[prompt_artifact.to_text()], diff --git a/griptape/tasks/variation_image_generation_task.py b/griptape/tasks/variation_image_generation_task.py index 0d1269840..6efba1e65 100644 --- a/griptape/tasks/variation_image_generation_task.py +++ b/griptape/tasks/variation_image_generation_task.py @@ -5,7 +5,7 @@ from attrs import define, field from griptape.engines import VariationImageGenerationEngine -from griptape.artifacts import ImageArtifact, TextArtifact +from griptape.artifacts import ImageArtifact, TextArtifact, ListArtifact from griptape.tasks import BaseImageGenerationTask, BaseTask from griptape.utils import J2 @@ -29,26 +29,28 @@ class VariationImageGenerationTask(BaseImageGenerationTask): _image_generation_engine: VariationImageGenerationEngine = field( default=None, kw_only=True, alias="image_generation_engine" ) - _input: tuple[str | TextArtifact, ImageArtifact] | Callable[[BaseTask], tuple[TextArtifact, ImageArtifact]] = field( + _input: tuple[str | TextArtifact, ImageArtifact] | Callable[[BaseTask], ListArtifact] | ListArtifact = field( default=None ) @property - def input(self) -> tuple[TextArtifact, ImageArtifact]: - if isinstance(self._input, tuple): + def input(self) -> ListArtifact: + if isinstance(self._input, ListArtifact): + return self._input + elif isinstance(self._input, tuple): if isinstance(self._input[0], TextArtifact): input_text = self._input[0] else: input_text = TextArtifact(J2().render_from_string(self._input[0], **self.full_context)) - return input_text, self._input[1] + return ListArtifact([input_text, self._input[1]]) elif isinstance(self._input, Callable): return self._input(self) else: raise ValueError("Input must be a tuple of (text, image) or a callable that returns such a tuple.") @input.setter - def input(self, value: tuple[TextArtifact, ImageArtifact]) -> None: + def input(self, value: tuple[str | TextArtifact, ImageArtifact] | Callable[[BaseTask], ListArtifact]) -> None: self._input = value @property @@ -68,7 +70,10 @@ def image_generation_engine(self, value: VariationImageGenerationEngine) -> None def run(self) -> ImageArtifact: prompt_artifact = self.input[0] + image_artifact = self.input[1] + if not isinstance(image_artifact, ImageArtifact): + raise ValueError("Image must be an ImageArtifact.") output_image_artifact = self.image_generation_engine.run( prompts=[prompt_artifact.to_text()], diff --git a/tests/unit/artifacts/test_list_artifact.py b/tests/unit/artifacts/test_list_artifact.py index cd0183703..044ca8ed5 100644 --- a/tests/unit/artifacts/test_list_artifact.py +++ b/tests/unit/artifacts/test_list_artifact.py @@ -24,7 +24,7 @@ def test___add__(self): def test_validate_value(self): with pytest.raises(ValueError): - ListArtifact([TextArtifact("foo"), BlobArtifact(b"bar")]) + ListArtifact([TextArtifact("foo"), BlobArtifact(b"bar")], validate_uniform_types=True) def test_child_type(self): assert ListArtifact([TextArtifact("foo")]).child_type == TextArtifact diff --git a/tests/unit/events/test_finish_structure_run_event.py b/tests/unit/events/test_finish_structure_run_event.py index 68ad1ea01..0e9e61f4f 100644 --- a/tests/unit/events/test_finish_structure_run_event.py +++ b/tests/unit/events/test_finish_structure_run_event.py @@ -1,5 +1,6 @@ import pytest -from griptape.artifacts.text_artifact import TextArtifact + +from griptape.artifacts import ImageArtifact, ListArtifact, TextArtifact from griptape.events import FinishStructureRunEvent @@ -7,12 +8,19 @@ class TestFinishStructureRunEvent: @pytest.fixture def finish_structure_run_event(self): return FinishStructureRunEvent( - structure_id="fizz", output_task_input=TextArtifact("foo"), output_task_output=TextArtifact("bar") + structure_id="fizz", + output_task_input=ListArtifact( + [TextArtifact("foo"), ImageArtifact(b"", format="png", width=100, height=100)] + ), + output_task_output=TextArtifact("bar"), ) def test_to_dict(self, finish_structure_run_event): assert finish_structure_run_event.to_dict() is not None assert finish_structure_run_event.to_dict()["structure_id"] == "fizz" - assert finish_structure_run_event.to_dict()["output_task_input"]["value"] == "foo" + assert finish_structure_run_event.to_dict()["output_task_input"]["value"][0]["value"] == "foo" assert finish_structure_run_event.to_dict()["output_task_output"]["value"] == "bar" + + def test_from_dict(self, finish_structure_run_event): + assert FinishStructureRunEvent.from_dict(finish_structure_run_event.to_dict()) == finish_structure_run_event diff --git a/tests/unit/tasks/test_base_multi_text_input_task.py b/tests/unit/tasks/test_base_multi_text_input_task.py index 542162757..ad4776aee 100644 --- a/tests/unit/tasks/test_base_multi_text_input_task.py +++ b/tests/unit/tasks/test_base_multi_text_input_task.py @@ -1,7 +1,6 @@ from tests.mocks.mock_prompt_driver import MockPromptDriver from griptape.structures import Pipeline from griptape.artifacts import TextArtifact -from griptape.rules import Ruleset, Rule from tests.mocks.mock_multi_text_input_task import MockMultiTextInputTask diff --git a/tests/unit/tasks/test_image_query_task.py b/tests/unit/tasks/test_image_query_task.py index 1d195f835..dd4940213 100644 --- a/tests/unit/tasks/test_image_query_task.py +++ b/tests/unit/tasks/test_image_query_task.py @@ -1,14 +1,24 @@ -from griptape.engines import ImageQueryEngine +from unittest.mock import Mock import pytest -from griptape.tasks import BaseTask, ImageQueryTask -from griptape.artifacts import TextArtifact, ImageArtifact + +from griptape.artifacts import ImageArtifact, TextArtifact +from griptape.artifacts.list_artifact import ListArtifact +from griptape.engines import ImageQueryEngine from griptape.structures import Agent +from griptape.tasks import BaseTask, ImageQueryTask from tests.mocks.mock_image_query_driver import MockImageQueryDriver from tests.mocks.mock_structure_config import MockStructureConfig class TestImageQueryTask: + @pytest.fixture + def image_query_engine(self) -> Mock: + mock = Mock() + mock.run.return_value = TextArtifact("image") + + return mock + @pytest.fixture def text_artifact(self): return TextArtifact(value="some text") @@ -20,24 +30,34 @@ def image_artifact(self): def test_text_inputs(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): task = ImageQueryTask((text_artifact.value, [image_artifact, image_artifact])) - assert task.input[0].value == text_artifact.value - assert task.input[1] == [image_artifact, image_artifact] + assert task.input.value[0].value == text_artifact.value + assert task.input.value[1] == image_artifact + assert task.input.value[2] == image_artifact def test_artifact_inputs(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): input_tuple = (text_artifact, [image_artifact, image_artifact]) task = ImageQueryTask(input_tuple) - assert task.input == input_tuple + assert task.input.value[0] == text_artifact + assert task.input.value[1] == image_artifact + assert task.input.value[2] == image_artifact def test_callable_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): - input_tuple = (text_artifact, [image_artifact, image_artifact]) + input = [text_artifact, image_artifact, image_artifact] - def callable(task: BaseTask) -> tuple[TextArtifact, list[ImageArtifact]]: - return input_tuple + def callable(task: BaseTask) -> ListArtifact: + return ListArtifact(value=input) task = ImageQueryTask(callable) - assert task.input == input_tuple + assert task.input.value == input + + def test_list_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): + input = [text_artifact, image_artifact, image_artifact] + + task = ImageQueryTask(ListArtifact(value=input)) + + assert task.input.value == input def test_config_image_generation_engine(self, text_artifact, image_artifact): task = ImageQueryTask((text_artifact, [image_artifact, image_artifact])) @@ -49,5 +69,15 @@ def test_config_image_generation_engine(self, text_artifact, image_artifact): def test_missing_image_generation_engine(self, text_artifact, image_artifact): task = ImageQueryTask((text_artifact, [image_artifact, image_artifact])) - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="Image Query Engine"): task.image_query_engine + + def test_run(self, image_query_engine, text_artifact, image_artifact): + task = ImageQueryTask((text_artifact, [image_artifact, image_artifact]), image_query_engine=image_query_engine) + task.run() + + assert task.output.value == "image" + + def test_bad_run(self, image_query_engine, text_artifact, image_artifact): + with pytest.raises(ValueError, match="All inputs"): + ImageQueryTask(("foo", [image_artifact, text_artifact]), image_query_engine=image_query_engine).run() diff --git a/tests/unit/tasks/test_inpainting_image_generation_task.py b/tests/unit/tasks/test_inpainting_image_generation_task.py index 1fd84f2a6..9dc6aff54 100644 --- a/tests/unit/tasks/test_inpainting_image_generation_task.py +++ b/tests/unit/tasks/test_inpainting_image_generation_task.py @@ -1,5 +1,5 @@ +from griptape.artifacts.list_artifact import ListArtifact from griptape.engines import InpaintingImageGenerationEngine -from typing import Tuple from unittest.mock import Mock import pytest @@ -23,17 +23,30 @@ def test_artifact_inputs(self, text_artifact: TextArtifact, image_artifact: Imag input_tuple = (text_artifact, image_artifact, image_artifact) task = InpaintingImageGenerationTask(input_tuple, image_generation_engine=Mock()) - assert task.input == input_tuple + assert task.input.value == list(input_tuple) def test_callable_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): - input_tuple = (text_artifact, image_artifact, image_artifact) + input = [text_artifact, image_artifact, image_artifact] - def callable(task: BaseTask) -> tuple[TextArtifact, ImageArtifact, ImageArtifact]: - return input_tuple + def callable(task: BaseTask) -> ListArtifact: + return ListArtifact(value=list(input)) task = InpaintingImageGenerationTask(callable, image_generation_engine=Mock()) - assert task.input == input_tuple + assert task.input.value == input + + def test_list_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): + input = [text_artifact, image_artifact] + task = InpaintingImageGenerationTask(ListArtifact(input), image_generation_engine=Mock()) + + assert task.input.value == input + + def test_bad_input(self, image_artifact): + with pytest.raises(ValueError): + InpaintingImageGenerationTask(("foo", "bar", image_artifact)).run() # pyright: ignore[reportArgumentType] + + with pytest.raises(ValueError): + InpaintingImageGenerationTask(("foo", image_artifact, "baz")).run() # pyright: ignore[reportArgumentType] def test_config_image_generation_engine(self, text_artifact, image_artifact): task = InpaintingImageGenerationTask((text_artifact, image_artifact, image_artifact)) diff --git a/tests/unit/tasks/test_outpainting_image_generation_task.py b/tests/unit/tasks/test_outpainting_image_generation_task.py index f73467258..148ea133d 100644 --- a/tests/unit/tasks/test_outpainting_image_generation_task.py +++ b/tests/unit/tasks/test_outpainting_image_generation_task.py @@ -1,5 +1,5 @@ +from griptape.artifacts.list_artifact import ListArtifact from griptape.engines import OutpaintingImageGenerationEngine -from typing import Tuple from unittest.mock import Mock import pytest @@ -24,17 +24,30 @@ def test_artifact_inputs(self, text_artifact: TextArtifact, image_artifact: Imag input_tuple = (text_artifact, image_artifact, image_artifact) task = OutpaintingImageGenerationTask(input_tuple, image_generation_engine=Mock()) - assert task.input == input_tuple + assert task.input.value == list(input_tuple) def test_callable_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): - input_tuple = (text_artifact, image_artifact, image_artifact) + input = [text_artifact, image_artifact, image_artifact] - def callable(task: BaseTask) -> tuple[TextArtifact, ImageArtifact, ImageArtifact]: - return input_tuple + def callable(task: BaseTask) -> ListArtifact: + return ListArtifact(input) task = OutpaintingImageGenerationTask(callable, image_generation_engine=Mock()) - assert task.input == input_tuple + assert task.input.value == input + + def test_list_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): + input = [text_artifact, image_artifact] + task = OutpaintingImageGenerationTask(ListArtifact(input), image_generation_engine=Mock()) + + assert task.input.value == input + + def test_bad_input(self, image_artifact): + with pytest.raises(ValueError): + OutpaintingImageGenerationTask(("foo", "bar", image_artifact)).run() # pyright: ignore[reportArgumentType] + + with pytest.raises(ValueError): + OutpaintingImageGenerationTask(("foo", image_artifact, "baz")).run() # pyright: ignore[reportArgumentType] def test_config_image_generation_engine(self, text_artifact, image_artifact): task = OutpaintingImageGenerationTask((text_artifact, image_artifact, image_artifact)) diff --git a/tests/unit/tasks/test_variation_image_generation_task.py b/tests/unit/tasks/test_variation_image_generation_task.py index bef2107ac..6a9533da3 100644 --- a/tests/unit/tasks/test_variation_image_generation_task.py +++ b/tests/unit/tasks/test_variation_image_generation_task.py @@ -1,6 +1,6 @@ +from griptape.artifacts.list_artifact import ListArtifact from tests.mocks.mock_image_generation_driver import MockImageGenerationDriver from tests.mocks.mock_structure_config import MockStructureConfig -from typing import Tuple from unittest.mock import Mock import pytest @@ -23,17 +23,27 @@ def test_artifact_inputs(self, text_artifact: TextArtifact, image_artifact: Imag input_tuple = (text_artifact, image_artifact) task = VariationImageGenerationTask(input_tuple, image_generation_engine=Mock()) - assert task.input == input_tuple + assert task.input.value == list(input_tuple) def test_callable_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): - input_tuple = (text_artifact, image_artifact) + input = [text_artifact, image_artifact] - def callable(task: BaseTask) -> tuple[TextArtifact, ImageArtifact]: - return input_tuple + def callable(task: BaseTask) -> ListArtifact: + return ListArtifact(input) task = VariationImageGenerationTask(callable, image_generation_engine=Mock()) - assert task.input == input_tuple + assert task.input.value == input + + def test_list_input(self, text_artifact: TextArtifact, image_artifact: ImageArtifact): + input = [text_artifact, image_artifact] + task = VariationImageGenerationTask(ListArtifact(input), image_generation_engine=Mock()) + + assert task.input.value == input + + def test_bad_input(self, image_artifact): + with pytest.raises(ValueError): + VariationImageGenerationTask(("foo", "bar")).run() # pyright: ignore[reportArgumentType] def test_config_image_generation_engine(self, text_artifact, image_artifact): task = VariationImageGenerationTask((text_artifact, image_artifact)) From 9f787338d0be8f2f8baba1e06af0257ba3baa458 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Fri, 31 May 2024 15:07:34 -0700 Subject: [PATCH 064/145] Fix type (#813) --- tests/mocks/mock_prompt_driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/mocks/mock_prompt_driver.py b/tests/mocks/mock_prompt_driver.py index 20913a965..dc4cde69e 100644 --- a/tests/mocks/mock_prompt_driver.py +++ b/tests/mocks/mock_prompt_driver.py @@ -19,4 +19,4 @@ def try_run(self, prompt_stack: PromptStack) -> TextArtifact: return TextArtifact(value=self.mock_output() if isinstance(self.mock_output, Callable) else self.mock_output) def try_stream(self, prompt_stack: PromptStack) -> Iterator[TextArtifact]: - yield TextArtifact(value=self.mock_output) + yield TextArtifact(value=self.mock_output() if isinstance(self.mock_output, Callable) else self.mock_output) From 9f19f60749f83494c6e8aa6fe637af5a5711d483 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 3 Jun 2024 09:45:18 -0700 Subject: [PATCH 065/145] Default `off_prompt=False` on `BaseTool` (#757) --- CHANGELOG.md | 1 + README.md | 12 +- docs/examples/load-query-and-chat-marqo.md | 1 - docs/examples/multi-agent-workflow.md | 1 - docs/examples/multiple-agent-shared-memory.md | 2 +- docs/examples/talk-to-a-pdf.md | 1 - docs/examples/talk-to-a-webpage.md | 1 - .../drivers/embedding-drivers.md | 2 +- docs/griptape-framework/index.md | 4 +- docs/griptape-framework/misc/events.md | 4 +- .../structures/task-memory.md | 392 +++++++++++++++--- docs/griptape-framework/structures/tasks.md | 3 +- docs/griptape-framework/tools/index.md | 2 +- docs/griptape-tools/index.md | 2 +- .../official-tools/aws-iam-client.md | 4 +- .../official-tools/aws-s3-client.md | 5 +- .../official-tools/calculator.md | 4 +- .../griptape-tools/official-tools/computer.md | 6 +- .../official-tools/date-time.md | 2 +- .../official-tools/file-manager.md | 2 +- .../official-tools/google-cal-client.md | 9 +- .../official-tools/google-docs-client.md | 3 +- .../official-tools/google-drive-client.md | 3 +- .../official-tools/google-gmail-client.md | 5 +- .../official-tools/image-query-client.md | 1 - .../official-tools/openweather-client.md | 5 +- .../official-tools/rest-api-client.md | 1 - .../official-tools/sql-client.md | 6 +- .../official-tools/structure-run-client.md | 1 - .../official-tools/task-memory-client.md | 2 +- .../official-tools/vector-store-client.md | 3 +- .../official-tools/web-scraper.md | 4 +- .../official-tools/web-search.md | 3 +- griptape/tools/base_tool.py | 2 +- griptape/tools/task_memory_client/tool.py | 4 +- mkdocs.yml | 2 +- tests/integration/tasks/test_tool_task.py | 6 +- tests/integration/tasks/test_toolkit_task.py | 1 - tests/integration/tools/test_calculator.py | 4 +- tests/integration/tools/test_file_manager.py | 4 +- .../tools/test_google_docs_client.py | 1 - .../tools/test_google_drive_client.py | 1 - tests/unit/structures/test_agent.py | 13 +- tests/unit/structures/test_pipeline.py | 18 +- tests/unit/structures/test_workflow.py | 19 +- tests/unit/tasks/test_tool_task.py | 6 +- tests/unit/tasks/test_toolkit_task.py | 4 +- tests/unit/tools/test_base_tool.py | 10 +- tests/unit/tools/test_google_cal_client.py | 0 49 files changed, 427 insertions(+), 165 deletions(-) delete mode 100644 tests/unit/tools/test_google_cal_client.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dee34445..d053ac1fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - **BREAKING**: Updated OpenAI-based image query drivers to remove Vision from the name. +- **BREAKING**: `off_prompt` now defaults to `False` on all Tools, making Task Memory something that must be explicitly opted into. - Default the value of `azure_deployment` on all Azure Drivers to the model the Driver is using. - Field `azure_ad_token` on all Azure Drivers is no longer serializable. - Default standard OpenAI and Azure OpenAI image query model to `gpt-4o`. diff --git a/README.md b/README.md index 2f57670ee..b5e4f7bcb 100644 --- a/README.md +++ b/README.md @@ -94,9 +94,9 @@ from griptape.tools import WebScraper, FileManager, TaskMemoryClient agent = Agent( input_template="Load {{ args[0] }}, summarize it, and store it in a file called {{ args[1] }}.", tools=[ - WebScraper(), - FileManager(), - TaskMemoryClient(off_prompt=True) + WebScraper(off_prompt=True), + TaskMemoryClient(off_prompt=True), + FileManager() ] ) agent.run("https://griptape.ai", "griptape.txt") @@ -142,13 +142,13 @@ And here is the output: Output: The summarized content of the website https://griptape.ai has been successfully saved to a file named 'griptape.txt'. ``` -During the run, the Griptape Agent loaded a webpage with a **Tool**, stored its full content in **Task Memory**, queried it to answer the original question, and finally saved the answer to a file. +During the run, the Griptape Agent loaded a webpage with a [Tool](https://docs.griptape.ai/stable/griptape-tools/), stored its full content in [Task Memory](https://docs.griptape.ai/stable/griptape-framework/structures/task-memory.md), queried it to answer the original question, and finally saved the answer to a file. The important thing to note here is that no matter how big the webpage is it can never blow up the prompt token limit because the full content of the page never goes back to the LLM. Additionally, no data from the subsequent subtasks were returned back to the prompt either. So, how does it work? -All Tools have the `off_prompt` property enabled be default. Disabling it (`off_prompt=False`) will force the framework to return all tool outputs directly to the LLM prompt. `TaskMemoryClient` requires the user to set this property explicitly for usability reasons. In the above example, we set `off_prompt` to `True`, which means that the LLM can never see the data it manipulates, but can send it to other Tools. +In the above example, we set [off_prompt](https://docs.griptape.ai/stable/griptape-framework/structures/task-memory.md#off-prompt) to `True`, which means that the LLM can never see the data it manipulates, but can send it to other Tools. -[Check out our docs](https://docs.griptape.ai/latest/griptape-framework/drivers/prompt-drivers/) to learn more about how to use Griptape with other LLM providers like Anthropic, Claude, Hugging Face, and Azure. +[Check out our docs](https://docs.griptape.ai/stable/griptape-framework/drivers/prompt-drivers/) to learn more about how to use Griptape with other LLM providers like Anthropic, Claude, Hugging Face, and Azure. ## Versioning diff --git a/docs/examples/load-query-and-chat-marqo.md b/docs/examples/load-query-and-chat-marqo.md index 159fd9641..718b42729 100644 --- a/docs/examples/load-query-and-chat-marqo.md +++ b/docs/examples/load-query-and-chat-marqo.md @@ -26,7 +26,6 @@ vector_store_tool = VectorStoreClient( description="Contains information about the Griptape Framework from www.griptape.ai", query_engine=query_engine, namespace=namespace, - off_prompt=False ) # Load artifacts from the web diff --git a/docs/examples/multi-agent-workflow.md b/docs/examples/multi-agent-workflow.md index 0e85b9bde..044f4abad 100644 --- a/docs/examples/multi-agent-workflow.md +++ b/docs/examples/multi-agent-workflow.md @@ -40,7 +40,6 @@ def build_researcher(): WebSearch( google_api_key=os.environ["GOOGLE_API_KEY"], google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], - off_prompt=False, ), WebScraper( off_prompt=True, diff --git a/docs/examples/multiple-agent-shared-memory.md b/docs/examples/multiple-agent-shared-memory.md index 7332de165..cc5498d7e 100644 --- a/docs/examples/multiple-agent-shared-memory.md +++ b/docs/examples/multiple-agent-shared-memory.md @@ -54,7 +54,7 @@ config = AzureOpenAiStructureConfig( loader = Agent( tools=[ - WebScraper(), + WebScraper(off_prompt=True), ], config=config, ) diff --git a/docs/examples/talk-to-a-pdf.md b/docs/examples/talk-to-a-pdf.md index b4a6a20eb..51f71b4f6 100644 --- a/docs/examples/talk-to-a-pdf.md +++ b/docs/examples/talk-to-a-pdf.md @@ -38,7 +38,6 @@ vector_store_tool = VectorStoreClient( "Use it to answer any related questions.", query_engine=engine, namespace=namespace, - off_prompt=False ) agent = Agent( diff --git a/docs/examples/talk-to-a-webpage.md b/docs/examples/talk-to-a-webpage.md index 7e942134c..2f2cbf209 100644 --- a/docs/examples/talk-to-a-webpage.md +++ b/docs/examples/talk-to-a-webpage.md @@ -38,7 +38,6 @@ vector_store_tool = VectorStoreClient( "Use it to answer any physics-related questions.", query_engine=engine, namespace=namespace, - off_prompt=False ) agent = Agent( diff --git a/docs/griptape-framework/drivers/embedding-drivers.md b/docs/griptape-framework/drivers/embedding-drivers.md index 876013e7f..49dfde4a5 100644 --- a/docs/griptape-framework/drivers/embedding-drivers.md +++ b/docs/griptape-framework/drivers/embedding-drivers.md @@ -177,7 +177,7 @@ from griptape.drivers import ( from griptape.config import StructureConfig agent = Agent( - tools=[WebScraper(), TaskMemoryClient(off_prompt=False)], + tools=[WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=False)], config=StructureConfig( prompt_driver=OpenAiChatPromptDriver(model="gpt-4o"), embedding_driver=VoyageAiEmbeddingDriver(), diff --git a/docs/griptape-framework/index.md b/docs/griptape-framework/index.md index decf00da5..c31b8942c 100644 --- a/docs/griptape-framework/index.md +++ b/docs/griptape-framework/index.md @@ -102,7 +102,7 @@ Agents on their own are fun, but let's add some capabilities to them using Gript from griptape.structures import Agent from griptape.tools import Calculator -calculator = Calculator(off_prompt=False) +calculator = Calculator() agent = Agent( tools=[calculator] @@ -151,7 +151,7 @@ pipeline.add_tasks( ToolkitTask( "{{ args[0] }}", # Add tools for web scraping, and file management - tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=False)] + tools=[WebScraper(off_prompt=True), FileManager(off_prompt=True), TaskMemoryClient(off_prompt=False)] ), # Augment `input` from the previous task. PromptTask( diff --git a/docs/griptape-framework/misc/events.md b/docs/griptape-framework/misc/events.md index e4ff8b8f3..ec54f7106 100644 --- a/docs/griptape-framework/misc/events.md +++ b/docs/griptape-framework/misc/events.md @@ -149,7 +149,7 @@ pipeline = Pipeline( pipeline.add_tasks( ToolkitTask( "Based on https://griptape.ai, tell me what griptape is.", - tools=[WebScraper(), TaskMemoryClient(off_prompt=False)], + tools=[WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=False)], ) ) @@ -168,7 +168,7 @@ from griptape.tools import WebScraper pipeline = Pipeline() pipeline.config.prompt_driver.stream = True -pipeline.add_tasks(ToolkitTask("Based on https://griptape.ai, tell me what griptape is.", tools=[WebScraper()])) +pipeline.add_tasks(ToolkitTask("Based on https://griptape.ai, tell me what griptape is.", tools=[WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=False)])) for artifact in Stream(pipeline).run(): print(artifact.value, end="", flush=True), diff --git a/docs/griptape-framework/structures/task-memory.md b/docs/griptape-framework/structures/task-memory.md index e44625476..08e4e9444 100644 --- a/docs/griptape-framework/structures/task-memory.md +++ b/docs/griptape-framework/structures/task-memory.md @@ -1,89 +1,343 @@ ## Overview -Task Memory augments activity inputs and outputs with storage capabilities. It's a way to keep any data generated by tools off prompt but still allow LLMs to operate on that data remotely. This is useful in the following scenarios: + +Task Memory is a powerful feature of Griptape that allows you to control where the data returned by [Tools](../tools/index.md) is stored. This is useful in the following scenarios: * **Security requirements**: many organizations don't want data to leave their cloud for regulatory and security reasons. -* **Long textual content**: when textual content returned by tools can't fit in the token limit, it's often useful to perform operations on it in a separate process, not in the main LLM. -* **Non-textual content**: tools can generate images, videos, PDFs, and other non-textual content that can be stored in memory and acted upon later by other tools. +* **Long textual content**: when textual content returned by Tools can't fit in the token limit, it's often useful to perform actions on it as a separate operation, not through the main LLM. +* **Non-textual content**: Tools can generate images, videos, PDFs, and other non-textual content that can be stored in Task Memory and acted upon later by other Tools. + +!!! tip + Running into issue with Task Memory? Check out the [Task Memory Considerations](#task-memory-considerations) section for some common pitfalls. -By default, Griptape augments all tool outputs with [TaskMemory](../../reference/griptape/memory/task/task_memory.md) but you can override at the structure, task, or tool activity level. +## Off Prompt +You can enable or disable sending a Tool's results to Task Memory with the `off_prompt` parameter. By default, all Tools have `off_prompt` set to `False` making this an opt-in feature. +When `off_prompt` is set to `True`, the Tool will store its output in Task Memory. When `off_prompt` is set to `False`, the Tool will return its output directly to the LLM. -## Task Memory -Here is an example of how memory can be used in unison with multiple tools to store and load content: +Lets look at a simple example where `off_prompt` is set to `False`: ```python -from griptape.artifacts import TextArtifact, BlobArtifact -from griptape.memory.task.storage import TextArtifactStorage, BlobArtifactStorage from griptape.structures import Agent -from griptape.tools import WebScraper, FileManager, TaskMemoryClient -from griptape.engines import VectorQueryEngine, PromptSummaryEngine, CsvExtractionEngine, JsonExtractionEngine -from griptape.drivers import LocalVectorStoreDriver, OpenAiEmbeddingDriver, OpenAiChatPromptDriver +from griptape.tools import Calculator + +# Create an agent with the Calculator tool +agent = Agent( + tools=[Calculator(off_prompt=False)] +) + +agent.run("What is 10 raised to the power of 5?") +``` -prompt_driver = OpenAiChatPromptDriver(model="gpt-3.5-turbo") +``` +[04/26/24 13:06:42] INFO ToolkitTask 36b9dea13b9d479fb752014f41dca54c + Input: What is the square root of 12345? +[04/26/24 13:06:48] INFO Subtask a88c0feeaef6493796a9148ed68c9caf + Thought: To find the square root of 12345, I can use the Calculator action with the expression "12345 ** 0.5". + Actions: [{"name": "Calculator", "path": "calculate", "input": {"values": {"expression": "12345 ** 0.5"}}, "tag": "sqrt_12345"}] + INFO Subtask a88c0feeaef6493796a9148ed68c9caf + Response: 111.1080555135405 +[04/26/24 13:06:49] INFO ToolkitTask 36b9dea13b9d479fb752014f41dca54c + Output: The square root of 12345 is approximately 111.108. +``` + +Since the result of the Calculator Tool is neither sensitive nor too large, we can set `off_prompt` to `False` and not use Task Memory. + +Let's explore what happens when `off_prompt` is set to `True`: + +```python +from griptape.structures import Agent +from griptape.tools import Calculator +# Create an agent with the Calculator tool agent = Agent( - tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=True)] + tools=[Calculator(off_prompt=True)] ) +agent.run("What is 10 raised to the power of 5?") +``` + +``` +[04/26/24 13:07:02] INFO ToolkitTask ecbb788d9830491ab72a8a2bbef5fb0a + Input: What is the square root of 12345? +[04/26/24 13:07:10] INFO Subtask 4700dc0c2e934d1a9af60a28bd770bc6 + Thought: To find the square root of a number, we can use the Calculator action with the expression "sqrt(12345)". However, the Calculator + action only supports basic arithmetic operations and does not support the sqrt function. Therefore, we need to use the equivalent expression + for square root which is raising the number to the power of 0.5. + Actions: [{"name": "Calculator", "path": "calculate", "input": {"values": {"expression": "12345**0.5"}}, "tag": "sqrt_calculation"}] + INFO Subtask 4700dc0c2e934d1a9af60a28bd770bc6 + Response: Output of "Calculator.calculate" was stored in memory with memory_name "TaskMemory" and artifact_namespace + "6be74c5128024c0588eb9bee1fdb9aa5" +[04/26/24 13:07:16] ERROR Subtask ecbb788d9830491ab72a8a2bbef5fb0a + Invalid action JSON: Or({Literal("name", description=""): 'Calculator', Literal("path", description="Can be used for computing simple + numerical or algebraic calculations in Python"): 'calculate', Literal("input", description=""): {'values': Schema({Literal("expression", + description="Arithmetic expression parsable in pure Python. Single line only. Don't use variables. Don't use any imports or external + libraries"): })}, Literal("tag", description="Unique tag name for action execution."): }) did not validate {'name': + 'Memory', 'path': 'get', 'input': {'memory_name': 'TaskMemory', 'artifact_namespace': '6be74c5128024c0588eb9bee1fdb9aa5'}, 'tag': + 'get_sqrt_result'} + Key 'name' error: + 'Calculator' does not match 'Memory' +...Output truncated for brevity... +``` + +When we set `off_prompt` to `True`, the Agent does not function as expected, even generating an error. This is because the Calculator output is being stored in Task Memory but the Agent has no way to access it. +To fix this, we need a [Tool that can read from Task Memory](#tools-that-can-read-from-task-memory) such as the `TaskMemoryClient`. +This is an example of [not providing a Task Memory compatible Tool](#not-providing-a-task-memory-compatible-tool). + +## Task Memory Client + +The [TaskMemoryClient](../../griptape-tools/official-tools/task-memory-client.md) is a Tool that allows an Agent to interact with Task Memory. It has the following methods: + +- `query`: Retrieve the content of an Artifact stored in Task Memory. +- `summarize`: Summarize the content of an Artifact stored in Task Memory. + +Let's add `TaskMemoryClient` to the Agent and run the same task. +Note that on the `TaskMemoryClient` we've set `off_prompt` to `False` so that the results of the query can be returned directly to the LLM. +If we had kept it as `True`, the results would have been stored back Task Memory which would've put us back to square one. See [Task Memory Looping](#task-memory-looping) for more information on this scenario. + +```python +from griptape.structures import Agent +from griptape.tools import Calculator, TaskMemoryClient + +# Create an agent with the Calculator tool +agent = Agent(tools=[Calculator(off_prompt=True), TaskMemoryClient(off_prompt=False)]) + +agent.run("What is the square root of 12345?") +``` + +``` +[04/26/24 13:13:01] INFO ToolkitTask 5b46f9ef677c4b31906b48aba3f45e2c + Input: What is the square root of 12345? +[04/26/24 13:13:07] INFO Subtask 611d98ea5576430fbc63259420577ab2 + Thought: To find the square root of 12345, I can use the Calculator action with the expression "12345 ** 0.5". + Actions: [{"name": "Calculator", "path": "calculate", "input": {"values": {"expression": "12345 ** 0.5"}}, "tag": "sqrt_12345"}] +[04/26/24 13:13:08] INFO Subtask 611d98ea5576430fbc63259420577ab2 + Response: Output of "Calculator.calculate" was stored in memory with memory_name "TaskMemory" and artifact_namespace + "7554b69e1d414a469b8882e2266dcea1" +[04/26/24 13:13:15] INFO Subtask 32b9163a15644212be60b8fba07bd23b + Thought: The square root of 12345 has been calculated and stored in memory. I can retrieve this value using the TaskMemoryClient action with + the query path, providing the memory_name and artifact_namespace as input. + Actions: [{"tag": "retrieve_sqrt", "name": "TaskMemoryClient", "path": "query", "input": {"values": {"memory_name": "TaskMemory", + "artifact_namespace": "7554b69e1d414a469b8882e2266dcea1", "query": "What is the result of the calculation?"}}}] +[04/26/24 13:13:16] INFO Subtask 32b9163a15644212be60b8fba07bd23b + Response: The result of the calculation is 111.1080555135405. +[04/26/24 13:13:17] INFO ToolkitTask 5b46f9ef677c4b31906b48aba3f45e2c + Output: The square root of 12345 is approximately 111.108. +``` + +While this fixed the problem, it took a handful more steps than when we just had `Calculator()`. Something like a basic calculation is an instance of where [Task Memory may not be necessary](#task-memory-may-not-be-necessary). +Let's look at a more complex example where Task Memory shines. + +## Large Data + +Let's say we want to query the contents of a very large webpage. + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper + +# Create an agent with the Calculator tool +agent = Agent(tools=[WebScraper()]) + agent.run( - "Load https://www.griptape.ai, summarize it, " - "and store it in griptape.txt" + "According to this page https://en.wikipedia.org/wiki/Elden_Ring, how many copies of Elden Ring have been sold?" ) ``` +When running this example, we get the following error: ``` -[10/20/23 13:31:40] INFO ToolkitTask 82211eeb10374e75ad77135373d816e6 - Input: Load https://www.griptape.ai, summarize it, - and store it in griptape.txt -[10/20/23 13:31:52] INFO Subtask 17b3d35197eb417b834a7db49039ae4f - Thought: The user wants to load the webpage at - https://www.griptape.ai, summarize its content, and - store the summary in a file named griptape.txt. To - achieve this, I need to first use the WebScraper - tool to get the content of the webpage. Then, I - will use the TaskMemoryClient to summarize the - content. Finally, I will use the FileManager tool - to save the summarized content to a file named - griptape.txt. - - Action: {"name": "WebScraper", - "path": "get_content", "input": {"values": - {"url": "https://www.griptape.ai"}}} -[10/20/23 13:31:53] INFO Subtask 17b3d35197eb417b834a7db49039ae4f - Response: Output of "WebScraper.get_content" was - stored in memory with memory_name "TaskMemory" and - artifact_namespace - "82543abe79984d11bb952bd6036a7a01" -[10/20/23 13:32:00] INFO Subtask 58bac35adda94157ac6f9482e7c41c9f - Thought: Now that I have the content of the webpage - stored in memory, I can use the TaskMemoryClient - tool to summarize this content. - Action: {"name": - "TaskMemoryClient", "path": "summarize", - "input": {"values": {"memory_name": "TaskMemory", - "artifact_namespace": - "82543abe79984d11bb952bd6036a7a01"}}} -[10/20/23 13:32:03] INFO Subtask 58bac35adda94157ac6f9482e7c41c9f - Response: Output of - "TaskMemoryClient.summarize" was stored in - memory with memory_name "TaskMemory" and - artifact_namespace - "01b8015f8c5647f09e8d103198404db0" -[10/20/23 13:32:12] INFO Subtask a630f649007b4d7fa0b6cf85be6b2f4f - Thought: Now that I have the summarized content of - the webpage stored in memory, I can use the - FileManager tool to save this content to a file - named griptape.txt. - Action: {"name": "FileManager", - "path": "save_memory_artifacts_to_disk", - "input": {"values": {"dir_name": ".", "file_name": - "griptape.txt", "memory_name": "TaskMemory", - "artifact_namespace": - "01b8015f8c5647f09e8d103198404db0"}}} - INFO Subtask a630f649007b4d7fa0b6cf85be6b2f4f - Response: saved successfully -[10/20/23 13:32:14] INFO ToolkitTask 82211eeb10374e75ad77135373d816e6 - Output: The summarized content of the webpage at - https://www.griptape.ai has been successfully - stored in a file named griptape.txt. +[04/26/24 13:20:02] ERROR ToolkitTask 67e2f907f95d4850ae79f9da67df54c1 + Error code: 400 - {'error': {'message': "This model's maximum context length is 8192 tokens. However, your messages resulted in 73874 tokens. + Please reduce the length of the messages.", 'type': 'invalid_request_error', 'param': 'messages', 'code': 'context_length_exceeded'}} +``` + +This is because the content of the webpage is too large to fit in the LLM's input token limit. We can fix this by storing the content in Task Memory, and then querying it with the `TaskMemoryClient`. +Note that we're setting `off_prompt` to `False` on the `TaskMemoryClient` so that the _queried_ content can be returned directly to the LLM. + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper, TaskMemoryClient + +agent = Agent( + tools=[ + WebScraper(off_prompt=True), + TaskMemoryClient(off_prompt=False), + ] +) + +agent.run( + "According to this page https://en.wikipedia.org/wiki/Elden_Ring, how many copies of Elden Ring have been sold?" +) +``` + +And now we get the expected output: ``` +[04/26/24 13:51:51] INFO ToolkitTask 7aca20f202df47a2b9848ed7025f9c21 + Input: According to this page https://en.wikipedia.org/wiki/Elden_Ring, how many copies of Elden Ring have been sold? +[04/26/24 13:51:58] INFO Subtask 5b21d8ead32b4644abcd1e852bb5f512 + Thought: I need to scrape the content of the provided URL to find the information about how many copies of Elden Ring have been sold. + Actions: [{"name": "WebScraper", "path": "get_content", "input": {"values": {"url": "https://en.wikipedia.org/wiki/Elden_Ring"}}, "tag": + "scrape_elden_ring"}] +[04/26/24 13:52:04] INFO Subtask 5b21d8ead32b4644abcd1e852bb5f512 + Response: Output of "WebScraper.get_content" was stored in memory with memory_name "TaskMemory" and artifact_namespace + "2d4ebc7211074bb7be26613eb25d8fc1" +[04/26/24 13:52:11] INFO Subtask f12eb3d3b4924e4085808236b460b43d + Thought: Now that the webpage content is stored in memory, I need to query this memory to find the information about how many copies of Elden + Ring have been sold. + Actions: [{"tag": "query_sales", "name": "TaskMemoryClient", "path": "query", "input": {"values": {"memory_name": "TaskMemory", + "artifact_namespace": "2d4ebc7211074bb7be26613eb25d8fc1", "query": "How many copies of Elden Ring have been sold?"}}}] +[04/26/24 13:52:14] INFO Subtask f12eb3d3b4924e4085808236b460b43d + Response: Elden Ring sold 23 million copies by February 2024. +[04/26/24 13:52:15] INFO ToolkitTask 7aca20f202df47a2b9848ed7025f9c21 + Output: Elden Ring sold 23 million copies by February 2024. +``` + +## Sensitive Data + +Because Task Memory splits up the storage and retrieval of data, you can use different models for each step. + +Here is an example where we use GPT-4 to orchestrate the Tools and store the data in Task Memory, and Amazon Bedrock's Titan model to query the raw content. +In this example, GPT-4 _never_ sees the contents of the page, only that it was stored in Task Memory. Even the query results generated by the Titan model are stored in Task Memory so that the `FileManager` can save the results to disk without GPT-4 ever seeing them. + + +```python +from griptape.artifacts import TextArtifact +from griptape.config import ( + OpenAiStructureConfig, +) +from griptape.drivers import ( + AmazonBedrockPromptDriver, + BedrockTitanPromptModelDriver, + AmazonBedrockTitanEmbeddingDriver, + LocalVectorStoreDriver, + OpenAiChatPromptDriver, +) +from griptape.engines import VectorQueryEngine +from griptape.memory import TaskMemory +from griptape.memory.task.storage import TextArtifactStorage +from griptape.structures import Agent +from griptape.tools import FileManager, TaskMemoryClient, WebScraper + +agent = Agent( + config=OpenAiStructureConfig( + prompt_driver=OpenAiChatPromptDriver(model="gpt-4"), + ), + task_memory=TaskMemory( + artifact_storages={ + TextArtifact: TextArtifactStorage( + query_engine=VectorQueryEngine( + prompt_driver=AmazonBedrockPromptDriver( + model="amazon.titan-text-express-v1", + prompt_model_driver=BedrockTitanPromptModelDriver(), + ), + vector_store_driver=LocalVectorStoreDriver( + embedding_driver=AmazonBedrockTitanEmbeddingDriver() + ), + ), + ), + } + ), + tools=[ + WebScraper(off_prompt=True), + TaskMemoryClient(off_prompt=True, allowlist=["query"]), + FileManager(off_prompt=True), # FileManager returns an InfoArtifact which will not be stored in Task Memory regardless of the off_prompt setting + ], +) + +agent.run( + "Use this page https://en.wikipedia.org/wiki/Elden_Ring to find how many copies of Elden Ring have been sold, and then save the result to a file." +) +``` + +``` +[04/30/24 16:36:45] INFO ToolkitTask 3d3c5f5a98a44f32ad9533621c036604 + Input: According to this page https://en.wikipedia.org/wiki/Elden_Ring, find how many copies of Elden Ring have been sold and then save the + result to a file. +[04/30/24 16:36:52] INFO Subtask 61ec822bfe49472c9ed874fad07d13a1 + Thought: First, I need to scrape the content of the provided URL. Then, I will search the scraped content for the number of copies of Elden Ring that have been sold. Finally, I will save this information to a file. + + Actions: [{"name": "WebScraper", "path": "get_content", "input": {"values": {"url": "https://en.wikipedia.org/wiki/Elden_Ring"}}, "tag": "scrape_elden_ring"}] +[04/30/24 16:37:04] INFO Subtask 61ec822bfe49472c9ed874fad07d13a1 + Response: Output of "WebScraper.get_content" was stored in memory with memory_name "TaskMemory" and artifact_namespace "c7a01e8202e24869b7be559e0daff110" +[04/30/24 16:37:10] INFO Subtask 32f9cb73d8944e5ca36bd68a90e4f4b2 + Thought: Now that the webpage content is stored in memory, I need to query this memory to find the number of copies of Elden Ring that have been sold. + Actions: [{"tag": "query_sales", "name": "TaskMemoryClient", "path": "query", "input": {"values": {"memory_name": "TaskMemory", "artifact_namespace": "c7a01e8202e24869b7be559e0daff110", "query": "How many copies of Elden Ring have been sold?"}}}] +[04/30/24 16:37:18] INFO Subtask 32f9cb73d8944e5ca36bd68a90e4f4b2 + Response: Output of "TaskMemoryClient.query" was stored in memory with memory_name "TaskMemory" and artifact_namespace "f8dd40fb302a47d7862c8b76eeaf61c2" +[04/30/24 16:37:25] INFO Subtask 74a5fd392b044956842a56b76d09183e + Thought: Now that I have the number of copies sold stored in memory, I need to save this information to a file. + Actions: [{"tag": "save_sales", "name": "FileManager", "path": "save_memory_artifacts_to_disk", "input": {"values": {"dir_name": "sales_data", "file_name": "elden_ring_sales.txt", "memory_name": "TaskMemory", "artifact_namespace": "f8dd40fb302a47d7862c8b76eeaf61c2"}}}] + INFO Subtask 74a5fd392b044956842a56b76d09183e + Response: Successfully saved memory artifacts to disk +[04/30/24 16:37:27] INFO ToolkitTask 3d3c5f5a98a44f32ad9533621c036604 + Output: The number of copies of Elden Ring sold has been successfully saved to the file "elden_ring_sales.txt" in the "sales_data" directory. +``` + +## Tools That Can Read From Task Memory + +As seen in the previous example, certain Tools are designed to read directly from Task Memory. This means that you can use these Tools to interact with the data stored in Task Memory without needing to pass it through the LLM. + +Today, these include: + +- [TaskMemoryClient](../../griptape-tools/official-tools/task-memory-client.md) +- [FileManager](../../griptape-tools/official-tools/file-manager.md) +- [AwsS3Client](../../griptape-tools/official-tools/aws-s3-client.md) +- [GoogleDriveClient](../../griptape-tools/official-tools/google-drive-client.md) +- [GoogleDocsClient](../../griptape-tools/official-tools/google-docs-client.md) + +## Task Memory Considerations + +Task Memory is a powerful feature of Griptape, but with great power comes great responsibility. Here are some things to keep in mind when using Task Memory: + +### Tool Return Types +Griptape will only store Artifacts in Task Memory that have been explicitly defined in the `artifact_storages` parameter of the `TaskMemory` object. +If you try to store an Artifact that is not defined in `artifact_storages`, Griptape will raise an error. The exception to this is `InfoArtifact`s and `ErrorArtifact`s. Griptape will never store these Artifacts store in Task Memory. +By default, Griptape will store `TextArtifact`'s, `BlobArtifact`'s in Task Memory. Additionally, Griptape will also store the elements of `ListArtifact`'s as long as they are of a supported Artifact type. + +### Not Providing a Task Memory Compatible Tool +When using Task Memory, make sure that you have at least one Tool that can read from Task Memory. If you don't, the data stored in Task Memory will be inaccessible to the Agent and it may hallucinate Tool Activities. + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper + +agent = Agent( + tools=[ + WebScraper(off_prompt=True) # `off_prompt=True` will store the data in Task Memory + # Missing a Tool that can read from Task Memory + ] +) +agent.run("According to this page https://en.wikipedia.org/wiki/San_Francisco, what is the population of San Francisco?") +``` + +### Task Memory Looping +An improper configuration of Tools can lead to the LLM using the Tools in a loop. For example, if you have a Tool that stores data in Task Memory and another Tool that queries that data from Task Memory ([Tools That Can Read From Task Memory](#tools-that-can-read-from-task-memory)), make sure that the query Tool does not store the data back in Task Memory. +This can create a loop where the same data is stored and queried over and over again. + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper + +agent = Agent( + tools=[ + WebScraper(off_prompt=True), # This tool will store the data in Task Memory + TaskMemoryClient(off_prompt=True) # This tool will store the data back in Task Memory with no way to get it out + ] +) +agent.run("According to this page https://en.wikipedia.org/wiki/Dark_forest_hypothesis, what is the Dark Forest Hypothesis?") +``` + +### Task Memory May Not Be Necessary +Task Memory may not be necessary for all use cases. If the data returned by a Tool is not sensitive, not too large, and does not need to be acted upon by another Tool, you can leave the default of `off_prompt` to `False` and return the data directly to the LLM. + +```python +from griptape.structures import Agent +from griptape.tools import WebScraper + +agent = Agent( + tools=[ + Calculator() # Default value of `off_prompt=False` will return the data directly to the LLM + ] +) +agent.run("What is 10 ^ 3, 55 / 23, and 12345 * 0.5?") +``` + diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index 683648cef..bff78a96c 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -103,7 +103,7 @@ agent = Agent() agent.add_task( ToolkitTask( "Load https://www.griptape.ai, summarize it, and store it in a file called griptape.txt", - tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=False)] + tools=[WebScraper(off_prompt=True), FileManager(off_prompt=True), TaskMemoryClient(off_prompt=True)] ), ) @@ -691,7 +691,6 @@ def build_researcher(): WebSearch( google_api_key=os.environ["GOOGLE_API_KEY"], google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], - off_prompt=False, ), WebScraper( off_prompt=True, diff --git a/docs/griptape-framework/tools/index.md b/docs/griptape-framework/tools/index.md index 6a131298c..0ae8054af 100644 --- a/docs/griptape-framework/tools/index.md +++ b/docs/griptape-framework/tools/index.md @@ -18,7 +18,7 @@ pipeline = Pipeline() pipeline.add_tasks( ToolkitTask( "Load https://www.griptape.ai, summarize it, and store it in a file called griptape.txt", - tools=[WebScraper(), FileManager(), TaskMemoryClient(off_prompt=False)] + tools=[WebScraper(off_prompt=True), FileManager(off_prompt=True), TaskMemoryClient(off_prompt=False)] ), ) diff --git a/docs/griptape-tools/index.md b/docs/griptape-tools/index.md index 0476cd7b1..869cde41e 100644 --- a/docs/griptape-tools/index.md +++ b/docs/griptape-tools/index.md @@ -31,7 +31,7 @@ A tool can have many "activities" as denoted by the `@activity` decorator. Each Output artifacts from all tool activities (except for `InfoArtifact` and `ErrorArtifact`) go to short-term `TaskMemory`. To disable that behavior set the `off_prompt` tool parameter to `False`: ```python title="PYTEST_IGNORE" -RandomNumberGenerator(off_prompt=False) +RandomNumberGenerator() ``` We provide a set of official Griptape Tools for accessing and processing data. You can also [build your own tools](./custom-tools/index.md). diff --git a/docs/griptape-tools/official-tools/aws-iam-client.md b/docs/griptape-tools/official-tools/aws-iam-client.md index 89f0ccbba..ac831d492 100644 --- a/docs/griptape-tools/official-tools/aws-iam-client.md +++ b/docs/griptape-tools/official-tools/aws-iam-client.md @@ -5,14 +5,14 @@ This tool enables LLMs to make AWS IAM API requests. ```python import boto3 from griptape.structures import Agent -from griptape.tools import AwsIamClient, TaskMemoryClient +from griptape.tools import AwsIamClient # Initialize the AWS IAM client aws_iam_client = AwsIamClient(session=boto3.Session()) # Create an agent with the AWS IAM client tool agent = Agent( - tools=[aws_iam_client, TaskMemoryClient(off_prompt=False)] + tools=[aws_iam_client] ) # Run the agent with a high-level task diff --git a/docs/griptape-tools/official-tools/aws-s3-client.md b/docs/griptape-tools/official-tools/aws-s3-client.md index 220a2d471..d7406a987 100644 --- a/docs/griptape-tools/official-tools/aws-s3-client.md +++ b/docs/griptape-tools/official-tools/aws-s3-client.md @@ -9,7 +9,8 @@ from griptape.tools import AwsS3Client, TaskMemoryClient # Initialize the AWS S3 client aws_s3_client = AwsS3Client( - session=boto3.Session() + session=boto3.Session(), + off_prompt=True ) # Create an agent with the AWS S3 client tool @@ -62,4 +63,4 @@ agent.run("List all my S3 buckets.") 3. Bucket Name: 'example-bucket-3', Creation Date: '2022-01-03T00:00:00Z' Please note that the creation dates are in UTC. -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/calculator.md b/docs/griptape-tools/official-tools/calculator.md index af3159c82..648eee7f3 100644 --- a/docs/griptape-tools/official-tools/calculator.md +++ b/docs/griptape-tools/official-tools/calculator.md @@ -8,7 +8,7 @@ from griptape.tools import Calculator # Create an agent with the Calculator tool agent = Agent( - tools=[Calculator(off_prompt=False)] + tools=[Calculator()] ) # Run the agent with a task to perform the arithmetic calculation of \(10^5\) @@ -30,4 +30,4 @@ agent.run("What is 10 raised to the power of 5?") Response: 100000 [09/08/23 14:23:58] INFO Task bbc6002a5e5b4655bb52b6a550a1b2a5 Output: 10 raised to the power of 5 is 100000. -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/computer.md b/docs/griptape-tools/official-tools/computer.md index 9ff9ed288..f2b23a548 100644 --- a/docs/griptape-tools/official-tools/computer.md +++ b/docs/griptape-tools/official-tools/computer.md @@ -6,14 +6,14 @@ You can specify a local working directory and environment variables during tool ```python from griptape.structures import Agent -from griptape.tools import Computer, TaskMemoryClient +from griptape.tools import Computer # Initialize the Computer tool computer = Computer() # Create an agent with the Computer tool agent = Agent( - tools=[computer, TaskMemoryClient(off_prompt=False)] + tools=[computer] ) # Create a file using the shell command @@ -104,4 +104,4 @@ agent.run(f"Run this shell command for me: cat {filename}") [09/11/23 16:25:10] INFO Task d08009ee983c4286ba10f83bcf3080e6 Output: The content of the file 'my_new_file.txt' is: 'This is the content of the file.' -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/date-time.md b/docs/griptape-tools/official-tools/date-time.md index fa2a2e153..6ecf6e2a6 100644 --- a/docs/griptape-tools/official-tools/date-time.md +++ b/docs/griptape-tools/official-tools/date-time.md @@ -8,7 +8,7 @@ from griptape.tools import DateTime # Create an agent with the DateTime tool agent = Agent( - tools=[DateTime(off_prompt=False)] + tools=[DateTime()] ) # Fetch the current date and time diff --git a/docs/griptape-tools/official-tools/file-manager.md b/docs/griptape-tools/official-tools/file-manager.md index cc10ccfcb..491711ba0 100644 --- a/docs/griptape-tools/official-tools/file-manager.md +++ b/docs/griptape-tools/official-tools/file-manager.md @@ -45,4 +45,4 @@ agent.run("Can you get me the sample1.txt file?") [09/12/23 12:08:10] INFO Task 16a1ce1847284ae3805485bad7d99116 Output: The content of the file "sample1.txt" is "This is the content of sample1.txt". -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/google-cal-client.md b/docs/griptape-tools/official-tools/google-cal-client.md index cc2661a92..4069d0246 100644 --- a/docs/griptape-tools/official-tools/google-cal-client.md +++ b/docs/griptape-tools/official-tools/google-cal-client.md @@ -5,7 +5,7 @@ The GoogleCalendarClient tool allows you to interact with Google Calendar. ```python import os -from griptape.tools import GoogleCalendarClient, TaskMemoryClient +from griptape.tools import GoogleCalendarClient from griptape.structures import Agent # Create the GoogleCalendarClient tool @@ -22,16 +22,17 @@ google_calendar_tool = GoogleCalendarClient( "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] }, - owner_email=os.environ["GOOGLE_OWNER_EMAIL"] + owner_email=os.environ["GOOGLE_OWNER_EMAIL"], + ) # Set up an agent using the GoogleCalendarClient tool agent = Agent( - tools=[google_calendar_tool, TaskMemoryClient(off_prompt=False)] + tools=[google_calendar_tool] ) # Task: Get upcoming events from a Google calendar agent.run( "Get me the details of the next upcoming event from my primary calendar.", ) -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/google-docs-client.md b/docs/griptape-tools/official-tools/google-docs-client.md index 26a4a1f10..db2f3c75b 100644 --- a/docs/griptape-tools/official-tools/google-docs-client.md +++ b/docs/griptape-tools/official-tools/google-docs-client.md @@ -22,7 +22,6 @@ google_docs_tool = GoogleDocsClient( "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] }, owner_email=os.environ["GOOGLE_OWNER_EMAIL"], - off_prompt=False ) # Set up an agent using the GoogleDocsClient tool @@ -60,4 +59,4 @@ agent.run( successfully created in the 'test' folder with the content 'Hey, Tony.'. The Google Doc ID is 1OgKbsPqxOnzkf65kodb1i1_qC1zjX_Bend5XL5bVxpA. -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/google-drive-client.md b/docs/griptape-tools/official-tools/google-drive-client.md index 1c7d53541..069b9a6f9 100644 --- a/docs/griptape-tools/official-tools/google-drive-client.md +++ b/docs/griptape-tools/official-tools/google-drive-client.md @@ -22,7 +22,6 @@ google_drive_tool = GoogleDriveClient( "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] }, owner_email=os.environ["GOOGLE_OWNER_EMAIL"], - off_prompt=False ) # Set up an agent using the GoogleDriveClient tool @@ -57,4 +56,4 @@ agent.run( Output: The content 'Hi this is Tony' has been successfully saved in a file named 'hello.txt' on your Google Drive. -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/google-gmail-client.md b/docs/griptape-tools/official-tools/google-gmail-client.md index 067928a39..d012939a2 100644 --- a/docs/griptape-tools/official-tools/google-gmail-client.md +++ b/docs/griptape-tools/official-tools/google-gmail-client.md @@ -21,8 +21,7 @@ gmail_tool = GoogleGmailClient( "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": os.environ["GOOGLE_CERT_URL"] }, - owner_email=os.environ["GOOGLE_OWNER_EMAIL"], - off_prompt=False + owner_email=os.environ["GOOGLE_OWNER_EMAIL"], ) # Set up an agent using the GoogleGmailClient tool @@ -59,4 +58,4 @@ agent.run( [10/05/23 13:24:19] INFO ToolkitTask 1f190f823d584053bfe9942f41b6cb2d Output: The draft email has been successfully created in Gmail with the ID: r6322867913697829111. -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/image-query-client.md b/docs/griptape-tools/official-tools/image-query-client.md index 8da058d3e..a1044fb91 100644 --- a/docs/griptape-tools/official-tools/image-query-client.md +++ b/docs/griptape-tools/official-tools/image-query-client.md @@ -21,7 +21,6 @@ engine = ImageQueryEngine( # Create an Image Query Client configured to use the engine. tool = ImageQueryClient( image_query_engine=engine, - off_prompt=False, ) # Create an agent and provide the tool to it. diff --git a/docs/griptape-tools/official-tools/openweather-client.md b/docs/griptape-tools/official-tools/openweather-client.md index d6d150766..65d0975d4 100644 --- a/docs/griptape-tools/official-tools/openweather-client.md +++ b/docs/griptape-tools/official-tools/openweather-client.md @@ -5,16 +5,15 @@ The [OpenWeatherClient](../../reference/griptape/tools/openweather_client/tool.m ```python import os from griptape.structures import Agent -from griptape.tools import OpenWeatherClient, TaskMemoryClient +from griptape.tools import OpenWeatherClient agent = Agent( tools=[ OpenWeatherClient( api_key=os.environ["OPENWEATHER_API_KEY"], ), - TaskMemoryClient(off_prompt=False) ] ) agent.run("What's the weather currently like in San Francisco?") -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/rest-api-client.md b/docs/griptape-tools/official-tools/rest-api-client.md index a889f0e81..07ddccf86 100644 --- a/docs/griptape-tools/official-tools/rest-api-client.md +++ b/docs/griptape-tools/official-tools/rest-api-client.md @@ -20,7 +20,6 @@ posts_client = RestApiClient( base_url="https://jsonplaceholder.typicode.com", path="posts", description="Allows for creating, updating, deleting, patching, and getting posts.", - off_prompt=False, request_body_schema=dumps( { "$schema": "https://json-schema.org/draft/2019-09/schema", diff --git a/docs/griptape-tools/official-tools/sql-client.md b/docs/griptape-tools/official-tools/sql-client.md index 0e6fcf370..7e5bf35e6 100644 --- a/docs/griptape-tools/official-tools/sql-client.md +++ b/docs/griptape-tools/official-tools/sql-client.md @@ -8,7 +8,7 @@ import boto3 from griptape.drivers import AmazonRedshiftSqlDriver from griptape.loaders import SqlLoader from griptape.structures import Agent -from griptape.tools import SqlClient, TaskMemoryClient +from griptape.tools import SqlClient session = boto3.Session() @@ -29,7 +29,7 @@ sql_tool = SqlClient( ) agent = Agent( - tools=[sql_tool, TaskMemoryClient(off_prompt=False)] + tools=[sql_tool] ) agent.run("SELECT * FROM people;") ``` @@ -68,4 +68,4 @@ agent.run("SELECT * FROM people;") several employees. Notably, there are two employees named Tanya Cooley who are both managers, and two employees named John Doe who are both coders. -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/structure-run-client.md b/docs/griptape-tools/official-tools/structure-run-client.md index 863e02727..0907fa06a 100644 --- a/docs/griptape-tools/official-tools/structure-run-client.md +++ b/docs/griptape-tools/official-tools/structure-run-client.md @@ -21,7 +21,6 @@ structure_run_tool = StructureRunClient( api_key=api_key, structure_id=structure_id, ), - off_prompt=False, ) # Set up an agent using the StructureRunClient tool diff --git a/docs/griptape-tools/official-tools/task-memory-client.md b/docs/griptape-tools/official-tools/task-memory-client.md index 9b32d4054..f91bee39a 100644 --- a/docs/griptape-tools/official-tools/task-memory-client.md +++ b/docs/griptape-tools/official-tools/task-memory-client.md @@ -7,5 +7,5 @@ from griptape.structures import Agent from griptape.tools import WebScraper, TaskMemoryClient -Agent(tools=[WebScraper(), TaskMemoryClient(off_prompt=False)]) +Agent(tools=[WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=False)]) ``` diff --git a/docs/griptape-tools/official-tools/vector-store-client.md b/docs/griptape-tools/official-tools/vector-store-client.md index 2b4d6cbe5..5af8cee88 100644 --- a/docs/griptape-tools/official-tools/vector-store-client.md +++ b/docs/griptape-tools/official-tools/vector-store-client.md @@ -24,7 +24,8 @@ engine.upsert_text_artifacts( vector_db = VectorStoreClient( description="This DB has information about the Griptape Python framework", query_engine=engine, - namespace="griptape" + namespace="griptape", + off_prompt=True ) agent = Agent( diff --git a/docs/griptape-tools/official-tools/web-scraper.md b/docs/griptape-tools/official-tools/web-scraper.md index ee52cc76c..dcd767b35 100644 --- a/docs/griptape-tools/official-tools/web-scraper.md +++ b/docs/griptape-tools/official-tools/web-scraper.md @@ -7,7 +7,7 @@ from griptape.structures import Agent from griptape.tools import WebScraper, TaskMemoryClient agent = Agent( - tools=[WebScraper(), TaskMemoryClient(off_prompt=False)] + tools=[WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=False)] ) agent.run( @@ -73,4 +73,4 @@ agent.run( for deploying and managing AI apps, offering features like scheduling and connecting to data stores and APIs. -``` \ No newline at end of file +``` diff --git a/docs/griptape-tools/official-tools/web-search.md b/docs/griptape-tools/official-tools/web-search.md index f22ef1a23..2e2ea276d 100644 --- a/docs/griptape-tools/official-tools/web-search.md +++ b/docs/griptape-tools/official-tools/web-search.md @@ -14,7 +14,6 @@ web_search_tool = WebSearch( google_api_key=os.environ["GOOGLE_API_KEY"], google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], google_api_country="us", - off_prompt=False ) # Set up an agent using the WebSearch tool @@ -107,4 +106,4 @@ agent.run("Tell me how photosynthesis works") life on Earth as it is the primary source of oxygen in the atmosphere and forms the basis of the food chain. -``` \ No newline at end of file +``` diff --git a/griptape/tools/base_tool.py b/griptape/tools/base_tool.py index 4f1255665..8a0a924ac 100644 --- a/griptape/tools/base_tool.py +++ b/griptape/tools/base_tool.py @@ -41,7 +41,7 @@ class BaseTool(ActivityMixin, ABC): install_dependencies_on_init: bool = field(default=True, kw_only=True) dependencies_install_directory: Optional[str] = field(default=None, kw_only=True) verbose: bool = field(default=False, kw_only=True) - off_prompt: bool = field(default=True, kw_only=True) + off_prompt: bool = field(default=False, kw_only=True) def __attrs_post_init__(self) -> None: if self.install_dependencies_on_init: diff --git a/griptape/tools/task_memory_client/tool.py b/griptape/tools/task_memory_client/tool.py index 2a85a7c0f..b60c0acc0 100644 --- a/griptape/tools/task_memory_client/tool.py +++ b/griptape/tools/task_memory_client/tool.py @@ -1,5 +1,5 @@ from __future__ import annotations -from attrs import define, field +from attrs import define from schema import Schema, Literal from griptape.artifacts import TextArtifact, ErrorArtifact, InfoArtifact from griptape.tools import BaseTool @@ -8,8 +8,6 @@ @define class TaskMemoryClient(BaseTool): - off_prompt: bool = field(kw_only=True) # pyright: ignore[reportGeneralTypeIssues] - @activity( config={ "description": "Can be used to summarize memory content", diff --git a/mkdocs.yml b/mkdocs.yml index df2a1536c..b63f36fe5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -84,7 +84,7 @@ nav: - Pipelines: "griptape-framework/structures/pipelines.md" - Workflows: "griptape-framework/structures/workflows.md" - Tasks: "griptape-framework/structures/tasks.md" - - Task Memory: "griptape-framework/structures/task-memory.md" + - Task Memory and Off Prompt: "griptape-framework/structures/task-memory.md" - Conversation Memory: "griptape-framework/structures/conversation-memory.md" - Rulesets: "griptape-framework/structures/rulesets.md" - Config: "griptape-framework/structures/config.md" diff --git a/tests/integration/tasks/test_tool_task.py b/tests/integration/tasks/test_tool_task.py index eed0d7862..1fa48e98d 100644 --- a/tests/integration/tasks/test_tool_task.py +++ b/tests/integration/tasks/test_tool_task.py @@ -12,11 +12,7 @@ def structure_tester(self, request): from griptape.tools import Calculator return StructureTester( - Agent( - tasks=[ToolTask(tool=Calculator(off_prompt=False))], - conversation_memory=None, - prompt_driver=request.param, - ) + Agent(tasks=[ToolTask(tool=Calculator())], conversation_memory=None, prompt_driver=request.param) ) def test_tool_task(self, structure_tester): diff --git a/tests/integration/tasks/test_toolkit_task.py b/tests/integration/tasks/test_toolkit_task.py index f458fb7f6..97f068c5b 100644 --- a/tests/integration/tasks/test_toolkit_task.py +++ b/tests/integration/tasks/test_toolkit_task.py @@ -19,7 +19,6 @@ def structure_tester(self, request): WebSearch( google_api_key=os.environ["GOOGLE_API_KEY"], google_api_search_id=os.environ["GOOGLE_API_SEARCH_ID"], - off_prompt=False, ), WebScraper(off_prompt=True), TaskMemoryClient(off_prompt=False), diff --git a/tests/integration/tools/test_calculator.py b/tests/integration/tools/test_calculator.py index cb7e4a500..9015c7158 100644 --- a/tests/integration/tools/test_calculator.py +++ b/tests/integration/tools/test_calculator.py @@ -12,9 +12,7 @@ def structure_tester(self, request): from griptape.structures import Agent from griptape.tools import Calculator - return StructureTester( - Agent(tools=[Calculator(off_prompt=False)], conversation_memory=None, prompt_driver=request.param) - ) + return StructureTester(Agent(tools=[Calculator()], conversation_memory=None, prompt_driver=request.param)) def test_calculate(self, structure_tester): structure_tester.run("What is 7 times 3 divided by 5 plus 10.") diff --git a/tests/integration/tools/test_file_manager.py b/tests/integration/tools/test_file_manager.py index ec3623b8a..462e66470 100644 --- a/tests/integration/tools/test_file_manager.py +++ b/tests/integration/tools/test_file_manager.py @@ -12,9 +12,7 @@ def structure_tester(self, request): from griptape.structures import Agent from griptape.tools import FileManager - return StructureTester( - Agent(tools=[FileManager(off_prompt=False)], conversation_memory=None, prompt_driver=request.param) - ) + return StructureTester(Agent(tools=[FileManager()], conversation_memory=None, prompt_driver=request.param)) def test_save_content_to_disk(self, structure_tester): structure_tester.run('Write the content "Hello World!" to a file called "poem.txt".') diff --git a/tests/integration/tools/test_google_docs_client.py b/tests/integration/tools/test_google_docs_client.py index 1793f2d1f..dfb1eb95b 100644 --- a/tests/integration/tools/test_google_docs_client.py +++ b/tests/integration/tools/test_google_docs_client.py @@ -17,7 +17,6 @@ def structure_tester(self, request): Agent( tools=[ GoogleDocsClient( - off_prompt=False, service_account_credentials={ "type": os.environ["GOOGLE_ACCOUNT_TYPE"], "project_id": os.environ["GOOGLE_PROJECT_ID"], diff --git a/tests/integration/tools/test_google_drive_client.py b/tests/integration/tools/test_google_drive_client.py index 394df429e..9bbbacfb5 100644 --- a/tests/integration/tools/test_google_drive_client.py +++ b/tests/integration/tools/test_google_drive_client.py @@ -17,7 +17,6 @@ def structure_tester(self, request): Agent( tools=[ GoogleDriveClient( - off_prompt=False, service_account_credentials={ "type": os.environ["GOOGLE_ACCOUNT_TYPE"], "project_id": os.environ["GOOGLE_PROJECT_ID"], diff --git a/tests/unit/structures/test_agent.py b/tests/unit/structures/test_agent.py index a7d69b61b..371aee8a8 100644 --- a/tests/unit/structures/test_agent.py +++ b/tests/unit/structures/test_agent.py @@ -53,8 +53,8 @@ def test_rules_and_rulesets(self): agent = Agent() agent.add_task(PromptTask(rules=[Rule("foo test")], rulesets=[Ruleset("Bar", [Rule("bar test")])])) - def test_with_default_task_memory(self): - agent = Agent(tools=[MockTool()]) + def test_with_task_memory(self): + agent = Agent(tools=[MockTool(off_prompt=True)]) assert isinstance(agent.task_memory, TaskMemory) assert agent.tools[0].input_memory is not None @@ -62,7 +62,14 @@ def test_with_default_task_memory(self): assert agent.tools[0].output_memory is not None assert agent.tools[0].output_memory["test"][0] == agent.task_memory - def test_with_default_task_memory_and_empty_tool_output_memory(self): + def test_with_task_memory_and_empty_tool_output_memory(self): + agent = Agent(tools=[MockTool(output_memory={}, off_prompt=True)]) + + assert isinstance(agent.task_memory, TaskMemory) + assert agent.tools[0].input_memory[0] == agent.task_memory + assert agent.tools[0].output_memory == {} + + def test_with_no_task_memory_and_empty_tool_output_memory(self): agent = Agent(tools=[MockTool(output_memory={})]) assert isinstance(agent.task_memory, TaskMemory) diff --git a/tests/unit/structures/test_pipeline.py b/tests/unit/structures/test_pipeline.py index ef9eba518..8c1cd8511 100644 --- a/tests/unit/structures/test_pipeline.py +++ b/tests/unit/structures/test_pipeline.py @@ -64,11 +64,21 @@ def test_rules_and_rulesets(self): pipeline = Pipeline() pipeline.add_task(PromptTask(rules=[Rule("foo test")], rulesets=[Ruleset("Bar", [Rule("bar test")])])) - def test_with_default_task_memory(self): + def test_with_no_task_memory(self): pipeline = Pipeline() pipeline.add_task(ToolkitTask(tools=[MockTool()])) + assert isinstance(pipeline.tasks[0], ToolkitTask) + assert pipeline.tasks[0].tools[0].input_memory is not None + assert pipeline.tasks[0].tools[0].input_memory[0] == pipeline.task_memory + assert pipeline.tasks[0].tools[0].output_memory is None + + def test_with_task_memory(self): + pipeline = Pipeline() + + pipeline.add_task(ToolkitTask(tools=[MockTool(off_prompt=True)])) + assert isinstance(pipeline.tasks[0], ToolkitTask) assert pipeline.tasks[0].task_memory == pipeline.task_memory assert pipeline.tasks[0].tools[0].input_memory is not None @@ -88,15 +98,15 @@ def test_embedding_driver(self): assert memory_embedding_driver == embedding_driver - def test_with_default_task_memory_and_empty_tool_output_memory(self): + def test_with_task_memory_and_empty_tool_output_memory(self): pipeline = Pipeline() - pipeline.add_task(ToolkitTask(tools=[MockTool(output_memory={})])) + pipeline.add_task(ToolkitTask(tools=[MockTool(output_memory={}, off_prompt=True)])) assert isinstance(pipeline.tasks[0], ToolkitTask) assert pipeline.tasks[0].tools[0].output_memory == {} - def test_without_default_task_memory(self): + def test_without_task_memory(self): pipeline = Pipeline(task_memory=None) pipeline.add_task(ToolkitTask(tools=[MockTool()])) diff --git a/tests/unit/structures/test_workflow.py b/tests/unit/structures/test_workflow.py index 2b40348c5..970d43e74 100644 --- a/tests/unit/structures/test_workflow.py +++ b/tests/unit/structures/test_workflow.py @@ -61,11 +61,21 @@ def test_rules_and_rulesets(self): workflow = Workflow() workflow.add_task(PromptTask(rules=[Rule("foo test")], rulesets=[Ruleset("Bar", [Rule("bar test")])])) - def test_with_default_task_memory(self): + def test_with_no_task_memory(self): workflow = Workflow() workflow.add_task(ToolkitTask(tools=[MockTool()])) + assert isinstance(workflow.tasks[0], ToolkitTask) + assert workflow.tasks[0].tools[0].input_memory is not None + assert workflow.tasks[0].tools[0].input_memory[0] == workflow.task_memory + assert workflow.tasks[0].tools[0].output_memory is None + + def test_with_task_memory(self): + workflow = Workflow() + + workflow.add_task(ToolkitTask(tools=[MockTool(off_prompt=True)])) + assert isinstance(workflow.tasks[0], ToolkitTask) assert workflow.tasks[0].tools[0].input_memory is not None assert workflow.tasks[0].tools[0].input_memory[0] == workflow.task_memory @@ -84,15 +94,15 @@ def test_embedding_driver(self): assert memory_embedding_driver == embedding_driver - def test_with_default_task_memory_and_empty_tool_output_memory(self): + def test_with_task_memory_and_empty_tool_output_memory(self): workflow = Workflow() - workflow.add_task(ToolkitTask(tools=[MockTool(output_memory={})])) + workflow.add_task(ToolkitTask(tools=[MockTool(output_memory={}, off_prompt=True)])) assert isinstance(workflow.tasks[0], ToolkitTask) assert workflow.tasks[0].tools[0].output_memory == {} - def test_without_default_task_memory(self): + def test_without_task_memory(self): workflow = Workflow(task_memory=None) workflow.add_task(ToolkitTask(tools=[MockTool()])) @@ -306,7 +316,6 @@ def test_run_topology_4(self): movie_info_2 = PromptTask(id="movie_info_2") movie_info_3 = PromptTask(id="movie_info_3") compare_movies = PromptTask(id="compare_movies") - prepare_email_task = PromptTask(id="prepare_email_task") send_email_task = PromptTask(id="send_email_task") save_to_disk = PromptTask(id="save_to_disk") publish_website = PromptTask(id="publish_website") diff --git a/tests/unit/tasks/test_tool_task.py b/tests/unit/tasks/test_tool_task.py index 482fead7a..6ae7300f9 100644 --- a/tests/unit/tasks/test_tool_task.py +++ b/tests/unit/tasks/test_tool_task.py @@ -147,7 +147,7 @@ def agent(self): ) def test_run_without_memory(self, agent): - task = ToolTask(tool=MockTool(off_prompt=False)) + task = ToolTask(tool=MockTool()) agent.add_task(task) @@ -155,7 +155,7 @@ def test_run_without_memory(self, agent): assert task.run().value == "ack foobar" def test_run_with_memory(self, agent): - task = ToolTask(tool=MockTool()) + task = ToolTask(tool=MockTool(off_prompt=True)) agent.add_task(task) @@ -170,7 +170,7 @@ def test_meta_memory(self): memory.process_output(MockTool().test, subtask, TextArtifact("foo")) - task = ToolTask(tool=MockTool(off_prompt=False)) + task = ToolTask(tool=MockTool()) agent.add_task(task) diff --git a/tests/unit/tasks/test_toolkit_task.py b/tests/unit/tasks/test_toolkit_task.py index 33c0deda8..bba94f82d 100644 --- a/tests/unit/tasks/test_toolkit_task.py +++ b/tests/unit/tasks/test_toolkit_task.py @@ -281,7 +281,7 @@ def test_find_memory(self, query_engine): m1 = defaults.text_task_memory("Memory1") m2 = defaults.text_task_memory("Memory2") - tool = MockTool(name="Tool1", output_memory={"test": [m1, m2]}) + tool = MockTool(name="Tool1", output_memory={"test": [m1, m2]}, off_prompt=True) task = ToolkitTask("test", tools=[tool]) Agent().add_task(task) @@ -293,11 +293,13 @@ def test_memory(self, query_engine): tool1 = MockTool( name="Tool1", output_memory={"test": [defaults.text_task_memory("Memory1"), defaults.text_task_memory("Memory2")]}, + off_prompt=True, ) tool2 = MockTool( name="Tool2", output_memory={"test": [defaults.text_task_memory("Memory1"), defaults.text_task_memory("Memory3")]}, + off_prompt=True, ) task = ToolkitTask(tools=[tool1, tool2]) diff --git a/tests/unit/tools/test_base_tool.py b/tests/unit/tools/test_base_tool.py index 7306e8a4e..a8fc55cc2 100644 --- a/tests/unit/tools/test_base_tool.py +++ b/tests/unit/tools/test_base_tool.py @@ -133,11 +133,13 @@ def tool(self): def test_off_prompt(self, tool): assert ( - ToolkitTask(task_memory=defaults.text_task_memory("TestMemory"), tools=[MockTool()]).tools[0].output_memory + not ToolkitTask(task_memory=defaults.text_task_memory("TestMemory"), tools=[MockTool()]) + .tools[0] + .output_memory ) assert ( - not ToolkitTask(task_memory=defaults.text_task_memory("TestMemory"), tools=[MockTool(off_prompt=False)]) + ToolkitTask(task_memory=defaults.text_task_memory("TestMemory"), tools=[MockTool(off_prompt=True)]) .tools[0] .output_memory ) @@ -171,10 +173,10 @@ def test_validate(self, tool): def test_invalid_config(self): try: - from tests.mocks.invalid_mock_tool.tool import InvalidMockTool + from tests.mocks.invalid_mock_tool.tool import InvalidMockTool # noqa assert False - except SchemaMissingKeyError as e: + except SchemaMissingKeyError: assert True def test_memory(self): diff --git a/tests/unit/tools/test_google_cal_client.py b/tests/unit/tools/test_google_cal_client.py deleted file mode 100644 index e69de29bb..000000000 From 81ec3b637ae9c924a80ecdfdfb472f760ef99ee1 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 3 Jun 2024 10:30:26 -0700 Subject: [PATCH 066/145] Update openai example to use gpt-4o (#817) --- docs/griptape-framework/drivers/prompt-drivers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/griptape-framework/drivers/prompt-drivers.md b/docs/griptape-framework/drivers/prompt-drivers.md index e2b324ee1..bf8814330 100644 --- a/docs/griptape-framework/drivers/prompt-drivers.md +++ b/docs/griptape-framework/drivers/prompt-drivers.md @@ -75,7 +75,7 @@ agent = Agent( prompt_driver=OpenAiChatPromptDriver( api_key=os.environ["OPENAI_API_KEY"], temperature=0.1, - model="gpt-3.5-turbo", + model="gpt-4o", response_format="json_object", seed=42, ) From 385cb620025b5f833b34d0c525b150fdbb962652 Mon Sep 17 00:00:00 2001 From: Collin Dutter Date: Mon, 3 Jun 2024 11:26:40 -0700 Subject: [PATCH 067/145] Fix doc examples (#819) --- docs/griptape-framework/misc/events.md | 2 +- docs/griptape-framework/structures/task-memory.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/griptape-framework/misc/events.md b/docs/griptape-framework/misc/events.md index ec54f7106..0921676fb 100644 --- a/docs/griptape-framework/misc/events.md +++ b/docs/griptape-framework/misc/events.md @@ -163,7 +163,7 @@ You can also use the [Stream](../../reference/griptape/utils/stream.md) utility from griptape.utils import Stream from griptape.tasks import ToolkitTask from griptape.structures import Pipeline -from griptape.tools import WebScraper +from griptape.tools import WebScraper, TaskMemoryClient pipeline = Pipeline() diff --git a/docs/griptape-framework/structures/task-memory.md b/docs/griptape-framework/structures/task-memory.md index 08e4e9444..f76094dad 100644 --- a/docs/griptape-framework/structures/task-memory.md +++ b/docs/griptape-framework/structures/task-memory.md @@ -135,7 +135,7 @@ Let's say we want to query the contents of a very large webpage. from griptape.structures import Agent from griptape.tools import WebScraper -# Create an agent with the Calculator tool +# Create an agent with the WebScraper tool agent = Agent(tools=[WebScraper()]) agent.run( @@ -315,7 +315,7 @@ This can create a loop where the same data is stored and queried over and over a ```python from griptape.structures import Agent -from griptape.tools import WebScraper +from griptape.tools import WebScraper, TaskMemoryClient agent = Agent( tools=[ @@ -331,7 +331,7 @@ Task Memory may not be necessary for all use cases. If the data returned by a To ```python from griptape.structures import Agent -from griptape.tools import WebScraper +from griptape.tools import Calculator agent = Agent( tools=[ From ff008c021e18933ac0e5ea0bb6238a97c2864cf4 Mon Sep 17 00:00:00 2001 From: Andrew French Date: Tue, 4 Jun 2024 09:07:19 -0700 Subject: [PATCH 068/145] Audio transcription support (#781) --- CHANGELOG.md | 3 + docs/griptape-framework/data/loaders.md | 21 +++++++ .../drivers/audio-transcription-drivers.md | 32 ++++++++++ .../engines/audio-engines.md | 23 ++++++++ docs/griptape-framework/structures/tasks.md | 54 +++++++++++++++++ .../audio-transcription-client.md | 24 ++++++++ .../official-tools/text-to-speech-client.md | 2 +- griptape/config/base_structure_config.py | 2 + griptape/config/openai_structure_config.py | 12 ++++ griptape/config/structure_config.py | 5 ++ griptape/drivers/__init__.py | 7 +++ .../drivers/audio_transcription/__init__.py | 0 .../base_audio_transcription_driver.py | 42 +++++++++++++ .../dummy_audio_transcription_driver.py | 14 +++++ .../openai_audio_transcription_driver.py | 43 ++++++++++++++ griptape/engines/__init__.py | 2 + .../audio/audio_transcription_engine.py | 12 ++++ griptape/events/__init__.py | 6 ++ .../events/base_audio_transcription_event.py | 4 ++ .../finish_audio_transcription_event.py | 4 ++ .../events/start_audio_transcription_event.py | 4 ++ griptape/loaders/__init__.py | 2 + griptape/loaders/audio_loader.py | 22 +++++++ griptape/tasks/__init__.py | 2 + griptape/tasks/audio_transcription_task.py | 51 ++++++++++++++++ .../audio_transcription_client/__init__.py | 0 .../audio_transcription_client/manifest.yml | 5 ++ .../tools/audio_transcription_client/tool.py | 55 ++++++++++++++++++ mkdocs.yml | 2 + poetry.lock | 18 +++++- pyproject.toml | 3 + tests/resources/sentences.wav | Bin 0 -> 538014 bytes tests/resources/sentences2.wav | Bin 0 -> 628642 bytes .../test_amazon_bedrock_structure_config.py | 1 + .../config/test_anthropic_structure_config.py | 1 + .../test_azure_openai_structure_config.py | 3 +- .../config/test_google_structure_config.py | 1 + .../config/test_openai_structure_config.py | 17 +++++- tests/unit/config/test_structure_config.py | 1 + tests/unit/drivers/transcription/__init__.py | 0 .../test_openai_audio_transcription_driver.py | 25 ++++++++ tests/unit/loaders/test_audio_loader.py | 41 +++++++++++++ .../tasks/test_audio_transcription_task.py | 38 ++++++++++++ tests/unit/tools/test_transcription_client.py | 47 +++++++++++++++ 44 files changed, 645 insertions(+), 6 deletions(-) create mode 100644 docs/griptape-framework/drivers/audio-transcription-drivers.md create mode 100644 docs/griptape-tools/official-tools/audio-transcription-client.md create mode 100644 griptape/drivers/audio_transcription/__init__.py create mode 100644 griptape/drivers/audio_transcription/base_audio_transcription_driver.py create mode 100644 griptape/drivers/audio_transcription/dummy_audio_transcription_driver.py create mode 100644 griptape/drivers/audio_transcription/openai_audio_transcription_driver.py create mode 100644 griptape/engines/audio/audio_transcription_engine.py create mode 100644 griptape/events/base_audio_transcription_event.py create mode 100644 griptape/events/finish_audio_transcription_event.py create mode 100644 griptape/events/start_audio_transcription_event.py create mode 100644 griptape/loaders/audio_loader.py create mode 100644 griptape/tasks/audio_transcription_task.py create mode 100644 griptape/tools/audio_transcription_client/__init__.py create mode 100644 griptape/tools/audio_transcription_client/manifest.yml create mode 100644 griptape/tools/audio_transcription_client/tool.py create mode 100644 tests/resources/sentences.wav create mode 100644 tests/resources/sentences2.wav create mode 100644 tests/unit/drivers/transcription/__init__.py create mode 100644 tests/unit/drivers/transcription/test_openai_audio_transcription_driver.py create mode 100644 tests/unit/loaders/test_audio_loader.py create mode 100644 tests/unit/tasks/test_audio_transcription_task.py create mode 100644 tests/unit/tools/test_transcription_client.py diff --git a/CHANGELOG.md b/CHANGELOG.md index d053ac1fb..cf0d8ed36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `AzureOpenAiStructureConfig` for providing Structures with all Azure OpenAI Driver configuration. - `AzureOpenAiVisionImageQueryDriver` to support queries on images using Azure's OpenAI Vision models. +- `AudioLoader` for loading audio content into an `AudioArtifact`. +- `AudioTranscriptionTask` and `AudioTranscriptionClient` for transcribing audio content in Structures. +- `OpenAiAudioTranscriptionDriver` for integration with OpenAI's speech-to-text models, including Whisper. - Parameter `env` to `BaseStructureRunDriver` to set environment variables for a Structure Run. ### Changed diff --git a/docs/griptape-framework/data/loaders.md b/docs/griptape-framework/data/loaders.md index d767d0d8f..69ffeda06 100644 --- a/docs/griptape-framework/data/loaders.md +++ b/docs/griptape-framework/data/loaders.md @@ -199,3 +199,24 @@ loader.load(EmailLoader.EmailQuery(label="INBOX")) loader.load_collection([EmailLoader.EmailQuery(label="INBOX"), EmailLoader.EmailQuery(label="SENT")]) ``` + +## Audio Loader + +!!! info + This driver requires the `loaders-audio` [extra](../index.md#extras). + +The [Audio Loader](../../reference/griptape/loaders/audio_loader.md) is used to load audio content as an [AudioArtifact](./artifacts.md#audioartifact). The Loader operates on audio bytes that can be sourced from files on disk, downloaded audio, or audio in memory. + +The Loader will load audio in its native format and populates the resulting Artifact's `format` field by making a best-effort guess of the underlying audio format using the `filetype` package. + +```python +from griptape.loaders import AudioLoader +from griptape.utils import load_file + +# Load an image from disk +with open("tests/resources/sentences.wav", "rb") as f: + audio_artifact = AudioLoader().load(f.read()) + +# You can also use the load_file utility function +AudioLoader().load(load_file("tests/resources/sentences.wav")) +``` diff --git a/docs/griptape-framework/drivers/audio-transcription-drivers.md b/docs/griptape-framework/drivers/audio-transcription-drivers.md new file mode 100644 index 000000000..ddadcb89a --- /dev/null +++ b/docs/griptape-framework/drivers/audio-transcription-drivers.md @@ -0,0 +1,32 @@ +## Overview + +[Audio Transcription Drivers](../../reference/griptape/drivers/audio_transcription/index.md) extract text from spoken audio. + +This driver acts as a critical bridge between audio transcription Engines and the underlying models, facilitating the construction and execution of API calls that transform speech into editable and searchable text. Utilized predominantly in applications that support the input of verbal communications, the Audio Transcription Driver effectively extracts and interprets speech, rendering it into a textual format that can be easily integrated into data systems and Workflows. + +This capability is essential for enhancing accessibility, improving content discoverability, and automating tasks that traditionally relied on manual transcription, thereby streamlining operations and enhancing efficiency across various industries. + +### OpenAI + +The [OpenAI Audio Transcription Driver](../../reference/griptape/drivers/audio_transcription/openai_audio_transcription_driver.md) utilizes OpenAI's sophisticated `whisper` model to accurately transcribe spoken audio into text. This model supports multiple languages, ensuring precise transcription across a wide range of dialects. + +```python +from griptape.drivers import OpenAiAudioTranscriptionDriver +from griptape.engines import AudioTranscriptionEngine +from griptape.tools.audio_transcription_client.tool import AudioTranscriptionClient +from griptape.structures import Agent + + +driver = OpenAiAudioTranscriptionDriver( + model="whisper-1" +) + +tool = AudioTranscriptionClient( + off_prompt=False, + engine=AudioTranscriptionEngine( + audio_transcription_driver=driver, + ), +) + +Agent(tools=[tool]).run("Transcribe the following audio file: tests/resources/sentences.wav") +``` diff --git a/docs/griptape-framework/engines/audio-engines.md b/docs/griptape-framework/engines/audio-engines.md index 514b8dd8f..cbef1ef23 100644 --- a/docs/griptape-framework/engines/audio-engines.md +++ b/docs/griptape-framework/engines/audio-engines.md @@ -27,3 +27,26 @@ engine.run( prompts=["Hello, world!"], ) ``` + +### Audio Transcription Engine + +The [Audio Transcription Engine](../../reference/griptape/engines/audio/audio_transcription_engine.md) facilitates transcribing speech from audio inputs. + +```python +from griptape.drivers import OpenAiAudioTranscriptionDriver +from griptape.engines import AudioTranscriptionEngine +from griptape.loaders import AudioLoader +from griptape.utils import load_file + + +driver = OpenAiAudioTranscriptionDriver( + model="whisper-1" +) + +engine = AudioTranscriptionEngine( + audio_transcription_driver=driver, +) + +audio_artifact = AudioLoader().load(load_file("tests/resources/sentences.wav")) +engine.run(audio_artifact) +``` diff --git a/docs/griptape-framework/structures/tasks.md b/docs/griptape-framework/structures/tasks.md index bff78a96c..0f05ea3e2 100644 --- a/docs/griptape-framework/structures/tasks.md +++ b/docs/griptape-framework/structures/tasks.md @@ -805,3 +805,57 @@ team = Pipeline( team.run() ``` + +## Text to Speech Task + +This Task enables Structures to synthesize speech from text using [Text to Speech Engines](../../reference/griptape/engines/audio/text_to_speech_engine.md) and [Text to Speech Drivers](../../reference/griptape/drivers/text_to_speech/index.md). + +```python +import os + +from griptape.drivers import ElevenLabsTextToSpeechDriver +from griptape.engines import TextToSpeechEngine +from griptape.tasks import TextToSpeechTask +from griptape.structures import Pipeline + + +driver = ElevenLabsTextToSpeechDriver( + api_key=os.getenv("ELEVEN_LABS_API_KEY"), + model="eleven_multilingual_v2", + voice="Matilda", +) + +task = TextToSpeechTask( + text_to_speech_engine=TextToSpeechEngine( + text_to_speech_driver=driver, + ), +) + +Pipeline(tasks=[task]).run("Generate audio from this text: 'Hello, world!'") +``` + +## Audio Transcription Task + +This Task enables Structures to transcribe speech from text using [Audio Transcription Engines](../../reference/griptape/engines/audio/audio_transcription_engine.md) and [Audio Transcription Drivers](../../reference/griptape/drivers/audio_transcription/index.md). + +```python +from griptape.drivers import OpenAiAudioTranscriptionDriver +from griptape.engines import AudioTranscriptionEngine +from griptape.loaders import AudioLoader +from griptape.tasks import AudioTranscriptionTask +from griptape.structures import Pipeline +from griptape.utils import load_file + +driver = OpenAiAudioTranscriptionDriver( + model="whisper-1" +) + +task = AudioTranscriptionTask( + input=lambda _: AudioLoader().load(load_file("tests/resources/sentences2.wav")), + audio_transcription_engine=AudioTranscriptionEngine( + audio_transcription_driver=driver, + ), +) + +Pipeline(tasks=[task]).run() +``` diff --git a/docs/griptape-tools/official-tools/audio-transcription-client.md b/docs/griptape-tools/official-tools/audio-transcription-client.md new file mode 100644 index 000000000..5cb458d76 --- /dev/null +++ b/docs/griptape-tools/official-tools/audio-transcription-client.md @@ -0,0 +1,24 @@ +# AudioTranscriptionClient + +This Tool enables [Agents](../../griptape-framework/structures/agents.md) to transcribe speech from text using [Audio Transcription Engines](../../reference/griptape/engines/audio/audio_transcription_engine.md) and [Audio Transcription Drivers](../../reference/griptape/drivers/audio_transcription/index.md). + +```python +from griptape.drivers import OpenAiAudioTranscriptionDriver +from griptape.engines import AudioTranscriptionEngine +from griptape.tools.audio_transcription_client.tool import AudioTranscriptionClient +from griptape.structures import Agent + + +driver = OpenAiAudioTranscriptionDriver( + model="whisper-1" +) + +tool = AudioTranscriptionClient( + off_prompt=False, + engine=AudioTranscriptionEngine( + audio_transcription_driver=driver, + ), +) + +Agent(tools=[tool]).run("Transcribe the following audio file: /Users/andrew/code/griptape/tests/resources/sentences2.wav") +``` \ No newline at end of file diff --git a/docs/griptape-tools/official-tools/text-to-speech-client.md b/docs/griptape-tools/official-tools/text-to-speech-client.md index f016db551..622b5bf3a 100644 --- a/docs/griptape-tools/official-tools/text-to-speech-client.md +++ b/docs/griptape-tools/official-tools/text-to-speech-client.md @@ -1,6 +1,6 @@ # TextToSpeechClient -This tool enables LLMs to synthesize speech from text using [Text to Speech Engines](../../reference/griptape/engines/audio/text_to_speech_engine.md) and [Text to Speech Drivers](../../reference/griptape/drivers/text_to_speech/index.md). +This Tool enables LLMs to synthesize speech from text using [Text to Speech Engines](../../reference/griptape/engines/audio/text_to_speech_engine.md) and [Text to Speech Drivers](../../reference/griptape/drivers/text_to_speech/index.md). ```python import os diff --git a/griptape/config/base_structure_config.py b/griptape/config/base_structure_config.py index a94cf75d9..0e07d29f5 100644 --- a/griptape/config/base_structure_config.py +++ b/griptape/config/base_structure_config.py @@ -14,6 +14,7 @@ BasePromptDriver, BaseVectorStoreDriver, BaseTextToSpeechDriver, + BaseAudioTranscriptionDriver, ) from griptape.utils import dict_merge @@ -29,6 +30,7 @@ class BaseStructureConfig(BaseConfig, ABC): default=None, kw_only=True, metadata={"serializable": True} ) text_to_speech_driver: BaseTextToSpeechDriver = field(kw_only=True, metadata={"serializable": True}) + audio_transcription_driver: BaseAudioTranscriptionDriver = field(kw_only=True, metadata={"serializable": True}) def merge_config(self, config: dict) -> BaseStructureConfig: base_config = self.to_dict() diff --git a/griptape/config/openai_structure_config.py b/griptape/config/openai_structure_config.py index 459160b11..416306a98 100644 --- a/griptape/config/openai_structure_config.py +++ b/griptape/config/openai_structure_config.py @@ -11,6 +11,10 @@ OpenAiChatPromptDriver, OpenAiEmbeddingDriver, OpenAiImageGenerationDriver, + BaseTextToSpeechDriver, + OpenAiTextToSpeechDriver, + BaseAudioTranscriptionDriver, + OpenAiAudioTranscriptionDriver, OpenAiImageQueryDriver, ) @@ -40,3 +44,11 @@ class OpenAiStructureConfig(StructureConfig): kw_only=True, metadata={"serializable": True}, ) + text_to_speech_driver: BaseTextToSpeechDriver = field( + default=Factory(lambda: OpenAiTextToSpeechDriver(model="tts")), kw_only=True, metadata={"serializable": True} + ) + audio_transcription_driver: BaseAudioTranscriptionDriver = field( + default=Factory(lambda: OpenAiAudioTranscriptionDriver(model="whisper-1")), + kw_only=True, + metadata={"serializable": True}, + ) diff --git a/griptape/config/structure_config.py b/griptape/config/structure_config.py index 63f1ea9f3..ae3ad1e99 100644 --- a/griptape/config/structure_config.py +++ b/griptape/config/structure_config.py @@ -17,6 +17,8 @@ BaseImageQueryDriver, BaseTextToSpeechDriver, DummyTextToSpeechDriver, + BaseAudioTranscriptionDriver, + DummyAudioTranscriptionDriver, ) @@ -43,3 +45,6 @@ class StructureConfig(BaseStructureConfig): text_to_speech_driver: BaseTextToSpeechDriver = field( default=Factory(lambda: DummyTextToSpeechDriver()), kw_only=True, metadata={"serializable": True} ) + audio_transcription_driver: BaseAudioTranscriptionDriver = field( + default=Factory(lambda: DummyAudioTranscriptionDriver()), kw_only=True, metadata={"serializable": True} + ) diff --git a/griptape/drivers/__init__.py b/griptape/drivers/__init__.py index 6043b0b43..6c64756e1 100644 --- a/griptape/drivers/__init__.py +++ b/griptape/drivers/__init__.py @@ -107,6 +107,10 @@ from .structure_run.griptape_cloud_structure_run_driver import GriptapeCloudStructureRunDriver from .structure_run.local_structure_run_driver import LocalStructureRunDriver +from .audio_transcription.base_audio_transcription_driver import BaseAudioTranscriptionDriver +from .audio_transcription.dummy_audio_transcription_driver import DummyAudioTranscriptionDriver +from .audio_transcription.openai_audio_transcription_driver import OpenAiAudioTranscriptionDriver + __all__ = [ "BasePromptDriver", "OpenAiChatPromptDriver", @@ -199,4 +203,7 @@ "BaseStructureRunDriver", "GriptapeCloudStructureRunDriver", "LocalStructureRunDriver", + "BaseAudioTranscriptionDriver", + "DummyAudioTranscriptionDriver", + "OpenAiAudioTranscriptionDriver", ] diff --git a/griptape/drivers/audio_transcription/__init__.py b/griptape/drivers/audio_transcription/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/drivers/audio_transcription/base_audio_transcription_driver.py b/griptape/drivers/audio_transcription/base_audio_transcription_driver.py new file mode 100644 index 000000000..3cc368c94 --- /dev/null +++ b/griptape/drivers/audio_transcription/base_audio_transcription_driver.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from typing import TYPE_CHECKING, Optional + +from attrs import define, field + +from griptape.artifacts import TextArtifact, AudioArtifact +from griptape.events import StartAudioTranscriptionEvent, FinishAudioTranscriptionEvent +from griptape.mixins import ExponentialBackoffMixin, SerializableMixin + +if TYPE_CHECKING: + from griptape.structures import Structure + + +@define +class BaseAudioTranscriptionDriver(SerializableMixin, ExponentialBackoffMixin, ABC): + model: str = field(kw_only=True, metadata={"serializable": True}) + structure: Optional[Structure] = field(default=None, kw_only=True) + + def before_run(self) -> None: + if self.structure: + self.structure.publish_event(StartAudioTranscriptionEvent()) + + def after_run(self) -> None: + if self.structure: + self.structure.publish_event(FinishAudioTranscriptionEvent()) + + def run(self, audio: AudioArtifact, prompts: Optional[list[str]] = None) -> TextArtifact: + for attempt in self.retrying(): + with attempt: + self.before_run() + result = self.try_run(audio, prompts) + self.after_run() + + return result + + else: + raise Exception("Failed to run audio transcription") + + @abstractmethod + def try_run(self, audio: AudioArtifact, prompts: Optional[list[str]] = None) -> TextArtifact: ... diff --git a/griptape/drivers/audio_transcription/dummy_audio_transcription_driver.py b/griptape/drivers/audio_transcription/dummy_audio_transcription_driver.py new file mode 100644 index 000000000..1602604e4 --- /dev/null +++ b/griptape/drivers/audio_transcription/dummy_audio_transcription_driver.py @@ -0,0 +1,14 @@ +from typing import Optional + +from attrs import define, field +from griptape.artifacts import AudioArtifact, TextArtifact +from griptape.drivers import BaseAudioTranscriptionDriver +from griptape.exceptions import DummyException + + +@define +class DummyAudioTranscriptionDriver(BaseAudioTranscriptionDriver): + model: str = field(init=False) + + def try_run(self, audio: AudioArtifact, prompts: Optional[list] = None) -> TextArtifact: + raise DummyException(__class__.__name__, "try_transcription") diff --git a/griptape/drivers/audio_transcription/openai_audio_transcription_driver.py b/griptape/drivers/audio_transcription/openai_audio_transcription_driver.py new file mode 100644 index 000000000..14b367521 --- /dev/null +++ b/griptape/drivers/audio_transcription/openai_audio_transcription_driver.py @@ -0,0 +1,43 @@ +from __future__ import annotations + +import io +from typing import Optional + +import openai +from attrs import field, Factory, define + +from griptape.artifacts import AudioArtifact, TextArtifact +from griptape.drivers import BaseAudioTranscriptionDriver + + +@define +class OpenAiAudioTranscriptionDriver(BaseAudioTranscriptionDriver): + api_type: str = field(default=openai.api_type, kw_only=True) + api_version: Optional[str] = field(default=openai.api_version, kw_only=True, metadata={"serializable": True}) + base_url: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": True}) + api_key: Optional[str] = field(default=None, kw_only=True, metadata={"serializable": False}) + organization: Optional[str] = field(default=openai.organization, kw_only=True, metadata={"serializable": True}) + client: openai.OpenAI = field( + default=Factory( + lambda self: openai.OpenAI(api_key=self.api_key, base_url=self.base_url, organization=self.organization), + takes_self=True, + ) + ) + + def try_run(self, audio: AudioArtifact, prompts: Optional[list[str]] = None) -> TextArtifact: + additional_params = {} + + if prompts is not None: + additional_params["prompt"] = ", ".join(prompts) + + transcription = self.client.audio.transcriptions.create( + # Even though we're not actually providing a file to the client, the API still requires that we send a file + # name. We set the file name to use the same format as the audio file so that the API can reject + # it if the format is unsupported. + model=self.model, + file=(f"a.{audio.format}", io.BytesIO(audio.value)), + response_format="json", + **additional_params, + ) + + return TextArtifact(value=transcription.text) diff --git a/griptape/engines/__init__.py b/griptape/engines/__init__.py index f76e373ef..17adaa53d 100644 --- a/griptape/engines/__init__.py +++ b/griptape/engines/__init__.py @@ -12,6 +12,7 @@ from .image.outpainting_image_generation_engine import OutpaintingImageGenerationEngine from .image_query.image_query_engine import ImageQueryEngine from .audio.text_to_speech_engine import TextToSpeechEngine +from .audio.audio_transcription_engine import AudioTranscriptionEngine __all__ = [ "BaseQueryEngine", @@ -28,4 +29,5 @@ "OutpaintingImageGenerationEngine", "ImageQueryEngine", "TextToSpeechEngine", + "AudioTranscriptionEngine", ] diff --git a/griptape/engines/audio/audio_transcription_engine.py b/griptape/engines/audio/audio_transcription_engine.py new file mode 100644 index 000000000..3631b2d17 --- /dev/null +++ b/griptape/engines/audio/audio_transcription_engine.py @@ -0,0 +1,12 @@ +from attrs import define, field + +from griptape.artifacts import AudioArtifact, TextArtifact +from griptape.drivers import BaseAudioTranscriptionDriver + + +@define +class AudioTranscriptionEngine: + audio_transcription_driver: BaseAudioTranscriptionDriver = field(kw_only=True) + + def run(self, audio: AudioArtifact, *args, **kwargs) -> TextArtifact: + return self.audio_transcription_driver.try_run(audio) diff --git a/griptape/events/__init__.py b/griptape/events/__init__.py index 0aa4552dd..944a309eb 100644 --- a/griptape/events/__init__.py +++ b/griptape/events/__init__.py @@ -19,6 +19,9 @@ from .base_text_to_speech_event import BaseTextToSpeechEvent from .start_text_to_speech_event import StartTextToSpeechEvent from .finish_text_to_speech_event import FinishTextToSpeechEvent +from .base_audio_transcription_event import BaseAudioTranscriptionEvent +from .start_audio_transcription_event import StartAudioTranscriptionEvent +from .finish_audio_transcription_event import FinishAudioTranscriptionEvent __all__ = [ "BaseEvent", @@ -42,4 +45,7 @@ "BaseTextToSpeechEvent", "StartTextToSpeechEvent", "FinishTextToSpeechEvent", + "BaseAudioTranscriptionEvent", + "StartAudioTranscriptionEvent", + "FinishAudioTranscriptionEvent", ] diff --git a/griptape/events/base_audio_transcription_event.py b/griptape/events/base_audio_transcription_event.py new file mode 100644 index 000000000..f634adfce --- /dev/null +++ b/griptape/events/base_audio_transcription_event.py @@ -0,0 +1,4 @@ +from griptape.events import BaseEvent + + +class BaseAudioTranscriptionEvent(BaseEvent): ... diff --git a/griptape/events/finish_audio_transcription_event.py b/griptape/events/finish_audio_transcription_event.py new file mode 100644 index 000000000..321de1577 --- /dev/null +++ b/griptape/events/finish_audio_transcription_event.py @@ -0,0 +1,4 @@ +from griptape.events.base_audio_transcription_event import BaseAudioTranscriptionEvent + + +class FinishAudioTranscriptionEvent(BaseAudioTranscriptionEvent): ... diff --git a/griptape/events/start_audio_transcription_event.py b/griptape/events/start_audio_transcription_event.py new file mode 100644 index 000000000..25316ac8a --- /dev/null +++ b/griptape/events/start_audio_transcription_event.py @@ -0,0 +1,4 @@ +from griptape.events.base_audio_transcription_event import BaseAudioTranscriptionEvent + + +class StartAudioTranscriptionEvent(BaseAudioTranscriptionEvent): ... diff --git a/griptape/loaders/__init__.py b/griptape/loaders/__init__.py index 38beba01a..b79b0ff44 100644 --- a/griptape/loaders/__init__.py +++ b/griptape/loaders/__init__.py @@ -8,6 +8,7 @@ from .dataframe_loader import DataFrameLoader from .email_loader import EmailLoader from .image_loader import ImageLoader +from .audio_loader import AudioLoader from .blob_loader import BlobLoader @@ -22,5 +23,6 @@ "DataFrameLoader", "EmailLoader", "ImageLoader", + "AudioLoader", "BlobLoader", ] diff --git a/griptape/loaders/audio_loader.py b/griptape/loaders/audio_loader.py new file mode 100644 index 000000000..532662e79 --- /dev/null +++ b/griptape/loaders/audio_loader.py @@ -0,0 +1,22 @@ +from __future__ import annotations + +from typing import cast + +from attrs import define + +from griptape.artifacts import AudioArtifact +from griptape.loaders import BaseLoader +from griptape.utils import import_optional_dependency + + +@define +class AudioLoader(BaseLoader): + """Loads audio content into audio artifacts.""" + + def load(self, source: bytes, *args, **kwargs) -> AudioArtifact: + audio_artifact = AudioArtifact(source, format=import_optional_dependency("filetype").guess(source).extension) + + return audio_artifact + + def load_collection(self, sources: list[bytes], *args, **kwargs) -> dict[str, AudioArtifact]: + return cast(dict[str, AudioArtifact], super().load_collection(sources, *args, **kwargs)) diff --git a/griptape/tasks/__init__.py b/griptape/tasks/__init__.py index e51335241..2c282adff 100644 --- a/griptape/tasks/__init__.py +++ b/griptape/tasks/__init__.py @@ -20,6 +20,7 @@ from .base_audio_generation_task import BaseAudioGenerationTask from .text_to_speech_task import TextToSpeechTask from .structure_run_task import StructureRunTask +from .audio_transcription_task import AudioTranscriptionTask __all__ = [ "BaseTask", @@ -44,4 +45,5 @@ "BaseAudioGenerationTask", "TextToSpeechTask", "StructureRunTask", + "AudioTranscriptionTask", ] diff --git a/griptape/tasks/audio_transcription_task.py b/griptape/tasks/audio_transcription_task.py new file mode 100644 index 000000000..c75faa0d4 --- /dev/null +++ b/griptape/tasks/audio_transcription_task.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +from abc import ABC +from typing import Callable + +from attrs import define, field + +from griptape.artifacts.audio_artifact import AudioArtifact +from griptape.engines import AudioTranscriptionEngine +from griptape.artifacts import TextArtifact +from griptape.mixins import RuleMixin +from griptape.tasks import BaseTask + + +@define +class AudioTranscriptionTask(RuleMixin, BaseTask, ABC): + _input: AudioArtifact | Callable[[BaseTask], AudioArtifact] = field() + _audio_transcription_engine: AudioTranscriptionEngine = field( + default=None, kw_only=True, alias="audio_transcription_engine" + ) + + @property + def input(self) -> AudioArtifact: + if isinstance(self._input, AudioArtifact): + return self._input + elif isinstance(self._input, Callable): + return self._input(self) + else: + raise ValueError("Input must be an AudioArtifact.") + + @input.setter + def input(self, value: AudioArtifact | Callable[[BaseTask], AudioArtifact]) -> None: + self._input = value + + @property + def audio_transcription_engine(self) -> AudioTranscriptionEngine: + if self._audio_transcription_engine is None: + if self.structure is not None: + self._audio_transcription_engine = AudioTranscriptionEngine( + audio_transcription_driver=self.structure.config.audio_transcription_driver + ) + else: + raise ValueError("Audio Generation Engine is not set.") + return self._audio_transcription_engine + + @audio_transcription_engine.setter + def audio_transcription_engine(self, value: AudioTranscriptionEngine) -> None: + self._audio_transcription_engine = value + + def run(self) -> TextArtifact: + return self.audio_transcription_engine.run(self.input) diff --git a/griptape/tools/audio_transcription_client/__init__.py b/griptape/tools/audio_transcription_client/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/griptape/tools/audio_transcription_client/manifest.yml b/griptape/tools/audio_transcription_client/manifest.yml new file mode 100644 index 000000000..6bbe4a21a --- /dev/null +++ b/griptape/tools/audio_transcription_client/manifest.yml @@ -0,0 +1,5 @@ +version: "v1" +name: Transcription Client +description: A tool for generating transcription of audio. +contact_email: hello@griptape.ai +legal_info_url: https://www.griptape.ai/legal diff --git a/griptape/tools/audio_transcription_client/tool.py b/griptape/tools/audio_transcription_client/tool.py new file mode 100644 index 000000000..ad0f0626e --- /dev/null +++ b/griptape/tools/audio_transcription_client/tool.py @@ -0,0 +1,55 @@ +from __future__ import annotations + +from typing import Any, cast + +from attrs import define, field, Factory +from schema import Schema, Literal + +from griptape.artifacts import ErrorArtifact, AudioArtifact, TextArtifact +from griptape.engines import AudioTranscriptionEngine +from griptape.loaders.audio_loader import AudioLoader +from griptape.tools import BaseTool +from griptape.utils import load_artifact_from_memory +from griptape.utils.decorators import activity + + +@define +class AudioTranscriptionClient(BaseTool): + """A tool that can be used to generate transcriptions from input audio.""" + + engine: AudioTranscriptionEngine = field(kw_only=True) + audio_loader: AudioLoader = field(default=Factory(lambda: AudioLoader()), kw_only=True) + + @activity( + config={ + "description": "This tool can be used to generate transcriptions of audio files on disk.", + "schema": Schema({Literal("path", description="The paths to an audio file on disk."): str}), + } + ) + def transcribe_audio_from_disk(self, params: dict) -> TextArtifact | ErrorArtifact: + audio_path = params["values"]["path"] + + with open(audio_path, "rb") as f: + audio_artifact = self.audio_loader.load(f.read()) + + return self.engine.run(audio_artifact) + + @activity( + config={ + "description": "This tool can be used to generate the transcription of an audio artifact in memory.", + "schema": Schema({"schema": Schema({"memory_name": str, "artifact_namespace": str, "artifact_name": str})}), + } + ) + def transcribe_audio_from_memory(self, params: dict[str, Any]) -> TextArtifact | ErrorArtifact: + memory = self.find_input_memory(params["values"]["memory_name"]) + artifact_namespace = params["values"]["artifact_namespace"] + artifact_name = params["values"]["artifact_name"] + + if memory is None: + return ErrorArtifact("memory not found") + + audio_artifact = cast( + AudioArtifact, load_artifact_from_memory(memory, artifact_namespace, artifact_name, AudioArtifact) + ) + + return self.engine.run(audio_artifact) diff --git a/mkdocs.yml b/mkdocs.yml index b63f36fe5..99231cce7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -110,6 +110,7 @@ nav: - Event Listener Drivers: "griptape-framework/drivers/event-listener-drivers.md" - Structure Run Drivers: "griptape-framework/drivers/structure-run-drivers.md" - Text to Speech Drivers: "griptape-framework/drivers/text-to-speech-drivers.md" + - Audio Transcription Drivers: "griptape-framework/drivers/audio-transcription-drivers.md" - Data: - Overview: "griptape-framework/data/index.md" - Artifacts: "griptape-framework/data/artifacts.md" @@ -146,6 +147,7 @@ nav: - OutpaintingImageGenerationClient: "griptape-tools/official-tools/outpainting-image-generation-client.md" - ImageQueryClient: "griptape-tools/official-tools/image-query-client.md" - TextToSpeechClient: "griptape-tools/official-tools/text-to-speech-client.md" + - AudioTranscriptionClient: "griptape-tools/official-tools/audio-transcription-client.md" - Custom Tools: - Building Custom Tools: "griptape-tools/custom-tools/index.md" - Recipes: diff --git a/poetry.lock b/poetry.lock index c78b72391..7e6804fcc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1353,6 +1353,17 @@ docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1 testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] +[[package]] +name = "filetype" +version = "1.2.0" +description = "Infer file type and MIME type of any file/buffer. No external dependencies." +optional = true +python-versions = "*" +files = [ + {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, + {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, +] + [[package]] name = "frozenlist" version = "1.4.1" @@ -5984,7 +5995,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] +all = ["anthropic", "beautifulsoup4", "boto3", "cohere", "elevenlabs", "filetype", "google-generativeai", "mail-parser", "markdownify", "marqo", "opensearch-py", "pandas", "pgvector", "pillow", "pinecone-client", "playwright", "psycopg2-binary", "pymongo", "pypdf", "redis", "snowflake-sqlalchemy", "sqlalchemy-redshift", "torch", "trafilatura", "transformers", "voyageai"] drivers-embedding-amazon-bedrock = ["boto3"] drivers-embedding-amazon-sagemaker = ["boto3"] drivers-embedding-google = ["google-generativeai"] @@ -6013,6 +6024,7 @@ drivers-vector-postgresql = ["pgvector", "psycopg2-binary"] drivers-vector-redis = ["redis"] drivers-web-scraper-markdownify = ["beautifulsoup4", "markdownify", "playwright"] drivers-web-scraper-trafilatura = ["trafilatura"] +loaders-audio = ["filetype"] loaders-dataframe = ["pandas"] loaders-email = ["mail-parser"] loaders-image = ["pillow"] @@ -6021,4 +6033,4 @@ loaders-pdf = ["pypdf"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "ce7c88b4d4ea368bd7a6c08c8e0f4310b2c10f1237d77d80f50bda4b35612481" +content-hash = "da89e6bb7aa395fd5badc416ec859e574416ea1fe07ee6f93035fe6a7e314dcd" diff --git a/pyproject.toml b/pyproject.toml index af264a5dd..55ae82ce2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,6 +59,7 @@ pandas = {version = "^1.3", optional = true} pypdf = {version = "^3.9", optional = true} pillow = {version = "^10.2.0", optional = true} mail-parser = {version = "^3.15.0", optional = true} +filetype = {version = "^1.2", optional = true} [tool.poetry.extras] drivers-prompt-cohere = ["cohere"] @@ -100,6 +101,7 @@ loaders-dataframe = ["pandas"] loaders-pdf = ["pypdf"] loaders-image = ["pillow"] loaders-email = ["mail-parser"] +loaders-audio = ["filetype"] all = [ # drivers @@ -132,6 +134,7 @@ all = [ "pypdf", "pillow", "mail-parser", + "filetype", ] [tool.poetry.group.test] diff --git a/tests/resources/sentences.wav b/tests/resources/sentences.wav new file mode 100644 index 0000000000000000000000000000000000000000..7962008495f29e15182a6521864b90ecb6d4a265 GIT binary patch literal 538014 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 d-x=#Q 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