First commit

This commit is contained in:
Saufi
2026-05-18 08:56:23 +08:00
commit fd3d3a4d2b
147 changed files with 22099 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
<?php
namespace App\Jobs;
use App\Models\ChatLog;
use App\Models\ChatSession;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
/**
* LogChatInteractionJob
*
* Log pertanyaan + jawapan chatbot secara asynchronous.
* Hantar ke queue supaya response chatbot tidak ditangguh oleh operasi DB.
*/
class LogChatInteractionJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public int $tries = 3;
public int $timeout = 30;
public function __construct(
private readonly string $sessionToken,
private readonly ?int $userId,
private readonly ?int $categoryId,
private readonly string $question,
private readonly string $answer,
private readonly array $sources,
private readonly array $contextChunks,
private readonly string $modelUsed,
private readonly ?int $tokensUsed,
private readonly float $responseTime,
private readonly bool $hasAnswer,
) {
$this->onQueue(config('knowledgebase.queue.chat_log', 'default'));
}
public function handle(): void
{
$session = ChatSession::where('session_token', $this->sessionToken)->first();
if (!$session) {
return;
}
ChatLog::create([
'chat_session_id' => $session->id,
'user_id' => $this->userId,
'category_id' => $this->categoryId,
'question' => $this->question,
'answer' => $this->answer,
'sources_used' => $this->sources,
'context_chunks' => $this->contextChunks,
'model_used' => $this->modelUsed,
'tokens_used' => $this->tokensUsed,
'response_time' => $this->responseTime,
'has_answer' => $this->hasAnswer,
'is_flagged' => false,
]);
$session->update(['last_activity_at' => now()]);
}
}