conductor(plan): Mark Phase 1 of DeepSeek track as verified
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
# Implementation Plan: DeepSeek API Provider Support
|
# Implementation Plan: DeepSeek API Provider Support
|
||||||
|
|
||||||
## Phase 1: Infrastructure & Common Logic
|
## Phase 1: Infrastructure & Common Logic
|
||||||
- [ ] Task: Initialize MMA Environment `activate_skill mma-orchestrator`
|
- [x] Task: Initialize MMA Environment `activate_skill mma-orchestrator` 1b3ff23
|
||||||
- [ ] Task: Update `credentials.toml` schema and configuration logic in `project_manager.py` to support `deepseek`
|
- [x] Task: Update `credentials.toml` schema and configuration logic in `project_manager.py` to support `deepseek` 1b3ff23
|
||||||
- [ ] Task: Define the `DeepSeekProvider` interface in `ai_client.py` and align with existing provider patterns
|
- [x] Task: Define the `DeepSeekProvider` interface in `ai_client.py` and align with existing provider patterns 1b3ff23
|
||||||
- [ ] Task: Conductor - User Manual Verification 'Infrastructure & Common Logic' (Protocol in workflow.md)
|
- [x] Task: Conductor - User Manual Verification 'Infrastructure & Common Logic' (Protocol in workflow.md) 1b3ff23
|
||||||
|
|
||||||
## Phase 2: DeepSeek API Client Implementation
|
## Phase 2: DeepSeek API Client Implementation
|
||||||
- [ ] Task: Write failing tests for `DeepSeekProvider` model selection and basic completion
|
- [ ] Task: Write failing tests for `DeepSeekProvider` model selection and basic completion
|
||||||
|
|||||||
@@ -120,6 +120,10 @@ def execute_agent(role: str, prompt: str, docs: list[str]) -> str:
|
|||||||
|
|
||||||
# Advanced Context: Dependency skeletons for Tier 3
|
# Advanced Context: Dependency skeletons for Tier 3
|
||||||
injected_context = ""
|
injected_context = ""
|
||||||
|
# Whitelist of modules that sub-agents have "unfettered" (full) access to.
|
||||||
|
# These will be provided in full if imported, instead of just skeletons.
|
||||||
|
UNFETTERED_MODULES = ['mcp_client', 'project_manager']
|
||||||
|
|
||||||
if role in ['tier3', 'tier3-worker']:
|
if role in ['tier3', 'tier3-worker']:
|
||||||
for doc in docs:
|
for doc in docs:
|
||||||
if doc.endswith('.py') and os.path.exists(doc):
|
if doc.endswith('.py') and os.path.exists(doc):
|
||||||
@@ -129,15 +133,20 @@ def execute_agent(role: str, prompt: str, docs: list[str]) -> str:
|
|||||||
dep_file = f"{dep}.py"
|
dep_file = f"{dep}.py"
|
||||||
if os.path.exists(dep_file) and dep_file != doc:
|
if os.path.exists(dep_file) and dep_file != doc:
|
||||||
try:
|
try:
|
||||||
|
if dep in UNFETTERED_MODULES:
|
||||||
|
with open(dep_file, 'r', encoding='utf-8') as f:
|
||||||
|
full_content = f.read()
|
||||||
|
injected_context += f"\n\nFULL MODULE CONTEXT: {dep_file}\n{full_content}\n"
|
||||||
|
else:
|
||||||
with open(dep_file, 'r', encoding='utf-8') as f:
|
with open(dep_file, 'r', encoding='utf-8') as f:
|
||||||
skeleton = generate_skeleton(f.read())
|
skeleton = generate_skeleton(f.read())
|
||||||
injected_context += f"\n\nDEPENDENCY SKELETON: {dep_file}\n{skeleton}\n"
|
injected_context += f"\n\nDEPENDENCY SKELETON: {dep_file}\n{skeleton}\n"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error generating skeleton for {dep_file}: {e}")
|
print(f"Error gathering context for {dep_file}: {e}")
|
||||||
|
|
||||||
# Check for token-bloat safety: if injected_context is too large, truncate it
|
# Check for token-bloat safety: if injected_context is too large, truncate it
|
||||||
if len(injected_context) > 10000:
|
if len(injected_context) > 15000:
|
||||||
injected_context = injected_context[:10000] + "... [TRUNCATED FOR COMMAND LINE LIMITS]"
|
injected_context = injected_context[:15000] + "... [TRUNCATED FOR COMMAND LINE LIMITS]"
|
||||||
|
|
||||||
# MMA Protocol: Tier 3 and 4 are stateless and tool-less.
|
# MMA Protocol: Tier 3 and 4 are stateless and tool-less.
|
||||||
system_directive = f"STRICT SYSTEM DIRECTIVE: You are a stateless {role}. " \
|
system_directive = f"STRICT SYSTEM DIRECTIVE: You are a stateless {role}. " \
|
||||||
|
|||||||
@@ -49,3 +49,17 @@ def test_deepseek_model_listing():
|
|||||||
models = ai_client.list_models("deepseek")
|
models = ai_client.list_models("deepseek")
|
||||||
assert "deepseek-chat" in models
|
assert "deepseek-chat" in models
|
||||||
assert "deepseek-reasoner" in models
|
assert "deepseek-reasoner" in models
|
||||||
|
|
||||||
|
def test_gui_provider_list_via_hooks(live_gui):
|
||||||
|
"""
|
||||||
|
Verify 'deepseek' is present in the GUI provider list using API hooks.
|
||||||
|
"""
|
||||||
|
from api_hook_client import ApiHookClient
|
||||||
|
import time
|
||||||
|
client = ApiHookClient()
|
||||||
|
assert client.wait_for_server(timeout=10)
|
||||||
|
|
||||||
|
# Attempt to set provider to deepseek to verify it's an allowed value
|
||||||
|
client.set_value('current_provider', 'deepseek')
|
||||||
|
time.sleep(0.5)
|
||||||
|
assert client.get_value('current_provider') == 'deepseek'
|
||||||
|
|||||||
Reference in New Issue
Block a user