Spaces:
Running
Running
Contributing to DeepCritical
Thank you for your interest in contributing to DeepCritical! This guide will help you get started.
Git Workflow
main: Production-ready (GitHub)dev: Development integration (GitHub)- Use feature branches:
yourname-dev - NEVER push directly to
mainordevon HuggingFace - GitHub is source of truth; HuggingFace is for deployment
Development Commands
make install # Install dependencies + pre-commit
make check # Lint + typecheck + test (MUST PASS)
make test # Run unit tests
make lint # Run ruff
make format # Format with ruff
make typecheck # Run mypy
make test-cov # Test with coverage
Getting Started
- Fork the repository on GitHub
- Clone your fork:
git clone https://github.com/yourusername/GradioDemo.git cd GradioDemo - Install dependencies:
make install - Create a feature branch:
git checkout -b yourname-feature-name - Make your changes following the guidelines below
- Run checks:
make check - Commit and push:
git commit -m "Description of changes" git push origin yourname-feature-name - Create a pull request on GitHub
Development Guidelines
Code Style
- Follow Code Style Guidelines
- All code must pass
mypy --strict - Use
rufffor linting and formatting - Line length: 100 characters
Error Handling
- Follow Error Handling Guidelines
- Always chain exceptions:
raise SearchError(...) from e - Use structured logging with
structlog - Never silently swallow exceptions
Testing
- Follow Testing Guidelines
- Write tests before implementation (TDD)
- Aim for >80% coverage on critical paths
- Use markers:
unit,integration,slow
Implementation Patterns
- Follow Implementation Patterns
- Use factory functions for agent/tool creation
- Implement protocols for extensibility
- Use singleton pattern with
@lru_cache(maxsize=1)
Prompt Engineering
- Follow Prompt Engineering Guidelines
- Always validate citations
- Use diverse evidence selection
- Never trust LLM-generated citations without validation
Code Quality
- Follow Code Quality Guidelines
- Google-style docstrings for all public functions
- Explain WHY, not WHAT in comments
- Mark critical sections:
# CRITICAL: ...
MCP Integration
MCP Tools
- Functions in
src/mcp_tools.pyfor Claude Desktop - Full type hints required
- Google-style docstrings with Args/Returns sections
- Formatted string returns (markdown)
Gradio MCP Server
- Enable with
mcp_server=Trueindemo.launch() - Endpoint:
/gradio_api/mcp/ - Use
ssr_mode=Falseto fix hydration issues in HF Spaces
Common Pitfalls
- Blocking the event loop: Never use sync I/O in async functions
- Missing type hints: All functions must have complete type annotations
- Hallucinated citations: Always validate references
- Global mutable state: Use ContextVar or pass via parameters
- Import errors: Lazy-load optional dependencies (magentic, modal, embeddings)
- Rate limiting: Always implement for external APIs
- Error chaining: Always use
from ewhen raising exceptions
Key Principles
- Type Safety First: All code must pass
mypy --strict - Async Everything: All I/O must be async
- Test-Driven: Write tests before implementation
- No Hallucinations: Validate all citations
- Graceful Degradation: Support free tier (HF Inference) when no API keys
- Lazy Loading: Don't require optional dependencies at import time
- Structured Logging: Use structlog, never print()
- Error Chaining: Always preserve exception context
Pull Request Process
- Ensure all checks pass:
make check - Update documentation if needed
- Add tests for new features
- Update CHANGELOG if applicable
- Request review from maintainers
- Address review feedback
- Wait for approval before merging
Questions?
- Open an issue on GitHub
- Check existing documentation
- Review code examples in the codebase
Thank you for contributing to DeepCritical!