Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 7 additions & 27 deletions cmd/launcher/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@ package main

import (
"log"
"os"
"os/signal"
"syscall"

"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/driver/desktop"
coreLauncher "github.com/mudler/LocalAI/cmd/launcher/internal"
"github.com/mudler/LocalAI/pkg/signals"
)

func main() {
Expand Down Expand Up @@ -42,7 +40,12 @@ func main() {
}

// Setup signal handling for graceful shutdown
setupSignalHandling(launcher)
signals.RegisterGracefulTerminationHandler(func() {
// Perform cleanup
if err := launcher.Shutdown(); err != nil {
log.Printf("Error during shutdown: %v", err)
}
})

// Initialize the launcher state
go func() {
Expand All @@ -67,26 +70,3 @@ func main() {
// Run the application in background (window only shown when "Settings" is clicked)
myApp.Run()
}

// setupSignalHandling sets up signal handlers for graceful shutdown
func setupSignalHandling(launcher *coreLauncher.Launcher) {
// Create a channel to receive OS signals
sigChan := make(chan os.Signal, 1)

// Register for interrupt and terminate signals
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)

// Handle signals in a separate goroutine
go func() {
sig := <-sigChan
log.Printf("Received signal %v, shutting down gracefully...", sig)

// Perform cleanup
if err := launcher.Shutdown(); err != nil {
log.Printf("Error during shutdown: %v", err)
}

// Exit the application
os.Exit(0)
}()
}
9 changes: 7 additions & 2 deletions core/cli/explorer.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import (
"time"

cliContext "github.com/mudler/LocalAI/core/cli/context"
"github.com/mudler/LocalAI/core/cli/signals"
"github.com/mudler/LocalAI/core/explorer"
"github.com/mudler/LocalAI/core/http"
"github.com/mudler/LocalAI/pkg/signals"
"github.com/rs/zerolog/log"
)

type ExplorerCMD struct {
Expand Down Expand Up @@ -46,7 +47,11 @@ func (e *ExplorerCMD) Run(ctx *cliContext.Context) error {

appHTTP := http.Explorer(db)

signals.Handler(nil)
signals.RegisterGracefulTerminationHandler(func() {
if err := appHTTP.Shutdown(); err != nil {
log.Error().Err(err).Msg("error during shutdown")
}
})

return appHTTP.Listen(e.Address)
}
10 changes: 7 additions & 3 deletions core/cli/federated.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"context"

cliContext "github.com/mudler/LocalAI/core/cli/context"
"github.com/mudler/LocalAI/core/cli/signals"
"github.com/mudler/LocalAI/core/p2p"
"github.com/mudler/LocalAI/pkg/signals"
)

type FederatedCLI struct {
Expand All @@ -20,7 +20,11 @@ func (f *FederatedCLI) Run(ctx *cliContext.Context) error {

fs := p2p.NewFederatedServer(f.Address, p2p.NetworkID(f.Peer2PeerNetworkID, p2p.FederatedID), f.Peer2PeerToken, !f.RandomWorker, f.TargetWorker)

signals.Handler(nil)
c, cancel := context.WithCancel(context.Background())

return fs.Start(context.Background())
signals.RegisterGracefulTerminationHandler(func() {
cancel()
})

return fs.Start(c)
}
9 changes: 6 additions & 3 deletions core/cli/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ import (
"github.com/mudler/LocalAI/core/application"
cli_api "github.com/mudler/LocalAI/core/cli/api"
cliContext "github.com/mudler/LocalAI/core/cli/context"
"github.com/mudler/LocalAI/core/cli/signals"
"github.com/mudler/LocalAI/core/config"
"github.com/mudler/LocalAI/core/http"
"github.com/mudler/LocalAI/core/p2p"
"github.com/mudler/LocalAI/internal"
"github.com/mudler/LocalAI/pkg/signals"
"github.com/mudler/LocalAI/pkg/system"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
Expand Down Expand Up @@ -226,8 +226,11 @@ func (r *RunCMD) Run(ctx *cliContext.Context) error {
return err
}

// Catch signals from the OS requesting us to exit, and stop all backends
signals.Handler(app.ModelLoader())
signals.RegisterGracefulTerminationHandler(func() {
if err := app.ModelLoader().StopAllGRPC(); err != nil {
log.Error().Err(err).Msg("error while stopping all grpc backends")
}
})

return appHTTP.Listen(r.Address)
}
25 changes: 0 additions & 25 deletions core/cli/signals/signals.go

This file was deleted.

3 changes: 0 additions & 3 deletions core/cli/worker/worker_llamacpp.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (

cliContext "github.com/mudler/LocalAI/core/cli/context"
"github.com/mudler/LocalAI/core/config"
"github.com/mudler/LocalAI/core/cli/signals"
"github.com/mudler/LocalAI/core/gallery"
"github.com/mudler/LocalAI/pkg/model"
"github.com/mudler/LocalAI/pkg/system"
Expand Down Expand Up @@ -85,8 +84,6 @@ func (r *LLamaCPP) Run(ctx *cliContext.Context) error {

args = append([]string{grpcProcess}, args...)

signals.Handler(nil)

return syscall.Exec(
grpcProcess,
args,
Expand Down
13 changes: 9 additions & 4 deletions core/cli/worker/worker_p2p.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import (
"time"

cliContext "github.com/mudler/LocalAI/core/cli/context"
"github.com/mudler/LocalAI/core/cli/signals"
"github.com/mudler/LocalAI/core/p2p"
"github.com/mudler/LocalAI/pkg/signals"
"github.com/mudler/LocalAI/pkg/system"
"github.com/phayes/freeport"
"github.com/rs/zerolog/log"
Expand Down Expand Up @@ -48,6 +48,9 @@ func (r *P2P) Run(ctx *cliContext.Context) error {

address := "127.0.0.1"

c, cancel := context.WithCancel(context.Background())
defer cancel()

if r.NoRunner {
// Let override which port and address to bind if the user
// configure the llama-cpp service on its own
Expand All @@ -59,7 +62,7 @@ func (r *P2P) Run(ctx *cliContext.Context) error {
p = r.RunnerPort
}

_, err = p2p.ExposeService(context.Background(), address, p, r.Token, p2p.NetworkID(r.Peer2PeerNetworkID, p2p.WorkerID))
_, err = p2p.ExposeService(c, address, p, r.Token, p2p.NetworkID(r.Peer2PeerNetworkID, p2p.WorkerID))
if err != nil {
return err
}
Expand Down Expand Up @@ -101,13 +104,15 @@ func (r *P2P) Run(ctx *cliContext.Context) error {
}
}()

_, err = p2p.ExposeService(context.Background(), address, fmt.Sprint(port), r.Token, p2p.NetworkID(r.Peer2PeerNetworkID, p2p.WorkerID))
_, err = p2p.ExposeService(c, address, fmt.Sprint(port), r.Token, p2p.NetworkID(r.Peer2PeerNetworkID, p2p.WorkerID))
if err != nil {
return err
}
}

signals.Handler(nil)
signals.RegisterGracefulTerminationHandler(func() {
cancel()
})

for {
time.Sleep(1 * time.Second)
Expand Down
Loading
Loading