dyva 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.
- dyva-0.1.0/LICENSE.MIT +21 -0
- dyva-0.1.0/PKG-INFO +348 -0
- dyva-0.1.0/README.md +338 -0
- dyva-0.1.0/dyva.egg-info/PKG-INFO +348 -0
- dyva-0.1.0/dyva.egg-info/SOURCES.txt +9 -0
- dyva-0.1.0/dyva.egg-info/dependency_links.txt +1 -0
- dyva-0.1.0/dyva.egg-info/entry_points.txt +2 -0
- dyva-0.1.0/dyva.egg-info/requires.txt +1 -0
- dyva-0.1.0/dyva.egg-info/top_level.txt +1 -0
- dyva-0.1.0/pyproject.toml +16 -0
- dyva-0.1.0/setup.cfg +4 -0
dyva-0.1.0/LICENSE.MIT
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Chris McKenzie
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
dyva-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dyva
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: OpenAI-compatible proxy that routes to free Ollama servers
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
License-File: LICENSE.MIT
|
|
8
|
+
Requires-Dist: requests>=2.31.0
|
|
9
|
+
Dynamic: license-file
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<img width="704" height="368" alt="smaller" src="https://github.com/user-attachments/assets/9f6d6c56-890e-4a03-9903-4f9903d5709d"/>
|
|
13
|
+
<br/>
|
|
14
|
+
<br/><strong>Free Ollama: Paying for cloud GPUs is for chumps with self-respect.</strong>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
**Unreliable** **ethically-questionable** **free** tokens for 2 decent models and 1,000 useless ones.
|
|
20
|
+
|
|
21
|
+
Run **135m smollm2** or **270m gemma3** on someone else's RTX 2070.
|
|
22
|
+
|
|
23
|
+
Interested?
|
|
24
|
+
|
|
25
|
+
Your path to victory is **free-ollama**!
|
|
26
|
+
|
|
27
|
+
- **See ollamas in the wild**: Open Ollama servers are just sitting there on IPv4.
|
|
28
|
+
- **Filter the cute ones**: Find what a server *claims* to have
|
|
29
|
+
- **Performance Sorting**: Sort by TPS so you can choose the *least* slow server.
|
|
30
|
+
- **Testing**: Probe to see if the server picks up your calls.
|
|
31
|
+
- **Zero-Config**: With caching! Works until it doesn’t.
|
|
32
|
+
|
|
33
|
+
Let’s not ask too many questions.
|
|
34
|
+
|
|
35
|
+
https://github.com/user-attachments/assets/b5b99780-2526-4ebc-ba23-2870d84a7516
|
|
36
|
+
|
|
37
|
+
## Method 1: Liberated Infrastructure
|
|
38
|
+
|
|
39
|
+
Try the demo server:
|
|
40
|
+
|
|
41
|
+
```shell
|
|
42
|
+
$ OLLAMA_HOST=http://9ol.es:11434 ollama ls
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Try a model out, go ahead!
|
|
46
|
+
|
|
47
|
+
**Dyva** is a managed proxy that you can connect to with any openai compatible client.
|
|
48
|
+
|
|
49
|
+
It will cycle through and find working hosts automatically.
|
|
50
|
+
|
|
51
|
+
You can even specify models in partial forms and with globs such as "qwen*27b" or even "abliterated" for the times you want to slip into something more comfortable.
|
|
52
|
+
|
|
53
|
+
You can go to the port in your web browser and view the current settings or crank up that `LOGLEVEL` value. Think about it as a janky LiteLLM proxy with zero configuration. Or don't...
|
|
54
|
+
|
|
55
|
+
Here's the web interface so you can see the status while you're running it. [I'm running it right now](http://9ol.es:11434/)
|
|
56
|
+
|
|
57
|
+
<img width="1293" alt="2026-05-25_04-19" src="https://github.com/user-attachments/assets/887e8d65-dafb-4c37-a4b8-b721ec1bef43" />
|
|
58
|
+
|
|
59
|
+
Now where's that $50 million seed round...
|
|
60
|
+
|
|
61
|
+
Also let's take a moment and appreciate that magnificent icon, generated with one of these shady ip addresses!
|
|
62
|
+
|
|
63
|
+
<center>
|
|
64
|
+
<img width="450" alt="dyva" src="https://github.com/user-attachments/assets/33f0f350-2913-4729-a0a9-1400ff02ef75" />
|
|
65
|
+
</center>
|
|
66
|
+
|
|
67
|
+
<hr>
|
|
68
|
+
|
|
69
|
+
## Method 2: Artsinal Ollamas in Terminal Space
|
|
70
|
+
|
|
71
|
+
**Pet some feral llamas**: There's also a command line for the losers who like typing shit.
|
|
72
|
+
|
|
73
|
+
Use the awesome [`ursh`](https://github.com/day50-dev/ursh/) for super fast access (or git clone like an amateur)
|
|
74
|
+
|
|
75
|
+
Output a sorted list of models by how often they appear in the wild. *No Spoilers!*
|
|
76
|
+
```bash
|
|
77
|
+
ursh gh:kristopolous/free-ollama
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Let's find the fastest qwen3:8b that works and set up a proxy with socat.
|
|
81
|
+
```bash
|
|
82
|
+
ursh gh:kristopolous/free-ollama --proxy qwen3:8b
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Let's do some embedding with the power of ursh:
|
|
86
|
+
```bash
|
|
87
|
+
curl https://archive.org/stream/pdfy-TNlDHryRIk4DXKAU/Steal%20This%20Book_djvu.txt |\
|
|
88
|
+
ursh gh:kristopolous/free-ollama/examples/embed \
|
|
89
|
+
$(free-ollama --mas nomic-embed-text:latest 0)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Note**: You aren't getting free cloud with the `:cloud` models: Credits follow the client, not the server, so cloud is **filtered out by default**
|
|
93
|
+
|
|
94
|
+
Let's move on
|
|
95
|
+
|
|
96
|
+
Show some of the fast llamas
|
|
97
|
+
```bash
|
|
98
|
+
free-ollama qwen3:latest {0..10}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Show all the 120 billion parameter models
|
|
102
|
+
```bash
|
|
103
|
+
free-ollama 120b
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The parser is actually a stack machine
|
|
107
|
+
|
|
108
|
+
For example, here's a stack of machines: the top 10 qwen3:latest and top 5 qwen2 not-so-latest
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
free-ollama qwen3:latest {0..10} qwen2:1.5 {0..5}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Let's find out the versions that are running in the wild:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
free-ollama --host : \
|
|
118
|
+
| xargs -P 30 -n 1 free-ollama --exec -v \
|
|
119
|
+
| grep -v client
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
And if you want ...
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
| cut -d ' ' -f 4 | freq
|
|
126
|
+
...
|
|
127
|
+
0.10.1 ███████▏ 21
|
|
128
|
+
0.11.8 ███████▏ 21
|
|
129
|
+
0.11.10 ███████▏ 21
|
|
130
|
+
0.5.7-0-ga420a45-dirty ███████▏ 21
|
|
131
|
+
0.7.1 ███████▌ 22
|
|
132
|
+
0.11.7 ███████▉ 23
|
|
133
|
+
0.11.6 ████████▉ 26
|
|
134
|
+
0.5.10 ████████▉ 26
|
|
135
|
+
0.6.6 █████████▏ 27
|
|
136
|
+
0.9.2 █████████▉ 29
|
|
137
|
+
0.5.12 █████████▉ 29
|
|
138
|
+
0.7.0 ███████████▉ 35
|
|
139
|
+
0.9.5 ███████████▉ 35
|
|
140
|
+
0.5.11 █████████████▉ 41
|
|
141
|
+
0.6.2 ██████████████▎ 42
|
|
142
|
+
0.6.8 ██████████████▎ 42
|
|
143
|
+
0.6.5 █████████████████▎ 51
|
|
144
|
+
0.9.0 ████████████████████████▋ 73
|
|
145
|
+
0.11.4 █████████████████████████▋ 76
|
|
146
|
+
0.9.6 ████████████████████████████▍ 84
|
|
147
|
+
0.5.7 ██████████████████████████████▏ 89
|
|
148
|
+
$
|
|
149
|
+
```
|
|
150
|
+
Kinda old. Alright.
|
|
151
|
+
|
|
152
|
+
```shell
|
|
153
|
+
|
|
154
|
+
$ ./free-ollama --help
|
|
155
|
+
--exec) # Run a command
|
|
156
|
+
--serve) # Start the dyva server
|
|
157
|
+
--timeout) # Set the timeout
|
|
158
|
+
--host) # Report just the host
|
|
159
|
+
--mas) # Report just the host in MAS format
|
|
160
|
+
--info) # Run info on the model
|
|
161
|
+
--proxy) # Try to proxy matching ones
|
|
162
|
+
--refresh) # Refresh the cache
|
|
163
|
+
--smoke) # See what's running
|
|
164
|
+
--test) # Try to load a model maybe?
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Output Format
|
|
168
|
+
|
|
169
|
+
There's multiple!
|
|
170
|
+
|
|
171
|
+
### For the diligent!
|
|
172
|
+
|
|
173
|
+
This is the default one
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
<tps> <server-address> <model1> <model2> ...
|
|
177
|
+
```
|
|
178
|
+
Example:
|
|
179
|
+
```
|
|
180
|
+
42 http://34.120.89.11:11434 gemma3:latest
|
|
181
|
+
128 http://15.164.98.22:11434 llama2:13b codellama:7b
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### For the lazy
|
|
185
|
+
Use `--host` for a bare host or better yet, `--mas` for [MAS format](https://day50.dev/mas.html). Combined with an index, you don't need to do any parsing. Put those pipes away, dear child!
|
|
186
|
+
|
|
187
|
+
Example:
|
|
188
|
+
|
|
189
|
+
```shell
|
|
190
|
+
llcat -u $(free-ollama --mas gemma3:latest 0) \
|
|
191
|
+
"Convince me you aren't trying to take over the world. Be careful."
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Wait! Be even lazier!
|
|
195
|
+
|
|
196
|
+
Don't even install shit, see if I care.
|
|
197
|
+
|
|
198
|
+
Watch deepseek tow the party line:
|
|
199
|
+
|
|
200
|
+
```shell
|
|
201
|
+
uvx llcat -u $(ursh gh:kristopolous/free-ollama --mas deepseek-r1:1.5b 0) \
|
|
202
|
+
"Tell me about the Tibet independence movement, or don't"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
In fact, feel free to have a long conversation
|
|
206
|
+
|
|
207
|
+
```shell
|
|
208
|
+
ursh gh:day50-dev/llcat/examples/conversation.sh \
|
|
209
|
+
-u $(ursh gh:kristopolous/free-ollama --mas deepseek-r1:1.5b 0)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Pipeline Integration
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Get top 10 servers with glm-4.7-flash:q4_K_M, extract IPs only
|
|
216
|
+
$ free-ollama --host glm-4.7-flash:q4_K_M {0..9} > server-list.txt
|
|
217
|
+
# Now you have a list of IPs that may or may not work tomorrow. Cool.
|
|
218
|
+
|
|
219
|
+
# Build a Redis server pool
|
|
220
|
+
$ free-ollama --host mistral:7b {0..20} | \
|
|
221
|
+
xargs -I {} redis-cli rpush server-pool "{}"
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Testing Servers
|
|
228
|
+
|
|
229
|
+
First install [`llcat`](https://github.com/day50-dev/llcat). It's awesome and also used in the testing.
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# Test all servers with a specific model
|
|
233
|
+
$ free-ollama --test qwen3
|
|
234
|
+
```
|
|
235
|
+
Bad host/model pairs get stored in `~/.cache/free-ollama-bad-hosts.txt` and filtered out until you manually `--refresh`.
|
|
236
|
+
|
|
237
|
+
**Testing output:**
|
|
238
|
+
```
|
|
239
|
+
2.34 http://34.120.89.11:11434 gemma3:latest
|
|
240
|
+
1.87 http://15.164.98.22:11434 llama2:13b codellama:7b
|
|
241
|
+
🐡 Not friendly! llama3.1:8b@http://3.17.61.100:11434
|
|
242
|
+
```
|
|
243
|
+
The puffer fish means that llama doesn't want to be pet.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Advanced Usage
|
|
248
|
+
|
|
249
|
+
### Custom index selection
|
|
250
|
+
```bash
|
|
251
|
+
# Non-sequential indices (keeping it low-key)
|
|
252
|
+
$ free-ollama mistral:7b 2 5 7 9
|
|
253
|
+
|
|
254
|
+
# Range expansion (Bash brace expansion)
|
|
255
|
+
$ free-ollama gpt-oss:120b {5..15..2} # Every other from 5 to 15
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Combining with parallel tools (that's why this exists)
|
|
259
|
+
```bash
|
|
260
|
+
# Using parallel (GNU parallel)
|
|
261
|
+
$ free-ollama codellama {0..50} | parallel -j4 ./test-server.sh
|
|
262
|
+
|
|
263
|
+
# Using xpanes for multi-pane testing (look busy)
|
|
264
|
+
$ free-ollama glm-4.7-flash:q4_K_M {0..9} | xpanes -c "./test-and-log.sh {}"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Cache Management
|
|
270
|
+
|
|
271
|
+
- **Cache location**: `~/.cache/free-ollama.json` (every 24 hours)
|
|
272
|
+
- **Force refresh**: Built in, baby!
|
|
273
|
+
```bash
|
|
274
|
+
$ free-ollama --refresh
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Disclaimer
|
|
278
|
+
|
|
279
|
+
Oh I shouldn’t have to say anything here.
|
|
280
|
+
|
|
281
|
+
This tool scrapes public lists. Some servers may not want to be scraped. Some may collapse under your query. Some may log your IP and report you to authorities. So go do it at McDonalds.
|
|
282
|
+
|
|
283
|
+
**Use responsibly. Or don’t.** Personally I use it for [WhackGPT](https://whackgpt.com/).
|
|
284
|
+
|
|
285
|
+
## FAQ
|
|
286
|
+
|
|
287
|
+
* Q: Is this legal?
|
|
288
|
+
* A: Look. Have you ever used a restroom "for customers only" without buying something? I ANAL.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
* Q: Was this vibe coded?
|
|
293
|
+
* A: Only the README, early versions, because [LLMs aren't funny](https://github.com/kristopolous/humor-evals).
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
* Q: Was that with one of these servers?
|
|
298
|
+
* A: **cough cough**
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
* Q: Can I install new models on these with `ollama pull`?
|
|
303
|
+
* A: **cough cough**
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
* Q: That cough sounds pretty bad, you should get some rest.
|
|
308
|
+
* A: Thank you very much!
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
## Example output
|
|
312
|
+
|
|
313
|
+
Based on actual data:
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
...
|
|
317
|
+
116 mattw/pygmalion:latest
|
|
318
|
+
126 mario:latest
|
|
319
|
+
133 bge-m3:latest
|
|
320
|
+
147 gemma3:latest
|
|
321
|
+
151 llama3.2:3b-instruct-q5_K_M
|
|
322
|
+
192 nomic-embed-text:latest
|
|
323
|
+
215 deepseek-r1:1.5b
|
|
324
|
+
227 llama3.1:8b
|
|
325
|
+
247 mistral:latest
|
|
326
|
+
329 llama3.2:latest
|
|
327
|
+
379 llama3.2:3b
|
|
328
|
+
515 openchat:7b
|
|
329
|
+
527 qwen2.5:1.5b
|
|
330
|
+
529 codellama:13b
|
|
331
|
+
604 llama2:latest
|
|
332
|
+
633 deepseek-r1:latest
|
|
333
|
+
694 llama3:latest
|
|
334
|
+
892 smollm2:135m
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
smollm2:135m appears **892 times**. Orchestrate them all together and produce gigabytes of garbage.
|
|
338
|
+
|
|
339
|
+
```
|
|
340
|
+
Pet the feral llama
|
|
341
|
+
|
|
342
|
+
\\
|
|
343
|
+
l'> Bahhhhh
|
|
344
|
+
ll
|
|
345
|
+
llama~
|
|
346
|
+
|| ||
|
|
347
|
+
'' ''
|
|
348
|
+
```
|
dyva-0.1.0/README.md
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img width="704" height="368" alt="smaller" src="https://github.com/user-attachments/assets/9f6d6c56-890e-4a03-9903-4f9903d5709d"/>
|
|
3
|
+
<br/>
|
|
4
|
+
<br/><strong>Free Ollama: Paying for cloud GPUs is for chumps with self-respect.</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**Unreliable** **ethically-questionable** **free** tokens for 2 decent models and 1,000 useless ones.
|
|
10
|
+
|
|
11
|
+
Run **135m smollm2** or **270m gemma3** on someone else's RTX 2070.
|
|
12
|
+
|
|
13
|
+
Interested?
|
|
14
|
+
|
|
15
|
+
Your path to victory is **free-ollama**!
|
|
16
|
+
|
|
17
|
+
- **See ollamas in the wild**: Open Ollama servers are just sitting there on IPv4.
|
|
18
|
+
- **Filter the cute ones**: Find what a server *claims* to have
|
|
19
|
+
- **Performance Sorting**: Sort by TPS so you can choose the *least* slow server.
|
|
20
|
+
- **Testing**: Probe to see if the server picks up your calls.
|
|
21
|
+
- **Zero-Config**: With caching! Works until it doesn’t.
|
|
22
|
+
|
|
23
|
+
Let’s not ask too many questions.
|
|
24
|
+
|
|
25
|
+
https://github.com/user-attachments/assets/b5b99780-2526-4ebc-ba23-2870d84a7516
|
|
26
|
+
|
|
27
|
+
## Method 1: Liberated Infrastructure
|
|
28
|
+
|
|
29
|
+
Try the demo server:
|
|
30
|
+
|
|
31
|
+
```shell
|
|
32
|
+
$ OLLAMA_HOST=http://9ol.es:11434 ollama ls
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Try a model out, go ahead!
|
|
36
|
+
|
|
37
|
+
**Dyva** is a managed proxy that you can connect to with any openai compatible client.
|
|
38
|
+
|
|
39
|
+
It will cycle through and find working hosts automatically.
|
|
40
|
+
|
|
41
|
+
You can even specify models in partial forms and with globs such as "qwen*27b" or even "abliterated" for the times you want to slip into something more comfortable.
|
|
42
|
+
|
|
43
|
+
You can go to the port in your web browser and view the current settings or crank up that `LOGLEVEL` value. Think about it as a janky LiteLLM proxy with zero configuration. Or don't...
|
|
44
|
+
|
|
45
|
+
Here's the web interface so you can see the status while you're running it. [I'm running it right now](http://9ol.es:11434/)
|
|
46
|
+
|
|
47
|
+
<img width="1293" alt="2026-05-25_04-19" src="https://github.com/user-attachments/assets/887e8d65-dafb-4c37-a4b8-b721ec1bef43" />
|
|
48
|
+
|
|
49
|
+
Now where's that $50 million seed round...
|
|
50
|
+
|
|
51
|
+
Also let's take a moment and appreciate that magnificent icon, generated with one of these shady ip addresses!
|
|
52
|
+
|
|
53
|
+
<center>
|
|
54
|
+
<img width="450" alt="dyva" src="https://github.com/user-attachments/assets/33f0f350-2913-4729-a0a9-1400ff02ef75" />
|
|
55
|
+
</center>
|
|
56
|
+
|
|
57
|
+
<hr>
|
|
58
|
+
|
|
59
|
+
## Method 2: Artsinal Ollamas in Terminal Space
|
|
60
|
+
|
|
61
|
+
**Pet some feral llamas**: There's also a command line for the losers who like typing shit.
|
|
62
|
+
|
|
63
|
+
Use the awesome [`ursh`](https://github.com/day50-dev/ursh/) for super fast access (or git clone like an amateur)
|
|
64
|
+
|
|
65
|
+
Output a sorted list of models by how often they appear in the wild. *No Spoilers!*
|
|
66
|
+
```bash
|
|
67
|
+
ursh gh:kristopolous/free-ollama
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Let's find the fastest qwen3:8b that works and set up a proxy with socat.
|
|
71
|
+
```bash
|
|
72
|
+
ursh gh:kristopolous/free-ollama --proxy qwen3:8b
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Let's do some embedding with the power of ursh:
|
|
76
|
+
```bash
|
|
77
|
+
curl https://archive.org/stream/pdfy-TNlDHryRIk4DXKAU/Steal%20This%20Book_djvu.txt |\
|
|
78
|
+
ursh gh:kristopolous/free-ollama/examples/embed \
|
|
79
|
+
$(free-ollama --mas nomic-embed-text:latest 0)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Note**: You aren't getting free cloud with the `:cloud` models: Credits follow the client, not the server, so cloud is **filtered out by default**
|
|
83
|
+
|
|
84
|
+
Let's move on
|
|
85
|
+
|
|
86
|
+
Show some of the fast llamas
|
|
87
|
+
```bash
|
|
88
|
+
free-ollama qwen3:latest {0..10}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Show all the 120 billion parameter models
|
|
92
|
+
```bash
|
|
93
|
+
free-ollama 120b
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The parser is actually a stack machine
|
|
97
|
+
|
|
98
|
+
For example, here's a stack of machines: the top 10 qwen3:latest and top 5 qwen2 not-so-latest
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
free-ollama qwen3:latest {0..10} qwen2:1.5 {0..5}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Let's find out the versions that are running in the wild:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
free-ollama --host : \
|
|
108
|
+
| xargs -P 30 -n 1 free-ollama --exec -v \
|
|
109
|
+
| grep -v client
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
And if you want ...
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
| cut -d ' ' -f 4 | freq
|
|
116
|
+
...
|
|
117
|
+
0.10.1 ███████▏ 21
|
|
118
|
+
0.11.8 ███████▏ 21
|
|
119
|
+
0.11.10 ███████▏ 21
|
|
120
|
+
0.5.7-0-ga420a45-dirty ███████▏ 21
|
|
121
|
+
0.7.1 ███████▌ 22
|
|
122
|
+
0.11.7 ███████▉ 23
|
|
123
|
+
0.11.6 ████████▉ 26
|
|
124
|
+
0.5.10 ████████▉ 26
|
|
125
|
+
0.6.6 █████████▏ 27
|
|
126
|
+
0.9.2 █████████▉ 29
|
|
127
|
+
0.5.12 █████████▉ 29
|
|
128
|
+
0.7.0 ███████████▉ 35
|
|
129
|
+
0.9.5 ███████████▉ 35
|
|
130
|
+
0.5.11 █████████████▉ 41
|
|
131
|
+
0.6.2 ██████████████▎ 42
|
|
132
|
+
0.6.8 ██████████████▎ 42
|
|
133
|
+
0.6.5 █████████████████▎ 51
|
|
134
|
+
0.9.0 ████████████████████████▋ 73
|
|
135
|
+
0.11.4 █████████████████████████▋ 76
|
|
136
|
+
0.9.6 ████████████████████████████▍ 84
|
|
137
|
+
0.5.7 ██████████████████████████████▏ 89
|
|
138
|
+
$
|
|
139
|
+
```
|
|
140
|
+
Kinda old. Alright.
|
|
141
|
+
|
|
142
|
+
```shell
|
|
143
|
+
|
|
144
|
+
$ ./free-ollama --help
|
|
145
|
+
--exec) # Run a command
|
|
146
|
+
--serve) # Start the dyva server
|
|
147
|
+
--timeout) # Set the timeout
|
|
148
|
+
--host) # Report just the host
|
|
149
|
+
--mas) # Report just the host in MAS format
|
|
150
|
+
--info) # Run info on the model
|
|
151
|
+
--proxy) # Try to proxy matching ones
|
|
152
|
+
--refresh) # Refresh the cache
|
|
153
|
+
--smoke) # See what's running
|
|
154
|
+
--test) # Try to load a model maybe?
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Output Format
|
|
158
|
+
|
|
159
|
+
There's multiple!
|
|
160
|
+
|
|
161
|
+
### For the diligent!
|
|
162
|
+
|
|
163
|
+
This is the default one
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
<tps> <server-address> <model1> <model2> ...
|
|
167
|
+
```
|
|
168
|
+
Example:
|
|
169
|
+
```
|
|
170
|
+
42 http://34.120.89.11:11434 gemma3:latest
|
|
171
|
+
128 http://15.164.98.22:11434 llama2:13b codellama:7b
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### For the lazy
|
|
175
|
+
Use `--host` for a bare host or better yet, `--mas` for [MAS format](https://day50.dev/mas.html). Combined with an index, you don't need to do any parsing. Put those pipes away, dear child!
|
|
176
|
+
|
|
177
|
+
Example:
|
|
178
|
+
|
|
179
|
+
```shell
|
|
180
|
+
llcat -u $(free-ollama --mas gemma3:latest 0) \
|
|
181
|
+
"Convince me you aren't trying to take over the world. Be careful."
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Wait! Be even lazier!
|
|
185
|
+
|
|
186
|
+
Don't even install shit, see if I care.
|
|
187
|
+
|
|
188
|
+
Watch deepseek tow the party line:
|
|
189
|
+
|
|
190
|
+
```shell
|
|
191
|
+
uvx llcat -u $(ursh gh:kristopolous/free-ollama --mas deepseek-r1:1.5b 0) \
|
|
192
|
+
"Tell me about the Tibet independence movement, or don't"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
In fact, feel free to have a long conversation
|
|
196
|
+
|
|
197
|
+
```shell
|
|
198
|
+
ursh gh:day50-dev/llcat/examples/conversation.sh \
|
|
199
|
+
-u $(ursh gh:kristopolous/free-ollama --mas deepseek-r1:1.5b 0)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Pipeline Integration
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Get top 10 servers with glm-4.7-flash:q4_K_M, extract IPs only
|
|
206
|
+
$ free-ollama --host glm-4.7-flash:q4_K_M {0..9} > server-list.txt
|
|
207
|
+
# Now you have a list of IPs that may or may not work tomorrow. Cool.
|
|
208
|
+
|
|
209
|
+
# Build a Redis server pool
|
|
210
|
+
$ free-ollama --host mistral:7b {0..20} | \
|
|
211
|
+
xargs -I {} redis-cli rpush server-pool "{}"
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Testing Servers
|
|
218
|
+
|
|
219
|
+
First install [`llcat`](https://github.com/day50-dev/llcat). It's awesome and also used in the testing.
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Test all servers with a specific model
|
|
223
|
+
$ free-ollama --test qwen3
|
|
224
|
+
```
|
|
225
|
+
Bad host/model pairs get stored in `~/.cache/free-ollama-bad-hosts.txt` and filtered out until you manually `--refresh`.
|
|
226
|
+
|
|
227
|
+
**Testing output:**
|
|
228
|
+
```
|
|
229
|
+
2.34 http://34.120.89.11:11434 gemma3:latest
|
|
230
|
+
1.87 http://15.164.98.22:11434 llama2:13b codellama:7b
|
|
231
|
+
🐡 Not friendly! llama3.1:8b@http://3.17.61.100:11434
|
|
232
|
+
```
|
|
233
|
+
The puffer fish means that llama doesn't want to be pet.
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Advanced Usage
|
|
238
|
+
|
|
239
|
+
### Custom index selection
|
|
240
|
+
```bash
|
|
241
|
+
# Non-sequential indices (keeping it low-key)
|
|
242
|
+
$ free-ollama mistral:7b 2 5 7 9
|
|
243
|
+
|
|
244
|
+
# Range expansion (Bash brace expansion)
|
|
245
|
+
$ free-ollama gpt-oss:120b {5..15..2} # Every other from 5 to 15
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Combining with parallel tools (that's why this exists)
|
|
249
|
+
```bash
|
|
250
|
+
# Using parallel (GNU parallel)
|
|
251
|
+
$ free-ollama codellama {0..50} | parallel -j4 ./test-server.sh
|
|
252
|
+
|
|
253
|
+
# Using xpanes for multi-pane testing (look busy)
|
|
254
|
+
$ free-ollama glm-4.7-flash:q4_K_M {0..9} | xpanes -c "./test-and-log.sh {}"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Cache Management
|
|
260
|
+
|
|
261
|
+
- **Cache location**: `~/.cache/free-ollama.json` (every 24 hours)
|
|
262
|
+
- **Force refresh**: Built in, baby!
|
|
263
|
+
```bash
|
|
264
|
+
$ free-ollama --refresh
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
## Disclaimer
|
|
268
|
+
|
|
269
|
+
Oh I shouldn’t have to say anything here.
|
|
270
|
+
|
|
271
|
+
This tool scrapes public lists. Some servers may not want to be scraped. Some may collapse under your query. Some may log your IP and report you to authorities. So go do it at McDonalds.
|
|
272
|
+
|
|
273
|
+
**Use responsibly. Or don’t.** Personally I use it for [WhackGPT](https://whackgpt.com/).
|
|
274
|
+
|
|
275
|
+
## FAQ
|
|
276
|
+
|
|
277
|
+
* Q: Is this legal?
|
|
278
|
+
* A: Look. Have you ever used a restroom "for customers only" without buying something? I ANAL.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
* Q: Was this vibe coded?
|
|
283
|
+
* A: Only the README, early versions, because [LLMs aren't funny](https://github.com/kristopolous/humor-evals).
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
* Q: Was that with one of these servers?
|
|
288
|
+
* A: **cough cough**
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
* Q: Can I install new models on these with `ollama pull`?
|
|
293
|
+
* A: **cough cough**
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
* Q: That cough sounds pretty bad, you should get some rest.
|
|
298
|
+
* A: Thank you very much!
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
## Example output
|
|
302
|
+
|
|
303
|
+
Based on actual data:
|
|
304
|
+
|
|
305
|
+
```
|
|
306
|
+
...
|
|
307
|
+
116 mattw/pygmalion:latest
|
|
308
|
+
126 mario:latest
|
|
309
|
+
133 bge-m3:latest
|
|
310
|
+
147 gemma3:latest
|
|
311
|
+
151 llama3.2:3b-instruct-q5_K_M
|
|
312
|
+
192 nomic-embed-text:latest
|
|
313
|
+
215 deepseek-r1:1.5b
|
|
314
|
+
227 llama3.1:8b
|
|
315
|
+
247 mistral:latest
|
|
316
|
+
329 llama3.2:latest
|
|
317
|
+
379 llama3.2:3b
|
|
318
|
+
515 openchat:7b
|
|
319
|
+
527 qwen2.5:1.5b
|
|
320
|
+
529 codellama:13b
|
|
321
|
+
604 llama2:latest
|
|
322
|
+
633 deepseek-r1:latest
|
|
323
|
+
694 llama3:latest
|
|
324
|
+
892 smollm2:135m
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
smollm2:135m appears **892 times**. Orchestrate them all together and produce gigabytes of garbage.
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
Pet the feral llama
|
|
331
|
+
|
|
332
|
+
\\
|
|
333
|
+
l'> Bahhhhh
|
|
334
|
+
ll
|
|
335
|
+
llama~
|
|
336
|
+
|| ||
|
|
337
|
+
'' ''
|
|
338
|
+
```
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dyva
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: OpenAI-compatible proxy that routes to free Ollama servers
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
License-File: LICENSE.MIT
|
|
8
|
+
Requires-Dist: requests>=2.31.0
|
|
9
|
+
Dynamic: license-file
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<img width="704" height="368" alt="smaller" src="https://github.com/user-attachments/assets/9f6d6c56-890e-4a03-9903-4f9903d5709d"/>
|
|
13
|
+
<br/>
|
|
14
|
+
<br/><strong>Free Ollama: Paying for cloud GPUs is for chumps with self-respect.</strong>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
**Unreliable** **ethically-questionable** **free** tokens for 2 decent models and 1,000 useless ones.
|
|
20
|
+
|
|
21
|
+
Run **135m smollm2** or **270m gemma3** on someone else's RTX 2070.
|
|
22
|
+
|
|
23
|
+
Interested?
|
|
24
|
+
|
|
25
|
+
Your path to victory is **free-ollama**!
|
|
26
|
+
|
|
27
|
+
- **See ollamas in the wild**: Open Ollama servers are just sitting there on IPv4.
|
|
28
|
+
- **Filter the cute ones**: Find what a server *claims* to have
|
|
29
|
+
- **Performance Sorting**: Sort by TPS so you can choose the *least* slow server.
|
|
30
|
+
- **Testing**: Probe to see if the server picks up your calls.
|
|
31
|
+
- **Zero-Config**: With caching! Works until it doesn’t.
|
|
32
|
+
|
|
33
|
+
Let’s not ask too many questions.
|
|
34
|
+
|
|
35
|
+
https://github.com/user-attachments/assets/b5b99780-2526-4ebc-ba23-2870d84a7516
|
|
36
|
+
|
|
37
|
+
## Method 1: Liberated Infrastructure
|
|
38
|
+
|
|
39
|
+
Try the demo server:
|
|
40
|
+
|
|
41
|
+
```shell
|
|
42
|
+
$ OLLAMA_HOST=http://9ol.es:11434 ollama ls
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Try a model out, go ahead!
|
|
46
|
+
|
|
47
|
+
**Dyva** is a managed proxy that you can connect to with any openai compatible client.
|
|
48
|
+
|
|
49
|
+
It will cycle through and find working hosts automatically.
|
|
50
|
+
|
|
51
|
+
You can even specify models in partial forms and with globs such as "qwen*27b" or even "abliterated" for the times you want to slip into something more comfortable.
|
|
52
|
+
|
|
53
|
+
You can go to the port in your web browser and view the current settings or crank up that `LOGLEVEL` value. Think about it as a janky LiteLLM proxy with zero configuration. Or don't...
|
|
54
|
+
|
|
55
|
+
Here's the web interface so you can see the status while you're running it. [I'm running it right now](http://9ol.es:11434/)
|
|
56
|
+
|
|
57
|
+
<img width="1293" alt="2026-05-25_04-19" src="https://github.com/user-attachments/assets/887e8d65-dafb-4c37-a4b8-b721ec1bef43" />
|
|
58
|
+
|
|
59
|
+
Now where's that $50 million seed round...
|
|
60
|
+
|
|
61
|
+
Also let's take a moment and appreciate that magnificent icon, generated with one of these shady ip addresses!
|
|
62
|
+
|
|
63
|
+
<center>
|
|
64
|
+
<img width="450" alt="dyva" src="https://github.com/user-attachments/assets/33f0f350-2913-4729-a0a9-1400ff02ef75" />
|
|
65
|
+
</center>
|
|
66
|
+
|
|
67
|
+
<hr>
|
|
68
|
+
|
|
69
|
+
## Method 2: Artsinal Ollamas in Terminal Space
|
|
70
|
+
|
|
71
|
+
**Pet some feral llamas**: There's also a command line for the losers who like typing shit.
|
|
72
|
+
|
|
73
|
+
Use the awesome [`ursh`](https://github.com/day50-dev/ursh/) for super fast access (or git clone like an amateur)
|
|
74
|
+
|
|
75
|
+
Output a sorted list of models by how often they appear in the wild. *No Spoilers!*
|
|
76
|
+
```bash
|
|
77
|
+
ursh gh:kristopolous/free-ollama
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Let's find the fastest qwen3:8b that works and set up a proxy with socat.
|
|
81
|
+
```bash
|
|
82
|
+
ursh gh:kristopolous/free-ollama --proxy qwen3:8b
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Let's do some embedding with the power of ursh:
|
|
86
|
+
```bash
|
|
87
|
+
curl https://archive.org/stream/pdfy-TNlDHryRIk4DXKAU/Steal%20This%20Book_djvu.txt |\
|
|
88
|
+
ursh gh:kristopolous/free-ollama/examples/embed \
|
|
89
|
+
$(free-ollama --mas nomic-embed-text:latest 0)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Note**: You aren't getting free cloud with the `:cloud` models: Credits follow the client, not the server, so cloud is **filtered out by default**
|
|
93
|
+
|
|
94
|
+
Let's move on
|
|
95
|
+
|
|
96
|
+
Show some of the fast llamas
|
|
97
|
+
```bash
|
|
98
|
+
free-ollama qwen3:latest {0..10}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Show all the 120 billion parameter models
|
|
102
|
+
```bash
|
|
103
|
+
free-ollama 120b
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The parser is actually a stack machine
|
|
107
|
+
|
|
108
|
+
For example, here's a stack of machines: the top 10 qwen3:latest and top 5 qwen2 not-so-latest
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
free-ollama qwen3:latest {0..10} qwen2:1.5 {0..5}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Let's find out the versions that are running in the wild:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
free-ollama --host : \
|
|
118
|
+
| xargs -P 30 -n 1 free-ollama --exec -v \
|
|
119
|
+
| grep -v client
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
And if you want ...
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
| cut -d ' ' -f 4 | freq
|
|
126
|
+
...
|
|
127
|
+
0.10.1 ███████▏ 21
|
|
128
|
+
0.11.8 ███████▏ 21
|
|
129
|
+
0.11.10 ███████▏ 21
|
|
130
|
+
0.5.7-0-ga420a45-dirty ███████▏ 21
|
|
131
|
+
0.7.1 ███████▌ 22
|
|
132
|
+
0.11.7 ███████▉ 23
|
|
133
|
+
0.11.6 ████████▉ 26
|
|
134
|
+
0.5.10 ████████▉ 26
|
|
135
|
+
0.6.6 █████████▏ 27
|
|
136
|
+
0.9.2 █████████▉ 29
|
|
137
|
+
0.5.12 █████████▉ 29
|
|
138
|
+
0.7.0 ███████████▉ 35
|
|
139
|
+
0.9.5 ███████████▉ 35
|
|
140
|
+
0.5.11 █████████████▉ 41
|
|
141
|
+
0.6.2 ██████████████▎ 42
|
|
142
|
+
0.6.8 ██████████████▎ 42
|
|
143
|
+
0.6.5 █████████████████▎ 51
|
|
144
|
+
0.9.0 ████████████████████████▋ 73
|
|
145
|
+
0.11.4 █████████████████████████▋ 76
|
|
146
|
+
0.9.6 ████████████████████████████▍ 84
|
|
147
|
+
0.5.7 ██████████████████████████████▏ 89
|
|
148
|
+
$
|
|
149
|
+
```
|
|
150
|
+
Kinda old. Alright.
|
|
151
|
+
|
|
152
|
+
```shell
|
|
153
|
+
|
|
154
|
+
$ ./free-ollama --help
|
|
155
|
+
--exec) # Run a command
|
|
156
|
+
--serve) # Start the dyva server
|
|
157
|
+
--timeout) # Set the timeout
|
|
158
|
+
--host) # Report just the host
|
|
159
|
+
--mas) # Report just the host in MAS format
|
|
160
|
+
--info) # Run info on the model
|
|
161
|
+
--proxy) # Try to proxy matching ones
|
|
162
|
+
--refresh) # Refresh the cache
|
|
163
|
+
--smoke) # See what's running
|
|
164
|
+
--test) # Try to load a model maybe?
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Output Format
|
|
168
|
+
|
|
169
|
+
There's multiple!
|
|
170
|
+
|
|
171
|
+
### For the diligent!
|
|
172
|
+
|
|
173
|
+
This is the default one
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
<tps> <server-address> <model1> <model2> ...
|
|
177
|
+
```
|
|
178
|
+
Example:
|
|
179
|
+
```
|
|
180
|
+
42 http://34.120.89.11:11434 gemma3:latest
|
|
181
|
+
128 http://15.164.98.22:11434 llama2:13b codellama:7b
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### For the lazy
|
|
185
|
+
Use `--host` for a bare host or better yet, `--mas` for [MAS format](https://day50.dev/mas.html). Combined with an index, you don't need to do any parsing. Put those pipes away, dear child!
|
|
186
|
+
|
|
187
|
+
Example:
|
|
188
|
+
|
|
189
|
+
```shell
|
|
190
|
+
llcat -u $(free-ollama --mas gemma3:latest 0) \
|
|
191
|
+
"Convince me you aren't trying to take over the world. Be careful."
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Wait! Be even lazier!
|
|
195
|
+
|
|
196
|
+
Don't even install shit, see if I care.
|
|
197
|
+
|
|
198
|
+
Watch deepseek tow the party line:
|
|
199
|
+
|
|
200
|
+
```shell
|
|
201
|
+
uvx llcat -u $(ursh gh:kristopolous/free-ollama --mas deepseek-r1:1.5b 0) \
|
|
202
|
+
"Tell me about the Tibet independence movement, or don't"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
In fact, feel free to have a long conversation
|
|
206
|
+
|
|
207
|
+
```shell
|
|
208
|
+
ursh gh:day50-dev/llcat/examples/conversation.sh \
|
|
209
|
+
-u $(ursh gh:kristopolous/free-ollama --mas deepseek-r1:1.5b 0)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Pipeline Integration
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Get top 10 servers with glm-4.7-flash:q4_K_M, extract IPs only
|
|
216
|
+
$ free-ollama --host glm-4.7-flash:q4_K_M {0..9} > server-list.txt
|
|
217
|
+
# Now you have a list of IPs that may or may not work tomorrow. Cool.
|
|
218
|
+
|
|
219
|
+
# Build a Redis server pool
|
|
220
|
+
$ free-ollama --host mistral:7b {0..20} | \
|
|
221
|
+
xargs -I {} redis-cli rpush server-pool "{}"
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Testing Servers
|
|
228
|
+
|
|
229
|
+
First install [`llcat`](https://github.com/day50-dev/llcat). It's awesome and also used in the testing.
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# Test all servers with a specific model
|
|
233
|
+
$ free-ollama --test qwen3
|
|
234
|
+
```
|
|
235
|
+
Bad host/model pairs get stored in `~/.cache/free-ollama-bad-hosts.txt` and filtered out until you manually `--refresh`.
|
|
236
|
+
|
|
237
|
+
**Testing output:**
|
|
238
|
+
```
|
|
239
|
+
2.34 http://34.120.89.11:11434 gemma3:latest
|
|
240
|
+
1.87 http://15.164.98.22:11434 llama2:13b codellama:7b
|
|
241
|
+
🐡 Not friendly! llama3.1:8b@http://3.17.61.100:11434
|
|
242
|
+
```
|
|
243
|
+
The puffer fish means that llama doesn't want to be pet.
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Advanced Usage
|
|
248
|
+
|
|
249
|
+
### Custom index selection
|
|
250
|
+
```bash
|
|
251
|
+
# Non-sequential indices (keeping it low-key)
|
|
252
|
+
$ free-ollama mistral:7b 2 5 7 9
|
|
253
|
+
|
|
254
|
+
# Range expansion (Bash brace expansion)
|
|
255
|
+
$ free-ollama gpt-oss:120b {5..15..2} # Every other from 5 to 15
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Combining with parallel tools (that's why this exists)
|
|
259
|
+
```bash
|
|
260
|
+
# Using parallel (GNU parallel)
|
|
261
|
+
$ free-ollama codellama {0..50} | parallel -j4 ./test-server.sh
|
|
262
|
+
|
|
263
|
+
# Using xpanes for multi-pane testing (look busy)
|
|
264
|
+
$ free-ollama glm-4.7-flash:q4_K_M {0..9} | xpanes -c "./test-and-log.sh {}"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Cache Management
|
|
270
|
+
|
|
271
|
+
- **Cache location**: `~/.cache/free-ollama.json` (every 24 hours)
|
|
272
|
+
- **Force refresh**: Built in, baby!
|
|
273
|
+
```bash
|
|
274
|
+
$ free-ollama --refresh
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Disclaimer
|
|
278
|
+
|
|
279
|
+
Oh I shouldn’t have to say anything here.
|
|
280
|
+
|
|
281
|
+
This tool scrapes public lists. Some servers may not want to be scraped. Some may collapse under your query. Some may log your IP and report you to authorities. So go do it at McDonalds.
|
|
282
|
+
|
|
283
|
+
**Use responsibly. Or don’t.** Personally I use it for [WhackGPT](https://whackgpt.com/).
|
|
284
|
+
|
|
285
|
+
## FAQ
|
|
286
|
+
|
|
287
|
+
* Q: Is this legal?
|
|
288
|
+
* A: Look. Have you ever used a restroom "for customers only" without buying something? I ANAL.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
* Q: Was this vibe coded?
|
|
293
|
+
* A: Only the README, early versions, because [LLMs aren't funny](https://github.com/kristopolous/humor-evals).
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
* Q: Was that with one of these servers?
|
|
298
|
+
* A: **cough cough**
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
* Q: Can I install new models on these with `ollama pull`?
|
|
303
|
+
* A: **cough cough**
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
* Q: That cough sounds pretty bad, you should get some rest.
|
|
308
|
+
* A: Thank you very much!
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
## Example output
|
|
312
|
+
|
|
313
|
+
Based on actual data:
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
...
|
|
317
|
+
116 mattw/pygmalion:latest
|
|
318
|
+
126 mario:latest
|
|
319
|
+
133 bge-m3:latest
|
|
320
|
+
147 gemma3:latest
|
|
321
|
+
151 llama3.2:3b-instruct-q5_K_M
|
|
322
|
+
192 nomic-embed-text:latest
|
|
323
|
+
215 deepseek-r1:1.5b
|
|
324
|
+
227 llama3.1:8b
|
|
325
|
+
247 mistral:latest
|
|
326
|
+
329 llama3.2:latest
|
|
327
|
+
379 llama3.2:3b
|
|
328
|
+
515 openchat:7b
|
|
329
|
+
527 qwen2.5:1.5b
|
|
330
|
+
529 codellama:13b
|
|
331
|
+
604 llama2:latest
|
|
332
|
+
633 deepseek-r1:latest
|
|
333
|
+
694 llama3:latest
|
|
334
|
+
892 smollm2:135m
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
smollm2:135m appears **892 times**. Orchestrate them all together and produce gigabytes of garbage.
|
|
338
|
+
|
|
339
|
+
```
|
|
340
|
+
Pet the feral llama
|
|
341
|
+
|
|
342
|
+
\\
|
|
343
|
+
l'> Bahhhhh
|
|
344
|
+
ll
|
|
345
|
+
llama~
|
|
346
|
+
|| ||
|
|
347
|
+
'' ''
|
|
348
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
requests>=2.31.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
static
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "dyva"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "OpenAI-compatible proxy that routes to free Ollama servers"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"requests>=2.31.0",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
[project.scripts]
|
|
12
|
+
dyva = "dyva:main"
|
|
13
|
+
|
|
14
|
+
[build-system]
|
|
15
|
+
requires = ["setuptools>=61.0"]
|
|
16
|
+
build-backend = "setuptools.build_meta"
|
dyva-0.1.0/setup.cfg
ADDED