Let me add the missing sections to complete the documentation:
## Security Guidelines
### API Key Management
- Keep your API key secure and never expose it in client-side code
- Rotate keys periodically (every 90 days recommended)
- Use environment variables for key storage
- Different keys for development and production
### Rate Limiting
```python
# Rate limits per plan
RATE_LIMITS = {
'free': '100/day',
'pro': '1000/day',
'enterprise': '10000/day'
}
from helixsynth.client import HelixSynthClient, HelixSynthError
try:
client = HelixSynthClient(api_key="your_api_key")
result = client.predict("INVALID##SEQUENCE")
except HelixSynthError as e:
if e.code == "INVALID_SEQUENCE":
print("Invalid amino acid sequence")
elif e.code == "RATE_LIMIT_EXCEEDED":
print("Rate limit exceeded")
elif e.code == "INVALID_API_KEY":
print("Invalid API key")
POST /api/v1/predict
Request:
{
"sequence": "MLSDEDFKAV"
}
Response:
{
"structure": "HHHEEECCC",
"confidence": 0.92
}
POST /api/v1/predict/batch
Request:
{
"sequences": [
"MLSDEDFKAV",
"KQQNLKKEKGLF"
]
}
Metric | Value |
---|---|
Accuracy (Q3) | 85.2% |
Latency (p95) | 98ms |
Throughput | 100 req/s |
Model Size | 25MB |
# Run unit tests
pytest tests/unit
# Run integration tests
pytest tests/integration
# Run performance tests
locust -f tests/locustfile.py
Example test:
def test_protein_prediction():
client = HelixSynthClient(api_key="test_key")
result = client.predict("MLSDEDFKAV")
assert len(result["structure"]) == len("MLSDEDFKAV")
assert result["confidence"] >= 0.0
assert result["confidence"] <= 1.0
# Local development
docker-compose up -d
# Production (with monitoring)
docker-compose -f docker-compose.prod.yml up -d
HelixSynth
├── API Layer (FastAPI)
├── Model Layer (PyTorch)
└── Storage Layer (Redis Cache)