Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/picooraclaw/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
# ANTHROPIC_API_KEY=sk-ant-xxx
# OPENAI_API_KEY=sk-xxx
# GEMINI_API_KEY=xxx
# MINIMAX_API_KEY=xxx

# ── Chat Channel ──────────────────────────
# TELEGRAM_BOT_TOKEN=123456:ABC...
Expand Down
29 changes: 28 additions & 1 deletion apps/picooraclaw/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,32 @@ Get a key at [openrouter.ai/keys](https://openrouter.ai/keys) (200K free tokens/

</details>

<details>
<summary><b>MiniMax (high-performance, great value)</b></summary>

```json
{
"agents": {
"defaults": {
"provider": "minimax",
"model": "MiniMax-M2.7"
}
},
"providers": {
"minimax": {
"api_key": "your-key",
"api_base": "https://api.minimax.io/v1"
}
}
}
```

Available models: `MiniMax-M2.7` (default), `MiniMax-M2.7-highspeed` (faster).

Get a key at [platform.minimax.io](https://platform.minimax.io).

</details>

<details>
<summary><b>Zhipu (best for Chinese users)</b></summary>

Expand Down Expand Up @@ -728,6 +754,7 @@ Get a key at [bigmodel.cn](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys
| `gemini` | Gemini models | [aistudio.google.com](https://aistudio.google.com) |
| `groq` | Fast inference + voice transcription | [console.groq.com](https://console.groq.com) |
| `deepseek` | DeepSeek models | [platform.deepseek.com](https://platform.deepseek.com) |
| `minimax` | MiniMax models (M2.7) | [platform.minimax.io](https://platform.minimax.io) |
| `zhipu` | Zhipu/GLM models | [bigmodel.cn](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) |

</details>
Expand Down Expand Up @@ -1001,7 +1028,7 @@ docker compose run --rm picoclaw-agent -m "What is 2+2?"
## Features

- Single static binary (~10MB RAM), runs on RISC-V/ARM64/x86_64
- Ollama, OpenRouter, Anthropic, OpenAI, Gemini, Zhipu, DeepSeek, Groq providers
- Ollama, OpenRouter, Anthropic, OpenAI, Gemini, Zhipu, DeepSeek, Groq, MiniMax providers
- **Default: [Oracle AI Database 26ai Free](https://www.oracle.com/database/free/)** with AI Vector Search (384-dim ONNX embeddings)
- Chat channels: Telegram, Discord, Slack, QQ, DingTalk, LINE, Feishu, WhatsApp
- Scheduled tasks via cron expressions
Expand Down
4 changes: 4 additions & 0 deletions apps/picooraclaw/config/config.example.json
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,10 @@
"ollama": {
"api_key": "",
"api_base": "http://localhost:11434/v1"
},
"minimax": {
"api_key": "",
"api_base": "https://api.minimax.io/v1"
}
},
"tools": {
Expand Down
2 changes: 2 additions & 0 deletions apps/picooraclaw/pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ type ProvidersConfig struct {
Moonshot ProviderConfig `json:"moonshot"`
DeepSeek ProviderConfig `json:"deepseek"`
GitHubCopilot ProviderConfig `json:"github_copilot"`
MiniMax ProviderConfig `json:"minimax"`
}

type ProviderConfig struct {
Expand Down Expand Up @@ -369,6 +370,7 @@ func DefaultConfig() *Config {
Gemini: ProviderConfig{},
Nvidia: ProviderConfig{},
Moonshot: ProviderConfig{},
MiniMax: ProviderConfig{},
},
Gateway: GatewayConfig{
Host: "0.0.0.0",
Expand Down
27 changes: 26 additions & 1 deletion apps/picooraclaw/pkg/providers/http_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func (p *HTTPProvider) Chat(ctx context.Context, messages []Message, tools []Too
// Strip provider prefix from model name (e.g., moonshot/kimi-k2.5 -> kimi-k2.5, groq/openai/gpt-oss-120b -> openai/gpt-oss-120b, ollama/qwen2.5:14b -> qwen2.5:14b)
if idx := strings.Index(model, "/"); idx != -1 {
prefix := model[:idx]
if prefix == "moonshot" || prefix == "nvidia" || prefix == "groq" || prefix == "ollama" {
if prefix == "moonshot" || prefix == "nvidia" || prefix == "groq" || prefix == "ollama" || prefix == "minimax" {
model = model[idx+1:]
}
}
Expand Down Expand Up @@ -86,6 +86,15 @@ func (p *HTTPProvider) Chat(ctx context.Context, messages []Message, tools []Too
// Kimi k2 models only support temperature=1
if strings.Contains(lowerModel, "kimi") && strings.Contains(lowerModel, "k2") {
requestBody["temperature"] = 1.0
} else if strings.Contains(lowerModel, "MiniMax") || strings.Contains(lowerModel, "minimax") {
// MiniMax models require temperature in (0.0, 1.0]; 0 is not allowed
if temperature <= 0 {
requestBody["temperature"] = 1.0
} else if temperature > 1.0 {
requestBody["temperature"] = 1.0
} else {
requestBody["temperature"] = temperature
}
} else {
requestBody["temperature"] = temperature
}
Expand Down Expand Up @@ -467,6 +476,15 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) {
model = "deepseek-chat"
}
}
case "minimax", "MiniMax":
if cfg.Providers.MiniMax.APIKey != "" {
apiKey = cfg.Providers.MiniMax.APIKey
apiBase = cfg.Providers.MiniMax.APIBase
if apiBase == "" {
apiBase = "https://api.minimax.io/v1"
}
proxy = cfg.Providers.MiniMax.Proxy
}
case "github_copilot", "copilot":
if cfg.Providers.GitHubCopilot.APIBase != "" {
apiBase = cfg.Providers.GitHubCopilot.APIBase
Expand Down Expand Up @@ -544,6 +562,13 @@ func CreateProvider(cfg *config.Config) (LLMProvider, error) {
if apiBase == "" {
apiBase = "https://integrate.api.nvidia.com/v1"
}
case (strings.Contains(lowerModel, "minimax") || strings.Contains(lowerModel, "MiniMax") || strings.HasPrefix(model, "minimax/")) && cfg.Providers.MiniMax.APIKey != "":
apiKey = cfg.Providers.MiniMax.APIKey
apiBase = cfg.Providers.MiniMax.APIBase
proxy = cfg.Providers.MiniMax.Proxy
if apiBase == "" {
apiBase = "https://api.minimax.io/v1"
}
case (strings.Contains(lowerModel, "ollama") || strings.HasPrefix(model, "ollama/")) && cfg.Providers.Ollama.APIBase != "":
apiKey = cfg.Providers.Ollama.APIKey
if apiKey == "" {
Expand Down
Loading