Skip to content

CrewAI

Using AgentOpt with CrewAI agents and tasks.

Model strings as llm parameter

CrewAI agents accept a model string via the llm parameter. Pass values from the models dict directly.

from crewai import Agent, Crew, Task
from agentopt import BruteForceModelSelector

class MyAgent:
    def __init__(self, models):
        self.models = models

    def run(self, input_data):
        question = input_data if isinstance(input_data, str) else input_data["question"]

        planner = Agent(
            role="Planner",
            goal="Create a plan to answer the question",
            backstory="You are a planning assistant.",
            llm=self.models["planner"],
        )
        solver = Agent(
            role="Solver",
            goal="Answer the question following the plan",
            backstory="You are a problem solver.",
            llm=self.models["solver"],
        )

        plan_task = Task(description=f"Plan: {question}", agent=planner, expected_output="A plan")
        solve_task = Task(description=question, agent=solver, expected_output="An answer")

        crew = Crew(agents=[planner, solver], tasks=[plan_task, solve_task])
        result = crew.kickoff()
        return str(result)

selector = BruteForceModelSelector(
    agent=MyAgent,
    models={
        "planner": ["gpt-4o", "gpt-4o-mini"],
        "solver":  ["gpt-4o", "gpt-4o-mini"],
    },
    eval_fn=eval_fn,
    dataset=dataset,
)

results = selector.select_best()
results.print_summary()

Full example on GitHub