51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
from pathlib import Path
|
|||
|
|
from typing import List, Optional
|
|||
|
|
|
|||
|
|
from core_agent.session import AgentRunResult, ConversationSession
|
|||
|
|
from providers.base import AgentProvider
|
|||
|
|
from tools.registry import ToolRegistry
|
|||
|
|
|
|||
|
|
|
|||
|
|
class CoreAgent:
|
|||
|
|
"""Top-level assembly layer, aligned with the referenced my_agent project."""
|
|||
|
|
|
|||
|
|
def __init__(
|
|||
|
|
self,
|
|||
|
|
*,
|
|||
|
|
provider: AgentProvider,
|
|||
|
|
workspace: str | Path,
|
|||
|
|
skill_dirs: Optional[List[str | Path]] = None,
|
|||
|
|
tool_registry: Optional[ToolRegistry] = None,
|
|||
|
|
system_prompt: Optional[str] = None,
|
|||
|
|
max_iterations: int = 12,
|
|||
|
|
) -> None:
|
|||
|
|
self.provider = provider
|
|||
|
|
self.workspace = Path(workspace).resolve()
|
|||
|
|
self.skill_dirs = list(skill_dirs or [self.workspace / "skills"])
|
|||
|
|
self.tool_registry = tool_registry
|
|||
|
|
self.system_prompt = system_prompt
|
|||
|
|
self.max_iterations = max_iterations
|
|||
|
|
|
|||
|
|
def run(self, user_message: str, *, active_skills: Optional[List[str]] = None) -> AgentRunResult:
|
|||
|
|
return self.new_session(active_skills=active_skills).ask(user_message)
|
|||
|
|
|
|||
|
|
def new_session(self, *, active_skills: Optional[List[str]] = None, session_id: str = "default") -> ConversationSession:
|
|||
|
|
return ConversationSession(
|
|||
|
|
provider=self.provider,
|
|||
|
|
workspace=self.workspace,
|
|||
|
|
session_id=session_id,
|
|||
|
|
skill_dirs=self.skill_dirs,
|
|||
|
|
tool_registry=self.tool_registry,
|
|||
|
|
system_prompt=self.system_prompt,
|
|||
|
|
max_iterations=self.max_iterations,
|
|||
|
|
active_skills=active_skills,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
from main_cli import main
|
|||
|
|
|
|||
|
|
main()
|