changed fields
This commit is contained in:
@@ -100,7 +100,7 @@ class OllamaModelEditComponent(AsyncCard):
|
||||
ui.label('Common Parameters').classes('text-md font-medium mt-2 mb-3')
|
||||
|
||||
# Temperature
|
||||
self.build_float_component(label='Temperature', switch_binding='use_temperature', value_binding='temperature',
|
||||
self.build_slider_component(label='Temperature', switch_binding='use_temperature', value_binding='temperature',
|
||||
value_min=0.0, value_max=2.0, value_step=0.1,
|
||||
value=model_parameters['temperature'] if 'temperature' in model_parameters else None,
|
||||
value_default=0.8,
|
||||
@@ -112,7 +112,7 @@ class OllamaModelEditComponent(AsyncCard):
|
||||
if model_info_key.endswith('context_length'):
|
||||
model_context_length = model_info_value
|
||||
|
||||
self.build_float_component('Context Length', 'use_num_ctx', 'num_ctx', 512, model_context_length, 1,
|
||||
self.build_slider_component('Context Length', 'use_num_ctx', 'num_ctx', 512, model_context_length, 1,
|
||||
model_parameters['num_ctx'] if 'num_ctx' in model_parameters else None,
|
||||
4096,
|
||||
'Size of the context window used to generate the next token. Default: 4096')
|
||||
@@ -132,56 +132,50 @@ class OllamaModelEditComponent(AsyncCard):
|
||||
with ui.expansion('Generation', icon='tune', group='creation_group').classes('w-full mb-2'):
|
||||
with ui.column().classes('w-full gap-1 pt-2'):
|
||||
# Top K
|
||||
with ui.row().classes('items-center gap-2 w-full'):
|
||||
ui.switch().bind_value(self, 'use_top_k').props('dense')
|
||||
ui.label('Top K').classes('min-w-fit')
|
||||
ui.number(value=40, min=1, max=200).classes('flex-1').props('dense').bind_value(self, 'top_k').bind_enabled_from(self, 'use_top_k')
|
||||
ui.icon('info', size='sm').classes('text-gray-500 cursor-help').tooltip('Reduces probability of generating nonsense. Higher values (e.g., 100) give more diverse answers, lower values (e.g., 10) are more conservative. Default: 40')
|
||||
|
||||
self.build_slider_component(label='Top K', switch_binding='use_top_k', value_binding='top_k',
|
||||
value_min=1, value_max=200, value_step=1,
|
||||
value=model_parameters['top_k'] if 'top_k' in model_parameters else None,
|
||||
value_default=40,
|
||||
info='Reduces probability of generating nonsense. Higher values (e.g., 100) give more diverse answers, lower values (e.g., 10) are more conservative. Default: 40')
|
||||
# Top P
|
||||
with ui.row().classes('items-center gap-2 w-full'):
|
||||
ui.switch().bind_value(self, 'use_top_p').props('dense')
|
||||
ui.label('Top P').classes('min-w-fit')
|
||||
ui.slider(min=0.0, max=1.0, step=0.05).classes('flex-1').props('dense').bind_value(self, 'top_p').bind_enabled_from(self, 'use_top_p')
|
||||
ui.label().bind_text_from(self, 'top_p', backward=lambda x: f'{x:.2f}').classes('text-xs text-gray-500 min-w-fit')
|
||||
ui.icon('info', size='sm').classes('text-gray-500 cursor-help').tooltip('Works with top-k. Higher values (e.g., 0.95) lead to more diverse text, lower values (e.g., 0.5) generate more focused text. Default: 0.9')
|
||||
|
||||
self.build_slider_component(label='Top P', switch_binding='use_top_p', value_binding='top_p',
|
||||
value_min=0.0, value_max=1.0, value_step=0.01,
|
||||
value=model_parameters['top_p'] if 'top_p' in model_parameters else None,
|
||||
value_default=0.9,
|
||||
info='Works with top-k. Higher values (e.g., 0.95) lead to more diverse text, lower values (e.g., 0.5) generate more focused text. Default: 0.9',
|
||||
backward=lambda x: f'{x:.2f}')
|
||||
# Min P
|
||||
with ui.row().classes('items-center gap-2 w-full'):
|
||||
ui.switch().bind_value(self, 'use_min_p').props('dense')
|
||||
ui.label('Min P').classes('min-w-fit')
|
||||
ui.slider(min=0.0, max=1.0, step=0.01).classes('flex-1').props('dense').bind_value(self, 'min_p').bind_enabled_from(self, 'use_min_p')
|
||||
ui.label().bind_text_from(self, 'min_p', backward=lambda x: f'{x:.2f}').classes('text-xs text-gray-500 min-w-fit')
|
||||
ui.icon('info', size='sm').classes('text-gray-500 cursor-help').tooltip('Alternative to top_p. Minimum probability for a token relative to the most likely token. Default: 0.0')
|
||||
|
||||
self.build_slider_component(label='Min P', switch_binding='use_min_p', value_binding='min_p',
|
||||
value_min=0.0, value_max=1.0, value_step=0.01,
|
||||
value=model_parameters['min_p'] if 'min_p' in model_parameters else None,
|
||||
value_default=0.0,
|
||||
info='Alternative to top_p. Minimum probability for a token relative to the most likely token. Default: 0.0',
|
||||
backward=lambda x: f'{x:.2f}')
|
||||
# Repetition Parameters
|
||||
with ui.expansion('Repetition Control', icon='repeat', group='creation_group').classes('w-full mb-2'):
|
||||
with ui.column().classes('w-full gap-1 pt-2'):
|
||||
# Repeat Last N
|
||||
with ui.row().classes('items-center gap-2 w-full'):
|
||||
ui.switch().bind_value(self, 'use_repeat_last_n').props('dense')
|
||||
ui.label('Repeat Last N').classes('min-w-fit')
|
||||
ui.number(value=64, min=-1, max=512).classes('flex-1').props('dense').bind_value(self, 'repeat_last_n').bind_enabled_from(self, 'use_repeat_last_n')
|
||||
ui.icon('info', size='sm').classes('text-gray-500 cursor-help').tooltip('How far back the model looks to prevent repetition. 0=disabled, -1=num_ctx. Default: 64')
|
||||
|
||||
self.build_slider_component(label='Repeat Last N', switch_binding='use_repeat_last_n', value_binding='repeat_last_n',
|
||||
value_min=-1, value_max=512, value_step=1,
|
||||
value=model_parameters['repeat_last_n'] if 'repeat_last_n' in model_parameters else None,
|
||||
value_default=64,
|
||||
info='How far back the model looks to prevent repetition. 0=disabled, -1=num_ctx. Default: 64')
|
||||
# Repeat Penalty
|
||||
with ui.row().classes('items-center gap-2 w-full'):
|
||||
ui.switch().bind_value(self, 'use_repeat_penalty').props('dense')
|
||||
ui.label('Repeat Penalty').classes('min-w-fit')
|
||||
ui.slider(min=0.5, max=2.0, step=0.1).classes('flex-1').bind_value(self, 'repeat_penalty').bind_enabled_from(self, 'use_repeat_penalty')
|
||||
ui.label().bind_text_from(self, 'repeat_penalty', backward=lambda x: f'{x:.1f}').classes('text-xs text-gray-500 min-w-fit').props('dense')
|
||||
ui.icon('info', size='sm').classes('text-gray-500 cursor-help').tooltip('How strongly to penalize repetitions. Higher values (e.g., 1.5) penalize more, lower values (e.g., 0.9) are more lenient. Default: 1.1')
|
||||
|
||||
self.build_slider_component(label='Repeat Penalty', switch_binding='use_repeat_penalty', value_binding='repeat_penalty',
|
||||
value_min=0.5, value_max=2.0, value_step=0.1,
|
||||
value=model_parameters['repeat_penalty'] if 'repeat_penalty' in model_parameters else None,
|
||||
value_default=1.1,
|
||||
info='How strongly to penalize repetitions. Higher values (e.g., 1.5) penalize more, lower values (e.g., 0.9) are more lenient. Default: 1.1',
|
||||
backward=lambda x: f'{x:.1f}')
|
||||
# Control Parameters
|
||||
with ui.expansion('Control', icon='settings', group='creation_group').classes('w-full mb-2'):
|
||||
with ui.column().classes('w-full gap-1 pt-2'):
|
||||
# Seed
|
||||
with ui.row().classes('items-center gap-2 w-full'):
|
||||
ui.switch().bind_value(self, 'use_seed').props('dense')
|
||||
ui.label('Seed').classes('min-w-fit')
|
||||
ui.number(value=0, min=0, max=999999).classes('flex-1').props('dense').bind_value(self, 'seed').bind_enabled_from(self, 'use_seed')
|
||||
ui.icon('info', size='sm').classes('text-gray-500 cursor-help').tooltip('Random number seed for generation. Same seed produces same output for same prompt. Default: 0')
|
||||
|
||||
self.build_slider_component(label='Seed', switch_binding='use_seed', value_binding='seed',
|
||||
value_min=0, value_max=999999, value_step=1,
|
||||
value=model_parameters['seed'] if 'seed' in model_parameters else None,
|
||||
value_default=0,
|
||||
info='Random number seed for generation. Same seed produces same output for same prompt. Default: 0')
|
||||
# Stop Sequences
|
||||
with ui.row().classes('items-center gap-2 w-full'):
|
||||
ui.switch().bind_value(self, 'use_stop').props('dense')
|
||||
@@ -209,7 +203,7 @@ class OllamaModelEditComponent(AsyncCard):
|
||||
# Save button
|
||||
self.create_btn = ui.button('Save Model', icon='save', on_click=self.create_model).props('color=primary').classes('w-full').bind_enabled_from(self, 'model_name', backward=lambda x: bool(x) and not self.is_downloading)
|
||||
|
||||
def build_float_component(self, label, switch_binding,
|
||||
def build_slider_component(self, label, switch_binding,
|
||||
value_binding, value_min, value_max, value_step, value, value_default,
|
||||
info, backward=None
|
||||
):
|
||||
|
||||
Reference in New Issue
Block a user