This commit is contained in:
MarkLo 2025-11-24 01:03:13 +08:00
parent 22e525778a
commit 357aa45390
2 changed files with 113 additions and 33 deletions

View File

@ -168,20 +168,20 @@ def select_research_depth() -> int:
return choice return choice
def select_shallow_thinking_agent(provider) -> str: def select_shallow_thinking_agent(provider=None) -> str:
""" """
使用互動式選單選擇淺層思維的 LLM 引擎 使用互動式選單選擇淺層思維的 LLM 引擎
參數: 參數:
provider (str): LLM 供應商的名稱 provider (str, optional): LLM 供應商的名稱已廢棄不再使用
返回: 返回:
str: 選擇的 LLM 模型的名稱 str: 選擇的 LLM 模型的名稱
""" """
# 定義不同供應商的淺層思維 LLM 引擎選項 # 定義不同供應商的淺層思維 LLM 引擎選項
SHALLOW_AGENT_OPTIONS = { SHALLOW_AGENT_OPTIONS = {
"openai": [ "OpenAI": [
("GPT-5.1", "gpt-5.1-2025-11-13"), ("GPT-5.1", "gpt-5.1-2025-11-13"),
("GPT-5-mini","gpt-5-mini-2025-08-07"), ("GPT-5-mini","gpt-5-mini-2025-08-07"),
("GPT-5-nano","gpt-5-nano-2025-08-07"), ("GPT-5-nano","gpt-5-nano-2025-08-07"),
@ -189,14 +189,14 @@ def select_shallow_thinking_agent(provider) -> str:
("GPT-4.1-nano", "gpt-4.1-nano"), ("GPT-4.1-nano", "gpt-4.1-nano"),
("o4-mini", "o4-mini-2025-04-16") ("o4-mini", "o4-mini-2025-04-16")
], ],
"anthropic": [ "Anthropic": [
("Claude Haiku 4.5", "claude-haiku-4-5-20251001"), ("Claude Haiku 4.5", "claude-haiku-4-5-20251001"),
("Claude Sonnet 4.5", "claude-sonnet-4-5-20250929"), ("Claude Sonnet 4.5", "claude-sonnet-4-5-20250929"),
("Claude Sonnet 4", "claude-sonnet-4-0"), ("Claude Sonnet 4", "claude-sonnet-4-0"),
("Claude Haiku 3.5", "claude-3-5-haiku-20241022"), ("Claude Haiku 3.5", "claude-3-5-haiku-20241022"),
("Claude Haiku 3", "claude-3-haiku-20240307") ("Claude Haiku 3", "claude-3-haiku-20240307")
], ],
"google": [ "Google": [
("Gemini 2.5 Pro", "gemini-2.5-pro"), ("Gemini 2.5 Pro", "gemini-2.5-pro"),
("Gemini 2.5 Flash", "gemini-2.5-flash"), ("Gemini 2.5 Flash", "gemini-2.5-flash"),
("Gemini 2.5 Flash Lite", "gemini-2.5-flash-lite"), ("Gemini 2.5 Flash Lite", "gemini-2.5-flash-lite"),
@ -219,19 +219,39 @@ def select_shallow_thinking_agent(provider) -> str:
"Qwen":[ "Qwen":[
("Qwen 3 Max", "qwen3-max"), ("Qwen 3 Max", "qwen3-max"),
("Qwen Plus", "qwen-plus") ("Qwen Plus", "qwen-plus")
] ],
"自訂": [("手動輸入模型名稱", "custom")]
} }
choice = questionary.select( # 第一步:選擇供應商
"選擇您的 [快速思維 LLM 引擎]", provider_choice = questionary.select(
# 根據供應商顯示選項 "選擇 [快速思維] 模型供應商:",
choices=[
questionary.Choice(provider_name, value=provider_name)
for provider_name in SHALLOW_AGENT_OPTIONS.keys()
],
instruction="\n- 使用方向鍵導覽\n- 按下 Enter 鍵選擇",
style=questionary.Style(
[
("selected", "fg:cyan noinherit"),
("highlighted", "fg:cyan noinherit"),
("pointer", "fg:cyan noinherit"),
]
),
).ask()
if provider_choice is None:
console.print("\n[red]未選擇供應商。正在結束程式...[/red]")
exit(1)
# 第二步:根據選擇的供應商顯示模型列表
model_choice = questionary.select(
f"選擇 [{provider_choice}] 的快速思維模型:",
choices=[ choices=[
questionary.Choice(display, value=value) questionary.Choice(display, value=value)
for display, value in SHALLOW_AGENT_OPTIONS[provider.lower()] for display, value in SHALLOW_AGENT_OPTIONS[provider_choice]
], ],
# 提供操作說明
instruction="\n- 使用方向鍵導覽\n- 按下 Enter 鍵選擇", instruction="\n- 使用方向鍵導覽\n- 按下 Enter 鍵選擇",
# 設定提示的樣式
style=questionary.Style( style=questionary.Style(
[ [
("selected", "fg:magenta noinherit"), ("selected", "fg:magenta noinherit"),
@ -241,23 +261,43 @@ def select_shallow_thinking_agent(provider) -> str:
), ),
).ask() ).ask()
# 如果使用者沒有選擇,則退出程式 if model_choice is None:
if choice is None:
console.print( console.print(
"\n[red]未選擇快速思維 LLM 引擎。正在結束程式...[/red]" "\n[red]未選擇快速思維 LLM 引擎。正在結束程式...[/red]"
) )
exit(1) exit(1)
# 如果選擇自訂,提示輸入模型名稱
if model_choice == "custom":
model_name = questionary.text(
"請輸入快速思維 LLM 模型名稱:",
validate=lambda x: len(x.strip()) > 0 or "請輸入有效的模型名稱。",
style=questionary.Style(
[
("text", "fg:green"),
("highlighted", "noinherit"),
]
),
).ask()
if not model_name:
console.print(
"\n[red]未提供模型名稱。正在結束程式...[/red]"
)
exit(1)
return model_name.strip()
# 返回選擇的 LLM 模型 # 返回選擇的 LLM 模型
return choice return model_choice
def select_deep_thinking_agent(provider) -> str: def select_deep_thinking_agent(provider=None) -> str:
""" """
使用互動式選單選擇深層思維的 LLM 引擎 使用互動式選單選擇深層思維的 LLM 引擎
參數: 參數:
provider (str): LLM 供應商的名稱 provider (str, optional): LLM 供應商的名稱已廢棄不再使用
返回: 返回:
str: 選擇的 LLM 模型的名稱 str: 選擇的 LLM 模型的名稱
@ -265,7 +305,7 @@ def select_deep_thinking_agent(provider) -> str:
# 定義不同供應商的深層思維 LLM 引擎選項 # 定義不同供應商的深層思維 LLM 引擎選項
DEEP_AGENT_OPTIONS = { DEEP_AGENT_OPTIONS = {
"openai": [ "OpenAI": [
("GPT-5.1", "gpt-5.1-2025-11-13"), ("GPT-5.1", "gpt-5.1-2025-11-13"),
("GPT-5-mini","gpt-5-mini-2025-08-07"), ("GPT-5-mini","gpt-5-mini-2025-08-07"),
("GPT-5-nano","gpt-5-nano-2025-08-07"), ("GPT-5-nano","gpt-5-nano-2025-08-07"),
@ -273,14 +313,14 @@ def select_deep_thinking_agent(provider) -> str:
("GPT-4.1-nano", "gpt-4.1-nano"), ("GPT-4.1-nano", "gpt-4.1-nano"),
("o4-mini", "o4-mini-2025-04-16") ("o4-mini", "o4-mini-2025-04-16")
], ],
"anthropic": [ "Anthropic": [
("Claude Haiku 4.5", "claude-haiku-4-5-20251001"), ("Claude Haiku 4.5", "claude-haiku-4-5-20251001"),
("Claude Sonnet 4.5", "claude-sonnet-4-5-20250929"), ("Claude Sonnet 4.5", "claude-sonnet-4-5-20250929"),
("Claude Sonnet 4", "claude-sonnet-4-0"), ("Claude Sonnet 4", "claude-sonnet-4-0"),
("Claude Haiku 3.5", "claude-3-5-haiku-20241022"), ("Claude Haiku 3.5", "claude-3-5-haiku-20241022"),
("Claude Haiku 3", "claude-3-haiku-20240307") ("Claude Haiku 3", "claude-3-haiku-20240307")
], ],
"google": [ "Google": [
("Gemini 2.5 Pro", "gemini-2.5-pro"), ("Gemini 2.5 Pro", "gemini-2.5-pro"),
("Gemini 2.5 Flash", "gemini-2.5-flash"), ("Gemini 2.5 Flash", "gemini-2.5-flash"),
("Gemini 2.5 Flash Lite", "gemini-2.5-flash-lite"), ("Gemini 2.5 Flash Lite", "gemini-2.5-flash-lite"),
@ -303,19 +343,39 @@ def select_deep_thinking_agent(provider) -> str:
"Qwen":[ "Qwen":[
("Qwen 3 Max", "qwen3-max"), ("Qwen 3 Max", "qwen3-max"),
("Qwen Plus", "qwen-plus") ("Qwen Plus", "qwen-plus")
] ],
"自訂": [("手動輸入模型名稱", "custom")]
} }
choice = questionary.select( # 第一步:選擇供應商
"選擇您的 [深度思維 LLM 引擎]", provider_choice = questionary.select(
# 根據供應商顯示選項 "選擇 [深度思維] 模型供應商:",
choices=[
questionary.Choice(provider_name, value=provider_name)
for provider_name in DEEP_AGENT_OPTIONS.keys()
],
instruction="\n- 使用方向鍵導覽\n- 按下 Enter 鍵選擇",
style=questionary.Style(
[
("selected", "fg:cyan noinherit"),
("highlighted", "fg:cyan noinherit"),
("pointer", "fg:cyan noinherit"),
]
),
).ask()
if provider_choice is None:
console.print("\n[red]未選擇供應商。正在結束程式...[/red]")
exit(1)
# 第二步:根據選擇的供應商顯示模型列表
model_choice = questionary.select(
f"選擇 [{provider_choice}] 的深度思維模型:",
choices=[ choices=[
questionary.Choice(display, value=value) questionary.Choice(display, value=value)
for display, value in DEEP_AGENT_OPTIONS[provider.lower()] for display, value in DEEP_AGENT_OPTIONS[provider_choice]
], ],
# 提供操作說明
instruction="\n- 使用方向鍵導覽\n- 按下 Enter 鍵選擇", instruction="\n- 使用方向鍵導覽\n- 按下 Enter 鍵選擇",
# 設定提示的樣式
style=questionary.Style( style=questionary.Style(
[ [
("selected", "fg:magenta noinherit"), ("selected", "fg:magenta noinherit"),
@ -325,13 +385,33 @@ def select_deep_thinking_agent(provider) -> str:
), ),
).ask() ).ask()
# 如果使用者沒有選擇,則退出程式 if model_choice is None:
if choice is None:
console.print("\n[red]未選擇深度思維 LLM 引擎。正在結束程式...[/red]") console.print("\n[red]未選擇深度思維 LLM 引擎。正在結束程式...[/red]")
exit(1) exit(1)
# 如果選擇自訂,提示輸入模型名稱
if model_choice == "custom":
model_name = questionary.text(
"請輸入深度思維 LLM 模型名稱:",
validate=lambda x: len(x.strip()) > 0 or "請輸入有效的模型名稱。",
style=questionary.Style(
[
("text", "fg:green"),
("highlighted", "noinherit"),
]
),
).ask()
if not model_name:
console.print(
"\n[red]未提供模型名稱。正在結束程式...[/red]"
)
exit(1)
return model_name.strip()
# 返回選擇的 LLM 模型 # 返回選擇的 LLM 模型
return choice return model_choice
def select_llm_provider() -> tuple[str, str]: def select_llm_provider() -> tuple[str, str]:
""" """

View File

@ -2,7 +2,7 @@ import os
DEFAULT_CONFIG = { DEFAULT_CONFIG = {
"project_dir": os.path.abspath(os.path.join(os.path.dirname(__file__), ".")), "project_dir": os.path.abspath(os.path.join(os.path.dirname(__file__), ".")),
"results_dir": os.getenv("TRADINGAGENTS_RESULTS_DIR", "./results"), "results_dir": os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "results")),
"data_dir": os.path.join(os.path.expanduser("~"), "Documents/Code/ScAI/FR1-data"), "data_dir": os.path.join(os.path.expanduser("~"), "Documents/Code/ScAI/FR1-data"),
"data_cache_dir": os.getenv("TRADINGAGENTS_DATA_CACHE_DIR", os.path.join( "data_cache_dir": os.getenv("TRADINGAGENTS_DATA_CACHE_DIR", os.path.join(
os.path.abspath(os.path.join(os.path.dirname(__file__), ".")), os.path.abspath(os.path.join(os.path.dirname(__file__), ".")),