70 lines
3.2 KiB
Python
70 lines
3.2 KiB
Python
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') |