changed fields

This commit is contained in:
2025-09-22 11:36:45 +02:00
parent 6cda81088d
commit 8d3f791966

View File

@@ -100,22 +100,22 @@ 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',
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,
info='The temperature of the model. Higher values (e.g., 1.2) make output more creative, lower values (e.g., 0.5) more focused. Default: 0.8',
backward=lambda x: f'{x:.1f}')
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,
info='The temperature of the model. Higher values (e.g., 1.2) make output more creative, lower values (e.g., 0.5) more focused. Default: 0.8',
backward=lambda x: f'{x:.1f}')
# Context Length (always visible)
model_context_length: Optional[int] = None # the context length the model supports
for model_info_key, model_info_value in model_info['model_info'].items():
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,
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')
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')
# Max Tokens (always visible)
# TODO MISSING ?????
@@ -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,10 +203,10 @@ 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,
value_binding, value_min, value_max, value_step, value, value_default,
info, backward=None
):
def build_slider_component(self, label, switch_binding,
value_binding, value_min, value_max, value_step, value, value_default,
info, backward=None
):
with ui.row().classes('items-center gap-2 w-full mb-1'):
ui.switch().bind_value(self, switch_binding).props('dense').set_value(value is not None)
ui.label(label).classes('min-w-fit')