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.
Files changed (51) hide show
  1. {fusefable-0.3.0 → fusefable-0.3.1}/PKG-INFO +23 -3
  2. {fusefable-0.3.0 → fusefable-0.3.1}/README.md +22 -2
  3. fusefable-0.3.1/fusefable/__init__.py +1 -0
  4. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/wizard.py +2 -0
  5. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/PKG-INFO +23 -3
  6. {fusefable-0.3.0 → fusefable-0.3.1}/pyproject.toml +1 -1
  7. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_wizard.py +6 -0
  8. fusefable-0.3.0/fusefable/__init__.py +0 -1
  9. {fusefable-0.3.0 → fusefable-0.3.1}/LICENSE +0 -0
  10. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/cache.py +0 -0
  11. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/cli.py +0 -0
  12. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/client.py +0 -0
  13. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/compressor.py +0 -0
  14. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/config.py +0 -0
  15. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/core.py +0 -0
  16. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/cost.py +0 -0
  17. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/ensemble.py +0 -0
  18. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/fanout.py +0 -0
  19. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/fusion.py +0 -0
  20. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/judge.py +0 -0
  21. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/mcp_server.py +0 -0
  22. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/models.py +0 -0
  23. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/__init__.py +0 -0
  24. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/anthropic.py +0 -0
  25. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/base.py +0 -0
  26. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/factory.py +0 -0
  27. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/google.py +0 -0
  28. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/providers/openai_compat.py +0 -0
  29. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable/routing.py +0 -0
  30. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/SOURCES.txt +0 -0
  31. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/dependency_links.txt +0 -0
  32. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/entry_points.txt +0 -0
  33. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/requires.txt +0 -0
  34. {fusefable-0.3.0 → fusefable-0.3.1}/fusefable.egg-info/top_level.txt +0 -0
  35. {fusefable-0.3.0 → fusefable-0.3.1}/setup.cfg +0 -0
  36. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_cache.py +0 -0
  37. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_cli.py +0 -0
  38. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_client.py +0 -0
  39. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_compressor.py +0 -0
  40. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_config.py +0 -0
  41. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_core.py +0 -0
  42. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_cost.py +0 -0
  43. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_ensemble.py +0 -0
  44. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_fanout.py +0 -0
  45. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_fusion.py +0 -0
  46. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_judge.py +0 -0
  47. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_mcp_server.py +0 -0
  48. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_models.py +0 -0
  49. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_native_providers.py +0 -0
  50. {fusefable-0.3.0 → fusefable-0.3.1}/tests/test_openai_compat.py +0 -0
  51. {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.0
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.0
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
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fusefable"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "Fuse multiple AI models and judge the best answer for coding"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -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