google-gemini-php/laravel

Json response

asivaneswaran opened this issue · 1 comments

I ran into the same problem recently.

The link you provided uses the Gemini API v1beta version, which supports an responseMimeType option in the GenerationConfig object to be set to application/json. This great library uses Gemini v1 API, which does not support that parameter.

But you can easily tell gemini to only answer with a JSON response. Unfortunately, Gemini embeds the JSON code in a markdown code block. You then have to extract the JSON from that.

Example

$result = Gemini::geminiPro()
        ->generateContent('Please generate a list of the worlds biggest car manufacturers in JSON format, with the name of the manufacturer as key and yearly sold vehicles in float as value. IMPORTANT: Please answer in JSON format only, without any explanation.');

preg_match('/```json(.*?)```/s', $result->text(), $matches);

if (empty($matches[1])) {
    throw new \Exception('No valid JSON found in gemini response.');
}

// trim leading and trailng space
$json = trim($matches[1]);
    
echo $json;

Result

{
  "Toyota": 10.5,
  "Volkswagen": 10.3,
  "Hyundai Motor Group": 10.0,
  "General Motors": 9.3,
  "Stellantis": 8.7,
  "Honda": 8.5,
  "Ford": 8.2,
  "Renault-Nissan-Mitsubishi Alliance": 7.5,
  "BMW Group": 2.5,
  "SAIC Motor": 6.8
}