Skip to content

Commit

Permalink
Merge branch 'main' of github.com:JustinLawrenceMS/pegue.at.chiclay.com
Browse files Browse the repository at this point in the history
  • Loading branch information
JustinLawrenceMS committed Feb 4, 2025
2 parents 721162f + 54f3af3 commit bd377c7
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 25 deletions.
45 changes: 22 additions & 23 deletions app/AI/Assistant.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,20 @@

namespace App\AI;

use Illuminate\Support\Facades\Storage;
use OpenAI\Laravel\Facades\OpenAI;

class Assistant
{
private string $systemMessage = '';
private string $csl_path = '';
protected array $messages = [];

public function systemMessage(string $message = null): static
public function systemMessage(string $message): static
{
$this->systemMessage = config('openai.prompt.prompt_text');
$this->csl_path = Storage::disk('local')->get(config('openai.prompt.csl_path'));

\Log::info($this->systemMessage . $this->csl_path);

if (!is_null($message)) {
$this->systemMessage = $message;
}

$this->messages[] = [
'role' => 'system',
'content' => $this->systemMessage
'content' => $message
];

$this->setMessages();
$this->setSession();

return $this;
}
Expand All @@ -40,8 +28,7 @@ public function send(string $message): ?string
];

$response = OpenAI::chat()->create([
"model" => "gpt-3.5-turbo",
'max_tokens' => 4096,
"model" => "gpt-3.5-turbo",
"messages" => $this->messages
])->choices[0]->message->content;

Expand All @@ -52,31 +39,43 @@ public function send(string $message): ?string
];
}

$this->setSession();

return $response;
}

public function reply(string $message): ?string
{
$this->setMessages();
$this->setSession();

\Log::info("this->messages, AI assistant, line 62", $this->messages);
unset($this->messages);
return $this->send($message);
}

public function messages()
public function getMessages()
{
return $this->messages;
}

public function setMessages()
public function setMessages(string $role, string $message): void
{
$this->messages[] = [
'role' => $role,
'content' => $message,
];
}

public function setSession(): void
{
if (!session('messages')) {
session(['messages' => json_encode($this->messages, JSON_PRETTY_PRINT)]);
} else {
$sess = json_decode(session('messages'), true);
$merge = array_merge($sess, $this->messages);
session(['messages' => json_encode($merge, JSON_PRETTY_PRINT)]);

// Remove duplicates from the multidimensional array
$unique = array_map('unserialize', array_unique(array_map('serialize', $merge)));

session(['messages' => json_encode($unique, JSON_PRETTY_PRINT)]);
$this->messages = json_decode(session('messages'), true);
}
}
Expand Down
4 changes: 2 additions & 2 deletions resources/views/app.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
@if (request()->routeIs("dashboard*"))
<title inertia>{{ config('app.name', 'Laravel') }}</title>
<title inertia>{{ config('app.name', 'Laravel') }}</title>
@else
<title inertia>@yield("title")</title>
<title inertia>@yield("title")</title>
@endif

<!-- Fonts -->
Expand Down
116 changes: 116 additions & 0 deletions tests/Feature/AI/AssistantTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
<?php

namespace Tests\Feature;

use App\AI\Assistant;
use OpenAI\Laravel\Facades\OpenAI;
use OpenAI\Responses\Chat\CreateResponse;
use OpenAI\Testing\ClientFake;
use Tests\TestCase;

class AssistantTest extends TestCase
{
protected function setUp(): void
{
parent::setUp();

// Create a fake OpenAI client with a default response
$fakeClient = new ClientFake([
CreateResponse::fake([
'choices' => [
[
'message' => [
'content' => 'Mock response from OpenAI',
],
],
],
]),
]);

// Swap the actual OpenAI client with the fake one
OpenAI::swap($fakeClient);
}

public function test_system_message_is_saved()
{
$chat = new Assistant();

$chat->systemMessage('System message content');

$messages = $chat->getMessages();

$this->assertCount(1, $messages);
$this->assertEquals('system', $messages[0]['role']);
$this->assertEquals('System message content', $messages[0]['content']);
}

public function test_send_message_saves_and_returns_response()
{
$chat = new Assistant();

$response = $chat->send('Hello AI!');

$this->assertEquals('Mock response from OpenAI', $response);

$messages = $chat->getMessages();

dump($messages);
$this->assertCount(2, $messages);
$this->assertEquals('user', $messages[0]['role']);
$this->assertEquals('Hello AI!', $messages[0]['content']);
$this->assertEquals('assistant', $messages[1]['role']);
$this->assertEquals('Mock response from OpenAI', $messages[1]['content']);
}

public function test_reply_message_behaves_like_send()
{
$chat = new Assistant();

$response = $chat->reply('Hello AI again!');

$this->assertEquals('Mock response from OpenAI', $response);

$messages = $chat->getMessages();

$this->assertCount(2, $messages);
$this->assertEquals('user', $messages[0]['role']);
$this->assertEquals('Hello AI again!', $messages[0]['content']);
$this->assertEquals('assistant', $messages[1]['role']);
$this->assertEquals('Mock response from OpenAI', $messages[1]['content']);
}

public function test_set_messages_updates_session_correctly()
{
$chat = new Assistant();

$chat->systemMessage('System message content');
$chat->setSession();

$sessionMessages = json_decode(session('messages'), true);

dump($sessionMessages);
$this->assertCount(1, $sessionMessages);
$this->assertEquals('system', $sessionMessages[0]['role']);
$this->assertEquals('System message content', $sessionMessages[0]['content']);
}

public function test_no_api_calls_sent_without_user_message()
{
// Assert that no API call was made
OpenAI::assertNothingSent();
}

public function test_api_request_is_sent_with_correct_parameters()
{
$chat = new Assistant();

$chat->send('Test message');

// Assert the request was sent with the correct parameters
OpenAI::chat()->assertSent(function (string $method, array $parameters): bool {
return $method === 'create'
&& $parameters['model'] === 'gpt-3.5-turbo'
&& $parameters['messages'][0]['content'] === 'Test message';
});
}
}

0 comments on commit bd377c7

Please sign in to comment.