fix: parse_response missing fields 시 raw 보존으로 플레이북 생성 복구 (#245) #246

Merged
jihoson merged 1 commits from feature/issue-245-parse-response-preserve-raw into main 2026-02-25 01:33:35 +09:00
Collaborator

문제

pre_market_plannergemini_client.decide(prompt_override=playbook_prompt)로 Gemini에 플레이북 JSON을 요청한다. Gemini는 {"market_outlook": ..., "stocks": [...]} 형태로 응답하지만:

  1. parse_response(raw)action/confidence/rationale 키를 찾지 못함
  2. rationale = "Missing required fields" 반환 → 실제 응답 소실
  3. _parse_response("Missing required fields", ...) → JSONDecodeError
  4. 폴백: RSI 조건 기반 기본 플레이북 생성
  5. 해외 시장 데이터에 RSI 없음 → 모든 결정이 HOLD (confidence=0)

수정

parse_response에서 필드 누락 시 rationale=raw로 변경:

  • 원본 Gemini 응답(플레이북 JSON)이 decision.rationale에 보존됨
  • _parse_response(decision.rationale, ...) 가 플레이북 JSON을 정상 파싱

영향 범위

  • 일반 거래 결정: 기존 동작 동일 (action/confidence/rationale가 있으면 정상 파싱, 없으면 HOLD)
  • 플레이북 생성: Gemini 플레이북 JSON이 정상 전달되어 실제 Gemini 시나리오 사용 가능

테스트

  • test_json_with_missing_fields_returns_hold: rationale == raw 검증 추가
  • test_non_trade_decision_json_preserves_raw_in_rationale: 플레이북 JSON 보존 신규 테스트
## 문제 `pre_market_planner`는 `gemini_client.decide(prompt_override=playbook_prompt)`로 Gemini에 플레이북 JSON을 요청한다. Gemini는 `{"market_outlook": ..., "stocks": [...]}` 형태로 응답하지만: 1. `parse_response(raw)`가 `action`/`confidence`/`rationale` 키를 찾지 못함 2. `rationale = "Missing required fields"` 반환 → 실제 응답 소실 3. `_parse_response("Missing required fields", ...)` → JSONDecodeError 4. 폴백: RSI 조건 기반 기본 플레이북 생성 5. 해외 시장 데이터에 RSI 없음 → 모든 결정이 HOLD (confidence=0) ## 수정 `parse_response`에서 필드 누락 시 `rationale=raw`로 변경: - 원본 Gemini 응답(플레이북 JSON)이 `decision.rationale`에 보존됨 - `_parse_response(decision.rationale, ...)` 가 플레이북 JSON을 정상 파싱 ## 영향 범위 - 일반 거래 결정: 기존 동작 동일 (action/confidence/rationale가 있으면 정상 파싱, 없으면 HOLD) - 플레이북 생성: Gemini 플레이북 JSON이 정상 전달되어 실제 Gemini 시나리오 사용 가능 ## 테스트 - `test_json_with_missing_fields_returns_hold`: rationale == raw 검증 추가 - `test_non_trade_decision_json_preserves_raw_in_rationale`: 플레이북 JSON 보존 신규 테스트
agentson added 1 commit 2026-02-25 01:32:07 +09:00
fix: parse_response에서 missing fields 시 raw 텍스트 보존 (#245)
Some checks failed
CI / test (pull_request) Has been cancelled
0b20251de0
pre_market_planner는 prompt_override로 Gemini에 플레이북 JSON을 요청한다.
Gemini가 플레이북 JSON을 반환해도 parse_response가 action/confidence/rationale 키가
없다는 이유로 rationale="Missing required fields"를 반환해 실제 응답이 버려졌다.

이로 인해 플레이북 생성이 항상 실패하고 RSI 기반 기본 폴백이 사용됐으며,
RSI가 없는 해외 시장 데이터와 매칭되지 않아 모든 결정이 HOLD(confidence=0)였다.

수정: missing fields 시 rationale=raw로 설정해 실제 Gemini 응답을 보존한다.
pre_market_planner가 decision.rationale에서 플레이북 JSON을 추출하여 정상 파싱 가능.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jihoson merged commit f58d42fdb0 into main 2026-02-25 01:33:35 +09:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#246