Skip to content

Commit d2acc74

Browse files
authored
[aws][fix] Ignore wrong history events (#2260)
1 parent fc42db5 commit d2acc74

File tree

4 files changed

+6
-128
lines changed

4 files changed

+6
-128
lines changed

plugins/aws/fix_plugin_aws/resource/bedrock.py

Lines changed: 2 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from fix_plugin_aws.resource.rds import AwsRdsCluster, AwsRdsInstance
1515
from fixlib.baseresources import BaseAIJob, ModelReference, BaseAIModel
1616
from fixlib.graph import Graph
17-
from fixlib.json_bender import Bender, S, ForallBend, Bend
17+
from fixlib.json_bender import Bender, S, ForallBend, Bend, Sort
1818
from fixlib.types import Json
1919

2020
log = logging.getLogger("fix.plugins.aws")
@@ -906,6 +906,7 @@ class AwsBedrockPromptOverrideConfiguration:
906906
mapping: ClassVar[Dict[str, Bender]] = {
907907
"override_lambda": S("overrideLambda"),
908908
"prompt_configurations": S("promptConfigurations", default=[])
909+
>> Sort(S("basePromptTemplate")) # The configurations are returned always in different order
909910
>> ForallBend(AwsBedrockPromptConfiguration.mapping),
910911
}
911912
override_lambda: Optional[str] = field(default=None, metadata={"description": "The ARN of the Lambda function to use when parsing the raw foundation model output in parts of the agent sequence. If you specify this field, at least one of the promptConfigurations must contain a parserMode value that is set to OVERRIDDEN. For more information, see Parser Lambda function in Agents for Amazon Bedrock."}) # fmt: skip
@@ -928,7 +929,6 @@ class AwsBedrockAgent(BedrockTaggable, AwsResource):
928929
"default": [
929930
AwsBedrockGuardrail.kind,
930931
AwsKmsKey.kind,
931-
"aws_bedrock_agent_version",
932932
"aws_bedrock_agent_knowledge_base",
933933
]
934934
},
@@ -1029,19 +1029,6 @@ def add_tags(agent: AwsResource) -> None:
10291029
if tags:
10301030
agent.tags.update(tags[0])
10311031

1032-
def collect_agent_versions(agent: AwsBedrockAgent) -> None:
1033-
if not agent.agent_version or agent.agent_version == "DRAFT":
1034-
return
1035-
for result in builder.client.list(
1036-
"bedrock-agent",
1037-
"get-agent-version",
1038-
agentId=agent.id,
1039-
agentVersion=agent.agent_version,
1040-
):
1041-
if instance := AwsBedrockAgentVersion.from_api(result, builder):
1042-
builder.add_node(instance, js)
1043-
builder.submit_work("bedrock-agent", add_tags, instance)
1044-
10451032
for js in json:
10461033
for result in builder.client.list(
10471034
"bedrock-agent",
@@ -1052,102 +1039,6 @@ def collect_agent_versions(agent: AwsBedrockAgent) -> None:
10521039
instance.agent_version = js["latestAgentVersion"]
10531040
builder.add_node(instance, js)
10541041
builder.submit_work("bedrock-agent", add_tags, instance)
1055-
builder.submit_work("bedrock-agent", collect_agent_versions, instance)
1056-
1057-
1058-
@define(eq=False, slots=False)
1059-
class AwsBedrockAgentVersion(BedrockTaggable, AwsResource):
1060-
kind: ClassVar[str] = "aws_bedrock_agent_version"
1061-
_kind_display: ClassVar[str] = "AWS Bedrock Agent Version"
1062-
_kind_description: ClassVar[str] = "AWS Bedrock Agent Version is a feature that tracks changes in Bedrock agents over time. It maintains a record of agent configurations, including knowledge bases, prompts, and action groups. Users can view, compare, and revert to previous versions, ensuring version control and facilitating collaboration across teams working on AI agent development." # fmt: skip
1063-
_docs_url: ClassVar[str] = "https://docs.aws.amazon.com/bedrock/latest/userguide/agents-version.html"
1064-
_kind_service: ClassVar[Optional[str]] = "bedrock-agent"
1065-
_aws_metadata: ClassVar[Dict[str, Any]] = {
1066-
"provider_link_tpl": "https://{region_id}.console.aws.amazon.com/bedrock/home?region={region_id}#/agents/{id}/versions/{version}"
1067-
}
1068-
_metadata: ClassVar[Dict[str, Any]] = {"icon": "version", "group": "ai"}
1069-
_reference_kinds: ClassVar[ModelReference] = {
1070-
"predecessors": {"default": [AwsIamRole.kind, AwsBedrockFoundationModel.kind]},
1071-
"successors": {"default": [AwsBedrockGuardrail.kind, AwsKmsKey.kind]},
1072-
}
1073-
# Collected via AwsBedrockAgent()
1074-
mapping: ClassVar[Dict[str, Bender]] = {
1075-
"id": S("agentVersion", "agentId"),
1076-
"name": S("agentVersion", "agentName"),
1077-
"ctime": S("agentVersion", "createdAt"),
1078-
"mtime": S("agentVersion", "updatedAt"),
1079-
"arn": S("agentVersion", "agentArn"),
1080-
"agent_arn": S("agentVersion", "agentArn"),
1081-
"agent_id": S("agentVersion", "agentId"),
1082-
"agent_name": S("agentVersion", "agentName"),
1083-
"agent_resource_role_arn": S("agentVersion", "agentResourceRoleArn"),
1084-
"agent_status": S("agentVersion", "agentStatus"),
1085-
"created_at": S("agentVersion", "createdAt"),
1086-
"customer_encryption_key_arn": S("agentVersion", "customerEncryptionKeyArn"),
1087-
"description": S("agentVersion", "description"),
1088-
"failure_reasons": S("agentVersion", "failureReasons", default=[]),
1089-
"foundation_model": S("agentVersion", "foundationModel"),
1090-
"guardrail_configuration": S("agentVersion", "guardrailConfiguration")
1091-
>> Bend(AwsBedrockGuardrailConfiguration.mapping),
1092-
"idle_session_ttl_in_seconds": S("agentVersion", "idleSessionTTLInSeconds"),
1093-
"instruction": S("agentVersion", "instruction"),
1094-
"memory_configuration": S("agentVersion", "memoryConfiguration") >> Bend(AwsBedrockMemoryConfiguration.mapping),
1095-
"prompt_override_configuration": S("agentVersion", "promptOverrideConfiguration")
1096-
>> Bend(AwsBedrockPromptOverrideConfiguration.mapping),
1097-
"agent_recommended_actions": S("agentVersion", "recommendedActions", default=[]),
1098-
"updated_at": S("agentVersion", "updatedAt"),
1099-
"version": S("agentVersion", "version"),
1100-
}
1101-
agent_arn: Optional[str] = field(default=None, metadata={"description": "The Amazon Resource Name (ARN) of the agent that the version belongs to."}) # fmt: skip
1102-
agent_id: Optional[str] = field(default=None, metadata={"description": "The unique identifier of the agent that the version belongs to."}) # fmt: skip
1103-
agent_name: Optional[str] = field(default=None, metadata={"description": "The name of the agent that the version belongs to."}) # fmt: skip
1104-
agent_resource_role_arn: Optional[str] = field(default=None, metadata={"description": "The Amazon Resource Name (ARN) of the IAM role with permissions to invoke API operations on the agent."}) # fmt: skip
1105-
agent_status: Optional[str] = field(default=None, metadata={"description": "The status of the agent that the version belongs to."}) # fmt: skip
1106-
created_at: Optional[datetime] = field(default=None, metadata={"description": "The time at which the version was created."}) # fmt: skip
1107-
customer_encryption_key_arn: Optional[str] = field(default=None, metadata={"description": "The Amazon Resource Name (ARN) of the KMS key that encrypts the agent."}) # fmt: skip
1108-
description: Optional[str] = field(default=None, metadata={"description": "The description of the version."}) # fmt: skip
1109-
failure_reasons: Optional[List[str]] = field(factory=list, metadata={"description": "A list of reasons that the API operation on the version failed."}) # fmt: skip
1110-
foundation_model: Optional[str] = field(default=None, metadata={"description": "The foundation model that the version invokes."}) # fmt: skip
1111-
guardrail_configuration: Optional[AwsBedrockGuardrailConfiguration] = field(default=None, metadata={"description": "Details about the guardrail associated with the agent."}) # fmt: skip
1112-
idle_session_ttl_in_seconds: Optional[int] = field(default=None, metadata={"description": "The number of seconds for which Amazon Bedrock keeps information about a user's conversation with the agent. A user interaction remains active for the amount of time specified. If no conversation occurs during this time, the session expires and Amazon Bedrock deletes any data provided before the timeout."}) # fmt: skip
1113-
instruction: Optional[str] = field(default=None, metadata={"description": "The instructions provided to the agent."}) # fmt: skip
1114-
memory_configuration: Optional[AwsBedrockMemoryConfiguration] = field(default=None, metadata={"description": "Contains details of the memory configuration on the version of the agent."}) # fmt: skip
1115-
prompt_override_configuration: Optional[AwsBedrockPromptOverrideConfiguration] = field(default=None, metadata={"description": "Contains configurations to override prompt templates in different parts of an agent sequence. For more information, see Advanced prompts."}) # fmt: skip
1116-
agent_recommended_actions: Optional[List[str]] = field(factory=list, metadata={"description": "A list of recommended actions to take for the failed API operation on the version to succeed."}) # fmt: skip
1117-
updated_at: Optional[datetime] = field(default=None, metadata={"description": "The time at which the version was last updated."}) # fmt: skip
1118-
version: Optional[str] = field(default=None, metadata={"description": "The version number."}) # fmt: skip
1119-
1120-
def connect_in_graph(self, builder: GraphBuilder, source: Json) -> None:
1121-
if role_arn := self.agent_resource_role_arn:
1122-
builder.add_edge(self, reverse=True, clazz=AwsIamRole, arn=role_arn)
1123-
if encryption_key_arn := self.customer_encryption_key_arn:
1124-
builder.add_edge(self, clazz=AwsKmsKey, arn=encryption_key_arn)
1125-
if (g_configuration := self.guardrail_configuration) and (g_id := g_configuration.guardrail_identifier):
1126-
builder.add_edge(self, clazz=AwsBedrockGuardrail, id=g_id)
1127-
if foundation_model_name := self.foundation_model:
1128-
builder.add_edge(self, reverse=True, clazz=AwsBedrockFoundationModel, id=foundation_model_name)
1129-
1130-
def delete_resource(self, client: AwsClient, graph: Graph) -> bool:
1131-
client.call(
1132-
aws_service="bedrock-agent",
1133-
action="delete-agent-version",
1134-
result_name=None,
1135-
agentId=self.agent_id,
1136-
agentVersion=self.version,
1137-
)
1138-
return True
1139-
1140-
@classmethod
1141-
def called_mutator_apis(cls) -> List[AwsApiSpec]:
1142-
return super().called_mutator_apis() + [AwsApiSpec("bedrock-agent", "delete-agent-version")]
1143-
1144-
@classmethod
1145-
def called_collect_apis(cls) -> List[AwsApiSpec]:
1146-
return super().called_collect_apis() + [AwsApiSpec("bedrock-agent", "get-agent-version")]
1147-
1148-
@classmethod
1149-
def service_name(cls) -> str:
1150-
return "bedrock-agent"
11511042

11521043

11531044
@define(eq=False, slots=False)
@@ -2022,7 +1913,6 @@ def service_name(cls) -> str:
20221913
AwsBedrockModelCustomizationJob,
20231914
AwsBedrockEvaluationJob,
20241915
AwsBedrockAgent,
2025-
AwsBedrockAgentVersion,
20261916
AwsBedrockAgentKnowledgeBase,
20271917
AwsBedrockAgentPrompt,
20281918
AwsBedrockAgentFlow,

plugins/aws/test/collector_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ def count_kind(clazz: Type[AwsResource]) -> int:
3434
# make sure all threads have been joined
3535
assert len(threading.enumerate()) == 1
3636
# ensure the correct number of nodes and edges
37-
assert count_kind(AwsResource) == 261
38-
assert len(account_collector.graph.edges) == 575
37+
assert count_kind(AwsResource) == 260
38+
assert len(account_collector.graph.edges) == 574
3939
assert len(account_collector.graph.deferred_edges) == 2
4040
for node in account_collector.graph.nodes:
4141
if isinstance(node, AwsRegion):

plugins/aws/test/resources/files/bedrock_agent/get-agent-version__None_1_0.json

Lines changed: 0 additions & 10 deletions
This file was deleted.

plugins/azure/fix_plugin_azure/resource/machinelearning.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -692,10 +692,8 @@ class AzureMachineLearningDataContainerBase(AzureProxyResource):
692692
}
693693
description: Optional[str] = field(default=None, metadata={"description": "The asset description text."})
694694
is_archived: Optional[bool] = field(default=False, metadata={"description": "Is the asset archived?"})
695-
latest_version: Optional[str] = field(
696-
default=None, metadata={"description": "The latest version inside this container."}
697-
)
698-
next_version: Optional[str] = field(default=None, metadata={"description": "The next auto incremental version."})
695+
latest_version: Optional[str] = field(default=None, metadata={"ignore_history": True, "description": "The latest version inside this container."}) # fmt: skip
696+
next_version: Optional[str] = field(default=None, metadata={"ignore_history": True, "description": "The next auto incremental version."}) # fmt: skip
699697
properties: Optional[Dict[str, Any]] = field(default=None, metadata={"description": ""})
700698

701699

0 commit comments

Comments
 (0)