Skip to content

Commit

Permalink
feature(SK): Optional usage of the playground via an install command
Browse files Browse the repository at this point in the history
This is better than forcing routes on those who use this
to use the playground you can use `sidekick::install'
  • Loading branch information
PapaRascal2020 committed Sep 20, 2024
1 parent 1a00d58 commit e3770c5
Show file tree
Hide file tree
Showing 15 changed files with 89 additions and 78 deletions.
49 changes: 49 additions & 0 deletions src/Console/InstallCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php

namespace PapaRascalDev\Sidekick\Console;

use Illuminate\Console\Command;
use Illuminate\Filesystem\Filesystem;
use Symfony\Component\Console\Attribute\AsCommand;

#[AsCommand(name: 'sidekick:install', description: 'Install Sidekick Playground')]
class InstallCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'sidekick:install';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Install Sidekick Playground';

/**
* Execute the console command.
*
* @return int|null
*/
public function handle()
{
$fileSystem = new Filesystem();
// Install resources
$fileSystem->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");
}
}
48 changes: 5 additions & 43 deletions src/SidekickServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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'));
}

Expand Down Expand Up @@ -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');
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Audio Generation Sample
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Talk to Sidekick!
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Talk to Sidekick! - Chat
Expand Down Expand Up @@ -27,15 +27,15 @@
<div class="flex items-start">
<div class="bg-gray-200 p-4 rounded-lg w-3/4">
<p class="font-bold flex items-center gap-x-1 pb-2 text-black">
@include('sidekick::Blade.Components.user') User</p>
@include('Components.user') User</p>
<p class="text-gray-800">{!! $message['content'] !!}</p>
</div>
</div>
@else
<div class="flex items-start justify-end">
<div class="bg-blue-800 text-white p-4 rounded-lg w-3/4">
<p class="font-bold flex items-center gap-x-1 pb-2">
@include('sidekick::Blade.Components.bot') Assistant</p>
@include('Components.bot') Assistant</p>
<p>{!! $message['content'] !!}</p>
</div>
</div>
Expand Down Expand Up @@ -95,7 +95,7 @@
<div class="flex items-start">
<div class="bg-gray-200 p-4 rounded-lg w-3/4">
<p class="font-bold flex items-center gap-x-1 pb-2 text-black">
@include('sidekick::Blade.Components.user') User</p>
@include('Components.user') User</p>
<p class="text-gray-800">${message}</p>
</div>
</div>
Expand Down Expand Up @@ -128,7 +128,7 @@
<div class="flex items-start justify-end">
<div class="bg-blue-800 text-white p-4 rounded-lg w-3/4">
<p class="font-bold flex items-center gap-x-1 pb-2">
@include('sidekick::Blade.Components.bot') Assistant</p>
@include('Components.bot') Assistant</p>
<p id="response-${r}"></p>
</div>
</div>
Expand Down Expand Up @@ -201,7 +201,7 @@ function handleCallback() {
<div class="flex items-start justify-end">
<div class="bg-blue-800 text-white p-4 rounded-lg w-3/4">
<p class="font-bold flex items-center gap-x-1 pb-2">
@include('sidekick::Blade.Components.bot') Assistant</p>
@include('Components.bot') Assistant</p>
<p>${response.content}</p>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Completion Sample
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Embedding Generation Sample
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Image Generation Sample
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Welcome to Sidekick Playground
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Moderate Sample
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@extends('sidekick::Blade.Shared.layout')
@extends('Shared.layout')

@section('title')
Transcription Generation Sample
Expand Down
42 changes: 21 additions & 21 deletions routes/web.php → stubs/default/routes/web.sidekick.php
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -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
Expand All @@ -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(
Expand All @@ -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(
Expand All @@ -108,69 +108,69 @@
);

// 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'),
width:'1024',
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');
});

0 comments on commit e3770c5

Please sign in to comment.