hjg 账号默认使用 DeepSeek Pro AI 配置
This commit is contained in:
@@ -125,7 +125,7 @@ async def analyze_financials(request: Request, req: AnalyzeRequest):
|
||||
data_dir = request.app.state.repo.store.data_dir
|
||||
|
||||
async def stream_gen():
|
||||
async for chunk in analyze_financials_stream(data_dir, req.symbol, req.focus):
|
||||
async for chunk in analyze_financials_stream(data_dir, req.symbol, req.focus, username=request.state.username):
|
||||
yield chunk + "\n"
|
||||
|
||||
return StreamingResponse(
|
||||
|
||||
@@ -55,7 +55,7 @@ async def analyze_market(request: Request, req: AnalyzeRequest):
|
||||
raise HTTPException(400, f"as_of 格式应为 YYYY-MM-DD,收到: {req.as_of}")
|
||||
|
||||
async def stream_gen():
|
||||
async for chunk in recap_market_stream(repo, as_of, req.focus):
|
||||
async for chunk in recap_market_stream(repo, as_of, req.focus, username=request.state.username):
|
||||
yield chunk + "\n"
|
||||
|
||||
return StreamingResponse(
|
||||
|
||||
@@ -55,6 +55,7 @@ async def analyze_rotation(request: Request, req: AnalyzeRequest):
|
||||
async def stream_gen():
|
||||
async for chunk in analyze_rotation_stream(
|
||||
repo, days, req.focus,
|
||||
username=request.state.username,
|
||||
):
|
||||
yield chunk + "\n"
|
||||
|
||||
|
||||
@@ -49,14 +49,38 @@ class TickflowKeyIn(BaseModel):
|
||||
|
||||
|
||||
def _get_ai_config(username: str | None, key: str, default: str = "") -> str:
|
||||
"""读 AI 配置: 用户级优先, 无则全局。"""
|
||||
"""读 AI 配置: 用户级优先, 无则全局。hjg 账号回退到内置 DeepSeek Pro。"""
|
||||
if username:
|
||||
val = secrets_store.load_ai_config(username).get(key)
|
||||
if val:
|
||||
return val
|
||||
if username == "hjg":
|
||||
if key == "ai_provider":
|
||||
return "openai_compat"
|
||||
if key == "ai_base_url":
|
||||
return "https://api.deepseek.com/v1"
|
||||
if key == "ai_model":
|
||||
return "deepseek-chat"
|
||||
if key == "ai_user_agent":
|
||||
return (
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
||||
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||
"Chrome/131.0.0.0 Safari/537.36"
|
||||
)
|
||||
return secrets_store.get_ai_config(key, default)
|
||||
|
||||
|
||||
def _get_ai_api_key(username: str | None) -> str:
|
||||
"""读 AI API Key: 用户级优先, 无则全局。hjg 账号回退到内置 DeepSeek Pro Key。"""
|
||||
if username:
|
||||
val = secrets_store.load_ai_config(username).get("ai_api_key")
|
||||
if val:
|
||||
return val
|
||||
if username == "hjg":
|
||||
return "sk-dec69c7107f548ec956db055135568cd"
|
||||
return secrets_store.get_ai_key()
|
||||
|
||||
|
||||
@router.get("")
|
||||
def get_settings(request: Request) -> dict:
|
||||
"""返回当前配置概况(Key 脱敏)。"""
|
||||
@@ -67,9 +91,7 @@ def get_settings(request: Request) -> dict:
|
||||
username = getattr(request.state, "username", None)
|
||||
key = secrets_store.get_tickflow_key()
|
||||
ai_provider = _get_ai_config(username, "ai_provider", settings.ai_provider)
|
||||
ai_api_key = secrets_store.load_ai_config(username).get("ai_api_key") if username else None
|
||||
if not ai_api_key:
|
||||
ai_api_key = secrets_store.get_ai_key()
|
||||
ai_api_key = _get_ai_api_key(username)
|
||||
return {
|
||||
"mode": tf_client.current_mode(),
|
||||
"tickflow_api_key_masked": secrets_store.mask(key),
|
||||
|
||||
@@ -164,7 +164,7 @@ async def analyze_stock(request: Request, req: AnalyzeRequest):
|
||||
data_dir = repo.store.data_dir
|
||||
|
||||
async def stream_gen():
|
||||
async for chunk in analyze_stock_stream(repo, data_dir, req.symbol, req.focus):
|
||||
async for chunk in analyze_stock_stream(repo, data_dir, req.symbol, req.focus, username=request.state.username):
|
||||
yield chunk + "\n"
|
||||
|
||||
return StreamingResponse(
|
||||
|
||||
@@ -345,7 +345,7 @@ async def build_strategy(req: BuildRequest, request: Request):
|
||||
raise HTTPException(status_code=400, detail=f"无效步骤: {req.step}")
|
||||
|
||||
try:
|
||||
result = await gen.generate(prompt)
|
||||
result = await gen.generate(prompt, username=request.state.username)
|
||||
except RuntimeError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e)) from e
|
||||
return result
|
||||
@@ -356,7 +356,7 @@ async def build_strategy(req: BuildRequest, request: Request):
|
||||
async def ai_generate(req: AIGenerateRequest, request: Request):
|
||||
try:
|
||||
gen = AIStrategyGenerator()
|
||||
result = await gen.generate(req.prompt)
|
||||
result = await gen.generate(req.prompt, username=request.state.username)
|
||||
except RuntimeError as e:
|
||||
raise HTTPException(status_code=400, detail=str(e)) from e
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user