test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

test(fixtures): add self-contained openai-default test system YAML - #36

Merged
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary
Aug 4, 2026
Merged

test(fixtures): add self-contained openai-default test system YAML#36
Asaf-prog merged 6 commits into
extra-org:mainfrom
Karn2898:docs/provider-summary

Conversation

@Karn2898

Copy link
Copy Markdown
Contributor

Summary

Add a minimal, validating agent system under tests/fixtures/ for exercising the platform without the flagship example.

  • tests/fixtures/test_system.yaml: root orchestrator routing to greeting_agent and echo_agent, with a shared resolver and an echo_tool.
  • Defaults to the openai provider so it runs without an Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via provider:.
  • A comment in the YAML makes explicit that the matching API key is supplied via the environment (OPENAI_API_KEY, etc.), never in the YAML. agentctl validate needs no key; agentctl run/serve need a key for the chosen provider.
  • Prompts, resolver stubs, and the echo_tool stub are implemented so agentctl validate passes fully offline.

Verification

agentctl validate tests/fixtures/test_system.yaml
# => validation passed

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)

Thanks

honestly this PR only adds the fixture , i doesn't include the test yet .
this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent .
I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.

this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment.
How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

@AmitAvital1

Copy link
Copy Markdown
Collaborator

This is look greate example. but can you elaborate more how we running this test as system tests? how its should work? what makes you did it? (really helpfull question also for us to understand how to improve)
Thanks

honestly this PR only adds the fixture , i doesn't include the test yet . this fixture gives us everything a system test would need, but there is no pytest that actually runs the full flow against it. the good news is that the engine already supports this kind of system test.tests/engine/test_engine_flow.py already follows the pattern, it injects a fake model_factory into LangGraohEngine which returns a FakeChatModel. This fake model simulates a tool call and a final response so there is no API key or network dependency.
this fixture would be pretty straight forwrd: load tests/fixtures/test_system.yaml and build the engine with fake model_factory, then send hello and verify it routes root router to greeting agent . send echo test and verify it routes root router to echo agent . I left that test out of this PR intentionally. My goal here was to validate the fixture first and the engine test also touches multiple internals, so I felt it deserved its own focused PR.If you are happy with the approach I can add it next.

Very good plan! We really need this benefit. we already have issue #24 and this is great improvment. How sound make this PR as infra for this issue? with couple infra test, and infra so any commit can be extended? and maybe next PR you can do more e2e tests cases

apologies for the late reply , Want me to draft the infra patch now ? I'm working on that already btw

Yea when ever you ready for review, push it inside this PR i would love to see it ! 🥇

@Karn2898

Karn2898 commented Jul 26, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

@@ -0,0 +1,111 @@
from __future__ import annotations

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets call this file utils?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure

Comment threadtests/fixtures/utils.py Outdated


FIXTURE_DIR = Path(__file__).resolve().parent
FIXTURE_SPEC = FIXTURE_DIR / "test_system.yaml"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe lets do it injectable? think about we will added more yamls for tests in your infra

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good point . I have made changes ,just need to push

temperature: 0.0

execution:
max_iterations: 10

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about test for all of this configurations?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added test_fixture_execution_policy_parsed_from_yaml which loads the spec from YAML and asserts all five fields (max_iterations, max_tool_calls, max_tool_calls_per_agent, max_child_agent_calls, allow_duplicate_tool_calls) match what's in the file. This guards against silent parser/schema changes dropping or misparsing those values. Not testing runtime enforcement here because tests/engine/test_execution_limits.py already covers that with inline specs; this fixture test just guarantees the YAML wiring is correct.

@AmitAvital1AmitAvital1 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work. can we also test generate?

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

@AmitAvital1

Copy link
Copy Markdown
Collaborator

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Nice work. can we also test generate?

Done , added tests/cli/test_generate_command.py with two tests using CliRunner against the fixture's agents.yaml

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

I see it that infra and support.py will be the infra, and test_yaml with generated files will be in dedicated folder that run this tests infra, and then we will add more folder with more yaml.. that extensabily more!

yep ,that's definetly a better structure , I have applied these changes

i added more comments please see :)

yeah I was ill so couldn't complete all tasks . now i will push

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Thanks — the reusable fixture and shared fake-model direction are valuable and align well with the system-test infrastructure described in #24.

I found one blocking issue in the echo-tool flow.

The shared FakeChatModel emits the tool call with:

args={"message": ...}

but the fixture tool is defined as:

defecho_tool(input: dict) ->str:

Since the engine builds a StructuredTool from the function signature, this does not match the expected input schema. The current test only verifies that an echo_tool record exists, so it can still pass when the tool execution actually failed.

Please align the tool signature and generated arguments, and explicitly assert that the tool record has status == "succeeded" and no error.

The PR is also currently not mergeable and needs to be rebased onto the latest main. While resolving that, please preserve the newer fake-model fallback behavior and fallback tests that now exist in tests/engine/test_engine_flow.py.

Once the branch is updated and the tool test proves successful execution rather than only attempted execution, the overall infrastructure looks useful.

echo_tool signature now matches the emitted args (message: str instead of input: dict)
Test now asserts status == "succeeded" and error is None
Branch rebased onto latest main; fallback behavior/tests in test_engine_flow.py preserved

@Asaf-prog

Copy link
Copy Markdown
Collaborator

Please rebase this PR onto main.

Add a minimal, validating agent system under tests/fixtures/ for exercising
the platform without the flagship example.
- test_system.yaml defaults to the openai provider so it runs without an
Anthropic key; any of anthropic/openai/gemini/bedrock is selectable via
provider:. A comment makes explicit that the key is supplied via the
environment, never in YAML.
- Prompts, resolver stubs, and the echo_tool stub are implemented so
agentctl validate passes fully offline (no LLM key required).
- test_system.yaml: small openai-default fixture with auto:true on tool-using agent
- prompts/ + plugins/: implemented stubs so agentctl validate passes offline
- utils.py: shared FakeChatModel, fake_model_factory, load_test_system, FakeEngine
- test_infra.py: 5 core tests covering validation, build, routing, tools, resolvers
- test_engine_flow.py: dedup FakeChatModel into tests.fixtures.utils
Closes the shared-module import collision with an autouse cleanup fixture.
- test_generate_creates_all_declared_artifacts: copies fixture YAML to tmp_path,
runs generate, asserts echo_tool, shared resolver, greeting_agent resolver,
and plugins.toml are created.
- test_generate_is_idempotent: runs generate twice, asserts second run reports
'Nothing to generate'.
Uses CliRunner against the fixture's agents.yaml.
…cy test
- load_test_system() accepts optional spec_path so future fixture folders
are loadable without hardcoding.
- fixture_path() helper returns paths under tests/fixtures/.
- test_fixture_execution_policy_parsed_from_yaml asserts all 5 YAML execution
fields are parsed correctly from agents.yaml.
@Karn2898
Karn2898force-pushed the docs/provider-summary branch from 1b717b0 to d9a475bCompareAugust 3, 2026 18:06
@Karn2898

Copy link
Copy Markdown
ContributorAuthor

Please rebase this PR onto main.

Rebased onto the latest main and force-pushed the updated branch. I also resolved the merge conflicts while preserving the newer fake-model fallback coverage and the CLI generate test additions.

@Asaf-prog
Asaf-prog merged commit e040c60 into extra-org:mainAug 4, 2026
@Karn2898

Karn2898 commented Aug 4, 2026 via email

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Karn2898@AmitAvital1@Asaf-prog