From e3770c55e6f72ab5895b9d5392c0384956c0b54f Mon Sep 17 00:00:00 2001 From: Ashley Johnson <61059402+PapaRascal2020@users.noreply.github.com> Date: Fri, 20 Sep 2024 08:50:06 +0100 Subject: [PATCH] feature(SK): Optional usage of the playground via an install command This is better than forcing routes on those who use this to use the playground you can use `sidekick::install' --- src/Console/InstallCommand.php | 49 +++++++++++++++++++ src/SidekickServiceProvider.php | 48 ++---------------- .../resources/views}/Components/bot.blade.php | 0 .../views}/Components/user.blade.php | 0 .../resources/views}/Pages/audio.blade.php | 2 +- .../resources/views}/Pages/chat.blade.php | 2 +- .../resources/views}/Pages/chatroom.blade.php | 12 ++--- .../views}/Pages/completion.blade.php | 2 +- .../views}/Pages/embedding.blade.php | 2 +- .../resources/views}/Pages/image.blade.php | 2 +- .../resources/views}/Pages/index.blade.php | 2 +- .../resources/views}/Pages/moderate.blade.php | 2 +- .../views}/Pages/transcribe.blade.php | 2 +- .../resources/views}/Shared/layout.blade.php | 0 .../default/routes/web.sidekick.php | 42 ++++++++-------- 15 files changed, 89 insertions(+), 78 deletions(-) create mode 100644 src/Console/InstallCommand.php rename {resources/views/Blade => stubs/default/resources/views}/Components/bot.blade.php (100%) rename {resources/views/Blade => stubs/default/resources/views}/Components/user.blade.php (100%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/audio.blade.php (97%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/chat.blade.php (98%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/chatroom.blade.php (95%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/completion.blade.php (98%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/embedding.blade.php (97%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/image.blade.php (96%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/index.blade.php (95%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/moderate.blade.php (98%) rename {resources/views/Blade => stubs/default/resources/views}/Pages/transcribe.blade.php (97%) rename {resources/views/Blade => stubs/default/resources/views}/Shared/layout.blade.php (100%) rename routes/web.php => stubs/default/routes/web.sidekick.php (79%) diff --git a/src/Console/InstallCommand.php b/src/Console/InstallCommand.php new file mode 100644 index 0000000..8361d02 --- /dev/null +++ b/src/Console/InstallCommand.php @@ -0,0 +1,49 @@ +ensureDirectoryExists(resource_path('views')); + $fileSystem->copyDirectory(__DIR__.'/../../stubs/default/resources/views', resource_path('views')); + + // Install Routes + $fileSystem->ensureDirectoryExists(base_path('routes')); + $fileSystem->copyDirectory(__DIR__.'/../../stubs/default/routes', base_path('routes')); + + // Make link to routes in web.php + $webRoutesPath = base_path('routes/web.php'); + $routeLink = "\nrequire base_path('routes/web.sidekick.php');\n"; + $fileSystem->append($webRoutesPath, $routeLink); + + $this->components->success("Successfully installed Sidekick Playground"); + } +} diff --git a/src/SidekickServiceProvider.php b/src/SidekickServiceProvider.php index 1ad2824..1fd358f 100644 --- a/src/SidekickServiceProvider.php +++ b/src/SidekickServiceProvider.php @@ -4,6 +4,7 @@ use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; +use PapaRascalDev\Sidekick\Console\InstallCommand; use PapaRascalDev\Sidekick\Models\Conversation; class SidekickServiceProvider extends ServiceProvider @@ -14,15 +15,13 @@ class SidekickServiceProvider extends ServiceProvider public function boot(): void { + $this->commands([ + InstallCommand::class, + ]); + $this->initializeMigrations(); $this->initializeMigrationPublishing(); - $this->initializeRoutes(); - $this->initializeRoutesPublishing(); - - $this->initializeViews(); - $this->initializeViewsPublishing(); - View::share('conversations', Conversation::all('id', 'model')); } @@ -58,41 +57,4 @@ protected function initializeMigrationPublishing(): void public function register(): void { } - - /** - * @return void - */ - private function initializeRoutes(): void - { - $this->loadRoutesFrom(__DIR__ . '/../routes/web.php'); - } - - /** - * @return void - */ - private function initializeRoutesPublishing(): void - { - $this->publishes([ - __DIR__ . '/../routes/web.php' => base_path('routes/sidekick.php'), - ], 'routes'); - } - - /** - * @return void - */ - private function initializeViews(): void - { - $this->loadViewsFrom(__DIR__ . '/../resources/views', 'sidekick'); - } - - /** - * @return void - */ - private function initializeViewsPublishing(): void - { - $this->publishes([ - __DIR__ . '/../resources/views' => resource_path('views/vendor/sidekick'), - ], 'views'); - } - } diff --git a/resources/views/Blade/Components/bot.blade.php b/stubs/default/resources/views/Components/bot.blade.php similarity index 100% rename from resources/views/Blade/Components/bot.blade.php rename to stubs/default/resources/views/Components/bot.blade.php diff --git a/resources/views/Blade/Components/user.blade.php b/stubs/default/resources/views/Components/user.blade.php similarity index 100% rename from resources/views/Blade/Components/user.blade.php rename to stubs/default/resources/views/Components/user.blade.php diff --git a/resources/views/Blade/Pages/audio.blade.php b/stubs/default/resources/views/Pages/audio.blade.php similarity index 97% rename from resources/views/Blade/Pages/audio.blade.php rename to stubs/default/resources/views/Pages/audio.blade.php index 129a656..41cd10c 100644 --- a/resources/views/Blade/Pages/audio.blade.php +++ b/stubs/default/resources/views/Pages/audio.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Audio Generation Sample diff --git a/resources/views/Blade/Pages/chat.blade.php b/stubs/default/resources/views/Pages/chat.blade.php similarity index 98% rename from resources/views/Blade/Pages/chat.blade.php rename to stubs/default/resources/views/Pages/chat.blade.php index 741aad8..75e0abe 100644 --- a/resources/views/Blade/Pages/chat.blade.php +++ b/stubs/default/resources/views/Pages/chat.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Talk to Sidekick! diff --git a/resources/views/Blade/Pages/chatroom.blade.php b/stubs/default/resources/views/Pages/chatroom.blade.php similarity index 95% rename from resources/views/Blade/Pages/chatroom.blade.php rename to stubs/default/resources/views/Pages/chatroom.blade.php index 1314bde..9dc37e7 100644 --- a/resources/views/Blade/Pages/chatroom.blade.php +++ b/stubs/default/resources/views/Pages/chatroom.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Talk to Sidekick! - Chat @@ -27,7 +27,7 @@

- @include('sidekick::Blade.Components.user') User

+ @include('Components.user') User

{!! $message['content'] !!}

@@ -35,7 +35,7 @@

- @include('sidekick::Blade.Components.bot') Assistant

+ @include('Components.bot') Assistant

{!! $message['content'] !!}

@@ -95,7 +95,7 @@

- @include('sidekick::Blade.Components.user') User

+ @include('Components.user') User

${message}

@@ -128,7 +128,7 @@

- @include('sidekick::Blade.Components.bot') Assistant

+ @include('Components.bot') Assistant

@@ -201,7 +201,7 @@ function handleCallback() {

- @include('sidekick::Blade.Components.bot') Assistant

+ @include('Components.bot') Assistant

${response.content}

diff --git a/resources/views/Blade/Pages/completion.blade.php b/stubs/default/resources/views/Pages/completion.blade.php similarity index 98% rename from resources/views/Blade/Pages/completion.blade.php rename to stubs/default/resources/views/Pages/completion.blade.php index 8563a89..7280414 100644 --- a/resources/views/Blade/Pages/completion.blade.php +++ b/stubs/default/resources/views/Pages/completion.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Completion Sample diff --git a/resources/views/Blade/Pages/embedding.blade.php b/stubs/default/resources/views/Pages/embedding.blade.php similarity index 97% rename from resources/views/Blade/Pages/embedding.blade.php rename to stubs/default/resources/views/Pages/embedding.blade.php index ed4e20c..c587845 100644 --- a/resources/views/Blade/Pages/embedding.blade.php +++ b/stubs/default/resources/views/Pages/embedding.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Embedding Generation Sample diff --git a/resources/views/Blade/Pages/image.blade.php b/stubs/default/resources/views/Pages/image.blade.php similarity index 96% rename from resources/views/Blade/Pages/image.blade.php rename to stubs/default/resources/views/Pages/image.blade.php index 27a831d..22f555a 100644 --- a/resources/views/Blade/Pages/image.blade.php +++ b/stubs/default/resources/views/Pages/image.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Image Generation Sample diff --git a/resources/views/Blade/Pages/index.blade.php b/stubs/default/resources/views/Pages/index.blade.php similarity index 95% rename from resources/views/Blade/Pages/index.blade.php rename to stubs/default/resources/views/Pages/index.blade.php index 3e4bafa..93036f6 100644 --- a/resources/views/Blade/Pages/index.blade.php +++ b/stubs/default/resources/views/Pages/index.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Welcome to Sidekick Playground diff --git a/resources/views/Blade/Pages/moderate.blade.php b/stubs/default/resources/views/Pages/moderate.blade.php similarity index 98% rename from resources/views/Blade/Pages/moderate.blade.php rename to stubs/default/resources/views/Pages/moderate.blade.php index bcc3a0b..73b330d 100644 --- a/resources/views/Blade/Pages/moderate.blade.php +++ b/stubs/default/resources/views/Pages/moderate.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Moderate Sample diff --git a/resources/views/Blade/Pages/transcribe.blade.php b/stubs/default/resources/views/Pages/transcribe.blade.php similarity index 97% rename from resources/views/Blade/Pages/transcribe.blade.php rename to stubs/default/resources/views/Pages/transcribe.blade.php index 7ade0de..b0e753a 100644 --- a/resources/views/Blade/Pages/transcribe.blade.php +++ b/stubs/default/resources/views/Pages/transcribe.blade.php @@ -1,4 +1,4 @@ -@extends('sidekick::Blade.Shared.layout') +@extends('Shared.layout') @section('title') Transcription Generation Sample diff --git a/resources/views/Blade/Shared/layout.blade.php b/stubs/default/resources/views/Shared/layout.blade.php similarity index 100% rename from resources/views/Blade/Shared/layout.blade.php rename to stubs/default/resources/views/Shared/layout.blade.php diff --git a/routes/web.php b/stubs/default/routes/web.sidekick.php similarity index 79% rename from routes/web.php rename to stubs/default/routes/web.sidekick.php index 394cdaa..463d913 100644 --- a/routes/web.php +++ b/stubs/default/routes/web.sidekick.php @@ -25,7 +25,7 @@ ); // Redirect the user to the main page for the conversation - return view('sidekick::Blade.Pages.chatroom', [ + return view('Pages.chatroom', [ 'conversationId' => $conversation->conversation->id, 'options' => $options[0], 'conversations' => Conversation::all('id', 'model') @@ -55,7 +55,7 @@ $conversation = Conversation::findOrFail($id); // Return the conversation to the browser - return view('sidekick::Blade.Pages.chatroom', [ + return view('Pages.chatroom', [ 'conversationId' => $conversation->id, 'options' => $conversation->class, 'messages' => $conversation->messages @@ -74,12 +74,12 @@ }); Route::get('/sidekick/playground/completion', function () { - return view('sidekick::Blade.Pages.completion'); + return view('Pages.completion'); }); Route::post('/sidekick/playground/completion', function (Request $request) { // Loads a new instance of Sidekick with OpenAI - $sidekick = Sidekick::create(new OpenAi()); + $sidekick = create(new OpenAi()); // Send message $response = $sidekick->complete()->sendMessage( @@ -94,12 +94,12 @@ }); Route::get('/sidekick/playground/audio', function () { - return view('sidekick::Blade.Pages.audio'); + return view('Pages.audio'); }); Route::post('/sidekick/playground/audio', function (Request $request) { // Loads a new instance of Sidekick with OpenAI - $sidekick = Sidekick::create(new OpenAi()); + $sidekick = create(new OpenAi()); // Send text to be converted by Sidekick to audio $audio = $sidekick->audio()->fromText( @@ -108,11 +108,11 @@ ); // Return the base64 encoded audio file to the front end - return view('sidekick::Blade.Pages.audio', ['audio' => base64_encode($audio)]); + return view('Pages.audio', ['audio' => base64_encode($audio)]); }); Route::post('/sidekick/playground/image', function (Request $request) { - $sidekick = Sidekick::create(new OpenAi()); + $sidekick = create(new OpenAi()); $image = $sidekick->image()->make( model:'dall-e-3', prompt: $request->get('text_to_convert'), @@ -120,57 +120,57 @@ height:'1024' ); - return view('sidekick::Blade.Pages.image', ['image' => $image['data'][0]['url']]); + return view('Pages.image', ['image' => $image['data'][0]['url']]); }); Route::post('/sidekick/playground/transcribe', function (Request $request) { - $sidekick = Sidekick::create(new OpenAi()); + $sidekick = create(new OpenAi()); $response = $sidekick->transcribe()->audioFile( model:'whisper-1', filePath:$request->get('audio') ); - return view('sidekick::Blade.Pages.transcribe', ['response' => $response]); + return view('Pages.transcribe', ['response' => $response]); }); Route::post('/sidekick/playground/embedding', function (Request $request) { - $sidekick = Sidekick::create(new OpenAi()); + $sidekick = create(new OpenAi()); $response = $sidekick->embedding()->make( model:'text-embedding-3-large', input: $request->get('text'), ); - return view('sidekick::Blade.Pages.embedding', ['response' => $response]); + return view('Pages.embedding', ['response' => $response]); }); Route::get('/sidekick/playground/moderate', function () { - return view('sidekick::Blade.Pages.moderate'); + return view('Pages.moderate'); }); Route::post('/sidekick/playground/moderate', function (Request $request) { - $sidekick = Sidekick::create(new OpenAi()); + $sidekick = create(new OpenAi()); $response = $sidekick->moderate()->text( model:'text-moderation-latest', content: $request->get('text') ); - return view('sidekick::Blade.Pages.moderate', ['response' => $response]); + return view('Pages.moderate', ['response' => $response]); }); Route::get('/sidekick/playground/image', function () { - return view('sidekick::Blade.Pages.image'); + return view('Pages.image'); }); Route::get('/sidekick/playground/transcribe', function () { - return view('sidekick::Blade.Pages.transcribe'); + return view('Pages.transcribe'); }); Route::get('/sidekick/playground/embedding', function () { - return view('sidekick::Blade.Pages.embedding'); + return view('Pages.embedding'); }); Route::get('/sidekick/playground/chat', function () { - return view('sidekick::Blade.Pages.chat'); + return view('Pages.chat'); }); Route::get('/sidekick/playground', function () { - return view('sidekick::Blade.Pages.index'); + return view('Pages.index'); });