Faits :
A.
Par deux décisions séparées des 15 mai et 20 juillet 2020, l'Office de l'assurance-invalidité pour le canton de Vaud (ci-après: l'office AI) a octroyé à A._ une rente entière d'invalidité du 1 er août 2013 au 30 novembre 2018, puis une demi-rente dès le 1 er décembre 2018.
B.
L'assurée a déféré ces décisions à la Cour des assurances sociales du Tribunal cantonal du canton de Vaud, qui a joint les causes. Parmi d'autres mesures, le Tribunal cantonal a notifié à l'assurée le 3 mai 2021, pour information, les "deux courriers de déterminations et une copie du rapport SMR déposés par la partie intimée le 30 avril 2021 (sic) ". Par jugement du 10 mai 2021, le Tribunal cantonal a rejeté les recours et confirmé les décisions des 15 mai et 20 juillet 2020.
C.
A._ forme un recours en matière de droit public contre cet arrêt dont elle demande l'annulation. Elle conclut en substance à l'octroi de trois quarts de rente de l'assurance-invalidité dès le 1er décembre 2018. Subsidiairement, elle demande le renvoi de la cause à l'autorité précédente pour instruction complémentaire.
Aucun échange d'écritures n'a été ordonné.

Considérant en droit :
1.
Le recours en matière de droit public peut être formé pour violation du droit, tel qu'il est délimité par les art. 95 et 96 LTF. Le Tribunal fédéral applique le droit d'office (art. 106 al. 1 LTF), n'étant limité ni par les arguments de la partie recourante, ni par la motivation de l'autorité précédente. Le Tribunal fédéral n'examine en principe que les griefs invoqués, compte tenu de l'exigence de motivation prévue à l'art. 42 al. 2 LTF, et ne peut aller au-delà des conclusions des parties (art. 107 al. 1 LTF). Il fonde son raisonnement sur les faits retenus par l'autorité précédente (art. 105 al. 1 LTF), sauf s'ils ont été établis de façon manifestement inexacte ou en violation du droit au sens de l'art. 95 LTF (art. 105 al. 2 LTF). La partie recourante qui entend s'écarter des faits constatés doit expliquer de manière circonstanciée en quoi les conditions de l'art. 105 al. 2 LTF sont réalisées, sinon un état de fait divergent ne peut être pris en considération (art. 97 al. 1 LTF).
2.
Dans un premier grief, la recourante reproche à la juridiction cantonale d'avoir violé son droit d'être entendue (art. 29 al. 2 Cst. et 6 CEDH) en la privant de l'opportunité de se prononcer sur l'écriture de l'office AI du 30 avril 2021. Elle relève qu'elle avait d'ailleurs déposé spontanément une "surduplique" le 11 mai 2021, soit moins de dix jours après avoir pris connaissance de cette écriture.
3.
3.1. Conformément aux art. 29 al. 2 Cst. et 6 CEDH, les parties ont le droit d'être entendues. Compris comme l'un des aspects de la notion générale de procès équitable, le droit d'être entendu comprend en particulier le droit, pour une partie à un procès, de prendre connaissance de toute argumentation présentée au tribunal et de se déterminer à son propos, que celle-ci contienne ou non de nouveaux éléments de fait ou de droit, et qu'elle soit ou non concrètement susceptible d'influer sur le jugement à rendre. Il appartient en effet aux parties, et non au juge, de décider si une prise de position ou une pièce nouvellement versée au dossier contient des éléments déterminants qui appellent des observations de leur part. Toute prise de position ou pièce nouvelle versée au dossier doit dès lors être communiquée aux parties pour leur permettre de décider si elles veulent ou non faire usage de leur faculté de se déterminer. Le droit de répliquer n'impose pas à l'autorité judiciaire l'obligation de fixer un délai à la partie pour déposer d'éventuelles observations. Elle doit seulement lui laisser un laps de temps suffisant, entre la remise des documents et le prononcé de sa décision, pour qu'elle ait la possibilité de déposer des observations si elle l'estime nécessaire (<ref-ruling> consid. 3.4.1 et les références).
On peut attendre de l'avocat à qui une détermination ou une pièce est envoyée pour information qu'il connaisse la pratique selon laquelle, s'il entend prendre position, il le fasse directement ou demande à l'autorité de lui fixer un délai pour ce faire; sinon, il est réputé avoir renoncé à se prononcer (<ref-ruling> consid. 2.2 et les références). Pour que le droit de réplique soit garanti, il faut toutefois que le tribunal laisse un laps de temps suffisant à la partie concernée, entre la remise de la prise de position ou des pièces nouvelles et le prononcé de sa décision, pour qu'elle ait la possibilité de déposer des observations si elle l'estime nécessaire à la défense de ses intérêts (<ref-ruling> consid. 4.1.1). A cet égard, le Tribunal fédéral considère qu'un délai inférieur à dix jours ne suffit pas à garantir l'exercice du droit de répliquer, tandis qu'un délai supérieur à vingt jours permet, en l'absence de réaction, d'inférer qu'il a été renoncé au droit de répliquer (arrêt 1C_661/2020 du 15 avril 2021 consid. 2.2 et les références). En d'autres termes, une autorité ne peut considérer, après un délai de moins de dix jours depuis la communication d'une détermination à une partie, que celle-ci a renoncé à répliquer et rendre sa décision (arrêt 2C_539/2020 du 28 décembre 2020 consid. 3.1 et la référence).
3.2. Dans le cas particulier, la juridiction cantonale a notifié à la recourante, par courrier daté du lundi 3 mai 2021, une copie de la détermination de l'office AI du 30 avril 2021. Le mandataire de la recourante affirme avoir reçu ce courrier le jeudi 6 mai 2021. Le Tribunal fédéral n'a aucune raison de mettre en doute cette affirmation. Or la juridiction cantonale a rendu son arrêt le 10 mai 2021, de sorte qu'elle n'a pas été en mesure de prendre en considération l'écriture déposée par la recourante - le 11 mai 2021 - dans le délai de dix jours tenu pour usuel par la jurisprudence pour faire valoir son droit d'être entendu. Il s'ensuit que le droit d'être entendue de la recourante a été violé.
3.3. Le droit d'être entendu est une garantie de nature formelle, dont la violation entraîne en principe l'annulation de la décision attaquée, indépendamment des chances de succès du recours sur le fond (<ref-ruling> consid. 3.1 et les références). Selon la jurisprudence, sa violation peut cependant être réparée lorsque la partie lésée a la possibilité de s'exprimer devant une autorité de recours jouissant d'un pouvoir d'examen complet en fait et en droit (<ref-ruling> consid. 4.4 et les références). Lorsque la violation du droit d'être entendu porte sur une question juridique, le Tribunal fédéral peut la réparer s'il dispose du même pouvoir d'examen que l'instance précédente (arrêts 1C_302/2018 du 14 mars 2019 consid. 2.1 et les références).
En l'espèce, une réparation de la violation du droit d'être entendue de la recourante dans le cadre de la procédure fédérale n'entre pas en considération car les questions débattues en instance cantonale ne se limitent pas à une question juridique. Le Tribunal fédéral ne dispose dès lors pas du même pouvoir d'examen que l'autorité précédente (consid. 1 supra).
4.
Il s'ensuit que le recours doit être admis et l'arrêt attaqué annulé, sans qu'il soit nécessaire d'examiner les autres griefs soulevés par la recourante. Étant donné l'issue de la procédure, qui relève de motifs formels, il convient de renoncer à un échange d'écritures (art. 102 al. 1 LTF; arrêt 9C_413/2019 du 4 décembre 2019 consid. 5, non publié in <ref-ruling>).
Vu les circonstances, il n'est pas perçu de frais judiciaires devant le Tribunal fédéral (art. 66 al. 1 LTF). La recourante, qui obtient gain de cause avec l'assistance d'un avocat, a droit à des dépens à la charge de l'office AI (art. 68 al. 1 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis. L'arrêt du Tribunal cantonal du canton de Vaud, Cour des assurances sociales, du 10 mai 2021 est annulé et la cause est renvoyée à l'autorité précédente pour qu'elle statue à nouveau après avoir donné l'occasion à la recourante d'exercer son droit d'être entendue.
2.
Il n'est pas perçu de frais judiciaires.
3.
L'intimé versera à la recourante la somme de 2800 fr. à titre de dépens pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué aux parties, au Tribunal cantonal du canton de Vaud, Cour des assurances sociales, et à l'Office fédéral des assurances sociales.
Lucerne, le 11 août 2021
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président : Parrino
Le Greffier : Bleicker