38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from functools import lru_cache
|
|||
|
|
from typing import Any, cast
|
||
|
|
|
||
|
|
from app.service.agent.factory import AgentFactory
|
||
|
|
from app.service.intent_classifier import IntentClassifier
|
||
|
|
from app.service.model_gateway import (
|
||
|
|
DatabaseModelEndpointResolver,
|
||
|
|
DatabaseModelGateway,
|
||
|
|
ModelDispatchService,
|
||
|
|
ModelGenerationService,
|
||
|
|
)
|
||
|
|
from app.service.suitability_service import (
|
||
|
|
SuitabilityToolInput,
|
||
|
|
suitability_tool_handler,
|
||
|
|
)
|
||
|
|
from app.service.tool_executor import ToolDefinition, ToolExecutor, ToolRegistry
|
||
|
|
|
||
|
|
|
||
|
|
@lru_cache(maxsize=1)
|
||
|
|
def get_agent_factory() -> AgentFactory:
|
||
|
|
"""HTTP 与 Worker 共用的唯一底座依赖组装入口。"""
|
||
|
|
registry = ToolRegistry()
|
||
|
|
registry.register(ToolDefinition(
|
||
|
|
name="check_suitability",
|
||
|
|
input_model=SuitabilityToolInput,
|
||
|
|
handler=cast(Any, suitability_tool_handler),
|
||
|
|
required_permission="suitability:read",
|
||
|
|
allowed_roles=("customer", "advisor", "operator", "admin"),
|
||
|
|
))
|
||
|
|
model_service = ModelGenerationService(ModelDispatchService(DatabaseModelGateway()))
|
||
|
|
endpoint_resolver = DatabaseModelEndpointResolver()
|
||
|
|
return AgentFactory(
|
||
|
|
model_service=model_service,
|
||
|
|
tool_executor=ToolExecutor(registry),
|
||
|
|
intent_classifier=IntentClassifier(model_service),
|
||
|
|
intent_endpoint_resolver=endpoint_resolver,
|
||
|
|
)
|