Help on BokehJS/CustomJS to update plot from pandas dataframe?

Thanks so much for the help. I am taking a Javascript code and hopefully can understand the language a little better :stuck_out_tongue:
If I have two multiselect widgets, should I define two seperate callbacks like I have done below if I would like to update the content of the other multiselect tool to only show inputs that have values/are valid. This question is maybe related more to javascript?
Again thanks for taking the time to help! Starting to understand the callback a little more now.

import pandas as pd
from bokeh.io import show
from bokeh.layouts import column
from bokeh.models import CDSView, ColumnDataSource, GroupFilter, BooleanFilter, MultiSelect
from bokeh.plotting import figure

df = pd.DataFrame({'MC_Temperature': [20, 40, 80, 10, 10, 20, 50, 50, 10, 10],
                   'Matrix_Name': ['LAT-200', 'LAT-200/LTA-202 80/20', 'LAT-220', 'LAT-200', 'LAT-200/LTA-202 80/20', 'LAT-220', 'LAT-200', 'LAT-200/LTA-202 80/20', 'LAT-220', 'LAT-220'],
                   'Tracer_Content': [10, 2, 1, 10, 2, 1, 1, 2, 1, 2], 
                   'Average_time_hours': [10, 2, 1, 8, 10, 2, 1, 8, 10, 2],
                   'Concentration': np.random.randint(low=1, high=100, size=10)})

source = ColumnDataSource(df)

plot_size_and_tools = {'plot_height': 400, 'plot_width': 400,
                        'tools':['box_select', 'reset', 'help']}
Temperature = 50
temp_filter = BooleanFilter([True if temp == Temperature else False for temp in source.data['MC_Temperature']])

tracerContent = 1
tc_filter = BooleanFilter([True if tc == tracerContent else False for tc in source.data['Tracer_Content']])

selectoroptions = [str(x) for x in sorted(df.MC_Temperature.unique())]
#temp_selector = Select(title = "Temperature: ", value = "All", options = selectoroptions)
temp_multi_select = MultiSelect(title="Temperature:",
                           options=selectoroptions)

selectoroptions = [str(x) for x in sorted(df.Tracer_Content.unique())]
#temp_selector = Select(title = "Temperature: ", value = "All", options = selectoroptions)
tc_multi_select = MultiSelect(title="Tracer Content:",
                           options=selectoroptions)

temp_multi_select.js_on_change('value', CustomJS(args=dict(f=temp_filter, source=source),
                                      code="""\
                                          const temp = cb_obj.value;
                                          f.booleans = Array.from(source.data['MC_Temperature']).map(d =>  temp.includes(d != null && d.toString()));
                                          // Needed because of https://github.com/bokeh/bokeh/issues/7273
                                          source.change.emit();
                                      """))

tc_multi_select.js_on_change('value', CustomJS(args=dict(f=tc_filter, source=source),
                                      code="""\
                                          const tc = cb_obj.value;
                                          f.booleans = Array.from(source.data['Tracer_Content']).map(d => tc.includes(d != null && d.toString()));
                                          // Needed because of https://github.com/bokeh/bokeh/issues/7273
                                          source.change.emit();
                                      """))

p = figure(title="Temp only", **plot_size_and_tools)
p.circle(x='Average_time_hours', y='Concentration', source=source, view=CDSView(source=source, filters=[temp_filter, tc_filter]), color='red')

output_file('tester.html')
show(column(temp_multi_select, tc_multi_select, p))