@@ -423,6 +423,17 @@ else
423423 MODEL_LIST=" $FULL_MODEL_LIST "
424424 fi
425425
426+ # Sort a TSV model list by prompt price (column 4)
427+ # Args: $1=model_list, $2=sort mode ("asc", "desc", or "none")
428+ sort_model_list () {
429+ local list=" $1 " mode=" $2 "
430+ case " $mode " in
431+ asc) echo " $list " | sort -t$' \t ' -k4 -n ;;
432+ desc) echo " $list " | sort -t$' \t ' -k4 -rn ;;
433+ * ) echo " $list " ;;
434+ esac
435+ }
436+
426437 # Build numbered menu from filtered list
427438 display_model_menu () {
428439 local model_list=" $1 "
@@ -449,18 +460,54 @@ else
449460 done <<< " $model_list"
450461 }
451462
452- echo " Available extraction models:"
453- echo " "
454- display_model_menu " $MODEL_LIST "
463+ # State for the selection loop
464+ SHOW_ALL=false
465+ SORT_MODE=" none" # none → asc → desc → none
466+ CURRENT_LIST=" $MODEL_LIST "
467+
468+ redisplay_menu () {
469+ # Pick base list
470+ if [ " $SHOW_ALL " = true ]; then
471+ local base=" $FULL_MODEL_LIST "
472+ else
473+ local base=" $MODEL_LIST "
474+ fi
475+ CURRENT_LIST=$( sort_model_list " $base " " $SORT_MODE " )
455476
456- # Offer "show all" option for OpenRouter
457- if [ " $AI_PROVIDER " = " openrouter" ]; then
458- TOTAL_COUNT=$( echo " $FULL_MODEL_LIST " | wc -l)
459477 echo " "
460- echo -e " ${YELLOW} [ 0]${NC} Show all ${TOTAL_COUNT} available models"
461- fi
478+ if [ " $SHOW_ALL " = true ]; then
479+ echo " All available models:"
480+ else
481+ echo " Available extraction models:"
482+ fi
483+ # Show sort indicator
484+ case " $SORT_MODE " in
485+ asc) echo -e " ${YELLOW} (sorted: cheapest first)${NC} " ;;
486+ desc) echo -e " ${YELLOW} (sorted: most expensive first)${NC} " ;;
487+ esac
488+ echo " "
489+ display_model_menu " $CURRENT_LIST "
462490
463- echo " "
491+ # Show options footer
492+ echo " "
493+ if [ " $AI_PROVIDER " = " openrouter" ]; then
494+ TOTAL_COUNT=$( echo " $FULL_MODEL_LIST " | wc -l)
495+ if [ " $SHOW_ALL " = true ]; then
496+ echo -e " ${YELLOW} [ 0]${NC} Show curated models only"
497+ else
498+ echo -e " ${YELLOW} [ 0]${NC} Show all ${TOTAL_COUNT} available models"
499+ fi
500+ fi
501+ case " $SORT_MODE " in
502+ none) echo -e " ${YELLOW} [ \$ ]${NC} Sort by price (cheapest first)" ;;
503+ asc) echo -e " ${YELLOW} [ \$ ]${NC} Sort by price (most expensive first)" ;;
504+ desc) echo -e " ${YELLOW} [ \$ ]${NC} Clear price sort" ;;
505+ esac
506+ echo " "
507+ }
508+
509+ # Initial display
510+ redisplay_menu
464511
465512 SELECTING=true
466513 while [ " $SELECTING " = true ]; do
@@ -469,13 +516,25 @@ else
469516 MODEL_CHOICE=1
470517 fi
471518
472- # Handle "show all" for OpenRouter
519+ # Handle "show all / show curated" toggle
473520 if [ " $MODEL_CHOICE " = " 0" ] && [ " $AI_PROVIDER " = " openrouter" ]; then
474- echo " "
475- echo " All available models:"
476- echo " "
477- display_model_menu " $FULL_MODEL_LIST "
478- echo " "
521+ if [ " $SHOW_ALL " = true ]; then
522+ SHOW_ALL=false
523+ else
524+ SHOW_ALL=true
525+ fi
526+ redisplay_menu
527+ continue
528+ fi
529+
530+ # Handle price sort toggle
531+ if [ " $MODEL_CHOICE " = ' $' ]; then
532+ case " $SORT_MODE " in
533+ none) SORT_MODE=" asc" ;;
534+ asc) SORT_MODE=" desc" ;;
535+ desc) SORT_MODE=" none" ;;
536+ esac
537+ redisplay_menu
479538 continue
480539 fi
481540
0 commit comments