From 0146d1bf8a134623296924b793dda748cf4657db Mon Sep 17 00:00:00 2001 From: agentson Date: Wed, 25 Feb 2026 01:16:51 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Gemini=20compressed=20prompt=20=ED=82=A4?= =?UTF-8?q?=20=EB=B6=88=EC=9D=BC=EC=B9=98=20=EB=B0=8F=20=ED=95=B4=EC=99=B8?= =?UTF-8?q?=20=EC=8A=A4=EC=BA=90=EB=84=88=20GUBN=3D0=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20(#242,=20#243)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - prompt_optimizer: build_compressed_prompt의 JSON 키를 act/conf/reason에서 action/confidence/rationale로 수정 (parse_response와 일치시킴) → Gemini 응답 100% HOLD로 처리되던 버그 수정 - overseas: fetch_overseas_rankings의 GUBN 파라미터를 1(상승)에서 0(전체)으로 변경 → 변동성 스캐너가 상승/하락 모두 대상으로 NASDAQ 후보 발견 가능 - test: GUBN==0 검증, build_compressed_prompt 키 이름 검증 추가 Co-Authored-By: Claude Sonnet 4.6 --- src/brain/prompt_optimizer.py | 4 ++-- src/broker/overseas.py | 2 +- tests/test_overseas_broker.py | 2 +- tests/test_token_efficiency.py | 4 ++++ 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/brain/prompt_optimizer.py b/src/brain/prompt_optimizer.py index 7dc2c17..fdc0d99 100644 --- a/src/brain/prompt_optimizer.py +++ b/src/brain/prompt_optimizer.py @@ -179,8 +179,8 @@ class PromptOptimizer: # Minimal instructions prompt = ( f"{market_name} trader. Analyze:\n{data_str}\n\n" - 'Return JSON: {"act":"BUY"|"SELL"|"HOLD","conf":<0-100>,"reason":""}\n' - "Rules: act=BUY/SELL/HOLD, conf=0-100, reason=concise. No markdown." + 'Return JSON: {"action":"BUY"|"SELL"|"HOLD","confidence":<0-100>,"rationale":""}\n' + "Rules: action=BUY/SELL/HOLD, confidence=0-100, rationale=concise. No markdown." ) else: # Data only (for cached contexts where instructions are known) diff --git a/src/broker/overseas.py b/src/broker/overseas.py index 84b0fdb..13f3903 100644 --- a/src/broker/overseas.py +++ b/src/broker/overseas.py @@ -133,7 +133,7 @@ class OverseasBroker: "AUTH": "", "EXCD": ranking_excd, "NDAY": "0", - "GUBN": "1", + "GUBN": "0", # 0=전체(상승+하락), 1=상승만 — 변동성 스캐너는 전체 필요 "VOL_RANG": "0", } diff --git a/tests/test_overseas_broker.py b/tests/test_overseas_broker.py index 65d6d60..3f346f6 100644 --- a/tests/test_overseas_broker.py +++ b/tests/test_overseas_broker.py @@ -124,7 +124,7 @@ class TestFetchOverseasRankings: assert "/uapi/overseas-stock/v1/ranking/updown-rate" in url assert params["EXCD"] == "NAS" assert params["NDAY"] == "0" - assert params["GUBN"] == "1" + assert params["GUBN"] == "0" # 0=전체(상승+하락), 변동성 스캐너에 필요 assert params["VOL_RANG"] == "0" overseas_broker._broker._auth_headers.assert_called_with("HHDFS76290000") diff --git a/tests/test_token_efficiency.py b/tests/test_token_efficiency.py index 96bcbfc..c049d1c 100644 --- a/tests/test_token_efficiency.py +++ b/tests/test_token_efficiency.py @@ -124,6 +124,10 @@ class TestPromptOptimizer: assert len(prompt) < 300 assert "005930" in prompt assert "75000" in prompt + # Keys must match parse_response expectations (#242) + assert '"action"' in prompt + assert '"confidence"' in prompt + assert '"rationale"' in prompt def test_build_compressed_prompt_no_instructions(self): """Test compressed prompt without instructions.""" -- 2.49.1