Critical fixes:
- HuggingFaceProvider now requires HF_TOKEN (raises clear RuntimeError if missing)
- Fixed test claiming "no keys" but setting hf_token
Minor fixes:
- service_loader.py: sk-ant- keys now properly excluded from OpenAI path
- llamaindex_rag.py: Added defense-in-depth key prefix validation
- Removed all Anthropic mentions from user-facing messages (4 places)
fix(arch): End-to-end BYOK support for unified architecture
* fix(SPEC_11): address CodeRabbit review feedback
- Update run_full.py docstring to reference sexual health pipeline (not drug repurposing)
- Update run_full.py help text to use sexual health query example
- Fix app.py domain display to show "Sexual Health" (not "Sexual_Health")
- Update test_nodes.py mock data to use sexual health terms (Testosterone, Androgen Receptor)
- Add @pytest.mark.unit markers to test_judges.py test classes
- Add specific assertion for next_search_queries in test_judges.py
- Add missing @pytest.mark.asyncio marker to test_mcp_tools.py
- Update test_mcp_tools.py and test_clinicaltrials.py to use sexual health queries
- Fix SPEC_12 markdown bare code fence (MD040)
* fix(SPEC_11): comprehensive domain alignment audit
Second pass of CodeRabbit review fixes - found additional domain mismatches:
- examples/search_demo/run_search.py: Update docstring from "drug repurposing" to "sexual health"
- examples/orchestrator_demo/run_agent.py: Update help text from "metf…
feat(SPEC_11): finalize transition to Sexual Health Research Specialist
This commit completes the transition of DeepBoner to a dedicated Sexual Health Research Agent by removing all references to "general" and "drug repurposing" domains. Key changes include:
- Updated domain defaults to exclusively use "sexual_health".
- Replaced all example queries and documentation to reflect a focus on sexual health topics.
- Removed any lingering references to non-sexual health concepts in code and tests.
- Ensured all tests are aligned with the new domain focus, passing successfully.
This change reinforces the project's identity and simplifies the codebase, enhancing clarity and usability for users focused on sexual health research.
Closes #89.
feat(SPEC_11): narrow scope to sexual health only
BREAKING CHANGE: Remove GENERAL and DRUG_REPURPOSING domains
DeepBoner is now a focused Sexual Health Research Specialist, not a
general-purpose research agent.
Changes:
- Remove ResearchDomain.GENERAL and ResearchDomain.DRUG_REPURPOSING
- Remove GENERAL_CONFIG and DRUG_REPURPOSING_CONFIG from domain.py
- Set DEFAULT_DOMAIN = ResearchDomain.SEXUAL_HEALTH
- Update Gradio examples (remove Metformin/Alzheimer's)
- New example: "Testosterone therapy for hypoactive sexual desire disorder?"
- Hide domain dropdown (only one option now)
- Update all domain-related tests
Closes #89
* feat: implement SPEC_10 domain-agnostic refactor
* fix: complete SPEC_10 audit - license + HierarchicalOrchestrator domain
License Fixes:
- LICENSE: Fix copyright "Antibody Training Pipeline ESM" → "DeepBoner Contributors"
- pyproject.toml: Add missing license = "Apache-2.0" field
- README.md: Fix frontmatter license: mit → apache-2.0
Domain Threading Fixes:
- hierarchical.py: Add domain param to __init__ and pass to ResearchTeam
- factory.py: Pass domain to HierarchicalOrchestrator
All 237 tests pass. Domain now properly threaded through all orchestrators.
* test: enhance domain handling in orchestrators and judges
- Updated unit tests for `configure_orchestrator` to include mock mode and free tier scenarios, ensuring the domain is correctly passed to handlers.
- Refactored tests for `JudgeHandler` to mock model retrieval, allowing for domain acceptance without API key requirements.
- Improved `AdvancedOrchestrator` tests to mock API key validation and ensure domain handling i…
test: Add circuit breaker unit tests for P0 judge bug (#63)
- Verifies that HFInferenceJudgeHandler correctly triggers 'synthesize' after 3 consecutive failures
- Verifies failure counter resets on success or new question
- Validates the P0 fix in src/agent_factory/judges.py
fix: P0 bugs + model config stabilization (November 2025) (#59)
* fix(judges): fallback to heuristic extraction when HF quota exhausted
* fix(config): update default LLM models to stable Nov 2025 versions
* docs: add LLM model defaults (Nov 2025) to agent guidance files
* refactor(judges): extract shared title-extraction helper
Address CodeRabbit nitpicks:
- Add language tag to fenced code block in docs
- Extract _extract_titles_from_evidence() to reduce duplication
between HFInferenceJudgeHandler and MockJudgeHandler
All 136 tests pass.
fix: resolve all test warnings and complete DeepBoner rebrand
Revised model names in .env.example to reflect new defaults and updated test cases in test_judges_factory.py to match the changes. The OpenAI model is now set to "gpt-5.1" and the Anthropic model to "claude-sonnet-4-5-20250929".
Replace MockJudgeHandler with real AI analysis using HuggingFace Inference API:
- Add HFInferenceJudgeHandler with chat_completion API
- Model fallback chain: Llama 3.1 → Mistral → Zephyr (ungated)
- Robust JSON extraction (handles markdown blocks, nested braces)
- Tenacity retry with exponential backoff for rate limits
- Fix app.py to use HF Inference when no paid API keys present
Priority: User API key → Env API key → HF Inference (free)
Hackathon judges now get real AI analysis without needing API keys.
Set HF_TOKEN as Space secret for best model (Llama 3.1).
feat: add demo mode warnings and BYOK (Bring Your Own Key) support
Claude
Unverified signature
4d87419
Changes:
- Add clear "Demo Mode" warning when no API keys are configured
- Add BYOK feature allowing users to input their own API key in Gradio UI
- Improve MockJudgeHandler to extract meaningful info from real search results
instead of hardcoded "Drug A", "Drug B" placeholders
- Add API provider selection (OpenAI/Anthropic) for user-provided keys
- Skip integration tests when external APIs are unreachable (SSL/network issues)
This fixes the issue where users saw mock data ("Drug A", "Drug B", "Finding 1")
without any indication they were in demo mode. Now:
1. Users are clearly informed when running in demo mode
2. Users can enter their own API key for full AI-powered analysis
3. Demo mode shows real search results with extracted findings
* feat: complete Phase 9 source cleanup
- Removed WebTool (src/tools/websearch.py) and related tests
- Updated SearchHandler and models to support only PubMed
- Refactored all examples and tests to remove web search dependencies
- Added verification tests to ensure no WebTool references remain
- Fixed all unit tests to align with strict 'pubmed' source typing
* fix: address CodeRabbit review feedback
- Deduplicate tenacity dependency in pyproject.toml
- Remove 'and web' from search agent description
- Normalize Citation source to 'pubmed' in search agent
- Update app.py markdown to remove web search references
- Update embeddings demo with realistic PubMed URL/author
- Enhance SearchHandler tests to verify multi-tool aggregation
* refactor: replace mock data with real PubMed data in embeddings demo
* fix: address CodeRabbit review feedback
- Fix nested test_search_handler_pubmed_only (was inside another test, never ran)
- Improve test_no_webtool_references to catch `from src.tool…
fix: pydantic-ai v1 compatibility and Anthropic model update
- Use result.output instead of deprecated result.data (pydantic-ai v1)
- Update Anthropic model to claude-sonnet-4-5
- Remove redundant cast in judges.py
- Add orchestrator_demo example for end-to-end testing
- Fix NCBI_API_KEY placeholder handling in pubmed.py
- Update tests to use .output instead of .data
fix: add type ignore comment for Agent instantiation in JudgeHandler
- Add pydantic-ai to pre-commit mypy dependencies to fix divergence
between local mypy and CI (both now recognize Agent overloads)
- Fix JudgeHandler tests to mock get_model() which instantiates
OpenAIModel at import time (requires API key)
* feat: initialize deepcritical project structure with core configuration and main functionality
- Added initial project files including `.python-version`, `pyproject.toml`, and main application logic in `main.py`.
- Implemented application configuration using Pydantic in `src/utils/config.py` with environment variable support.
- Created directory structure for source code and tests, including placeholders for agents, prompts, tools, and utilities.
- Added unit tests for configuration loading and validation in `tests/unit/utils/test_config.py`.
Review Score: 100/100 (Ironclad Gucci Banger Edition)
* feat(phase1): complete foundation with Python 3.11, tests, and tooling
- Fix Python version to 3.11 for HuggingFace Spaces compatibility
- Add config.py with pydantic-settings for typed configuration
- Add exceptions.py with custom exception hierarchy
- Add conftest.py with test fixtures (sample_evidence deferred to Phase 2)
- Add .env.example and .pre-commit-config.yaml
- Remove refere…