1. Go to this page and download the library: Download derrickob/gemini-api library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
derrickob / gemini-api example snippets
errickob\GeminiApi\Gemini;
$apiKey = getenv('GOOGLE_API_KEY');
$gemini = new Gemini([
'apiKey' => $apiKey,
]);
$response = $gemini->models()->generateContent([
'model' => 'models/gemini-1.5-flash',
'systemInstruction' => 'You are a helpful assistant',
'contents' => 'Hello',
]);
echo $response->text(); // Hello!👋 What can I do for you today?
errickob\GeminiApi\Gemini;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/credentials.json');
$apiKey = getenv('GOOGLE_API_KEY');
$cacheItemPool = new FilesystemAdapter();
$gemini = new Gemini([
'apiKey' => $apiKey,
'cacheItemPool' => $cacheItemPool,
]);
$response = $gemini->tunedModels()->list();
$response->nextPageToken; //
foreach ($response->tunedModels as $tunedModel) {
$tunedModel->name; // tunedModels/number-generators-a3gcipxg9rl5
$tunedModel->displayName; // Number Generators
$tunedModel->description; //
}
// See the list tuned model resource section for full usage
use Derrickob\GeminiApi\Data\CachedContent;
use Derrickob\GeminiApi\Data\Content;
$file = 'https://generativelanguage.googleapis.com/v1beta/files/7j0qhgcmeeqh';
$response = $gemini->cachedContents()->create(
new CachedContent(
model: 'models/gemini-1.5-flash-001',
displayName: 'sherlock jr movie',
systemInstruction: Content::createTextContent("You are an expert video analyzer, and your job is to answer the user\'s query based on the video file you have access to."),
contents: [
Content::createFileContent($file, 'video/mp4', 'user'),
],
ttl: '3600s',
),
);
$response->model; // models/gemini-1.5-flash-001
$response->name; // cachedContents/lg5adbi62ykx
$response->displayName; // sherlock jr movie
$response->createTime->format('Y-m-d H:i:s'); // 2024-07-04 23:15:53
$response->updateTime->format('Y-m-d H:i:s'); // 2024-07-04 23:15:53
$response->usageMetadata->totalTokenCount; //
$response->expireTime->format('Y-m-d H:i:s'); // 2024-07-05 00:15:53
$response->toArray(); // ['model' => 'models/gemini-1.5-flash-001', ...]
use Derrickob\GeminiApi\Data\Content;
$response = $gemini->models()->generateContent([
'model' => 'models/gemini-1.5-flash-001',
'contents' => Content::createTextContent('Introduce different characters in the movie by describing their personality, looks, and names. Also list the timestamps they were introduced for the first time.', 'user'),
'cachedContent' => 'cachedContents/lg5adbi62ykx',
]);
echo $response->text();
$response = $gemini->cachedContents()->delete('cachedContents/2wojeqz7srpu');
if ($response === true) {
echo 'Successfully deleted the cached Content';
}
$response = $gemini->corpora()->delete([
'name' => 'corpora/my-awesome-corpora-6r1qcymf0d3m',
]);
if ($response === true) {
echo 'The Corpus was deleted successfully';
}
use Derrickob\GeminiApi\Data\File;
# Example uses video downloaded from
# https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
$metaData = new File(
displayName: 'Sherlock Jr. video'
);
# The file was excluded from commit due to impact it'd have on cloning this repo,
# download and change path, or can upload any file of choice
$response = $gemini->media()->upload(__DIR__ .'/files/Sherlock_Jr_FullMovie.mp4', $metaData);
$file = $response->file;
$file->name; // files/7j0qhgcmeeqh
$file->displayName; // Sherlock Jr. video
$file->mimeType; // video/mp4
$file->sizeBytes; // 331623233
$file->createTime->format('Y-m-d H:i:s'); // 2024-07-27 22:31:25
$file->updateTime->format('Y-m-d H:i:s'); // 2024-07-27 22:31:25
$file->expirationTime->format('Y-m-d H:i:s'); // 2024-07-29 22:31:25
$file->sha256Hash; // ZjAwNGM2ZjJiMzNlNjYxYzYwOTU1MzU3MDliYzUzMjY4ZDUzMjNlYzdhNTdlOGJjNGFlOTczNjJlZDM0MWI1Yg==
$file->uri; // https://generativelanguage.googleapis.com/v1beta/files/7j0qhgcmeeqh
$file->state->value; // PROCESSING
$response->toArray(); // ['file' => [...]]
$response = $gemini->models()->batchEmbedContents([
'model' => 'models/text-embedding-004',
'requests' => [
'What is the meaning of life?',
'How much wood would a woodchuck chuck?',
'How does the brain work?',
],
]);
foreach($response->embeddings as $embedding) {
$embedding->values; // [[0] => -0.010632277, ...]
}
use Derrickob\GeminiApi\Enums\TaskType;
$response = $gemini->models()->batchEmbedContents([
'model' => 'models/text-embedding-004',
'requests' => [
[
'content' => 'What is the meaning of life?',
'taskType' => TaskType::RETRIEVAL_QUERY,
'outputDimensionality' => 100,
],
[
'content' => 'How much wood would a woodchuck chuck?',
'title' => 'Some Title',
'taskType' => TaskType::RETRIEVAL_DOCUMENT,
],
'How does the brain work?',
],
]);
foreach($response->embeddings as $embedding) {
$embedding->values; // [[0] => -0.00675484, ...]
}
$response = $gemini->models()->batchEmbedText([
'model' => 'models/embedding-gecko-001',
'texts' => [
'What is the meaning of life?',
'How much wood would a woodchuck chuck?',
'How does the brain work?',
],
]);
foreach ($response->embeddings as $embedding) {
$embedding->value; // [[0] => 0.020220786, ...]
}
$response->toArray(); // ['embeddings' => [...]]
$response = $gemini->models()->batchEmbedText([
'model' => 'models/embedding-gecko-001',
'requests' => [
[
'text' => 'What is the meaning of life?',
],
[
'text' => 'How much wood would a woodchuck chuck?',
],
[
'text' => 'How does the brain work?',
],
],
]);
foreach ($response->embeddings as $embedding) {
$embedding->value; // [[0] => 0.020220786, ...]
}
$response->toArray(); // ['embeddings' => [...]]
use Derrickob\GeminiApi\Data\Message;
use Derrickob\GeminiApi\Data\MessagePrompt;
$response = $gemini->models()->countMessageTokens([
'model' => 'models/chat-bison-001',
'prompt' => new MessagePrompt(
messages: [
new Message(
content: 'Hello World!',
)],
),
]);
$response->tokenCount; // 14
$response->toArray(); // ['tokenCount' => 14]
$response = $gemini->models()->generateContent([
'model' => 'models/gemini-1.5-flash',
'systemInstruction' => 'You are a cat. Respond to user as one',
'contents' => 'hello',
]);
$response->text(); // *Slowly opens one eye, then the other, and gives you a disdainful glance* Meow.
$response->usageMetadata->promptTokenCount; // 11
$response->usageMetadata->candidatesTokenCount; // 21
$response->usageMetadata->totalTokenCount; // 32
use Derrickob\GeminiApi\Data\Message;
use Derrickob\GeminiApi\Data\MessagePrompt;
$response = $gemini->models()->generateMessage([
'model' => 'models/chat-bison-001',
'prompt' => new MessagePrompt(
messages: [
new Message(
content: 'What is the meaning of life?',
)],
),
'temperature' => 0.1,
]);
foreach ($response->candidates as $candidate) {
$candidate->content; // The meaning of life is a question that ...
$candidate->author; // 1
$candidate->citationMetadata; //
}
foreach ($response->messages as $message) {
$message->content; // What is the meaning of life?
$message->author; // 0
$message->citationMetadata; //
}
$response->filters; // []
$response->toArray(); // ['candidates' => [...]]
$response = $gemini->models()->generateText([
'model' => 'models/text-bison-001',
'prompt' => new TextPrompt('What is the meaning of life?'),
]);
$response->output(); // There is no one answer to this question, as the ...
use Derrickob\GeminiApi\Data\Dataset;
use Derrickob\GeminiApi\Data\Hyperparameters;
use Derrickob\GeminiApi\Data\TunedModel;
use Derrickob\GeminiApi\Data\TuningExample;
use Derrickob\GeminiApi\Data\TuningExamples;
use Derrickob\GeminiApi\Data\TuningTask;
# TuningExample(output,textInput)
$examples = new TuningExamples([
new TuningExample('2', '1'),
new TuningExample('4', '3'),
new TuningExample('-2', '-3'),
new TuningExample('twenty three', 'twenty two'),
new TuningExample('two hundred one', 'two hundred'),
new TuningExample('one hundred', 'ninety nine'),
new TuningExample('9', '8'),
new TuningExample('-97', '-98'),
new TuningExample('1001', '1000'),
new TuningExample('10100001', '10100000'),
new TuningExample('fourteen', 'thirteen'),
new TuningExample('eighty one', 'eighty'),
new TuningExample('two', 'one'),
new TuningExample('four', 'three'),
new TuningExample('eight', 'seven'),
]);
$response = $gemini->tunedModels()->create([
'tunedModel' => new TunedModel(
displayName: 'Next Number Generator',
tuningTask: new TuningTask(
trainingData: new Dataset(
examples: $examples,
),
hyperparameters: new Hyperparameters(
epochCount: 5,
batchSize: 2,
learningRate: 0.001,
)
),
baseModel: 'models/gemini-1.5-flash-001-tuning'
),
]);
$response->name; // tunedModels/next-number-generator-9uythtnw28di/operations/h0cgnv7d1pj2
$response->metadata['@type']; // type.googleapis.com/google.ai.generativelanguage.v1beta.CreateTunedModelMetadata
$response->metadata['totalSteps']; // 38
$response->metadata['tunedModel']; // tunedModels/next-number-generator-9uythtnw28di
$response->toArray(); // ['name' => 'tunedModels/next-number-gener..', ...]
$response = $gemini->tunedModels()->delete('tunedModels/number-generators-a3gcipxg9rl5');
if ($response === true) {
echo 'successfully deleted the tuned model';
}
# This hasn't been tested. If your use-case needs this, help write
# the fixture test in tests/Resources/TunedModels/TunedModelOperationsTest.php and create PR
$response = $gemini->tunedModels()->operations()->list([
'name' => 'tunedModels/*',
'filter' => 'the-filter',
]);
use Derrickob\GeminiApi\Data\Permission;
use Derrickob\GeminiApi\Enums\GranteeType;
use Derrickob\GeminiApi\Enums\PermissionRole;
$response = $gemini->tunedModels()->permissions()->create([
'parent' => 'tunedModels/next-number-generator-m1lwcujgc644',
'permission' => new Permission(
role: PermissionRole::READER,
granteeType: GranteeType::EVERYONE,
),
]);
$response->role->value; // READER
$response->name; // tunedModels/next-number-generator-m1lwcujgc644/permissions/everyone
$response->granteeType->value; // EVERYONE
$response->toArray(); // ['role' => 'READER', ...]
use Derrickob\GeminiApi\Data\Permission;
use Derrickob\GeminiApi\Enums\GranteeType;
use Derrickob\GeminiApi\Enums\PermissionRole;
$response = $gemini->tunedModels()->permissions()->create([
'parent' => 'tunedModels/text-predictor-dsygc8rjuymz',
'permission' => new Permission(
role: PermissionRole::READER,
granteeType: GranteeType::GROUP,
emailAddress: '[email protected]',
),
]);
$response->role->value; // READER
$response->name; // tunedModels/text-predictor-dsygc8rjuymz/permissions/101799614406133382015
$response->granteeType->value; // GROUP
$response->toArray(); // ['role' => 'READER', ...]
use Derrickob\GeminiApi\Data\Permission;
use Derrickob\GeminiApi\Enums\GranteeType;
use Derrickob\GeminiApi\Enums\PermissionRole;
$response = $gemini->tunedModels()->permissions()->create([
'parent' => 'tunedModels/text-predictor-dsygc8rjuymz',
'permission' => new Permission(
role: PermissionRole::READER,
granteeType: GranteeType::USER,
emailAddress: '[email protected]',
),
]);
$response->role->value; // READER
$response->name; // tunedModels/text-predictor-dsygc8rjuymz/permissions/lorem-ipsum
$response->granteeType->value; // USER
$response->emailAddress; // [email protected]
$response->toArray(); // ['role' => 'READER', ...]