Serialization
Overview
Many components in Gen AI Builder can be serialized and deserialized using the to_dict and from_dict methods. There are also to_json and from_json as a convenience.
Here is how we can serialize an Agent
and then deserialize it back:
from griptape.structures import Agent agent = Agent() agent.run("My name is Collin") agent_dict = agent.to_dict() new_agent = Agent.from_dict(agent_dict) new_agent.run("What's my name?")
[03/12/25 20:36:02] INFO PromptTask d9e3f73477ef4a0aa71a670e543ee73c Input: My name is Collin INFO PromptTask d9e3f73477ef4a0aa71a670e543ee73c Output: Hello, Collin! How can I assist you today? [03/12/25 20:36:03] INFO PromptTask d9e3f73477ef4a0aa71a670e543ee73c Input: What's my name? [03/12/25 20:36:05] INFO PromptTask d9e3f73477ef4a0aa71a670e543ee73c Output: Your name is Collin. How can I help you further?
Serialization Overrides
All classes that implement the SerializableMixin can be serialized using the above methods.
However, only fields marked with metadata={"serializable": True}
will be included in the serialization process.
If you need to add or remove fields in the serialization process, you can pass serialization_overrides to any of the serialization methods.
from rich.pretty import pprint from griptape.structures import Agent agent = Agent() agent.run("My name is Collin") agent_dict = agent.to_dict(serializable_overrides={"max_meta_memory_entries": True, "id": False}) # `max_meta_memory_entries` will be included, `id` will not pprint(agent_dict)
[03/12/25 20:35:19] INFO PromptTask 4cb3fb0cb25b4fb5b9c1ec9fcc17789c Input: My name is Collin [03/12/25 20:35:20] INFO PromptTask 4cb3fb0cb25b4fb5b9c1ec9fcc17789c Output: Hello, Collin! How can I assist you today? { │ 'type': 'Agent', │ 'rulesets': [], │ 'rules': [], │ 'conversation_memory': { │ │ 'type': 'ConversationMemory', │ │ 'runs': [ │ │ │ { │ │ │ │ 'type': 'Run', │ │ │ │ 'id': '4ea9601351f542b6a403c82ffcf77656', │ │ │ │ 'meta': None, │ │ │ │ 'input': { │ │ │ │ │ 'type': 'TextArtifact', │ │ │ │ │ 'id': '80d96cb6f76e4d89925182d8b4e3acc7', │ │ │ │ │ 'reference': None, │ │ │ │ │ 'meta': {}, │ │ │ │ │ 'name': '80d96cb6f76e4d89925182d8b4e3acc7', │ │ │ │ │ 'value': 'My name is Collin' │ │ │ │ }, │ │ │ │ 'output': { │ │ │ │ │ 'type': 'TextArtifact', │ │ │ │ │ 'id': '501e6f2dfa3d496685ce9249bdb8121c', │ │ │ │ │ 'reference': None, │ │ │ │ │ 'meta': {'is_react_prompt': False}, │ │ │ │ │ 'name': '501e6f2dfa3d496685ce9249bdb8121c', │ │ │ │ │ 'value': 'Hello, Collin! How can I assist you today?' │ │ │ │ } │ │ │ } │ │ ], │ │ 'meta': {}, │ │ 'max_runs': None │ }, │ 'conversation_memory_strategy': 'per_structure', │ 'max_meta_memory_entries': 20, │ 'tasks': [ │ │ { │ │ │ 'type': 'PromptTask', │ │ │ 'rulesets': [], │ │ │ 'rules': [], │ │ │ 'id': '4cb3fb0cb25b4fb5b9c1ec9fcc17789c', │ │ │ 'state': 'State.FINISHED', │ │ │ 'parent_ids': [], │ │ │ 'child_ids': [], │ │ │ 'max_meta_memory_entries': 20, │ │ │ 'context': {}, │ │ │ 'prompt_driver': { │ │ │ │ 'type': 'OpenAiChatPromptDriver', │ │ │ │ 'temperature': 0.1, │ │ │ │ 'max_tokens': None, │ │ │ │ 'stream': False, │ │ │ │ 'extra_params': {}, │ │ │ │ 'base_url': None, │ │ │ │ 'organization': None, │ │ │ │ 'model': 'gpt-4o', │ │ │ │ 'user': '', │ │ │ │ 'response_format': None, │ │ │ │ 'seed': None, │ │ │ │ 'reasoning_effort': 'medium', │ │ │ │ 'use_native_tools': True, │ │ │ │ 'structured_output_strategy': 'native', │ │ │ │ 'parallel_tool_calls': True, │ │ │ │ 'modalities': [], │ │ │ │ 'audio': {'voice': 'alloy', 'format': 'pcm16'} │ │ │ }, │ │ │ 'tools': [], │ │ │ 'max_subtasks': 20 │ │ } │ ] }
Types Overrides
Due to some unfortunate internals of the Gen AI Builder's serialization process, you may occasionally run into a NameError
when serializing. It will look something like this:
NameError: name 'BaseWebSearchDriver' is not defined
This is something we're actively working on fixing, but in the meantime, you can use the types_overrides parameter to pass in a dictionary of types that need to be overridden during serialization.
Here is an example of how you can use types_overrides
:
from duckduckgo_search import DDGS from rich.pretty import pprint from griptape.drivers.web_search import BaseWebSearchDriver from griptape.drivers.web_search.duck_duck_go import DuckDuckGoWebSearchDriver from griptape.tools import WebSearchTool web_driver = DuckDuckGoWebSearchDriver() web_tool = WebSearchTool(web_search_driver=web_driver) web_tool_dict = web_tool.to_dict( serializable_overrides={"web_search_driver": True}, types_overrides={"BaseWebSearchDriver": BaseWebSearchDriver, "DDGS": DDGS}, ) pprint(web_tool_dict)
{ │ 'type': 'WebSearchTool', │ 'name': 'WebSearchTool', │ 'input_memory': None, │ 'output_memory': None, │ 'install_dependencies_on_init': True, │ 'dependencies_install_directory': None, │ 'verbose': False, │ 'off_prompt': False, │ 'web_search_driver': {'type': 'DuckDuckGoWebSearchDriver'} }
- On this page
- Overview
- Serialization Overrides
- Types Overrides
Could this page be better? Report a problem or suggest an addition!