mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-09-05 15:36:45 +08:00
chore: Enhance project description, add badges, and clarify licensing terms
This commit is contained in:
@@ -8,31 +8,33 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
> ⚠️ This project is licensed under the CC BY-NC 4.0 (Attribution-NonCommercial) license. Any form of commercial resale service is prohibited. See the LICENSE file for details.
|
||||
<p align="center">
|
||||
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/Python-3.9%2B-blue.svg" alt="Python"></a>
|
||||
<a href="https://fastapi.tiangolo.com/"><img src="https://img.shields.io/badge/FastAPI-0.100%2B-green.svg" alt="FastAPI"></a>
|
||||
<a href="https://www.uvicorn.org/"><img src="https://img.shields.io/badge/Uvicorn-running-purple.svg" alt="Uvicorn"></a>
|
||||
<a href="https://t.me/+soaHax5lyI0wZDVl"><img src="https://img.shields.io/badge/Telegram-Group-blue.svg?logo=telegram" alt="Telegram Group"></a>
|
||||
</p>
|
||||
|
||||
> I have never sold this service on any platform. If you encounter someone selling this service, they are definitely a reseller. Please be careful not to be deceived.
|
||||
> ⚠️ **Important**: This project is licensed under the [CC BY-NC 4.0](LICENSE) license. **Any form of commercial resale service is prohibited**.
|
||||
> I have never sold this service on any platform. If you encounter someone selling this service, they are a reseller. Please do not be deceived.
|
||||
|
||||
[](https://www.python.org/)
|
||||
[](https://fastapi.tiangolo.com/)
|
||||
[](https://www.uvicorn.org/)
|
||||
[](https://t.me/+soaHax5lyI0wZDVl)
|
||||
---
|
||||
|
||||
> Telegram Group: <https://t.me/+soaHax5lyI0wZDVl>
|
||||
## 📖 Project Introduction
|
||||
|
||||
## Project Introduction
|
||||
**Gemini Balance** is an application built with Python FastAPI, designed to provide proxy and load balancing functions for the Google Gemini API. It allows you to manage multiple Gemini API Keys and implement key rotation, authentication, model filtering, and status monitoring through simple configuration. Additionally, the project integrates image generation and multiple image hosting upload functions, and supports proxying in the OpenAI API format.
|
||||
|
||||
Gemini Balance is an application built with Python FastAPI, designed to provide proxy and load balancing functions for the Google Gemini API. It allows you to manage multiple Gemini API Keys and implement key rotation, authentication, model filtering, and status monitoring through simple configuration. Additionally, the project integrates image generation and multiple image hosting upload functions, and supports proxying in the OpenAI API format.
|
||||
|
||||
**Project Structure:**
|
||||
<details>
|
||||
<summary>📂 View Project Structure</summary>
|
||||
|
||||
```plaintext
|
||||
app/
|
||||
├── config/ # Configuration management
|
||||
├── core/ # Core application logic (FastAPI instance creation, middleware, etc.)
|
||||
├── database/ # Database models and connections
|
||||
├── domain/ # Business domain objects (optional)
|
||||
├── domain/ # Business domain objects
|
||||
├── exception/ # Custom exceptions
|
||||
├── handler/ # Request handlers (optional, or handled in router)
|
||||
├── handler/ # Request handlers
|
||||
├── log/ # Logging configuration
|
||||
├── main.py # Application entry point
|
||||
├── middleware/ # FastAPI middleware
|
||||
@@ -41,250 +43,227 @@ app/
|
||||
├── service/ # Business logic services (chat, Key management, statistics, etc.)
|
||||
├── static/ # Static files (CSS, JS)
|
||||
├── templates/ # HTML templates (e.g., Key status page)
|
||||
├── utils/ # Utility functions
|
||||
└── utils/ # Utility functions
|
||||
```
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## ✨ Feature Highlights
|
||||
|
||||
* **Multi-Key Load Balancing**: Supports configuring multiple Gemini API Keys (`API_KEYS`) for automatic sequential polling, improving availability and concurrency.
|
||||
* **Visual Configuration Takes Effect Immediately**: Configurations modified through the admin backend take effect without restarting the service. Remember to click save for changes to apply.
|
||||
* **Multi-Key Load Balancing**: Supports configuring multiple Gemini API Keys (`API_KEYS`) for automatic sequential polling.
|
||||
* **Visual Configuration**: Configurations modified through the admin backend take effect immediately without restarting.
|
||||

|
||||
* **Dual Protocol API Compatibility**: Supports forwarding CHAT API requests in both Gemini and OpenAI formats.
|
||||
|
||||
```plaintext
|
||||
openai baseurl `http://localhost:8000(/hf)/v1`
|
||||
gemini baseurl `http://localhost:8000(/gemini)/v1beta`
|
||||
```
|
||||
|
||||
* **Supports Image-Text Chat and Image Modification**: `IMAGE_MODELS` configures which models can perform image-text chat and image editing. When actually calling, use the `configured_model-image` model name to use this feature.
|
||||
* **Dual Protocol API Compatibility**: Supports both Gemini and OpenAI CHAT API formats.
|
||||
* OpenAI Base URL: `http://localhost:8000(/hf)/v1`
|
||||
* Gemini Base URL: `http://localhost:8000(/gemini)/v1beta`
|
||||
* **Image-Text Chat & Modification**: Configure models with `IMAGE_MODELS` to support image-text chat and editing. Use the `configured_model-image` model name to invoke.
|
||||

|
||||

|
||||
* **Supports Web Search**: Supports web search. `SEARCH_MODELS` configures which models can perform web searches. When actually calling, use the `configured_model-search` model name to use this feature.
|
||||
* **Web Search**: Configure models with `SEARCH_MODELS` to support web search. Use the `configured_model-search` model name to invoke.
|
||||

|
||||
* **Key Status Monitoring**: Provides a `/keys_status` page (requires authentication) to view the status and usage of each Key in real-time.
|
||||
* **Key Status Monitoring**: Provides a `/keys_status` page (authentication required) for real-time monitoring.
|
||||

|
||||
* **Detailed Logging**: Provides detailed error logs for easy troubleshooting.
|
||||
* **Detailed Logging**: Provides detailed error logs for easy troubleshooting.
|
||||

|
||||

|
||||

|
||||
* **Support for Custom Gemini Proxy**: Supports custom Gemini proxies, such as those built on Deno or Cloudflare.
|
||||
* **OpenAI Image Generation API Compatibility**: Adapts the `imagen-3.0-generate-002` model interface to be compatible with the OpenAI image generation API, supporting client calls.
|
||||
* **Flexible Key Addition**: Flexible way to add keys using regex matching for `gemini_key`, with key deduplication.
|
||||
* **Flexible Key Addition**: Add keys in batches using the `gemini_key` regex, with automatic deduplication.
|
||||

|
||||
* **OpenAI Format Embeddings API Compatibility**: Perfectly adapts to the OpenAI format `embeddings` interface, usable for local document vectorization.
|
||||
* **Streamlined Response Optimization**: Optional stream output optimizer (`STREAM_OPTIMIZER_ENABLED`) to improve the experience of long-text stream responses.
|
||||
* **Failure Retry and Key Management**: Automatically handles API request failures, retries (`MAX_RETRIES`), automatically disables Keys after too many failures (`MAX_FAILURES`), and periodically checks for recovery (`CHECK_INTERVAL_HOURS`).
|
||||
* **Docker Support**: Supports AMD and ARM architecture Docker deployments. You can also build your own Docker image.
|
||||
> Image address: docker pull ghcr.io/snailyp/gemini-balance:latest
|
||||
* **Automatic Model List Maintenance**: Supports fetching OpenAI and Gemini model lists, perfectly compatible with NewAPI's automatic model list fetching, no manual entry required.
|
||||
* **Support for Removing Unused Models**: Too many default models are provided, many of which are not used. You can filter them out using `FILTERED_MODELS`.
|
||||
* **Proxy Support**: Supports configuring HTTP/SOCKS5 proxy servers (`PROXIES`) for accessing the Gemini API, convenient for use in special network environments. Supports batch adding proxies.
|
||||
* **Failure Retry & Auto-Disable**: Automatically retries failed API requests (`MAX_RETRIES`) and disables keys after excessive failures (`MAX_FAILURES`).
|
||||
* **Comprehensive API Compatibility**:
|
||||
* **Embeddings API**: Fully compatible with the OpenAI `embeddings` API format.
|
||||
* **Image Generation API**: Adapts the `imagen-3.0-generate-002` model to the OpenAI image generation API format.
|
||||
* **Automatic Model List Maintenance**: Automatically fetches and syncs the latest model lists from Gemini and OpenAI.
|
||||
* **Proxy Support**: Supports HTTP/SOCKS5 proxies (`PROXIES`).
|
||||
* **Docker Support**: Provides Docker images for both AMD and ARM architectures.
|
||||
* Image Address: `ghcr.io/snailyp/gemini-balance:latest`
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Build Docker Yourself (Recommended)
|
||||
|
||||
#### a) Build with Dockerfile
|
||||
|
||||
1. **Build Image**:
|
||||
### Option 1: Docker Compose (Recommended)
|
||||
|
||||
1. **Get `docker-compose.yml`**:
|
||||
Download the `docker-compose.yml` file from the project repository.
|
||||
2. **Prepare `.env` file**:
|
||||
Copy `.env.example` to `.env` and configure it. Ensure `DATABASE_TYPE` is set to `mysql` and fill in the `MYSQL_*` details.
|
||||
3. **Start Services**:
|
||||
In the directory containing `docker-compose.yml` and `.env`, run:
|
||||
```bash
|
||||
docker build -t gemini-balance .
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
2. **Run Container**:
|
||||
|
||||
```bash
|
||||
docker run -d -p 8000:8000 --env-file .env gemini-balance
|
||||
```
|
||||
|
||||
* `-d`: Run in detached mode.
|
||||
* `-p 8000:8000`: Map port 8000 of the container to port 8000 of the host.
|
||||
* `--env-file .env`: Use the `.env` file to set environment variables.
|
||||
|
||||
> Note: If using an SQLite database, you need to mount a data volume to persist
|
||||
>
|
||||
> ```bash
|
||||
> docker run -d -p 8000:8000 --env-file .env -v /path/to/data:/app/data gemini-balance
|
||||
> ```
|
||||
>
|
||||
> Where `/path/to/data` is the data storage path on the host, and `/app/data` is the data directory inside the container.
|
||||
|
||||
#### b) Deploy with an Existing Docker Image
|
||||
|
||||
1. **Pull Image**:
|
||||
### Option 2: Docker Command
|
||||
|
||||
1. **Pull Image**:
|
||||
```bash
|
||||
docker pull ghcr.io/snailyp/gemini-balance:latest
|
||||
```
|
||||
|
||||
2. **Run Container**:
|
||||
|
||||
2. **Prepare `.env` file**:
|
||||
Copy `.env.example` to `.env` and configure it.
|
||||
3. **Run Container**:
|
||||
```bash
|
||||
docker run -d -p 8000:8000 --env-file .env ghcr.io/snailyp/gemini-balance:latest
|
||||
docker run -d -p 8000:8000 --name gemini-balance \
|
||||
-v ./data:/app/data \
|
||||
--env-file .env \
|
||||
ghcr.io/snailyp/gemini-balance:latest
|
||||
```
|
||||
* `-d`: Detached mode.
|
||||
* `-p 8000:8000`: Map container port 8000 to host.
|
||||
* `-v ./data:/app/data`: Mount volume for persistent data.
|
||||
* `--env-file .env`: Load environment variables.
|
||||
|
||||
* `-d`: Run in detached mode.
|
||||
* `-p 8000:8000`: Map port 8000 of the container to port 8000 of the host (adjust as needed).
|
||||
* `--env-file .env`: Use the `.env` file to set environment variables (ensure the `.env` file exists in the directory where the command is executed).
|
||||
|
||||
> Note: If using an SQLite database, you need to mount a data volume to persist
|
||||
>
|
||||
> ```bash
|
||||
> docker run -d -p 8000:8000 --env-file .env -v /path/to/data:/app/data ghcr.io/snailyp/gemini-balance:latest
|
||||
> ```
|
||||
>
|
||||
> Where `/path/to/data` is the data storage path on the host, and `/app/data` is the data directory inside the container.
|
||||
|
||||
### Run Locally (Suitable for Development and Testing)
|
||||
|
||||
If you want to run the source code directly locally for development or testing, follow these steps:
|
||||
|
||||
1. **Ensure Prerequisites are Met**:
|
||||
* Clone the repository locally.
|
||||
* Install Python 3.9 or higher.
|
||||
* Create and configure the `.env` file in the project root directory (refer to the "Configure Environment Variables" section above).
|
||||
* Install project dependencies:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
2. **Start Application**:
|
||||
Run the following command in the project root directory:
|
||||
### Option 3: Local Development
|
||||
|
||||
1. **Clone and Install**:
|
||||
```bash
|
||||
git clone https://github.com/snailyp/gemini-balance.git
|
||||
cd gemini-balance
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
2. **Configure Environment**:
|
||||
Copy `.env.example` to `.env` and configure it.
|
||||
3. **Start Application**:
|
||||
```bash
|
||||
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
|
||||
```
|
||||
Access the application at `http://localhost:8000`.
|
||||
|
||||
* `app.main:app`: Specifies the location of the FastAPI application instance (the `app` object in the `main.py` file within the `app` module).
|
||||
* `--host 0.0.0.0`: Makes the application accessible from any IP address on the local network.
|
||||
* `--port 8000`: Specifies the port number the application listens on (you can change this as needed).
|
||||
* `--reload`: Enables automatic reloading. When you modify the code, the service will automatically restart, which is very suitable for development environments (remove this option in production environments).
|
||||
|
||||
3. **Access Application**:
|
||||
After the application starts, you can access `http://localhost:8000` (or the host and port you specified) through a browser or API tool.
|
||||
|
||||
### Complete Configuration List
|
||||
|
||||
| Configuration Item | Description | Default Value |
|
||||
| :----------------------------- | :-------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **Database Configuration** | | |
|
||||
| `DATABASE_TYPE` | Optional, database type, supports `mysql` or `sqlite` | `mysql` |
|
||||
| `SQLITE_DATABASE` | Optional, required when using `sqlite`, SQLite database file path | `default_db` |
|
||||
| `MYSQL_HOST` | Required when using `mysql`, MySQL database host address | `localhost` |
|
||||
| `MYSQL_SOCKET` | Optional, MySQL database socket address | `/var/run/mysqld/mysqld.sock` |
|
||||
| `MYSQL_PORT` | Required when using `mysql`, MySQL database port | `3306` |
|
||||
| `MYSQL_USER` | Required when using `mysql`, MySQL database username | `your_db_user` |
|
||||
| `MYSQL_PASSWORD` | Required when using `mysql`, MySQL database password | `your_db_password` |
|
||||
| `MYSQL_DATABASE` | Required when using `mysql`, MySQL database name | `defaultdb` |
|
||||
| **API Related Configuration** | | |
|
||||
| `API_KEYS` | Required, list of Gemini API keys for load balancing | `["your-gemini-api-key-1", "your-gemini-api-key-2"]` |
|
||||
| `ALLOWED_TOKENS` | Required, list of tokens allowed to access | `["your-access-token-1", "your-access-token-2"]` |
|
||||
| `AUTH_TOKEN` | Optional, super admin token with all permissions, defaults to the first of `ALLOWED_TOKENS` if not set | `sk-123456` |
|
||||
| `TEST_MODEL` | Optional, model name used to test if a key is usable | `gemini-1.5-flash` |
|
||||
| `IMAGE_MODELS` | Optional, list of models that support drawing functions | `["gemini-2.0-flash-exp"]` |
|
||||
| `SEARCH_MODELS` | Optional, list of models that support search functions | `["gemini-2.0-flash-exp"]` |
|
||||
| `FILTERED_MODELS` | Optional, list of disabled models | `["gemini-1.0-pro-vision-latest", ...]` |
|
||||
| `TOOLS_CODE_EXECUTION_ENABLED` | Optional, whether to enable the code execution tool | `false` |
|
||||
| `SHOW_SEARCH_LINK` | Optional, whether to display search result links in the response | `true` |
|
||||
| `SHOW_THINKING_PROCESS` | Optional, whether to display the model's thinking process | `true` |
|
||||
| `THINKING_MODELS` | Optional, list of models that support thinking functions | `[]` |
|
||||
| `THINKING_BUDGET_MAP` | Optional, thinking function budget mapping (model_name:budget_value) | `{}` |
|
||||
| `URL_NORMALIZATION_ENABLED` | Optional, whether to enable intelligent URL routing mapping | `false` |
|
||||
| `URL_CONTEXT_ENABLED` | Optional, whether to enable URL context understanding | `false` |
|
||||
| `URL_CONTEXT_MODELS` | Optional, list of models that support URL context understanding | `[]` |
|
||||
| `BASE_URL` | Optional, Gemini API base URL, no modification needed by default | `https://generativelanguage.googleapis.com/v1beta` |
|
||||
| `MAX_FAILURES` | Optional, number of times a single key is allowed to fail | `3` |
|
||||
| `MAX_RETRIES` | Optional, maximum number of retries for failed API requests | `3` |
|
||||
| `CHECK_INTERVAL_HOURS` | Optional, time interval (hours) to check if a disabled Key has recovered | `1` |
|
||||
| `TIMEZONE` | Optional, timezone used by the application | `Asia/Shanghai` |
|
||||
| `TIME_OUT` | Optional, request timeout (seconds) | `300` |
|
||||
| `PROXIES` | Optional, list of proxy servers (e.g., `http://user:pass@host:port`, `socks5://host:port`) | `[]` |
|
||||
| `LOG_LEVEL` | Optional, log level, e.g., DEBUG, INFO, WARNING, ERROR, CRITICAL | `INFO` |
|
||||
| `AUTO_DELETE_ERROR_LOGS_ENABLED` | Optional, whether to enable automatic deletion of error logs | `true` |
|
||||
| `AUTO_DELETE_ERROR_LOGS_DAYS` | Optional, automatically delete error logs older than this many days (e.g., 1, 7, 30) | `7` |
|
||||
| `AUTO_DELETE_REQUEST_LOGS_ENABLED`| Optional, whether to enable automatic deletion of request logs | `false` |
|
||||
| `AUTO_DELETE_REQUEST_LOGS_DAYS` | Optional, automatically delete request logs older than this many days (e.g., 1, 7, 30) | `30` |
|
||||
| `SAFETY_SETTINGS` | Optional, safety settings (JSON string format), used to configure content safety thresholds. Example values may need adjustment based on actual model support. | `[{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "OFF"}, {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "OFF"}, {"category": "HARM_CATEGORY_CIVIC_INTEGRITY", "threshold": "BLOCK_NONE"}]` |
|
||||
| **TTS Related** | | |
|
||||
| `TTS_MODEL` | Optional, TTS model name | `gemini-2.5-flash-preview-tts` |
|
||||
| `TTS_VOICE_NAME` | Optional, TTS voice name | `Zephyr` |
|
||||
| `TTS_SPEED` | Optional, TTS speed | `normal` |
|
||||
| **Image Generation Related** | | |
|
||||
| `PAID_KEY` | Optional, paid API Key for advanced features like image generation | `your-paid-api-key` |
|
||||
| `CREATE_IMAGE_MODEL` | Optional, image generation model | `imagen-3.0-generate-002` |
|
||||
| `UPLOAD_PROVIDER` | Optional, image upload provider: `smms`, `picgo`, `cloudflare_imgbed` | `smms` |
|
||||
| `SMMS_SECRET_TOKEN` | Optional, API Token for SM.MS image hosting | `your-smms-token` |
|
||||
| `PICGO_API_KEY` | Optional, API Key for [PicoGo](https://www.picgo.net/) image hosting | `your-picogo-apikey` |
|
||||
| `CLOUDFLARE_IMGBED_URL` | Optional, [CloudFlare](https://github.com/MarSeventh/CloudFlare-ImgBed) image hosting upload address | `https://xxxxxxx.pages.dev/upload` |
|
||||
| `CLOUDFLARE_IMGBED_AUTH_CODE` | Optional, authentication key for CloudFlare image hosting | `your-cloudflare-imgber-auth-code` |
|
||||
| `CLOUDFLARE_IMGBED_UPLOAD_FOLDER` | Optional, upload folder path for CloudFlare image hosting | `""` |
|
||||
| **Stream Optimizer Related** | | |
|
||||
| `STREAM_OPTIMIZER_ENABLED` | Optional, whether to enable stream output optimization | `false` |
|
||||
| `STREAM_MIN_DELAY` | Optional, minimum delay for stream output | `0.016` |
|
||||
| `STREAM_MAX_DELAY` | Optional, maximum delay for stream output | `0.024` |
|
||||
| `STREAM_SHORT_TEXT_THRESHOLD` | Optional, short text threshold | `10` |
|
||||
| `STREAM_LONG_TEXT_THRESHOLD` | Optional, long text threshold | `50` |
|
||||
| `STREAM_CHUNK_SIZE` | Optional, stream output chunk size | `5` |
|
||||
| **Fake Stream Related** | | |
|
||||
| `FAKE_STREAM_ENABLED` | Optional, whether to enable fake streaming for models or scenarios that don't support streaming | `false` |
|
||||
| `FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS` | Optional, interval in seconds for sending heartbeat empty data during fake streaming | `5` |
|
||||
---
|
||||
|
||||
## ⚙️ API Endpoints
|
||||
|
||||
The following are the main API endpoints provided by the service:
|
||||
### Gemini API Format (`/gemini/v1beta`)
|
||||
|
||||
### Gemini API Related (`(/gemini)/v1beta`)
|
||||
* `GET /models`: List available Gemini models.
|
||||
* `POST /models/{model_name}:generateContent`: Generate content.
|
||||
* `POST /models/{model_name}:streamGenerateContent`: Stream content generation.
|
||||
|
||||
* `GET /models`: List available Gemini models.
|
||||
* `POST /models/{model_name}:generateContent`: Generate content using the specified Gemini model.
|
||||
* `POST /models/{model_name}:streamGenerateContent`: Stream content generation using the specified Gemini model.
|
||||
### OpenAI API Format
|
||||
|
||||
### OpenAI API Related
|
||||
#### Hugging Face (HF) Compatible
|
||||
|
||||
* `GET (/hf)/v1/models`: List available models (uses Gemini format underneath).
|
||||
* `POST (/hf)/v1/chat/completions`: Perform chat completion (uses Gemini format underneath, supports streaming).
|
||||
* `POST (/hf)/v1/embeddings`: Create text embeddings (uses Gemini format underneath).
|
||||
* `POST (/hf)/v1/images/generations`: Generate images (uses Gemini format underneath).
|
||||
* `GET /openai/v1/models`: List available models (uses OpenAI format underneath).
|
||||
* `POST /openai/v1/chat/completions`: Perform chat completion (uses OpenAI format underneath, supports streaming, can prevent truncation, and is faster).
|
||||
* `POST /openai/v1/embeddings`: Create text embeddings (uses OpenAI format underneath).
|
||||
* `POST /openai/v1/images/generations`: Generate images (uses OpenAI format underneath).
|
||||
* `GET /hf/v1/models`: List models.
|
||||
* `POST /hf/v1/chat/completions`: Chat completion.
|
||||
* `POST /hf/v1/embeddings`: Create text embeddings.
|
||||
* `POST /hf/v1/images/generations`: Generate images.
|
||||
|
||||
#### Standard OpenAI
|
||||
|
||||
* `GET /openai/v1/models`: List models.
|
||||
* `POST /openai/v1/chat/completions`: Chat completion (Recommended).
|
||||
* `POST /openai/v1/embeddings`: Create text embeddings.
|
||||
* `POST /openai/v1/images/generations`: Generate images.
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>📋 View Full Configuration List</summary>
|
||||
|
||||
| Configuration Item | Description | Default Value |
|
||||
| :--- | :--- | :--- |
|
||||
| **Database** | | |
|
||||
| `DATABASE_TYPE` | `mysql` or `sqlite` | `mysql` |
|
||||
| `SQLITE_DATABASE` | Path for SQLite database file | `default_db` |
|
||||
| `MYSQL_HOST` | MySQL host address | `localhost` |
|
||||
| `MYSQL_SOCKET` | MySQL socket address | `/var/run/mysqld/mysqld.sock` |
|
||||
| `MYSQL_PORT` | MySQL port | `3306` |
|
||||
| `MYSQL_USER` | MySQL username | `your_db_user` |
|
||||
| `MYSQL_PASSWORD` | MySQL password | `your_db_password` |
|
||||
| `MYSQL_DATABASE` | MySQL database name | `defaultdb` |
|
||||
| **API** | | |
|
||||
| `API_KEYS` | **Required**, list of Gemini API keys | `[]` |
|
||||
| `ALLOWED_TOKENS` | **Required**, list of access tokens | `[]` |
|
||||
| `AUTH_TOKEN` | Super admin token, defaults to the first of `ALLOWED_TOKENS` | `sk-123456` |
|
||||
| `TEST_MODEL` | Model for testing key validity | `gemini-1.5-flash` |
|
||||
| `IMAGE_MODELS` | Models supporting image generation | `["gemini-2.0-flash-exp"]` |
|
||||
| `SEARCH_MODELS` | Models supporting web search | `["gemini-2.0-flash-exp"]` |
|
||||
| `FILTERED_MODELS` | Disabled models | `[]` |
|
||||
| `TOOLS_CODE_EXECUTION_ENABLED` | Enable code execution tool | `false` |
|
||||
| `SHOW_SEARCH_LINK` | Display search result links in response | `true` |
|
||||
| `SHOW_THINKING_PROCESS` | Display model's thinking process | `true` |
|
||||
| `THINKING_MODELS` | Models supporting thinking process | `[]` |
|
||||
| `THINKING_BUDGET_MAP` | Budget map for thinking function (model:budget) | `{}` |
|
||||
| `URL_NORMALIZATION_ENABLED` | Enable smart URL routing | `false` |
|
||||
| `URL_CONTEXT_ENABLED` | Enable URL context understanding | `false` |
|
||||
| `URL_CONTEXT_MODELS` | Models supporting URL context | `[]` |
|
||||
| `BASE_URL` | Gemini API base URL | `https://generativelanguage.googleapis.com/v1beta` |
|
||||
| `MAX_FAILURES` | Max failures allowed per key | `3` |
|
||||
| `MAX_RETRIES` | Max retries for failed API requests | `3` |
|
||||
| `CHECK_INTERVAL_HOURS` | Interval (hours) to re-check disabled keys | `1` |
|
||||
| `TIMEZONE` | Application timezone | `Asia/Shanghai` |
|
||||
| `TIME_OUT` | Request timeout (seconds) | `300` |
|
||||
| `PROXIES` | List of proxy servers | `[]` |
|
||||
| **Logging & Security** | | |
|
||||
| `LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARNING`, `ERROR` | `INFO` |
|
||||
| `AUTO_DELETE_ERROR_LOGS_ENABLED` | Auto-delete error logs | `true` |
|
||||
| `AUTO_DELETE_ERROR_LOGS_DAYS` | Error log retention period (days) | `7` |
|
||||
| `AUTO_DELETE_REQUEST_LOGS_ENABLED`| Auto-delete request logs | `false` |
|
||||
| `AUTO_DELETE_REQUEST_LOGS_DAYS` | Request log retention period (days) | `30` |
|
||||
| `SAFETY_SETTINGS` | Content safety thresholds (JSON string) | `[{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "OFF"}, ...]` |
|
||||
| **TTS** | | |
|
||||
| `TTS_MODEL` | TTS model name | `gemini-2.5-flash-preview-tts` |
|
||||
| `TTS_VOICE_NAME` | TTS voice name | `Zephyr` |
|
||||
| `TTS_SPEED` | TTS speed | `normal` |
|
||||
| **Image Generation** | | |
|
||||
| `PAID_KEY` | Paid API Key for advanced features | `your-paid-api-key` |
|
||||
| `CREATE_IMAGE_MODEL` | Image generation model | `imagen-3.0-generate-002` |
|
||||
| `UPLOAD_PROVIDER` | Image upload provider: `smms`, `picgo`, `cloudflare_imgbed` | `smms` |
|
||||
| `SMMS_SECRET_TOKEN` | SM.MS API Token | `your-smms-token` |
|
||||
| `PICGO_API_KEY` | PicoGo API Key | `your-picogo-apikey` |
|
||||
| `CLOUDFLARE_IMGBED_URL` | CloudFlare ImgBed upload URL | `https://xxxxxxx.pages.dev/upload` |
|
||||
| `CLOUDFLARE_IMGBED_AUTH_CODE`| CloudFlare ImgBed auth key | `your-cloudflare-imgber-auth-code` |
|
||||
| `CLOUDFLARE_IMGBED_UPLOAD_FOLDER`| CloudFlare ImgBed upload folder | `""` |
|
||||
| **Stream Optimizer** | | |
|
||||
| `STREAM_OPTIMIZER_ENABLED` | Enable stream output optimization | `false` |
|
||||
| `STREAM_MIN_DELAY` | Minimum stream output delay | `0.016` |
|
||||
| `STREAM_MAX_DELAY` | Maximum stream output delay | `0.024` |
|
||||
| `STREAM_SHORT_TEXT_THRESHOLD`| Short text threshold | `10` |
|
||||
| `STREAM_LONG_TEXT_THRESHOLD` | Long text threshold | `50` |
|
||||
| `STREAM_CHUNK_SIZE` | Stream output chunk size | `5` |
|
||||
| **Fake Stream** | | |
|
||||
| `FAKE_STREAM_ENABLED` | Enable fake streaming | `false` |
|
||||
| `FAKE_STREAM_EMPTY_DATA_INTERVAL_SECONDS` | Heartbeat interval for fake streaming (seconds) | `5` |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
Pull Requests or Issues are welcome.
|
||||
|
||||
## 🎉 Special Thanks
|
||||
|
||||
Special thanks to the following projects and platforms for providing image hosting services for this project:
|
||||
|
||||
* [PicGo](https://www.picgo.net/)
|
||||
* [SM.MS](https://smms.app/)
|
||||
* [CloudFlare-ImgBed](https://github.com/MarSeventh/CloudFlare-ImgBed) open source project
|
||||
|
||||
## 🙏 Thanks to Contributors
|
||||
|
||||
Thanks to all developers who contributed to this project!
|
||||
|
||||
[](https://github.com/snailyp/gemini-balance/graphs/contributors)
|
||||
|
||||
## Thanks to Our Supporters
|
||||
|
||||
A special shout-out to DigitalOcean for providing the rock-solid and dependable cloud infrastructure that keeps this project humming!
|
||||
[](https://m.do.co/c/b249dd7f3b4c)
|
||||
|
||||
CDN acceleration and security protection for this project are sponsored by Tencent EdgeOne.
|
||||
[](https://edgeone.ai/?from=github)
|
||||
|
||||
## ⭐ Star History
|
||||
|
||||
[](https://star-history.com/#snailyp/gemini-balance&Date)
|
||||
|
||||
## 🎉 Special Thanks
|
||||
|
||||
* [PicGo](https://www.picgo.net/)
|
||||
* [SM.MS](https://smms.app/)
|
||||
* [CloudFlare-ImgBed](https://github.com/MarSeventh/CloudFlare-ImgBed)
|
||||
|
||||
## 🙏 Our Supporters
|
||||
|
||||
A special shout-out to [DigitalOcean](https://m.do.co/c/b249dd7f3b4c) for providing the rock-solid and dependable cloud infrastructure that keeps this project humming!
|
||||
|
||||
<a href="https://m.do.co/c/b249dd7f3b4c">
|
||||
<img src="files/dataocean.svg" alt="DigitalOcean Logo" width="200"/>
|
||||
</a>
|
||||
|
||||
CDN acceleration and security protection for this project are sponsored by [Tencent EdgeOne](https://edgeone.ai/?from=github).
|
||||
|
||||
<a href="https://edgeone.ai/?from=github">
|
||||
<img src="https://edgeone.ai/media/34fe3a45-492d-4ea4-ae5d-ea1087ca7b4b.png" alt="EdgeOne Logo" width="200"/>
|
||||
</a>
|
||||
|
||||
## 💖 Friendly Projects
|
||||
|
||||
* **[OneLine](https://github.com/chengtx809/OneLine)** by [chengtx809](https://github.com/chengtx809) - OneLine: AI-driven hot event timeline generation tool
|
||||
* **[OneLine](https://github.com/chengtx809/OneLine)** by [chengtx809](https://github.com/chengtx809) - AI-driven hot event timeline generation tool.
|
||||
|
||||
## 🎁 Project Support
|
||||
|
||||
@@ -292,4 +271,4 @@ If you find this project helpful, consider supporting me via [Afdian](https://af
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the CC BY-NC 4.0 (Attribution-NonCommercial) license. Any form of commercial resale service is prohibited. See the LICENSE file for details.
|
||||
This project is licensed under the [CC BY-NC 4.0](LICENSE) (Attribution-NonCommercial) license.
|
||||
|
||||
Reference in New Issue
Block a user