Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change the Paradigm of Pipelines to take Agents as inputs and chain data between them. #563

Open
jimatregrello opened this issue Jan 12, 2024 · 2 comments
Labels
enhancement New feature or request

Comments

@jimatregrello
Copy link

jimatregrello commented Jan 12, 2024

As I've continued to use griptape, the paradigm of using PromptTasks inside of broader request contexts is becoming repetitive and not as clean as using Agents. I'm slowly articulating prompts in the form of responsibilities for specific agents and rather than re-setting this up in a pipeline, I'd rather be able to chain prompts between agents in the form of a pipeline. Rulesets allow me to assign responsibilities in a nice programmatic format and I'd like to keep that.

This programming model enables users to treat agents similarly to actors with Pipelines essentially enabling message passing between the respective agents. For example, I have one agent that summarizes a prompt based on a ruleset and another agent that acts on the summarized prompt with its own ruleset.

It'd be nice to define agents and simply chain their I/O in the following form:

summarize_agent = SummarizeAgent()...
parse_agent = ParseAgent()...
pipeline = Pipeline()
pipeline.chain(
    summarize_agent.prompt(input),
    parse_agent.prompt('{{ parent_output }}')
)

This enables me to build agents in isolation and test their input and output and then chain them together.

@jimatregrello jimatregrello added the enhancement New feature or request label Jan 12, 2024
@collindutter
Copy link
Member

Hey @jimatregrello thanks for trying out Griptape, and for the great feedback! This is something we've been playing with internally, I think need a StructureRunnerTask and StructureRunnerTool. That would enable something like:

input = "foo bar"
summarize_agent = SummarizeAgent()
parse_agent = ParseAgent()
query_agent_a = QueryAgent()
query_agent_b = QueryAgent() 

pipeline = Pipeline(
    tasks=[
        StructureRunnerTask(input, summarize_agent),
        StructureRunnerTask("{{ parent_output }}", parse_agent),
        ToolkitTask(
            "{{ parent_output }}",
            tools=[
                StructureRunnerTool(structure=query_agent_a),
                StructureRunnerTool(structure=query_agent_b),
            ]
        )
    ]
)
pipeline.run()

@jimatregrello
Copy link
Author

Sure thing.

To provide more context, we have instances where we may want to fine tune models for individual agents before chaining and that's where this will be a huge help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants