fix: improve MiniMax adaptor from PR #318 review (#319)

* 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:
yusyus
2026-03-20 22:12:23 +03:00
committed by GitHub
parent 37a23e6c6d
commit 4f87de6b56
12 changed files with 1676 additions and 2359 deletions

View File

@@ -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

View 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.

View File

@@ -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?**