b2 / README.md
MakPr016's picture
Project B2
5af2ecd verified
|
Raw
History Blame Contribute Delete
1.93 kB
---
title: Gemma 4 12B QAT Multimodal API
emoji: 🧠
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
license: apache-2.0
---
# Gemma 4 12B QAT — Ollama Multimodal API
Self-hosted inference for `gemma4:12b-it-qat` via Ollama, wrapped in a
FastAPI layer. Handles **text**, **image**, and **text + image** requests.
## Endpoints
| Method | Path | Description |
|--------|------|-------------|
| `GET` | `/health` | Liveness + model status |
| `POST` | `/chat` | Text-only chat (`application/json`) |
| `POST` | `/chat/image` | Image ± text (`multipart/form-data`) |
| `POST` | `/v1/chat/completions` | OpenAI-compatible passthrough |
## Quick usage
### Text
```bash
curl -X POST https://<space-url>/chat \
-H "Content-Type: application/json" \
-d '{
"messages": [{"role":"user","content":"Explain transformers briefly."}]
}'
```
### Image + text
```bash
curl -X POST https://<space-url>/chat/image \
-F "prompt=What is in this image?" \
-F "file=@photo.jpg"
```
### OpenAI SDK (Next.js)
```ts
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://<space-url>/v1",
apiKey: "ollama", // any non-empty string
});
const res = await client.chat.completions.create({
model: "gemma4:12b-it-qat",
messages: [{ role: "user", content: "Hello!" }],
});
```
## Hardware note
- **Free CPU tier (2 vCPU / 16 GB)** — works, ~20–30 tok/s, cold start ~5 min
- **T4 GPU tier** — recommended for production; ~80–120 tok/s
Model is pulled on first boot and cached at `/app/models`.
Enable a **persistent storage** volume on your Space to avoid re-downloading
on every restart.
## Environment variables
| Variable | Default | Notes |
|----------|---------|-------|
| `MODEL_TAG` | `gemma4:12b-it-qat` | Any Ollama model tag |
| `OLLAMA_MODELS` | `/app/models` | Cache directory |