Skip to content

Commit

Permalink
Bug/Feature(SK): Fixed issue with route file/Added a file helper to s…
Browse files Browse the repository at this point in the history
…tore generated images and audio
  • Loading branch information
PapaRascal2020 committed Sep 20, 2024
1 parent efa585e commit a2d1bdd
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 8 deletions.
69 changes: 69 additions & 0 deletions src/Helpers/FileHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

namespace PapaRascalDev\Sidekick\Helpers;

class FileHelper
{
public function store(string $data, string $mimeType = null)
{
// Determine the type of data
if ($this->isBase64($data) ) {
$data = base64_decode($data);
} elseif ($this->isUrl($data)) {
$data = file_get_contents($data);
} else {
if (!$this->isBinary($data)) {
throw new \Exception("Cannot create file. Invalid data passed.");
}
}

// Determine the extension
$ext = $this->getExtensionFromMimeType($mimeType);

// Generate a unique filename
$filename = uniqid() . '.' . $ext;
$filePath = public_path('uploads/' . $filename);

// Ensure the uploads directory exists
if (!file_exists(public_path('uploads'))) {
mkdir(public_path('uploads'), 0777, true);
}

// Store the file
file_put_contents($filePath, $data);

// Return the local path of the stored file
return $filePath;
}

private function isBase64($data)
{
// Check if the data is base64 encoded
return base64_encode(base64_decode($data, true)) === $data;
}

private function isBinary($data)
{
// Check if the data is binary
return preg_match('~[^\x20-\x7E\t\r\n]~', $data) > 0;
}

private function isUrl($data)
{
// Check if the data is a valid URL
return filter_var($data, FILTER_VALIDATE_URL) !== false;
}

private function getExtensionFromMimeType($mimeType)
{
// Map MIME types to file extensions
$mimeTypes = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/gif' => 'gif',
'audio/mpeg' => 'mp3'
];

return $mimeTypes[$mimeType] ?? throw new \Exception("Mime-type $mimeType is not supported");
}
}
21 changes: 13 additions & 8 deletions stubs/default/routes/web.sidekick.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php

use Illuminate\Http\Request;
use PapaRascalDev\Sidekick\Helpers\FileHelper;
use \PapaRascalDev\Sidekick\Sidekick;
use Illuminate\Support\Facades\Route;
use \PapaRascalDev\Sidekick\Drivers\OpenAi;
Expand Down Expand Up @@ -79,7 +80,7 @@

Route::post('/sidekick/playground/completion', function (Request $request) {
// Loads a new instance of Sidekick with OpenAI
$sidekick = create(new OpenAi());
$sidekick = Sidekick::create(new OpenAi());

// Send message
$response = $sidekick->complete()->sendMessage(
Expand All @@ -99,32 +100,36 @@

Route::post('/sidekick/playground/audio', function (Request $request) {
// Loads a new instance of Sidekick with OpenAI
$sidekick = create(new OpenAi());
$sidekick = Sidekick::create(new OpenAi());

// Send text to be converted by Sidekick to audio
$audio = $sidekick->audio()->fromText(
model:'tts-1',
text: $request->get('text_to_convert')
);

$savedFile = (new FileHelper())->store($audio, 'audio/mpeg');

// Return the base64 encoded audio file to the front end
return view('Pages.audio', ['audio' => base64_encode($audio)]);
return view('Pages.audio', ['audio' => base64_encode($audio), 'savedFile' => $savedFile]);
});

Route::post('/sidekick/playground/image', function (Request $request) {
$sidekick = create(new OpenAi());
$sidekick = Sidekick::create(new OpenAi());
$image = $sidekick->image()->make(
model:'dall-e-3',
prompt: $request->get('text_to_convert'),
width:'1024',
height:'1024'
);

return view('Pages.image', ['image' => $image['data'][0]['url']]);
$savedFile = (new FileHelper())->store($image['data'][0]['url'], 'image/png');

return view('Pages.image', ['image' => $image['data'][0]['url'], 'savedFile' => $savedFile]);
});

Route::post('/sidekick/playground/transcribe', function (Request $request) {
$sidekick = create(new OpenAi());
$sidekick = Sidekick::create(new OpenAi());
$response = $sidekick->transcribe()->audioFile(
model:'whisper-1',
filePath:$request->get('audio')
Expand All @@ -133,7 +138,7 @@
});

Route::post('/sidekick/playground/embedding', function (Request $request) {
$sidekick = create(new OpenAi());
$sidekick = Sidekick::create(new OpenAi());
$response = $sidekick->embedding()->make(
model:'text-embedding-3-large',
input: $request->get('text'),
Expand All @@ -146,7 +151,7 @@
});

Route::post('/sidekick/playground/moderate', function (Request $request) {
$sidekick = create(new OpenAi());
$sidekick = Sidekick::create(new OpenAi());
$response = $sidekick->moderate()->text(
model:'text-moderation-latest',
content: $request->get('text')
Expand Down

0 comments on commit a2d1bdd

Please sign in to comment.