Moved all extension methods into extension blocks (#1155)

This commit is contained in:
Thorsten Sommer authored and GitHub committed 2026-11-04 10:46:18 +01:00
1 parent acc7d09fa2
commit c0a75f39ac
138 files changed
+5884 -4954

No files matched your search

@@ -4,23 +4,26 @@ public static class AudienceAgeGroupExtensions
{
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(AudienceAgeGroupExtensions).Namespace, nameof(AudienceAgeGroupExtensions));
public static string Name(this AudienceAgeGroup ageGroup) => ageGroup switch
extension(AudienceAgeGroup ageGroup)
{
AudienceAgeGroup.UNSPECIFIED => TB("Unspecified age group"),
AudienceAgeGroup.CHILDREN => TB("Children"),
AudienceAgeGroup.TEENAGERS => TB("Teenagers"),
AudienceAgeGroup.ADULTS => TB("Adults"),
public string Name() => ageGroup switch
{
AudienceAgeGroup.UNSPECIFIED => TB("Unspecified age group"),
AudienceAgeGroup.CHILDREN => TB("Children"),
AudienceAgeGroup.TEENAGERS => TB("Teenagers"),
AudienceAgeGroup.ADULTS => TB("Adults"),
_ => TB("Unspecified age group"),
};
_ => TB("Unspecified age group"),
};
public static string Prompt(this AudienceAgeGroup ageGroup) => ageGroup switch
{
AudienceAgeGroup.UNSPECIFIED => "Do not tailor the text to a specific age group.",
AudienceAgeGroup.CHILDREN => "Use simple, concrete language with short sentences and minimal jargon.",
AudienceAgeGroup.TEENAGERS => "Use clear, approachable language with relatable examples and limited jargon.",
AudienceAgeGroup.ADULTS => "Use adult-appropriate language with clear structure and direct explanations.",
public string Prompt() => ageGroup switch
{
AudienceAgeGroup.UNSPECIFIED => "Do not tailor the text to a specific age group.",
AudienceAgeGroup.CHILDREN => "Use simple, concrete language with short sentences and minimal jargon.",
AudienceAgeGroup.TEENAGERS => "Use clear, approachable language with relatable examples and limited jargon.",
AudienceAgeGroup.ADULTS => "Use adult-appropriate language with clear structure and direct explanations.",
_ => "Do not tailor the text to a specific age group.",
};
_ => "Do not tailor the text to a specific age group.",
};
}
}
@@ -4,25 +4,28 @@ public static class AudienceExpertiseExtensions
{
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(AudienceExpertiseExtensions).Namespace, nameof(AudienceExpertiseExtensions));
public static string Name(this AudienceExpertise expertise) => expertise switch
extension(AudienceExpertise expertise)
{
AudienceExpertise.UNSPECIFIED => TB("Unspecified expertise"),
AudienceExpertise.NON_EXPERTS => TB("No expertise"),
AudienceExpertise.BASIC => TB("Basic expertise"),
AudienceExpertise.INTERMEDIATE => TB("Intermediate expertise"),
AudienceExpertise.EXPERTS => TB("Experts"),
public string Name() => expertise switch
{
AudienceExpertise.UNSPECIFIED => TB("Unspecified expertise"),
AudienceExpertise.NON_EXPERTS => TB("No expertise"),
AudienceExpertise.BASIC => TB("Basic expertise"),
AudienceExpertise.INTERMEDIATE => TB("Intermediate expertise"),
AudienceExpertise.EXPERTS => TB("Experts"),
_ => TB("Unspecified expertise"),
};
_ => TB("Unspecified expertise"),
};
public static string Prompt(this AudienceExpertise expertise) => expertise switch
{
AudienceExpertise.UNSPECIFIED => "Do not tailor the text to a specific expertise level.",
AudienceExpertise.NON_EXPERTS => "Avoid jargon and explain specialized concepts plainly.",
AudienceExpertise.BASIC => "Use simple terminology and briefly explain important technical terms.",
AudienceExpertise.INTERMEDIATE => "Assume some familiarity with the topic, but still explain important details clearly.",
AudienceExpertise.EXPERTS => "Assume deep familiarity with the topic and use precise domain-specific terminology.",
public string Prompt() => expertise switch
{
AudienceExpertise.UNSPECIFIED => "Do not tailor the text to a specific expertise level.",
AudienceExpertise.NON_EXPERTS => "Avoid jargon and explain specialized concepts plainly.",
AudienceExpertise.BASIC => "Use simple terminology and briefly explain important technical terms.",
AudienceExpertise.INTERMEDIATE => "Assume some familiarity with the topic, but still explain important details clearly.",
AudienceExpertise.EXPERTS => "Assume deep familiarity with the topic and use precise domain-specific terminology.",
_ => "Do not tailor the text to a specific expertise level.",
};
_ => "Do not tailor the text to a specific expertise level.",
};
}
}
@@ -4,29 +4,32 @@ public static class AudienceOrganizationalLevelExtensions
{
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(AudienceOrganizationalLevelExtensions).Namespace, nameof(AudienceOrganizationalLevelExtensions));
public static string Name(this AudienceOrganizationalLevel level) => level switch
extension(AudienceOrganizationalLevel level)
{
AudienceOrganizationalLevel.UNSPECIFIED => TB("Unspecified organizational level"),
AudienceOrganizationalLevel.TRAINEES => TB("Trainees"),
AudienceOrganizationalLevel.INDIVIDUAL_CONTRIBUTORS => TB("Individual contributors"),
AudienceOrganizationalLevel.TEAM_LEADS => TB("Team leads"),
AudienceOrganizationalLevel.MANAGERS => TB("Managers"),
AudienceOrganizationalLevel.EXECUTIVES => TB("Executives"),
AudienceOrganizationalLevel.BOARD_MEMBERS => TB("Board members"),
public string Name() => level switch
{
AudienceOrganizationalLevel.UNSPECIFIED => TB("Unspecified organizational level"),
AudienceOrganizationalLevel.TRAINEES => TB("Trainees"),
AudienceOrganizationalLevel.INDIVIDUAL_CONTRIBUTORS => TB("Individual contributors"),
AudienceOrganizationalLevel.TEAM_LEADS => TB("Team leads"),
AudienceOrganizationalLevel.MANAGERS => TB("Managers"),
AudienceOrganizationalLevel.EXECUTIVES => TB("Executives"),
AudienceOrganizationalLevel.BOARD_MEMBERS => TB("Board members"),
_ => TB("Unspecified organizational level"),
};
_ => TB("Unspecified organizational level"),
};
public static string Prompt(this AudienceOrganizationalLevel level) => level switch
{
AudienceOrganizationalLevel.UNSPECIFIED => "Do not tailor the text to a specific organizational level.",
AudienceOrganizationalLevel.TRAINEES => "Keep the content supportive and introductory. Explain context and avoid assuming prior organizational knowledge.",
AudienceOrganizationalLevel.INDIVIDUAL_CONTRIBUTORS => "Focus on execution, clarity, responsibilities, and practical next steps.",
AudienceOrganizationalLevel.TEAM_LEADS => "Focus on coordination, tradeoffs, risks, and concrete actions for a small team.",
AudienceOrganizationalLevel.MANAGERS => "Focus on planning, priorities, outcomes, risks, and resource implications.",
AudienceOrganizationalLevel.EXECUTIVES => "Focus on strategy, business impact, risks, and the decisions required.",
AudienceOrganizationalLevel.BOARD_MEMBERS => "Provide a concise executive-level summary with governance, strategy, risk, and decision relevance.",
public string Prompt() => level switch
{
AudienceOrganizationalLevel.UNSPECIFIED => "Do not tailor the text to a specific organizational level.",
AudienceOrganizationalLevel.TRAINEES => "Keep the content supportive and introductory. Explain context and avoid assuming prior organizational knowledge.",
AudienceOrganizationalLevel.INDIVIDUAL_CONTRIBUTORS => "Focus on execution, clarity, responsibilities, and practical next steps.",
AudienceOrganizationalLevel.TEAM_LEADS => "Focus on coordination, tradeoffs, risks, and concrete actions for a small team.",
AudienceOrganizationalLevel.MANAGERS => "Focus on planning, priorities, outcomes, risks, and resource implications.",
AudienceOrganizationalLevel.EXECUTIVES => "Focus on strategy, business impact, risks, and the decisions required.",
AudienceOrganizationalLevel.BOARD_MEMBERS => "Provide a concise executive-level summary with governance, strategy, risk, and decision relevance.",
_ => "Do not tailor the text to a specific organizational level.",
};
_ => "Do not tailor the text to a specific organizational level.",
};
}
}
@@ -4,37 +4,40 @@ public static class AudienceProfileExtensions
{
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(AudienceProfileExtensions).Namespace, nameof(AudienceProfileExtensions));
public static string Name(this AudienceProfile profile) => profile switch
extension(AudienceProfile profile)
{
AudienceProfile.UNSPECIFIED => TB("Unspecified audience profile"),
AudienceProfile.STUDENTS => TB("Students"),
AudienceProfile.SCIENTISTS => TB("Scientists"),
AudienceProfile.LAWYERS => TB("Lawyers"),
AudienceProfile.INVESTORS => TB("Investors"),
AudienceProfile.ENGINEERS => TB("Engineers"),
AudienceProfile.SOFTWARE_DEVELOPERS => TB("Software developers"),
AudienceProfile.JOURNALISTS => TB("Journalists"),
AudienceProfile.HEALTHCARE_PROFESSIONALS => TB("Healthcare professionals"),
AudienceProfile.PUBLIC_OFFICIALS => TB("Public officials"),
AudienceProfile.BUSINESS_PROFESSIONALS => TB("Business professionals"),
public string Name() => profile switch
{
AudienceProfile.UNSPECIFIED => TB("Unspecified audience profile"),
AudienceProfile.STUDENTS => TB("Students"),
AudienceProfile.SCIENTISTS => TB("Scientists"),
AudienceProfile.LAWYERS => TB("Lawyers"),
AudienceProfile.INVESTORS => TB("Investors"),
AudienceProfile.ENGINEERS => TB("Engineers"),
AudienceProfile.SOFTWARE_DEVELOPERS => TB("Software developers"),
AudienceProfile.JOURNALISTS => TB("Journalists"),
AudienceProfile.HEALTHCARE_PROFESSIONALS => TB("Healthcare professionals"),
AudienceProfile.PUBLIC_OFFICIALS => TB("Public officials"),
AudienceProfile.BUSINESS_PROFESSIONALS => TB("Business professionals"),
_ => TB("Unspecified audience profile"),
};
_ => TB("Unspecified audience profile"),
};
public static string Prompt(this AudienceProfile profile) => profile switch
{
AudienceProfile.UNSPECIFIED => "Do not tailor the text to a specific audience profile.",
AudienceProfile.STUDENTS => "Write for students. Keep it structured, easy to study, and focused on key takeaways.",
AudienceProfile.SCIENTISTS => "Use precise, technical language. Structure the content logically and focus on methods, evidence, and results.",
AudienceProfile.LAWYERS => "Write with precise wording. Emphasize definitions, implications, compliance, and risks.",
AudienceProfile.INVESTORS => "Focus on market potential, business model, differentiation, traction, risks, and financial upside.",
AudienceProfile.ENGINEERS => "Be technically precise and practical. Focus on systems, constraints, implementation, and tradeoffs.",
AudienceProfile.SOFTWARE_DEVELOPERS => "Use concise technical language. Focus on architecture, implementation details, tradeoffs, and maintainability.",
AudienceProfile.JOURNALISTS => "Be clear, factual, and concise. Highlight the most newsworthy points and explain relevance plainly.",
AudienceProfile.HEALTHCARE_PROFESSIONALS => "Use accurate professional language. Emphasize outcomes, safety, evidence, and practical implications.",
AudienceProfile.PUBLIC_OFFICIALS => "Focus on public impact, feasibility, budget, compliance, risks, and implementation in a neutral institutional tone.",
AudienceProfile.BUSINESS_PROFESSIONALS => "Be clear, practical, and concise. Focus on business relevance, decisions, and next steps.",
public string Prompt() => profile switch
{
AudienceProfile.UNSPECIFIED => "Do not tailor the text to a specific audience profile.",
AudienceProfile.STUDENTS => "Write for students. Keep it structured, easy to study, and focused on key takeaways.",
AudienceProfile.SCIENTISTS => "Use precise, technical language. Structure the content logically and focus on methods, evidence, and results.",
AudienceProfile.LAWYERS => "Write with precise wording. Emphasize definitions, implications, compliance, and risks.",
AudienceProfile.INVESTORS => "Focus on market potential, business model, differentiation, traction, risks, and financial upside.",
AudienceProfile.ENGINEERS => "Be technically precise and practical. Focus on systems, constraints, implementation, and tradeoffs.",
AudienceProfile.SOFTWARE_DEVELOPERS => "Use concise technical language. Focus on architecture, implementation details, tradeoffs, and maintainability.",
AudienceProfile.JOURNALISTS => "Be clear, factual, and concise. Highlight the most newsworthy points and explain relevance plainly.",
AudienceProfile.HEALTHCARE_PROFESSIONALS => "Use accurate professional language. Emphasize outcomes, safety, evidence, and practical implications.",
AudienceProfile.PUBLIC_OFFICIALS => "Focus on public impact, feasibility, budget, compliance, risks, and implementation in a neutral institutional tone.",
AudienceProfile.BUSINESS_PROFESSIONALS => "Be clear, practical, and concise. Focus on business relevance, decisions, and next steps.",
_ => "Do not tailor the text to a specific audience profile.",
};
_ => "Do not tailor the text to a specific audience profile.",
};
}
}
@@ -4,53 +4,56 @@ public static class PresentationOccasionExtensions
{
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(PresentationOccasionExtensions).Namespace, nameof(PresentationOccasionExtensions));
public static string Name(this PresentationOccasion occasion) => occasion switch
{
PresentationOccasion.UNSPECIFIED => TB("Unspecified occasion"),
PresentationOccasion.TALK => TB("Talk"),
PresentationOccasion.KEYNOTE => TB("Keynote"),
PresentationOccasion.CONFERENCE_TALK => TB("Conference talk"),
PresentationOccasion.LECTURE => TB("Lecture"),
PresentationOccasion.TRAINING => TB("Training"),
PresentationOccasion.WORKSHOP => TB("Workshop of one day"),
PresentationOccasion.MULTI_DAY_WORKSHOP => TB("Workshop of several days"),
PresentationOccasion.THESIS_DEFENSE => TB("Defense of a thesis or dissertation"),
PresentationOccasion.RESEARCH_RESULTS => TB("Presentation of research results"),
PresentationOccasion.PROJECT_REPORT => TB("Project or status report"),
PresentationOccasion.MANAGEMENT_REPORT => TB("Report to management"),
PresentationOccasion.PITCH => TB("Pitch"),
PresentationOccasion.PRODUCT_PRESENTATION => TB("Product presentation"),
PresentationOccasion.KICK_OFF => TB("Kick-off"),
PresentationOccasion.TEAM_MEETING => TB("Team meeting"),
PresentationOccasion.OTHER => TB("Other occasion"),
_ => TB("Unspecified occasion"),
};
/// <summary>
/// Tells the model what the occasion means for the structure of the presentation.
/// </summary>
/// <param name="occasion">The occasion.</param>
/// <param name="customOccasion">The occasion the user described, for OTHER.</param>
public static string Prompt(this PresentationOccasion occasion, string customOccasion) => occasion switch
extension(PresentationOccasion occasion)
{
PresentationOccasion.TALK => "The presentation accompanies a talk. Structure it for a speaker who talks the audience through it.",
PresentationOccasion.KEYNOTE => "The presentation accompanies a keynote. Favor few words per slide, strong key messages, and a story which carries the audience.",
PresentationOccasion.CONFERENCE_TALK => "The presentation accompanies a talk at a conference. Keep to the essentials of a short time slot, and end with the key messages and room for questions.",
PresentationOccasion.LECTURE => "The presentation accompanies a lecture. Teach step by step, with examples, and where it suits, end chapters with an interim summary or with room for questions.",
PresentationOccasion.TRAINING => "The presentation accompanies a training. Teach practical skills step by step, with examples and exercises where the content offers them.",
PresentationOccasion.WORKSHOP => "The presentation accompanies a workshop of one day. Plan for interaction, e.g., exercises, group work, or discussions, and for the breaks the schedule of the content has.",
PresentationOccasion.MULTI_DAY_WORKSHOP => "The presentation accompanies a workshop of several days. Plan for interaction, mark where a day ends and the next one starts, and look back at the start of each day, following the schedule of the content.",
PresentationOccasion.THESIS_DEFENSE => "The presentation defends a thesis or a dissertation before a committee. Present the research questions, the method, the results, and the contribution precisely, and anticipate critical questions.",
PresentationOccasion.RESEARCH_RESULTS => "The presentation presents research results. Present the questions, the method, the results, and their meaning precisely and comprehensibly.",
PresentationOccasion.PROJECT_REPORT => "The presentation reports on a project. Present the status, the progress, the problems, and the next steps clearly.",
PresentationOccasion.MANAGEMENT_REPORT => "The presentation reports to management and may prepare a decision. Lead with the key messages, keep details short, and state clearly what is to be decided.",
PresentationOccasion.PITCH => "The presentation pitches an idea, a product, or an offer. Lead with the benefit for the audience, and end with a clear call to action.",
PresentationOccasion.PRODUCT_PRESENTATION => "The presentation presents a product. Show what it does and what it brings the audience, with examples.",
PresentationOccasion.KICK_OFF => "The presentation opens a project at its kick-off. Present the goals, the team, the plan, and how the work is organized.",
PresentationOccasion.TEAM_MEETING => "The presentation serves a team meeting. Keep it short and practical, with clear points and next steps.",
PresentationOccasion.OTHER => $"The presentation is for this occasion: {customOccasion}. Structure it accordingly.",
public string Name() => occasion switch
{
PresentationOccasion.UNSPECIFIED => TB("Unspecified occasion"),
PresentationOccasion.TALK => TB("Talk"),
PresentationOccasion.KEYNOTE => TB("Keynote"),
PresentationOccasion.CONFERENCE_TALK => TB("Conference talk"),
PresentationOccasion.LECTURE => TB("Lecture"),
PresentationOccasion.TRAINING => TB("Training"),
PresentationOccasion.WORKSHOP => TB("Workshop of one day"),
PresentationOccasion.MULTI_DAY_WORKSHOP => TB("Workshop of several days"),
PresentationOccasion.THESIS_DEFENSE => TB("Defense of a thesis or dissertation"),
PresentationOccasion.RESEARCH_RESULTS => TB("Presentation of research results"),
PresentationOccasion.PROJECT_REPORT => TB("Project or status report"),
PresentationOccasion.MANAGEMENT_REPORT => TB("Report to management"),
PresentationOccasion.PITCH => TB("Pitch"),
PresentationOccasion.PRODUCT_PRESENTATION => TB("Product presentation"),
PresentationOccasion.KICK_OFF => TB("Kick-off"),
PresentationOccasion.TEAM_MEETING => TB("Team meeting"),
PresentationOccasion.OTHER => TB("Other occasion"),
_ => "No particular occasion is given. Structure the presentation by its content.",
};
_ => TB("Unspecified occasion"),
};
/// <summary>
/// Tells the model what the occasion means for the structure of the presentation.
/// </summary>
/// <param name="customOccasion">The occasion the user described, for OTHER.</param>
public string Prompt(string customOccasion) => occasion switch
{
PresentationOccasion.TALK => "The presentation accompanies a talk. Structure it for a speaker who talks the audience through it.",
PresentationOccasion.KEYNOTE => "The presentation accompanies a keynote. Favor few words per slide, strong key messages, and a story which carries the audience.",
PresentationOccasion.CONFERENCE_TALK => "The presentation accompanies a talk at a conference. Keep to the essentials of a short time slot, and end with the key messages and room for questions.",
PresentationOccasion.LECTURE => "The presentation accompanies a lecture. Teach step by step, with examples, and where it suits, end chapters with an interim summary or with room for questions.",
PresentationOccasion.TRAINING => "The presentation accompanies a training. Teach practical skills step by step, with examples and exercises where the content offers them.",
PresentationOccasion.WORKSHOP => "The presentation accompanies a workshop of one day. Plan for interaction, e.g., exercises, group work, or discussions, and for the breaks the schedule of the content has.",
PresentationOccasion.MULTI_DAY_WORKSHOP => "The presentation accompanies a workshop of several days. Plan for interaction, mark where a day ends and the next one starts, and look back at the start of each day, following the schedule of the content.",
PresentationOccasion.THESIS_DEFENSE => "The presentation defends a thesis or a dissertation before a committee. Present the research questions, the method, the results, and the contribution precisely, and anticipate critical questions.",
PresentationOccasion.RESEARCH_RESULTS => "The presentation presents research results. Present the questions, the method, the results, and their meaning precisely and comprehensibly.",
PresentationOccasion.PROJECT_REPORT => "The presentation reports on a project. Present the status, the progress, the problems, and the next steps clearly.",
PresentationOccasion.MANAGEMENT_REPORT => "The presentation reports to management and may prepare a decision. Lead with the key messages, keep details short, and state clearly what is to be decided.",
PresentationOccasion.PITCH => "The presentation pitches an idea, a product, or an offer. Lead with the benefit for the audience, and end with a clear call to action.",
PresentationOccasion.PRODUCT_PRESENTATION => "The presentation presents a product. Show what it does and what it brings the audience, with examples.",
PresentationOccasion.KICK_OFF => "The presentation opens a project at its kick-off. Present the goals, the team, the plan, and how the work is organized.",
PresentationOccasion.TEAM_MEETING => "The presentation serves a team meeting. Keep it short and practical, with clear points and next steps.",
PresentationOccasion.OTHER => $"The presentation is for this occasion: {customOccasion}. Structure it accordingly.",
_ => "No particular occasion is given. Structure the presentation by its content.",
};
}
}
@@ -11,20 +11,23 @@ internal static class TemplateSlideExtensions
/// </summary>
private const int MAX_SLIDE_TITLE_CHARACTERS = 60;
/// <summary>
/// How the forms name a slide of the template: by its number and its title, and what is special about it.
/// </summary>
/// <remarks>
/// The title tells the slides apart at a glance, since a template rarely gives its slides more
/// than a title. A long one is cut, so that the label stays on one line.
/// </remarks>
public static string Label(this TemplateSlide slide)
extension(TemplateSlide slide)
{
var title = slide.Title.Length > MAX_SLIDE_TITLE_CHARACTERS ? $"{slide.Title[..MAX_SLIDE_TITLE_CHARACTERS].TrimEnd()}…" : slide.Title;
var label = title.Length > 0 ? string.Format(TB("Slide {0}: {1}"), slide.Number, title) : string.Format(TB("Slide {0}"), slide.Number);
if (slide.IsHidden)
label = $"{label} ({TB("hidden")})";
/// <summary>
/// How the forms name a slide of the template: by its number and its title, and what is special about it.
/// </summary>
/// <remarks>
/// The title tells the slides apart at a glance, since a template rarely gives its slides more
/// than a title. A long one is cut, so that the label stays on one line.
/// </remarks>
public string Label()
{
var title = slide.Title.Length > MAX_SLIDE_TITLE_CHARACTERS ? $"{slide.Title[..MAX_SLIDE_TITLE_CHARACTERS].TrimEnd()}…" : slide.Title;
var label = title.Length > 0 ? string.Format(TB("Slide {0}: {1}"), slide.Number, title) : string.Format(TB("Slide {0}"), slide.Number);
if (slide.IsHidden)
label = $"{label} ({TB("hidden")})";
return label;
return label;
}
}
}
@@ -6,12 +6,15 @@ internal static class TemplateSlideUseExtensions
{
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(TemplateSlideUseExtensions).Namespace, nameof(TemplateSlideUseExtensions));
public static string Name(this TemplateSlideUse use) => use switch
extension(TemplateSlideUse use)
{
TemplateSlideUse.OMIT => TB("Leave out"),
TemplateSlideUse.KEEP => TB("Keep unchanged"),
TemplateSlideUse.EDIT => TB("Let the LLM edit it"),
public string Name() => use switch
{
TemplateSlideUse.OMIT => TB("Leave out"),
TemplateSlideUse.KEEP => TB("Keep unchanged"),
TemplateSlideUse.EDIT => TB("Let the LLM edit it"),
_ => TB("Leave out"),
};
_ => TB("Leave out"),
};
}
}