fusefable 0.3.0__tar.gz → 0.3.1__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.
- {fusefable-0.3.0 → fusefable-0.3.1}/PKG-INFO +23 -3
- {fusefable-0.3.0 → fusefable-0.3.1}/README.md +22 -2
- fusefable-0.3.1/fusefable/__init__.py +1 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/wizard.py +2 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/PKG-INFO +23 -3
- {fusefable-0.3.0 → fusefable-0.3.1}/pyproject.toml +1 -1
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_wizard.py +6 -0
- fusefable-0.3.0/fusefable/__init__.py +0 -1
- {fusefable-0.3.0 → fusefable-0.3.1}/LICENSE +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/cache.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/cli.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/client.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/compressor.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/config.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/core.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/cost.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/ensemble.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/fanout.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/fusion.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/judge.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/mcp_server.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/models.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/__init__.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/anthropic.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/base.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/factory.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/google.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/openai_compat.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/routing.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/SOURCES.txt +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/dependency_links.txt +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/entry_points.txt +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/requires.txt +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/top_level.txt +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/setup.cfg +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_cache.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_cli.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_client.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_compressor.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_config.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_core.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_cost.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_ensemble.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_fanout.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_fusion.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_judge.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_mcp_server.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_models.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_native_providers.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_openai_compat.py +0 -0
- {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_routing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fusefable
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Fuse multiple AI models and judge the best answer for coding
|
|
5
5
|
Author: proultrax9
|
|
6
6
|
License: MIT
|
|
@@ -59,9 +59,9 @@ fusefable config
|
|
|
59
59
|
```
|
|
60
60
|
- Choose **AI Gateway** → one key for everything, then it asks "how many models?" and
|
|
61
61
|
prompts for each one.
|
|
62
|
-
- Known gateways (base URL auto-filled): `openrouter`, `groq`, `together`,
|
|
62
|
+
- Known gateways/providers (base URL auto-filled): `openrouter`, `groq`, `together`,
|
|
63
63
|
`fireworks`, `deepinfra`, `novita`, `hyperbolic`, `aimlapi`, `portkey`,
|
|
64
|
-
`deepseek`, `openai` — any other works too, just type its base URL.
|
|
64
|
+
`deepseek`, `openai`, `minimax`, `mimo` — any other works too, just type its base URL.
|
|
65
65
|
- Or **Single providers** → it asks how many, then the **API kind** of each:
|
|
66
66
|
- `openai_compat` — any OpenAI-compatible endpoint (you provide the base URL)
|
|
67
67
|
- `anthropic` — Anthropic native (`/v1/messages`, base URL auto-filled)
|
|
@@ -142,6 +142,26 @@ Exposes a tool `fuse_ask(question, models?, cheap?)` for any MCP client.
|
|
|
142
142
|
}
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
### Hermes Agent (Nous Research)
|
|
146
|
+
[Hermes](https://hermes-agent.nousresearch.com/) is an MCP client (usable over Telegram,
|
|
147
|
+
Discord, etc.). Add Fuse Fable as a stdio MCP server in your Hermes config (`mcp_servers`):
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"mcp_servers": {
|
|
151
|
+
"fusefable": {
|
|
152
|
+
"transport": "stdio",
|
|
153
|
+
"command": "fusefable",
|
|
154
|
+
"args": ["mcp"],
|
|
155
|
+
"env": { "OPENROUTER_API_KEY": "sk-..." }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
Then run `hermes mcp install` (or restart the gateway) to pick it up. See the
|
|
161
|
+
[Hermes MCP docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp).
|
|
162
|
+
The `fuse_ask` tool becomes available to your Hermes agent — handy when driving it
|
|
163
|
+
remotely (e.g. via Telegram) against external providers like MiniMax or MiMo.
|
|
164
|
+
|
|
145
165
|
> Requires `pip install "fusefable[mcp]"` and a completed `fusefable config`.
|
|
146
166
|
> If `fusefable` isn't on the app's PATH, use a full path such as `python -m fusefable.cli`.
|
|
147
167
|
|
|
@@ -31,9 +31,9 @@ fusefable config
|
|
|
31
31
|
```
|
|
32
32
|
- Choose **AI Gateway** → one key for everything, then it asks "how many models?" and
|
|
33
33
|
prompts for each one.
|
|
34
|
-
- Known gateways (base URL auto-filled): `openrouter`, `groq`, `together`,
|
|
34
|
+
- Known gateways/providers (base URL auto-filled): `openrouter`, `groq`, `together`,
|
|
35
35
|
`fireworks`, `deepinfra`, `novita`, `hyperbolic`, `aimlapi`, `portkey`,
|
|
36
|
-
`deepseek`, `openai` — any other works too, just type its base URL.
|
|
36
|
+
`deepseek`, `openai`, `minimax`, `mimo` — any other works too, just type its base URL.
|
|
37
37
|
- Or **Single providers** → it asks how many, then the **API kind** of each:
|
|
38
38
|
- `openai_compat` — any OpenAI-compatible endpoint (you provide the base URL)
|
|
39
39
|
- `anthropic` — Anthropic native (`/v1/messages`, base URL auto-filled)
|
|
@@ -114,6 +114,26 @@ Exposes a tool `fuse_ask(question, models?, cheap?)` for any MCP client.
|
|
|
114
114
|
}
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
+
### Hermes Agent (Nous Research)
|
|
118
|
+
[Hermes](https://hermes-agent.nousresearch.com/) is an MCP client (usable over Telegram,
|
|
119
|
+
Discord, etc.). Add Fuse Fable as a stdio MCP server in your Hermes config (`mcp_servers`):
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"mcp_servers": {
|
|
123
|
+
"fusefable": {
|
|
124
|
+
"transport": "stdio",
|
|
125
|
+
"command": "fusefable",
|
|
126
|
+
"args": ["mcp"],
|
|
127
|
+
"env": { "OPENROUTER_API_KEY": "sk-..." }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
Then run `hermes mcp install` (or restart the gateway) to pick it up. See the
|
|
133
|
+
[Hermes MCP docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp).
|
|
134
|
+
The `fuse_ask` tool becomes available to your Hermes agent — handy when driving it
|
|
135
|
+
remotely (e.g. via Telegram) against external providers like MiniMax or MiMo.
|
|
136
|
+
|
|
117
137
|
> Requires `pip install "fusefable[mcp]"` and a completed `fusefable config`.
|
|
118
138
|
> If `fusefable` isn't on the app's PATH, use a full path such as `python -m fusefable.cli`.
|
|
119
139
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.1"
|
|
@@ -16,6 +16,8 @@ KNOWN_GATEWAYS = {
|
|
|
16
16
|
"portkey": "https://api.portkey.ai/v1",
|
|
17
17
|
"deepseek": "https://api.deepseek.com/v1",
|
|
18
18
|
"openai": "https://api.openai.com/v1",
|
|
19
|
+
"minimax": "https://api.minimax.io/v1", # OpenAI-compatible
|
|
20
|
+
"mimo": "https://api.xiaomimimo.com/v1", # Xiaomi MiMo (OpenAI-compatible)
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fusefable
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Fuse multiple AI models and judge the best answer for coding
|
|
5
5
|
Author: proultrax9
|
|
6
6
|
License: MIT
|
|
@@ -59,9 +59,9 @@ fusefable config
|
|
|
59
59
|
```
|
|
60
60
|
- Choose **AI Gateway** → one key for everything, then it asks "how many models?" and
|
|
61
61
|
prompts for each one.
|
|
62
|
-
- Known gateways (base URL auto-filled): `openrouter`, `groq`, `together`,
|
|
62
|
+
- Known gateways/providers (base URL auto-filled): `openrouter`, `groq`, `together`,
|
|
63
63
|
`fireworks`, `deepinfra`, `novita`, `hyperbolic`, `aimlapi`, `portkey`,
|
|
64
|
-
`deepseek`, `openai` — any other works too, just type its base URL.
|
|
64
|
+
`deepseek`, `openai`, `minimax`, `mimo` — any other works too, just type its base URL.
|
|
65
65
|
- Or **Single providers** → it asks how many, then the **API kind** of each:
|
|
66
66
|
- `openai_compat` — any OpenAI-compatible endpoint (you provide the base URL)
|
|
67
67
|
- `anthropic` — Anthropic native (`/v1/messages`, base URL auto-filled)
|
|
@@ -142,6 +142,26 @@ Exposes a tool `fuse_ask(question, models?, cheap?)` for any MCP client.
|
|
|
142
142
|
}
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
### Hermes Agent (Nous Research)
|
|
146
|
+
[Hermes](https://hermes-agent.nousresearch.com/) is an MCP client (usable over Telegram,
|
|
147
|
+
Discord, etc.). Add Fuse Fable as a stdio MCP server in your Hermes config (`mcp_servers`):
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"mcp_servers": {
|
|
151
|
+
"fusefable": {
|
|
152
|
+
"transport": "stdio",
|
|
153
|
+
"command": "fusefable",
|
|
154
|
+
"args": ["mcp"],
|
|
155
|
+
"env": { "OPENROUTER_API_KEY": "sk-..." }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
Then run `hermes mcp install` (or restart the gateway) to pick it up. See the
|
|
161
|
+
[Hermes MCP docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp).
|
|
162
|
+
The `fuse_ask` tool becomes available to your Hermes agent — handy when driving it
|
|
163
|
+
remotely (e.g. via Telegram) against external providers like MiniMax or MiMo.
|
|
164
|
+
|
|
145
165
|
> Requires `pip install "fusefable[mcp]"` and a completed `fusefable config`.
|
|
146
166
|
> If `fusefable` isn't on the app's PATH, use a full path such as `python -m fusefable.cli`.
|
|
147
167
|
|
|
@@ -44,6 +44,12 @@ def test_run_wizard_gateway_autofills_other_known_gateway():
|
|
|
44
44
|
assert cfg.gateway_base_url == "https://api.groq.com/openai/v1"
|
|
45
45
|
|
|
46
46
|
|
|
47
|
+
def test_minimax_mimo_in_known_gateways():
|
|
48
|
+
from fusefable.wizard import KNOWN_GATEWAYS
|
|
49
|
+
assert KNOWN_GATEWAYS["minimax"] == "https://api.minimax.io/v1"
|
|
50
|
+
assert KNOWN_GATEWAYS["mimo"] == "https://api.xiaomimimo.com/v1"
|
|
51
|
+
|
|
52
|
+
|
|
47
53
|
def test_run_wizard_enables_compression_when_yes():
|
|
48
54
|
answers = _scripted([
|
|
49
55
|
"1", "openrouter", "OR_KEY", "1", "m1", "judge",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|