Spaces:
Running
Running
File size: 8,378 Bytes
016b413 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# Situation Analysis: Pydantic-AI + Microsoft Agent Framework Integration
**Date:** November 27, 2025
**Status:** ACTIVE DECISION REQUIRED
**Risk Level:** HIGH - DO NOT MERGE PR #41 UNTIL RESOLVED
---
## 1. The Problem
We almost merged a refactor that would have **deleted** multi-agent orchestration capability from the codebase, mistakenly believing pydantic-ai and Microsoft Agent Framework were mutually exclusive.
**They are not.** They are complementary:
- **pydantic-ai** (Library): Ensures LLM outputs match Pydantic schemas
- **Microsoft Agent Framework** (Framework): Orchestrates multi-agent workflows
---
## 2. Current Branch State
| Branch | Location | Has Agent Framework? | Has Pydantic-AI Improvements? | Status |
|--------|----------|---------------------|------------------------------|--------|
| `origin/dev` | GitHub | YES | NO | **SAFE - Source of Truth** |
| `huggingface-upstream/dev` | HF Spaces | YES | NO | **SAFE - Same as GitHub** |
| `origin/main` | GitHub | YES | NO | **SAFE** |
| `feat/pubmed-fulltext` | GitHub | NO (deleted) | YES | **DANGER - Has destructive refactor** |
| `refactor/pydantic-unification` | Local | NO (deleted) | YES | **DANGER - Redundant, delete** |
| Local `dev` | Local only | NO (deleted) | YES | **DANGER - NOT PUSHED (thankfully)** |
### Key Files at Risk
**On `origin/dev` (PRESERVED):**
```text
src/agents/
βββ analysis_agent.py # StatisticalAnalyzer wrapper
βββ hypothesis_agent.py # Hypothesis generation
βββ judge_agent.py # JudgeHandler wrapper
βββ magentic_agents.py # Multi-agent definitions
βββ report_agent.py # Report synthesis
βββ search_agent.py # SearchHandler wrapper
βββ state.py # Thread-safe state management
βββ tools.py # @ai_function decorated tools
src/orchestrator_magentic.py # Multi-agent orchestrator
src/utils/llm_factory.py # Centralized LLM client factory
```
**Deleted in refactor branch (would be lost if merged):**
- All of the above
---
## 3. Target Architecture
```text
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Microsoft Agent Framework (Orchestration Layer) β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β SearchAgent ββ β JudgeAgent ββ β ReportAgent β β
β β (BaseAgent) β β (BaseAgent) β β (BaseAgent) β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β pydantic-ai β β pydantic-ai β β pydantic-ai β β
β β Agent() β β Agent() β β Agent() β β
β β output_type= β β output_type= β β output_type= β β
β β SearchResult β β JudgeAssess β β Report β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**Why this architecture:**
1. **Agent Framework** handles: workflow coordination, state passing, middleware, observability
2. **pydantic-ai** handles: type-safe LLM calls within each agent
---
## 4. CRITICAL: Naming Confusion Clarification
> **Senior Agent Review Finding:** The codebase uses "magentic" in file names (e.g., `orchestrator_magentic.py`, `magentic_agents.py`) but this is **NOT** the `magentic` PyPI package by Jacky Liang. It's Microsoft Agent Framework (`agent-framework-core`).
**The naming confusion:**
- `magentic` (PyPI package): A different library for structured LLM outputs
- "Magentic" (in our codebase): Our internal name for Microsoft Agent Framework integration
- `agent-framework-core` (PyPI package): Microsoft's actual multi-agent orchestration framework
**Recommended future action:** Rename `orchestrator_magentic.py` β `orchestrator_advanced.py` to eliminate confusion.
---
## 5. What the Refactor DID Get Right
The refactor branch (`feat/pubmed-fulltext`) has some valuable improvements:
1. **`judges.py` unified `get_model()`** - Supports OpenAI, Anthropic, AND HuggingFace via pydantic-ai
2. **HuggingFace free tier support** - `HuggingFaceModel` integration
3. **Test fix** - Properly mocks `HuggingFaceModel` class
4. **Removed broken magentic optional dependency** from pyproject.toml (this was correct - the old `magentic` package is different from Microsoft Agent Framework)
**What it got WRONG:**
1. Deleted `src/agents/` entirely instead of refactoring them
2. Deleted `src/orchestrator_magentic.py` instead of fixing it
3. Conflated "magentic" (old package) with "Microsoft Agent Framework" (current framework)
---
## 6. Options for Path Forward
### Option A: Abandon Refactor, Start Fresh
- Close PR #41
- Delete `feat/pubmed-fulltext` and `refactor/pydantic-unification` branches
- Reset local `dev` to match `origin/dev`
- Cherry-pick ONLY the good parts (judges.py improvements, HF support)
- **Pros:** Clean, safe
- **Cons:** Lose some work, need to redo carefully
### Option B: Cherry-Pick Good Parts to origin/dev
- Do NOT merge PR #41
- Create new branch from `origin/dev`
- Cherry-pick specific commits/changes that improve pydantic-ai usage
- Keep agent framework code intact
- **Pros:** Preserves both, surgical
- **Cons:** Requires careful file-by-file review
### Option C: Revert Deletions in Refactor Branch
- On `feat/pubmed-fulltext`, restore deleted agent files from `origin/dev`
- Keep the pydantic-ai improvements
- Merge THAT to dev
- **Pros:** Gets both
- **Cons:** Complex git operations, risk of conflicts
---
## 7. Recommended Action: Option B (Cherry-Pick)
**Step-by-step:**
1. **Close PR #41** (do not merge)
2. **Delete redundant branches:**
- `refactor/pydantic-unification` (local)
- Reset local `dev` to `origin/dev`
3. **Create new branch from origin/dev:**
```bash
git checkout -b feat/pydantic-ai-improvements origin/dev
```
4. **Cherry-pick or manually port these improvements:**
- `src/agent_factory/judges.py` - the unified `get_model()` function
- `examples/free_tier_demo.py` - HuggingFace demo
- Test improvements
5. **Do NOT delete any agent framework files**
6. **Create PR for review**
---
## 8. Files to Cherry-Pick (Safe Improvements)
| File | What Changed | Safe to Port? |
|------|-------------|---------------|
| `src/agent_factory/judges.py` | Added `HuggingFaceModel` support in `get_model()` | YES |
| `examples/free_tier_demo.py` | New demo for HF inference | YES |
| `tests/unit/agent_factory/test_judges.py` | Fixed HF model mocking | YES |
| `pyproject.toml` | Removed old `magentic` optional dep | MAYBE (review carefully) |
---
## 9. Questions to Answer Before Proceeding
1. **For the hackathon**: Do we need full multi-agent orchestration, or is single-agent sufficient?
2. **For DeepCritical mainline**: Is the plan to use Microsoft Agent Framework for orchestration?
3. **Timeline**: How much time do we have to get this right?
---
## 10. Immediate Actions (DO NOW)
- [ ] **DO NOT merge PR #41**
- [ ] Close PR #41 with comment explaining the situation
- [ ] Do not push local `dev` branch anywhere
- [ ] Confirm HuggingFace Spaces is untouched (it is - verified)
---
## 11. Decision Log
| Date | Decision | Rationale |
|------|----------|-----------|
| 2025-11-27 | Pause refactor merge | Discovered agent framework and pydantic-ai are complementary, not exclusive |
| TBD | ? | Awaiting decision on path forward |
|