Skip to content

Commit 188be02

Browse files
committed
feat(operator): add price sort toggle to model selection menu
[$] cycles through: unsorted → cheapest first → most expensive first. [0] toggles between curated and full model list. Both compose — sort applies to whichever list is currently shown.
1 parent 1b34705 commit 188be02

1 file changed

Lines changed: 74 additions & 15 deletions

File tree

operator/lib/guided-init.sh

Lines changed: 74 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)