mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-10-08 09:40:08 +08:00
274 lines
7.1 KiB
Markdown
274 lines
7.1 KiB
Markdown
**# G4F - Authentication Guide**
|
|
This documentation explains how to authenticate with G4F providers and configure GUI security. It covers API key management, cookie-based authentication, rate limiting, and GUI access controls.
|
|
|
|
---
|
|
|
|
## **Table of Contents**
|
|
1. **[Provider Authentication](#provider-authentication)**
|
|
- [Prerequisites](#prerequisites)
|
|
- [API Key Setup](#api-key-setup)
|
|
- [Synchronous Usage](#synchronous-usage)
|
|
- [Asynchronous Usage](#asynchronous-usage)
|
|
- [Multiple Providers](#multiple-providers-with-api-keys)
|
|
- [Cookie-Based Authentication](#cookie-based-authentication)
|
|
- [Rate Limiting](#rate-limiting)
|
|
- [Error Handling](#error-handling)
|
|
- [Supported Providers](#supported-providers)
|
|
2. **[GUI Authentication](#gui-authentication)**
|
|
- [Server Setup](#server-setup)
|
|
- [Browser Access](#browser-access)
|
|
- [Programmatic Access](#programmatic-access)
|
|
3. **[Best Practices](#best-practices)**
|
|
4. **[Troubleshooting](#troubleshooting)**
|
|
|
|
---
|
|
|
|
## **Provider Authentication**
|
|
|
|
### **Prerequisites**
|
|
- Python 3.7+
|
|
- Installed `g4f` package:
|
|
```bash
|
|
pip install g4f
|
|
```
|
|
- API keys or cookies from providers (if required).
|
|
|
|
---
|
|
|
|
### **API Key Setup**
|
|
#### **Step 1: Set Environment Variables**
|
|
**For Linux/macOS (Terminal)**:
|
|
```bash
|
|
# Example for Anthropic
|
|
export ANTHROPIC_API_KEY="your_key_here"
|
|
|
|
# Example for HuggingFace
|
|
export HUGGINGFACE_API_KEY="another_key_here"
|
|
```
|
|
|
|
**For Windows (Command Prompt)**:
|
|
```cmd
|
|
:: Example for Anthropic
|
|
set ANTHROPIC_API_KEY=your_key_here
|
|
|
|
:: Example for HuggingFace
|
|
set HUGGINGFACE_API_KEY=another_key_here
|
|
```
|
|
|
|
**For Windows (PowerShell)**:
|
|
```powershell
|
|
# Example for Anthropic
|
|
$env:ANTHROPIC_API_KEY = "your_key_here"
|
|
|
|
# Example for HuggingFace
|
|
$env:HUGGINGFACE_API_KEY = "another_key_here"
|
|
```
|
|
|
|
#### **Step 2: Initialize Client**
|
|
```python
|
|
from g4f.client import Client
|
|
|
|
# Example for Anthropic
|
|
client = Client(
|
|
provider="g4f.Provider.Anthropic",
|
|
api_key="your_key_here" # Or use os.getenv("ANTHROPIC_API_KEY")
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
### **Synchronous Usage**
|
|
```python
|
|
from g4f.client import Client
|
|
|
|
# Initialize with Anthropic
|
|
client = Client(provider="g4f.Provider.Anthropic", api_key="your_key_here")
|
|
|
|
# Simple request
|
|
response = client.chat.completions.create(
|
|
model="claude-3.5-sonnet",
|
|
messages=[{"role": "user", "content": "Hello!"}]
|
|
)
|
|
print(response.choices[0].message.content)
|
|
```
|
|
|
|
---
|
|
|
|
### **Asynchronous Usage**
|
|
```python
|
|
import asyncio
|
|
from g4f.client import AsyncClient
|
|
|
|
async def main():
|
|
# Initialize with Groq
|
|
client = AsyncClient(provider="g4f.Provider.Groq", api_key="your_key_here")
|
|
|
|
response = await client.chat.completions.create(
|
|
model="mixtral-8x7b",
|
|
messages=[{"role": "user", "content": "Hello!"}]
|
|
)
|
|
print(response.choices[0].message.content)
|
|
|
|
asyncio.run(main())
|
|
```
|
|
|
|
---
|
|
|
|
### **Multiple Providers with API Keys**
|
|
```python
|
|
import os
|
|
import g4f.Provider
|
|
from g4f.client import Client
|
|
|
|
# Using environment variables
|
|
providers = {
|
|
"Anthropic": os.getenv("ANTHROPIC_API_KEY"),
|
|
"Groq": os.getenv("GROQ_API_KEY")
|
|
}
|
|
|
|
for provider_name, api_key in providers.items():
|
|
client = Client(provider=getattr(g4f.Provider, provider_name), api_key=api_key)
|
|
response = client.chat.completions.create(
|
|
model="claude-3.5-sonnet",
|
|
messages=[{"role": "user", "content": f"Hello to {provider_name}!"}]
|
|
)
|
|
print(f"{provider_name}: {response.choices[0].message.content}")
|
|
```
|
|
|
|
---
|
|
|
|
### **Cookie-Based Authentication**
|
|
**For Providers Like Gemini/Bing**:
|
|
1. Open your browser and log in to the provider's website.
|
|
2. Use developer tools (F12) to copy cookies:
|
|
- Chrome/Edge: **Application** → **Cookies**
|
|
- Firefox: **Storage** → **Cookies**
|
|
|
|
```python
|
|
from g4f.client import Client
|
|
from g4f.Provider import Gemini
|
|
|
|
# Using with cookies
|
|
client = Client(
|
|
provider=Gemini,
|
|
)
|
|
response = client.chat.completions.create(
|
|
model="", # Default model
|
|
messages="Hello Google",
|
|
cookies={
|
|
"__Secure-1PSID": "your_cookie_value_here",
|
|
"__Secure-1PSIDTS": "your_cookie_value_here"
|
|
}
|
|
)
|
|
print(f"Gemini: {response.choices[0].message.content}")
|
|
```
|
|
|
|
---
|
|
|
|
### **Rate Limiting**
|
|
```python
|
|
from aiolimiter import AsyncLimiter
|
|
|
|
# Limit to 5 requests per second
|
|
rate_limiter = AsyncLimiter(max_rate=5, time_period=1)
|
|
|
|
async def make_request():
|
|
async with rate_limiter:
|
|
return await client.chat.completions.create(...)
|
|
```
|
|
|
|
---
|
|
|
|
### **Error Handling**
|
|
```python
|
|
from tenacity import retry, stop_after_attempt, wait_exponential
|
|
|
|
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
|
|
def safe_request():
|
|
try:
|
|
return client.chat.completions.create(...)
|
|
except Exception as e:
|
|
print(f"Attempt failed: {str(e)}")
|
|
raise
|
|
```
|
|
|
|
---
|
|
|
|
### **Supported Providers**
|
|
| Provider | Auth Type | Example Models |
|
|
|----------------|-----------------|----------------------|
|
|
| Anthropic | API Key | `claude-3.5-sonnet` |
|
|
| Gemini | Cookies | `gemini-1.5-pro` |
|
|
| Groq | API Key | `mixtral-8x7b` |
|
|
| HuggingFace | API Key | `llama-3.1-70b` |
|
|
|
|
*Full list: [Providers and Models](providers-and-models.md)*
|
|
|
|
---
|
|
|
|
## **GUI Authentication**
|
|
|
|
### **Server Setup**
|
|
1. Create a password:
|
|
```bash
|
|
# Linux/macOS
|
|
export G4F_API_KEY="your_password_here"
|
|
|
|
# Windows (Command Prompt)
|
|
set G4F_API_KEY=your_password_here
|
|
|
|
# Windows (PowerShell)
|
|
$env:G4F_API_KEY = "your_password_here"
|
|
```
|
|
2. Start the server:
|
|
```bash
|
|
python -m g4f --debug --port 8080 --g4f-api-key $G4F_API_KEY
|
|
```
|
|
|
|
---
|
|
|
|
### **Browser Access**
|
|
1. Navigate to `http://localhost:8080/chat/`.
|
|
2. Use credentials:
|
|
- **Username**: Any value (e.g., `admin`).
|
|
- **Password**: Your `G4F_API_KEY`.
|
|
|
|
---
|
|
|
|
### **Programmatic Access**
|
|
```python
|
|
import requests
|
|
|
|
response = requests.get(
|
|
"http://localhost:8080/chat/",
|
|
auth=("admin", "your_password_here")
|
|
)
|
|
print("Success!" if response.status_code == 200 else f"Failed: {response.status_code}")
|
|
```
|
|
|
|
---
|
|
|
|
## **Best Practices**
|
|
1. 🔒 **Never hardcode keys**
|
|
- Use `.env` files or secret managers like AWS Secrets Manager.
|
|
2. 🔄 **Rotate keys every 90 days**
|
|
- Especially critical for production environments.
|
|
3. 📊 **Monitor API usage**
|
|
- Use tools like Prometheus/Grafana for tracking.
|
|
4. ♻️ **Retry transient errors**
|
|
- Use the `tenacity` library for robust retry logic.
|
|
|
|
---
|
|
|
|
## **Troubleshooting**
|
|
| Issue | Solution |
|
|
|---------------------------|-------------------------------------------|
|
|
| **"Invalid API Key"** | 1. Verify key spelling<br>2. Regenerate key in provider dashboard |
|
|
| **"Cookie Expired"** | 1. Re-login to provider website<br>2. Update cookie values |
|
|
| **"Rate Limit Exceeded"** | 1. Implement rate limiting<br>2. Upgrade provider plan |
|
|
| **"Provider Not Found"** | 1. Check provider name spelling<br>2. Verify provider compatibility |
|
|
|
|
---
|
|
|
|
**[⬆ Back to Top](#table-of-contents)** | **[Providers and Models →](providers-and-models.md)**
|