UNPKG

@jnode/gemini

Version:

Simple Gemini API package for Node.js.

269 lines (203 loc) 10.3 kB
# JustGemini Simple Gemini API package for Node.js. ```shell npm install @jnode/gemini ``` ## Basic Usage ### Import JustGemini ```js const gemini = require('@jnode/gemini'); ``` ### Create a Client ```js const client = new gemini.Client('YOUR_API_KEY'); ``` ### Generate Content with a Model ```js const model = client.model('gemini-pro'); async function generateText() { const result = await model.generate('Hello'); console.log(result.text); } generateText(); ``` ## Class: `GeminiClient` The main class for interacting with the Gemini API. ### Constructor ```js new gemini.Client(key, options = {}) ``` - `key`: Your Gemini API key. - `options`: An optional object for setting various client options: - `apiBase`: The base URL of the Gemini API. Default is `generativelanguage.googleapis.com`. - `apiThrowError`: Whether to throw errors when the API status code is not 2xx. Default is `true`. - `fileUnsupportError`: Whether to throw errors when the file type is not supported. Default is `true`. - `fileActiveCheckDelay`: Delay in milliseconds between file status checks. Default is `1500`. - `fileMaxActiveCheck`: Maximum number of file status checks. Default is `15`. ### Methods - `apiUrl(path = '/', query = '')`: Returns the full API URL with the base, path, and API key. - `path`: API endpoint path. - `query`: Query string. - **Returns**: `string` - The full API URL. - `async apiRequest(method = 'GET', path = '/', query = '', body)`: Makes an HTTP request to the Gemini API. - `method`: HTTP method (e.g., `GET`, `POST`, `PUT`, `DELETE`). Default is `GET`. - `path`: API endpoint path. Default is `/`. - `query`: Query string. - `body`: Request body data (will be stringified). - **Returns**: `Promise<RequestResponse>` - A promise that resolves to a `RequestResponse` object. - `model(model, options)`: Returns a `GeminiModel` instance for interacting with a specific model. - `model`: The name of the model (e.g., `gemini-pro`). - `options`: Model options. - **Returns**: `GeminiModel` - A `GeminiModel` instance. - `fileManager`: An instance of `GeminiFileManager` for managing files. ## Class: `GeminiModel` Represents a specific Gemini model. ### Constructor ```js new gemini.Model(client, model, options = {}) ``` - `client`: A `GeminiClient` instance. - `model`: The name of the model. - `options`: An optional object for setting model options: - `tools`: Custom tools to be used by the model. - `functions`: An array of `GeminiFunction` instances. - `functionMode`: Function calling mode ('NONE', 'AUTO', 'ANY'). - `allowedFunctions`: Allowed function names for function calling. - `safetySettings`: Safety settings for the model. - `systemInstruction`: System instruction text. - `jsonMode`: Enable JSON mode (boolean or object with response schema). - `jsonMode`: Enable image generate (boolean). - `stopSequences`: Stop sequences for generation. - `candidateCount`: Number of candidate responses. - `maxOutputTokens`: Maximum number of output tokens. - `temperature`: Temperature for generation. - `topP`: Top-p value for generation. - `topK`: Top-k value for generation. - `generationConfig`: Overwrite the config with original format. - `imageGenerate`: Boolean. Use image generate. ### Methods - `optionsToApiFormat(options = {})`: Converts simple options to API format. - `options`: Model options. - **Returns**: `object` - Options in API format. - `async contentToApiFormat(content)`: Converts simple content to API format. - `content`: Content string, array, or object. - **Returns**: `Promise<array>` - Content in API format. - `apiRequest(method, action, body)`: Makes an API request for this model. - `method`: HTTP method. - `action`: API action. - `body`: Request body. - **Returns**: `Promise<RequestResponse>` - A promise that resolves to a `RequestResponse` object. - `generate(content, optionsOverwrite = {})`: Generates content using the model. - `content`: Input content, which can be one of the following formats: - **String**: A single-turn text input. - **Example**: `'What is the meaning of life?'` - **Array of strings**: A multi-turn conversation where each string represents a turn. The turns alternate between user and model. - **Example**: `['What is the capital of France?', 'Paris.', 'And what about Spain?']` - **Array of arrays/objects**: A multi-turn conversation with more complex inputs, including text, booleans (to set the role), and file data. - **String**: a text part. - **Boolean**: (Optional, default `true` which means is a "user" turn) set role to "user" (`true`) or "model" (`false`). - **Object**: can be one of the following: - `{ text: string }`: A text part. - **Example**: `{ text: 'What is the weather like today?' }` - `{ filePath: string }`: A local file to be uploaded and used as input. The file will be automatically uploaded if it hasn't been uploaded already. - **Example**: `{ filePath: './image.png' }` - `{ fileUrl: string }`: A web file URL to be used as input. The file will be automatically uploaded if it hasn't been uploaded already. - **Example**: `{ fileUrl: 'https://example.com/image.jpg' }` - `{ file: { mimeType: string, data: Buffer } }`: File data directly provided as input. - **Example**: `{ file: { mimeType: 'image/png', data: imageBuffer } }` - Other objects will be treated as original API part format. - **Example**: `[['What is in this image?', true, { filePath: './image.png' }], false, 'This is a picture of a cat.', ['And this one?', { filePath: './image2.jpg' }]]` - **Array of objects**: A multi-turn conversation in the original API content format. Each object should have `role` and `parts` properties. - **Example**: `[{ role: 'user', parts: [{ text: 'Hello' }] }, { role: 'model', parts: [{ text: 'Hi there!' }] }]` - `optionsOverwrite`: Optional options to overwrite model options. - **Returns**: `Promise<GeminiContents>` - A promise that resolves to a `GeminiContents` instance. ## Class: `GeminiContents` Represents the contents generated by a model. ### Constructor ```js new gemini.Contents(model, contents) ``` - `model`: A `GeminiModel` instance. - `contents`: Initial contents array. ### Methods - `async generate(content, optionsOverwrite)`: Generates content and updates the `GeminiContents` instance. - `content`: Input content. - `optionsOverwrite`: Optional options to overwrite model options. - **Returns**: `Promise<this>` - The updated `GeminiContents` instance. - `async runFunctions(extraData)`: Executes function calls and continues generation. - `extraData`: Extra data to be passed to functions. - **Returns**: `Promise<GeminiContents>` - A promise that resolves to a new `GeminiContents` instance with the function responses. ### Properties - `model`: The `GeminiModel` instance. - `contents`: The full contents array. - `text`: The generated text. - `functionCalls`: An array of function calls. - `usage`: Usage metadata. - `feedback`: Prompt feedback. - `status`: Finish reason. - `attachments`: An array of inline data respond by model. ## Class: `GeminiFileManager` Manages file uploads and retrieval for the Gemini API. ### Constructor ```js new gemini.FileManager(client) ``` - `client`: A `GeminiClient` instance. ### Methods - `async uploadFile(file, isWebFile = false, displayName)`: Uploads a local or web file to Gemini API. - `file`: File path or URL. - `isWebFile`: Whether the file is a web file. Default is `false`. - `displayName`: Optional display name for the file. - **Returns**: `Promise<object>` - A promise that resolves to the uploaded file object. - `async getFilesList()`: Retrieves the list of uploaded files. - **Returns**: `Promise<array>` - A promise that resolves to an array of file objects. - `apiDeleteFile(file)`: Deletes an uploaded file. - `file`: File name or object. - **Returns**: `Promise<RequestResponse>` - A promise that resolves to a `RequestResponse` object. - `async getSmartFile(file, isWebFile = false)`: Retrieves a file object if it's already uploaded, otherwise returns `undefined`. - `file`: File path or URL. - `isWebFile`: Whether the file is a web file. - **Returns**: `Promise<object|undefined>` - A promise that resolves to the file object or `undefined`. - `getSmartName(file, isWebFile, mtime)`: Generates a smart display name for a file. - `file`: File path or URL. - `isWebFile`: Whether the file is a web file. - `mtime`: File modification time. - **Returns**: `string` - The smart display name. ### Properties - `client`: The `GeminiClient` instance. - `filesCache`: An array of cached file objects. ## Class: `GeminiFunction` Represents a function that can be called by the Gemini model. ### Constructor ```js new gemini.Function(name, description, parameters = null, func) ``` - `name`: Function name. - `description`: Function description. - `parameters`: Function parameters (in OpenAPI format). - `func`: The actual function to be executed. ### Methods - `toApiFormat()`: Converts the `GeminiFunction` instance to API format. - **Returns**: `object` - Function in API format. ## Class: `GeminiAPIError` An error that is thrown when the Gemini API returns a non-2xx status code. ### Constructor ```js new GeminiAPIError(code, body, headers) ``` - `code`: The error code. - `body`: The response body. - `headers`: The response headers. ### Properties - `message`: The error message. - `code`: The error code. - `body`: The response body. - `headers`: The response headers. ## Helper functions - `RequestResponse` class with properties like: - `code`: Status code. - `headers`: Response headers. - `text(encoding)`: Return response body in string, with optional encoding. Example: `res.text('utf-8')`. - `json()`: Return response body in JSON format, or `undefined` when cannot parse JSON. Example: `res.json()`. ## Constants - `supportMimeTypes`: An object mapping file extensions to MIME types.