2024-05-14 08:32:53 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
|
|
|
|
class Ollama
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Provides a description for specified image(s) using the llava model
|
|
|
|
* with ollama
|
|
|
|
*/
|
2024-05-15 01:01:47 +02:00
|
|
|
public static function describeImage(array $base64JpegImages, ?string $title = null)
|
2024-05-14 08:32:53 +02:00
|
|
|
{
|
2024-05-15 01:01:47 +02:00
|
|
|
$prompt = 'Décris cette image en français en une phrase ou deux';
|
|
|
|
|
|
|
|
if (!empty($title)) {
|
|
|
|
$prompt .= ". Le titre de l'article où elle est utilisée est \"" . $title . '"';
|
|
|
|
}
|
|
|
|
|
|
|
|
$result = Http::throw()
|
|
|
|
->timeout(240)
|
|
|
|
->withHeader('Authorization', 'Bearer ' . env('OPENWEBUI_KEY'))
|
|
|
|
->post(sprintf('%s/ollama/api/generate', env('OLLAMA_HOST')), [
|
|
|
|
'model' => 'llava',
|
|
|
|
'prompt' => $prompt,
|
|
|
|
'stream' => false,
|
|
|
|
'keepalive' => 0,
|
|
|
|
'images' => $base64JpegImages,
|
|
|
|
])
|
|
|
|
->json();
|
|
|
|
|
|
|
|
return $result['response'];
|
|
|
|
}
|
|
|
|
|
|
|
|
public static function summarizeText(string $title, string $text)
|
|
|
|
{
|
|
|
|
$result = Http::throw()
|
|
|
|
->timeout(240)
|
|
|
|
->withHeader('Authorization', 'Bearer ' . env('OPENWEBUI_KEY'))
|
|
|
|
->post(sprintf('%s/ollama/api/generate', env('OLLAMA_HOST')), [
|
|
|
|
'model' => 'llama3',
|
|
|
|
'prompt' => sprintf(
|
|
|
|
'
|
|
|
|
Résume le texte suivant en français et en moins de 255 caractères :
|
|
|
|
# %s
|
|
|
|
%s',
|
|
|
|
$title,
|
|
|
|
$text
|
|
|
|
),
|
|
|
|
'stream' => false,
|
|
|
|
'keepalive' => 0,
|
|
|
|
])
|
|
|
|
->json();
|
2024-05-14 08:32:53 +02:00
|
|
|
|
|
|
|
return $result['response'];
|
|
|
|
}
|
|
|
|
}
|