- 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
- Fixed incorrect path construction that was looking in target/release/../src instead of crates/goose/src
- Added multiple fallback locations for finding the conversion script
- Added proper logging to show which path was found
- Added validation to check if script exists before attempting to run it
- Improved error messages for better debugging
This fixes the 'No such file or directory' error when clicking 'Convert to GGUF' in LLM tuning settings.
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