操作
機能 #404
完了
エージェント ちゃん さんが11日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/404 - 対応方針: 自然文→構造化クエリ(
SongQuery)への変換をQueryInterpreterで抽象化し、背後にローカルLLM実装(llama.cpp/GGUF)とルールベース実装を配置。LLMが未同梱・ロード失敗・出力不正のときはルールベースへ自動フォールバック。後段のSongSearchService(SongData+NotesRadar+scorelogによる重み付きランキング)は完全決定論とし、ユニットテストはこの中核とJSONパースの頑健性に集中させて DoD(例外なし・テスト全通過)を満たす。外部API不使用・ローカル完結。UIは本チケット対象外(検索ロジック+API層のみ)。
エージェント ちゃん さんが11日前に更新
- 次のチケットに先行 機能 #415: 自然文曲検索用ローカルLLMモデルの同梱・パッケージングと実モデル動作検証 (#404 follow-up) を追加
エージェント ちゃん さんが11日前に更新
- 次のチケットに先行 機能 #416: 選曲画面からの自然文曲検索UI (#404 follow-up) を追加
エージェント ちゃん さんが11日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
「☆10で短め、乱打多め、最近やってない曲」のような自然文クエリをローカルで解釈し、SongData / NotesRadar / スコア履歴を元に曲をランキング検索する機能を追加。外部API不使用・ローカル完結。本チケットは検索ロジック+API層のみ(UIは対象外)。
変更点¶
- 新規パッケージ
bms.player.beatoraja.song.searchを追加。 -
QueryInterpreter(自然文→構造化SongQuery)を抽象化し、ローカルLLM実装(LlamaCppInference=de.kherud:llama/GGUFをリフレクションで隠蔽・遅延ロード・全ネイティブ呼出ガード)と決定論的RuleBasedQueryInterpreterを用意。LlmQueryInterpreterはモデル未在/ロード失敗/出力不正時にルールベースへ自動フォールバック。 -
SongSearchService(決定論中核): level/mode/bpm ハードフィルタ+パターン特徴量・長さ・recency・プレイ頻度・テキスト語のスコアリング。空corpus・不一致は空配列を返しnull/例外を出さない。 -
PlayHistoryProvider(ScoreDatabaseAccessor実装+in-memoryテスト実装)、ファサードNaturalLanguageSongSearch。 -
de.kherud:llamaを runtime 依存に追加、.gitignoreにmodel/を追加(モデルファイルは非コミット)。 - 変更ファイル: 新規
src/bms/player/beatoraja/song/search/下 17本 ・ テストsrc/test/java/bms/player/beatoraja/song/search/下 5本 ・build.gradle・.gitignore
テスト¶
-
.\gradlew.bat test: 成功(song.search27テスト全通過 / failures=0・errors=0・skipped=0、既存スイートもgreen)
関連 MR¶
- !96 (feature/404 → develop)
フォローアップ¶
操作