Deploy Phi-3 Mini on Web Browser WebGPU — Browser-native inference
Complete setup guide for running Phi-3 Mini locally on Web Browser WebGPU for browser-native inference
Deploy Phi-3 Mini on Web Browser WebGPU
Overview
Run Phi-3 Mini directly on Web Browser WebGPU for browser-native inference. Local inference offers privacy, zero latency, and no ongoing API costs.
Specs: WebGPU · Client device
Installation
bash
Install Ollama — easiest local inference runtime
curl -fsSL https://ollama.com/install.sh | shVerify installation
ollama --version
Download Model
bash
Pull Phi-3 Mini (downloads GGUF quantized weights automatically)
ollama pull phi-3-miniRun interactive chat
ollama run phi-3-miniStart API server
ollama serve
API available at http://localhost:11434
Python Integration
python
import httpx
from typing import Iteratorclass LocalAI:
"""Interface to local Phi-3 Mini running on Web Browser WebGPU."""
BASE_URL = "http://localhost:11434"
MODEL = "phi-3-mini"
def chat(self, message: str, system: str = "") -> str:
"""Single-turn chat."""
resp = httpx.post(
f"{self.BASE_URL}/api/chat",
json={
"model": self.MODEL,
"messages": [
{"role": "system", "content": system},
{"role": "user", "content": message}
],
"stream": False
},
timeout=120
)
resp.raise_for_status()
return resp.json()["message"]["content"]
def stream(self, message: str) -> Iterator[str]:
"""Streaming chat for real-time output."""
with httpx.stream(
"POST",
f"{self.BASE_URL}/api/chat",
json={"model": self.MODEL, "messages": [{"role": "user", "content": message}], "stream": True},
timeout=120
) as r:
for line in r.iter_lines():
if line:
import json
chunk = json.loads(line)
if not chunk.get("done"):
yield chunk["message"]["content"]
Usage
ai = LocalAI()
response = ai.chat("Help me with browser-native inference")
print(response)Streaming
for token in ai.stream("Explain browser-native inference step by step"):
print(token, end="", flush=True)
Custom Modelfile
bash
Create optimized configuration for browser-native inference
cat > Modelfile << 'MODELEOF'
FROM phi-3-miniPARAMETER num_ctx 4096
PARAMETER temperature 0.7
PARAMETER top_p 0.9
SYSTEM "You are an AI assistant specialized in browser-native inference. You run locally on Web Browser WebGPU. Be concise, accurate, and helpful."
MODELEOF
ollama create browser-native-inference-assistant -f Modelfile
ollama run browser-native-inference-assistant
Performance Profile
Production Setup with FastAPI
python
from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI(title="Web Browser WebGPU AI API")
ai = LocalAI()
class ChatRequest(BaseModel):
message: str
system: str = ""
class ChatResponse(BaseModel):
response: str
model: str
device: str
@app.post("/chat", response_model=ChatResponse)
async def chat_endpoint(req: ChatRequest):
response = ai.chat(req.message, req.system)
return ChatResponse(response=response, model="Phi-3 Mini", device="Web Browser WebGPU")
@app.get("/health")
async def health():
return {"status": "ok", "model": "Phi-3 Mini", "device": "Web Browser WebGPU"}
Troubleshooting
Slow inference: Switch to Q4_K_M quantization, reduce context window
Out of memory: Use smaller model or Q3_K_S quant
GPU not used: Install CUDA/Metal drivers, check ollama logs
High latency: Warm up model by sending a dummy request on startup
Resources
Also available in 中文.