*** Settings *** Documentation Smoke tests for Actor YAML schema validation Resource ${CURDIR}/common.resource Suite Setup Setup Test Environment Suite Teardown Cleanup Test Environment *** Variables *** ${HELPER} ${CURDIR}/helper_actor_schema.py *** Test Cases *** Validate Simple LLM Actor YAML [Documentation] Parse the simple_llm example actor YAML and assert success [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} validate ${CURDIR}/../examples/actors/simple_llm.yaml cwd=${WORKSPACE} Log ${result.stdout} Log ${result.stderr} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-ok Validate LLM With Tools Actor YAML [Documentation] Parse the llm_with_tools example actor YAML and assert success [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} validate ${CURDIR}/../examples/actors/llm_with_tools.yaml cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-ok Validate Tool Collection Actor YAML [Documentation] Parse the tool_collection example actor YAML and assert success [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} validate ${CURDIR}/../examples/actors/tool_collection.yaml cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-ok Validate Simple Graph Actor YAML [Documentation] Parse the simple_graph example actor YAML and assert success [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} validate ${CURDIR}/../examples/actors/simple_graph.yaml cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-ok Validate Complex Graph Workflow Actor YAML [Documentation] Parse the graph_workflow example actor YAML and assert success [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} validate ${CURDIR}/../examples/actors/graph_workflow.yaml cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-ok Reject Actor YAML Without Namespace [Documentation] Attempt to parse actor YAML with invalid name (no namespace) [Tags] slow ${invalid_yaml}= Set Variable ${TEMPDIR}${/}invalid_actor_no_namespace.yaml Create File ${invalid_yaml} name: simple_actor\ntype: llm\ndescription: Test\nmodel: gpt-4\n ${result}= Run Process ${PYTHON} ${HELPER} validate-invalid ${invalid_yaml} cwd=${WORKSPACE} Log ${result.stdout} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-expected-fail Should Contain ${result.stdout} namespaced Reject LLM Actor Without Model [Documentation] Attempt to parse LLM actor without required model field [Tags] slow ${invalid_yaml}= Set Variable ${TEMPDIR}${/}invalid_llm_no_model.yaml Create File ${invalid_yaml} name: test/actor\ntype: llm\ndescription: Missing model\n ${result}= Run Process ${PYTHON} ${HELPER} validate-invalid ${invalid_yaml} cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-expected-fail Should Contain ${result.stdout} model Reject TOOL Actor Without Tools [Documentation] Attempt to parse TOOL actor without tools list [Tags] slow ${invalid_yaml}= Set Variable ${TEMPDIR}${/}invalid_tool_no_tools.yaml Create File ${invalid_yaml} name: test/tools\ntype: tool\ndescription: Missing tools\n ${result}= Run Process ${PYTHON} ${HELPER} validate-invalid ${invalid_yaml} cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-expected-fail Should Contain ${result.stdout} tool Reject GRAPH Actor Without Route [Documentation] Attempt to parse GRAPH actor without route definition [Tags] slow ${invalid_yaml}= Set Variable ${TEMPDIR}${/}invalid_graph_no_route.yaml Create File ${invalid_yaml} name: test/workflow\ntype: graph\ndescription: Missing route\nmodel: gpt-4\n ${result}= Run Process ${PYTHON} ${HELPER} validate-invalid ${invalid_yaml} cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-expected-fail Should Contain ${result.stdout} route Reject Graph With Duplicate Node IDs [Documentation] Attempt to parse graph with duplicate node IDs [Tags] slow ${invalid_yaml}= Set Variable ${TEMPDIR}${/}invalid_graph_duplicate_nodes.yaml ${yaml_content}= Catenate SEPARATOR=\n ... name: test/duplicate ... type: graph ... description: Duplicate nodes ... model: gpt-4 ... route: ... ${SPACE}${SPACE}nodes: ... ${SPACE}${SPACE}${SPACE}${SPACE}- id: node1 ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}type: agent ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}name: First ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}description: First node ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}config: ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}prompt: Test ... ${SPACE}${SPACE}${SPACE}${SPACE}- id: node1 ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}type: agent ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}name: Duplicate ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}description: Duplicate ID ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}config: ... ${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}prompt: Test ... ${SPACE}${SPACE}edges: [] ... ${SPACE}${SPACE}entry_node: node1 ... ${SPACE}${SPACE}exit_nodes: [node1] Create File ${invalid_yaml} ${yaml_content} ${result}= Run Process ${PYTHON} ${HELPER} validate-invalid ${invalid_yaml} cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-schema-expected-fail Should Contain ${result.stdout} Duplicate Role Warnings For ActorConfigSchema Missing Response Format [Documentation] Verify actor_role_warnings emits response_format warning for ActorConfigSchema estimation actor without response_format. [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} role-warning-model dummy cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-role-warning-model-ok Role Warnings For Payload Unrecognized Context View [Documentation] Verify actor_role_warnings emits context_view warning when estimation payload uses an unrecognized context_view value. [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} role-warning-payload dummy cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-role-warning-payload-ok Role Warnings Accept Uppercase Estimation Role Hint [Documentation] Verify actor_role_warnings treats uppercase role_hint as estimation and still emits response_format warning when missing. [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} role-warning-uppercase dummy cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-role-warning-uppercase-ok Role Warnings Log Unrecognized Role Hint Typo [Documentation] Verify invalid role_hint typo emits schema warning log while actor_role_warnings remains non-fatal and returns no estimation warnings. [Tags] slow ${result}= Run Process ${PYTHON} ${HELPER} role-warning-invalid-role-log dummy cwd=${WORKSPACE} Should Be Equal As Integers ${result.rc} 0 Should Contain ${result.stdout} actor-role-warning-invalid-role-log-ok