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');
});