amber-laravel/app/Repositories/LLM/History.php
2024-07-25 02:53:47 +08:00

85 lines
2.3 KiB
PHP

<?php
namespace App\Repositories\LLM;
use Exception;
class History
{
protected array $history = [];
public function addMessage(BaseMessage $message): void
{
$this->history[] = $message;
}
public function getMessages(): array
{
return $this->history;
}
/**
* @throws Exception
*/
public function setHistory(array $history): void
{
// foreach ($history as $h) {
// // 转换
// $role = match ($h['role']) {
// 'user' => ChatEnum::Human,
// 'assistant' => ChatEnum::Assistant,
// 'system' => ChatEnum::System,
// 'tool' => ChatEnum::Tool,
// default => throw new Exception('Unknown role: '.$h['role']),
// };
//
// $this->history[] = match ($role) {
// ChatEnum::Human => new HumanMessage($h['content']),
// ChatEnum::Assistant => new AIMessage($h['content']),
// ChatEnum::System => new SystemMessage($h['content']),
// ChatEnum::Tool => new ToolMessage($h['content']),
// ChatEnum::AssistantChunk => throw new \Exception('To be implemented'),
// };
// }
$this->history = $history;
// dd($this->history);
}
public function clearHistory(): void
{
$this->history = [];
}
public function getForApi(): array
{
$history = [];
foreach ($this->history as $h) {
// map roles
$role = match ($h->role) {
// ChatEnum::Human => 'user',
// ChatEnum::Assistant => 'assistant',
// ChatEnum::System => 'system',
// ChatEnum::Tool => 'tool',
ChatEnum::AssistantToolCall => ChatEnum::Assistant,
default => $h->role,
};
$a = [
'role' => $role->value,
'content' => $h->content,
];
if (isset($h->tool_calls)) {
$a['tool_calls'] = $h->tool_calls;
}
$history[] = $a;
}
return $history;
}
}