You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from collections.abc import Generator, Sequence
  2. from typing import Any
  3. from core.agent.entities import AgentInvokeMessage
  4. from core.agent.plugin_entities import AgentStrategyEntity, AgentStrategyParameter
  5. from core.agent.strategy.base import BaseAgentStrategy
  6. from core.plugin.entities.request import InvokeCredentials, PluginInvokeContext
  7. from core.plugin.impl.agent import PluginAgentClient
  8. from core.plugin.utils.converter import convert_parameters_to_plugin_format
  9. class PluginAgentStrategy(BaseAgentStrategy):
  10. """
  11. Agent Strategy
  12. """
  13. tenant_id: str
  14. declaration: AgentStrategyEntity
  15. meta_version: str | None = None
  16. def __init__(self, tenant_id: str, declaration: AgentStrategyEntity, meta_version: str | None):
  17. self.tenant_id = tenant_id
  18. self.declaration = declaration
  19. self.meta_version = meta_version
  20. def get_parameters(self) -> Sequence[AgentStrategyParameter]:
  21. return self.declaration.parameters
  22. def initialize_parameters(self, params: dict[str, Any]) -> dict[str, Any]:
  23. """
  24. Initialize the parameters for the agent strategy.
  25. """
  26. for parameter in self.declaration.parameters:
  27. params[parameter.name] = parameter.init_frontend_parameter(params.get(parameter.name))
  28. return params
  29. def _invoke(
  30. self,
  31. params: dict[str, Any],
  32. user_id: str,
  33. conversation_id: str | None = None,
  34. app_id: str | None = None,
  35. message_id: str | None = None,
  36. credentials: InvokeCredentials | None = None,
  37. ) -> Generator[AgentInvokeMessage, None, None]:
  38. """
  39. Invoke the agent strategy.
  40. """
  41. manager = PluginAgentClient()
  42. initialized_params = self.initialize_parameters(params)
  43. params = convert_parameters_to_plugin_format(initialized_params)
  44. yield from manager.invoke(
  45. tenant_id=self.tenant_id,
  46. user_id=user_id,
  47. agent_provider=self.declaration.identity.provider,
  48. agent_strategy=self.declaration.identity.name,
  49. agent_params=params,
  50. conversation_id=conversation_id,
  51. app_id=app_id,
  52. message_id=message_id,
  53. context=PluginInvokeContext(credentials=credentials or InvokeCredentials()),
  54. )