Aaron VanSledright

Category: Agents

  • Fantasy Football and AI – Week 8

    BIG WIN this week. All but two of the players that the AI picked this week were at or exceeded their projections. We scored 190 points for week 8. Here are the results:

    Unfortunately I haven’t had any time to put into building out an MCP server but the data cleanup has definitely improved the overall application and I think I am in a good place to have this setup for future use (next year!). Currently the team is in 3rd place of 8. All the teams in the league make it to the playoffs so we still have a long way to go!

    For week 9 we have some big players on BYE this week so the AI will have to handle that. Here is the current tentative lineup:

    I definitely think it will need step up some waiver finds for running back! Tune in next week for results!

  • Fantasy Football and AI – Week 7

    Well, our win streak was too good to be true. Unfortunately we lost a close one in week 6. It came down to the Monday night games and Sam Darnold just wasn’t able to get it going over the Texans even though the Seahawks still pulled out the win.

    Our running back group also did not preform well outside of Josh Jacobs. The loss was by a difference of about 7 points so if anyone had put up another touchdown we could have won.

    Anyway, on to week week 8. A few byes to contend with but otherwise most of are starts will be playing. The AI suggested grabbing the Colts defense and kicker as they are playing Tennessee. Breece Hall is currently questionable to play so we will have to keep an eye on that but he has a favorable matchup against the Bengals. The current roster is below.

    I promised to work on MCP this week but have only made a little bit of progress. I’ve been doing a lot of research on doing it in a cost effective manner as this project makes ZERO dollars and so I can’t afford to setup a bunch of expensive infrastructure. SO – this week I worked on combining the waiver table and the stats table into one table so that we can minimize DynamoDB calls throughout the application. The other thing I did was setup DynamoDB streams which are then converted into text files for each player and placed into an S3 bucket. This is what I think will be the first step in setting up a RAG pipeline so that a model can begin to be more “aware” of current NFL and Fantasy Football landscape.

    Here is an updated architecture diagram. You’ll notice the S3 bucket on the right side. This is the eventual start of our knowledgebase.

    You’ll also notice the waiver table removed. The new player structure looks like this:

    {
     "player_id": "George Kittle#TE",
     "espn_player_id": 3040151,
     "player_name": "George Kittle",
     "position": "TE",
     "seasons": {
      "2024": {
       "season_totals": {
        "MISC_FL": 0,
        "MISC_FPTS": 158.6,
        "MISC_FPTS/G": 10.6,
        "MISC_G": 15,
        "MISC_ROST": "99.4%",
        "Player": "George Kittle",
        "Rank": 1,
        "RECEIVING_20+": 21,
        "RECEIVING_LG": 43,
        "RECEIVING_REC": 78,
        "RECEIVING_TD": 8,
        "RECEIVING_TGT": 94,
        "RECEIVING_Y/R": 14.2,
        "RECEIVING_YDS": 1106,
        "RUSHING_ATT": 0,
        "RUSHING_TD": 0,
        "RUSHING_YDS": 0
       },
       "weekly_stats": {
        "1": {
         "fantasy_points": 4,
         "opponent": "NYJ"
        },
        "2": {
         "fantasy_points": 13.6,
         "opponent": "MIN"
        },
        "4": {
         "fantasy_points": 10.5,
         "opponent": "NE"
        },
        "5": {
         "fantasy_points": 12.4,
         "opponent": "ARI"
        },
        "6": {
         "fantasy_points": 17.8,
         "opponent": "SEA"
        },
        "7": {
         "fantasy_points": 9.2,
         "opponent": "KC"
        },
        "8": {
         "fantasy_points": 18.8,
         "opponent": "DAL"
        },
        "10": {
         "fantasy_points": 11.7,
         "opponent": "TB"
        },
        "12": {
         "fantasy_points": 14.2,
         "opponent": "GB"
        },
        "13": {
         "fantasy_points": 0.7,
         "opponent": "BUF"
        },
        "14": {
         "fantasy_points": 15.1,
         "opponent": "CHI"
        },
        "15": {
         "fantasy_points": 6.1,
         "opponent": "LA"
        },
        "16": {
         "fantasy_points": 10.6,
         "opponent": "MIA"
        },
        "17": {
         "fantasy_points": 11.2,
         "opponent": "DET"
        },
        "18": {
         "fantasy_points": 2.7,
         "opponent": "ARI"
        }
       }
      },
      "2025": {
       "injury_status": "ACTIVE",
       "jersey_number": "85",
       "percent_owned": 98.97,
       "pro_team_id": 25,
       "season_projections": {
        "MISC_FL": 0.5,
        "MISC_FPTS": 147.6,
        "RECEIVING_REC": 76,
        "RECEIVING_TD": 7.5,
        "RECEIVING_YDS": 1036.9
       },
       "team": "SF",
       "weekly_outlooks": {
        "1": "George Kittle is healthy and wealthy for the 49ers' Week 1 matchup against Seattle after signing a big four-year contract extension in the offseason. Kittle's role as a pass catcher should be intensified early on with WR Brandon Aiyuk (ACL) on the PUP list to begin the campaign and Jauan Jennings (calf, contract) uncertain to suit up against the Seahawks. Kittle is coming off a 78-catch, 1,106-yard, eight-TD 2024 campaign, further cementing his place as one of the NFL's elite producers at tight end. The Seahawks were middle-of-the-pack against the position last year, giving up an average of 51.5 receiving yards per game.",
        "2": "George Kittle won't play in San Francisco's Week 2 matchup against New Orleans due to a hamstring injury that landed him on IR. Luke Farrell and Jake Tonges, who caught a TD in Kittle's absence last week against the Seahawks, will be asked to step in at tight end for the 49ers.",
        "3": "George Kittle will miss his second straight game for the 49ers in Week 3 against the Cardinals while he remains on IR due to a hamstring injury. Jake Tonges and Luke Farrell should continue to hold down the fort at TE for Kittle until the latter is able to return. Kittle won't be eligible to suit up again until Week 6."
       },
       "weekly_projections": {
        "5": 12.7,
        "6": 13.1,
        "7": 13.4,
        "8": 11.7,
        "10": 14.6,
        "12": 11.6,
        "13": 13.2,
        "14": 13.4,
        "15": 14.1,
        "16": 14.1,
        "17": 14.5
       },
       "weekly_stats": {
        "1": {
         "fantasy_points": 12.5,
         "opponent": "SEA",
         "team": "SF",
         "updated_at": "2025-10-15T17:40:58.625370"
        },
        "2": {
         "fantasy_points": 12.5,
         "opponent": "NO",
         "team": "SF",
         "updated_at": "2025-09-16T17:08:05.179797"
        },
        "3": {
         "fantasy_points": 12.5,
         "opponent": "ARI",
         "team": "SF",
         "updated_at": "2025-09-23T15:00:13.907272"
        },
        "4": {
         "fantasy_points": 12.5,
         "opponent": "JAX",
         "team": "SF",
         "updated_at": "2025-09-30T15:00:14.035733"
        },
        "5": {
         "fantasy_points": 12.5,
         "opponent": "LAR",
         "team": "SF",
         "updated_at": "2025-10-07T15:00:13.665217"
        },
        "6": {
         "fantasy_points": 12.5,
         "opponent": "TB",
         "team": "SF",
         "updated_at": "2025-10-14T15:00:14.748804"
        }
       }
      }
     },
     "updated_at": "2025-10-22T18:11:05.039158"
    }

    I hope to continue to refine this so that it can be used for future seasons. Then we can continue to use the bot into 2026’s season.

    Anyway, hopefully I can figure out MCP and the knowledgebase this week. Winter is coming so its time to hunker down and build AWS Architectures!

  • Fantasy Football and AI – Week 6

    We’re back with the week 6 AI managed fantasy football team and we got another win! The team’s record is now 4-2-0 and sits 3rd in the league.

    Here is the final lineup that was fielded for week 6 and the points

    There were a couple players on the bench that did better. Keenan Allen and Breece Hall could have been swapped for pretty much anyone on the bench and we would have had a few more points. A win is a win. One thing to note is that we had a game time injury of Dalton Kincaid and I had to pull Zach Ertz in at the last minute to avoid getting a zero.

    For week 7 we are starting to see both injury and bye weeks happening. The AI will have to make some pretty deep roster moves in order to fill the gaps. Here is the initial starting lineup:

    Because of the BYE weeks we are picking up Aaron Rodgers who put up a good game against Cincinnati last night. DK did not have a great night last night. We picked up the Patriots defense as well as Eddy Pineiro to fill in some slots. I think the Patriots against Tennessee will be an interesting matchup given that the Titans fired their head coach. Mike Vrabel has the Patriots firing again and hopefully he can shut them out and we can put up some big points!

    From a tech perspective, I’m slowly putting together an MCP server to help create some efficiencies when working with the DynamoDB tables. Hopefully, if we can handle that, the overall application response time will be faster. If I wasn’t traveling AGAIN this weekend I would have made it a hackathon. Hopefully for week 8!

    Subscribe for updates.

  • Using Strands to build an AWS Cost Analysis Agent

    Taking a break from Fantasy Football today to talk about a quick weekend project I put together.

    A friend of mine was chatting about how their AWS costs are getting out of control and they aren’t sure where to start when it comes to cleaning up the account. This prompted me with an idea to utilize AI to build an Agent that can interact with your AWS account to review resources, provide cost analysis and give you clear CLI commands or console instructions to help clean up the account.

    In order to do this, I wanted to incur as little cost as possible. So, I built a Docker image in order to run it locally. First, there is a shell script that will build an IAM User in your account that provides read-only access to the account, Cost Explorer access and access to Bedrock (to communicate with an AI model).

    The Docker image runs and builds an Agent that interacts with whichever model you want to utilize. I picked Amazon’s Nova model just to keep the costs down. The container then presents a web interface where the account’s bill break down will be displayed:

    It will also display some common costly resources and their counts:

    The next block is where things get very helpful. The AI will present to you suggestions as to how to save some money as well as some risk calculations. Because I ran this against my real account I had to blur out some information but you get the idea:

    So, now you have some actionable activities to work through to help you save money on your AWS bill. But what if you have more questions? I also included a simple chat box to help you work with the bot to come up with other explanations or find other ways to save cost.

    So I asked the AI to find the largest instance in my account and then determine the right size for it. Here is the response:

    Why would this be important? Well, if you had the AI review all of the instances in your account you could identify EC2 instances that are oversized and have them be changed accordingly. After I implemented a few of the changes that the AI recommended (and verified they didn’t break anything), my account billing decreased by about $100.

    If this is something you are interested in running on your own account feel free to reach out! I’d be happy to help you setup up the container on your machine and make suggestions as to how to save some money!