1. **Chain-of-Thought (CoT) Prompting
- 문제를 단계별로 해결하도록 유도한다.
- 교정 과정을 단계별로 설명하도록 지시하여 모델이 체계적으로 오류를 식별하고 수정할 수 있도록 한다.

text = "STT-generated text"
prompt = f"""
To correct pronunciation errors in the following text,
follow these steps and **explain the results in detail at each step:
1. Break the input text into individual words and list each word.
2. Examine each word to identify potential pronunciation errors and explain why the word is considered an error.
3. Correct the identified errors, providing the corrected word and a clear explanation for the correction.
4. Use the corrected words to reconstruct the text and provide the final corrected sentence.
5. Summarize the correction process and the final results.
Input text: "{text}"
"""
2. **Self-Consistency Prompting
- 여러 번의 추론 경로를 샘플링하여 다양한 논리적 경로를 생성한다. 각 추론 경로의 결과를 종합하여 가장 일관성 있는 최종 답을 선택한다.

text = " text wtih sevarl tpyo errors."
prompt = f"""
You are tasked with correcting typos in the following text.
To ensure accuracy, please **generate multiple reasoning paths**, explicitly explain each step,
and provide a corrected version for each path.
Steps to follow:
1. Split the text into individual words.
2. Identify and correct any spelling or grammar errors for each word. Provide reasoning for why the correction is appropriate.
3. Reconstruct the text using the corrected words.
4. After generating multiple corrections, summarize the most consistent and accurate correction among all paths.
Input text: "{text}"
"""
"""
**Self-consistency Process**:
- Process the transcript multiple times (at least 3 iterations) independently to ensure consistent and accurate corrections.
- After completing multiple iterations, compare the outputs to identify consistent patterns and corrections.
- Select the corrections that best align with the original meaning, avoid over-corrections, and ensure clarity without changing the intended message.
"""
3. **Tree-of-Thought (ToT) Prompting
- 여러 계획(Plan)을 생성하고, 이를 평가하여 최적의 계획을 선택한 뒤, 문제를 해결하는 과정을 보여주는 기법이다.

text = "a txt wtih sevarl tpyo errors."
prompt = f"""
You are tasked with correcting pronunciation-related errors in the following text.
Use the Tree-of-Thoughts (ToT) approach to ensure accuracy and consistency.
Follow these steps:
1. **Generate Multiple Correction Plans**:
- Propose at least three different plans for correcting the errors in the input text.
- Each plan should include:
- Identification of potential pronunciation-related errors in the text.
- A detailed explanation of why each word is considered incorrect.
- Suggested corrections for each identified error.
- Reconstructed text after applying the corrections.
2. **Evaluate Each Plan**:
- For each plan, analyze the consistency, accuracy, and overall quality of the corrections.
- Identify which plan provides the most logical and accurate corrections for the input text.
3. **Vote and Select the Best Plan**:
- Perform a majority vote among all generated plans to select the most effective one.
- The selected plan should have the most consistent and accurate results.
4. **Provide the Final Corrected Text**:
- Use the corrections from the selected plan to produce the final corrected text.
- Summarize the reasoning behind why the selected plan was chosen.
Input text: "{text}"
"""
4. Program-of-thought(PoT) Prompting
- 조건문(If-Else), 반복문(Loops), 함수 호출(Function Calls) 등의 논리적 사고 방식을 모델이 따라가도록 유도한다.
- 문제를 프로그래밍적 사고로 분석하고 해결하도록 한다.

text = "Thsi is an exmaple of a txt wtih sevarl tpyo errors."
prompt = f"""
You are tasked with correcting pronunciation-based typos in the following text.
Use a **programmatic approach** to achieve this, following these steps:
1. Break the input text into individual words.
2. For each word, compare it with a predefined dictionary of valid words and calculate its similarity based on pronunciation. Use phonetic similarity or string comparison methods (e.g., Levenshtein distance or Soundex algorithm).
3. Replace each word with the closest matching valid word from the dictionary, provided the similarity score exceeds a defined threshold.
4. If no valid match is found for a word, leave it unchanged.
5. Reconstruct the corrected text using the updated words.
6. Return the final corrected text.
Input text: "{text}"
"""
+ few-shot
...etc