aea.aea_
builder
This module contains utilities for building an AEA.
_
DependenciesManager Objects
class _DependenciesManager()
Class to manage dependencies of agent packages.
__
init__
| __init__() -> None
Initialize the dependency graph.
all_
dependencies
| @property
| all_dependencies() -> Set[ComponentId]
Get all dependencies.
dependencies_
highest_
version
| @property
| dependencies_highest_version() -> Set[ComponentId]
Get the dependencies with highest version.
get_
components_
by_
type
| get_components_by_type(component_type: ComponentType) -> Dict[ComponentId, ComponentConfiguration]
Get the components by type.
protocols
| @property
| protocols() -> Dict[ComponentId, ProtocolConfig]
Get the protocols.
connections
| @property
| connections() -> Dict[ComponentId, ConnectionConfig]
Get the connections.
skills
| @property
| skills() -> Dict[ComponentId, SkillConfig]
Get the skills.
contracts
| @property
| contracts() -> Dict[ComponentId, ContractConfig]
Get the contracts.
add_
component
| add_component(configuration: ComponentConfiguration) -> None
Add a component to the dependency manager..
Arguments:
configuration
: the component configuration to add.
Returns:
None
remove_
component
| remove_component(component_id: ComponentId) -> None
Remove a component.
:return None
Raises:
ValueError
: if some component depends on this package.
pypi_
dependencies
| @property
| pypi_dependencies() -> Dependencies
Get all the PyPI dependencies.
We currently consider only dependency that have the default PyPI index url and that specify only the version field.
Returns:
the merged PyPI dependencies
install_
dependencies
| install_dependencies() -> None
Install extra dependencies for components.
AEABuilder Objects
class AEABuilder(WithLogger)
This class helps to build an AEA.
It follows the fluent interface. Every method of the builder returns the instance of the builder itself.
Note: the method 'build()' is guaranteed of being re-entrant with respect to the 'add_component(path)' method. That is, you can invoke the building method many times against the same builder instance, and the returned agent instance will not share the components with other agents, e.g.:
builder = AEABuilder() builder.add_component(...) ...
first call
my_aea_1 = builder.build()
following agents will have different components.
my_aea_2 = builder.build() # all good
However, if you manually loaded some of the components and added them with the method 'add_component_instance()', then calling build more than one time is prevented:
builder = AEABuilder() builder.add_component_instance(...) ... # other initialization code
first call
my_aea_1 = builder.build()
second call to build()
would raise a Value Error.
call reset
builder.reset()
re-add the component and private keys
builder.add_component_instance(...) ... # add private keys
second call
my_aea_2 = builder.builder()
__
init__
| __init__(with_default_packages: bool = True, registry_dir: str = DEFAULT_REGISTRY_NAME, build_dir_root: Optional[str] = None) -> None
Initialize the builder.
Arguments:
with_default_packages
: add the default packages.
reset
| reset(is_full_reset: bool = False) -> None
Reset the builder.
A full reset causes a reset of all data on the builder. A partial reset only resets: - name, - private keys, and - component instances
Arguments:
is_full_reset
: whether it is a full reset or not.
Returns:
None
set_
period
| set_period(period: Optional[float]) -> "AEABuilder"
Set agent act period.
Arguments:
period
: period in seconds
Returns:
self
set_
execution_
timeout
| set_execution_timeout(execution_timeout: Optional[float]) -> "AEABuilder"
Set agent execution timeout in seconds.
Arguments:
execution_timeout
: execution_timeout in seconds
Returns:
self
set_
max_
reactions
| set_max_reactions(max_reactions: Optional[int]) -> "AEABuilder"
Set agent max reaction in one react.
Arguments:
max_reactions
: int
Returns:
self
set_
decision_
maker_
handler_
paths
| set_decision_maker_handler_paths(decision_maker_handler_dotted_path: str, file_path: Optional[str]) -> "AEABuilder"
Set decision maker handler class.
Arguments:
decision_maker_handler_dotted_path
: the dotted path to the decision maker handlerfile_path
: the file path to the file which contains the decision maker handler
Returns:
self
set_
error_
handler
| set_error_handler(error_handler_dotted_path: str, file_path: Path) -> "AEABuilder"
Set error handler class.
Arguments:
error_handler_dotted_path
: the dotted path to the error handlerfile_path
: the file path to the file which contains the error handler
Returns:
self
set_
skill_
exception_
policy
| set_skill_exception_policy(skill_exception_policy: Optional[ExceptionPolicyEnum]) -> "AEABuilder"
Set skill exception policy.
Arguments:
skill_exception_policy
: the policy
Returns:
self
set_
connection_
exception_
policy
| set_connection_exception_policy(connection_exception_policy: Optional[ExceptionPolicyEnum]) -> "AEABuilder"
Set skill exception policy.
Arguments:
skill_exception_policy
: the policy
Returns:
self
set_
default_
routing
| set_default_routing(default_routing: Dict[PublicId, PublicId]) -> "AEABuilder"
Set default routing.
This is a map from public ids (protocols) to public ids (connections).
Arguments:
default_routing
: the default routing mapping
Returns:
self
set_
loop_
mode
| set_loop_mode(loop_mode: Optional[str]) -> "AEABuilder"
Set the loop mode.
Arguments:
loop_mode
: the agent loop mode
Returns:
self
set_
runtime_
mode
| set_runtime_mode(runtime_mode: Optional[str]) -> "AEABuilder"
Set the runtime mode.
Arguments:
runtime_mode
: the agent runtime mode
Returns:
self
set_
storage_
uri
| set_storage_uri(storage_uri: Optional[str]) -> "AEABuilder"
Set the storage uri.
:param storage uri: storage uri
Returns:
self
set_
data_
dir
| set_data_dir(data_dir: Optional[str]) -> "AEABuilder"
Set the data directory.
Arguments:
data_dir
: path to directory where to store data.
Returns:
self
set_
logging_
config
| set_logging_config(logging_config: Dict) -> "AEABuilder"
Set the logging configurations.
The dictionary must satisfy the following schema:
https://docs.python.org/3/library/logging.config.html#logging-config-dictschema
Arguments:
logging_config
: the logging configurations.
Returns:
self
set_
search_
service_
address
| set_search_service_address(search_service_address: str) -> "AEABuilder"
Set the search service address.
Arguments:
search_service_address
: the search service address
Returns:
self
set_
name
| set_name(name: str) -> "AEABuilder"
Set the name of the agent.
Arguments:
name
: the name of the agent.
Returns:
the AEABuilder
set_
default_
connection
| set_default_connection(public_id: Optional[PublicId] = None) -> "AEABuilder"
Set the default connection.
Arguments:
public_id
: the public id of the default connection package.
Returns:
the AEABuilder
add_
private_
key
| add_private_key(identifier: str, private_key_path: Optional[PathLike] = None, is_connection: bool = False) -> "AEABuilder"
Add a private key path.
Arguments:
identifier
: the identifier for that private key path.private_key_path
: an (optional) path to the private key file. If None, the key will be created at build time.is_connection
: if the pair is for the connection cryptos
Returns:
the AEABuilder
remove_
private_
key
| remove_private_key(identifier: str, is_connection: bool = False) -> "AEABuilder"
Remove a private key path by identifier, if present.
Arguments:
identifier
: the identifier of the private key.is_connection
: if the pair is for the connection cryptos
Returns:
the AEABuilder
private_
key_
paths
| @property
| private_key_paths() -> Dict[str, Optional[str]]
Get the private key paths.
connection_
private_
key_
paths
| @property
| connection_private_key_paths() -> Dict[str, Optional[str]]
Get the connection private key paths.
set_
default_
ledger
| set_default_ledger(identifier: Optional[str]) -> "AEABuilder"
Set a default ledger API to use.
Arguments:
identifier
: the identifier of the ledger api
Returns:
the AEABuilder
set_
build_
entrypoint
| set_build_entrypoint(build_entrypoint: Optional[str]) -> "AEABuilder"
Set build entrypoint.
Arguments:
build_entrypoint
: path to the builder script.
Returns:
the AEABuilder
set_
currency_
denominations
| set_currency_denominations(currency_denominations: Dict[str, str]) -> "AEABuilder"
Set the mapping from ledger ids to currency denomincations.
Arguments:
currency_denominations
: the mapping
Returns:
the AEABuilder
add_
component
| add_component(component_type: ComponentType, directory: PathLike, skip_consistency_check: bool = False) -> "AEABuilder"
Add a component, given its type and the directory.
Arguments:
component_type
: the component type.directory
: the directory path.skip_consistency_check
: if True, the consistency check are skipped.
Raises:
AEAException
: if a component is already registered with the same component id. | or if there's a missing dependency.
Returns:
the AEABuilder
add_
component_
instance
| add_component_instance(component: Component) -> "AEABuilder"
Add already initialized component object to resources or connections.
Please, pay attention, all dependencies have to be already loaded.
Notice also that this will make the call to 'build()' non re-entrant.
You will have to reset()
the builder before calling build()
again.
Arguments:
component
: Component instance already initialized.
set_
context_
namespace
| set_context_namespace(context_namespace: Dict[str, Any]) -> "AEABuilder"
Set the context namespace.
remove_
component
| remove_component(component_id: ComponentId) -> "AEABuilder"
Remove a component.
Arguments:
component_id
: the public id of the component.
Returns:
the AEABuilder
add_
protocol
| add_protocol(directory: PathLike) -> "AEABuilder"
Add a protocol to the agent.
Arguments:
directory
: the path to the protocol directory
Returns:
the AEABuilder
remove_
protocol
| remove_protocol(public_id: PublicId) -> "AEABuilder"
Remove protocol.
Arguments:
public_id
: the public id of the protocol
Returns:
the AEABuilder
add_
connection
| add_connection(directory: PathLike) -> "AEABuilder"
Add a connection to the agent.
Arguments:
directory
: the path to the connection directory
Returns:
the AEABuilder
remove_
connection
| remove_connection(public_id: PublicId) -> "AEABuilder"
Remove a connection.
Arguments:
public_id
: the public id of the connection
Returns:
the AEABuilder
add_
skill
| add_skill(directory: PathLike) -> "AEABuilder"
Add a skill to the agent.
Arguments:
directory
: the path to the skill directory
Returns:
the AEABuilder
remove_
skill
| remove_skill(public_id: PublicId) -> "AEABuilder"
Remove protocol.
Arguments:
public_id
: the public id of the skill
Returns:
the AEABuilder
add_
contract
| add_contract(directory: PathLike) -> "AEABuilder"
Add a contract to the agent.
Arguments:
directory
: the path to the contract directory
Returns:
the AEABuilder
remove_
contract
| remove_contract(public_id: PublicId) -> "AEABuilder"
Remove protocol.
Arguments:
public_id
: the public id of the contract
Returns:
the AEABuilder
call_
all_
build_
entrypoints
| call_all_build_entrypoints() -> None
Call all the build entrypoints.
get_
build_
root_
directory
| get_build_root_directory() -> str
Get build directory root.
run_
build_
for_
component_
configuration
| @classmethod
| run_build_for_component_configuration(cls, config: ComponentConfiguration, logger: Optional[logging.Logger] = None) -> None
Run a build entrypoint script for component configuration.
install_
pypi_
dependencies
| install_pypi_dependencies() -> None
Install components extra dependecies.
build
| build(connection_ids: Optional[Collection[PublicId]] = None) -> AEA
Build the AEA.
This method is re-entrant only if the components have been added through the method 'add_component'. If some of them have been loaded with 'add_component_instance', it can be called only once, and further calls are only possible after a call to 'reset' and re-loading of the components added via 'add_component_instance' and the private keys.
Arguments:
connection_ids
: select only these connections to run the AEA.
Returns:
the AEA object.
Raises:
ValueError
: if we cannot
get_
default_
ledger
| get_default_ledger() -> str
Return default ledger.
Returns:
the default ledger identifier.
try_
to_
load_
agent_
configuration_
file
| @classmethod
| try_to_load_agent_configuration_file(cls, aea_project_path: Union[str, Path]) -> AgentConfig
Try to load the agent configuration file..
set_
from_
configuration
| set_from_configuration(agent_configuration: AgentConfig, aea_project_path: Path, skip_consistency_check: bool = False) -> None
Set builder variables from AgentConfig.
Arguments:
agent_configuration
: AgentConfig to get values from.aea_project_path
: PathLike root directory of the agent project.skip_consistency_check
: if True, the consistency check are skipped.
Returns:
None
from_
aea_
project
| @classmethod
| from_aea_project(cls, aea_project_path: PathLike, skip_consistency_check: bool = False, create_keys: bool = True) -> "AEABuilder"
Construct the builder from an AEA project.
- load agent configuration file
- set name and default configurations
- load private keys
- load ledger API configurations
- set default ledger
- load every component
Arguments:
aea_project_path
: path to the AEA project.skip_consistency_check
: if True, the consistency check are skipped.create_keys
: if True, create keys, otherwise just verify
Returns:
an AEABuilder.
get_
configuration_
file_
path
| @staticmethod
| get_configuration_file_path(aea_project_path: Union[Path, str]) -> Path
Return path to aea-config file for the given aea project path.
make_
component_
logger
make_component_logger(configuration: ComponentConfiguration, agent_name: str) -> Optional[logging.Logger]
Make the logger for a component.
Arguments:
configuration
: the component configurationagent_name
: the agent name
Returns:
the logger.