common#
__all__ = ['ActionCallDeltaMessageContent', 'ActionCallMessageContent', 'ActionResultMessageContent', 'AudioDeltaMessageContent', 'AudioMessageContent', 'BaseAction', 'BaseDeltaMessageContent', 'BaseMessage', 'BaseMessageContent', 'DeltaMessage', 'GenericMessageContent', 'ImageMessageContent', 'Message', 'Observable', 'PromptStack', 'Reference', 'TextDeltaMessageContent', 'TextMessageContent', 'ToolAction', 'observable']module-attribute
Bases: BaseDeltaMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/action_call_delta_message_content.py
@define
class ActionCallDeltaMessageContent(BaseDeltaMessageContent):
tag: Optional[str] = field(default=None, metadata={"serializable": True})
name: Optional[str] = field(default=None, metadata={"serializable": True})
path: Optional[str] = field(default=None, metadata={"serializable": True})
partial_input: Optional[str] = field(default=None, metadata={"serializable": True})
def __str__(self) -> str:
parts = []
if self.name:
parts.append(self.name)
if self.path:
parts.append(f".{self.path}")
if self.tag:
parts.append(f" ({self.tag})")
if self.partial_input:
if parts:
parts.append(f" {self.partial_input}")
else:
parts.append(self.partial_input)
return "".join(parts)
name = field(default=None, metadata={'serializable': True})class-attribute instance-attributepartial_input = field(default=None, metadata={'serializable': True})class-attribute instance-attributepath = field(default=None, metadata={'serializable': True})class-attribute instance-attributetag = field(default=None, metadata={'serializable': True})class-attribute instance-attribute
str()#
Source Code in
griptape/common/prompt_stack/contents/action_call_delta_message_content.py
def __str__(self) -> str:
parts = []
if self.name:
parts.append(self.name)
if self.path:
parts.append(f".{self.path}")
if self.tag:
parts.append(f" ({self.tag})")
if self.partial_input:
if parts:
parts.append(f" {self.partial_input}")
else:
parts.append(self.partial_input)
return "".join(parts)
ActionCallMessageContent#
Bases: BaseMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/action_call_message_content.py
@define
class ActionCallMessageContent(BaseMessageContent):
artifact: ActionArtifact = field(metadata={"serializable": True})
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> ActionCallMessageContent:
action_call_deltas = [delta for delta in deltas if isinstance(delta, ActionCallDeltaMessageContent)]
tag = None
name = None
path = None
json_input = ""
for delta in action_call_deltas:
if delta.tag is not None:
tag = delta.tag
if delta.name is not None:
name = delta.name
if delta.path is not None:
path = delta.path
if delta.partial_input is not None:
json_input += delta.partial_input
if tag is not None and name is not None and path is not None:
try:
parsed_input = json.loads(json_input or "{}")
except json.JSONDecodeError as exc:
raise ValueError("Invalid JSON input for ToolAction") from exc
action = ToolAction(tag=tag, name=name, path=path, input=parsed_input)
else:
raise ValueError("Missing required fields for ToolAction")
artifact = ActionArtifact(value=action)
return cls(artifact=artifact)
artifact = field(metadata={'serializable': True})class-attribute instance-attribute
from_deltas(deltas)classmethod#
Source Code in
griptape/common/prompt_stack/contents/action_call_message_content.py
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> ActionCallMessageContent:
action_call_deltas = [delta for delta in deltas if isinstance(delta, ActionCallDeltaMessageContent)]
tag = None
name = None
path = None
json_input = ""
for delta in action_call_deltas:
if delta.tag is not None:
tag = delta.tag
if delta.name is not None:
name = delta.name
if delta.path is not None:
path = delta.path
if delta.partial_input is not None:
json_input += delta.partial_input
if tag is not None and name is not None and path is not None:
try:
parsed_input = json.loads(json_input or "{}")
except json.JSONDecodeError as exc:
raise ValueError("Invalid JSON input for ToolAction") from exc
action = ToolAction(tag=tag, name=name, path=path, input=parsed_input)
else:
raise ValueError("Missing required fields for ToolAction")
artifact = ActionArtifact(value=action)
return cls(artifact=artifact)
ActionResultMessageContent#
Bases: BaseMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/action_result_message_content.py
@define
class ActionResultMessageContent(BaseMessageContent):
artifact: BaseArtifact = field(metadata={"serializable": True})
action: ToolAction = field(metadata={"serializable": True})
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> ActionResultMessageContent:
raise NotImplementedError
action = field(metadata={'serializable': True})class-attribute instance-attributeartifact = field(metadata={'serializable': True})class-attribute instance-attribute
from_deltas(deltas)classmethod#
Source Code in
griptape/common/prompt_stack/contents/action_result_message_content.py
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> ActionResultMessageContent:
raise NotImplementedError
AudioDeltaMessageContent#
Bases: BaseDeltaMessageContent “)
Attributes#
Name |
Type |
Description |
|---|---|---|
<a href="./#griptape.common.AudioDeltaMessageContent.id" title="id = field(default=None, metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.AudioDeltaMessageContent.id)"><code class="language-python">id</code></a> |
Optional[str] |
The ID of the audio data.<br/> |
<a href="./#griptape.common.AudioDeltaMessageContent.data" title="data = field(default=None, metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.AudioDeltaMessageContent.data)"><code class="language-python">data</code></a> |
Optional[str] |
Base64 encoded audio data.<br/> |
<a href="./#griptape.common.AudioDeltaMessageContent.transcript" title="transcript = field(default=None, metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.AudioDeltaMessageContent.transcript)"><code class="language-python">transcript</code></a> |
Optional[str] |
The transcript of the audio data.<br/> |
<a href="./#griptape.common.AudioDeltaMessageContent.expires_at" title="expires_at = field(default=None, metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.AudioDeltaMessageContent.expires_at)"><code class="language-python">expires_at</code></a> |
Optional[int] |
The Unix timestamp (in seconds) for when this audio data will no longer be accessible.<br/> |
Source Code in
griptape/common/prompt_stack/contents/audio_delta_message_content.py
@define(kw_only=True)
class AudioDeltaMessageContent(BaseDeltaMessageContent):
"""A delta message content for audio data.
Attributes:
id: The ID of the audio data.
data: Base64 encoded audio data.
transcript: The transcript of the audio data.
expires_at: The Unix timestamp (in seconds) for when this audio data will no longer be accessible.
"""
id: Optional[str] = field(default=None, metadata={"serializable": True})
data: Optional[str] = field(default=None, metadata={"serializable": True})
transcript: Optional[str] = field(default=None, metadata={"serializable": True})
expires_at: Optional[int] = field(default=None, metadata={"serializable": True})
data = field(default=None, metadata={'serializable': True})class-attribute instance-attributeexpires_at = field(default=None, metadata={'serializable': True})class-attribute instance-attributeid = field(default=None, metadata={'serializable': True})class-attribute instance-attributetranscript = field(default=None, metadata={'serializable': True})class-attribute instance-attribute
AudioMessageContent#
Bases: BaseMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/audio_message_content.py
@define
class AudioMessageContent(BaseMessageContent):
artifact: AudioArtifact = field(metadata={"serializable": True})
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> AudioMessageContent:
audio_deltas = [delta for delta in deltas if isinstance(delta, AudioDeltaMessageContent)]
audio_data = [delta.data for delta in audio_deltas if delta.data is not None]
transcript_data = [delta.transcript for delta in audio_deltas if delta.transcript is not None]
expires_at = next(delta.expires_at for delta in audio_deltas if delta.expires_at is not None)
audio_id = next(delta.id for delta in audio_deltas if delta.id is not None)
audio_transcript = "".join(data for data in transcript_data)
artifact = AudioArtifact(
value=b"".join(base64.b64decode(data) for data in audio_data),
format="wav",
meta={
"audio_id": audio_id,
"expires_at": expires_at,
"transcript": audio_transcript,
},
)
return cls(artifact=artifact)
artifact = field(metadata={'serializable': True})class-attribute instance-attribute
from_deltas(deltas)classmethod#
Source Code in
griptape/common/prompt_stack/contents/audio_message_content.py
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> AudioMessageContent:
audio_deltas = [delta for delta in deltas if isinstance(delta, AudioDeltaMessageContent)]
audio_data = [delta.data for delta in audio_deltas if delta.data is not None]
transcript_data = [delta.transcript for delta in audio_deltas if delta.transcript is not None]
expires_at = next(delta.expires_at for delta in audio_deltas if delta.expires_at is not None)
audio_id = next(delta.id for delta in audio_deltas if delta.id is not None)
audio_transcript = "".join(data for data in transcript_data)
artifact = AudioArtifact(
value=b"".join(base64.b64decode(data) for data in audio_data),
format="wav",
meta={
"audio_id": audio_id,
"expires_at": expires_at,
"transcript": audio_transcript,
},
)
return cls(artifact=artifact)
BaseAction#
Bases: SerializableMixin “) , ABC
Source Code in griptape/common/actions/base_action.py
class BaseAction(SerializableMixin, ABC): ...
BaseDeltaMessageContent#
Bases:
ABC, SerializableMixin “)
Source Code in
griptape/common/prompt_stack/contents/base_delta_message_content.py
@define
class BaseDeltaMessageContent(ABC, SerializableMixin):
index: int = field(kw_only=True, default=0, metadata={"serializable": True})
index = field(kw_only=True, default=0, metadata={'serializable': True})class-attribute instance-attribute
BaseMessage#
Bases:
ABC, SerializableMixin “)
Source Code in griptape/common/prompt_stack/messages/base_message.py
@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
ASSISTANT_ROLE = 'assistant'class-attribute instance-attributeSYSTEM_ROLE = 'system'class-attribute instance-attributeUSER_ROLE = 'user'class-attribute instance-attributecontent = field(metadata={'serializable': True})class-attribute instance-attributerole = field(kw_only=True, metadata={'serializable': True})class-attribute instance-attributeusage = field(kw_only=True, default=Factory(lambda: BaseMessage.Usage()), metadata={'serializable': True})class-attribute instance-attribute
Usage#
Bases: SerializableMixin “)
Source Code in griptape/common/prompt_stack/messages/base_message.py
@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),
)
input_tokens = field(kw_only=True, default=None, metadata={'serializable': True})class-attribute instance-attributeoutput_tokens = field(kw_only=True, default=None, metadata={'serializable': True})class-attribute instance-attributetotal_tokensproperty
is_assistant()#
Source Code in griptape/common/prompt_stack/messages/base_message.py
def is_assistant(self) -> bool:
return self.role == self.ASSISTANT_ROLE
is_system()#
Source Code in griptape/common/prompt_stack/messages/base_message.py
def is_system(self) -> bool:
return self.role == self.SYSTEM_ROLE
is_user()#
Source Code in griptape/common/prompt_stack/messages/base_message.py
def is_user(self) -> bool:
return self.role == self.USER_ROLE
BaseMessageContent#
Bases:
ABC, SerializableMixin “)
Source Code in
griptape/common/prompt_stack/contents/base_message_content.py
@define
class BaseMessageContent(ABC, SerializableMixin):
artifact: BaseArtifact = field(metadata={"serializable": True})
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)
def to_text(self) -> str:
return str(self.artifact)
@classmethod
@abstractmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> BaseMessageContent: ...
artifact = field(metadata={'serializable': True})class-attribute instance-attribute
bool()#
Source Code in
griptape/common/prompt_stack/contents/base_message_content.py
def __bool__(self) -> bool:
return bool(self.artifact)
len()#
Source Code in
griptape/common/prompt_stack/contents/base_message_content.py
def __len__(self) -> int:
return len(self.artifact)
str()#
Source Code in
griptape/common/prompt_stack/contents/base_message_content.py
def __str__(self) -> str:
return self.artifact.to_text()
from_deltas(deltas)abstractmethodclassmethod#
Source Code in
griptape/common/prompt_stack/contents/base_message_content.py
@classmethod
@abstractmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> BaseMessageContent: ...
to_text()#
Source Code in
griptape/common/prompt_stack/contents/base_message_content.py
def to_text(self) -> str:
return str(self.artifact)
DeltaMessage#
Bases: BaseMessage “)
Source Code in griptape/common/prompt_stack/messages/delta_message.py
@define
class DeltaMessage(BaseMessage):
role: Optional[str] = field(kw_only=True, default=None, metadata={"serializable": True})
content: Optional[BaseDeltaMessageContent] = field(kw_only=True, default=None, metadata={"serializable": True})
content = field(kw_only=True, default=None, metadata={'serializable': True})class-attribute instance-attributerole = field(kw_only=True, default=None, metadata={'serializable': True})class-attribute instance-attribute
GenericMessageContent#
Bases: BaseMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/generic_message_content.py
@define
class GenericMessageContent(BaseMessageContent):
artifact: GenericArtifact = field(metadata={"serializable": True})
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> GenericMessageContent:
raise NotImplementedError
artifact = field(metadata={'serializable': True})class-attribute instance-attribute
from_deltas(deltas)classmethod#
Source Code in
griptape/common/prompt_stack/contents/generic_message_content.py
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> GenericMessageContent:
raise NotImplementedError
ImageMessageContent#
Bases: BaseMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/image_message_content.py
@define
class ImageMessageContent(BaseMessageContent):
artifact: Union[ImageArtifact, ImageUrlArtifact] = field(metadata={"serializable": True})
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> ImageMessageContent:
raise NotImplementedError
artifact = field(metadata={'serializable': True})class-attribute instance-attribute
from_deltas(deltas)classmethod#
Source Code in
griptape/common/prompt_stack/contents/image_message_content.py
@classmethod
def from_deltas(cls, deltas: Sequence[BaseDeltaMessageContent]) -> ImageMessageContent:
raise NotImplementedError
Message#
Bases: BaseMessage “)
Source Code in griptape/common/prompt_stack/messages/message.py
@define
class Message(BaseMessage):
def __init__(self, content: str | list[BaseMessageContent], **kwargs: Any) -> None:
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 has_all_content_type(self, content_type: type[T]) -> bool:
return all(isinstance(content, content_type) for content in self.content)
def has_any_content_type(self, content_type: type[T]) -> bool:
return any(isinstance(content, content_type) for content in self.content)
def get_content_type(self, content_type: type[T]) -> list[T]:
return [content for content in self.content if isinstance(content, content_type)]
def is_text(self) -> bool:
return all(isinstance(content, TextMessageContent) for content in self.content)
def to_text(self) -> str:
return "".join(
[content.artifact.to_text() for content in self.content if isinstance(content, TextMessageContent)],
)
def to_artifact(self, meta: Optional[dict] = None) -> BaseArtifact:
if meta is None:
meta = {}
if len(self.content) == 1:
artifact = self.content[0].artifact
else:
artifact = ListArtifact([content.artifact for content in self.content])
artifact.meta.update(meta)
return artifact
content = field(metadata={'serializable': True})class-attribute instance-attributevalueproperty
init(content, **kwargs)#
Source Code in griptape/common/prompt_stack/messages/message.py
def __init__(self, content: str | list[BaseMessageContent], **kwargs: Any) -> None:
if isinstance(content, str):
content = [TextMessageContent(TextArtifact(value=content))]
self.__attrs_init__(content, **kwargs) # pyright: ignore[reportAttributeAccessIssue]
str()#
Source Code in griptape/common/prompt_stack/messages/message.py
def __str__(self) -> str:
return self.to_text()
get_content_type(content_type)#
Source Code in griptape/common/prompt_stack/messages/message.py
def get_content_type(self, content_type: type[T]) -> list[T]:
return [content for content in self.content if isinstance(content, content_type)]
has_all_content_type(content_type)#
Source Code in griptape/common/prompt_stack/messages/message.py
def has_all_content_type(self, content_type: type[T]) -> bool:
return all(isinstance(content, content_type) for content in self.content)
has_any_content_type(content_type)#
Source Code in griptape/common/prompt_stack/messages/message.py
def has_any_content_type(self, content_type: type[T]) -> bool:
return any(isinstance(content, content_type) for content in self.content)
is_text()#
Source Code in griptape/common/prompt_stack/messages/message.py
def is_text(self) -> bool:
return all(isinstance(content, TextMessageContent) for content in self.content)
to_artifact(meta=None)#
Source Code in griptape/common/prompt_stack/messages/message.py
def to_artifact(self, meta: Optional[dict] = None) -> BaseArtifact:
if meta is None:
meta = {}
if len(self.content) == 1:
artifact = self.content[0].artifact
else:
artifact = ListArtifact([content.artifact for content in self.content])
artifact.meta.update(meta)
return artifact
to_text()#
Source Code in griptape/common/prompt_stack/messages/message.py
def to_text(self) -> str:
return "".join(
[content.artifact.to_text() for content in self.content if isinstance(content, TextMessageContent)],
)
Observable#
Source Code in griptape/common/observable.py
class Observable:
@define
class Call:
func: Callable = field(kw_only=True)
instance: Optional[Any] = field(default=None, kw_only=True)
args: tuple[Any, ...] = field(default=Factory(tuple), kw_only=True)
kwargs: dict[str, Any] = field(default=Factory(dict), kw_only=True)
decorator_args: tuple[Any, ...] = field(default=Factory(tuple), kw_only=True)
decorator_kwargs: dict[str, Any] = field(default=Factory(dict), kw_only=True)
def __call__(self) -> Any:
return self.func(*self.args, **self.kwargs)
@property
def tags(self) -> Optional[list[str]]:
return self.decorator_kwargs.get("tags")
Call#
Source Code in griptape/common/observable.py
@define
class Call:
func: Callable = field(kw_only=True)
instance: Optional[Any] = field(default=None, kw_only=True)
args: tuple[Any, ...] = field(default=Factory(tuple), kw_only=True)
kwargs: dict[str, Any] = field(default=Factory(dict), kw_only=True)
decorator_args: tuple[Any, ...] = field(default=Factory(tuple), kw_only=True)
decorator_kwargs: dict[str, Any] = field(default=Factory(dict), kw_only=True)
def __call__(self) -> Any:
return self.func(*self.args, **self.kwargs)
@property
def tags(self) -> Optional[list[str]]:
return self.decorator_kwargs.get("tags")
args = field(default=Factory(tuple), kw_only=True)class-attribute instance-attributedecorator_args = field(default=Factory(tuple), kw_only=True)class-attribute instance-attributedecorator_kwargs = field(default=Factory(dict), kw_only=True)class-attribute instance-attributefunc = field(kw_only=True)class-attribute instance-attributeinstance = field(default=None, kw_only=True)class-attribute instance-attributekwargs = field(default=Factory(dict), kw_only=True)class-attribute instance-attributetagsproperty
PromptStack#
Bases: SerializableMixin “)
Source Code in griptape/common/prompt_stack/prompt_stack.py
@define
class PromptStack(SerializableMixin):
messages: list[Message] = field(factory=list, kw_only=True, metadata={"serializable": True})
tools: list[BaseTool] = field(factory=list, kw_only=True)
output_schema: Optional[Union[Schema, type[BaseModel]]] = field(default=None, kw_only=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:
content = self.__to_message_content(artifact)
self.messages.append(Message(content=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 to_output_json_schema(self, schema_id: str = "Output Format") -> dict:
if self.output_schema is None:
raise ValueError("Output schema is not set")
if isinstance(self.output_schema, Schema):
json_schema = self.output_schema.json_schema(schema_id)
elif isinstance(self.output_schema, type) and issubclass(self.output_schema, BaseModel):
json_schema = build_strict_schema(self.output_schema.model_json_schema(), schema_id)
else:
raise ValueError(f"Unsupported output schema type: {type(self.output_schema)}")
return json_schema
@classmethod
def from_artifact(cls, artifact: BaseArtifact) -> PromptStack:
prompt_stack = cls()
prompt_stack.add_user_message(artifact)
return prompt_stack
def __to_message_content(self, artifact: str | BaseArtifact) -> list[BaseMessageContent]:
if isinstance(artifact, str):
return [TextMessageContent(TextArtifact(artifact))]
if isinstance(artifact, TextArtifact):
return [TextMessageContent(artifact)]
if isinstance(artifact, ImageArtifact):
return [ImageMessageContent(artifact)]
if isinstance(artifact, ImageUrlArtifact):
return [ImageMessageContent(artifact)]
if isinstance(artifact, AudioArtifact):
return [AudioMessageContent(artifact)]
if isinstance(artifact, GenericArtifact):
return [GenericMessageContent(artifact)]
if isinstance(artifact, ActionArtifact):
action = artifact.value
output = action.output
if output is None:
return [ActionCallMessageContent(artifact)]
return [ActionResultMessageContent(output, action=action)]
if isinstance(artifact, ListArtifact):
processed_contents = [self.__to_message_content(artifact) for artifact in artifact.value]
return [sub_content for processed_content in processed_contents for sub_content in processed_content]
return [TextMessageContent(TextArtifact(artifact.to_text()))]
assistant_messagespropertymessages = field(factory=list, kw_only=True, metadata={'serializable': True})class-attribute instance-attributeoutput_schema = field(default=None, kw_only=True)class-attribute instance-attributesystem_messagespropertytools = field(factory=list, kw_only=True)class-attribute instance-attributeuser_messagesproperty
__to_message_content(artifact)#
Source Code in griptape/common/prompt_stack/prompt_stack.py
def __to_message_content(self, artifact: str | BaseArtifact) -> list[BaseMessageContent]:
if isinstance(artifact, str):
return [TextMessageContent(TextArtifact(artifact))]
if isinstance(artifact, TextArtifact):
return [TextMessageContent(artifact)]
if isinstance(artifact, ImageArtifact):
return [ImageMessageContent(artifact)]
if isinstance(artifact, ImageUrlArtifact):
return [ImageMessageContent(artifact)]
if isinstance(artifact, AudioArtifact):
return [AudioMessageContent(artifact)]
if isinstance(artifact, GenericArtifact):
return [GenericMessageContent(artifact)]
if isinstance(artifact, ActionArtifact):
action = artifact.value
output = action.output
if output is None:
return [ActionCallMessageContent(artifact)]
return [ActionResultMessageContent(output, action=action)]
if isinstance(artifact, ListArtifact):
processed_contents = [self.__to_message_content(artifact) for artifact in artifact.value]
return [sub_content for processed_content in processed_contents for sub_content in processed_content]
return [TextMessageContent(TextArtifact(artifact.to_text()))]
add_assistant_message(artifact)#
Source Code in griptape/common/prompt_stack/prompt_stack.py
def add_assistant_message(self, artifact: str | BaseArtifact) -> Message:
return self.add_message(artifact, Message.ASSISTANT_ROLE)
add_message(artifact, role)#
Source Code in griptape/common/prompt_stack/prompt_stack.py
def add_message(self, artifact: str | BaseArtifact, role: str) -> Message:
content = self.__to_message_content(artifact)
self.messages.append(Message(content=content, role=role))
return self.messages[-1]
add_system_message(artifact)#
Source Code in griptape/common/prompt_stack/prompt_stack.py
def add_system_message(self, artifact: str | BaseArtifact) -> Message:
return self.add_message(artifact, Message.SYSTEM_ROLE)
add_user_message(artifact)#
Source Code in griptape/common/prompt_stack/prompt_stack.py
def add_user_message(self, artifact: str | BaseArtifact) -> Message:
return self.add_message(artifact, Message.USER_ROLE)
from_artifact(artifact)classmethod#
Source Code in griptape/common/prompt_stack/prompt_stack.py
@classmethod
def from_artifact(cls, artifact: BaseArtifact) -> PromptStack:
prompt_stack = cls()
prompt_stack.add_user_message(artifact)
return prompt_stack
to_output_json_schema(schema_id=‘Output Format’)#
Source Code in griptape/common/prompt_stack/prompt_stack.py
def to_output_json_schema(self, schema_id: str = "Output Format") -> dict:
if self.output_schema is None:
raise ValueError("Output schema is not set")
if isinstance(self.output_schema, Schema):
json_schema = self.output_schema.json_schema(schema_id)
elif isinstance(self.output_schema, type) and issubclass(self.output_schema, BaseModel):
json_schema = build_strict_schema(self.output_schema.model_json_schema(), schema_id)
else:
raise ValueError(f"Unsupported output schema type: {type(self.output_schema)}")
return json_schema
Reference#
Bases: SerializableMixin “)
Source Code in griptape/common/reference.py
True})#
authors = field(factory=list, metadata={'serializable': True})class-attribute instance-attributeid = field(default=Factory(lambda: uuid.uuid4().hex), metadata={'serializable': True})class-attribute instance-attributesource = field(default=None, metadata={'serializable': True})class-attribute instance-attributetitle = field(metadata={'serializable': True})class-attribute instance-attributeurl = field(default=None, metadata={'serializable': True})class-attribute instance-attributeyear = field(default=None, metadata={'serializable': True})class-attribute instance-attribute
Bases: BaseDeltaMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/text_delta_message_content.py
@define
class TextDeltaMessageContent(BaseDeltaMessageContent):
text: str = field(metadata={"serializable": True})
text = field(metadata={'serializable': True})class-attribute instance-attribute
Bases: BaseMessageContent “)
Source Code in
griptape/common/prompt_stack/contents/text_message_content.py
@define
class TextMessageContent(BaseMessageContent):
artifact: BaseArtifact = 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)
artifact = field(metadata={'serializable': True})class-attribute instance-attribute
from_deltas(deltas)classmethod#
Source Code in
griptape/common/prompt_stack/contents/text_message_content.py
@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)
ToolAction#
Bases: BaseAction “)
Attributes#
Name |
Type |
Description |
|---|---|---|
<a href="./#griptape.common.ToolAction.tag" title="tag = field(metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.ToolAction.tag)"><code class="language-python">tag</code></a> |
str |
The tag (unique identifier) of the action.<br/> |
<a href="./#griptape.common.ToolAction.name" title="name = field(metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.ToolAction.name)"><code class="language-python">name</code></a> |
str |
The name (Tool name) of the action.<br/> |
<a href="./#griptape.common.ToolAction.path" title="path = field(default=None, metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.ToolAction.path)"><code class="language-python">path</code></a> |
Optional[str] |
The path (Tool activity name) of the action.<br/> |
<a href="./#griptape.common.ToolAction.input" title="input = field(factory=dict, metadata={'serializable': True}) class-attribute instance-attribute (griptape.common.ToolAction.input)"><code class="language-python">input</code></a> |
dict |
The input (Tool params) of the action.<br/> |
<a href="./#griptape.common.ToolAction.tool" title="tool = field(default=None) class-attribute instance-attribute (griptape.common.ToolAction.tool)"><code class="language-python">tool</code></a> |
<a href="../tools#griptape.tools.BaseTool" title="BaseTool (griptape.tools.BaseTool)"><code class="language-python">Optional[BaseTool]</code></a> |
The matched Tool of the action.<br/> |
<a href="./#griptape.common.ToolAction.output" title="output = field(default=None) class-attribute instance-attribute (griptape.common.ToolAction.output)"><code class="language-python">output</code></a> |
<a href="../artifacts#griptape.artifacts.BaseArtifact" title="BaseArtifact (griptape.artifacts.BaseArtifact)"><code class="language-python">Optional[BaseArtifact]</code></a> |
The output (Tool result) of the action.<br/> |
Source Code in griptape/common/actions/tool_action.py
@define(kw_only=True)
class ToolAction(BaseAction):
"""Represents an instance of an LLM using a Tool.
Attributes:
tag: The tag (unique identifier) of the action.
name: The name (Tool name) of the action.
path: The path (Tool activity name) of the action.
input: The input (Tool params) of the action.
tool: The matched Tool of the action.
output: The output (Tool result) of the action.
"""
tag: str = field(metadata={"serializable": True})
name: str = field(metadata={"serializable": True})
path: Optional[str] = field(default=None, metadata={"serializable": True})
input: dict = field(factory=dict, metadata={"serializable": True})
tool: Optional[BaseTool] = field(default=None)
output: Optional[BaseArtifact] = field(default=None)
def __str__(self) -> str:
return json.dumps(self.to_dict())
def to_native_tool_name(self) -> str:
parts = [self.name]
if self.path is not None:
parts.append(self.path)
return "_".join(parts)
@classmethod
def from_native_tool_name(cls, native_tool_name: str) -> tuple[str, Optional[str]]:
parts = native_tool_name.split("_", 1)
if len(parts) == 1:
name, path = parts[0], None
else:
name, path = parts
return name, path
input = field(factory=dict, metadata={'serializable': True})class-attribute instance-attributename = field(metadata={'serializable': True})class-attribute instance-attributeoutput = field(default=None)class-attribute instance-attributepath = field(default=None, metadata={'serializable': True})class-attribute instance-attributetag = field(metadata={'serializable': True})class-attribute instance-attributetool = field(default=None)class-attribute instance-attribute
str()#
Source Code in griptape/common/actions/tool_action.py
def __str__(self) -> str:
return json.dumps(self.to_dict())
from_native_tool_name(native_tool_name)classmethod#
Source Code in griptape/common/actions/tool_action.py
@classmethod
def from_native_tool_name(cls, native_tool_name: str) -> tuple[str, Optional[str]]:
parts = native_tool_name.split("_", 1)
if len(parts) == 1:
name, path = parts[0], None
else:
name, path = parts
return name, path
to_native_tool_name()#
Source Code in griptape/common/actions/tool_action.py
def to_native_tool_name(self) -> str:
parts = [self.name]
if self.path is not None:
parts.append(self.path)
return "_".join(parts)