LLM Plan Builder is finally live :)

Finally this is live if anyone wants to try to build a training plan using an LLM. If anyone needs ideas on how to do this let me know.

image

Sharing the video again (I think)…

One of the tricky parts with an LLM is dialing the perfect intensity. Also thinking in terms of periodization is likely not a bad idea, but if you want a hard winter training plan you can make a very hard winter training program with this. :slight_smile:

It creates 8-week plans but you can ask an LLM to create multiple 8-week blocks in a row that are logical progressions. Also you only get to define 3 days a week, the other days are CJ rules. If you want full control, then create 2 3-day a week plans and push both to your calendar.

Good luck and happy building :slight_smile:

4 Likes

Hi Alex, great news. My first feedback. I have create the plan with chatgpt but “SFR – Forza Resistente a bassa cadenza” and “Z2 + richiami neuromuscolari” not correct when i upload the json in trainerday. this is the json:
{
“blockType”: “base”,
“startHours”: 6,
“endHours”: 10,
“name”: “8-Week Base Phase (TT + Criterium)”,
“description”: “Blocco Base 8 settimane con progressioni SFR, Sweetspot e Z2 con richiami neuromuscolari. Pattern 3/1, lunedì indoor (≤60′).”,
“workoutProgressions”: [
{
“title”: “SFR – Forza Resistente a bassa cadenza”,
“description”: “Costruisce coppia e resistenza muscolare con ripetute a bassa cadenza e intensità sotto soglia.”,
“progression”: [
“8 X (2m@70% + 2m@50%)”,
“6 X (3m@75% + 3m@50%)”,
“5 X (4m@80% + 3m@50%)”,
“1 X (45m@60%)”,
“5 X (5m@80% + 3m@50%)”,
“4 X (6m@80% + 3m@50%)”,
“3 X (8m@85% + 4m@50%)”,
“1 X (45m@60%)”
]
},
{
“title”: “Sweetspot – Tenuta prossima alla soglia”,
“description”: “Incrementa FTP e capacità di sostenere potenze elevate con lavoro 88–93% FTP.”,
“progression”: [
“4 X (2m@90% + 2m@50%)”,
“3 X (5m@90% + 3m@50%)”,
“3 X (7m@90% + 3m@50%)”,
“1 X (20m@70%)”,
“3 X (8m@92% + 3m@50%)”,
“3 X (10m@92% + 3m@50%)”,
“2 X (15m@92% + 4m@50%)”,
“1 X (20m@70%)”
]
},
{
“title”: “Z2 + richiami neuromuscolari”,
“description”: “Costruisce base aerobica con brevi richiami ad alta intensità per mantenere esplosività.”,
“progression”: [
“1 X (20m@70% + 1m@120% + 4m@50%)”,
“1 X (30m@70% + 1m@120% + 4m@50%)”,
“1 X (60m@70% + 1m@120% + 4m@50%)”,
“1 X (45m@65%)”,
“1 X (60m@70% + 2m@110% + 4m@50%)”,
“1 X (90m@70% + 2m@110% + 4m@50%)”,
“1 X (60m@70% + 3m@110% + 4m@50%)”,
“1 X (60m@65%)”
]
}
],
“secondaryStartingWorkIntensity”: 2,
“recoveryPattern”: “3/1”,
“trainingDays”: [
{
“day”: “mon”,
“type”: “indoor”
},
{
“day”: “tue”,
“type”: “outdoor”
},
{
“day”: “thu”,
“type”: “outdoor”
},
{
“day”: “sat”,
“type”: “outdoor”
}
],
“bestLongRideDay”: “sat”
}

Best regards,
Roberto

So one problem is your computer or something is converting quotes wrong (OR NOW I SEE IT IS OUR FORUM possibly).

We can add that to our tool to automatically fix bad quotes. I just went to claude and asked him to fix it. See the results

The second problem is I realize we don’t allow RPM targets so you would have to manually monitor your RPM targets. We could add this as well.

He fixed the quotes to " the ones straight up and down. See below. You can copy and paste this.

I had to use this to get it to show proper quotes in the forum
image

See below


{
  "blockType": "base",
  "startHours": 6,
  "endHours": 10,
  "name": "8-Week Base Phase (TT + Criterium)",
  "description": "Blocco Base 8 settimane con progressioni SFR, Sweetspot e Z2 con richiami neuromuscolari. Pattern 3/1, lunedì indoor (≤60′).",
  "workoutProgressions": [
    {
      "title": "SFR – Forza Resistente a bassa cadenza",
      "description": "Costruisce coppia e resistenza muscolare con ripetute a bassa cadenza e intensità sotto soglia.",
      "progression": [
        "8 X (2m@70% + 2m@50%)",
        "6 X (3m@75% + 3m@50%)",
        "5 X (4m@80% + 3m@50%)",
        "1 X (45m@60%)",
        "5 X (5m@80% + 3m@50%)",
        "4 X (6m@80% + 3m@50%)",
        "3 X (8m@85% + 4m@50%)",
        "1 X (45m@60%)"
      ]
    },
    {
      "title": "Sweetspot – Tenuta prossima alla soglia",
      "description": "Incrementa FTP e capacità di sostenere potenze elevate con lavoro 88–93% FTP.",
      "progression": [
        "4 X (2m@90% + 2m@50%)",
        "3 X (5m@90% + 3m@50%)",
        "3 X (7m@90% + 3m@50%)",
        "1 X (20m@70%)",
        "3 X (8m@92% + 3m@50%)",
        "3 X (10m@92% + 3m@50%)",
        "2 X (15m@92% + 4m@50%)",
        "1 X (20m@70%)"
      ]
    },
    {
      "title": "Z2 + richiami neuromuscolari",
      "description": "Costruisce base aerobica con brevi richiami ad alta intensità per mantenere esplosività.",
      "progression": [
        "1 X (20m@70% + 1m@120% + 4m@50%)",
        "1 X (30m@70% + 1m@120% + 4m@50%)",
        "1 X (60m@70% + 1m@120% + 4m@50%)",
        "1 X (45m@65%)",
        "1 X (60m@70% + 2m@110% + 4m@50%)",
        "1 X (90m@70% + 2m@110% + 4m@50%)",
        "1 X (60m@70% + 3m@110% + 4m@50%)",
        "1 X (60m@65%)"
      ]
    }
  ],
  "secondaryStartingWorkIntensity": 2,
  "recoveryPattern": "3/1",
  "trainingDays": [
    {
      "day": "mon",
      "type": "indoor"
    },
    {
      "day": "tue",
      "type": "outdoor"
    },
    {
      "day": "thu",
      "type": "outdoor"
    },
    {
      "day": "sat",
      "type": "outdoor"
    }
  ],
  "bestLongRideDay": "sat"
}

Yes Alex the " it’s a forum problem. :sweat_smile:

If you see in detail your image example week #1 there is not:

  • SFR: 8 X (2m@70% + 2m@50%)
  • Z2 with neuromuscolar: (20m@70% + 1m@120% + 4m@50%)

Ah yes, I forgot that the target RPMs are actually missing in the JSON. :wink:

Roberto

Ok, I was not sure what you meant by not working. Yes to meet people’s needs we will have to widen our supported interval definitions. Ours are fairly basic. I will review and see what we can do.

Oh my gosh… You are right the intervals are totally wrong… CJ has been drinking this weekend. We will get this fixed ASAP.

I created my first own json plan with “Claude”.

In your Youtube you mentioned on the 2nd slide, in the last sentence "…EXACT format of the attached json file…”.

My question is: where can I find the mentioned template / json file?

Yes I call it json file but I should call it schema file.

It seems it is not following the rules. A serious bug but you still can play with it but we should be doing an update Monday to fix this.

I created the plan with Claude. In the export result I had to fix one bracket error.

The import to TD worked without issues.

The TD result wasn’t perfect. It wasn’t exactely transformed from Claude to TD.
The Volume was reduced and the workout did match roughly 75%.

Probably it will be improved with next version from next.

For me it looks quite promising.

Cool, thanks so much. Yes we will make sure this works really well. Next week should be much better. We could build the chat communication right into TrainerDay. For now we just want to see how interesting this is. To me it is very interesting but you have to kind of know what you want to guild GPT/Claude… in the right direction.

I’m not seeing the “LLM Plan Builder” button on the web app. Any help?

Looks like it was taken down.

Dave

1 Like

Sorry this bug was too big so my developer temporarily removed it)

Fixed. Did not add the RPM targets yet. Please give us any more feedback.

Thanks, Alex! I’ll run some tests over the next few days.

1 Like

Seems the Z2 workouts still don’t follow the rules

Z2 + richiami neuromuscolar. We will fix that ASAP too and see if we can’t get cadence added some how.

Good morning Alex. I’m trying several ways but I can’t import the Json file. It always gives an error.

Did you attach the file and give instructions to ChatGPT or other? This is not the right format.

It should look more like below

{
  "blockType": "base",
  "startHours": 6,
  "endHours": 10,
  "name": "8-Week Base Phase (TT + Criterium)",
  "description": "Blocco Base 8 settimane con progressioni SFR, Sweetspot e Z2 con richiami neuromuscolari. Pattern 3/1, lunedì indoor (≤60′).",
  "workoutProgressions": [
    {
      "title": "SFR – Forza Resistente a bassa cadenza",
      "description": "Costruisce coppia e resistenza muscolare con ripetute a bassa cadenza e intensità sotto soglia.",
      "progression": [
        "8 X (2m@70% + 2m@50%)",
        "6 X (3m@75% + 3m@50%)",
        "5 X (4m@80% + 3m@50%)",
        "1 X (45m@60%)",
        "5 X (5m@80% + 3m@50%)",
        "4 X (6m@80% + 3m@50%)",
        "3 X (8m@85% + 4m@50%)",
        "1 X (45m@60%)"
      ]
    },
    {
      "title": "Sweetspot – Tenuta prossima alla soglia",
      "description": "Incrementa FTP e capacità di sostenere potenze elevate con lavoro 88–93% FTP.",
      "progression": [
        "4 X (2m@90% + 2m@50%)",
        "3 X (5m@90% + 3m@50%)",
        "3 X (7m@90% + 3m@50%)",
        "1 X (20m@70%)",
        "3 X (8m@92% + 3m@50%)",
        "3 X (10m@92% + 3m@50%)",
        "2 X (15m@92% + 4m@50%)",
        "1 X (20m@70%)"
      ]
    },
    {
      "title": "Z2 + richiami neuromuscolari",
      "description": "Costruisce base aerobica con brevi richiami ad alta intensità per mantenere esplosività.",
      "progression": [
        "1 X (20m@70% + 1m@120% + 4m@50%)",
        "1 X (30m@70% + 1m@120% + 4m@50%)",
        "1 X (60m@70% + 1m@120% + 4m@50%)",
        "1 X (45m@65%)",
        "1 X (60m@70% + 2m@110% + 4m@50%)",
        "1 X (90m@70% + 2m@110% + 4m@50%)",
        "1 X (60m@70% + 3m@110% + 4m@50%)",
        "1 X (60m@65%)"
      ]
    }
  ],
  "secondaryStartingWorkIntensity": 2,
  "recoveryPattern": "3/1",
  "trainingDays": [
    {
      "day": "mon",
      "type": "indoor"
    },
    {
      "day": "tue",
      "type": "outdoor"
    },
    {
      "day": "thu",
      "type": "outdoor"
    },
    {
      "day": "sat",
      "type": "outdoor"
    }
  ],
  "bestLongRideDay": "sat"
}