- Adaptive learning system with feedback collector, performance monitor, model swapper
- LoRA adapter training and GGUF conversion scripts
- Native model provider integration
- UI components: FeedbackToolbar, RatingControls, HubThemeSelector
- Cyberpunk widgets and amber glow effects
- LLM tuning section in settings
- Tabbed chat container improvements
- Various server and execution manager updates
This commit adds comprehensive support for fine-tuning LLMs locally using LoRA adapters:
## Backend Changes
- Added model training infrastructure (job_manager, trainer, axolotl integration)
- Implemented training data collection and quality scoring
- Created inference server management for serving fine-tuned models
- Added REST API endpoints for training jobs, training data, and inference servers
- Embedded Python training scripts (train_lora.py, serve_lora.py) in binary
- Support for HuggingFace authentication and CPU fallback for memory-constrained systems
## Frontend Changes
- Added Tuning section in Settings with three tabs: Datasets, Jobs, Fine-tuned Models
- Implemented training data collection UI with feedback toolbar
- Added training job management UI with progress tracking
- Created fine-tuned model cards with 'Chat with Model' functionality
- Integrated fine-tuned model display in chat UI (shows model name and base model)
- Auto-start/stop inference servers when chatting with fine-tuned models
## Key Features
- Collect training data from user interactions with ratings
- Start training jobs with configurable parameters
- Monitor training progress in real-time
- View completed fine-tuned models
- Chat directly with fine-tuned models via inference server
- Automatic inference server lifecycle management
## Technical Details
- Uses PEFT (Parameter-Efficient Fine-Tuning) with LoRA
- Supports multiple base models (Llama, Qwen, Mistral, etc.)
- Memory-aware training with CPU fallback
- OpenAI-compatible inference API via Flask server
- Dynamic port allocation for inference servers (8000-9000 range)
This enables users to fine-tune models on their own data without external services.
- Imported useMatrix hook to access real Matrix context
- Replaced mock notifications with real Matrix event listeners:
- Connection status (connected/disconnected/reconnecting)
- Message notifications from Matrix rooms
- Room membership changes (user joined/left)
- Goose collaboration invites and task requests
- Session waiting notifications
- Added initial state checks for connection status and pending invites
- Proper event listener cleanup to prevent memory leaks
- Now displays actual real-time notifications from Goose's Matrix system
- Maintains all existing Matrix notification functions for external use
- Extended TickerItem interface with priority, actionable, notification, and invitation types
- Added Matrix-specific notification functions:
- addSessionInvitation() - for session invites
- addMessageNotification() - for new messages
- addSessionJoined/Left() - for user activity
- addConnectionStatus() - for Matrix connection state
- addSessionWaiting() - for sessions awaiting participants
- Updated default items to show Matrix notifications instead of system stats
- Added demo notification system in AppLayout with realistic Matrix scenarios
- Focused route notifications on Matrix-related sections only
- Creates authentic collaborative workspace notification experience
- Updated both overlay and push mode control buttons z-index from z-[9999] to z-[10002]
- Ticker uses z-[10001], so buttons now have higher z-index (z-[10002])
- Ensures menu toggle and new window buttons are always visible and clickable
- Prevents ticker from covering important UI controls when navigation is open
- Removed time display section from ticker
- Changed scrolling content padding from pl-24 to pl-0 to use full width
- Ticker now shows only the scrolling status messages
- Maintains pixelated styling and retro effects for remaining content
- Added conditional rendering: {isNavExpanded && <NotificationTicker />}
- Ticker now appears only when user opens the navigation menu
- Provides clean interface when navigation is closed
- Ticker serves as additional visual element when exploring navigation
- Added image-rendering-pixelated class to main container
- Applied ticker-pixelated class to all text elements (time and scrolling content)
- Added image-rendering-pixelated to time display and scrolling content containers
- Added retro scanlines effect overlay for authentic ticker appearance
- Creates crisp, pixelated text rendering like classic electronic tickers
- Maintains app color scheme while adding retro visual effects
- Updated default ticker items to use lowercase text
- Added .toLowerCase() to all displayed text in ticker component
- Updated AppLayout route names and ticker messages to lowercase:
- section: hub/chat/settings etc.
- sidecars active: X
- mem: X%
- connections: X
- Updated updateSystemStatus to use lowercase format
- Maintains consistent lowercase aesthetic throughout ticker
- Removed image-rendering-pixelated class from main container
- This class was applying CSS filters that caused the black background
- Ticker now properly uses bg-background-default with no visual artifacts
- Maintains clean app styling without pixelation effects
- Changed getTypeColor to return text-text-default for all text types
- Updated time display to use text-text-default instead of text-text-muted
- Removed ticker-pixelated class from time display to prevent black background
- All ticker text now uses consistent font-mono text-xs font-medium styling
- Maintains monospace font for ticker aesthetic while using proper app colors
- Changed color functions to use semantic app colors:
- success: text-text-success (instead of text-green-400)
- warning: text-text-warning (instead of text-yellow-400)
- error: text-text-error (instead of text-red-400)
- info: text-text-info (instead of text-blue-400)
- neutral: text-text-default (instead of text-gray-300)
- Updated scrolling text to use normal app typography:
- Changed from ticker-pixelated to font-mono text-xs font-medium
- Maintains monospace font but with proper app font rendering
- Keeps time display pixelated for visual distinction
- Now properly integrates with app's design system and theme switching
- Changed main container background from bg-background-card to bg-background-default
- Updated scrolling content area to use bg-background-default
- Updated fade effect to use from-background-default
- Now matches the main content area background used throughout the app
- Added bg-background-card to the scrolling content container
- Ensures consistent background color across the entire ticker
- Prevents any transparency issues with the scrolling text area
- Changed background from black to bg-background-card to match other containers
- Updated border from green to border-border-default for consistency
- Changed shadow from green glow to standard shadow-sm
- Updated time display background to bg-background-muted
- Changed time and bullet point colors to text-text-muted
- Updated cursor color to text-accent for consistency
- Updated fade effect to use background-card color
- Removed green scanlines effect for cleaner appearance
- Enhanced pixelated CSS with !important flags to override global font smoothing
- Added new ticker-pixelated class with aggressive pixelation settings
- Changed font stack to system monospace fonts (SF Mono, Monaco, etc.)
- Forced font size to 10px and disabled all font smoothing
- Added contrast, brightness, and saturation filters for better pixelated appearance
- Applied ticker-pixelated class to all ticker text elements
- Prevented subpixel rendering with transform and backface-visibility
- Changed default height from 48px back to 32px for more compact appearance
- Updated min-height class from min-h-[56px] to min-h-[32px]
- Updated AppLayout to pass height={32} instead of height={56}
- Maintains smaller text size while reducing overall container height
- Reduced font size from text-base to text-xs for all ticker text
- Enhanced pixelated effect with font-smoothing disabled
- Added contrast and brightness filters for better pixelated appearance
- Reduced padding to accommodate smaller text
- Applied image-rendering-pixelated class to all text elements
- Added min-h-[56px] class and minHeight style to ensure ticker visibility
- Created standalone HTML test file to verify ticker appearance and functionality
- Improved height constraints to prevent ticker from being collapsed
- Increased ticker height from 32px to 56px
- Enhanced font size from text-sm to text-base
- Added stronger border and shadow effects
- Improved time display with larger font and better padding
- Added debug logging to ensure ticker renders properly
- Made ticker more prominent with bold styling throughout
- Created NotificationTicker component with pixelated terminal aesthetic
- Added scrolling ticker with time display and system status
- Integrated ticker into AppLayout at the top of all sections
- Added retro CRT monitor effects with scanlines and terminal styling
- Implemented useNotificationTicker hook for dynamic updates
- Added automatic ticker updates for route changes and system events
- Styled with green terminal colors and monospace fonts for Bloomberg terminal feel
- Replace hasExplicitMatrixRoomId check with room ownership validation
- Only the tab that owns a Matrix room (registered in globalMatrixListenerRegistry) processes messages
- Each Matrix room can only have one designated owner tab at a time
- Prevents Matrix messages from leaking to other Matrix tabs for different rooms
- Maintains proper message isolation between Matrix tabs
- Keep localStorage for tab persistence across app restarts
- Generate unique session IDs for each restored tab to prevent conflicts
- Each tab gets temp_restored_[timestamp]_[random] session ID on restore
- Backend sessions are created properly for each tab
- Maintains tab state (titles, types, Matrix properties) while ensuring isolation
- Disable localStorage restoration to prevent session ID conflicts
- Always start with fresh tabs and unique session IDs
- Clear localStorage on app start to ensure clean state
- Each tab now gets a truly unique backend session ID
- Fixes messages appearing in wrong tabs due to shared sessions
- Enhanced getRoomHistory method with comprehensive logging
- Added detailed message type detection debugging
- Log current user ID, message processing steps, and final categorization
- Added message type breakdown summary for troubleshooting
- This will help identify why user messages aren't appearing after reload
- Ensure user messages from self are properly categorized as 'user' type
- Only categorize messages as 'assistant' if they have explicit Goose markers or are from other users
- This fixes the issue where user's own messages weren't appearing in conversation history
- Improved message type detection logic to be more precise and reliable
- Updated createSpace method to automatically create session mappings
- Updated createRoom method to automatically create session mappings
- Both Matrix Spaces and regular rooms now have guaranteed 1:1 relationship with Goose sessions
- Session mappings ensure Matrix room history and Goose session history stay synchronized
- This enables proper session loading when navigating to Matrix rooms/spaces
- Update MatrixService to support Matrix Spaces with isSpace, roomType, and isPublic properties
- Add SpaceChild interface for representing space hierarchy
- Implement space navigation with drill-down into sub-spaces and back navigation
- Add contextual room/space creation (create spaces at top level, rooms within spaces)
- Update ChannelsView to show only Matrix Spaces instead of all non-DM rooms
- Add breadcrumb navigation and space content display
- Include empty tiles for creating new rooms within spaces