209ba45477
Removes the deprecated `workflow_template` concept entirely across both backend API routers, internal logic handling within the `supervisory_node` and `consciousness_node`, and front-end components. Enables `consciousness_node` to work autonomously. Also refactors core package structure to enforce the "one python package, one Ray Actor" architectural rule. `GlobalWorkflowManager`, `WorkflowRunningEngine`, `PostgresDatabase`, and `WorkerCluster` have been moved to their own top-level decoupled package directories with properly exported `__init__.py` modules. Test suites have been relocated and import paths updated across the system. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: zhaoxi826 <198742034+zhaoxi826@users.noreply.github.com>
94 lines
3.6 KiB
Python
94 lines
3.6 KiB
Python
# Copyright 2026 zhaoxi826
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from pydantic_ai import Agent
|
|
from pydantic_ai.models.openai import OpenAIChatModel
|
|
from pydantic_ai.models.anthropic import AnthropicModel
|
|
from pydantic_ai.providers.openai import OpenAIProvider
|
|
from pydantic_ai.providers.anthropic import AnthropicProvider
|
|
from pretor.adapter.model_adapter.deepseek_reasoner import DeepSeekReasonerAgent
|
|
from pretor.core.global_state_machine.model_provider import Provider
|
|
from pretor.utils.agent_model import ResponseModel, DepsModel
|
|
from pretor.utils.error import ModelNotExistError
|
|
|
|
|
|
class AgentFactory:
|
|
"""AgentFactory 核心组件类。
|
|
这是一个领域数据模型或功能封装类,承载了 AgentFactory 相关的内聚属性定义与状态维护。它的存在隔离了局部的业务复杂性,并对外提供了类型安全的访问接口。"""
|
|
|
|
def __init__(self):
|
|
self._models_mapping = {
|
|
"openai": (OpenAIChatModel, OpenAIProvider),
|
|
"claude": (AnthropicModel, AnthropicProvider),
|
|
"deepseek": (OpenAIChatModel, OpenAIProvider),
|
|
}
|
|
|
|
def create_agent(
|
|
self,
|
|
provider: Provider,
|
|
model_id: str,
|
|
output_type: ResponseModel,
|
|
system_prompt: str,
|
|
deps_type: DepsModel,
|
|
agent_name: str,
|
|
tools: list = None,
|
|
) -> Agent:
|
|
"""
|
|
create_agent方法,将输入的provider对象实例化为一个pydantic-ai的agent对象
|
|
|
|
Args:
|
|
provider: Provider对象,从global_state_machine中获取
|
|
model_id: 模型名
|
|
output_type: 输出格式
|
|
system_prompt: 系统提示词
|
|
deps_type: 依赖类型,在agent运行时动态输入的格式化消息
|
|
agent_name: agent的名字
|
|
tools: 工具列表
|
|
|
|
Returns:
|
|
返回被实例化的pydantic-ai的Agent对象
|
|
"""
|
|
if model_id not in provider.provider_models:
|
|
raise ModelNotExistError("模型不存在")
|
|
if provider.provider_type not in self._models_mapping:
|
|
raise ValueError(f"不支持的协议类型: {provider.provider_type}")
|
|
model_class, provider_class = self._models_mapping[provider.provider_type]
|
|
model = model_class(
|
|
model_id,
|
|
provider=provider_class(
|
|
api_key=provider.provider_apikey, base_url=provider.provider_url
|
|
),
|
|
)
|
|
match provider.provider_type:
|
|
case "deepseek":
|
|
agent = DeepSeekReasonerAgent(
|
|
model=model,
|
|
name=agent_name,
|
|
output_type=output_type,
|
|
deps_type=deps_type,
|
|
system_prompt=system_prompt,
|
|
tools=tools,
|
|
retries=3,
|
|
)
|
|
case _:
|
|
agent = Agent(
|
|
model=model,
|
|
name=agent_name,
|
|
system_prompt=system_prompt,
|
|
output_type=output_type,
|
|
deps_type=deps_type,
|
|
tools=tools,
|
|
)
|
|
return agent
|