from nicegui import ui class OllamaManagerPage(ui.column): def __init__(self): super().__init__() with self.classes('w-full gap-6 p-6'): ui.label('Ollama Manager').classes('text-h4 font-bold') # Status cards with ui.row().classes('w-full gap-4'): with ui.card().classes('flex-grow'): with ui.row().classes('items-center gap-2'): ui.icon('check_circle').props('color=positive') ui.label('Ollama Status: Online').classes('font-medium') with ui.card().classes('flex-grow'): ui.label('Version: 0.11.11').classes('font-medium') # Models management with ui.card().classes('w-full'): with ui.row().classes('w-full items-center mb-4'): ui.label('Installed Models').classes('text-h6 font-bold') ui.space() ui.button('Pull New Model', icon='download').props('color=primary') with ui.column().classes('w-full gap-2'): self._create_model_item('llama3.2:3b', '2.0 GB', 'Q4_0') self._create_model_item('mistral:7b', '4.1 GB', 'Q4_0') self._create_model_item('codellama:13b', '7.4 GB', 'Q4_K_M') self._create_model_item('phi3:mini', '2.3 GB', 'Q4_0') # Quick test with ui.card().classes('w-full'): ui.label('Quick Chat Test').classes('text-h6 font-bold mb-4') with ui.row().classes('w-full gap-2 mb-2'): ui.select( ['llama3.2:3b', 'mistral:7b', 'codellama:13b', 'phi3:mini'], value='llama3.2:3b', label='Model' ).classes('flex-grow').props('outlined') ui.textarea( label='Prompt', placeholder='Enter your prompt here...', value='Hello! Tell me a fun fact about AMD GPUs.' ).classes('w-full').props('outlined') ui.button('Send', icon='send').props('color=primary') with ui.expansion('Response', icon='message').classes('w-full mt-4').props('default-opened'): ui.label('Response will appear here...').classes('text-grey-7') def _create_model_item(self, name: str, size: str, quantization: str): with ui.card().classes('w-full'): with ui.row().classes('w-full items-center'): with ui.column().classes('gap-1'): ui.label(name).classes('font-bold text-h6') with ui.row().classes('gap-4'): ui.chip(size, icon='storage').props('outline dense') ui.chip(quantization, icon='memory').props('outline dense') ui.space() with ui.row().classes('gap-2'): ui.button(icon='play_arrow').props('round flat color=primary').tooltip('Run Model') ui.button(icon='info').props('round flat').tooltip('Model Info') ui.button(icon='delete').props('round flat color=negative').tooltip('Delete Model')