> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gloo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Supported Models

> A full list of Gloo AI API models and their capabilities, rendered live from the public platform API.

export const LiveModelCatalog = () => {
  const [state, setState] = React.useState({
    status: "loading"
  });
  React.useEffect(() => {
    let cancelled = false;
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(), 15000);
    fetch("https://platform.ai.gloo.com/platform/v2/models", {
      headers: {
        Accept: "application/json"
      },
      signal: controller.signal
    }).then(r => r.ok ? r.json() : Promise.reject(new Error("HTTP " + r.status))).then(json => {
      if (cancelled) return;
      const models = json && Array.isArray(json.data) ? json.data : null;
      if (!models || models.length === 0) {
        throw new Error("Empty or malformed response from /platform/v2/models");
      }
      const invalid = models.find(m => !m || typeof m.id !== "string" || typeof m.family !== "string" || m.family.trim() === "");
      if (invalid) {
        throw new Error("Schema drift: model entry missing required id/family");
      }
      setState({
        status: "ready",
        models: models
      });
    }).catch(err => {
      if (cancelled) return;
      const message = err && err.name === "AbortError" ? "Request timed out after 15s" : err && err.message || "Unknown error";
      setState({
        status: "error",
        message: message
      });
    }).finally(() => {
      clearTimeout(timeoutId);
    });
    return () => {
      cancelled = true;
      controller.abort();
      clearTimeout(timeoutId);
    };
  }, []);
  const formatContext = n => {
    if (typeof n !== "number" || !n) return "—";
    if (n >= 1000000) {
      const m = n / 1000000;
      return (m >= 10 ? Math.round(m) : Math.round(m * 10) / 10) + "M";
    }
    if (n >= 1000) return Math.round(n / 1000) + "K";
    return String(n);
  };
  const formatPrice = rate => {
    if (rate == null) return "—";
    if (typeof rate === "string" && rate.trim() !== "") return "$" + rate;
    const n = Number(rate);
    if (!Number.isFinite(n)) return "—";
    return "$" + String(n);
  };
  const supportsCaching = m => {
    const id = (m.id || "").toLowerCase();
    if (id.includes("anthropic") || id.includes("claude")) return "Explicit";
    if (id.includes("openai") || id.includes("gpt")) return "Implicit";
    if (id.includes("deepseek")) return "Implicit";
    if (id.includes("gemini") || id.includes("google")) return "Implicit";
    return "—";
  };
  const FAMILY_ORDER = ["Anthropic", "Google", "OpenAI", "Open Source"];
  const groupByFamily = models => {
    const groups = {};
    for (let i = 0; i < models.length; i++) {
      const m = models[i];
      const key = m.family || "Other";
      if (!groups[key]) groups[key] = [];
      groups[key].push(m);
    }
    const families = Object.keys(groups).sort((a, b) => {
      const ai = FAMILY_ORDER.indexOf(a);
      const bi = FAMILY_ORDER.indexOf(b);
      if (ai === -1 && bi === -1) return a.localeCompare(b);
      if (ai === -1) return 1;
      if (bi === -1) return -1;
      return ai - bi;
    });
    return families.map(f => ({
      family: f,
      models: groups[f]
    }));
  };
  if (state.status === "loading") {
    return <p style={{
      opacity: 0.7,
      fontStyle: "italic"
    }}>
        Loading the live model catalog from <code>GET /platform/v2/models</code>…
      </p>;
  }
  if (state.status === "error") {
    return <p>
        Couldn't reach the live catalog ({state.message}). Browse models in the{" "}
        <a href="https://studio.ai.gloo.com/models">Gloo Studio Model Explorer</a> or
        call <a href="/api-reference/get-models/v2"><code>GET /platform/v2/models</code></a>{" "}
        directly.
      </p>;
  }
  const grouped = groupByFamily(state.models);
  return <div>
      {grouped.map(group => <div key={group.family}>
          <h2>{group.family}</h2>
          <table>
            <thead>
              <tr>
                <th align="left">Model ID</th>
                <th align="left">Name</th>
                <th align="left">Context</th>
                <th align="left">Input / 1M</th>
                <th align="left">Output / 1M</th>
                <th align="left">Caching</th>
              </tr>
            </thead>
            <tbody>
              {group.models.map(m => {
    const pricing = m.pricing || ({});
    const inputRate = pricing.input ? pricing.input.rate_per_1m_tokens : null;
    const outputRate = pricing.output ? pricing.output.rate_per_1m_tokens : null;
    return <tr key={m.id}>
                    <td><code>{m.id}</code></td>
                    <td>{m.name}</td>
                    <td>{formatContext(m.context_window)}</td>
                    <td>{formatPrice(inputRate)}</td>
                    <td>{formatPrice(outputRate)}</td>
                    <td>{supportsCaching(m)}</td>
                  </tr>;
  })}
            </tbody>
          </table>
        </div>)}

      <h2>Model Capabilities</h2>
      <table>
        <thead>
          <tr>
            <th align="left">Model ID</th>
            <th align="center">Tools</th>
            <th align="center">Streaming</th>
            <th align="center">Reasoning</th>
            <th align="center">Vision</th>
          </tr>
        </thead>
        <tbody>
          {state.models.map(m => <tr key={m.id}>
              <td><code>{m.id}</code></td>
              <td align="center">{m.supports_tools ? "✓" : "—"}</td>
              <td align="center">{m.supports_streaming ? "✓" : "—"}</td>
              <td align="center">{m.supports_reasoning ? "✓" : "—"}</td>
              <td align="center">{m.supports_vision ? "✓" : "—"}</td>
            </tr>)}
        </tbody>
      </table>
    </div>;
};

The Gloo AI platform provides access to a wide range of leading models from multiple providers. Visit the **[Model Explorer in Gloo Studio](https://studio.ai.gloo.com/models)** for a richer side-by-side comparison including reasoning capabilities, modalities, and speed ratings.

The table below is fetched live in your browser from the public, unauthenticated [`GET /platform/v2/models`](/api-reference/get-models/v2) endpoint — so it always reflects the current platform catalog. Use the `Model ID` column as the `model` parameter in your requests.

<Note>
  The rates shown are **list prices** (each model's base rate). Usage is billed at the list rate plus a flat **platform rate**. Track real spend in the [Gloo Studio billing dashboard](https://studio.ai.gloo.com/billing).
</Note>

<Info>
  **Model routing.** Gloo AI routes requests to the right provider automatically, with built-in resilience so traffic keeps flowing even if a provider has an issue. Routing is invisible to you and does not change a model's price — the platform rate stays consistent regardless of how a request is served.
</Info>

<Info>
  These model IDs work across both the [Responses API](/api-guides/responses-v1) (`/ai/v1/responses` — the recommended surface for new integrations) and [Completions V2](/api-guides/completions-v2) (`/ai/v2/chat/completions`). Per-model capability flags (`supports_tools`, `supports_streaming`, `supports_reasoning`, `supports_vision`) are shown in the **Model Capabilities** table at the bottom and are also available programmatically on the [`GET /platform/v2/models`](/api-reference/get-models/v2) response.
</Info>

## Prompt Caching

The **Caching** column above shows which models support prompt caching, and which type — **Implicit** (automatic, e.g. OpenAI, DeepSeek, Gemini, Qwen) or **Explicit** (opt-in per request, e.g. Anthropic).

For full details on each provider's caching mechanism, billing rates, and best practices, see the dedicated **[Prompt Caching](/api-guides/prompt-caching)** guide.

<LiveModelCatalog />
