51 lines
1.5 KiB
PHP
51 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AI;
|
|
|
|
use App\Models\AI\AiUsageLog;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
abstract class BaseAiProvider implements AiProviderInterface
|
|
{
|
|
protected $config;
|
|
|
|
public function __construct(array $config = [])
|
|
{
|
|
$this->config = $config;
|
|
}
|
|
|
|
/**
|
|
* Log the AI usage to the database.
|
|
*/
|
|
protected function logUsage(array $data): void
|
|
{
|
|
try {
|
|
AiUsageLog::create([
|
|
'user_id' => Auth::id(),
|
|
'provider' => $this->getIdentifier(),
|
|
'model' => $data['model'] ?? 'unknown',
|
|
'prompt' => $data['prompt'] ?? null,
|
|
'response' => $data['response'] ?? null,
|
|
'prompt_tokens' => $data['usage']['prompt_tokens'] ?? 0,
|
|
'completion_tokens' => $data['usage']['completion_tokens'] ?? 0,
|
|
'total_tokens' => $data['usage']['total_tokens'] ?? 0,
|
|
'estimated_cost' => $this->calculateCost($data),
|
|
'status' => $data['status'] ?? 'success',
|
|
'error_message' => $data['error'] ?? null,
|
|
'metadata' => $data['metadata'] ?? null,
|
|
]);
|
|
} catch (\Exception $e) {
|
|
\Log::error('Failed to log AI usage: '.$e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Abstract cost calculation, to be implemented by each provider.
|
|
*/
|
|
protected function calculateCost(array $data): float
|
|
{
|
|
// Default implementation, can be overridden
|
|
return 0.0;
|
|
}
|
|
}
|