gpt4free/API_DOCUMENTATION.md
Cursor Agent b0ffc9e997 Add comprehensive documentation for G4F library
Co-authored-by: fkahdias <fkahdias@gmail.com>
2025-07-01 20:17:16 +00:00

821 lines
No EOL
17 KiB
Markdown

# G4F (GPT4Free) API Documentation
## Overview
G4F (GPT4Free) is a comprehensive Python library that provides free access to various AI models through multiple providers. It supports text generation, image generation, and provides both synchronous and asynchronous interfaces.
## Table of Contents
1. [Installation](#installation)
2. [Quick Start](#quick-start)
3. [Client API](#client-api)
4. [Legacy API](#legacy-api)
5. [Models](#models)
6. [Providers](#providers)
7. [REST API](#rest-api)
8. [CLI Interface](#cli-interface)
9. [GUI Interface](#gui-interface)
10. [Error Handling](#error-handling)
11. [Configuration](#configuration)
12. [Examples](#examples)
## Installation
### Basic Installation
```bash
pip install g4f
```
### Full Installation with All Features
```bash
pip install g4f[all]
```
### Docker Installation
```bash
docker pull hlohaus789/g4f
docker run -p 8080:8080 hlohaus789/g4f
```
## Quick Start
### Simple Text Generation
```python
from g4f.client import Client
client = Client()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello, world!"}]
)
print(response.choices[0].message.content)
```
### Image Generation
```python
from g4f.client import Client
client = Client()
response = client.images.generate(
model="flux",
prompt="A beautiful sunset over mountains"
)
print(f"Generated image URL: {response.data[0].url}")
```
## Client API
The Client API provides a modern, OpenAI-compatible interface for interacting with AI models.
### Client Class
#### `Client(**kwargs)`
Main client class for interacting with AI models.
**Parameters:**
- `provider` (Optional[ProviderType]): Default provider to use
- `media_provider` (Optional[ProviderType]): Provider for image/media generation
- `proxy` (Optional[str]): Proxy server URL
- `api_key` (Optional[str]): API key for authenticated providers
**Example:**
```python
from g4f.client import Client
from g4f.Provider import OpenaiChat
client = Client(
provider=OpenaiChat,
proxy="http://proxy.example.com:8080"
)
```
### Chat Completions
#### `client.chat.completions.create(**kwargs)`
Creates a chat completion.
**Parameters:**
- `messages` (Messages): List of message dictionaries
- `model` (str): Model name to use
- `provider` (Optional[ProviderType]): Provider override
- `stream` (Optional[bool]): Enable streaming response
- `proxy` (Optional[str]): Proxy override
- `image` (Optional[ImageType]): Image for vision models
- `response_format` (Optional[dict]): Response format specification
- `max_tokens` (Optional[int]): Maximum tokens to generate
- `stop` (Optional[Union[list[str], str]]): Stop sequences
- `api_key` (Optional[str]): API key override
**Returns:**
- `ChatCompletion`: Completion response object
**Example:**
```python
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain quantum computing"}
],
max_tokens=500,
temperature=0.7
)
print(response.choices[0].message.content)
print(f"Usage: {response.usage.total_tokens} tokens")
```
#### Streaming Example
```python
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Write a story"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
```
### Image Generation
#### `client.images.generate(**kwargs)`
Generates images from text prompts.
**Parameters:**
- `prompt` (str): Text description of the image
- `model` (Optional[str]): Image model to use
- `provider` (Optional[ProviderType]): Provider override
- `response_format` (Optional[str]): "url" or "b64_json"
- `proxy` (Optional[str]): Proxy override
**Returns:**
- `ImagesResponse`: Response containing generated images
**Example:**
```python
response = client.images.generate(
model="dall-e-3",
prompt="A futuristic city with flying cars",
response_format="url"
)
for image in response.data:
print(f"Image URL: {image.url}")
```
#### `client.images.create_variation(**kwargs)`
Creates variations of an existing image.
**Parameters:**
- `image` (ImageType): Source image (path, URL, or bytes)
- `model` (Optional[str]): Model to use
- `provider` (Optional[ProviderType]): Provider override
- `response_format` (Optional[str]): Response format
**Example:**
```python
response = client.images.create_variation(
image="path/to/image.jpg",
model="dall-e-3"
)
```
### Async Client
#### `AsyncClient(**kwargs)`
Asynchronous version of the Client class.
**Example:**
```python
import asyncio
from g4f.client import AsyncClient
async def main():
client = AsyncClient()
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
asyncio.run(main())
```
#### Async Streaming Example
```python
async def stream_example():
client = AsyncClient()
stream = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Tell me a joke"}],
stream=True
)
async for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
asyncio.run(stream_example())
```
## Legacy API
The legacy API provides direct access to the core functionality.
### ChatCompletion
#### `g4f.ChatCompletion.create(**kwargs)`
Creates a chat completion using the legacy interface.
**Parameters:**
- `model` (Union[Model, str]): Model to use
- `messages` (Messages): Message list
- `provider` (Union[ProviderType, str, None]): Provider
- `stream` (bool): Enable streaming
- `image` (ImageType): Image for vision models
- `ignore_working` (bool): Ignore provider working status
- `ignore_stream` (bool): Ignore streaming support
**Example:**
```python
import g4f
response = g4f.ChatCompletion.create(
model=g4f.models.gpt_4o,
messages=[{"role": "user", "content": "Hello!"}],
provider=g4f.Provider.Copilot
)
print(response)
```
#### `g4f.ChatCompletion.create_async(**kwargs)`
Asynchronous version of create.
**Example:**
```python
import asyncio
import g4f
async def main():
response = await g4f.ChatCompletion.create_async(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response)
asyncio.run(main())
```
## Models
### Available Models
#### Text Models
- **GPT-4 Family**: `gpt-4`, `gpt-4o`, `gpt-4o-mini`, `gpt-4-turbo`
- **GPT-3.5**: `gpt-3.5-turbo`
- **Claude**: `claude-3-opus`, `claude-3-sonnet`, `claude-3-haiku`
- **Llama**: `llama-3-70b`, `llama-3-8b`, `llama-2-70b`
- **Gemini**: `gemini-pro`, `gemini-1.5-pro`
- **Others**: `mistral-7b`, `mixtral-8x7b`, `phi-4`
#### Image Models
- **DALL-E**: `dall-e-3`
- **Flux**: `flux`, `flux-dev`, `flux-schnell`
- **Stable Diffusion**: `stable-diffusion-xl`
#### Vision Models
- **GPT-4 Vision**: `gpt-4o`, `gpt-4-vision-preview`
- **Gemini Vision**: `gemini-pro-vision`
- **Claude Vision**: `claude-3-opus`, `claude-3-sonnet`
### Model Usage
```python
from g4f import models
# Use predefined model
response = client.chat.completions.create(
model=models.gpt_4o,
messages=[{"role": "user", "content": "Hello!"}]
)
# Or use string name
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello!"}]
)
```
### Model Information
```python
from g4f.models import ModelUtils
# Get all available models
all_models = ModelUtils.convert
# Get model by name
model = ModelUtils.get_model("gpt-4o")
if model:
print(f"Provider: {model.base_provider}")
print(f"Best provider: {model.best_provider}")
```
## Providers
### Provider Types
#### Working Providers
- **Blackbox**: Free GPT-4 access
- **Copilot**: Microsoft Copilot integration
- **PollinationsAI**: Multi-model support
- **DeepInfraChat**: Various open-source models
- **Free2GPT**: Free GPT access
- **OpenaiChat**: Official OpenAI API
#### Authentication Required
- **OpenaiAccount**: Official OpenAI with account
- **Gemini**: Google Gemini API
- **MetaAI**: Meta's AI models
- **HuggingChat**: Hugging Face chat
### Provider Usage
```python
from g4f import Provider
# Use specific provider
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
provider=Provider.Copilot
)
# Get provider information
print(Provider.Copilot.params)
print(Provider.Copilot.working)
```
### Custom Provider Selection
```python
from g4f.providers.retry_provider import IterListProvider
from g4f import Provider
# Create custom provider list with retry logic
custom_provider = IterListProvider([
Provider.Copilot,
Provider.Blackbox,
Provider.PollinationsAI
])
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
provider=custom_provider
)
```
## REST API
G4F provides a FastAPI-based REST API compatible with OpenAI's API.
### Starting the API Server
```bash
# Start with default settings
python -m g4f.cli api
# Start with custom port and debug
python -m g4f.cli api --port 8080 --debug
# Start with GUI
python -m g4f.cli api --gui --port 8080
```
### API Endpoints
#### Chat Completions
```
POST /v1/chat/completions
```
**Request Body:**
```json
{
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "Hello!"}
],
"stream": false,
"max_tokens": 500
}
```
**Response:**
```json
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "gpt-4o-mini",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I help you?"
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 5,
"completion_tokens": 7,
"total_tokens": 12
}
}
```
#### Image Generation
```
POST /v1/images/generations
```
**Request Body:**
```json
{
"prompt": "A beautiful landscape",
"model": "dall-e-3",
"response_format": "url"
}
```
#### Models List
```
GET /v1/models
```
**Response:**
```json
{
"object": "list",
"data": [
{
"id": "gpt-4o",
"object": "model",
"created": 0,
"owned_by": "OpenAI"
}
]
}
```
### Client Usage with API
```python
import openai
# Configure client to use G4F API
client = openai.OpenAI(
api_key="your-g4f-api-key", # Optional
base_url="http://localhost:1337/v1"
)
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello!"}]
)
```
## CLI Interface
The CLI provides command-line access to G4F functionality.
### Available Commands
#### Start API Server
```bash
g4f api --port 8080 --debug
```
#### Start GUI
```bash
g4f gui --port 8080
```
#### Chat Client
```bash
g4f client --model gpt-4o --provider Copilot
```
### CLI Options
#### API Command
- `--port, -p`: Server port (default: 1337)
- `--bind`: Bind address (default: 0.0.0.0:1337)
- `--debug, -d`: Enable debug mode
- `--gui, -g`: Start with GUI
- `--model`: Default model
- `--provider`: Default provider
- `--proxy`: Proxy server URL
- `--g4f-api-key`: API authentication key
#### GUI Command
- `--port, -p`: Server port
- `--debug, -d`: Enable debug mode
- `--demo`: Enable demo mode
#### Client Command
- `--model`: Model to use
- `--provider`: Provider to use
- `--stream`: Enable streaming
- `--proxy`: Proxy server URL
### Examples
```bash
# Start API with authentication
g4f api --port 8080 --g4f-api-key "your-secret-key"
# Start GUI in demo mode
g4f gui --port 8080 --demo
# Interactive chat session
g4f client --model gpt-4o --provider Copilot --stream
```
## GUI Interface
G4F provides a web-based GUI for easy interaction.
### Starting the GUI
```python
from g4f.gui import run_gui
# Start GUI programmatically
run_gui(port=8080, debug=True)
```
Or using CLI:
```bash
g4f gui --port 8080
```
### Features
- **Chat Interface**: Interactive chat with AI models
- **Provider Selection**: Choose from available providers
- **Model Selection**: Select different AI models
- **Image Generation**: Generate images from text prompts
- **Settings**: Configure proxy, API keys, and other options
- **Conversation History**: Save and load conversations
### Accessing the GUI
Once started, access the GUI at: `http://localhost:8080/chat/`
## Error Handling
G4F provides comprehensive error handling with specific exception types.
### Exception Types
```python
from g4f.errors import (
ProviderNotFoundError,
ProviderNotWorkingError,
ModelNotFoundError,
MissingAuthError,
PaymentRequiredError,
RateLimitError,
TimeoutError,
NoMediaResponseError
)
```
### Error Handling Examples
```python
from g4f.client import Client
from g4f.errors import ProviderNotWorkingError, ModelNotFoundError
client = Client()
try:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}]
)
except ProviderNotWorkingError as e:
print(f"Provider error: {e}")
except ModelNotFoundError as e:
print(f"Model error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
```
### Retry Logic
```python
from g4f.providers.retry_provider import RetryProvider
from g4f import Provider
# Automatic retry with multiple providers
retry_provider = RetryProvider([
Provider.Copilot,
Provider.Blackbox,
Provider.PollinationsAI
], max_retries=3)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
provider=retry_provider
)
```
## Configuration
### Environment Variables
```bash
# Set default proxy
export G4F_PROXY="http://proxy.example.com:8080"
# Set debug mode
export G4F_DEBUG="true"
```
### Configuration in Code
```python
import g4f
# Enable debug logging
g4f.debug.logging = True
# Set global proxy
import os
os.environ["G4F_PROXY"] = "http://proxy.example.com:8080"
```
### Cookie Management
```python
from g4f.cookies import get_cookies, set_cookies
# Get cookies for a domain
cookies = get_cookies("chat.openai.com")
# Set cookies
set_cookies("chat.openai.com", {"session": "value"})
```
## Examples
### Advanced Chat with Vision
```python
from g4f.client import Client
import base64
client = Client()
# Read and encode image
with open("image.jpg", "rb") as f:
image_data = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image_data}"
}
}
]
}
]
)
print(response.choices[0].message.content)
```
### Batch Processing
```python
import asyncio
from g4f.client import AsyncClient
async def process_multiple_requests():
client = AsyncClient()
prompts = [
"Explain machine learning",
"What is quantum computing?",
"How does photosynthesis work?"
]
tasks = [
client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
for prompt in prompts
]
responses = await asyncio.gather(*tasks)
for i, response in enumerate(responses):
print(f"Response {i+1}: {response.choices[0].message.content}")
asyncio.run(process_multiple_requests())
```
### Custom Provider Implementation
```python
from g4f.providers.base_provider import AsyncGeneratorProvider
from g4f.typing import AsyncResult, Messages
class CustomProvider(AsyncGeneratorProvider):
url = "https://api.example.com"
working = True
supports_stream = True
@classmethod
async def create_async_generator(
cls,
model: str,
messages: Messages,
**kwargs
) -> AsyncResult:
# Implement your custom provider logic
yield "Custom response from your provider"
# Use custom provider
from g4f.client import Client
client = Client(provider=CustomProvider)
response = client.chat.completions.create(
model="custom-model",
messages=[{"role": "user", "content": "Hello!"}]
)
```
### Function Calling / Tools
```python
from g4f.client import Client
client = Client()
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather information",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
}
}
}
]
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
tools=tools
)
# Handle tool calls
if response.choices[0].message.tool_calls:
for tool_call in response.choices[0].message.tool_calls:
print(f"Tool: {tool_call.function.name}")
print(f"Arguments: {tool_call.function.arguments}")
```
This documentation covers all the major public APIs, functions, and components of the G4F library. For the most up-to-date information, always refer to the official repository and documentation.