Commit Graph

23 Commits

Author SHA1 Message Date
Ponshu Developer bcba78a533 feat(ai): Gemini 2段階解析実装(OCR→フル解析)でhallucination低減
Stage1でOCR専念(name/brand/prefecture確定)、Stage2で確定済み制約を
プロンプトに埋め込み残フィールドを推定する2段階フロー。
東魁→東魁盛のような銘柄補完hallucination緩和が目的。

- 直接APIモード(consumer APK)のみ2段階。プロキシ/キャッシュは従来通り。
- Stage1失敗時は1段階フォールバック(堅牢性維持)
- AnalyzingDialog: stageNotifier対応・ステップ1/2のメッセージ切り替え表示
- APIコール数は実質2倍(1日20回→実質10回相当)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 16:37:57 +09:00
Ponshu Developer 582553ccfa fix(ai): 再解析を専用プロンプト+temperature=0.3に変更(東魁hallucination対策)
- reanalyzeSakeLabel() を新設: 前回のname/brandを渡し「本当に正しいか?」と問い直す
- 通常解析(temperature=0)と再解析(temperature=0.3)を分離
  → 同じ画像で毎回同じ誤答を返す問題を解消
- _callDirectApi に temperature パラメータを追加
2026-04-23 13:07:55 +09:00
Ponshu Developer 1bf59e02cc fix(stability): エラーハンドリング強化・クラッシュ防止 (v1.0.45)
- backup_service: 復元ループを per-item try-catch に変更
  一件のJSONパース失敗でも他のアイテムが正常に復元されるよう修正
  rating/markup/score の num→double キャスト安全化も同時適用

- camera_analysis_mixin: cast<String>() を whereType<String>() に変更
  旧Hiveデータや型不一致でも新規登録がクラッシュしなくなる

- add_set_item_dialog: 空catchブロックにSnackBar通知を追加
  画像選択失敗時にユーザーへフィードバックを表示するよう修正

- Image.file() errorBuilder を6ファイルに追加
  sake_3d_carousel / sake_3d_carousel_with_reason / sake_search_delegate /
  sake_detail_sliver_app_bar (×2) / sake_photo_edit_modal /
  sakenowa_ranking_section — 画像ファイルが削除済みでも黒画面/クラッシュなし

- gemini_service: Device ID の debugPrint を kDebugMode ガードに変更

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 07:31:21 +09:00
Ponshu Developer 0fb4f6ea8b fix(ai): ハルシネーション防止を一般化・N文字ルール追加・6銘柄例示
- systemInstruction をOCR専門システムとして再定義(東魁限定から一般化)
- 「ラベルにN文字なら必ずN文字のみ出力」ルールを明示化
- 東魁/男山/白鹿/久保田/白鶴/松竹梅の6銘柄例を追加
- 出力前セルフチェック手順をプロンプトに追加
- menu_pricing_screen: SharedPreferences を async/await+try-catch に修正
- version: 1.0.43+50 → 1.0.44+51
- web: eiji/maita 向け consumer APK (v1.0.44) を配置・ダウンロードページ更新

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 00:26:13 +09:00
Ponshu Developer e82f66e44e fix: prevent EXP farming on cache hits + fix tasteStats validation
- SakeAnalysisResult.isFromCache flag added (not serialized to JSON)
- Both cache-hit paths return result.asCached() to signal caller
- camera_screen: EXP +10 only awarded on fresh API calls, not cache hits
- camera_screen: show '解析済みの結果を使用(経験値なし)' on cache hit
- camera_screen: clear _capturedImages after successful analysis
- camera_screen: catch(_) -> catch(e) with debugPrint logging
- SakeAnalysisResult.fromJson: auto-fill missing tasteStats keys with 3,
  clamp all values to 1-5 range to prevent broken charts
- Bump version 1.0.37+44 -> 1.0.38+45

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:46:42 +09:00
Ponshu Developer 3c3458ffb8 fix: restore detail spec inference while keeping name/brand/prefecture OCR-strict
- name, brand, prefecture: still OCR-strict (no completion/inference)
- alcoholContent, polishingRatio, tasteStats etc: restored from label + sake knowledge
- Overly strict 'no knowledge at all' rule was causing all detail specs to return null
- Sync fallback prompt with same policy
- Bump version 1.0.36+43 -> 1.0.37+44

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 15:52:50 +09:00
Ponshu Developer 3643ab7690 fix: replace sommelier role with OCR system role to prevent brand name hallucination
- Rewrote prompt: 'ソムリエ' role -> pure OCR system role
- Explicit prohibition on brand name completion/correction
  (e.g. label shows 東魁 -> output 東魁, never 東魁盛)
- prefecture: output null if not written on label; inference from brand knowledge forbidden
- tasteStats: default to mid-value 3 instead of 'reasonable estimate' (was encouraging hallucination)
- Added concrete examples for white-deer, kubota, tokai cases
- Bumped version 1.0.35+42 -> 1.0.36+43

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 13:53:47 +09:00
Ponshu Developer 69b446ee17 fix: address code review findings - crash fixes, proxy OCR accuracy, lint cleanup
- tools/proxy/server.js: add systemInstruction + temperature 0 (fixes brand name hallucination e.g. Tokai->Tokaisou)
- gemini_service.dart: add cache read/write to proxy path (was missing, cache was dead code in production)
- camera_screen.dart: guard cameras.first crash when no camera available, add mounted checks in gallery loop
- sake_detail_screen.dart: remove unused gemini_service import, add ignore comment for showDialog context lint
- sake_basic_info_section.dart: remove redundant null-assert operators flagged by dart analyze
- dev_menu_screen.dart: remove unused gemini_service import
- 6 service files: remove emoji from log strings (project rule compliance, 60+ instances)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 13:30:00 +09:00
Ponshu Developer b3e1f5d0a3 chore: Phase 1 code quality improvements - POSIMAI_BASE_URL explicit, no emoji in logs, model comment update
Made-with: Cursor
2026-04-12 13:23:52 +09:00
Ponshu Developer 3d934deb56 fix: address remaining code audit findings and bump to v1.0.32
- migration_service: runMigration() now returns bool; main.dart only
  advances migration_version when migration succeeds
- sakenowa_service: add 30s timeout to all 6 http.get calls
- gemini_service: add 60s timeout to Direct API generateContent call
- gemini_service: guard response.body error log with kDebugMode
- Remove emoji from debugPrint in core service/screen files
  (gemini_service, analysis_cache_service, network_service,
   draft_service, camera_screen)

Made-with: Cursor
2026-04-12 07:25:24 +09:00
Ponshu Developer 94f7ee20ea refactor: code quality improvements based on critical review
Made-with: Cursor
2026-04-12 00:09:09 +09:00
Ponshu Developer cd57171670 fix: strengthen AI label recognition prompt and repo cleanup
Made-with: Cursor
2026-04-11 15:46:44 +09:00
Ponshu Developer 675e67e3c1 refactor: デッドコード削除 — analyzeSakeHybrid/analyzeSakeText
- gemini_service.dart: 未使用の analyzeSakeHybrid / analyzeSakeText を削除
  (どこからも呼ばれておらず、画像直接解析 analyzeSakeLabel のみ使用中)
- main.dart: isProVersion を「現在未使用」コメントに更新
- version: 1.0.28+35

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 09:19:03 +09:00
Ponshu Developer d23ee8ed77 fix: AI解析プロンプトの銘柄名補完バグを修正
- 銘柄名(name)と蔵元名(brand)はラベルの文字をそのまま使うよう明示
  「東魁」→「東魁盛」のような知識補完を禁止する指示を追加
- 全3プロンプト(画像解析・ハイブリッド・テキストのみ)に適用
- version: 1.0.27+34

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-11 08:58:02 +09:00
Ponshu Developer fedfc6fa62 fix: code review fixes — data integrity, safety, architecture
C-2: draft_service — $i+1 → ${i+1} 文字列補間バグ修正
C-1: sake_item — setter内の unawaited save() を削除(呼び出し元で明示的に await)
H-2: sake_detail_screen — 再解析前に実ファイル存在チェック追加
M-4: gemini_exceptions.dart 新規作成、[CONGESTION]文字列マッチ→型チェックに変更
C-4: main.dart — migration_completed フラグ→ migration_version 番号管理に移行
     既存ユーザーのデータは migration_version=1 扱いで安全に互換維持

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 08:26:53 +09:00
Ponshu Developer 182e498188 fix: save as draft when Gemini 503 exhausts all retries
When API congestion persists after 3 retries + fallback:
- Mark exception with [CONGESTION] tag
- camera_screen catches it and calls DraftService.saveDraft()
- Shows orange snackbar (same UX as offline) instead of red error

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 19:17:30 +09:00
Ponshu Developer 0d741c4cb0 fix: add retry + fallback for Gemini 503 UNAVAILABLE errors
- Retry up to 3 times with exponential backoff on 503/UNAVAILABLE
- Fall back to gemini-2.0-flash on final attempt
- Replace raw JSON error with user-friendly Japanese message

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 19:04:40 +09:00
Ponshu Developer b6163e8efe chore: guard DevMenu in release build, clean up Phase/TODO comments
- DevMenu: kReleaseModeのときonTap=nullでリリースビルドから完全無効化
- Phase N マーカーを全ファイルから削除(実装済みのため歴史的コメントを除去)
- analysis_cache_service TODOを具体的な記述に改善

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 03:02:01 +09:00
Ponshu Developer 3502694d89 feat: Add Bearer Token authentication to AI Proxy and disable CORS
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 11:34:00 +09:00
Ponshu Developer d89b6917fa feat: v1.0.16 brushup + Synology Proxy integration
- fix: Replace hardcoded colors with AppColors theme
- refactor: Extract SakePhotoEditModal and SakeMbtiStampSection
- feat: Add taste chart manual editing feature
- test: Add unit tests for SakeItem and AnalysisCacheService (14 tests)
- feat: Add Synology AI Proxy server (Node.js/Docker)
- chore: Make useProxy configurable via dart-define
- chore: Add .apk/.aab/.ipa to .gitignore
- docs: Add proxy setup guide and project roadmap

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 00:13:12 +09:00
Ponshu Developer 21833e4e75 feat: Code quality improvements (v1.0-full-with-qr)
 Improvements:
- Replace print() with debugPrint() (7 instances)
- Migrate withOpacity to withValues (9 instances)
- Remove unused imports (2 files)
- Fix BuildContext async gaps with mounted checks
- Remove unused local variables

📊 Analysis Results:
- Flutter analyzer: 57 → 46 issues (-11)
- Security audit: Passed 
- Code quality: Production ready 

🎯 Purpose:
Complete snapshot before QR feature removal.
This is the last version with full QR functionality.

🤖 Generated with Claude Code & Antigravity

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-30 00:54:22 +09:00
Ponshu Developer 6507ab9596 feat: enhance AI spec extraction 2026-01-16 00:53:44 +09:00
Ponshu Developer 5f2802728d v1.0.8 - Original (Ponshu Room Lite MVP Complete) 2026-01-11 17:17:29 +09:00