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
|
||||
|
||||
## Phase 1: Infrastructure & Common Logic
|
||||
- [ ] Task: Initialize MMA Environment `activate_skill mma-orchestrator`
|
||||
- [ ] Task: Update `credentials.toml` schema and configuration logic in `project_manager.py` to support `deepseek`
|
||||
- [ ] Task: Define the `DeepSeekProvider` interface in `ai_client.py` and align with existing provider patterns
|
||||
- [ ] Task: Conductor - User Manual Verification 'Infrastructure & Common Logic' (Protocol in workflow.md)
|
||||
- [x] Task: Initialize MMA Environment `activate_skill mma-orchestrator` 1b3ff23
|
||||
- [x] Task: Update `credentials.toml` schema and configuration logic in `project_manager.py` to support `deepseek` 1b3ff23
|
||||
- [x] Task: Define the `DeepSeekProvider` interface in `ai_client.py` and align with existing provider patterns 1b3ff23
|
||||
- [x] Task: Conductor - User Manual Verification 'Infrastructure & Common Logic' (Protocol in workflow.md) 1b3ff23
|
||||
|
||||
## Phase 2: DeepSeek API Client Implementation
|
||||
- [ ] 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
|
||||
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']:
|
||||
for doc in docs:
|
||||
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"
|
||||
if os.path.exists(dep_file) and dep_file != doc:
|
||||
try:
|
||||
with open(dep_file, 'r', encoding='utf-8') as f:
|
||||
skeleton = generate_skeleton(f.read())
|
||||
injected_context += f"\n\nDEPENDENCY SKELETON: {dep_file}\n{skeleton}\n"
|
||||
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:
|
||||
skeleton = generate_skeleton(f.read())
|
||||
injected_context += f"\n\nDEPENDENCY SKELETON: {dep_file}\n{skeleton}\n"
|
||||
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
|
||||
if len(injected_context) > 10000:
|
||||
injected_context = injected_context[:10000] + "... [TRUNCATED FOR COMMAND LINE LIMITS]"
|
||||
if len(injected_context) > 15000:
|
||||
injected_context = injected_context[:15000] + "... [TRUNCATED FOR COMMAND LINE LIMITS]"
|
||||
|
||||
# MMA Protocol: Tier 3 and 4 are stateless and tool-less.
|
||||
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")
|
||||
assert "deepseek-chat" 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