cstr commited on
Commit
82b8835
·
verified ·
1 Parent(s): dacc767

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -6
app.py CHANGED
@@ -379,6 +379,13 @@ def get_model_info(model_choice):
379
  return model_id_value, ctx_size
380
  return None, 0
381
 
 
 
 
 
 
 
 
382
  def call_openrouter_api(payload):
383
  """Make a call to OpenRouter API with error handling"""
384
  try:
@@ -711,8 +718,10 @@ def create_app():
711
  value=ALL_MODELS[0][0],
712
  label="Model",
713
  elem_id="model-choice",
714
- allow_custom_value=True # allow custom values
 
715
  )
 
716
  context_display = gr.Textbox(
717
  value=update_context_display(ALL_MODELS[0][0]),
718
  label="Context",
@@ -730,10 +739,15 @@ def create_app():
730
 
731
  # Create a container for the category models dropdown
732
  with gr.Column(visible=True, elem_id="category-models-container") as category_models_container:
 
 
 
 
733
  category_models = gr.Dropdown(
734
- [model[0] for model in MODELS[0]["models"]],
735
  label="Models in Category",
736
- value=MODELS[0]["models"][0][0],
 
737
  allow_custom_value=True
738
  )
739
 
@@ -929,9 +943,9 @@ def create_app():
929
 
930
  # Update model list when category changes
931
  model_categories.change(
932
- fn=update_category_models_ui,
933
  inputs=model_categories,
934
- outputs=category_models_container
935
  )
936
 
937
  # Update main model choice when category model is selected
@@ -940,7 +954,55 @@ def create_app():
940
  inputs=category_models,
941
  outputs=model_choice
942
  )
943
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
944
  # Process uploaded images
945
  image_upload_btn.upload(
946
  fn=lambda files: files,
@@ -1007,6 +1069,9 @@ def create_app():
1007
 
1008
  return demo
1009
 
 
 
 
1010
  # Launch the app
1011
  if __name__ == "__main__":
1012
  # Check API key before starting
 
379
  return model_id_value, ctx_size
380
  return None, 0
381
 
382
+ def get_models_for_category(category):
383
+ """Get model list for a specific category"""
384
+ for cat in MODELS:
385
+ if cat["category"] == category:
386
+ return [model[0] for model in cat["models"]]
387
+ return []
388
+
389
  def call_openrouter_api(payload):
390
  """Make a call to OpenRouter API with error handling"""
391
  try:
 
718
  value=ALL_MODELS[0][0],
719
  label="Model",
720
  elem_id="model-choice",
721
+ elem_classes="model-choice",
722
+ allow_custom_value=True
723
  )
724
+
725
  context_display = gr.Textbox(
726
  value=update_context_display(ALL_MODELS[0][0]),
727
  label="Context",
 
739
 
740
  # Create a container for the category models dropdown
741
  with gr.Column(visible=True, elem_id="category-models-container") as category_models_container:
742
+ # Create a hidden text component to store model choices as JSON
743
+ category_model_choices = gr.Text(visible=False)
744
+
745
+ # Create the dropdown with no initial choices
746
  category_models = gr.Dropdown(
747
+ [],
748
  label="Models in Category",
749
+ value=None,
750
+ elem_classes="category-models",
751
  allow_custom_value=True
752
  )
753
 
 
943
 
944
  # Update model list when category changes
945
  model_categories.change(
946
+ fn=lambda cat: json.dumps(get_models_for_category(cat)),
947
  inputs=model_categories,
948
+ outputs=category_model_choices
949
  )
950
 
951
  # Update main model choice when category model is selected
 
954
  inputs=category_models,
955
  outputs=model_choice
956
  )
957
+
958
+ category_model_choices.change(
959
+ fn=None,
960
+ inputs=None,
961
+ outputs=None,
962
+ _js="""
963
+ function(choices_json) {
964
+ // Parse JSON string to array
965
+ const choices = JSON.parse(choices_json);
966
+
967
+ // Find the dropdown element
968
+ const dropdown = document.querySelector('.category-models select');
969
+
970
+ // Clear existing options
971
+ dropdown.innerHTML = '';
972
+
973
+ // Add new options
974
+ choices.forEach(model => {
975
+ const option = document.createElement('option');
976
+ option.value = model;
977
+ option.textContent = model;
978
+ dropdown.appendChild(option);
979
+ });
980
+
981
+ // Set the first option as selected if available
982
+ if (choices.length > 0) {
983
+ dropdown.value = choices[0];
984
+
985
+ // Update the main model dropdown
986
+ const mainDropdown = document.querySelector('.model-choice select');
987
+ mainDropdown.value = choices[0];
988
+
989
+ // Trigger change events
990
+ dropdown.dispatchEvent(new Event('change', { bubbles: true }));
991
+ mainDropdown.dispatchEvent(new Event('change', { bubbles: true }));
992
+ }
993
+ }
994
+ """
995
+ )
996
+
997
+ # Function to initialize the category models dropdown
998
+ def init_category_models():
999
+ initial_category = MODELS[0]["category"]
1000
+ initial_models = get_models_for_category(initial_category)
1001
+ return json.dumps(initial_models)
1002
+
1003
+ # Set initial choices for category models dropdown
1004
+ category_model_choices.value = init_category_models()
1005
+
1006
  # Process uploaded images
1007
  image_upload_btn.upload(
1008
  fn=lambda files: files,
 
1069
 
1070
  return demo
1071
 
1072
+
1073
+
1074
+
1075
  # Launch the app
1076
  if __name__ == "__main__":
1077
  # Check API key before starting