medgemma 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,46 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ share/python-wheels/
20
+ *.egg-info/
21
+ .installed.cfg
22
+ *.egg
23
+ MANIFEST
24
+
25
+ # Environments
26
+ .env
27
+ .venv
28
+ env/
29
+ venv/
30
+ ENV/
31
+ env.bak/
32
+ venv.bak/
33
+
34
+ # IDEs
35
+ .idea/
36
+ .vscode/
37
+ *.swp
38
+ *.swo
39
+
40
+ # Mac
41
+ .DS_Store
42
+
43
+ # Project specific
44
+ medgemma-original/
45
+ output/
46
+ .pytest_cache/
@@ -0,0 +1,49 @@
1
+ Metadata-Version: 2.4
2
+ Name: medgemma
3
+ Version: 0.1.0
4
+ Summary: Medical AI on Apple Silicon – MedGemma 1.5 4B via MLX
5
+ Author: chiboko
6
+ License-Expression: MIT
7
+ Keywords: ai,apple-silicon,medgemma,medical,mlx
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Intended Audience :: Healthcare Industry
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: Operating System :: MacOS
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
14
+ Requires-Python: >=3.10
15
+ Requires-Dist: click>=8.0
16
+ Requires-Dist: mlx-vlm>=0.3.10
17
+ Provides-Extra: dev
18
+ Requires-Dist: pytest-mock; extra == 'dev'
19
+ Requires-Dist: pytest>=7.0; extra == 'dev'
20
+ Description-Content-Type: text/markdown
21
+
22
+ # medgemma
23
+
24
+ Medical AI on Apple Silicon – MedGemma 1.5 4B via MLX.
25
+
26
+ ## Install
27
+
28
+ ```bash
29
+ pip install medgemma
30
+ ```
31
+
32
+ ## Usage
33
+
34
+ ```python
35
+ from medgemma import MedGemma
36
+
37
+ mg = MedGemma()
38
+ response = mg.ask("What are symptoms of diabetes?")
39
+ print(response.text)
40
+ ```
41
+
42
+ ### CLI
43
+
44
+ ```bash
45
+ medgemma ask "What are symptoms of diabetes?"
46
+ medgemma ask "Describe this X-ray" --image xray.png
47
+ medgemma setup
48
+ medgemma info
49
+ ```
@@ -0,0 +1,28 @@
1
+ # medgemma
2
+
3
+ Medical AI on Apple Silicon – MedGemma 1.5 4B via MLX.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install medgemma
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```python
14
+ from medgemma import MedGemma
15
+
16
+ mg = MedGemma()
17
+ response = mg.ask("What are symptoms of diabetes?")
18
+ print(response.text)
19
+ ```
20
+
21
+ ### CLI
22
+
23
+ ```bash
24
+ medgemma ask "What are symptoms of diabetes?"
25
+ medgemma ask "Describe this X-ray" --image xray.png
26
+ medgemma setup
27
+ medgemma info
28
+ ```
@@ -0,0 +1,81 @@
1
+
2
+ import requests
3
+ import sys
4
+
5
+ def get_pypi_data(package_name, version):
6
+ print(f"Fetching {package_name} {version}...", file=sys.stderr, flush=True)
7
+ # PyPI JSON API: https://pypi.org/pypi/<package_name>/<version>/json
8
+ url = f"https://pypi.org/pypi/{package_name}/{version}/json"
9
+ try:
10
+ resp = requests.get(url, timeout=10)
11
+ except Exception as e:
12
+ print(f"Check failed for {package_name}: {e}", file=sys.stderr)
13
+ return None
14
+
15
+ if resp.status_code != 200:
16
+ print(f"Error fetching {package_name} {version}: {resp.status_code}", file=sys.stderr)
17
+ return None
18
+ return resp.json()
19
+
20
+ def generate_resource_block(package_name, version):
21
+ data = get_pypi_data(package_name, version)
22
+ if not data:
23
+ return ""
24
+
25
+ # helper: prefer source tarball, else wheel suitable for mac/multi-platform
26
+ keys = ["sdist", "bdist_wheel"]
27
+
28
+ urls = data['urls']
29
+ if not urls:
30
+ print(f"No URLs found for {package_name}", file=sys.stderr)
31
+ return ""
32
+
33
+ # try to find sdist first
34
+ selected = next((u for u in urls if u['packagetype'] == 'sdist'), None)
35
+
36
+ # if no sdist, find a universal wheel or macos wheel
37
+ if not selected:
38
+ for u in urls:
39
+ if u['packagetype'] == 'bdist_wheel':
40
+ fname = u['filename']
41
+ if "macosx" in fname or "any" in fname:
42
+ selected = u
43
+ break
44
+
45
+ selected = selected or urls[0]
46
+
47
+ url = selected['url']
48
+ sha256 = selected['digests']['sha256']
49
+
50
+ return f""" resource "{package_name}" do
51
+ url "{url}"
52
+ sha256 "{sha256}"
53
+ end
54
+ """
55
+
56
+ def main():
57
+ try:
58
+ with open("requirements.txt") as f:
59
+ lines = f.readlines()
60
+ except FileNotFoundError:
61
+ print("requirements.txt not found", file=sys.stderr)
62
+ return
63
+
64
+ ignore_list = ["medgemma", "homebrew-pypi-poet", "setuptools"]
65
+
66
+ for line in lines:
67
+ line = line.strip()
68
+ if not line or line.startswith("#"): continue
69
+ if " @ " in line: continue # skip local/git deps
70
+
71
+ parts = line.split("==")
72
+ if len(parts) != 2: continue
73
+
74
+ pkg, ver = parts[0], parts[1]
75
+
76
+ if pkg in ignore_list: continue
77
+
78
+ print(generate_resource_block(pkg, ver))
79
+
80
+ if __name__ == "__main__":
81
+ main()
@@ -0,0 +1,13 @@
1
+
2
+ with open("medgemma.rb") as f:
3
+ original = f.read()
4
+
5
+ with open("resources.rb") as f:
6
+ resources = f.read()
7
+
8
+ # insert resources before "def install"
9
+ parts = original.split(" def install")
10
+ new_content = parts[0] + "\n" + resources + "\n def install" + parts[1]
11
+
12
+ with open("medgemma.rb", "w") as f:
13
+ f.write(new_content)
@@ -0,0 +1,357 @@
1
+ class Medgemma < Formula
2
+ include Language::Python::Virtualenv
3
+
4
+ desc "Medical AI on Apple Silicon – MedGemma 1.5 4B via MLX"
5
+ homepage "https://github.com/chibokocl/medgemma"
6
+ url "https://github.com/chibokocl/medgemma.git", branch: "main"
7
+ version "0.1.0"
8
+ license "MIT"
9
+
10
+ depends_on "python@3.10"
11
+ depends_on "cmake" => :build
12
+
13
+
14
+ resource "aiohappyeyeballs" do
15
+ url "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz"
16
+ sha256 "c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"
17
+ end
18
+
19
+ resource "aiohttp" do
20
+ url "https://files.pythonhosted.org/packages/50/42/32cf8e7704ceb4481406eb87161349abb46a57fee3f008ba9cb610968646/aiohttp-3.13.3.tar.gz"
21
+ sha256 "a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88"
22
+ end
23
+
24
+ resource "aiosignal" do
25
+ url "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz"
26
+ sha256 "f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"
27
+ end
28
+
29
+ resource "annotated-doc" do
30
+ url "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz"
31
+ sha256 "fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"
32
+ end
33
+
34
+ resource "annotated-types" do
35
+ url "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz"
36
+ sha256 "aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"
37
+ end
38
+
39
+ resource "anyio" do
40
+ url "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz"
41
+ sha256 "41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703"
42
+ end
43
+
44
+ resource "attrs" do
45
+ url "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz"
46
+ sha256 "16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"
47
+ end
48
+
49
+ resource "certifi" do
50
+ url "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz"
51
+ sha256 "ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120"
52
+ end
53
+
54
+ resource "cffi" do
55
+ url "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz"
56
+ sha256 "44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"
57
+ end
58
+
59
+ resource "charset-normalizer" do
60
+ url "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz"
61
+ sha256 "94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"
62
+ end
63
+
64
+ resource "click" do
65
+ url "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz"
66
+ sha256 "12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"
67
+ end
68
+
69
+ resource "datasets" do
70
+ url "https://files.pythonhosted.org/packages/55/bf/bb927bde63d649296c83e883171ae77074717c1b80fe2868b328bd0dbcbb/datasets-4.5.0.tar.gz"
71
+ sha256 "00c698ce1c2452e646cc5fad47fef39d3fe78dd650a8a6eb205bb45eb63cd500"
72
+ end
73
+
74
+ resource "dill" do
75
+ url "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz"
76
+ sha256 "0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0"
77
+ end
78
+
79
+ resource "fastapi" do
80
+ url "https://files.pythonhosted.org/packages/52/08/8c8508db6c7b9aae8f7175046af41baad690771c9bcde676419965e338c7/fastapi-0.128.0.tar.gz"
81
+ sha256 "1cc179e1cef10a6be60ffe429f79b829dce99d8de32d7acb7e6c8dfdf7f2645a"
82
+ end
83
+
84
+ resource "filelock" do
85
+ url "https://files.pythonhosted.org/packages/1d/65/ce7f1b70157833bf3cb851b556a37d4547ceafc158aa9b34b36782f23696/filelock-3.20.3.tar.gz"
86
+ sha256 "18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1"
87
+ end
88
+
89
+ resource "frozenlist" do
90
+ url "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz"
91
+ sha256 "3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad"
92
+ end
93
+
94
+ resource "fsspec" do
95
+ url "https://files.pythonhosted.org/packages/24/7f/2747c0d332b9acfa75dc84447a066fdf812b5a6b8d30472b74d309bfe8cb/fsspec-2025.10.0.tar.gz"
96
+ sha256 "b6789427626f068f9a83ca4e8a3cc050850b6c0f71f99ddb4f542b8266a26a59"
97
+ end
98
+
99
+ resource "h11" do
100
+ url "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz"
101
+ sha256 "4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"
102
+ end
103
+
104
+ resource "hf-xet" do
105
+ url "https://files.pythonhosted.org/packages/5e/6e/0f11bacf08a67f7fb5ee09740f2ca54163863b07b70d579356e9222ce5d8/hf_xet-1.2.0.tar.gz"
106
+ sha256 "a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f"
107
+ end
108
+
109
+ resource "httpcore" do
110
+ url "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz"
111
+ sha256 "6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"
112
+ end
113
+
114
+ resource "httpx" do
115
+ url "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz"
116
+ sha256 "75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"
117
+ end
118
+
119
+ resource "huggingface_hub" do
120
+ url "https://files.pythonhosted.org/packages/67/e9/2658cb9bc4c72a67b7f87650e827266139befaf499095883d30dabc4d49f/huggingface_hub-1.3.5.tar.gz"
121
+ sha256 "8045aca8ddab35d937138f3c386c6d43a275f53437c5c64cdc9aa8408653b4ed"
122
+ end
123
+
124
+ resource "idna" do
125
+ url "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz"
126
+ sha256 "795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"
127
+ end
128
+
129
+ resource "iniconfig" do
130
+ url "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz"
131
+ sha256 "c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"
132
+ end
133
+
134
+ resource "Jinja2" do
135
+ url "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz"
136
+ sha256 "0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"
137
+ end
138
+
139
+ resource "MarkupSafe" do
140
+ url "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz"
141
+ sha256 "722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"
142
+ end
143
+
144
+ resource "mlx" do
145
+ url "https://files.pythonhosted.org/packages/f1/c0/3e5442dc0101dec6c4a6a6d10da7a2c120fc5f1f0bda7ea67cb6bc1cb318/mlx-0.30.4-cp310-cp310-macosx_14_0_arm64.whl"
146
+ sha256 "dbee1b130b27119c6aa64b1120273a93d638399a7f1036637e4f974af35141bc"
147
+ end
148
+
149
+ resource "mlx-lm" do
150
+ url "https://files.pythonhosted.org/packages/0b/90/4469d9f75f196e6255f59a89441abe0079925d30a001462e1c1c4bc4e6a1/mlx_lm-0.30.5.tar.gz"
151
+ sha256 "9e6cb258c65b766c6af25cb90958aef40acab67139f05839eef19864cb3154f6"
152
+ end
153
+
154
+ resource "mlx-metal" do
155
+ url "https://files.pythonhosted.org/packages/95/b1/a50b84aaa76a60605606df49196456f31871148485ede7cbe3267a25a51e/mlx_metal-0.30.4-py3-none-macosx_14_0_arm64.whl"
156
+ sha256 "10c417f86778ac5529ecd2180f90de35f2d3a0fcad4d5176d211d651504c4922"
157
+ end
158
+
159
+ resource "mlx-vlm" do
160
+ url "https://files.pythonhosted.org/packages/dd/e1/2db6ed3ef96a370b846d6fd7e2f88a522c794873ddc0467bc02ab1dd2513/mlx_vlm-0.3.10.tar.gz"
161
+ sha256 "8bfa2ee440fe6d00aee54a113449821ebe89ff5c96f61d838dee7658501a81c5"
162
+ end
163
+
164
+ resource "multidict" do
165
+ url "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz"
166
+ sha256 "ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d"
167
+ end
168
+
169
+ resource "multiprocess" do
170
+ url "https://files.pythonhosted.org/packages/72/fd/2ae3826f5be24c6ed87266bc4e59c46ea5b059a103f3d7e7eb76a52aeecb/multiprocess-0.70.18.tar.gz"
171
+ sha256 "f9597128e6b3e67b23956da07cf3d2e5cba79e2f4e0fba8d7903636663ec6d0d"
172
+ end
173
+
174
+ resource "numpy" do
175
+ url "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz"
176
+ sha256 "659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae"
177
+ end
178
+
179
+ resource "opencv-python" do
180
+ url "https://files.pythonhosted.org/packages/77/d7/133d5756aef78090f4d8dd4895793aed24942dec6064a15375cfac9175fc/opencv_python-4.13.0.90-cp37-abi3-macosx_13_0_arm64.whl"
181
+ sha256 "58803f8b05b51d8a785e2306d83b44173b32536f980342f3bc76d8c122b5938d"
182
+ end
183
+
184
+ resource "packaging" do
185
+ url "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz"
186
+ sha256 "00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"
187
+ end
188
+
189
+ resource "pandas" do
190
+ url "https://files.pythonhosted.org/packages/de/da/b1dc0481ab8d55d0f46e343cfe67d4551a0e14fcee52bd38ca1bd73258d8/pandas-3.0.0.tar.gz"
191
+ sha256 "0facf7e87d38f721f0af46fe70d97373a37701b1c09f7ed7aeeb292ade5c050f"
192
+ end
193
+
194
+ resource "pillow" do
195
+ url "https://files.pythonhosted.org/packages/d0/02/d52c733a2452ef1ffcc123b68e6606d07276b0e358db70eabad7e40042b7/pillow-12.1.0.tar.gz"
196
+ sha256 "5c5ae0a06e9ea030ab786b0251b32c7e4ce10e58d983c0d5c56029455180b5b9"
197
+ end
198
+
199
+ resource "pluggy" do
200
+ url "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz"
201
+ sha256 "7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"
202
+ end
203
+
204
+ resource "propcache" do
205
+ url "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz"
206
+ sha256 "f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d"
207
+ end
208
+
209
+ resource "protobuf" do
210
+ url "https://files.pythonhosted.org/packages/ba/25/7c72c307aafc96fa87062aa6291d9f7c94836e43214d43722e86037aac02/protobuf-6.33.5.tar.gz"
211
+ sha256 "6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c"
212
+ end
213
+
214
+ resource "pyarrow" do
215
+ url "https://files.pythonhosted.org/packages/01/33/ffd9c3eb087fa41dd79c3cf20c4c0ae3cdb877c4f8e1107a446006344924/pyarrow-23.0.0.tar.gz"
216
+ sha256 "180e3150e7edfcd182d3d9afba72f7cf19839a497cc76555a8dce998a8f67615"
217
+ end
218
+
219
+ resource "pycparser" do
220
+ url "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz"
221
+ sha256 "600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"
222
+ end
223
+
224
+ resource "pydantic" do
225
+ url "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz"
226
+ sha256 "4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"
227
+ end
228
+
229
+ resource "pydantic_core" do
230
+ url "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz"
231
+ sha256 "08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"
232
+ end
233
+
234
+ resource "Pygments" do
235
+ url "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz"
236
+ sha256 "636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"
237
+ end
238
+
239
+ resource "pytest" do
240
+ url "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz"
241
+ sha256 "75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11"
242
+ end
243
+
244
+ resource "pytest-mock" do
245
+ url "https://files.pythonhosted.org/packages/68/14/eb014d26be205d38ad5ad20d9a80f7d201472e08167f0bb4361e251084a9/pytest_mock-3.15.1.tar.gz"
246
+ sha256 "1849a238f6f396da19762269de72cb1814ab44416fa73a8686deac10b0d87a0f"
247
+ end
248
+
249
+ resource "python-dateutil" do
250
+ url "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz"
251
+ sha256 "37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"
252
+ end
253
+
254
+ resource "PyYAML" do
255
+ url "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz"
256
+ sha256 "d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"
257
+ end
258
+
259
+ resource "regex" do
260
+ url "https://files.pythonhosted.org/packages/0b/86/07d5056945f9ec4590b518171c4254a5925832eb727b56d3c38a7476f316/regex-2026.1.15.tar.gz"
261
+ sha256 "164759aa25575cbc0651bef59a0b18353e54300d79ace8084c818ad8ac72b7d5"
262
+ end
263
+
264
+ resource "requests" do
265
+ url "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz"
266
+ sha256 "dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"
267
+ end
268
+
269
+ resource "safetensors" do
270
+ url "https://files.pythonhosted.org/packages/29/9c/6e74567782559a63bd040a236edca26fd71bc7ba88de2ef35d75df3bca5e/safetensors-0.7.0.tar.gz"
271
+ sha256 "07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0"
272
+ end
273
+
274
+ resource "sentencepiece" do
275
+ url "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz"
276
+ sha256 "8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad"
277
+ end
278
+
279
+ resource "shellingham" do
280
+ url "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz"
281
+ sha256 "8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"
282
+ end
283
+
284
+ resource "six" do
285
+ url "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz"
286
+ sha256 "ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"
287
+ end
288
+
289
+ resource "soundfile" do
290
+ url "https://files.pythonhosted.org/packages/e1/41/9b873a8c055582859b239be17902a85339bec6a30ad162f98c9b0288a2cc/soundfile-0.13.1.tar.gz"
291
+ sha256 "b2c68dab1e30297317080a5b43df57e302584c49e2942defdde0acccc53f0e5b"
292
+ end
293
+
294
+ resource "starlette" do
295
+ url "https://files.pythonhosted.org/packages/ba/b8/73a0e6a6e079a9d9cfa64113d771e421640b6f679a52eeb9b32f72d871a1/starlette-0.50.0.tar.gz"
296
+ sha256 "a2a17b22203254bcbc2e1f926d2d55f3f9497f769416b3190768befe598fa3ca"
297
+ end
298
+
299
+ resource "tokenizers" do
300
+ url "https://files.pythonhosted.org/packages/73/6f/f80cfef4a312e1fb34baf7d85c72d4411afde10978d4657f8cdd811d3ccc/tokenizers-0.22.2.tar.gz"
301
+ sha256 "473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917"
302
+ end
303
+
304
+ resource "tqdm" do
305
+ url "https://files.pythonhosted.org/packages/27/89/4b0001b2dab8df0a5ee2787dcbe771de75ded01f18f1f8d53dedeea2882b/tqdm-4.67.2.tar.gz"
306
+ sha256 "649aac53964b2cb8dec76a14b405a4c0d13612cb8933aae547dd144eacc99653"
307
+ end
308
+
309
+ resource "transformers" do
310
+ url "https://files.pythonhosted.org/packages/3f/a3/7c116a8d85f69ea7749cf4c2df79e64c35d028e5fc7ea0168f299d03b8c7/transformers-5.0.0rc3.tar.gz"
311
+ sha256 "a0315b92b7e087617ade42ec9e6e92ee7620541cc5d6a3331886c52cbe306f5c"
312
+ end
313
+
314
+ resource "typer-slim" do
315
+ url "https://files.pythonhosted.org/packages/17/d4/064570dec6358aa9049d4708e4a10407d74c99258f8b2136bb8702303f1a/typer_slim-0.21.1.tar.gz"
316
+ sha256 "73495dd08c2d0940d611c5a8c04e91c2a0a98600cbd4ee19192255a233b6dbfd"
317
+ end
318
+
319
+ resource "typing-inspection" do
320
+ url "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz"
321
+ sha256 "ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"
322
+ end
323
+
324
+ resource "typing_extensions" do
325
+ url "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz"
326
+ sha256 "0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"
327
+ end
328
+
329
+ resource "urllib3" do
330
+ url "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz"
331
+ sha256 "1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"
332
+ end
333
+
334
+ resource "uvicorn" do
335
+ url "https://files.pythonhosted.org/packages/c3/d1/8f3c683c9561a4e6689dd3b1d345c815f10f86acd044ee1fb9a4dcd0b8c5/uvicorn-0.40.0.tar.gz"
336
+ sha256 "839676675e87e73694518b5574fd0f24c9d97b46bea16df7b8c05ea1a51071ea"
337
+ end
338
+
339
+ resource "xxhash" do
340
+ url "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz"
341
+ sha256 "f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6"
342
+ end
343
+
344
+ resource "yarl" do
345
+ url "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz"
346
+ sha256 "bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71"
347
+ end
348
+
349
+
350
+ def install
351
+ virtualenv_install_with_resources
352
+ end
353
+
354
+ test do
355
+ system "#{bin}/medgemma", "--help"
356
+ end
357
+ end
@@ -0,0 +1,37 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "medgemma"
7
+ dynamic = ["version"]
8
+ description = "Medical AI on Apple Silicon – MedGemma 1.5 4B via MLX"
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ requires-python = ">=3.10"
12
+ authors = [{ name = "chiboko" }]
13
+ keywords = ["medical", "ai", "mlx", "apple-silicon", "medgemma"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Healthcare Industry",
17
+ "Intended Audience :: Science/Research",
18
+ "Operating System :: MacOS",
19
+ "Programming Language :: Python :: 3",
20
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
21
+ ]
22
+ dependencies = [
23
+ "mlx-vlm>=0.3.10",
24
+ "click>=8.0",
25
+ ]
26
+
27
+ [project.optional-dependencies]
28
+ dev = ["pytest>=7.0", "pytest-mock"]
29
+
30
+ [project.scripts]
31
+ medgemma = "medgemma.cli:cli"
32
+
33
+ [tool.hatch.version]
34
+ path = "src/medgemma/_version.py"
35
+
36
+ [tool.hatch.build.targets.wheel]
37
+ packages = ["src/medgemma"]
@@ -0,0 +1,70 @@
1
+ aiohappyeyeballs==2.6.1
2
+ aiohttp==3.13.3
3
+ aiosignal==1.4.0
4
+ annotated-doc==0.0.4
5
+ annotated-types==0.7.0
6
+ anyio==4.12.1
7
+ attrs==25.4.0
8
+ certifi==2026.1.4
9
+ cffi==2.0.0
10
+ charset-normalizer==3.4.4
11
+ click==8.3.1
12
+ datasets==4.5.0
13
+ dill==0.4.0
14
+ fastapi==0.128.0
15
+ filelock==3.20.3
16
+ frozenlist==1.8.0
17
+ fsspec==2025.10.0
18
+ h11==0.16.0
19
+ hf-xet==1.2.0
20
+ homebrew-pypi-poet==0.10.0
21
+ httpcore==1.0.9
22
+ httpx==0.28.1
23
+ huggingface_hub==1.3.5
24
+ idna==3.11
25
+ iniconfig==2.3.0
26
+ Jinja2==3.1.6
27
+ MarkupSafe==3.0.3
28
+ -e git+ssh://git@github.com/chibokocl/medgemma.git@16e562c0d3a5270a07bb8733a256acc70bbc7775#egg=medgemma
29
+ mlx==0.30.4
30
+ mlx-lm==0.30.5
31
+ mlx-metal==0.30.4
32
+ mlx-vlm==0.3.10
33
+ multidict==6.7.1
34
+ multiprocess==0.70.18
35
+ numpy==2.4.2
36
+ opencv-python==4.13.0.90
37
+ packaging==26.0
38
+ pandas==3.0.0
39
+ pillow==12.1.0
40
+ pluggy==1.6.0
41
+ propcache==0.4.1
42
+ protobuf==6.33.5
43
+ pyarrow==23.0.0
44
+ pycparser==3.0
45
+ pydantic==2.12.5
46
+ pydantic_core==2.41.5
47
+ Pygments==2.19.2
48
+ pytest==9.0.2
49
+ pytest-mock==3.15.1
50
+ python-dateutil==2.9.0.post0
51
+ PyYAML==6.0.3
52
+ regex==2026.1.15
53
+ requests==2.32.5
54
+ safetensors==0.7.0
55
+ sentencepiece==0.2.1
56
+ setuptools==80.10.2
57
+ shellingham==1.5.4
58
+ six==1.17.0
59
+ soundfile==0.13.1
60
+ starlette==0.50.0
61
+ tokenizers==0.22.2
62
+ tqdm==4.67.2
63
+ transformers==5.0.0rc3
64
+ typer-slim==0.21.1
65
+ typing-inspection==0.4.2
66
+ typing_extensions==4.15.0
67
+ urllib3==2.6.3
68
+ uvicorn==0.40.0
69
+ xxhash==3.6.0
70
+ yarl==1.22.0