Skip to content

πŸš€ Antigravity Server β€” Pure Rust AI Gateway. Headless Axum daemon + Leptos Web UI. AIMD rate limiting, circuit breakers, Prometheus metrics. Deploy on any VPS.

License

Notifications You must be signed in to change notification settings

Stranmor/Antigravity-Server

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

516 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Antigravity Server

Production-grade AI Gateway β€” OpenAI-compatible API for Gemini & Claude

Antigravity

Rust Axum Leptos Upstream License

English Β· Русский Β· Upstream δΈ­ζ–‡


Headless Rust server that transforms Google AI Studio and Anthropic Console web sessions into standard OpenAI-compatible APIs. Deploy on VPS, run as systemd daemon, manage via CLI or Web UI.

Quick Start

# Build
cargo build --release -p antigravity-server

# Run
./target/release/antigravity-server
# β†’ http://127.0.0.1:8045
import openai

client = openai.OpenAI(
    api_key="sk-antigravity",
    base_url="http://127.0.0.1:8045/v1"
)

response = client.chat.completions.create(
    model="gemini-3-pro-high",
    messages=[{"role": "user", "content": "Hello!"}]
)
# Claude Code CLI
export ANTHROPIC_API_KEY="sk-antigravity"
export ANTHROPIC_BASE_URL="http://127.0.0.1:8045"
claude

Why This Fork?

Capability Upstream (Tauri) This Fork (Axum)
Deployment Desktop GUI Headless VPS daemon
Frontend React + TypeScript Leptos (Rust β†’ WASM)
Rate Limiting Reactive (retry on 429) AIMD predictive
Account Rotation Standard retry Smart exclusion-based rotation
Reliability Basic failover Circuit breakers + health scores
Persistence Direct file I/O Actor loop (race-free)
Observability Local UI only Prometheus metrics + REST API
Audio/Video Not supported Full multimodal

Smart Account Rotation

When running multiple accounts (e.g., 15 Google AI Studio accounts), efficient load distribution becomes critical under high concurrency. This fork implements exclusion-based rotation β€” each request maintains memory of which accounts already failed, ensuring retries always try fresh accounts.

Request lifecycle:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Attempt 1: Account A (ultra-tier) β†’ 503 Service Unavailable β”‚
β”‚            attempted = {A}                                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Attempt 2: Account B (pro-tier) β†’ 429 Rate Limited          β”‚
β”‚            attempted = {A, B}                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Attempt 3: Account C (free-tier) β†’ 200 OK βœ“                 β”‚
β”‚            Response returned to client                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Benchmark (50 concurrent requests):

Metric Result
Accounts utilized 14 different accounts
Rotation events 362 distributed across pool
Success rate 100% (50/50 HTTP 200)
Total time 18.9 seconds

The exclusion set is per-request (no cross-request contamination), thread-safe (stack-allocated HashSet), and has minimal overhead (~6KB worst case for 14 accounts).


Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Claude Code    β”‚     β”‚                     β”‚     β”‚  Google Gemini   β”‚
β”‚  OpenAI SDK     β”‚ ──▢ β”‚  Antigravity Proxy  β”‚ ──▢ β”‚  Anthropic API   β”‚
β”‚  Cursor / IDE   β”‚     β”‚   (localhost:8045)  β”‚     β”‚  (via OAuth)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Endpoints:

  • POST /v1/chat/completions β€” OpenAI-compatible chat
  • POST /v1/messages β€” Anthropic-compatible messages
  • GET /v1/models β€” Available models
  • POST /v1/images/generations β€” Imagen 3 (DALL-E compatible)
  • POST /v1/audio/transcriptions β€” Whisper-compatible

Resilience API:

  • GET /api/resilience/health β€” Account availability
  • GET /api/resilience/circuits β€” Circuit breaker states
  • GET /api/resilience/aimd β€” Rate limit telemetry
  • GET /api/metrics β€” Prometheus metrics

Multimodal

Audio (official OpenAI format):

response = client.chat.completions.create(
    model="gemini-3-pro",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Transcribe this audio"},
            {"type": "input_audio", "input_audio": {"data": audio_b64, "format": "wav"}}
        ]
    }]
)

Video (Gemini extension):

response = client.chat.completions.create(
    model="gemini-3-pro",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Describe this video"},
            {"type": "video_url", "video_url": {"url": f"data:video/mp4;base64,{video_b64}"}}
        ]
    }]
)

Supported: wav, mp3, ogg, flac, m4a | mp4, mov, webm, avi


CLI

antigravity-server account list          # List accounts with quotas
antigravity-server account add --file x  # Add account from JSON
antigravity-server account refresh all   # Refresh all quotas
antigravity-server warmup --all          # Warmup sessions
antigravity-server status                # Proxy statistics
antigravity-server config show           # Current config

Deployment

Systemd (user service):

# ~/.config/systemd/user/antigravity.service
[Unit]
Description=Antigravity AI Gateway
After=network.target

[Service]
ExecStart=%h/.cargo/bin/antigravity-server
Restart=always
Environment=RUST_LOG=info
Environment=ANTIGRAVITY_PORT=8045

[Install]
WantedBy=default.target
systemctl --user enable --now antigravity

Environment:

Variable Default Description
ANTIGRAVITY_PORT 8045 Server port
ANTIGRAVITY_DATA_DIR ~/.antigravity_tools Data directory
RUST_LOG info Log level

Project Structure

crates/
β”œβ”€β”€ antigravity-types/    # Shared types, errors, models
β”œβ”€β”€ antigravity-core/     # Business logic (proxy, AIMD, circuits)
└── antigravity-client/   # Rust SDK (auto-discovery, streaming)

antigravity-server/       # Axum HTTP server + CLI
src-leptos/               # Leptos WASM frontend
vendor/antigravity-upstream/  # Upstream reference (submodule)

License

Based on lbjlaq/Antigravity-Manager.

License: CC BY-NC-SA 4.0 β€” Non-commercial use only.

Built with Rust

About

πŸš€ Antigravity Server β€” Pure Rust AI Gateway. Headless Axum daemon + Leptos Web UI. AIMD rate limiting, circuit breakers, Prometheus metrics. Deploy on any VPS.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 91.1%
  • Shell 4.9%
  • CSS 3.0%
  • Nix 0.7%
  • Dockerfile 0.2%
  • Ruby 0.1%