{
  "schema": "leumas.docs.page/1",
  "id": "pkg:@leumas/providers",
  "slug": "adapters/providers",
  "kind": "capabilities",
  "bucket": "package",
  "title": "@leumas/providers",
  "name": "@leumas/providers",
  "eyebrow": null,
  "chip": null,
  "summary": "LLM provider adapters — one contract (complete / adapter step-loop / realtimeSession / available) over ollama, openai, openai-realtime, claude, gemini, codex, cursor-agent and leumas-slm. The brains...",
  "keywords": [
    "providers",
    "step-loop",
    "realtimesession",
    "openai-realtime",
    "gemini",
    "providers api",
    "leumas providers",
    "leumas-slm"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "# @leumas/providers\n\nThe **LLM provider adapter base** — every brain Leumas can think with, behind one contract.\n`@leumas/chatbots` and the Leviathan runtime resolve a bot's `provider` here; Studio lists and\nprices them via `GET /api/providers`.\n\n```js\nimport { createProviderRegistry, providers } from '@leumas/providers';\n\nconst registry = createProviderRegistry(providers); // stub always included as fallback\nconst provider = await registry.resolve({ provider: 'auto' }); // first available: ollama → openai → claude → gemini\nconst { reply, toolCalls } = await provider.complete({ system, messages, tools, model });\n```\n\n**Contract** (`defineProvider`): `capabilities {text,tools,stream,realtimeVoice}` + `envKeys` +\n`available()` + either a step-loop `adapter` (`createConversation/step/appendToolResults` — the shape\nported from leumas-cursor-agent-mvp's runners) or a direct `complete()`; realtime providers add\n`realtimeSession()`. `runAgentLoop` (from `@leumas/providers/agent-loop`) drives multi-step tool use\nand pauses/resumes around client-side tool calls.\n\n**Providers:** `ollama` (bridges `adapters/domain/ollama`) · `openai` · `openai-realtime` · `claude` ·\n`gemini` · `codex` (CLI wrap) · `cursor-agent` · `leumas-slm` · `stub` (echo fallback). SDKs are\nlazy-imported so a missing key/dep degrades to `available: false`, never a crash.\n",
  "source": {
    "path": "shared/engines/adapters/providers/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 1563,
    "hash": "459e5776fb079e73f4d2858dd00865d22cb93fdf"
  },
  "urls": {
    "html": "/p/adapters/providers",
    "json": "/docs/adapters/providers.json",
    "md": "/docs/adapters/providers.md"
  },
  "links": {
    "composes": [],
    "usedBy": [
      "pkg:@leumas/chatbots"
    ],
    "product": [
      "pkg:@leumas/studio"
    ],
    "howTo": [
      "how-to:programmability"
    ],
    "skills": []
  },
  "exports": null
}
