* feat: add MiniMax AI as LLM platform adaptor Original implementation by octo-patch in PR #318. This commit includes comprehensive improvements and documentation. Code Improvements: - Fix API key validation to properly check JWT format (eyJ prefix) - Add specific exception handling for timeout and connection errors - Remove unused variable in upload method Dependencies: - Add MiniMax to [all-llms] extra group in pyproject.toml Tests: - Remove duplicate setUp method in integration test class - Add 4 new test methods: * test_package_excludes_backup_files * test_upload_success_mocked (with OpenAI mocking) * test_upload_network_error * test_upload_connection_error * test_validate_api_key_jwt_format - Update test_validate_api_key_valid to use JWT format keys - Fix test assertions for error message matching Documentation: - Create comprehensive MINIMAX_INTEGRATION.md guide (380+ lines) - Update MULTI_LLM_SUPPORT.md with MiniMax platform entry - Update 01-installation.md extras table - Update INTEGRATIONS.md AI platforms table - Update AGENTS.md adaptor import pattern example - Fix README.md platform count from 4 to 5 All tests pass (33 passed, 3 skipped) Lint checks pass Co-authored-by: octo-patch <octo-patch@users.noreply.github.com> * fix: improve MiniMax adaptor — typed exceptions, key validation, tests, docs - Remove invalid "minimax" self-reference from all-llms dependency group - Use typed OpenAI exceptions (APITimeoutError, APIConnectionError) instead of string-matching on generic Exception - Replace incorrect JWT assumption in validate_api_key with length check - Use DEFAULT_API_ENDPOINT constant instead of hardcoded URLs (3 sites) - Add Path() cast for output_path before .is_dir() call - Add sys.modules mock to test_enhance_missing_library - Add mocked test_enhance_success with backup/content verification - Update test assertions for new exception types and key validation - Add MiniMax to __init__.py docstrings (module, get_adaptor, list_platforms) - Add MiniMax sections to MULTI_LLM_SUPPORT.md (install, format, API key, workflow example, export-to-all) Follows up on PR #318 by @octo-patch (feat: add MiniMax AI as LLM platform adaptor). Co-Authored-By: Octopus <octo-patch@users.noreply.github.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: octo-patch <octo-patch@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,7 @@ Upload documentation as custom skills to AI chat platforms:
|
||||
| **[Claude](CLAUDE.md)** | Anthropic | ZIP + YAML | Claude.ai Projects | [Setup →](CLAUDE.md) |
|
||||
| **[Gemini](GEMINI_INTEGRATION.md)** | Google | tar.gz | Gemini AI | [Setup →](GEMINI_INTEGRATION.md) |
|
||||
| **[ChatGPT](OPENAI_INTEGRATION.md)** | OpenAI | ZIP + Vector Store | GPT Actions | [Setup →](OPENAI_INTEGRATION.md) |
|
||||
| **[MiniMax](MINIMAX_INTEGRATION.md)** | MiniMax | ZIP | MiniMax AI Platform | [Setup →](MINIMAX_INTEGRATION.md) |
|
||||
|
||||
**Quick Example:**
|
||||
```bash
|
||||
@@ -139,7 +140,7 @@ skill-seekers upload output/vue-claude.zip --target claude
|
||||
| **AI coding (flow-based)** | Windsurf | Unique flow paradigm, Codeium AI | 5 min |
|
||||
| **AI coding (VS Code ext)** | Cline | Claude in VS Code, MCP integration | 10 min |
|
||||
| **AI coding (any IDE)** | Continue.dev | Works everywhere, open-source | 5 min |
|
||||
| **Chat with documentation** | Claude/Gemini/ChatGPT | Direct upload as custom skill | 3 min |
|
||||
| **Chat with documentation** | Claude/Gemini/ChatGPT/MiniMax | Direct upload as custom skill | 3 min |
|
||||
|
||||
### By Technical Requirements
|
||||
|
||||
|
||||
391
docs/integrations/MINIMAX_INTEGRATION.md
Normal file
391
docs/integrations/MINIMAX_INTEGRATION.md
Normal file
@@ -0,0 +1,391 @@
|
||||
# MiniMax AI Integration Guide
|
||||
|
||||
Complete guide for using Skill Seekers with MiniMax AI platform.
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
**MiniMax AI** is a Chinese AI company offering OpenAI-compatible APIs with their M2.7 model. Skill Seekers packages documentation for use with MiniMax's platform.
|
||||
|
||||
### Key Features
|
||||
|
||||
- **OpenAI-Compatible API**: Uses standard OpenAI client library
|
||||
- **MiniMax-M2.7 Model**: Powerful LLM for enhancement and chat
|
||||
- **Simple ZIP Format**: Easy packaging with system instructions
|
||||
- **Knowledge Files**: Reference documentation included in package
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### 1. Get MiniMax API Key
|
||||
|
||||
1. Visit [MiniMax Platform](https://platform.minimaxi.com/)
|
||||
2. Create an account and verify
|
||||
3. Navigate to API Keys section
|
||||
4. Generate a new API key
|
||||
5. Copy the key (starts with `eyJ` - JWT format)
|
||||
|
||||
### 2. Install Dependencies
|
||||
|
||||
```bash
|
||||
# Install MiniMax support (includes openai library)
|
||||
pip install skill-seekers[minimax]
|
||||
|
||||
# Or install all LLM platforms
|
||||
pip install skill-seekers[all-llms]
|
||||
```
|
||||
|
||||
### 3. Configure Environment
|
||||
|
||||
```bash
|
||||
export MINIMAX_API_KEY=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
```
|
||||
|
||||
Add to your `~/.bashrc`, `~/.zshrc`, or `.env` file for persistence.
|
||||
|
||||
---
|
||||
|
||||
## Complete Workflow
|
||||
|
||||
### Step 1: Scrape Documentation
|
||||
|
||||
```bash
|
||||
# Scrape documentation website
|
||||
skill-seekers scrape --config configs/react.json
|
||||
|
||||
# Or use quick preset
|
||||
skill-seekers create https://docs.python.org/3/ --preset quick
|
||||
```
|
||||
|
||||
### Step 2: Enhance with MiniMax-M2.7
|
||||
|
||||
```bash
|
||||
# Enhance SKILL.md using MiniMax AI
|
||||
skill-seekers enhance output/react/ --target minimax
|
||||
|
||||
# With custom model (if available)
|
||||
skill-seekers enhance output/react/ --target minimax --model MiniMax-M2.7
|
||||
```
|
||||
|
||||
This step:
|
||||
- Reads reference documentation
|
||||
- Generates enhanced system instructions
|
||||
- Creates backup of original SKILL.md
|
||||
- Uses MiniMax-M2.7 for AI enhancement
|
||||
|
||||
### Step 3: Package for MiniMax
|
||||
|
||||
```bash
|
||||
# Package as MiniMax-compatible ZIP
|
||||
skill-seekers package output/react/ --target minimax
|
||||
|
||||
# Custom output path
|
||||
skill-seekers package output/react/ --target minimax --output my-skill.zip
|
||||
```
|
||||
|
||||
**Output structure:**
|
||||
```
|
||||
react-minimax.zip
|
||||
├── system_instructions.txt # Main instructions (from SKILL.md)
|
||||
├── knowledge_files/ # Reference documentation
|
||||
│ ├── guide.md
|
||||
│ ├── api-reference.md
|
||||
│ └── examples.md
|
||||
└── minimax_metadata.json # Skill metadata
|
||||
```
|
||||
|
||||
### Step 4: Validate Package
|
||||
|
||||
```bash
|
||||
# Validate package with MiniMax API
|
||||
skill-seekers upload react-minimax.zip --target minimax
|
||||
```
|
||||
|
||||
This validates:
|
||||
- Package structure
|
||||
- API connectivity
|
||||
- System instructions format
|
||||
|
||||
**Note:** MiniMax doesn't have persistent skill storage like Claude. The upload validates your package but you'll use the ZIP file directly with MiniMax's API.
|
||||
|
||||
---
|
||||
|
||||
## Using Your Skill
|
||||
|
||||
### Direct API Usage
|
||||
|
||||
```python
|
||||
from openai import OpenAI
|
||||
import zipfile
|
||||
import json
|
||||
|
||||
# Extract package
|
||||
with zipfile.ZipFile('react-minimax.zip', 'r') as zf:
|
||||
with zf.open('system_instructions.txt') as f:
|
||||
system_instructions = f.read().decode('utf-8')
|
||||
|
||||
# Load metadata
|
||||
with zf.open('minimax_metadata.json') as f:
|
||||
metadata = json.load(f)
|
||||
|
||||
# Initialize MiniMax client (OpenAI-compatible)
|
||||
client = OpenAI(
|
||||
api_key="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
base_url="https://api.minimax.io/v1"
|
||||
)
|
||||
|
||||
# Use with chat completions
|
||||
response = client.chat.completions.create(
|
||||
model="MiniMax-M2.7",
|
||||
messages=[
|
||||
{"role": "system", "content": system_instructions},
|
||||
{"role": "user", "content": "How do I create a React component?"}
|
||||
],
|
||||
temperature=0.3,
|
||||
max_tokens=2000
|
||||
)
|
||||
|
||||
print(response.choices[0].message.content)
|
||||
```
|
||||
|
||||
### With Knowledge Files
|
||||
|
||||
```python
|
||||
import zipfile
|
||||
from pathlib import Path
|
||||
|
||||
# Extract knowledge files
|
||||
with zipfile.ZipFile('react-minimax.zip', 'r') as zf:
|
||||
zf.extractall('extracted_skill')
|
||||
|
||||
# Read all knowledge files
|
||||
knowledge_dir = Path('extracted_skill/knowledge_files')
|
||||
knowledge_files = []
|
||||
for md_file in knowledge_dir.glob('*.md'):
|
||||
knowledge_files.append({
|
||||
'name': md_file.name,
|
||||
'content': md_file.read_text()
|
||||
})
|
||||
|
||||
# Include in context (truncate if too long)
|
||||
context = "\n\n".join([f"## {kf['name']}\n{kf['content'][:5000]}"
|
||||
for kf in knowledge_files[:5]])
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model="MiniMax-M2.7",
|
||||
messages=[
|
||||
{"role": "system", "content": system_instructions},
|
||||
{"role": "user", "content": f"Context: {context}\n\nQuestion: What are React hooks?"}
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API Reference
|
||||
|
||||
### SkillAdaptor Methods
|
||||
|
||||
```python
|
||||
from skill_seekers.cli.adaptors import get_adaptor
|
||||
|
||||
# Get MiniMax adaptor
|
||||
adaptor = get_adaptor('minimax')
|
||||
|
||||
# Format SKILL.md as system instructions
|
||||
instructions = adaptor.format_skill_md(skill_dir, metadata)
|
||||
|
||||
# Package skill
|
||||
package_path = adaptor.package(skill_dir, output_path)
|
||||
|
||||
# Validate package with MiniMax API
|
||||
result = adaptor.upload(package_path, api_key)
|
||||
print(result['message']) # Validation result
|
||||
|
||||
# Enhance SKILL.md
|
||||
success = adaptor.enhance(skill_dir, api_key)
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
|
||||
| Variable | Description | Required |
|
||||
|----------|-------------|----------|
|
||||
| `MINIMAX_API_KEY` | Your MiniMax API key (JWT format) | Yes |
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Invalid API Key Format
|
||||
|
||||
**Error:** `Invalid API key format`
|
||||
|
||||
**Solution:** MiniMax API keys use JWT format starting with `eyJ`. Check:
|
||||
```bash
|
||||
# Should start with 'eyJ'
|
||||
echo $MINIMAX_API_KEY | head -c 10
|
||||
# Output: eyJhbGciOi
|
||||
```
|
||||
|
||||
### OpenAI Library Not Installed
|
||||
|
||||
**Error:** `ModuleNotFoundError: No module named 'openai'`
|
||||
|
||||
**Solution:**
|
||||
```bash
|
||||
pip install skill-seekers[minimax]
|
||||
# or
|
||||
pip install openai>=1.0.0
|
||||
```
|
||||
|
||||
### Upload Timeout
|
||||
|
||||
**Error:** `Upload timed out`
|
||||
|
||||
**Solution:**
|
||||
- Check internet connection
|
||||
- Try again (temporary network issue)
|
||||
- Verify API key is correct
|
||||
- Check MiniMax platform status
|
||||
|
||||
### Connection Error
|
||||
|
||||
**Error:** `Connection error`
|
||||
|
||||
**Solution:**
|
||||
- Verify internet connectivity
|
||||
- Check if MiniMax API endpoint is accessible:
|
||||
```bash
|
||||
curl https://api.minimax.io/v1/models
|
||||
```
|
||||
- Try with VPN if in restricted region
|
||||
|
||||
### Package Validation Failed
|
||||
|
||||
**Error:** `Invalid package: system_instructions.txt not found`
|
||||
|
||||
**Solution:**
|
||||
- Ensure SKILL.md exists before packaging
|
||||
- Check package contents:
|
||||
```bash
|
||||
unzip -l react-minimax.zip
|
||||
```
|
||||
- Re-package the skill
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
### 1. Keep References Organized
|
||||
|
||||
Structure your documentation:
|
||||
```
|
||||
output/react/
|
||||
├── SKILL.md # Main instructions
|
||||
├── references/
|
||||
│ ├── 01-getting-started.md
|
||||
│ ├── 02-components.md
|
||||
│ ├── 03-hooks.md
|
||||
│ └── 04-api-reference.md
|
||||
└── assets/
|
||||
└── diagrams/
|
||||
```
|
||||
|
||||
### 2. Use Enhancement
|
||||
|
||||
Always enhance before packaging:
|
||||
```bash
|
||||
# Enhancement improves system instructions quality
|
||||
skill-seekers enhance output/react/ --target minimax
|
||||
```
|
||||
|
||||
### 3. Test Before Deployment
|
||||
|
||||
```bash
|
||||
# Validate package
|
||||
skill-seekers upload react-minimax.zip --target minimax
|
||||
|
||||
# If successful, package is ready to use
|
||||
```
|
||||
|
||||
### 4. Version Your Skills
|
||||
|
||||
```bash
|
||||
# Include version in output name
|
||||
skill-seekers package output/react/ --target minimax --output react-v2.0-minimax.zip
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Comparison with Other Platforms
|
||||
|
||||
| Feature | MiniMax | Claude | Gemini | OpenAI |
|
||||
|---------|---------|--------|--------|--------|
|
||||
| **Format** | ZIP | ZIP | tar.gz | ZIP |
|
||||
| **Upload** | Validation | Full API | Full API | Full API |
|
||||
| **Enhancement** | MiniMax-M2.7 | Claude Sonnet | Gemini 2.0 | GPT-4o |
|
||||
| **API Type** | OpenAI-compatible | Anthropic | Google | OpenAI |
|
||||
| **Key Format** | JWT (eyJ...) | sk-ant... | AIza... | sk-... |
|
||||
| **Knowledge Files** | Included in ZIP | Included | Included | Vector Store |
|
||||
|
||||
---
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
### Custom Enhancement Prompt
|
||||
|
||||
Programmatically customize enhancement:
|
||||
|
||||
```python
|
||||
from skill_seekers.cli.adaptors import get_adaptor
|
||||
from pathlib import Path
|
||||
|
||||
adaptor = get_adaptor('minimax')
|
||||
skill_dir = Path('output/react')
|
||||
|
||||
# Build custom prompt
|
||||
references = adaptor._read_reference_files(skill_dir / 'references')
|
||||
prompt = adaptor._build_enhancement_prompt(
|
||||
skill_name='React',
|
||||
references=references,
|
||||
current_skill_md=(skill_dir / 'SKILL.md').read_text()
|
||||
)
|
||||
|
||||
# Customize prompt
|
||||
prompt += "\n\nADDITIONAL FOCUS: Emphasize React 18 concurrent features."
|
||||
|
||||
# Use with your own API call
|
||||
```
|
||||
|
||||
### Batch Processing
|
||||
|
||||
```bash
|
||||
# Process multiple frameworks
|
||||
for framework in react vue angular; do
|
||||
skill-seekers scrape --config configs/${framework}.json
|
||||
skill-seekers enhance output/${framework}/ --target minimax
|
||||
skill-seekers package output/${framework}/ --target minimax --output ${framework}-minimax.zip
|
||||
done
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Resources
|
||||
|
||||
- [MiniMax Platform](https://platform.minimaxi.com/)
|
||||
- [MiniMax API Documentation](https://platform.minimaxi.com/document)
|
||||
- [OpenAI Python Client](https://github.com/openai/openai-python)
|
||||
- [Multi-LLM Support Guide](MULTI_LLM_SUPPORT.md)
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Get your [MiniMax API key](https://platform.minimaxi.com/)
|
||||
2. Install dependencies: `pip install skill-seekers[minimax]`
|
||||
3. Try the [Quick Start example](#complete-workflow)
|
||||
4. Explore [advanced usage](#advanced-usage) patterns
|
||||
|
||||
For help, see [Troubleshooting](#troubleshooting) or open an issue on GitHub.
|
||||
@@ -9,6 +9,7 @@ Skill Seekers supports multiple LLM platforms through a clean adaptor system. Th
|
||||
| **Claude AI** | ✅ Full Support | ZIP + YAML | ✅ Automatic | ✅ Yes | ANTHROPIC_API_KEY |
|
||||
| **Google Gemini** | ✅ Full Support | tar.gz | ✅ Automatic | ✅ Yes | GOOGLE_API_KEY |
|
||||
| **OpenAI ChatGPT** | ✅ Full Support | ZIP + Vector Store | ✅ Automatic | ✅ Yes | OPENAI_API_KEY |
|
||||
| **MiniMax AI** | ✅ Full Support | ZIP | ✅ Validation | ✅ Yes | MINIMAX_API_KEY |
|
||||
| **Generic Markdown** | ✅ Export Only | ZIP | ❌ Manual | ❌ No | None |
|
||||
|
||||
## Quick Start
|
||||
@@ -108,6 +109,9 @@ pip install skill-seekers[gemini]
|
||||
# OpenAI ChatGPT support
|
||||
pip install skill-seekers[openai]
|
||||
|
||||
# MiniMax AI support
|
||||
pip install skill-seekers[minimax]
|
||||
|
||||
# All LLM platforms
|
||||
pip install skill-seekers[all-llms]
|
||||
|
||||
@@ -150,6 +154,13 @@ pip install -e .[all-llms]
|
||||
- API: Assistants API + Vector Store
|
||||
- Enhancement: GPT-4o
|
||||
|
||||
**MiniMax AI:**
|
||||
- Format: ZIP archive
|
||||
- SKILL.md -> `system_instructions.txt` (plain text, no frontmatter)
|
||||
- Structure: `system_instructions.txt`, `knowledge_files/`, `minimax_metadata.json`
|
||||
- API: OpenAI-compatible chat completions
|
||||
- Enhancement: MiniMax-M2.7
|
||||
|
||||
**Generic Markdown:**
|
||||
- Format: ZIP archive
|
||||
- Structure: `README.md`, `references/`, `DOCUMENTATION.md` (combined)
|
||||
@@ -174,6 +185,11 @@ export GOOGLE_API_KEY=AIzaSy...
|
||||
export OPENAI_API_KEY=sk-proj-...
|
||||
```
|
||||
|
||||
**MiniMax AI:**
|
||||
```bash
|
||||
export MINIMAX_API_KEY=your-key
|
||||
```
|
||||
|
||||
## Complete Workflow Examples
|
||||
|
||||
### Workflow 1: Claude AI (Default)
|
||||
@@ -238,7 +254,29 @@ skill-seekers upload react-openai.zip --target openai
|
||||
# Access at: https://platform.openai.com/assistants/
|
||||
```
|
||||
|
||||
### Workflow 4: Export to All Platforms
|
||||
### Workflow 4: MiniMax AI
|
||||
|
||||
```bash
|
||||
# Setup (one-time)
|
||||
pip install skill-seekers[minimax]
|
||||
export MINIMAX_API_KEY=your-key
|
||||
|
||||
# 1. Scrape (universal)
|
||||
skill-seekers scrape --config configs/react.json
|
||||
|
||||
# 2. Enhance with MiniMax-M2.7
|
||||
skill-seekers enhance output/react/ --target minimax
|
||||
|
||||
# 3. Package for MiniMax
|
||||
skill-seekers package output/react/ --target minimax
|
||||
|
||||
# 4. Upload to MiniMax (validates with API)
|
||||
skill-seekers upload react-minimax.zip --target minimax
|
||||
|
||||
# Access at: https://platform.minimaxi.com/
|
||||
```
|
||||
|
||||
### Workflow 5: Export to All Platforms
|
||||
|
||||
```bash
|
||||
# Install all platforms
|
||||
@@ -251,12 +289,14 @@ skill-seekers scrape --config configs/react.json
|
||||
skill-seekers package output/react/ --target claude
|
||||
skill-seekers package output/react/ --target gemini
|
||||
skill-seekers package output/react/ --target openai
|
||||
skill-seekers package output/react/ --target minimax
|
||||
skill-seekers package output/react/ --target markdown
|
||||
|
||||
# Result:
|
||||
# - react.zip (Claude)
|
||||
# - react-gemini.tar.gz (Gemini)
|
||||
# - react-openai.zip (OpenAI)
|
||||
# - react-minimax.zip (MiniMax)
|
||||
# - react-markdown.zip (Universal)
|
||||
```
|
||||
|
||||
@@ -300,7 +340,7 @@ from skill_seekers.cli.adaptors import list_platforms, is_platform_available
|
||||
|
||||
# List all registered platforms
|
||||
platforms = list_platforms()
|
||||
print(platforms) # ['claude', 'gemini', 'openai', 'markdown']
|
||||
print(platforms) # ['claude', 'gemini', 'minimax', 'openai', 'markdown']
|
||||
|
||||
# Check if platform is available
|
||||
if is_platform_available('gemini'):
|
||||
@@ -323,6 +363,7 @@ For detailed platform-specific instructions, see:
|
||||
- [Claude AI Integration](CLAUDE_INTEGRATION.md) (default)
|
||||
- [Google Gemini Integration](GEMINI_INTEGRATION.md)
|
||||
- [OpenAI ChatGPT Integration](OPENAI_INTEGRATION.md)
|
||||
- [MiniMax AI Integration](MINIMAX_INTEGRATION.md)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
@@ -340,6 +381,8 @@ pip install skill-seekers[gemini]
|
||||
**Solution:**
|
||||
```bash
|
||||
pip install skill-seekers[openai]
|
||||
# or for MiniMax (also uses openai library)
|
||||
pip install skill-seekers[minimax]
|
||||
```
|
||||
|
||||
### API Key Issues
|
||||
@@ -350,6 +393,7 @@ pip install skill-seekers[openai]
|
||||
- Claude: `sk-ant-...`
|
||||
- Gemini: `AIza...`
|
||||
- OpenAI: `sk-proj-...` or `sk-...`
|
||||
- MiniMax: Any valid API key string
|
||||
|
||||
### Package Format Errors
|
||||
|
||||
@@ -380,6 +424,7 @@ A: Yes, each platform uses its own enhancement model:
|
||||
- Claude: Claude Sonnet 4
|
||||
- Gemini: Gemini 2.0 Flash
|
||||
- OpenAI: GPT-4o
|
||||
- MiniMax: MiniMax-M2.7
|
||||
|
||||
**Q: What if I don't want to upload automatically?**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user