v0.0.5 (#110)
* fix: update OpenRouter API key validation to use /auth/key endpoint and httpx * Refactor code structure for improved readability and maintainability * feat: enhance welcome banner to include file commands indication * feat: update LaTeX setup prompt to use selection UI for better user experience * feat: update version to v0.0.5 in badges and project configuration
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 492 KiB |
@@ -5,5 +5,5 @@
|
||||
<rect x="54" y="5" width="62" height="24" rx="6" fill="#1565c0"/>
|
||||
<text x="85" y="22" text-anchor="middle"
|
||||
font-family="Inter, -apple-system, system-ui, sans-serif"
|
||||
font-size="13" font-weight="700" fill="#ffffff">v0.0.4</text>
|
||||
font-size="13" font-weight="700" fill="#ffffff">v0.0.5</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 555 B After Width: | Height: | Size: 555 B |
@@ -5,5 +5,5 @@
|
||||
<rect x="54" y="5" width="62" height="24" rx="6" fill="#2563eb"/>
|
||||
<text x="85" y="22" text-anchor="middle"
|
||||
font-family="Inter, -apple-system, system-ui, sans-serif"
|
||||
font-size="13" font-weight="700" fill="#ffffff">v0.0.4</text>
|
||||
font-size="13" font-weight="700" fill="#ffffff">v0.0.5</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 555 B After Width: | Height: | Size: 555 B |
@@ -120,6 +120,8 @@ def print_banner(
|
||||
info.append(" \u2022 Type ", style="#ffe082")
|
||||
info.append("/", style="#ffe082 bold")
|
||||
info.append(" for commands", style="#ffe082")
|
||||
info.append(" \u2022 ", style="#ffe082")
|
||||
info.append("@ files", style="#ffe082 bold")
|
||||
info.append(" \u2022 Ctrl+C ", style="#ffe082")
|
||||
info.append("interrupt", style="#ffe082 bold")
|
||||
console.print(info)
|
||||
|
||||
@@ -115,6 +115,8 @@ def _build_welcome_banner(
|
||||
info.append(" \u2022 Type ", style="#ffe082")
|
||||
info.append("/", style="#ffe082 bold")
|
||||
info.append(" for commands", style="#ffe082")
|
||||
info.append(" \u2022 ", style="#ffe082")
|
||||
info.append("@ files", style="#ffe082 bold")
|
||||
info.append(" \u2022 Ctrl+C ", style="#ffe082")
|
||||
info.append("interrupt", style="#ffe082 bold")
|
||||
banner.append_text(info)
|
||||
|
||||
@@ -337,7 +337,7 @@ def validate_siliconflow_key(api_key: str) -> tuple[bool, str]:
|
||||
|
||||
|
||||
def validate_openrouter_key(api_key: str) -> tuple[bool, str]:
|
||||
"""Validate an OpenRouter API key by making a test request.
|
||||
"""Validate an OpenRouter API key via the authenticated /auth/key endpoint.
|
||||
|
||||
Returns:
|
||||
Tuple of (is_valid, message).
|
||||
@@ -346,20 +346,17 @@ def validate_openrouter_key(api_key: str) -> tuple[bool, str]:
|
||||
return True, "Skipped (no key provided)"
|
||||
|
||||
try:
|
||||
import openai
|
||||
import httpx
|
||||
|
||||
client = openai.OpenAI(api_key=api_key, base_url="https://openrouter.ai/api/v1")
|
||||
client.models.list()
|
||||
return True, "Valid"
|
||||
resp = httpx.get(
|
||||
"https://openrouter.ai/api/v1/auth/key",
|
||||
headers={"Authorization": f"Bearer {api_key}"},
|
||||
timeout=10,
|
||||
)
|
||||
if resp.status_code == 200:
|
||||
return True, "Valid"
|
||||
return False, "Invalid API key"
|
||||
except Exception as e:
|
||||
error_str = str(e).lower()
|
||||
if (
|
||||
"401" in error_str
|
||||
or "unauthorized" in error_str
|
||||
or "invalid" in error_str
|
||||
or "authentication" in error_str
|
||||
):
|
||||
return False, "Invalid API key"
|
||||
return False, f"Error: {e}"
|
||||
|
||||
|
||||
@@ -1717,9 +1714,14 @@ def _step_tinytex() -> None:
|
||||
when none is found. The agent can auto-install missing LaTeX packages at
|
||||
runtime via ``tlmgr``, so only the base TinyTeX is needed here.
|
||||
"""
|
||||
prepare = questionary.confirm(
|
||||
"Prepare LaTeX environment? (needed to compile .tex → .pdf)",
|
||||
default=True,
|
||||
latex_choices = [
|
||||
Choice(title="No need (skip LaTeX setup)", value=False),
|
||||
Choice(title="Install now (TinyTeX compiler)", value=True),
|
||||
]
|
||||
prepare = questionary.select(
|
||||
"LaTeX environment (needed to compile .tex → .pdf):",
|
||||
choices=latex_choices,
|
||||
default=False,
|
||||
style=WIZARD_STYLE,
|
||||
qmark=QMARK,
|
||||
).ask()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<a href="https://pypi.org/project/EvoScientist/"><picture>
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-light.svg">
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-dark.svg">
|
||||
<img alt="PyPI v0.0.4" src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-light.svg" height="28">
|
||||
<img alt="PyPI v0.0.5" src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-light.svg" height="28">
|
||||
</picture></a><a href="https://EvoScientist.github.io/"><picture>
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-website-light.svg">
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-website-dark.svg">
|
||||
@@ -47,14 +47,14 @@ Moving beyond traditional human-in-the-loop systems, EvoScientist adopts a human
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_awards.JPG" height="180" alt="ICAIS 2025 Awards"/>
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/asta_bench_data.png" height="180" alt="AstaBench Data Analysis #1"/>
|
||||
<br />
|
||||
<sub><b>Best Paper & Appraisal Award</b></sub>
|
||||
<sub><b>#1 on AstaBench Data Analysis</b></sub>
|
||||
</td>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_best_paper.png" height="180" alt="Best Paper"/>
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/asta_bench_code.png" height="180" alt="AstaBench Code & Execution #1"/>
|
||||
<br />
|
||||
<sub><b>AI-Generated Best Paper</b></sub>
|
||||
<sub><b>#1 on AstaBench Code & Execution</b></sub>
|
||||
</td>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/deepresearch_bench_2.JPG" height="180" alt="DeepResearch Bench II #1"/>
|
||||
@@ -62,9 +62,16 @@ Moving beyond traditional human-in-the-loop systems, EvoScientist adopts a human
|
||||
<sub><b>#1 on DeepResearch Bench II</b></sub>
|
||||
</td>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/asta_bench_code.png" height="180" alt="AstaBench Code & Execution #1"/>
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_awards.JPG" height="180" alt="ICAIS 2025 Awards"/>
|
||||
<br />
|
||||
<sub><b>#1 on AstaBench Code & Execution</b></sub>
|
||||
<sub><b>Best Paper & Appraisal Award</b></sub>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_best_paper.png" height="180" alt="Best Paper"/>
|
||||
<br />
|
||||
<sub><b>AI-Generated Best Paper</b></sub>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -102,7 +109,8 @@ Moving beyond traditional human-in-the-loop systems, EvoScientist adopts a human
|
||||
> Looking for ready-to-use research skills? Check out [**EvoSkills**](https://github.com/EvoScientist/EvoSkills) — powered by [**EvoScientist**](https://github.com/EvoScientist/EvoScientist)'s engine and installable skills, the entire end-to-end research lifecycle is covered out of the box. [**EvoSkills**](https://github.com/EvoScientist/EvoSkills) are also compatible with other CLI coding agents.
|
||||
|
||||
## 🔥 News
|
||||
- **[25 Mar 2026]** 🥇 Ranked #1 on [AstaBench Code & Execution](https://huggingface.co/spaces/allenai/asta-bench-leaderboard) at submission time! [**Leaderboard**](https://allenai-asta-bench-leaderboard.hf.space/code-execution) 👈
|
||||
- **[26 Jun 2026]** 🥇 Ranked #1 on [AstaBench Data Analysis](https://allenai-asta-bench-leaderboard.hf.space/home) at submission time! [**Leaderboard**](https://allenai-asta-bench-leaderboard.hf.space/data-analysis) 👈
|
||||
- **[25 Mar 2026]** 🥇 Ranked #1 on [AstaBench Code & Execution](https://allenai-asta-bench-leaderboard.hf.space/home) at submission time! [**Leaderboard**](https://allenai-asta-bench-leaderboard.hf.space/code-execution) 👈
|
||||
- **[13 Mar 2026]** 🚀 [**EvoScientist**](https://github.com/EvoScientist/EvoScientist) officially debuts!
|
||||
- **[11 Mar 2026]** ⛳ Technical Report is live! [**Check it out**](https://arxiv.org/abs/2603.08127) 👈
|
||||
- **[06 Mar 2026]** 🥇 Ranked #1 on [DeepResearch Bench II](https://agentresearchlab.com/benchmarks/deepresearch-bench-ii/index.html#leaderboard) at submission time! [**Leaderboard**](https://agentresearchlab.com/benchmarks/deepresearch-bench-ii/index.html#leaderboard) 👈
|
||||
|
||||
+16
-8
@@ -15,7 +15,7 @@
|
||||
<a href="https://pypi.org/project/EvoScientist/"><picture>
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-light.svg">
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-dark.svg">
|
||||
<img alt="PyPI v0.0.4" src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-light.svg" height="28">
|
||||
<img alt="PyPI v0.0.5" src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-pypi-light.svg" height="28">
|
||||
</picture></a><a href="https://EvoScientist.github.io/"><picture>
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-website-light.svg">
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/badge-website-dark.svg">
|
||||
@@ -54,14 +54,14 @@ EvoScientist 超越了传统的人在回路(Human-in-the-Loop)模式,采
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_awards.JPG" height="180" alt="ICAIS 2025 Awards"/>
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/asta_bench_data.png" height="180" alt="AstaBench Data Analysis #1"/>
|
||||
<br />
|
||||
<sub><b>Best Paper & Appraisal Award</b></sub>
|
||||
<sub><b>AstaBench 数据分析榜 第一名</b></sub>
|
||||
</td>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_best_paper.png" height="180" alt="Best Paper"/>
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/asta_bench_code.png" height="180" alt="AstaBench Code & Execution #1"/>
|
||||
<br />
|
||||
<sub><b>AI-Generated Best Paper</b></sub>
|
||||
<sub><b>AstaBench 代码与执行榜 第一名</b></sub>
|
||||
</td>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/deepresearch_bench_2.JPG" height="180" alt="DeepResearch Bench II #1"/>
|
||||
@@ -69,9 +69,16 @@ EvoScientist 超越了传统的人在回路(Human-in-the-Loop)模式,采
|
||||
<sub><b>DeepResearch Bench II 第一名</b></sub>
|
||||
</td>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/asta_bench_code.png" height="180" alt="AstaBench Code & Execution #1"/>
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_awards.JPG" height="180" alt="ICAIS 2025 Awards"/>
|
||||
<br />
|
||||
<sub><b>AstaBench 代码与执行榜 第一名</b></sub>
|
||||
<sub><b>Best Paper & Appraisal Award</b></sub>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="25%">
|
||||
<img src="https://raw.githubusercontent.com/EvoScientist/EvoScientist/main/.github/assets/ICAIS_best_paper.png" height="180" alt="Best Paper"/>
|
||||
<br />
|
||||
<sub><b>AI-Generated Best Paper</b></sub>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -111,7 +118,8 @@ EvoScientist 超越了传统的人在回路(Human-in-the-Loop)模式,采
|
||||
|
||||
## 🔥 动态
|
||||
|
||||
- **[2026 年 3 月 25 日]** 🥇 提交时在 [AstaBench 代码与执行](https://huggingface.co/spaces/allenai/asta-bench-leaderboard) 排名第一 👈
|
||||
- **[2026 年 6 月 26 日]** 🥇 提交时在 [AstaBench 数据分析](https://allenai-asta-bench-leaderboard.hf.space/home) 排名第一 👈
|
||||
- **[2026 年 3 月 25 日]** 🥇 提交时在 [AstaBench 代码与执行](https://allenai-asta-bench-leaderboard.hf.space/home) 排名第一 👈
|
||||
- **[2026 年 3 月 13 日]** 🚀 [**EvoScientist**](https://github.com/EvoScientist/EvoScientist) 正式亮相!
|
||||
- **[2026 年 3 月 11 日]** ⛳ 技术报告已上线 👈
|
||||
- **[2026 年 3 月 6 日]** 🥇 提交时在 [DeepResearch Bench II](https://agentresearchlab.com/benchmarks/deepresearch-bench-ii/index.html#leaderboard) 排名第一 👈
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "EvoScientist"
|
||||
version = "0.0.4"
|
||||
version = "0.0.5"
|
||||
description = "EvoScientist: Towards Self-Evolving AI Scientists for End-to-End Scientific Discovery"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
|
||||
@@ -1248,7 +1248,7 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._print_step_skipped") as mock_ps,
|
||||
patch("EvoScientist.config.onboard.console"),
|
||||
):
|
||||
mock_q.confirm.return_value.ask.return_value = False
|
||||
mock_q.select.return_value.ask.return_value = False
|
||||
_step_tinytex()
|
||||
mock_ps.assert_called_once_with("LaTeX", "skipped")
|
||||
|
||||
@@ -1269,7 +1269,7 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._print_latex_status") as mock_status,
|
||||
patch("EvoScientist.config.onboard.console"),
|
||||
):
|
||||
mock_q.confirm.return_value.ask.return_value = True
|
||||
mock_q.select.return_value.ask.return_value = True
|
||||
_step_tinytex()
|
||||
mock_status.assert_called_once()
|
||||
|
||||
@@ -1291,7 +1291,7 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._auto_install_latexmk") as mock_auto,
|
||||
patch("EvoScientist.config.onboard.console"),
|
||||
):
|
||||
mock_q.confirm.return_value.ask.return_value = True
|
||||
mock_q.select.return_value.ask.return_value = True
|
||||
_step_tinytex()
|
||||
mock_auto.assert_called_once()
|
||||
|
||||
@@ -1319,6 +1319,7 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._print_latex_status"),
|
||||
patch("EvoScientist.config.onboard.console"),
|
||||
):
|
||||
mock_q.select.return_value.ask.return_value = True
|
||||
mock_q.confirm.return_value.ask.return_value = True
|
||||
_step_tinytex()
|
||||
mock_pr.assert_called_once_with("LaTeX", "TinyTeX installed")
|
||||
@@ -1341,8 +1342,8 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._print_step_skipped") as mock_ps,
|
||||
patch("EvoScientist.config.onboard.console"),
|
||||
):
|
||||
# First confirm (prepare) = True, second confirm (install) = False
|
||||
mock_q.confirm.return_value.ask.side_effect = [True, False]
|
||||
mock_q.select.return_value.ask.return_value = True
|
||||
mock_q.confirm.return_value.ask.return_value = False
|
||||
_step_tinytex()
|
||||
mock_ps.assert_called_once_with("LaTeX", "skipped")
|
||||
|
||||
@@ -1368,6 +1369,7 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._print_step_result") as mock_pr,
|
||||
patch("EvoScientist.config.onboard.console"),
|
||||
):
|
||||
mock_q.select.return_value.ask.return_value = True
|
||||
mock_q.confirm.return_value.ask.return_value = True
|
||||
_step_tinytex()
|
||||
mock_pr.assert_called_once_with(
|
||||
@@ -1396,6 +1398,7 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._print_step_result") as mock_pr,
|
||||
patch("EvoScientist.config.onboard.console") as mock_con,
|
||||
):
|
||||
mock_q.select.return_value.ask.return_value = True
|
||||
mock_q.confirm.return_value.ask.return_value = True
|
||||
_step_tinytex()
|
||||
path_warning_printed = any(
|
||||
@@ -1424,7 +1427,6 @@ class TestStepTinytex:
|
||||
patch("EvoScientist.config.onboard._print_step_skipped") as mock_ps,
|
||||
patch("EvoScientist.config.onboard.console"),
|
||||
):
|
||||
# Only one confirm call (prepare=True), no second confirm for manual
|
||||
mock_q.confirm.return_value.ask.return_value = True
|
||||
mock_q.select.return_value.ask.return_value = True
|
||||
_step_tinytex()
|
||||
mock_ps.assert_called_once_with("LaTeX", "manual install needed")
|
||||
|
||||
Reference in New Issue
Block a user