Source code for steamship.agents.tools.text_generation.text_rewrite_tool
from typing import Any, List, Union
from steamship import Block, Steamship, Task
from steamship.agents.llms import OpenAI
from steamship.agents.schema import AgentContext, Tool
from steamship.agents.utils import get_llm, with_llm
from steamship.utils.repl import ToolREPL
DEFAULT_PROMPT = """Instructions:
Please rewrite the following passage to be incredibly polite, to a fault.
Passage:
{input}
Rewritten Passage:"""
[docs]
class TextRewritingTool(Tool):
"""
Example tool to illustrate rewriting a statement according to a particular personality.
"""
rewrite_prompt: str = DEFAULT_PROMPT
name: str = "TextRewritingTool"
human_description: str = "Rewrites a piece of text using the provided prompt."
agent_description: str = "Used to rewrite a piece of text given a prompt. Takes text as input, and provides text as output."
[docs]
def run(self, tool_input: List[Block], context: AgentContext) -> Union[List[Block], Task[Any]]:
"""Rewrites each provided text block using the stored prompt. Non-text blocks are passed through without
modification.
Inputs
------
input: List[Block]
A list of blocks to be rewritten if they contain text. Each block will be considered a separate input.
memory: AgentContext
The active AgentContext.
Output
------
output: List[Blocks]
A list of blocks whose content has been rewritten. Synchronously produced (for now).
"""
llm = get_llm(context, default=OpenAI(client=context.client))
blocks = []
for block in tool_input:
# If the block is not text, simply pass it through.
if not block.is_text():
continue
# If the block is text, rewrite it and append that output.
prompt = self.rewrite_prompt.format(input=block.text)
output_blocks = llm.complete(prompt=prompt)
blocks.extend(output_blocks)
return blocks
if __name__ == "__main__":
with Steamship.temporary_workspace() as client:
ToolREPL(TextRewritingTool()).run_with_client(
client=client, context=with_llm(llm=OpenAI(client=client))
)