Repository: ulab-uiuc/research-town

Issue:
[FEAT]: modify the prompt format into openai format in config yaml
### Description

_No response_

### Additional Information

_No response_

Discussion:
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc) Report
Attention: Patch coverage is `93.51852%` with `7 lines` in your changes missing coverage. Please review.
> Project coverage is 90.44%. Comparing base [(`f15f4c1`)](https://app.codecov.io/gh/ulab-uiuc/research-town/commit/f15f4c141ca0e7844d1d9fd02eff8366689aab8f?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc) to head [(`66fda75`)](https://app.codecov.io/gh/ulab-uiuc/research-town/commit/66fda75905d23588673a567ab68a9d3648eea8bc?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc).

```diff
@@            Coverage Diff             @@
##             main     #434      +/-   ##
==========================================
+ Coverage   90.23%   90.44%   +0.20%     
==========================================
  Files          55       56       +1     
  Lines        2335     2365      +30     
==========================================
+ Hits         2107     2139      +32     
+ Misses        228      226       -2     
```

| [Files](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc) | Coverage Δ | |
|---|---|---|
| [research\_town/agents/agent\_base.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=research_town%2Fagents%2Fagent_base.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-cmVzZWFyY2hfdG93bi9hZ2VudHMvYWdlbnRfYmFzZS5weQ==) | `98.52% <ø> (ø)` | |
| [research\_town/configs/config.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=research_town%2Fconfigs%2Fconfig.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-cmVzZWFyY2hfdG93bi9jb25maWdzL2NvbmZpZy5weQ==) | `100.00% <100.00%> (+1.06%)` | :arrow_up: |
| [research\_town/utils/agent\_prompter.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=research_town%2Futils%2Fagent_prompter.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-cmVzZWFyY2hfdG93bi91dGlscy9hZ2VudF9wcm9tcHRlci5weQ==) | `100.00% <100.00%> (ø)` | |
| [research\_town/utils/eval\_prompter.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=research_town%2Futils%2Feval_prompter.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-cmVzZWFyY2hfdG93bi91dGlscy9ldmFsX3Byb21wdGVyLnB5) | `100.00% <100.00%> (ø)` | |
| [research\_town/utils/model\_prompting.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=research_town%2Futils%2Fmodel_prompting.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-cmVzZWFyY2hfdG93bi91dGlscy9tb2RlbF9wcm9tcHRpbmcucHk=) | `100.00% <100.00%> (ø)` | |
| [research\_town/utils/prompt\_constructor.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=research_town%2Futils%2Fprompt_constructor.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-cmVzZWFyY2hfdG93bi91dGlscy9wcm9tcHRfY29uc3RydWN0b3IucHk=) | `100.00% <100.00%> (ø)` | |
| [tests/configs/test\_configs.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=tests%2Fconfigs%2Ftest_configs.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-dGVzdHMvY29uZmlncy90ZXN0X2NvbmZpZ3MucHk=) | `100.00% <100.00%> (ø)` | |
| [tests/utils/test\_model\_prompting.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=tests%2Futils%2Ftest_model_prompting.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-dGVzdHMvdXRpbHMvdGVzdF9tb2RlbF9wcm9tcHRpbmcucHk=) | `100.00% <100.00%> (ø)` | |
| [tests/mocks/mocking\_func.py](https://app.codecov.io/gh/ulab-uiuc/research-town/pull/434?src=pr&el=tree&filepath=tests%2Fmocks%2Fmocking_func.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=ulab-uiuc#diff-dGVzdHMvbW9ja3MvbW9ja2luZ19mdW5jLnB5) | `71.92% <68.18%> (+0.74%)` | :arrow_up: |


Patch:
diff --git a/configs/default_config.yaml b/configs/default_config.yaml
index 5c2383d..6d9a8a3 100644
--- a/configs/default_config.yaml
+++ b/configs/default_config.yaml
@@ -1,53 +1,448 @@
+agent_prompt_template:
+  brainstorm_idea:
+    examples:
+    - ''
+    - ''
+    intro: Here is a high-level summarized insight of a research field. How do you
+      view this field? Do you have any novel ideas or insights? Please give me 3 to
+      5 novel ideas and insights in bullet points. Each bullet point should be concise,
+      containing 2 or 3 sentences.
+    template: 'Here is the insight: {insights}'
+  discuss:
+    examples:
+    - ''
+    - ''
+    intro: Please continue in a conversation with other fellow researchers for me,
+      where you will address their concerns in a scholarly way.
+    template: 'Here are the messages from other researchers: {message}'
+  discuss_idea:
+    examples:
+    - ''
+    - ''
+    intro: Given a list of research ideas, please summarize them by removing duplicates
+      and resolving any contradictory ideas by selecting the more reasonable one.
+    template: 'Here are the research ideas:
+
+      {ideas}
+
+      '
+  review_literature:
+    examples:
+    - ''
+    - ''
+    intro: Given the profile of me, keywords, some recent paper titles and abstracts,
+      could you summarize the keywords of high-level research backgrounds and insights
+      in this field (related to my profile if possible)?
+    template: 'Here is my profile biology: {profile_bio}
+
+      Here are the research domains: {domains}
+
+      Here are some recent paper titles and abstracts: {papers}'
+  write_bio:
+    examples:
+    - ''
+    - ''
+    intro: Based on the list of the researcher's first person persona from different
+      times, please write a comprehensive first person persona. Focus more on more
+      recent personas. Be concise and clear (around 300 words).
+    template: 'Here are the personas from different times: {publication_info}'
+  write_meta_review_decision:
+    examples:
+    - ''
+    - ''
+    intro: Please make a review decision to decide whether the following submission
+      should be accepted or rejected by an academic conference. Please indicate your
+      review decision as accept or reject.
+    template: 'Here is the submission: {paper}
+
+      Here are the reviews: {reviews}
+
+      Here are the rebuttals: {rebuttals}
+
+      Here is the summary of the reviews: {summary}
+
+      Here is the strength of the submission: {strength}
+
+      Here is the weakness of the submission: {weakness}'
+  write_meta_review_strength:
+    examples:
+    - ''
+    - ''
+    intro: Please write the strength of the submission for the following submission
+      you have made to an academic conference. Your strength should summarize the
+      reviews and decisions to help the reviewers to make a decision.
+    template: 'Here is the submission: {paper}
+
+      Here are the reviews: {reviews}
+
+      Here are the rebuttals: {rebuttals}
+
+      Here is the summary of the reviews: {summary}'
+  write_meta_review_summary:
+    examples:
+    - ''
+    - ''
+    intro: Please write a summary of the reviews for the following submission you
+      have made to an academic conference. Your summary should summarize the reviews
+      and decisions to help the reviewers to make a decision.
+    template: 'Here is the submission: {paper}
+
+      Here are the reviews: {reviews}
+
+      Here are the rebuttals: {rebuttals}'
+  write_meta_review_weakness:
+    examples:
+    - ''
+    - ''
+    intro: Please write the weakness of the submission for the following submission
+      you have made to an academic conference. Your weakness should summarize the
+      reviews and decisions to help the reviewers to make a decision.
+    template: 'Here is the submission: {paper}
+
+      Here are the reviews: {reviews}
+
+      Here are the rebuttals: {rebuttals}
+
+      Here is the summary of the reviews: {summary}'
+  write_paper:
+    examples:
+    - ''
+    - ''
+    intro: Please write a paper based on the following ideas and external data. To
+      save time, you only need to write the abstract. You might use two or more of
+      these ideas if they are related and work well together.
+    template: 'Here is the idea: {idea}
+
+      Here are the external data, which is a list of abstracts of related papers:
+      {papers}'
+  write_rebuttal:
+    examples:
+    - ''
+    - ''
+    intro: Please write a rebuttal for the following submission you have made to an
+      academic conference. Your rebuttal should rebut the reviews to convince the
+      reviewers to accept your submission.
+    template: 'Here is the submission: {paper}
+
+      Here are the reviews: {review}'
+  write_review_score:
+    examples:
+    - ''
+    - ''
+    intro: Please provide a score for the following submission you have made to an
+      academic conference. The score should be between 1 and 10, where 1 is the lowest
+      and 10 is the highest.
+    template: 'Here is the submission: {paper}
+
+      Here is the summary of the paper: {summary}
+
+      Here is the strength of the paper: {strength}
+
+      Here is the weakness of the paper: {weakness}'
+  write_review_strength:
+    examples:
+    - ''
+    - ''
+    intro: Please write the strength of the paper for the following submission you
+      have made to an academic conference.
+    template: 'Here is the submission: {paper}
+
+      Here is the summary of the paper: {summary}'
+  write_review_summary:
+    examples:
+    - ''
+    - ''
+    intro: Please write a summary of the paper for the following submission you have
+      made to an academic conference.
+    template: 'Here is the submission: {paper}'
+  write_review_weakness:
+    examples:
+    - ''
+    - ''
+    intro: Please write the weakness of the paper for the following submission you
+      have made to an academic conference.
+    template: 'Here is the submission: {paper}
+
+      Here is the summary of the paper: {summary}'
+eval_prompt_template:
+  idea_quality:
+    examples:
+    - ''
+    - ''
+    intro: "Please evaluate the idea based on the following dimensions, considering\
+      \ the current research insights within the research community. If the research\
+      \ insights field is left blank, please use your common knowledge to assess the\
+      \ insights. Finally, give an overall score (0-100) and 6 dimension scores (for\
+      \ each dimension, provide a rating (1-10)) as the evaluation for the idea.\n\
+      \nThe details of rating are as follows:\n1. Novelty\n    - Rating (1-10):\n\
+      \    - Comments:\n    - How original and unique is the idea?\n    - Does it\
+      \ introduce a new perspective or significant advancement compared to existing\
+      \ methods?\n    - How does it align with or diverge from the innovations highlighted\
+      \ in the insights?\n2. Validity\n    - Rating (1-10):\n    - Comments:\n   \
+      \ - Does it include solid theoretical foundations, robust algorithms, and detailed\
+      \ methodologies?\n    - Is the method in line with the state-of-the-art techniques\
+      \ noted in the insights?\n    - Are the underlying principles well-defined and\
+      \ logically consistent?\n    - Does the idea demonstrate a deep understanding\
+      \ of relevant theories and concepts?\n3. Significance\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Evaluate the potential impact of the idea on the specific\
+      \ domain of research community that the idea belongs to and beyond.\n    - How\
+      \ significant is its contribution to advancing the field?\n    - Does it address\
+      \ high-impact problems or gaps identified in the insights?\n    - How applicable\
+      \ is it in practical settings and industry contexts?\n4. Feasibility\n    -\
+      \ Rating (1-10):\n    - Comments:\n    - Assess the feasibility of implementing\
+      \ the idea.\n    - Is it practically applicable in real-world scenarios?\n \
+      \   - Does it consider efficiency and scalability, in line with the practical\
+      \ application focus of the insights?\n5. Clarity\n    - Rating (1-10):\n   \
+      \ - Comments:\n    - Assess the clarity, organization, and presentation quality\
+      \ of the idea.\n    - Is the idea communicated effectively, adhering to high\
+      \ presentation standards seen in top-tier conferences?\n6. Ethical Considerations\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Consider the ethical implications\
+      \ and societal impact of the idea.\n    - Does it adhere to the growing emphasis\
+      \ on ethical research practices as highlighted in the insights?\n"
+    template: 'Here is the idea to evaluate: {idea}.
+
+      Here is the research insights: {insights}.'
+  insight_quality:
+    examples:
+    - ''
+    - ''
+    intro: "Please evaluate the insight based on the following dimensions, considering\
+      \ the current research insights within the research community. If the research\
+      \ insights field is left blank, please use your common knowledge to assess the\
+      \ insights. Finally, give an overall score (0-100) and 6 dimension scores (for\
+      \ each dimension, provide a rating (1-10)) as the evaluation for the insight.\n\
+      \nThe details of rating are as follows:\n1. Novelty\n    - Rating (1-10):\n\
+      \    - Comments:\n    - How original and unique is the insight?\n    - Does\
+      \ it introduce a new perspective or significant advancement compared to existing\
+      \ methods?\n    - How does it align with or diverge from the innovations highlighted\
+      \ in the insights?\n2. Validity\n    - Rating (1-10):\n    - Comments:\n   \
+      \ - Does it include solid theoretical foundations, robust algorithms, and detailed\
+      \ methodologies?\n    - Is the method in line with the state-of-the-art techniques\
+      \ noted in the insights?\n    - Are the underlying principles well-defined and\
+      \ logically consistent?\n    - Does the insight demonstrate a deep understanding\
+      \ of relevant theories and concepts?\n3. Significance\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Evaluate the potential impact of the insight on the\
+      \ specific domain of research community that the insight belongs to and beyond.\n\
+      \    - How significant is its contribution to advancing the field?\n    - Does\
+      \ it address high-impact problems or gaps identified in the insights?\n    -\
+      \ How applicable is it in practical settings and industry contexts?\n4. Feasibility\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Assess the feasibility of implementing\
+      \ the insight.\n    - Is it practically applicable in real-world scenarios?\n\
+      \    - Does it consider efficiency and scalability, in line with the practical\
+      \ application focus of the insights?\n5. Clarity\n    - Rating (1-10):\n   \
+      \ - Comments:\n    - Assess the clarity, organization, and presentation quality\
+      \ of the insight.\n    - Is the insight communicated effectively, adhering to\
+      \ high presentation standards seen in top-tier conferences?\n6. Ethical Considerations\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Consider the ethical implications\
+      \ and societal impact of the insight.\n    - Does it adhere to the growing emphasis\
+      \ on ethical research practices as highlighted in the insights?\n"
+    template: 'Here is the insight to evaluate: {insight}.'
+  meta_review_quality:
+    examples:
+    - ''
+    - ''
+    intro: "Please evaluate the review based on the following dimensions. Finally,\
+      \ give an overall score (0-100) and 10 dimension scores (for each dimension,\
+      \ provide a rating (1-10)) as the evaluation for the review.\n\nThe details\
+      \ of rating are as follows:\n1. Summarization\n    - Rating (1-10):\n    - Comments:\n\
+      \    - Does the meta-review accurately summarize the strengths and weaknesses\
+      \ of the original reviews?\n    - Are the key points of each review clearly\
+      \ and succinctly summarized?\n    - Are any discrepancies or misunderstandings\
+      \ among the reviews identified and addressed?\n2. Quality\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Are the strengths and weaknesses of the reviewed paper\
+      \ clearly identified and appropriately critiqued?\n    - Do the critiques show\
+      \ a deep understanding of the paper's content and contributions?\n    - Are\
+      \ the assessments fair and balanced?\n3. Consistency and Fairness\n    - Rating\
+      \ (1-10):\n    - Comments:\n    - Is there consistency in evaluating different\
+      \ aspects of the reviewed paper across the reviews?\n    - Are the assessments\
+      \ fair, avoiding significant bias towards any particular aspect of the paper?\n\
+      \    - Are any conflicting opinions among the reviews reconciled appropriately?\n\
+      4. Constructiveness\n    - Rating (1-10):\n    - Comments:\n    - Are the critiques\
+      \ and suggestions provided in the meta-review constructive and actionable?\n\
+      \    - Do they offer meaningful insights for improving the reviewed paper or\
+      \ future revisions?\n    - Are the recommendations clear and well-supported\
+      \ by evidence from the reviews?\n5. Clarity\n    - Rating (1-10):\n    - Comments:\n\
+      \    - Is the meta-review well-written and logically organized?\n    - Are the\
+      \ points expressed clearly and effectively?\n    - Is the language appropriate\
+      \ and professional?\n6. Insightfulness\n    - Rating (1-10):\n    - Comments:\n\
+      \    - Does the meta-review provide insightful commentary beyond summarizing\
+      \ individual reviews?\n    - Are there novel observations or perspectives that\
+      \ enrich the understanding of the reviewed paper?\n7. Alignment with Review\
+      \ Criteria\n    - Rating (1-10):\n    - Comments:\n    - Does the meta-review\
+      \ align with the evaluation criteria provided by the submission guidelines?\n\
+      \    - Are all relevant aspects of the reviewed paper adequately covered in\
+      \ the meta-review?\n8. Justification of Final Decision\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Is the final decision or recommendation based on a thorough\
+      \ analysis of the reviews?\n    - Are the reasons for the recommendation clearly\
+      \ articulated and justified?\n9. Ethical Considerations\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Are there any ethical considerations raised in the meta-review\
+      \ regarding the reviewed paper or its reviews?\n    - Are potential biases or\
+      \ conflicts of interest addressed appropriately?\n10. Overall Impression\n \
+      \   - Rating (1-10):\n    - Comments:\n    - What is your overall impression\
+      \ of the meta-review?\n    - Does it meet the standards expected for a meta-review\
+      \ in terms of thoroughness, insightfulness, and clarity?\n"
+    template: 'Here is the review to evaluate:
+
+      research insights: {insights}
+
+      idea: {idea}
+
+      paper: {paper}
+
+      reviews: {reviews}
+
+      rebuttals: {rebuttals}
+
+      meta_review: {meta_review}'
+  paper_quality:
+    examples:
+    - ''
+    - ''
+    intro: "Please evaluate the paper draft based on the following dimensions. Finally,\
+      \ give an overall score (0-100) and 6 dimension scores (for each dimension,\
+      \ provide a rating (1-10)) as the evaluation for the draft.\n\nThe details of\
+      \ rating are as follows:\n1. Novelty\n    - Rating (1-10):\n    - Comments:\n\
+      \    - Does the paper introduce a novel problem or new perspective that has\
+      \ not been explored before?\n    - Does it introduce new techniques or significant\
+      \ advancements compared to existing methods?\n    - How does it align with or\
+      \ diverge from the innovations highlighted in the insights?\n2. Validity\n \
+      \   - Rating (1-10):\n    - Comments:\n    - Does it include solid theoretical\
+      \ foundations, robust algorithms, and detailed methodologies in addressing the\
+      \ research problem?\n    - Are the underlying principles well-defined and logically\
+      \ consistent?\n3. Significance\n    - Rating (1-10):\n    - Comments:\n    -\
+      \ Evaluate the potential contribution and impact of the paper on the specific\
+      \ domain of research community that the paper belongs to and beyond.\n    -\
+      \ How does it compare to existing works in terms of impact?\n4. Rigorousness\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Are the research design and methods\
+      \ clearly described and justified?\n    - Is the methodology robust and suitable\
+      \ for addressing the research questions?\n    - Are the results well-analyzed\
+      \ and interpreted?\n    - Do the findings support the claims made in the paper?\n\
+      5. Clarity\n    - Rating (1-10):\n    - Comments:\n    - Evaluate the clarity,\
+      \ organization, and presentation quality of the paper.\n    - How well do the\
+      \ title and abstract summarize the paper? Are they clear, concise, and informative?\n\
+      \    - Does it effectively convey the significance and main contributions of\
+      \ the paper?\n    - How well do the title and abstract align with each other?\
+      \ Do they accurately represent the core idea and content of the paper?\n   \
+      \ - Is the content well-structured and easy to follow?\n6. Ethical Considerations\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Consider the ethical implications\
+      \ and societal impact of the paper.\n    - Does it adhere to ethical guidelines\
+      \ and responsible research practices?\n    - Are potential negative consequences\
+      \ or biases addressed?\n"
+    template: 'Here is the paper draft to evaluate:
+
+      paper: {paper}
+
+      Idea: {idea}
+
+      Insights: {insights}'
+  rebuttal_quality:
+    examples:
+    - ''
+    - ''
+    intro: "Please evaluate the rebuttal based on the following dimensions. Finally,\
+      \ give an overall score (0-100) and 10 dimension scores (for each dimension,\
+      \ provide a rating (1-10)) as the evaluation for the review.\n\nThe details\
+      \ of rating are as follows:\n1. Clarity of Response\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Is the rebuttal clear in addressing the criticisms raised\
+      \ in the reviews?\n    - Are the responses to each criticism well-structured\
+      \ and understandable?\n2. Accuracy and Justification\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Are the rebuttal claims and justifications adequately\
+      \ supported by evidence?\n    - Are any disagreements or discrepancies with\
+      \ the reviews addressed convincingly?\n3. Responsiveness\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Does the rebuttal address all major concerns and critiques\
+      \ raised in the reviews?\n    - Are the rebuttal responses thorough and comprehensive?\n\
+      4. Persuasiveness\n    - Rating (1-10):\n    - Comments:\n    - How persuasive\
+      \ are the arguments and explanations provided in the rebuttal?\n    - Are the\
+      \ rebuttal responses effective in mitigating concerns and defending the paper?\n\
+      5. Professionalism\n    - Rating (1-10):\n    - Comments:\n    - Is the tone\
+      \ and language of the rebuttal professional and respectful?\n    - Are there\
+      \ any instances of defensive or dismissive language that need improvement?\n\
+      6. Insightfulness\n    - Rating (1-10):\n    - Comments:\n    - Does the rebuttal\
+      \ provide new insights or perspectives that were not fully addressed in the\
+      \ original paper or reviews?\n7. Overall Improvement\n    - Rating (1-10):\n\
+      \    - Comments:\n    - How much does the rebuttal improve the overall perception\
+      \ and understanding of the paper's strengths and weaknesses?\n8. Clarity of\
+      \ Contributions\n    - Rating (1-10):\n    - Comments:\n    - Are the contributions\
+      \ of the paper clarified and emphasized in the rebuttal?\n9. Ethical Considerations\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Are there any ethical implications\
+      \ or considerations raised in the rebuttal?\n10. Balance and Fairness\n    -\
+      \ Rating (1-10):\n    - Comments:\n    - Does the rebuttal acknowledge both\
+      \ strengths and weaknesses of the paper in a balanced manner?\n    - Is there\
+      \ fairness in addressing criticisms without bias?\n"
+    template: 'Here is the review to evaluate:
+
+      research insights: {insights}
+
+      idea: {idea}
+
+      paper: {paper}
+
+      reviews: {review}
+
+      rebuttal: {rebuttal}'
+  review_quality:
+    examples:
+    - ''
+    - ''
+    intro: "Please evaluate the review based on the following dimensions. You only\
+      \ need to give an overall score (0-100) and 10 dimension scores (for each dimension,\
+      \ provide a rating (1-10)) as the evaluation for the review. For these components\
+      \ that are left blank (for example: rebuttal, meta_review, etc), please provide\
+      \ your common knowledge to assess the review. You must give an overall score\
+      \ with dimension scores. No detailed analysis is needed.\n\nThe details of rating\
+      \ are as follows:\n1. Summarization\n    - Rating (1-10):\n    - Comments:\n\
+      \    - Does the review accurately summarize the paper's motivation?\n    - Are\
+      \ the key contributions and achievements clearly summarized?\n    - Are there\
+      \ any misunderstandings that need to be addressed in the author's response?\n\
+      2. Strengths\n    - Rating (1-10):\n    - Comments:\n    - Are the strengths\
+      \ of the work clearly described?\n    - Are the claims sound, both theoretically\
+      \ and empirically?\n    - Is the contribution significant and novel?\n    -\
+      \ Is the work relevant to the community?\n3. Weaknesses\n    - Rating (1-10):\n\
+      \    - Comments:\n    - Are the limitations of the work clearly explained?\n\
+      \    - Are the weaknesses addressed along the same axes as the strengths?\n\
+      \    - Are the criticisms detailed, specific, and polite?\n4. Correctness\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Are the claims and methods correct?\n\
+      \    - Is the empirical methodology sound?\n    - Are there any incorrect claims\
+      \ or methods detailed thoroughly?\n    - Is the criticism well-motivated and\
+      \ understandable?\n5. Clarity\n    - Rating (1-10):\n    - Comments:\n    -\
+      \ Is the paper well-written?\n    - Is the exposition of the paper clear?\n\
+      \    - What parts of the paper need revision to improve clarity?\n6. Originality\n\
+      \    - Rating (1-10):\n    - Comments:\n    - Is it clearly discussed how this\
+      \ work differs from previous contributions?\n    - Does the submission show\
+      \ due scholarship, relating the proposed work to prior work?\n    - Does the\
+      \ related work section explain how the proposed work differs from prior literature?\n\
+      7. Reproducibility\n    - Rating (1-10):\n    - Comments:\n    - Are there enough\
+      \ details to reproduce the major results of this work?\n    - Is the work reasonably\
+      \ reproducible?\n    - If not, are the reproducibility issues listed among the\
+      \ weaknesses?\n8. Significance\n    - Rating (1-10):\n    - Comments:\n    -\
+      \ Have the authors adequately addressed the broader impact of their work?\n\
+      \    - Are potential negative ethical and societal implications considered?\n\
+      9. Ethical Considerations\n    - Rating (1-10):\n    - Comments:\n    - Does\
+      \ the submission raise potential ethical concerns?\n    - Are there methods,\
+      \ applications, or data that create or reinforce unfair bias?\n    - Does the\
+      \ work have a primary purpose of harm or injury?\n10. Fairness\n    - Rating\
+      \ (1-10):\n    - Comments:\n    - Are the review scores distributed fairly?\n\
+      \    - Is there a balance in the scoring, without significant bias towards extremely\
+      \ high or low scores?\n    - Do the scores reflect a reasonable and unbiased\
+      \ assessment of the paper?\n"
+    template: 'Here is the review to evaluate:
+
+      idea: {idea}
+
+      research insights: {insights}
+
+      paper: {paper}
+
+      review: {review}'
 param:
+  base_llm: mistralai/Mixtral-8x7B-Instruct-v0.1
+  domain: computer_vision
+  max_token_num: 512
+  proj_participant_num: 3
   related_paper_num: 10
-  base_llm: 'gpt-4o'
-  max_collaborators_num: 3
-  domain: 'computer_vision'
-  reviewer_num: 3
-  result_path: 'Mixtral-8x7B'
+  result_path: Mixtral-8x7B
   return_num: 1
-  max_token_num: 512
-  temperature: 0
-  top_p: null
+  reviewer_num: 3
   stream: null
-prompt_template:
-  write_bio: |
-    Based on the list of the researcher's first person persona from different times, please write a comprehensive first person persona. Focus more on more rescent personas. Be concise and clear (around 300 words).
-    Here are the personas from different times: {publication_info}
-  find_collaborators: |
-    Given the name and profile of me, could you find {max_number} collaborators for the following collaboration task?
-    Here is my profile: {self_serialize_all}
-    The collaboration task includes: {task_serialize_all}
-    Here are a full list of the names and profiles of potential collaborators: {collaborators_serialize_all}
-    Generate the collaborator in a list separated by '-' for each collaborator.
-  review_literature: |
-    Given the profile of me, keywords, some recent paper titles and abstracts. Could you summarize the keywords of high level research backgrounds and insights in this field (related to my profile if possible).
-    Here is my profile biology: {profile_bio}
-    Here are the research domains: {domains}
-    Here are some recent paper titles and abstracts: {papers}
-  brainstorm_idea: |
-    Here is a high-level summarized insight of a research field {insights}.
-    How do you view this field? Do you have any novel ideas or insights?
-    Please give me 3 to 5 novel ideas and insights in bullet points. Each bullet point should be concise, containing 2 or 3 sentences.
-  discuss_idea: |
-    Given a list of research ideas, please summarize them by removing duplicates
-    and resolving any contradictory ideas by selecting the more reasonable one.
-    Here are the research ideas:
-    {ideas}
-  write_paper: |
-    Please write a paper based on the following ideas and external data. To save time, you only need to write the abstract.
-    You might use two or more of these ideas if they are related and work well together.
-    Here is the idea: {idea}
-    Here are the external data, which is a list of abstracts of related papers: {papers}
-  write_meta_review: |
-    Please make a review decision to decide whether the following submission should be accepted or rejected by an academic conference. Here are several reviews from reviewers and rebuttals from the author for this submission. Please indicate your review decision as accept or reject.
-    Here is the submission: {paper}
-    Here are the reviews: {reviews}
-    Here are the rebuttals: {rebuttals}
-  write_rebuttal: |
-    Please write a rebuttal for the following submission you have made to an academic conference. Here are the reviews and decisions from the reviewers. Your rebuttal should rebut the reviews to convince the reviewers to accept your submission.
-    Here is the submission: {paper}
-    Here are the reviews: {review}
-  discuss: |
-    Please continue in a conversation with other fellow researchers for me, where you will address their concerns in a scholarly way.
-    Here are the messages from other researchers: {message}
+  temperature: 0.0
+  top_p: null
diff --git a/research_town/agents/agent_base.py b/research_town/agents/agent_base.py
index 583c9a2..10dc8ab 100644
--- a/research_town/agents/agent_base.py
+++ b/research_town/agents/agent_base.py
@@ -61,7 +61,7 @@ class BaseResearchAgent(object):
             papers=serialized_papers,
             domains=domains,
             model_name=self.model_name,
-            prompt_template_review_literature=config.agent_prompt_template.review_literature,
+            prompt_template=config.agent_prompt_template.review_literature,
             return_num=config.param.return_num,
             max_token_num=config.param.max_token_num,
             temperature=config.param.temperature,
diff --git a/research_town/configs/config.py b/research_town/configs/config.py
index 6777425..b89ffc8 100644
--- a/research_town/configs/config.py
+++ b/research_town/configs/config.py
@@ -1,4 +1,4 @@
-from typing import Any, Dict, Optional
+from typing import Any, Dict, List, Optional, Union
 
 import yaml
 from pydantic import BaseModel, ConfigDict
@@ -34,422 +34,330 @@ class ParamConfig(BaseModel):
 
 
 class EvalPromptTemplateConfig(BaseModel):
-    insight_quality: str = """
-    <Instruction> Please evaluate the insight based on the following dimensions, considering the current research insights within the research community. If the research insights field is left blank, please use your common knowledge to assess the insights.  Finally, give an overall score (0-100) and 6 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the insight. <Instruction>
-
-    <Input>
-    Here is the insight to evaluate: {insight}.
-    </Input>
-
-    <Output>
-    The output format should follow these rules: Overall Score of an insight (0-100), with 6 Dimension Scores: [d1, d2, d3, ..., d6], where di is the score of the i-th dimension. An example of output is: Overall Score=89 Dimension Scores=[8,9,9,9,9,9].'
-    </Output>
-
-    <Approach> The details of rating are as follow:
-    1. Novelty
-    Rating (1-10):
-    Comments:
-    How original and unique is the insight?
-    Does it introduce a new perspective or significant advancement compared to existing methods?
-    How does it align with or diverge from the innovations highlighted in the insights?
-    2. Validity
-    Rating (1-10):
-    Comments:
-    Does it include solid theoretical foundations, robust algorithms, and detailed methodologies?
-    Is the method in line with the state-of-the-art techniques noted in the insights?
-    Are the underlying principles well-defined and logically consistent?
-    Does the insight demonstrate a deep understanding of relevant theories and concepts?
-    3. Significance
-    Rating (1-10):
-    Comments:
-    Evaluate the potential impact of the insight on the specific domain of research community that the insight belongs to and beyond.
-    How significant is its contribution to advancing the field?
-    Does it address high-impact problems or gaps identified in the insights?
-    How applicable is it in practical settings and industry contexts?
-    4. Feasibility
-    Rating (1-10):
-    Comments:
-    Assess the feasibility of implementing the insight.
-    Is it practically applicable in real-world scenarios?
-    Does it consider efficiency and scalability, in line with the practical application focus of the insights?
-    5. Clarity
-    Rating (1-10):
-    Comments:
-    Assess the clarity, organization, and presentation quality of the insight.
-    Is the insight communicated effectively, adhering to high presentation standards seen in top-tier conferences?
-    6. Ethical Considerations
-    Rating (1-10):
-    Comments:
-    Consider the ethical implications and societal impact of the insight.
-    Does it adhere to the growing emphasis on ethical research practices as highlighted in the insights?
-    </Approach>
-    """
-
-    idea_quality: str = """
-    <Instruction> Please evaluate the idea based on the following dimensions, considering the current research insights within the research community. If the research insights field is left blank, please use your common knowledge to assess the insights.  Finally, give an overall score (0-100) and 6 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the idea. <Instruction>
-
-    <Input>
-    Here is the idea to evaluate: {idea}.
-    Here is the research insights: {insights}.
-    </Input>
-
-    <Output>
-    The output format should follow these rules: Overall Score of an idea (0-100), with 6 Dimension Scores: [d1, d2, d3, ..., d6], where di is the score of the i-th dimension. An example of output is: Overall Score=89 Dimension Scores=[8,9,9,9,9,9].'
-    </Output>
-
-    <Approach> The details of rating are as follow:
-    1. Novelty
-    Rating (1-10):
-    Comments:
-    How original and unique is the idea?
-    Does it introduce a new perspective or significant advancement compared to existing methods?
-    How does it align with or diverge from the innovations highlighted in the insights?
-    2. Validity
-    Rating (1-10):
-    Comments:
-    Does it include solid theoretical foundations, robust algorithms, and detailed methodologies?
-    Is the method in line with the state-of-the-art techniques noted in the insights?
-    Are the underlying principles well-defined and logically consistent?
-    Does the idea demonstrate a deep understanding of relevant theories and concepts?
-    3. Significance
-    Rating (1-10):
-    Comments:
-    Evaluate the potential impact of the idea on the specific domain of research community that the idea belongs to and beyond.
-    How significant is its contribution to advancing the field?
-    Does it address high-impact problems or gaps identified in the insights?
-    How applicable is it in practical settings and industry contexts?
-    4. Feasibility
-    Rating (1-10):
-    Comments:
-    Assess the feasibility of implementing the idea.
-    Is it practically applicable in real-world scenarios?
-    Does it consider efficiency and scalability, in line with the practical application focus of the insights?
-    5. Clarity
-    Rating (1-10):
-    Comments:
-    Assess the clarity, organization, and presentation quality of the idea.
-    Is the idea communicated effectively, adhering to high presentation standards seen in top-tier conferences?
-    6. Ethical Considerations
-    Rating (1-10):
-    Comments:
-    Consider the ethical implications and societal impact of the idea.
-    Does it adhere to the growing emphasis on ethical research practices as highlighted in the insights?
-    </Approach>
-    """
-
-    paper_quality: str = """
-    <Instruction> Please evaluate the paper draft based on the following dimensions. Finally, give an overall score (0-100) and 6 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the draft.
-    <Instruction>
-
-    <Input>
-    Here is the paper draft to evaluate:
-    paper: {paper}
-    Idea: {idea}
-    Insights: {insights}
-    </Input>
-
-    <Output>
-    The output format should follow these rules: Overall Score of an idea (0-100), with 6 Dimension Scores: [d1, d2, d3, ..., d6], where di is the score of the i-th dimension. An example of output is: Overall Score=89 Dimension Scores=[8,9,9,9,9,9].'
-    </Output>
-
-    <Approach> The details of rating are as follow:
-    1. Novelty
-    Rating (1-10):
-    Comments:
-    Does it paper introduce a novel problem or new perspective that has not been explored before?
-    Does it introduce a new techniques or significant advancement compared to existing methods?
-    How does it align with or diverge from the innovations highlighted in the insights?
-    2. Validity
-    Rating (1-10):
-    Comments:
-    Does it include solid theoretical foundations, robust algorithms, and detailed methodologies in addressing the research problem?
-    Are the underlying principles well-defined and logically consistent?
-    3. Significance
-    Rating (1-10):
-    Comments:
-    Evaluate the potential contribution and impact of the paper on the specific domain of research community that the paper belongs to and beyond.
-    How does it compare to existing works in terms of impact?
-    4. Rigorousness
-    Rating (1-10):
-    Comments:
-    Are the research design and methods clearly described and justified?
-    Is the methodology robust and suitable for addressing the research questions?
-    Are the results well-analyzed and interpreted?
-    Do the findings support the claims made in the paper?
-    5. Clarity
-    Rating (1-10):
-    Comments:
-    Evaluate the clarity, organization, and presentation quality of the paper.
-    How well do the title and abstract summarize the paper? Are they clear, concise, and informative?
-    Does it effectively convey the significance and main contributions of the paper?
-    How well do the title and abstract align with each other? Do they accurately represent the core idea and content of the paper?
-    Is the content well-structured and easy to follow?
-    6. Ethical Considerations
-    Rating (1-10):
-    Comments:
-    Consider the ethical implications and societal impact of the paper.
-    Does it adhere to ethical guidelines and responsible research practices?
-    Are potential negative consequences or biases addressed?
-    </Approach>
-    """
-
-    review_quality: str = """
-    <Instruction>
-    Please evaluate the review based on the following dimensions. You only need to give an overall score (0-100) and 10 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the review. For these components are left blank(for example: rebutal, meta_review, etc), please provide your common knowledge to assess the review. You must give a overall score with dimension scores. No detailed anaylsis is needed.
-    </Instruction>
-
-    <Input>
-    Here is the review to evaluate:
-    idea: {idea}
-    research insights: {insights}
-    paper: {paper}
-    review: {review}
-    </Input>
-
-    <Output>
-    Output format:
-    The output format should follow these rules: Overall Score of a review (0-100), with 10 Dimension Scores: [d1, d2, d3, ..., d10], where di is the score of the i-th dimension. An example of output is: Overall Score=91. Dimension Scores=[9,9,9,9,9,9,9,9,9,10].
-    </Output>
-
-    <Approach> The details of rating are as follows:
-    1. Summarization
-        - Rating (1-10):
-        - Comments:
-        - Does the review accurately summarize the paper's motivation?
-        - Are the key contributions and achievements clearly summarized?
-        - Are there any misunderstandings that need to be addressed in the author's response?
-
-    2. Strengths
-        - Rating (1-10):
-        - Comments:
-        - Are the strengths of the work clearly described?
-        - Are the claims sound, both theoretically and empirically?
-        - Is the contribution significant and novel?
-        - Is the work relevant to the community?
-
-    3. Weaknesses
-        - Rating (1-10):
-        - Comments:
-        - Are the limitations of the work clearly explained?
-        - Are the weaknesses addressed along the same axes as the strengths?
-        - Are the criticisms detailed, specific, and polite?
-
-    4. Correctness
-        - Rating (1-10):
-        - Comments:
-        - Are the claims and methods correct?
-        - Is the empirical methodology sound?
-        - Are there any incorrect claims or methods detailed thoroughly?
-        - Is the criticism well-motivated and understandable?
-
-    5. Clarity
-        - Rating (1-10):
-        - Comments:
-        - Is the paper well-written?
-        - Is the exposition of the paper clear?
-        - What parts of the paper need revision to improve clarity?
-
-    6. Originality
-        - Rating (1-10):
-        - Comments:
-        - Is it clearly discussed how this work differs from previous contributions?
-        - Does the submission show due scholarship, relating the proposed work to prior work?
-        - Does the related work section explain how the proposed work differs from prior literature?
-
-    7. Reproducibility
-        - Rating (1-10):
-        - Comments:
-        - Are there enough details to reproduce the major results of this work?
-        - Is the work reasonably reproducible?
-        - If not, are the reproducibility issues listed among the weaknesses?
-
-    8. Significance
-        - Rating (1-10):
-        - Comments:
-        - Have the authors adequately addressed the broader impact of their work?
-        - Are potential negative ethical and societal implications considered?
-
-    9. Ethical Considerations
-        - Rating (1-10):
-        - Comments:
-        - Does the submission raise potential ethical concerns?
-        - Are there methods, applications, or data that create or reinforce unfair bias?
-        - Does the work have a primary purpose of harm or injury?
-
-    10. Fairness
-        - Rating (1-10):
-        - Comments:
-        - Are the review scores distributed fairly?
-        - Is there a balance in the scoring, without significant bias towards extremely high or low scores?
-        - Do the scores reflect a reasonable and unbiased assessment of the paper?
-    </Approach>
-    """
-
-    rebuttal_quality: str = """
-    <Instruction>
-    Please evaluate the rebuttal based on the following dimensions. Finally, give an overall score (0-100) and 10 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the review.
-    </Instruction>
-
-    <Input>
-    Here is the review to evaluate:
-    research insights: {insights}
-    idea: {idea}
-    paper: {paper}
-    reviews: {review}
-    rebutal: {rebuttal}
-    </Input>
-
-    <Output>
-    Output format:
-    The output format should follow these rules: Overall Score of a review (0-100), with 10 Dimension Scores: [d1, d2, d3, ..., d10], where di is the score of the i-th dimension. An example of output is: Overall Score=91. Dimension Scores=[9,9,9,9,9,9,9,9,9,10].
-    </Output>
-
-    <Approach> The details of rating are as follows:
-    1. Clarity of Response
-        - Rating (1-10):
-        - Comments:
-        - Is the rebuttal clear in addressing the criticisms raised in the reviews?
-        - Are the responses to each criticism well-structured and understandable?
-
-    2. Accuracy and Justification
-        - Rating (1-10):
-        - Comments:
-        - Are the rebuttal claims and justifications adequately supported by evidence?
-        - Are any disagreements or discrepancies with the reviews addressed convincingly?
-
-    3. Responsiveness
-        - Rating (1-10):
-        - Comments:
-        - Does the rebuttal address all major concerns and critiques raised in the reviews?
-        - Are the rebuttal responses thorough and comprehensive?
-
-    4. Persuasiveness
-        - Rating (1-10):
-        - Comments:
-        - How persuasive are the arguments and explanations provided in the rebuttal?
-        - Are the rebuttal responses effective in mitigating concerns and defending the paper?
-
-    5. Professionalism
-        - Rating (1-10):
-        - Comments:
-        - Is the tone and language of the rebuttal professional and respectful?
-        - Are there any instances of defensive or dismissive language that need improvement?
-
-    6. Insightfulness
-        - Rating (1-10):
-        - Comments:
-        - Does the rebuttal provide new insights or perspectives that were not fully addressed in the original paper or reviews?
-
-    7. Overall Improvement
-        - Rating (1-10):
-        - Comments:
-        - How much does the rebuttal improve the overall perception and understanding of the paper's strengths and weaknesses?
-
-    8. Clarity of Contributions
-        - Rating (1-10):
-        - Comments:
-        - Are the contributions of the paper clarified and emphasized in the rebuttal?
-
-    9. Ethical Considerations
-        - Rating (1-10):
-        - Comments:
-        - Are there any ethical implications or considerations raised in the rebuttal?
-
-    10. Balance and Fairness
-        - Rating (1-10):
-        - Comments:
-        - Does the rebuttal acknowledge both strengths and weaknesses of the paper in a balanced manner?
-        - Is there fairness in addressing criticisms without bias?
-    </Approach>
-    """
-
-    meta_review_quality: str = """
-    <Instruction>
-    Please evaluate the review based on the following dimensions. Finally, give an overall score (0-100) and 10 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the review.
-    </Instruction>
-
-    <Input>
-    Here is the review to evaluate:
-    research insights: {insights}
-    idea: {idea}
-    paper: {paper}
-    reviews: {reviews}
-    rebutals: {rebuttals}
-    meta_review: {meta_review}
-    </Input>
-
-    <Output>
-    Output format:
-    The output format should follow these rules: Overall Score of a review (0-100), with 10 Dimension Scores: [d1, d2, d3, ..., d10], where di is the score of the i-th dimension. An example of output is: Overall Score=91. Dimension Scores=[9,9,9,9,9,9,9,9,9,10].
-    </Output>
-
-    <Approach> The details of rating are as follows:
-    1. Summarization
-        - Rating (1-10):
-        - Comments:
-        - Does the meta-review accurately summarize the strengths and weaknesses of the original reviews?
-        - Are the key points of each review clearly and succinctly summarized?
-        - Are any discrepancies or misunderstandings among the reviews identified and addressed?
-
-    2. Quality
-        - Rating (1-10):
-        - Comments:
-        - Are the strengths and weaknesses of the reviewed paper clearly identified and appropriately critiqued?
-        - Do the critiques show a deep understanding of the paper's content and contributions?
-        - Are the assessments fair and balanced?
-
-    3. Consistency and Fairness
-        - Rating (1-10):
-        - Comments:
-        - Is there consistency in evaluating different aspects of the reviewed paper across the reviews?
-        - Are the assessments fair, avoiding significant bias towards any particular aspect of the paper?
-        - Are any conflicting opinions among the reviews reconciled appropriately?
-
-    4. Constructiveness
-        - Rating (1-10):
-        - Comments:
-        - Are the critiques and suggestions provided in the meta-review constructive and actionable?
-        - Do they offer meaningful insights for improving the reviewed paper or future revisions?
-        - Are the recommendations clear and well-supported by evidence from the reviews?
-
-    5. Clarity
-        - Rating (1-10):
-        - Comments:
-        - Is the meta-review well-written and logically organized?
-        - Are the points expressed clearly and effectively?
-        - Is the language appropriate and professional?
-
-    6. Insightfulness
-        - Rating (1-10):
-        - Comments:
-        - Does the meta-review provide insightful commentary beyond summarizing individual reviews?
-        - Are there novel observations or perspectives that enrich the understanding of the reviewed paper?
-
-    7. Alignment with Review Criteria
-        - Rating (1-10):
-        - Comments:
-        - Does the meta-review align with the evaluation criteria provided by the submission guidelines?
-        - Are all relevant aspects of the reviewed paper adequately covered in the meta-review?
-
-    8. Justification of Final Decision
-        - Rating (1-10):
-        - Comments:
-        - Is the final decision or recommendation based on a thorough analysis of the reviews?
-        - Are the reasons for the recommendation clearly articulated and justified?
-
-    9. Ethical Considerations
-        - Rating (1-10):
-        - Comments:
-        - Are there any ethical considerations raised in the meta-review regarding the reviewed paper or its reviews?
-        - Are potential biases or conflicts of interest addressed appropriately?
-
-    10. Overall Impression
-        - Rating (1-10):
-        - Comments:
-        - What is your overall impression of the meta-review?
-        - Does it meet the standards expected for a meta-review in terms of thoroughness, insightfulness, and clarity?
-    </Approach>
-    """
+    insight_quality: Dict[str, Union[str, List[str]]] = {
+        'intro': (
+            'Please evaluate the insight based on the following dimensions, considering the current research insights within the research community. '
+            'If the research insights field is left blank, please use your common knowledge to assess the insights. Finally, give an overall score (0-100) '
+            'and 6 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the insight.\n\n'
+            'The details of rating are as follows:\n'
+            '1. Novelty\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - How original and unique is the insight?\n'
+            '    - Does it introduce a new perspective or significant advancement compared to existing methods?\n'
+            '    - How does it align with or diverge from the innovations highlighted in the insights?\n'
+            '2. Validity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does it include solid theoretical foundations, robust algorithms, and detailed methodologies?\n'
+            '    - Is the method in line with the state-of-the-art techniques noted in the insights?\n'
+            '    - Are the underlying principles well-defined and logically consistent?\n'
+            '    - Does the insight demonstrate a deep understanding of relevant theories and concepts?\n'
+            '3. Significance\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Evaluate the potential impact of the insight on the specific domain of research community that the insight belongs to and beyond.\n'
+            '    - How significant is its contribution to advancing the field?\n'
+            '    - Does it address high-impact problems or gaps identified in the insights?\n'
+            '    - How applicable is it in practical settings and industry contexts?\n'
+            '4. Feasibility\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Assess the feasibility of implementing the insight.\n'
+            '    - Is it practically applicable in real-world scenarios?\n'
+            '    - Does it consider efficiency and scalability, in line with the practical application focus of the insights?\n'
+            '5. Clarity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Assess the clarity, organization, and presentation quality of the insight.\n'
+            '    - Is the insight communicated effectively, adhering to high presentation standards seen in top-tier conferences?\n'
+            '6. Ethical Considerations\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Consider the ethical implications and societal impact of the insight.\n'
+            '    - Does it adhere to the growing emphasis on ethical research practices as highlighted in the insights?\n'
+        ),
+        'examples': ['', ''],
+        'template': 'Here is the insight to evaluate: {insight}.',
+    }
+    idea_quality: Dict[str, Union[str, List[str]]] = {
+        'intro': (
+            'Please evaluate the idea based on the following dimensions, considering the current research insights within the research community. '
+            'If the research insights field is left blank, please use your common knowledge to assess the insights. Finally, give an overall score (0-100) '
+            'and 6 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the idea.\n\n'
+            'The details of rating are as follows:\n'
+            '1. Novelty\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - How original and unique is the idea?\n'
+            '    - Does it introduce a new perspective or significant advancement compared to existing methods?\n'
+            '    - How does it align with or diverge from the innovations highlighted in the insights?\n'
+            '2. Validity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does it include solid theoretical foundations, robust algorithms, and detailed methodologies?\n'
+            '    - Is the method in line with the state-of-the-art techniques noted in the insights?\n'
+            '    - Are the underlying principles well-defined and logically consistent?\n'
+            '    - Does the idea demonstrate a deep understanding of relevant theories and concepts?\n'
+            '3. Significance\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Evaluate the potential impact of the idea on the specific domain of research community that the idea belongs to and beyond.\n'
+            '    - How significant is its contribution to advancing the field?\n'
+            '    - Does it address high-impact problems or gaps identified in the insights?\n'
+            '    - How applicable is it in practical settings and industry contexts?\n'
+            '4. Feasibility\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Assess the feasibility of implementing the idea.\n'
+            '    - Is it practically applicable in real-world scenarios?\n'
+            '    - Does it consider efficiency and scalability, in line with the practical application focus of the insights?\n'
+            '5. Clarity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Assess the clarity, organization, and presentation quality of the idea.\n'
+            '    - Is the idea communicated effectively, adhering to high presentation standards seen in top-tier conferences?\n'
+            '6. Ethical Considerations\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Consider the ethical implications and societal impact of the idea.\n'
+            '    - Does it adhere to the growing emphasis on ethical research practices as highlighted in the insights?\n'
+        ),
+        'examples': ['', ''],
+        'template': 'Here is the idea to evaluate: {idea}.\nHere is the research insights: {insights}.',
+    }
+    paper_quality: Dict[str, Union[str, List[str]]] = {
+        'intro': (
+            'Please evaluate the paper draft based on the following dimensions. Finally, give an overall score (0-100) and 6 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the draft.\n\n'
+            'The details of rating are as follows:\n'
+            '1. Novelty\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the paper introduce a novel problem or new perspective that has not been explored before?\n'
+            '    - Does it introduce new techniques or significant advancements compared to existing methods?\n'
+            '    - How does it align with or diverge from the innovations highlighted in the insights?\n'
+            '2. Validity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does it include solid theoretical foundations, robust algorithms, and detailed methodologies in addressing the research problem?\n'
+            '    - Are the underlying principles well-defined and logically consistent?\n'
+            '3. Significance\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Evaluate the potential contribution and impact of the paper on the specific domain of research community that the paper belongs to and beyond.\n'
+            '    - How does it compare to existing works in terms of impact?\n'
+            '4. Rigorousness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the research design and methods clearly described and justified?\n'
+            '    - Is the methodology robust and suitable for addressing the research questions?\n'
+            '    - Are the results well-analyzed and interpreted?\n'
+            '    - Do the findings support the claims made in the paper?\n'
+            '5. Clarity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Evaluate the clarity, organization, and presentation quality of the paper.\n'
+            '    - How well do the title and abstract summarize the paper? Are they clear, concise, and informative?\n'
+            '    - Does it effectively convey the significance and main contributions of the paper?\n'
+            '    - How well do the title and abstract align with each other? Do they accurately represent the core idea and content of the paper?\n'
+            '    - Is the content well-structured and easy to follow?\n'
+            '6. Ethical Considerations\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Consider the ethical implications and societal impact of the paper.\n'
+            '    - Does it adhere to ethical guidelines and responsible research practices?\n'
+            '    - Are potential negative consequences or biases addressed?\n'
+        ),
+        'examples': ['', ''],
+        'template': 'Here is the paper draft to evaluate:\npaper: {paper}\nIdea: {idea}\nInsights: {insights}',
+    }
+    review_quality: Dict[str, Union[str, List[str]]] = {
+        'intro': (
+            'Please evaluate the review based on the following dimensions. You only need to give an overall score (0-100) and 10 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the review. '
+            'For these components that are left blank (for example: rebuttal, meta_review, etc), please provide your common knowledge to assess the review. You must give an overall score with dimension scores. No detailed analysis is needed.\n\n'
+            'The details of rating are as follows:\n'
+            '1. Summarization\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            "    - Does the review accurately summarize the paper's motivation?\n"
+            '    - Are the key contributions and achievements clearly summarized?\n'
+            "    - Are there any misunderstandings that need to be addressed in the author's response?\n"
+            '2. Strengths\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the strengths of the work clearly described?\n'
+            '    - Are the claims sound, both theoretically and empirically?\n'
+            '    - Is the contribution significant and novel?\n'
+            '    - Is the work relevant to the community?\n'
+            '3. Weaknesses\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the limitations of the work clearly explained?\n'
+            '    - Are the weaknesses addressed along the same axes as the strengths?\n'
+            '    - Are the criticisms detailed, specific, and polite?\n'
+            '4. Correctness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the claims and methods correct?\n'
+            '    - Is the empirical methodology sound?\n'
+            '    - Are there any incorrect claims or methods detailed thoroughly?\n'
+            '    - Is the criticism well-motivated and understandable?\n'
+            '5. Clarity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Is the paper well-written?\n'
+            '    - Is the exposition of the paper clear?\n'
+            '    - What parts of the paper need revision to improve clarity?\n'
+            '6. Originality\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Is it clearly discussed how this work differs from previous contributions?\n'
+            '    - Does the submission show due scholarship, relating the proposed work to prior work?\n'
+            '    - Does the related work section explain how the proposed work differs from prior literature?\n'
+            '7. Reproducibility\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are there enough details to reproduce the major results of this work?\n'
+            '    - Is the work reasonably reproducible?\n'
+            '    - If not, are the reproducibility issues listed among the weaknesses?\n'
+            '8. Significance\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Have the authors adequately addressed the broader impact of their work?\n'
+            '    - Are potential negative ethical and societal implications considered?\n'
+            '9. Ethical Considerations\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the submission raise potential ethical concerns?\n'
+            '    - Are there methods, applications, or data that create or reinforce unfair bias?\n'
+            '    - Does the work have a primary purpose of harm or injury?\n'
+            '10. Fairness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the review scores distributed fairly?\n'
+            '    - Is there a balance in the scoring, without significant bias towards extremely high or low scores?\n'
+            '    - Do the scores reflect a reasonable and unbiased assessment of the paper?\n'
+        ),
+        'examples': ['', ''],
+        'template': 'Here is the review to evaluate:\nidea: {idea}\nresearch insights: {insights}\npaper: {paper}\nreview: {review}',
+    }
+    rebuttal_quality: Dict[str, Union[str, List[str]]] = {
+        'intro': (
+            'Please evaluate the rebuttal based on the following dimensions. Finally, give an overall score (0-100) and 10 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the review.\n\n'
+            'The details of rating are as follows:\n'
+            '1. Clarity of Response\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Is the rebuttal clear in addressing the criticisms raised in the reviews?\n'
+            '    - Are the responses to each criticism well-structured and understandable?\n'
+            '2. Accuracy and Justification\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the rebuttal claims and justifications adequately supported by evidence?\n'
+            '    - Are any disagreements or discrepancies with the reviews addressed convincingly?\n'
+            '3. Responsiveness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the rebuttal address all major concerns and critiques raised in the reviews?\n'
+            '    - Are the rebuttal responses thorough and comprehensive?\n'
+            '4. Persuasiveness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - How persuasive are the arguments and explanations provided in the rebuttal?\n'
+            '    - Are the rebuttal responses effective in mitigating concerns and defending the paper?\n'
+            '5. Professionalism\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Is the tone and language of the rebuttal professional and respectful?\n'
+            '    - Are there any instances of defensive or dismissive language that need improvement?\n'
+            '6. Insightfulness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the rebuttal provide new insights or perspectives that were not fully addressed in the original paper or reviews?\n'
+            '7. Overall Improvement\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            "    - How much does the rebuttal improve the overall perception and understanding of the paper's strengths and weaknesses?\n"
+            '8. Clarity of Contributions\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the contributions of the paper clarified and emphasized in the rebuttal?\n'
+            '9. Ethical Considerations\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are there any ethical implications or considerations raised in the rebuttal?\n'
+            '10. Balance and Fairness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the rebuttal acknowledge both strengths and weaknesses of the paper in a balanced manner?\n'
+            '    - Is there fairness in addressing criticisms without bias?\n'
+        ),
+        'examples': ['', ''],
+        'template': 'Here is the review to evaluate:\nresearch insights: {insights}\nidea: {idea}\npaper: {paper}\nreviews: {review}\nrebuttal: {rebuttal}',
+    }
+    meta_review_quality: Dict[str, Union[str, List[str]]] = {
+        'intro': (
+            'Please evaluate the review based on the following dimensions. Finally, give an overall score (0-100) and 10 dimension scores (for each dimension, provide a rating (1-10)) as the evaluation for the review.\n\n'
+            'The details of rating are as follows:\n'
+            '1. Summarization\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the meta-review accurately summarize the strengths and weaknesses of the original reviews?\n'
+            '    - Are the key points of each review clearly and succinctly summarized?\n'
+            '    - Are any discrepancies or misunderstandings among the reviews identified and addressed?\n'
+            '2. Quality\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the strengths and weaknesses of the reviewed paper clearly identified and appropriately critiqued?\n'
+            "    - Do the critiques show a deep understanding of the paper's content and contributions?\n"
+            '    - Are the assessments fair and balanced?\n'
+            '3. Consistency and Fairness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Is there consistency in evaluating different aspects of the reviewed paper across the reviews?\n'
+            '    - Are the assessments fair, avoiding significant bias towards any particular aspect of the paper?\n'
+            '    - Are any conflicting opinions among the reviews reconciled appropriately?\n'
+            '4. Constructiveness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are the critiques and suggestions provided in the meta-review constructive and actionable?\n'
+            '    - Do they offer meaningful insights for improving the reviewed paper or future revisions?\n'
+            '    - Are the recommendations clear and well-supported by evidence from the reviews?\n'
+            '5. Clarity\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Is the meta-review well-written and logically organized?\n'
+            '    - Are the points expressed clearly and effectively?\n'
+            '    - Is the language appropriate and professional?\n'
+            '6. Insightfulness\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the meta-review provide insightful commentary beyond summarizing individual reviews?\n'
+            '    - Are there novel observations or perspectives that enrich the understanding of the reviewed paper?\n'
+            '7. Alignment with Review Criteria\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Does the meta-review align with the evaluation criteria provided by the submission guidelines?\n'
+            '    - Are all relevant aspects of the reviewed paper adequately covered in the meta-review?\n'
+            '8. Justification of Final Decision\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Is the final decision or recommendation based on a thorough analysis of the reviews?\n'
+            '    - Are the reasons for the recommendation clearly articulated and justified?\n'
+            '9. Ethical Considerations\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - Are there any ethical considerations raised in the meta-review regarding the reviewed paper or its reviews?\n'
+            '    - Are potential biases or conflicts of interest addressed appropriately?\n'
+            '10. Overall Impression\n'
+            '    - Rating (1-10):\n'
+            '    - Comments:\n'
+            '    - What is your overall impression of the meta-review?\n'
+            '    - Does it meet the standards expected for a meta-review in terms of thoroughness, insightfulness, and clarity?\n'
+        ),
+        'examples': ['', ''],
+        'template': 'Here is the review to evaluate:\nresearch insights: {insights}\nidea: {idea}\npaper: {paper}\nreviews: {reviews}\nrebuttals: {rebuttals}\nmeta_review: {meta_review}',
+    }
 
     model_config = ConfigDict(
         extra='allow',
@@ -457,98 +365,81 @@ class EvalPromptTemplateConfig(BaseModel):
 
 
 class AgentPromptTemplateConfig(BaseModel):
-    write_bio: str = (
-        "Based on the list of the researcher's first person persona from different times, please write a comprehensive first person persona. Focus more on more rescent personas. Be concise and clear (around 300 words)."
-        'Here are the personas from different times: {publication_info}'
-    )
-    find_collaborators: str = (
-        'Given the name and profile of me, could you find {max_number} collaborators for the following collaboration task?'
-        'Here is my profile: {self_serialize_all}'
-        'The collaboration task include: {task_serialize_all}'
-        'Here are a full list of the names and profiles of potential collaborators: {collaborators_serialize_all}'
-        "Generate the collaborator in a list separated by '-' for each collaborator"
-    )
-    review_literature: str = (
-        'Given the profile of me, keywords, some recent paper titles and abstracts. Could you summarize the keywords of high level research backgrounds and insights in this field (related to my profile if possible).'
-        'Here is my profile biology: {profile_bio}'
-        'Here are the research domains: {domains}'
-        'Here are some recent paper titles and abstracts: {papers}'
-    )
-    brainstorm_idea: str = (
-        'Here is a high-level summarized insight of a research field {insights}. '
-        'How do you view this field? Do you have any novel ideas or insights? '
-        'Please give me 3 to 5 novel ideas and insights in bullet points. Each bullet point should be concise, containing 2 or 3 sentences.'
-    )
-    discuss_idea: str = (
-        'Given a list of research ideas, please summarize them by removing duplicates '
-        'and resolving any contradictory ideas by selecting the more reasonable one. '
-        'Here are the research ideas:\n{ideas}\n'
-    )
-    write_paper: str = (
-        'Please write a paper based on the following ideas and external data. To save time, you only need to write the abstract. '
-        'You might use two or more of these ideas if they are related and works well together. '
-        'Here is the idea: {idea}'
-        'Here are the external data, which is a list abstracts of related papers: {papers}'
-    )
-    write_review_summary: str = (
-        'Please write a summary of the paper for the following submission you have made to an academic conference.'
-        'Here is the submission: {paper}'
-    )
-    write_review_strength: str = (
-        'Please write the strength of the paper for the following submission you have made to an academic conference.'
-        'Here is the submission: {paper}'
-        'Here is the summary of the paper: {summary}'
-    )
-    write_review_weakness: str = (
-        'Please write the weakness of the paper for the following submission you have made to an academic conference.'
-        'Here is the submission: {paper}'
-        'Here is the summary of the paper: {summary}'
-    )
-    write_review_score: str = (
-        'Please provide a score for the following submission you have made to an academic conference. The score should be between 1 and 10, where 1 is the lowest and 10 is the highest.'
-        'Here is the submission: {paper}'
-        'Here is the summary of the paper: {summary}'
-        'Here is the strength of the paper: {strength}'
-        'Here is the weakness of the paper: {weakness}'
-    )
-    write_meta_review_summary: str = (
-        'Please write a summary of the reviews for the following submission you have made to an academic conference. Here are the reviews from the reviewers. Your summary should summarize the reviews and decisions to help the reviewers to make a decision.'
-        'Here is the submission: {paper}'
-        'Here are the reviews: {reviews}'
-        'Here are the rebuttals: {rebuttals}'
-    )
-    write_meta_review_strength: str = (
-        'Please write the strength of the submission for the following submission you have made to an academic conference. Here are the reviews from the reviewers. Your strength should summarize the reviews and decisions to help the reviewers to make a decision.'
-        'Here is the submission: {paper}'
-        'Here are the reviews: {reviews}'
-        'Here are the rebuttals: {rebuttals}'
-        'Here is the summary of the reviews: {summary}'
-    )
-    write_meta_review_weakness: str = (
-        'Please write the weakness of the submission for the following submission you have made to an academic conference. Here are the reviews from the reviewers. Your weakness should summarize the reviews and decisions to help the reviewers to make a decision.'
-        'Here is the submission: {paper}'
-        'Here are the reviews: {reviews}'
-        'Here are the rebuttals: {rebuttals}'
-        'Here is the summary of the reviews: {summary}'
-    )
-    write_meta_review_decision: str = (
-        'Please make an review decision to decide whether the following submission should be accepted or rejected by an academic conference. Here are several reviews from reviewers for this submission. Please indicate your review decision as accept or reject.'
-        'Here is the submission: {paper}'
-        'Here are the reviews: {reviews}'
-        'Here are the rebuttals: {rebuttals}'
-        'Here is the summary of the reviews: {summary}'
-        'Here is the strength of the submission: {strength}'
-        'Here is the weakness of the submission: {weakness}'
-    )
-    write_rebuttal: str = (
-        'Please write a rebuttal for the following submission you have made to an academic conference. Here are the reviews and decisions from the reviewers. Your rebuttal should rebut the reviews to convince the reviewers to accept your submission.'
-        'Here is the submission: {paper}'
-        'Here are the reviews: {review}'
-    )
-    discuss: str = (
-        'Please continue in a conversation with other fellow researchers for me, where you will address their concerns in a scholarly way. '
-        'Here are the messages from other researchers: {message}'
-    )
+    write_bio: Dict[str, Union[str, List[str]]] = {
+        'intro': "Based on the list of the researcher's first person persona from different times, please write a comprehensive first person persona. Focus more on more recent personas. Be concise and clear (around 300 words).",
+        'examples': ['', ''],
+        'template': 'Here are the personas from different times: {publication_info}',
+    }
+    review_literature: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Given the profile of me, keywords, some recent paper titles and abstracts, could you summarize the keywords of high-level research backgrounds and insights in this field (related to my profile if possible)?',
+        'examples': ['', ''],
+        'template': 'Here is my profile biology: {profile_bio}\nHere are the research domains: {domains}\nHere are some recent paper titles and abstracts: {papers}',
+    }
+    brainstorm_idea: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Here is a high-level summarized insight of a research field. How do you view this field? Do you have any novel ideas or insights? Please give me 3 to 5 novel ideas and insights in bullet points. Each bullet point should be concise, containing 2 or 3 sentences.',
+        'examples': ['', ''],
+        'template': 'Here is the insight: {insights}',
+    }
+    discuss_idea: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Given a list of research ideas, please summarize them by removing duplicates and resolving any contradictory ideas by selecting the more reasonable one.',
+        'examples': ['', ''],
+        'template': 'Here are the research ideas:\n{ideas}\n',
+    }
+    write_paper: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write a paper based on the following ideas and external data. To save time, you only need to write the abstract. You might use two or more of these ideas if they are related and work well together.',
+        'examples': ['', ''],
+        'template': 'Here is the idea: {idea}\nHere are the external data, which is a list of abstracts of related papers: {papers}',
+    }
+    write_review_summary: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write a summary of the paper for the following submission you have made to an academic conference.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}',
+    }
+    write_review_strength: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write the strength of the paper for the following submission you have made to an academic conference.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere is the summary of the paper: {summary}',
+    }
+    write_review_weakness: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write the weakness of the paper for the following submission you have made to an academic conference.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere is the summary of the paper: {summary}',
+    }
+    write_review_score: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please provide a score for the following submission you have made to an academic conference. The score should be between 1 and 10, where 1 is the lowest and 10 is the highest.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere is the summary of the paper: {summary}\nHere is the strength of the paper: {strength}\nHere is the weakness of the paper: {weakness}',
+    }
+    write_meta_review_summary: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write a summary of the reviews for the following submission you have made to an academic conference. Your summary should summarize the reviews and decisions to help the reviewers to make a decision.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere are the reviews: {reviews}\nHere are the rebuttals: {rebuttals}',
+    }
+    write_meta_review_strength: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write the strength of the submission for the following submission you have made to an academic conference. Your strength should summarize the reviews and decisions to help the reviewers to make a decision.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere are the reviews: {reviews}\nHere are the rebuttals: {rebuttals}\nHere is the summary of the reviews: {summary}',
+    }
+    write_meta_review_weakness: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write the weakness of the submission for the following submission you have made to an academic conference. Your weakness should summarize the reviews and decisions to help the reviewers to make a decision.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere are the reviews: {reviews}\nHere are the rebuttals: {rebuttals}\nHere is the summary of the reviews: {summary}',
+    }
+    write_meta_review_decision: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please make a review decision to decide whether the following submission should be accepted or rejected by an academic conference. Please indicate your review decision as accept or reject.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere are the reviews: {reviews}\nHere are the rebuttals: {rebuttals}\nHere is the summary of the reviews: {summary}\nHere is the strength of the submission: {strength}\nHere is the weakness of the submission: {weakness}',
+    }
+    write_rebuttal: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please write a rebuttal for the following submission you have made to an academic conference. Your rebuttal should rebut the reviews to convince the reviewers to accept your submission.',
+        'examples': ['', ''],
+        'template': 'Here is the submission: {paper}\nHere are the reviews: {review}',
+    }
+    discuss: Dict[str, Union[str, List[str]]] = {
+        'intro': 'Please continue in a conversation with other fellow researchers for me, where you will address their concerns in a scholarly way.',
+        'examples': ['', ''],
+        'template': 'Here are the messages from other researchers: {message}',
+    }
 
     model_config = ConfigDict(
         extra='allow',
@@ -586,12 +477,6 @@ class Config(BaseModel):
             'write_bio': [
                 '{publication_info}',
             ],
-            'find_collaborators': [
-                '{max_number}',
-                '{self_serialize_all}',
-                '{task_serialize_all}',
-                '{collaborators_serialize_all}',
-            ],
             'review_literature': ['{profile_bio}', '{domains}', '{papers}'],
             'brainstorm_idea': ['{insights}'],
             'discuss_idea': ['{ideas}'],
@@ -625,7 +510,7 @@ class Config(BaseModel):
         }
 
         for template_name, placeholders in required_placeholders.items():
-            template = templates.get(template_name, '')
+            template = templates.get(template_name, '')['template']
             for placeholder in placeholders:
                 assert (
                     placeholder in template
@@ -656,7 +541,7 @@ class Config(BaseModel):
         }
 
         for template_name, placeholders in required_placeholders.items():
-            template = templates.get(template_name, '')
+            template = templates.get(template_name, '')['template']
             for placeholder in placeholders:
                 assert (
                     placeholder in template
diff --git a/research_town/utils/agent_prompter.py b/research_town/utils/agent_prompter.py
index 9b827f2..c6ebb30 100644
--- a/research_town/utils/agent_prompter.py
+++ b/research_town/utils/agent_prompter.py
@@ -2,6 +2,7 @@ from beartype import beartype
 from beartype.typing import Dict, List, Optional, Tuple, Union
 
 from .model_prompting import model_prompting
+from .prompt_constructor import openai_format_prompt_construct
 from .string_mapper import (
     map_idea_list_to_str,
     map_idea_to_str,
@@ -17,7 +18,7 @@ from .string_mapper import (
 @beartype
 def write_bio_prompting(
     publication_info: str,
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     model_name: str = 'together_ai/mistralai/Mixtral-8x7B-Instruct-v0.1',
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
@@ -29,10 +30,10 @@ def write_bio_prompting(
     Write bio based on personal research history
     """
     template_input = {'publication_info': publication_info}
-    prompt = prompt_template.format_map(template_input)
+    messages = openai_format_prompt_construct(prompt_template, template_input)
     return model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -47,25 +48,25 @@ def review_literature_prompting(
     papers: List[Dict[str, str]],
     domains: List[str],
     model_name: str,
-    prompt_template_review_literature: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
     top_p: Optional[float] = None,
     stream: Optional[bool] = None,
 ) -> List[str]:
-    abstracts = [paper['abstract'] for paper in papers]
+    papers_str = map_paper_list_to_str(papers)
+    domains_str = '; '.join(domains)
+    template_input = {
+        'profile_bio': profile['bio'],
+        'domains': domains_str,
+        'papers': papers_str,
+    }
+    messages = openai_format_prompt_construct(prompt_template, template_input)
 
-    review_literature_prompt = prompt_template_review_literature.format_map(
-        {
-            'profile_bio': profile['bio'],
-            'domains': '; '.join(domains),
-            'papers': '; '.join(abstracts),
-        }
-    )
     return model_prompting(
         model_name,
-        review_literature_prompt,
+        messages,
         return_num,
         max_token_num,
         temperature,
@@ -78,7 +79,7 @@ def review_literature_prompting(
 def brainstorm_idea_prompting(
     insights: List[Dict[str, str]],
     model_name: str,
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -86,10 +87,11 @@ def brainstorm_idea_prompting(
     stream: Optional[bool] = None,
 ) -> List[str]:
     insights_str = map_insight_list_to_str(insights)
-    prompt = prompt_template.format_map({'insights': insights_str})
+    template_input = {'insights': insights_str}
+    messages = openai_format_prompt_construct(prompt_template, template_input)
     return model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -102,7 +104,7 @@ def brainstorm_idea_prompting(
 def discuss_idea_prompting(
     ideas: List[Dict[str, str]],
     model_name: str,
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -110,10 +112,11 @@ def discuss_idea_prompting(
     stream: Optional[bool] = None,
 ) -> List[str]:
     ideas_str = map_idea_list_to_str(ideas)
-    prompt = prompt_template.format_map({'ideas': ideas_str})
+    template_input = {'ideas': ideas_str}
+    messages = openai_format_prompt_construct(prompt_template, template_input)
     return model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -127,7 +130,7 @@ def write_paper_prompting(
     idea: Dict[str, str],
     papers: List[Dict[str, str]],
     model_name: str,
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -136,10 +139,11 @@ def write_paper_prompting(
 ) -> List[str]:
     idea_str = map_idea_to_str(idea)
     papers_str = map_paper_list_to_str(papers)
-    prompt = prompt_template.format_map({'idea': idea_str, 'papers': papers_str})
+    template_input = {'idea': idea_str, 'papers': papers_str}
+    messages = openai_format_prompt_construct(prompt_template, template_input)
     return model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -152,10 +156,10 @@ def write_paper_prompting(
 def write_review_prompting(
     paper: Dict[str, str],
     model_name: str,
-    summary_prompt_template: str,
-    strength_prompt_template: str,
-    weakness_prompt_template: str,
-    score_prompt_template: str,
+    summary_prompt_template: Dict[str, Union[str, List[str]]],
+    strength_prompt_template: Dict[str, Union[str, List[str]]],
+    weakness_prompt_template: Dict[str, Union[str, List[str]]],
+    score_prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -163,10 +167,13 @@ def write_review_prompting(
     stream: Optional[bool] = None,
 ) -> Tuple[str, str, str, int]:
     paper_str = map_paper_to_str(paper)
-    summary_prompt = summary_prompt_template.format_map({'paper': paper_str})
+    summary_template_input = {'paper': paper_str}
+    summary_messages = openai_format_prompt_construct(
+        summary_prompt_template, summary_template_input
+    )
     summary = model_prompting(
         model_name,
-        summary_prompt,
+        summary_messages,
         return_num,
         max_token_num,
         temperature,
@@ -174,15 +181,18 @@ def write_review_prompting(
         stream,
     )[0]
 
-    strength_prompt = strength_prompt_template.format_map(
-        {'paper': paper_str, 'summary': summary}
+    strength_template_input = {'paper': paper_str, 'summary': summary}
+    strength_messages = openai_format_prompt_construct(
+        strength_prompt_template, strength_template_input
     )
-    weakness_prompt = weakness_prompt_template.format_map(
-        {'paper': paper_str, 'summary': summary}
+    weakness_template_input = {'paper': paper_str, 'summary': summary}
+    weakness_messages = openai_format_prompt_construct(
+        weakness_prompt_template, weakness_template_input
     )
+
     strength = model_prompting(
         model_name,
-        strength_prompt,
+        strength_messages,
         return_num,
         max_token_num,
         temperature,
@@ -191,7 +201,7 @@ def write_review_prompting(
     )[0]
     weakness = model_prompting(
         model_name,
-        weakness_prompt,
+        weakness_messages,
         return_num,
         max_token_num,
         temperature,
@@ -199,16 +209,23 @@ def write_review_prompting(
         stream,
     )[0]
 
-    score_prompt = score_prompt_template.format_map(
-        {
-            'paper': paper_str,
-            'summary': summary,
-            'strength': strength,
-            'weakness': weakness,
-        }
+    score_template_input = {
+        'paper': paper_str,
+        'summary': summary,
+        'strength': strength,
+        'weakness': weakness,
+    }
+    score_messages = openai_format_prompt_construct(
+        score_prompt_template, score_template_input
     )
     score_str = model_prompting(
-        model_name, score_prompt, return_num, max_token_num, temperature, top_p, stream
+        model_name,
+        score_messages,
+        return_num,
+        max_token_num,
+        temperature,
+        top_p,
+        stream,
     )[0]
     score = int(score_str[0]) if score_str[0].isdigit() else 0
 
@@ -221,10 +238,10 @@ def write_meta_review_prompting(
     reviews: List[Dict[str, Union[int, str]]],
     rebuttals: List[Dict[str, str]],
     model_name: str,
-    summary_prompt_template: str,
-    strength_prompt_template: str,
-    weakness_prompt_template: str,
-    decision_prompt_template: str,
+    summary_prompt_template: Dict[str, Union[str, List[str]]],
+    strength_prompt_template: Dict[str, Union[str, List[str]]],
+    weakness_prompt_template: Dict[str, Union[str, List[str]]],
+    decision_prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -234,12 +251,17 @@ def write_meta_review_prompting(
     paper_str = map_paper_to_str(paper)
     reviews_str = map_review_list_to_str(reviews)
     rebuttals_str = map_rebuttal_list_to_str(rebuttals)
-    summary_prompt = summary_prompt_template.format_map(
-        {'paper': paper_str, 'reviews': reviews_str, 'rebuttals': rebuttals_str}
+    summary_template_input = {
+        'paper': paper_str,
+        'reviews': reviews_str,
+        'rebuttals': rebuttals_str,
+    }
+    summary_messages = openai_format_prompt_construct(
+        summary_prompt_template, summary_template_input
     )
     summary = model_prompting(
         model_name,
-        summary_prompt,
+        summary_messages,
         return_num,
         max_token_num,
         temperature,
@@ -247,25 +269,28 @@ def write_meta_review_prompting(
         stream,
     )[0]
 
-    strength_prompt = strength_prompt_template.format_map(
-        {
-            'paper': paper_str,
-            'reviews': reviews_str,
-            'rebuttals': rebuttals_str,
-            'summary': summary,
-        }
+    strength_template_input = {
+        'paper': paper_str,
+        'reviews': reviews_str,
+        'rebuttals': rebuttals_str,
+        'summary': summary,
+    }
+    weakness_template_input = {
+        'paper': paper_str,
+        'reviews': reviews_str,
+        'rebuttals': rebuttals_str,
+        'summary': summary,
+    }
+    strength_messages = openai_format_prompt_construct(
+        strength_prompt_template, strength_template_input
     )
-    weakness_prompt = weakness_prompt_template.format_map(
-        {
-            'paper': paper_str,
-            'reviews': reviews_str,
-            'rebuttals': rebuttals_str,
-            'summary': summary,
-        }
+    weakness_messages = openai_format_prompt_construct(
+        weakness_prompt_template, weakness_template_input
     )
+
     strength = model_prompting(
         model_name,
-        strength_prompt,
+        strength_messages,
         return_num,
         max_token_num,
         temperature,
@@ -274,7 +299,7 @@ def write_meta_review_prompting(
     )[0]
     weakness = model_prompting(
         model_name,
-        weakness_prompt,
+        weakness_messages,
         return_num,
         max_token_num,
         temperature,
@@ -282,19 +307,20 @@ def write_meta_review_prompting(
         stream,
     )[0]
 
-    decision_prompt = decision_prompt_template.format_map(
-        {
-            'paper': paper_str,
-            'reviews': reviews_str,
-            'rebuttals': rebuttals_str,
-            'summary': summary,
-            'strength': strength,
-            'weakness': weakness,
-        }
+    decision_template_input = {
+        'paper': paper_str,
+        'reviews': reviews_str,
+        'rebuttals': rebuttals_str,
+        'summary': summary,
+        'strength': strength,
+        'weakness': weakness,
+    }
+    decision_messages = openai_format_prompt_construct(
+        decision_prompt_template, decision_template_input
     )
     decision_str = model_prompting(
         model_name,
-        decision_prompt,
+        decision_messages,
         return_num,
         max_token_num,
         temperature,
@@ -311,7 +337,7 @@ def write_rebuttal_prompting(
     paper: Dict[str, str],
     review: Dict[str, Union[int, str]],
     model_name: str,
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -320,10 +346,11 @@ def write_rebuttal_prompting(
 ) -> List[str]:
     paper_str = map_paper_to_str(paper)
     review_str = map_review_to_str(review)
-    prompt = prompt_template.format_map({'paper': paper_str, 'review': review_str})
+    template_input = {'paper': paper_str, 'review': review_str}
+    messages = openai_format_prompt_construct(prompt_template, template_input)
     return model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
diff --git a/research_town/utils/eval_prompter.py b/research_town/utils/eval_prompter.py
index fd5f330..f56380b 100644
--- a/research_town/utils/eval_prompter.py
+++ b/research_town/utils/eval_prompter.py
@@ -2,6 +2,7 @@ from beartype import beartype
 from beartype.typing import Dict, List, Optional, Union
 
 from .model_prompting import model_prompting
+from .prompt_constructor import openai_format_prompt_construct
 from .string_mapper import (
     map_idea_to_str,
     map_insight_list_to_str,
@@ -19,7 +20,7 @@ from .string_mapper import (
 def research_insight_quality_eval_prompting(
     model_name: str,
     insight: Dict[str, str],
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -27,10 +28,10 @@ def research_insight_quality_eval_prompting(
     stream: Optional[bool] = None,
 ) -> str:
     input_data = {'insight': map_insight_to_str(insight)}
-    prompt = prompt_template.format_map(input_data)
+    messages = openai_format_prompt_construct(prompt_template, input_data)
     insight_eval = model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -45,7 +46,7 @@ def research_idea_quality_eval_prompting(
     model_name: str,
     insights: List[Dict[str, str]],
     idea: Dict[str, str],
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -56,10 +57,10 @@ def research_idea_quality_eval_prompting(
         'idea': map_idea_to_str(idea),
         'insights': map_insight_list_to_str(insights),
     }
-    prompt = prompt_template.format_map(input_data)
+    messages = openai_format_prompt_construct(prompt_template, input_data)
     idea_eval = model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -75,7 +76,7 @@ def research_paper_submission_quality_eval_prompting(
     insights: List[Dict[str, str]],
     idea: Dict[str, str],
     paper: Dict[str, str],
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -87,10 +88,10 @@ def research_paper_submission_quality_eval_prompting(
         'idea': map_idea_to_str(idea),
         'paper': map_paper_to_str(paper),
     }
-    prompt = prompt_template.format_map(input_data)
+    messages = openai_format_prompt_construct(prompt_template, input_data)
     paper_eval = model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -106,7 +107,7 @@ def research_review_quality_eval_prompting(
     idea: Dict[str, str],
     paper: Dict[str, str],
     review: Dict[str, Union[int, str]],
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -119,10 +120,10 @@ def research_review_quality_eval_prompting(
         'paper': map_paper_to_str(paper),
         'review': map_review_to_str(review),
     }
-    prompt = prompt_template.format_map(input_data)
+    messages = openai_format_prompt_construct(prompt_template, input_data)
     review_eval = model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -139,7 +140,7 @@ def research_rebuttal_quality_eval_prompting(
     paper: Dict[str, str],
     review: Dict[str, Union[int, str]],
     rebuttal: Dict[str, str],
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -153,10 +154,10 @@ def research_rebuttal_quality_eval_prompting(
         'review': map_review_to_str(review),
         'rebuttal': map_rebuttal_to_str(rebuttal),
     }
-    prompt = prompt_template.format_map(input_data)
+    messages = openai_format_prompt_construct(prompt_template, input_data)
     rebuttal_eval = model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
@@ -174,7 +175,7 @@ def research_meta_review_quality_eval_prompting(
     reviews: List[Dict[str, Union[int, str]]],
     rebuttals: List[Dict[str, str]],
     meta_review: Dict[str, str],
-    prompt_template: str,
+    prompt_template: Dict[str, Union[str, List[str]]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -189,10 +190,10 @@ def research_meta_review_quality_eval_prompting(
         'rebuttals': map_rebuttal_list_to_str(rebuttals),
         'meta_review': map_meta_review_to_str(meta_review),
     }
-    prompt = prompt_template.format_map(input_data)
+    messages = openai_format_prompt_construct(prompt_template, input_data)
     meta_review_eval = model_prompting(
         model_name,
-        prompt,
+        messages,
         return_num=return_num,
         max_token_num=max_token_num,
         temperature=temperature,
diff --git a/research_town/utils/model_prompting.py b/research_town/utils/model_prompting.py
index f9f907f..522d52c 100644
--- a/research_town/utils/model_prompting.py
+++ b/research_town/utils/model_prompting.py
@@ -1,6 +1,6 @@
 import litellm
 from beartype import beartype
-from beartype.typing import List, Optional
+from beartype.typing import Dict, List, Optional
 
 from .error_handler import api_calling_error_exponential_backoff
 
@@ -9,7 +9,7 @@ from .error_handler import api_calling_error_exponential_backoff
 @api_calling_error_exponential_backoff(retries=5, base_wait_time=1)
 def model_prompting(
     llm_model: str,
-    prompt: str,
+    messages: List[Dict[str, str]],
     return_num: Optional[int] = 1,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -22,7 +22,7 @@ def model_prompting(
     """
     completion = litellm.completion(
         model=llm_model,
-        messages=[{'role': 'user', 'content': prompt}],
+        messages=messages,
         max_tokens=max_token_num,
         # for some models, 'n'(The number of chat completion choices ) is not supported.
         n=return_num,
diff --git a/research_town/utils/prompt_constructor.py b/research_town/utils/prompt_constructor.py
new file mode 100644
index 0000000..3f9cef6
--- /dev/null
+++ b/research_town/utils/prompt_constructor.py
@@ -0,0 +1,25 @@
+from typing import Any, Dict, List, Union
+
+
+def openai_format_prompt_construct(
+    template: Dict[str, Union[str, List[str]]], input_data: Dict[str, Any]
+) -> List[Dict[str, str]]:
+    messages = []
+    intro = template['intro']
+    assert isinstance(intro, str)
+    messages.append({'role': 'system', 'content': intro})
+
+    examples = template['examples']
+    assert len(examples) % 2 == 0
+    for i, example in enumerate(examples):
+        if i % 2 == 0:
+            messages.append({'role': 'system', 'content': example})
+        else:
+            messages.append({'role': 'user', 'content': example})
+
+    assert isinstance(template['template'], str)
+    query = template['template'].format(**input_data)
+    assert isinstance(query, str)
+    messages.append({'role': 'user', 'content': query})
+
+    return messages
diff --git a/scripts/get_default_config.py b/scripts/get_default_config.py
new file mode 100644
index 0000000..e5867e8
--- /dev/null
+++ b/scripts/get_default_config.py
@@ -0,0 +1,4 @@
+from research_town.configs import Config
+
+config = Config()
+config.save_to_yaml('../configs/default_config.yaml')


Test patch:
diff --git a/tests/configs/test_configs.py b/tests/configs/test_configs.py
index 431335b..aff09af 100644
--- a/tests/configs/test_configs.py
+++ b/tests/configs/test_configs.py
@@ -13,10 +13,11 @@ def test_default_initialization() -> None:
     assert config.param.proj_participant_num == 3
     assert config.param.domain == 'computer_vision'
     assert config.param.reviewer_num == 3
-    assert config.agent_prompt_template.discuss == (
-        'Please continue in a conversation with other fellow researchers for me, where you will address their concerns in a scholarly way. '
-        'Here are the messages from other researchers: {message}'
-    )
+    assert config.agent_prompt_template.discuss == {
+        'intro': 'Please continue in a conversation with other fellow researchers for me, where you will address their concerns in a scholarly way.',
+        'examples': ['', ''],
+        'template': 'Here are the messages from other researchers: {message}',
+    }
 
 
 def test_yaml_loading() -> None:
@@ -55,9 +56,19 @@ def test_merging_configurations() -> None:
     new_config = {
         'param': {'related_paper_num': 5},
         'agent_prompt_template': {
-            'find_collaborators': 'template2 {profile_bio} {domains}'
+            'write_rebuttal': {
+                'intro': 'hello',
+                'examples': ['a', 'b'],
+                'template': 'template2 {profile_bio} {domains}',
+            }
+        },
+        'eval_prompt_template': {
+            'idea_quality': {
+                'intro': 'hello',
+                'examples': ['a', 'b'],
+                'template': 'template2 {profile_bio} {domains}',
+            }
         },
-        'eval_prompt_template': {'idea_quality': 'template2 {profile_bio} {domains}'},
     }
 
     config = Config()
@@ -72,13 +83,16 @@ def test_merging_configurations() -> None:
     assert config.param.related_paper_num == 5
     assert config.param.proj_participant_num == 10
     assert config.agent_prompt_template.test == 'template1'  # type: ignore
-    assert (
-        config.agent_prompt_template.find_collaborators
-        == 'template2 {profile_bio} {domains}'
-    )
-    assert (
-        config.eval_prompt_template.idea_quality == 'template2 {profile_bio} {domains}'
-    )
+    assert config.agent_prompt_template.write_rebuttal == {
+        'intro': 'hello',
+        'examples': ['a', 'b'],
+        'template': 'template2 {profile_bio} {domains}',
+    }
+    assert config.eval_prompt_template.idea_quality == {
+        'intro': 'hello',
+        'examples': ['a', 'b'],
+        'template': 'template2 {profile_bio} {domains}',
+    }
 
 
 def test_yaml_serialization() -> None:
@@ -99,13 +113,13 @@ def test_placeholder_check() -> None:
     config = Config()
     config.check_agent_prompt_template_placeholder()
 
-    config.agent_prompt_template.write_rebuttal = 'missing {test}'
+    config.agent_prompt_template.write_rebuttal['template'] = 'missing {test}'
     with pytest.raises(AssertionError):
         config.check_agent_prompt_template_placeholder()
 
     config = Config()
     config.check_eval_prompt_template_placeholder()
 
-    config.eval_prompt_template.insight_quality = 'missing {test}'
+    config.eval_prompt_template.insight_quality['template'] = 'missing {test}'
     with pytest.raises(AssertionError):
         config.check_eval_prompt_template_placeholder()
diff --git a/tests/mocks/mocking_func.py b/tests/mocks/mocking_func.py
index d59d391..d94134b 100644
--- a/tests/mocks/mocking_func.py
+++ b/tests/mocks/mocking_func.py
@@ -1,4 +1,4 @@
-from beartype.typing import Any, List, Optional
+from beartype.typing import Any, Dict, List, Optional
 from pydantic import BaseModel
 
 from research_town.configs import AgentPromptTemplateConfig, EvalPromptTemplateConfig
@@ -10,7 +10,7 @@ def mock_papers(corpus: List[str], query: str, num: int) -> List[str]:
 
 def mock_prompting(
     llm_model: str,
-    prompt: str,
+    prompt: List[Dict[str, str]],
     return_num: Optional[int] = 3,
     max_token_num: Optional[int] = 512,
     temperature: Optional[float] = 0.0,
@@ -20,83 +20,82 @@ def mock_prompting(
 ) -> List[str]:
     agent_template_config = AgentPromptTemplateConfig()
     eval_template_config = EvalPromptTemplateConfig()
-
-    # Check which template the prompt matches
-    if prompt.startswith(agent_template_config.write_bio.split('{')[0]):
+    if prompt[0]['content'] == agent_template_config.write_bio['intro']:
         return ['Bio1', 'Bio2', 'Bio3']
-    if prompt.startswith(agent_template_config.find_collaborators.split('{')[0]):
-        return ['Collaborator1', 'Collaborator2', 'Collaborator3']
-    elif prompt.startswith(agent_template_config.review_literature.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.review_literature['intro']:
         return ['Insight1', 'Insight2', 'Insight3']
-    elif prompt.startswith(agent_template_config.brainstorm_idea.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.brainstorm_idea['intro']:
         return ['Idea1', 'Idea2', 'Idea3']
-    elif prompt.startswith(agent_template_config.discuss_idea.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.discuss_idea['intro']:
         return ['Summarized idea1', 'Summarized idea2', 'Summarized idea3']
-    elif prompt.startswith(agent_template_config.write_paper.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.write_paper['intro']:
         return ['Paper abstract1', 'Paper abstract2', 'Paper abstract3']
-    elif prompt.startswith(agent_template_config.write_review_summary.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.write_review_summary['intro']:
         return [
             'Summary of the paper1',
             'Summary of the paper2',
             'Summary of the paper3',
         ]
-    elif prompt.startswith(agent_template_config.write_review_strength.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.write_review_strength['intro']:
         return [
             'Strength of the paper1',
             'Strength of the paper2',
             'Strength of the paper3',
         ]
-    elif prompt.startswith(agent_template_config.write_review_weakness.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.write_review_weakness['intro']:
         return [
             'Weakness of the paper1',
             'Weakness of the paper2',
             'Weakness of the paper3',
         ]
-    elif prompt.startswith(agent_template_config.write_review_score.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.write_review_score['intro']:
         return ['8', '7', '6']
-    elif prompt.startswith(
-        agent_template_config.write_meta_review_summary.split('{')[0]
+    elif (
+        prompt[0]['content'] == agent_template_config.write_meta_review_summary['intro']
     ):
         return ['Meta review summary1', 'Meta review summary2', 'Meta review summary3']
-    elif prompt.startswith(
-        agent_template_config.write_meta_review_strength.split('{')[0]
+    elif (
+        prompt[0]['content']
+        == agent_template_config.write_meta_review_strength['intro']
     ):
         return [
             'Meta review strength1',
             'Meta review strength2',
             'Meta review strength3',
         ]
-    elif prompt.startswith(
-        agent_template_config.write_meta_review_weakness.split('{')[0]
+    elif (
+        prompt[0]['content']
+        == agent_template_config.write_meta_review_weakness['intro']
     ):
         return [
             'Meta review weakness1',
             'Meta review weakness2',
             'Meta review weakness3',
         ]
-    elif prompt.startswith(
-        agent_template_config.write_meta_review_decision.split('{')[0]
+    elif (
+        prompt[0]['content']
+        == agent_template_config.write_meta_review_decision['intro']
     ):
         return ['accept', 'accept', 'reject']
-    elif prompt.startswith(agent_template_config.write_rebuttal.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.write_rebuttal['intro']:
         return ['Rebuttal text1', 'Rebuttal text2', 'Rebuttal text3']
-    elif prompt.startswith(agent_template_config.discuss.split('{')[0]):
+    elif prompt[0]['content'] == agent_template_config.discuss['intro']:
         return [
             'Continued conversation1',
             'Continued conversation2',
             'Continued conversation3',
         ]
-    elif prompt.startswith(eval_template_config.insight_quality.split('{')[0]):
+    elif prompt[0]['content'] == eval_template_config.insight_quality['intro']:
         return ['Insight quality1', 'Insight quality2', 'Insight quality3']
-    elif prompt.startswith(eval_template_config.idea_quality.split('{')[0]):
+    elif prompt[0]['content'] == eval_template_config.idea_quality['intro']:
         return ['Idea quality1', 'Idea quality2', 'Idea quality3']
-    elif prompt.startswith(eval_template_config.paper_quality.split('{')[0]):
+    elif prompt[0]['content'] == eval_template_config.paper_quality['intro']:
         return ['Paper quality1', 'Paper quality2', 'Paper quality3']
-    elif prompt.startswith(eval_template_config.review_quality.split('{')[0]):
+    elif prompt[0]['content'] == eval_template_config.review_quality['intro']:
         return ['Review quality1', 'Review quality2', 'Review quality3']
-    elif prompt.startswith(eval_template_config.rebuttal_quality.split('{')[0]):
+    elif prompt[0]['content'] == eval_template_config.rebuttal_quality['intro']:
         return ['Rebuttal quality1', 'Rebuttal quality2', 'Rebuttal quality3']
-    elif prompt.startswith(eval_template_config.meta_review_quality.split('{')[0]):
+    elif prompt[0]['content'] == eval_template_config.meta_review_quality['intro']:
         return ['Meta review quality1', 'Meta review quality2', 'Meta review quality3']
 
     return ['Default response1', 'Default response2', 'Default response3']
diff --git a/tests/utils/test_model_prompting.py b/tests/utils/test_model_prompting.py
index 97b73a2..d1f8853 100644
--- a/tests/utils/test_model_prompting.py
+++ b/tests/utils/test_model_prompting.py
@@ -3,9 +3,12 @@ from research_town.utils.model_prompting import model_prompting
 
 def test_openai_call() -> None:
     # supported by OPENAI_API_KEY
-    prompt = (
-        'Here is a high-level summarized insight of a research field Machine Learning. '
-    )
+    prompt = [
+        {
+            'role': 'user',
+            'content': 'Here is a high-level summarized insight of a research field Machine Learning. ',
+        }
+    ]
     response = model_prompting('gpt-3.5-turbo', prompt, mode='TEST')
     assert response is not None
     assert len(response) > 0
@@ -14,9 +17,12 @@ def test_openai_call() -> None:
 
 def test_togetherai_mistral_call() -> None:
     # supported by TOGETHERAI_API_KEY
-    prompt = (
-        'Here is a high-level summarized insight of a research field Machine Learning. '
-    )
+    prompt = [
+        {
+            'role': 'user',
+            'content': 'Here is a high-level summarized insight of a research field Machine Learning. ',
+        }
+    ]
     response = model_prompting(
         'together_ai/mistralai/Mixtral-8x7B-Instruct-v0.1', prompt, mode='TEST'
     )