{
  "source_file": "0930",
  "source_platform": "Hashnode",
  "author": "Lakshmi Mahabaleshwara",
  "title_listed": "Build Your Own Healthcare AI Assistant with MedGemma, Ollama, and Open WebUI",
  "keywords": "",
  "domain": "大模型算法",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://freecodecamp.org/news/build-your-own-healthcare-ai-assistant-with-medgemma-ollama-and-open-webui",
  "publish_date": "2026-07-08",
  "corpus_stage": "",
  "notes": "",
  "id": "463a92d6dec5",
  "collected_at": "2026-10-02T14:11:55",
  "title": "Build Your Own Healthcare AI Assistant with MedGemma, Ollama, and Open WebUI",
  "body_markdown": "Healthcare data is among the most sensitive data there is. Sending it to a cloud AI service is often not an option because of privacy requirements, regulatory compliance, or both.\nIn this tutorial, you’ll build a healthcare AI assistant that runs entirely on your own machine using three open-source tools:\nMedGemma, Google’s open medical AI model for understanding medical text and images\nOllama, the easiest way to download and run AI models locally\nOpen WebUI, a ChatGPT-style web interface for interacting with local models\nBy the end, you’ll be able to chat with a medically tuned AI model, upload medical images such as chest X-rays for analysis, and do it all locally, without sending your data to the cloud.\nImportant disclaimer\nbefore we start: MedGemma is a developer model, not a medical device. Its outputs are not intended to directly inform clinical diagnosis, patient management, or treatment decisions.\nEverything you build in this tutorial is for learning, prototyping, and research. Always consult qualified healthcare professionals for real medical questions.\nWhat We'll Cover:\nWho is This Tutorial For?\nWhat is MedGemma?\nWhy Run Models Locally?\nPrerequisites\nArchitecture Diagram\nStep 1: Install Ollama\nStep 2: Pull MedGemma\nStep 3: Test MedGemma from the Terminal\nStep 4: Install Open WebUI\nOption A: Docker (recommended)\nOption B: pip (no Docker)\nStep 5: Connect Open WebUI to Ollama\nStep 6: Start Chatting with MedGemma\nStep 7: Upload Medical Images\nExample Prompts to Try\nRunning Larger Models\nTroubleshooting Guide\nError: registry.ollama.ai/library/medgemma:latest does not support tools\nOpen WebUI shows no models in the dropdown\nollama pull medgemma says model not found\nResponses are extremely slow\nImage upload doesn't work or the model ignores the image\nPort 3000 is already in use\n\"Out of memory\" errors when loading the 27B model\nConclusion\nWho is This Tutorial For?\nThis tutorial is ideal if you’re:\nlearning healthcare AI\nbuilding medical RAG systems\nexperimenting with radiology assistants\ndeveloping medical education tools\nresearching multimodal models\nWhat is MedGemma?\nMedGemma\nis a collection of open models from Google, built on the Gemma 3 architecture and specifically trained for medical text and image comprehension. Think of it as Gemma after four years of medical school and a radiology residency.\nWhy MedGemma?\nUnlike general-purpose models such as Llama or Mistral, MedGemma is designed specifically for healthcare applications.\nMedical image understanding:\nIts multimodal models are trained on de-identified medical images, including chest X-rays, dermatology, ophthalmology, and pathology images.\nMedical language expertise:\nIt has been trained on medical literature and clinical question-answer datasets, enabling it to better understand medical terminology and radiology reports.\nMultiple model sizes:\nMedGemma is available in 4B and 27B variants, both supporting text and image inputs with a 128K context window.\nOpen weights:\nYou can download, run, fine-tune, and build applications with the model locally under the Health AI Developer Foundation's terms of use.\nMedGemma is intended as a foundation model for developers building healthcare applications, medical education tools, research assistants, report summarizers, and other AI-powered medical workflows.\nWhy Run Models Locally?\nYou could call a hosted medical model through an API. So why go local? In healthcare, the case is stronger than almost anywhere else.\nFirst, there's the principle of privacy by architecture. When the model runs on your machine, medical text and images never leave your device. There's no API log, no third-party data processor, no data processing agreement to negotiate.\nFor anyone working near PHI (Protected Health Information), \"the data never left the laptop\" is the simplest compliance story that exists.\nNext, you have zero per-token cost. Experimentation is free once the model is downloaded. You can iterate on prompts hundreds of times without watching a billing dashboard.\nYou also get offline access. Hospitals, labs, and field clinics often have restricted or air-gapped networks. A local model works without internet after the initial download.\nAnd you have full control over the setup: you choose the model version, you pin it, and it never changes underneath you. No deprecation notices, no silent behavior changes.\nFinally, it's a great way to learn. Running models locally demystifies them. You'll develop intuition for context windows, quantization, and memory constraints that you simply don't get from calling an API.\nPrerequisites\nHere's what you need before starting:\nHardware:\n8 GB RAM minimum\n(16 GB recommended) for the MedGemma 4B model. The download is about 3.3 GB.\n32 GB RAM or a 24 GB+ GPU\nif you want to run the 27B model (a roughly 17 GB download).\nAround\n15 GB of free disk space\nto be comfortable (model + Docker images + working room).\nApple Silicon Macs (M1 through M4) are excellent for this. Ollama uses Metal acceleration automatically. On Windows and Linux, an NVIDIA GPU helps a lot but isn't required. A CPU-only inference works, just slower.\nSoftware:\nmacOS, Linux, or Windows 10/11\nDocker Desktop\n(for the recommended Open WebUI installation), or Python 3.11 if you prefer installing Open WebUI with pip\nBasic comfort with the terminal\nThat's it. No API keys, no accounts, and no GPU cloud credits.\nArchitecture Diagram\nStep 1: Install Ollama\nOllama is a lightweight runtime that handles downloading, quantizing, and serving open models through a simple CLI and a local REST API.\nOn macOS:\nDownload the app from\nollama.com/download\nand drag it to Applications, or install via Homebrew:\nbrew install ollama\nOn Linux:\ncurl -fsSL https://ollama.com/install.sh | sh\nOn Windows:\nDownload the native Windows installer from\nollama.com/download\nand run it. (Ollama now supports Windows natively, no WSL required.)\nOnce installed, verify it works:\nollama --version\nYou should see a version number printed. Ollama also starts a background service that listens on\nhttp://localhost:11434\n. This is the API that Open WebUI will talk to later. You can confirm the server is up with:\ncurl http://localhost:11434\nwhich should return\nOllama is running\n.\nStep 2: Pull MedGemma\nMedGemma is available directly in the official Ollama model library, so downloading it is one command:\nollama pull medgemma\nThis pulls the default 4B multimodal variant, about a 3.3 GB download.\nIf you want to be explicit about the size (useful when you later experiment with the 27B model):\nollama pull medgemma:4b     # 3.3 GB — multimodal, runs on most laptops\nollama pull medgemma:27b    # 17 GB — multimodal, needs serious hardware\nWhen the download finishes, confirm the model is installed:\nollama list\nYou should see\nmedgemma\nin the output along with its size.\nStep 3: Test MedGemma from the Terminal\nBefore adding a UI, let's make sure the model actually works. Start an interactive session:\nollama run medgemma\nYou'll get a\n>>>\nprompt. Try a medical question:\n>>> What are the classic radiographic signs of pneumonia on a chest X-ray?\nMedGemma should respond with a structured answer covering findings like consolidation, air bronchograms, and silhouette signs — the kind of answer that shows its radiology training.\nTry one more to see the clinical reasoning:\n>>> Explain the difference between Type 1 and Type 2 diabetes to a first-year medical student.\nA few useful commands inside the session:\n/bye\n— exit the session\n/clear\n— clear the conversation context\n/show info\n— display model details (parameters, quantization, context length)\nYou can also test image input directly from the terminal by passing a file path directly in the prompt:\n>>> Describe the key findings in this image. ./chest_xray_sample.png\nWhile this works, uploading images through Open WebUI is much more convenient.\nStep 4: Install Open WebUI\nOpen WebUI gives you a clean, ChatGPT-style interface on top of Ollama: conversation history, model switching, image uploads, and multi-user support, all self-hosted.\nOption A: Docker (recommended)\nStart by installing\nDocker\n.\nMake sure Docker Desktop is running, then launch Open WebUI with:\ndocker run -d -p 3000:8080 \\\n  --add-host=host.docker.internal:host-gateway \\\n  -v open-webui:/app/backend/data \\\n  --name open-webui \\\n  --restart always \\\n  ghcr.io/open-webui/open-webui:main\nLet's break down what this command does:\n-d\nruns the container in the background\n-p 3000:8080\nmaps port 3000 on your machine to the WebUI's internal port 8080\n--add-host=host.docker.internal:host-gateway\nlets the container reach the Ollama server running on your host machine\n-v open-webui:/app/backend/data\ncreates a Docker volume so your chats and settings survive container restarts\n--restart always\nbrings the UI back up automatically after reboots\nOption B: pip (no Docker)\nIf you'd rather skip Docker, you can instead install Open WebUI as a Python package (Python 3.11 is the supported version):\npip install open-webui\nopen-webui serve\nThis starts the interface at\nhttp://localhost:8080\ninstead of port 3000.\nStep 5: Connect Open WebUI to Ollama\nOpen your browser and go to\nhttp://localhost:3000\n(or\n:8080\nif you used pip).\nOn first launch, you'll be asked to create an admin account. This account is stored\nlocally on your machine\n(it's not a cloud signup).\nIn most setups, Open WebUI auto-detects Ollama at\nhttp://localhost:11434\nand you're done.\nIf your models don't appear, wire up the connection manually:\nClick your profile icon and go to\nAdmin Panel\nthen\nSettings\nthen\nConnections\n.\nUnder\nOllama API\n, set the URL:\nDocker install:\nhttp://host.docker.internal:11434\npip install:\nhttp://localhost:11434\nClick the refresh icon to verify the connection, then save.\nHead back to the main chat screen, and\nmedgemma\nshould now appear in the model dropdown at the top.\nYou can check the troubleshooting section below if you face any errors.\nStep 6: Start Chatting with MedGemma\nSelect\nmedgemma\nfrom the model selector and start a conversation. A good first test might look like this:\nSummarize this radiology report in plain language a patient could understand:\n\n\"Impression: Mild cardiomegaly. Small right pleural effusion.\nNo focal consolidation. Degenerative changes of the thoracic spine.\"\nYou should get a clear, patient-friendly explanation of each finding. This \"clinical language to plain language\" translation is one of MedGemma's genuine strengths.\nThere are a few Open WebUI features worth knowing about:\nSystem prompts:\nClick the model name and set a system prompt like\n\"You are a medical education assistant. Always explain your reasoning and cite the relevant physiology.\"\nThis shapes every response in the conversation.\nConversation history:\nEvery chat is saved locally and searchable from the sidebar.\nMultiple models:\nYou can add\nllama3.2\n,\ngemma3\n, or any other Ollama model and compare their answers to the same medical question side by side. This is a great way to\nsee\nthe difference domain training makes.\nStep 7: Upload Medical Images\nThis is where MedGemma really separates itself from general-purpose models. Because its vision encoder was pre-trained on medical imaging, it can meaningfully describe radiographs, skin lesions, fundus photos, and histopathology patches.\nTo try it:\nStart a new chat with\nmedgemma\nselected.\nClick the\n+\n(or image) icon in the message box, or simply drag and drop an image file.\nAdd a prompt alongside the image and hit send.\nFor sample images you can test with (without touching any real patient data), try public teaching datasets like the NIH ChestX-ray14 dataset, MedPix, or Radiopaedia's teaching cases.\nExample workflow with a chest X-ray:\n[Upload: chest_xray.png]\n\nYou are an expert radiology assistant. Describe this chest X-ray\nsystematically: technical quality, lungs, heart, mediastinum, bones,\nand soft tissues. Then summarize the key findings.\nMedGemma will typically walk through the image in the systematic order you asked for, which mirrors how radiologists are trained to read films.\nTwo important caveats:\nOllama and Open WebUI work with standard image formats (PNG, JPEG). Clinical DICOM files need to be converted to PNG/JPEG first — a one-liner with Python libraries like\npydicom\n+\nPillow\n.\nNever upload images containing patient-identifying information (names, MRNs, dates burned into the image) unless the data has been properly de-identified. Even on a local machine, good data hygiene is a habit worth building.\nExample Prompts to Try\nHere are prompts that showcase different capabilities. Use them as starting points:\nMedical education:\nCreate a comparison table of ACE inhibitors vs ARBs: mechanism, common examples, key side effects, and contraindications.\nClinical documentation:\nConvert these shorthand clinic notes into a structured SOAP note:\"45F, 3d cough + fever 101F, no SOB, lungs clear, likely viral URI, supportive care, return if worse\"\nReport translation for patients:\nExplain this MRI impression to a worried patient in a reassuring but honest tone: \"Small disc protrusion at L4-L5 without significant canal stenosis or nerve root compression.\"\nImage analysis (with an uploaded dermatology photo):\nDescribe this skin lesion using the ABCDE criteria\n(Asymmetry, Border, Color, Diameter, Evolution cannot be assessed from a single image — note that explicitly).\nDifferential reasoning:\nA 60-year-old presents with sudden painless vision loss in one eye. List the top 5 differential diagnoses and the key distinguishing feature of each.\nNotice a pattern: the best results come from prompts that give MedGemma a\nrole\n, a\nstructure\nto follow, and\nexplicit constraints\n. That's true of all LLMs, but it matters even more in a domain where precision counts.\nRunning Larger Models\nThe 4B model is impressive for its size, but the 27B variant is noticeably stronger at complex clinical reasoning, longer differential diagnoses, and nuanced report interpretation.\nThe trade-off is hardware:\nModel\nDownload\nRealistic RAM/VRAM needed\nBest for\nmedgemma:4b\n3.3 GB\n8 GB+ RAM\nLaptops, quick iteration, image Q&A\nmedgemma:27b\n17 GB\n32 GB RAM or 24 GB VRAM\nDeep reasoning, complex cases\nTo try the 27B model:\nollama pull medgemma:27b\nollama run medgemma:27b\nPractical tips for larger models:\nWatch your memory:\nRun\nollama ps\nto see how much RAM/VRAM a loaded model is using and whether it's running on GPU, CPU, or split across both. A model that spills from GPU to CPU gets dramatically slower.\nOn Apple Silicon\n, a 32 GB M-series Mac runs the 27B model comfortably.\nFree memory between models:\nOllama keeps models loaded for a few minutes after use. Unload immediately with\nollama stop medgemma:27b\nif you need the RAM back.\nSanity-check the speed trade-off:\nIf the 27B model generates at 2–3 tokens per second on your machine, the 4B model at 30+ tokens/second may be the better.\nYou can keep both installed and switch between them in the Open WebUI dropdown — 4B for fast iteration, 27B when you need the deeper reasoning.\nTroubleshooting Guide\nError:\nregistry.ollama.ai/library/medgemma:latest does not support tools\nThis is the most common MedGemma-specific error, and it means Open WebUI is sending native tool/function definitions with your request. MedGemma (like base Gemma 3) doesn't support Ollama's tools API, so the request is rejected before the model even sees your message.\nHunt down whatever is attaching tools, in this order:\nModel capabilities (most likely culprit):\nGo to the Admin Panel, then Settings, then Models, then medgemma, then uncheck\nBuiltin Tools\n,\nWeb Search\n,\nCode Interpreter\n, and\nTerminal\nunder Capabilities, and make sure every item in the Builtin Tools checklist is unticked. Keep\nVision\n,\nFile Upload\n, and\nFile Context\nchecked. Newer Open WebUI versions enable builtin tools by default, so a fresh install will hit this immediately.\nTask model:\nGo to Admin Panel, then Settings, then Interface, and make sure neither the local nor external Task Model is set to medgemma. Background jobs like title and follow-up generation use tool calls — route them to\nllama3.2\nor similar.\nFunction Calling mode:\nSet to\nDefault\n(not Native) in the model's Advanced Params\nand\nin your user Settings, General, Advanced Parameters.\nGlobal functions/filters:\nGo to Admin Panel, then Functions, and disable the Global toggle on any active function, since global functions attach to every model.\nPer-chat toggles:\nIn the message box, make sure web search and code interpreter toggles are off, and no Tools are attached via the + menu.\nThen start a\nnew chat\n(old chats can carry stale settings) and test. To confirm the model itself is fine, run\nollama run medgemma \"hello\"\nin your terminal. If that works, the issue is purely Open WebUI configuration.\nOpen WebUI shows no models in the dropdown\nThe container can't reach Ollama. Check that:\nOllama is actually running:\ncurl\nhttp://localhost:11434\nshould return\nOllama is running\n.\nThe connection URL in Admin Panel, Settings, Connections is\nhttp://host.docker.internal:11434\n(Docker) —\nlocalhost\nwon't work from inside a container because it refers to the container itself.\nOn Linux, if\nhost.docker.internal\ndoesn't resolve, add\n--network=host\nto your\ndocker run\ncommand instead and use\nhttp://localhost:11434\n.\nollama pull medgemma\nsays model not found\nUpdate Ollama, as MedGemma requires a recent version. Re-run the installer or, on macOS, click the menu bar icon and then Update. Then retry the pull.\nResponses are extremely slow\nCheck\nollama ps\n— if the model shows a large CPU percentage, it doesn't fit in your GPU/unified memory. Switch to the 4B model.\nClose memory-hungry apps (browsers with 40 tabs are the usual suspect).\nOn first message, models take several seconds to load into memory, subsequent messages are much faster.\nImage upload doesn't work or the model ignores the image\nMake sure you selected\nmedgemma\n(multimodal) and not a text-only model in the dropdown.\nUse PNG or JPEG. DICOM files must be converted first.\nVery high-resolution images can cause issues — resize to something reasonable (e.g., 1024px on the long edge) before uploading.\nPort 3000 is already in use\nMap a different host port: change\n-p 3000:8080\nto\n-p 3001:8080\nand access the UI at\nhttp://localhost:3001\n.\n\"Out of memory\" errors when loading the 27B model\nYour machine doesn't have enough free RAM/VRAM. Stick with\nmedgemma:4b\n, or free memory and try again. There is no shame in the 4B model — it punches well above its weight.\nConclusion\nIn this tutorial, you built a complete, private healthcare AI assistant from scratch — and it took three tools and a handful of terminal commands.\nLet's recap what you accomplished:\nInstalled Ollama and pulled MedGemma, a medically-tuned multimodal model, onto your own machine\nVerified the model from the terminal, then put a full chat interface on top of it with Open WebUI\nConfigured the model's capabilities correctly so tool-calling features don't break a model that doesn't support them\nChatted with a model that understands radiology reports, clinical terminology, and medical images — and uploaded images for analysis\nLearned how to scale up to the 27B model and how to diagnose the most common errors along the way.\nYou now have a fully private AI assistant running entirely on your own machine. From here, you can extend it with retrieval-augmented generation (RAG), integrate it with medical imaging pipelines, or connect it to de-identified clinical datasets to build more advanced healthcare AI applications.\nHappy building!\nFurther reading:\nMedGemma on the Ollama library\nMedGemma model documentation (Google Health AI Developer Foundations)\nOllama documentation\nOpen WebUI documentation",
  "metadata": {
    "title": "Build Your Own Healthcare AI Assistant with MedGemma, Ollama, and Open WebUI",
    "description": "Healthcare data is among the most sensitive data there is. Sending it to a cloud AI service is often not an option because of privacy requirements, regulatory compliance, or both. In this tutorial, yo",
    "keywords": null,
    "author": null,
    "og:site_name": "freeCodeCamp.org",
    "og:type": "article",
    "og:title": "Build Your Own Healthcare AI Assistant with MedGemma, Ollama, and Open WebUI",
    "og:description": "Healthcare data is among the most sensitive data there is. Sending it to a cloud AI service is often not an option because of privacy requirements, regulatory compliance, or both. In this tutorial, yo",
    "og:url": "https://www.freecodecamp.org/news/build-your-own-healthcare-ai-assistant-with-medgemma-ollama-and-open-webui/",
    "og:image": "https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/c6e53c46-ca40-4f4a-87e9-a925c85963d6.png",
    "og:image:width": "1920",
    "og:image:height": "1080",
    "twitter:card": "summary_large_image",
    "twitter:title": "Build Your Own Healthcare AI Assistant with MedGemma, Ollama, and Open WebUI",
    "twitter:description": "Healthcare data is among the most sensitive data there is. Sending it to a cloud AI service is often not an option because of privacy requirements, regulatory compliance, or both. In this tutorial, yo",
    "twitter:url": "https://www.freecodecamp.org/news/build-your-own-healthcare-ai-assistant-with-medgemma-ollama-and-open-webui/",
    "twitter:image": "https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/c6e53c46-ca40-4f4a-87e9-a925c85963d6.png",
    "twitter:label1": "Written by",
    "twitter:data1": "Lakshmi Mahabaleshwara",
    "twitter:label2": "Filed under",
    "twitter:data2": "AI, healthcare, Machine Learning, ollama, Tutorial, Medical Imaging",
    "twitter:site": "@freecodecamp",
    "article:published_time": "2026-07-08T23:21:21.538Z",
    "article:modified_time": "2026-07-08T23:21:21.538Z",
    "article:tag": "Medical Imaging",
    "article:publisher": "https://www.facebook.com/freecodecamp"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [
    {
      "file": "attachments/463a92d6dec5/code/body-000.txt",
      "chars": 20,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-001.txt",
      "chars": 46,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-002.txt",
      "chars": 17,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-003.txt",
      "chars": 28,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-004.txt",
      "chars": 21,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-005.txt",
      "chars": 145,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-006.txt",
      "chars": 12,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-007.txt",
      "chars": 20,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-008.txt",
      "chars": 75,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-009.txt",
      "chars": 95,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-010.txt",
      "chars": 69,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-011.txt",
      "chars": 194,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-012.txt",
      "chars": 40,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-013.txt",
      "chars": 210,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-014.txt",
      "chars": 211,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-015.txt",
      "chars": 122,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-016.txt",
      "chars": 167,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-017.txt",
      "chars": 177,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-018.txt",
      "chars": 162,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-019.txt",
      "chars": 150,
      "language": "text"
    },
    {
      "file": "attachments/463a92d6dec5/code/body-020.txt",
      "chars": 49,
      "language": "text"
    }
  ],
  "images": [
    {
      "status": "ok",
      "url": "https://cdn.hashnode.com/uploads/covers/69fd77e89f93a850a46d376f/0ea6b1a3-c9dd-4990-8fd4-404ab4069458.png",
      "bytes": 275828,
      "reused": true,
      "local_path": "attachments/463a92d6dec5/images/003.png",
      "src": "https://cdn.hashnode.com/uploads/covers/69fd77e89f93a850a46d376f/0ea6b1a3-c9dd-4990-8fd4-404ab4069458.png",
      "alt": "Diagram showing MedGemma’s multimodal architecture, where medical images are processed by a SigLIP vision encoder and combined with a language model to understand medical text and images and generate responses.",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://cdn.hashnode.com/uploads/covers/69fd77e89f93a850a46d376f/fa07c471-322a-4a39-bbd3-cfc885b9feec.png",
      "bytes": 110905,
      "reused": true,
      "local_path": "attachments/463a92d6dec5/images/004.png",
      "src": "https://cdn.hashnode.com/uploads/covers/69fd77e89f93a850a46d376f/fa07c471-322a-4a39-bbd3-cfc885b9feec.png",
      "alt": "Architecture diagram showing Open WebUI connected to Ollama, which runs the MedGemma model locally on the user’s computer. All medical text and image processing happens on the local machine without using cloud services.",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [],
  "links": [
    {
      "href": "https://ollama.com/download",
      "label": "ollama.com/download",
      "type": "a"
    },
    {
      "href": "https://www.docker.com/get-started",
      "label": "Docker",
      "type": "a"
    },
    {
      "href": "http://localhost:11434/",
      "label": "http://localhost:11434",
      "type": "a"
    },
    {
      "href": "https://ollama.com/library/medgemma",
      "label": "MedGemma on the Ollama library",
      "type": "a"
    },
    {
      "href": "https://developers.google.com/health-ai-developer-foundations/medgemma",
      "label": "MedGemma model documentation (Google Health AI Developer Foundations)",
      "type": "a"
    },
    {
      "href": "https://github.com/ollama/ollama",
      "label": "Ollama documentation",
      "type": "a"
    },
    {
      "href": "https://docs.openwebui.com/",
      "label": "Open WebUI documentation",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:50:58Z",
  "source_url": "https://freecodecamp.org/news/build-your-own-healthcare-ai-assistant-with-medgemma-ollama-and-open-webui",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 19649,
  "expected_body_images": 2,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/463a92d6dec5/pages/source.html",
  "local_html": "attachments/463a92d6dec5/pages/article.html",
  "body_base_path": "attachments/463a92d6dec5/pages/",
  "body_markdown_path": "attachments/463a92d6dec5/pages/article.md"
}