amd-gaia 0.14.2__py3-none-any.whl → 0.14.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/METADATA +5 -2
- amd_gaia-0.14.3.dist-info/RECORD +168 -0
- {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/entry_points.txt +1 -0
- gaia/__init__.py +28 -1
- gaia/agents/__init__.py +1 -1
- gaia/agents/base/__init__.py +1 -1
- gaia/agents/base/agent.py +110 -33
- gaia/agents/base/api_agent.py +1 -1
- gaia/agents/base/console.py +399 -15
- gaia/agents/base/errors.py +237 -0
- gaia/agents/base/mcp_agent.py +1 -1
- gaia/agents/base/tools.py +1 -1
- gaia/agents/blender/agent.py +1 -1
- gaia/agents/blender/agent_simple.py +1 -1
- gaia/agents/blender/app.py +1 -1
- gaia/agents/blender/app_simple.py +1 -1
- gaia/agents/blender/core/__init__.py +1 -1
- gaia/agents/blender/core/materials.py +1 -1
- gaia/agents/blender/core/objects.py +1 -1
- gaia/agents/blender/core/rendering.py +1 -1
- gaia/agents/blender/core/scene.py +1 -1
- gaia/agents/blender/core/view.py +1 -1
- gaia/agents/chat/__init__.py +1 -1
- gaia/agents/chat/agent.py +36 -153
- gaia/agents/chat/app.py +1 -1
- gaia/agents/chat/session.py +1 -1
- gaia/agents/chat/tools/__init__.py +1 -1
- gaia/agents/chat/tools/file_tools.py +1 -1
- gaia/agents/chat/tools/rag_tools.py +1 -1
- gaia/agents/chat/tools/shell_tools.py +1 -1
- gaia/agents/code/__init__.py +1 -1
- gaia/agents/code/agent.py +3 -1
- gaia/agents/code/orchestration/__init__.py +1 -1
- gaia/agents/code/orchestration/checklist_executor.py +1 -1
- gaia/agents/code/orchestration/checklist_generator.py +1 -1
- gaia/agents/code/orchestration/factories/__init__.py +1 -1
- gaia/agents/code/orchestration/factories/base.py +1 -1
- gaia/agents/code/orchestration/factories/nextjs_factory.py +1 -1
- gaia/agents/code/orchestration/factories/python_factory.py +1 -1
- gaia/agents/code/orchestration/orchestrator.py +212 -1
- gaia/agents/code/orchestration/project_analyzer.py +1 -1
- gaia/agents/code/orchestration/steps/__init__.py +1 -1
- gaia/agents/code/orchestration/steps/base.py +1 -1
- gaia/agents/code/orchestration/steps/error_handler.py +1 -1
- gaia/agents/code/orchestration/steps/nextjs.py +1 -1
- gaia/agents/code/orchestration/steps/python.py +1 -1
- gaia/agents/code/orchestration/template_catalog.py +1 -1
- gaia/agents/code/orchestration/workflows/__init__.py +1 -1
- gaia/agents/code/orchestration/workflows/base.py +1 -1
- gaia/agents/code/orchestration/workflows/nextjs.py +1 -1
- gaia/agents/code/orchestration/workflows/python.py +1 -1
- gaia/agents/code/prompts/__init__.py +1 -1
- gaia/agents/code/prompts/base_prompt.py +1 -1
- gaia/agents/code/prompts/code_patterns.py +1 -1
- gaia/agents/code/prompts/nextjs_prompt.py +1 -1
- gaia/agents/code/prompts/python_prompt.py +1 -1
- gaia/agents/code/schema_inference.py +1 -1
- gaia/agents/code/system_prompt.py +1 -1
- gaia/agents/code/tools/__init__.py +1 -1
- gaia/agents/code/tools/cli_tools.py +1 -1
- gaia/agents/code/tools/code_formatting.py +1 -1
- gaia/agents/code/tools/code_tools.py +1 -1
- gaia/agents/code/tools/error_fixing.py +1 -1
- gaia/agents/code/tools/external_tools.py +1 -1
- gaia/agents/code/tools/prisma_tools.py +1 -1
- gaia/agents/code/tools/project_management.py +1 -1
- gaia/agents/code/tools/testing.py +1 -1
- gaia/agents/code/tools/typescript_tools.py +1 -1
- gaia/agents/code/tools/validation_parsing.py +1 -1
- gaia/agents/code/tools/validation_tools.py +5 -2
- gaia/agents/code/tools/web_dev_tools.py +1 -2
- gaia/agents/docker/__init__.py +1 -1
- gaia/agents/emr/__init__.py +8 -0
- gaia/agents/emr/agent.py +1506 -0
- gaia/agents/emr/cli.py +1322 -0
- gaia/agents/emr/constants.py +475 -0
- gaia/agents/emr/dashboard/__init__.py +4 -0
- gaia/agents/emr/dashboard/server.py +1974 -0
- gaia/agents/routing/__init__.py +1 -1
- gaia/agents/routing/agent.py +65 -7
- gaia/agents/routing/system_prompt.py +1 -1
- gaia/api/__init__.py +1 -1
- gaia/api/agent_registry.py +1 -1
- gaia/api/app.py +1 -1
- gaia/api/openai_server.py +1 -1
- gaia/api/schemas.py +1 -1
- gaia/api/sse_handler.py +5 -2
- gaia/apps/__init__.py +1 -1
- gaia/apps/llm/__init__.py +1 -1
- gaia/audio/__init__.py +1 -1
- gaia/audio/audio_client.py +1 -1
- gaia/audio/audio_recorder.py +1 -1
- gaia/audio/kokoro_tts.py +1 -1
- gaia/audio/whisper_asr.py +1 -1
- gaia/chat/__init__.py +1 -1
- gaia/chat/prompts.py +1 -1
- gaia/chat/sdk.py +25 -0
- gaia/cli.py +2 -2
- gaia/database/__init__.py +10 -0
- gaia/database/agent.py +176 -0
- gaia/database/mixin.py +290 -0
- gaia/database/testing.py +64 -0
- gaia/eval/batch_experiment.py +1 -1
- gaia/eval/claude.py +1 -1
- gaia/eval/config.py +1 -1
- gaia/eval/email_generator.py +1 -1
- gaia/eval/eval.py +1 -1
- gaia/eval/groundtruth.py +1 -1
- gaia/eval/transcript_generator.py +1 -1
- gaia/eval/webapp/public/app.js +1 -1
- gaia/eval/webapp/server.js +1 -1
- gaia/eval/webapp/test-setup.js +1 -1
- gaia/llm/__init__.py +1 -1
- gaia/llm/lemonade_client.py +149 -11
- gaia/llm/lemonade_manager.py +36 -11
- gaia/llm/llm_client.py +1 -1
- gaia/llm/vlm_client.py +93 -18
- gaia/logger.py +1 -1
- gaia/mcp/agent_mcp_server.py +1 -1
- gaia/mcp/blender_mcp_client.py +1 -1
- gaia/mcp/blender_mcp_server.py +1 -1
- gaia/mcp/context7_cache.py +1 -1
- gaia/mcp/servers/__init__.py +1 -1
- gaia/mcp/servers/docker_mcp.py +1 -1
- gaia/security.py +1 -1
- gaia/testing/__init__.py +87 -0
- gaia/testing/assertions.py +330 -0
- gaia/testing/fixtures.py +333 -0
- gaia/testing/mocks.py +493 -0
- gaia/util.py +1 -1
- gaia/utils/__init__.py +33 -0
- gaia/utils/file_watcher.py +675 -0
- gaia/utils/parsing.py +223 -0
- gaia/version.py +2 -2
- amd_gaia-0.14.2.dist-info/RECORD +0 -800
- gaia/eval/webapp/node_modules/.bin/mime +0 -16
- gaia/eval/webapp/node_modules/.bin/mime.cmd +0 -17
- gaia/eval/webapp/node_modules/.bin/mime.ps1 +0 -28
- gaia/eval/webapp/node_modules/.package-lock.json +0 -865
- gaia/eval/webapp/node_modules/accepts/HISTORY.md +0 -243
- gaia/eval/webapp/node_modules/accepts/LICENSE +0 -23
- gaia/eval/webapp/node_modules/accepts/README.md +0 -140
- gaia/eval/webapp/node_modules/accepts/index.js +0 -238
- gaia/eval/webapp/node_modules/accepts/package.json +0 -47
- gaia/eval/webapp/node_modules/array-flatten/LICENSE +0 -21
- gaia/eval/webapp/node_modules/array-flatten/README.md +0 -43
- gaia/eval/webapp/node_modules/array-flatten/array-flatten.js +0 -64
- gaia/eval/webapp/node_modules/array-flatten/package.json +0 -39
- gaia/eval/webapp/node_modules/body-parser/HISTORY.md +0 -672
- gaia/eval/webapp/node_modules/body-parser/LICENSE +0 -23
- gaia/eval/webapp/node_modules/body-parser/README.md +0 -476
- gaia/eval/webapp/node_modules/body-parser/SECURITY.md +0 -25
- gaia/eval/webapp/node_modules/body-parser/index.js +0 -156
- gaia/eval/webapp/node_modules/body-parser/lib/read.js +0 -205
- gaia/eval/webapp/node_modules/body-parser/lib/types/json.js +0 -247
- gaia/eval/webapp/node_modules/body-parser/lib/types/raw.js +0 -101
- gaia/eval/webapp/node_modules/body-parser/lib/types/text.js +0 -121
- gaia/eval/webapp/node_modules/body-parser/lib/types/urlencoded.js +0 -307
- gaia/eval/webapp/node_modules/body-parser/package.json +0 -56
- gaia/eval/webapp/node_modules/bytes/History.md +0 -97
- gaia/eval/webapp/node_modules/bytes/LICENSE +0 -23
- gaia/eval/webapp/node_modules/bytes/Readme.md +0 -152
- gaia/eval/webapp/node_modules/bytes/index.js +0 -170
- gaia/eval/webapp/node_modules/bytes/package.json +0 -42
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.eslintrc +0 -17
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.nycrc +0 -9
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/CHANGELOG.md +0 -30
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/LICENSE +0 -21
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/README.md +0 -62
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.d.ts +0 -1
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.js +0 -10
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.d.ts +0 -19
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.js +0 -10
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.d.ts +0 -1
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.js +0 -4
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.d.ts +0 -1
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.js +0 -4
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.d.ts +0 -64
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.js +0 -15
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/package.json +0 -85
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.d.ts +0 -3
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.js +0 -4
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/test/index.js +0 -63
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/call-bound/.eslintrc +0 -13
- gaia/eval/webapp/node_modules/call-bound/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/call-bound/.nycrc +0 -9
- gaia/eval/webapp/node_modules/call-bound/CHANGELOG.md +0 -42
- gaia/eval/webapp/node_modules/call-bound/LICENSE +0 -21
- gaia/eval/webapp/node_modules/call-bound/README.md +0 -53
- gaia/eval/webapp/node_modules/call-bound/index.d.ts +0 -94
- gaia/eval/webapp/node_modules/call-bound/index.js +0 -19
- gaia/eval/webapp/node_modules/call-bound/package.json +0 -99
- gaia/eval/webapp/node_modules/call-bound/test/index.js +0 -61
- gaia/eval/webapp/node_modules/call-bound/tsconfig.json +0 -10
- gaia/eval/webapp/node_modules/content-disposition/HISTORY.md +0 -60
- gaia/eval/webapp/node_modules/content-disposition/LICENSE +0 -22
- gaia/eval/webapp/node_modules/content-disposition/README.md +0 -142
- gaia/eval/webapp/node_modules/content-disposition/index.js +0 -458
- gaia/eval/webapp/node_modules/content-disposition/package.json +0 -44
- gaia/eval/webapp/node_modules/content-type/HISTORY.md +0 -29
- gaia/eval/webapp/node_modules/content-type/LICENSE +0 -22
- gaia/eval/webapp/node_modules/content-type/README.md +0 -94
- gaia/eval/webapp/node_modules/content-type/index.js +0 -225
- gaia/eval/webapp/node_modules/content-type/package.json +0 -42
- gaia/eval/webapp/node_modules/cookie/LICENSE +0 -24
- gaia/eval/webapp/node_modules/cookie/README.md +0 -317
- gaia/eval/webapp/node_modules/cookie/SECURITY.md +0 -25
- gaia/eval/webapp/node_modules/cookie/index.js +0 -334
- gaia/eval/webapp/node_modules/cookie/package.json +0 -44
- gaia/eval/webapp/node_modules/cookie-signature/.npmignore +0 -4
- gaia/eval/webapp/node_modules/cookie-signature/History.md +0 -38
- gaia/eval/webapp/node_modules/cookie-signature/Readme.md +0 -42
- gaia/eval/webapp/node_modules/cookie-signature/index.js +0 -51
- gaia/eval/webapp/node_modules/cookie-signature/package.json +0 -18
- gaia/eval/webapp/node_modules/debug/.coveralls.yml +0 -1
- gaia/eval/webapp/node_modules/debug/.eslintrc +0 -11
- gaia/eval/webapp/node_modules/debug/.npmignore +0 -9
- gaia/eval/webapp/node_modules/debug/.travis.yml +0 -14
- gaia/eval/webapp/node_modules/debug/CHANGELOG.md +0 -362
- gaia/eval/webapp/node_modules/debug/LICENSE +0 -19
- gaia/eval/webapp/node_modules/debug/Makefile +0 -50
- gaia/eval/webapp/node_modules/debug/README.md +0 -312
- gaia/eval/webapp/node_modules/debug/component.json +0 -19
- gaia/eval/webapp/node_modules/debug/karma.conf.js +0 -70
- gaia/eval/webapp/node_modules/debug/node.js +0 -1
- gaia/eval/webapp/node_modules/debug/package.json +0 -49
- gaia/eval/webapp/node_modules/debug/src/browser.js +0 -185
- gaia/eval/webapp/node_modules/debug/src/debug.js +0 -202
- gaia/eval/webapp/node_modules/debug/src/index.js +0 -10
- gaia/eval/webapp/node_modules/debug/src/inspector-log.js +0 -15
- gaia/eval/webapp/node_modules/debug/src/node.js +0 -248
- gaia/eval/webapp/node_modules/depd/History.md +0 -103
- gaia/eval/webapp/node_modules/depd/LICENSE +0 -22
- gaia/eval/webapp/node_modules/depd/Readme.md +0 -280
- gaia/eval/webapp/node_modules/depd/index.js +0 -538
- gaia/eval/webapp/node_modules/depd/lib/browser/index.js +0 -77
- gaia/eval/webapp/node_modules/depd/package.json +0 -45
- gaia/eval/webapp/node_modules/destroy/LICENSE +0 -23
- gaia/eval/webapp/node_modules/destroy/README.md +0 -63
- gaia/eval/webapp/node_modules/destroy/index.js +0 -209
- gaia/eval/webapp/node_modules/destroy/package.json +0 -48
- gaia/eval/webapp/node_modules/dunder-proto/.eslintrc +0 -5
- gaia/eval/webapp/node_modules/dunder-proto/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/dunder-proto/.nycrc +0 -13
- gaia/eval/webapp/node_modules/dunder-proto/CHANGELOG.md +0 -24
- gaia/eval/webapp/node_modules/dunder-proto/LICENSE +0 -21
- gaia/eval/webapp/node_modules/dunder-proto/README.md +0 -54
- gaia/eval/webapp/node_modules/dunder-proto/get.d.ts +0 -5
- gaia/eval/webapp/node_modules/dunder-proto/get.js +0 -30
- gaia/eval/webapp/node_modules/dunder-proto/package.json +0 -76
- gaia/eval/webapp/node_modules/dunder-proto/set.d.ts +0 -5
- gaia/eval/webapp/node_modules/dunder-proto/set.js +0 -35
- gaia/eval/webapp/node_modules/dunder-proto/test/get.js +0 -34
- gaia/eval/webapp/node_modules/dunder-proto/test/index.js +0 -4
- gaia/eval/webapp/node_modules/dunder-proto/test/set.js +0 -50
- gaia/eval/webapp/node_modules/dunder-proto/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/ee-first/LICENSE +0 -22
- gaia/eval/webapp/node_modules/ee-first/README.md +0 -80
- gaia/eval/webapp/node_modules/ee-first/index.js +0 -95
- gaia/eval/webapp/node_modules/ee-first/package.json +0 -29
- gaia/eval/webapp/node_modules/encodeurl/LICENSE +0 -22
- gaia/eval/webapp/node_modules/encodeurl/README.md +0 -109
- gaia/eval/webapp/node_modules/encodeurl/index.js +0 -60
- gaia/eval/webapp/node_modules/encodeurl/package.json +0 -40
- gaia/eval/webapp/node_modules/es-define-property/.eslintrc +0 -13
- gaia/eval/webapp/node_modules/es-define-property/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/es-define-property/.nycrc +0 -9
- gaia/eval/webapp/node_modules/es-define-property/CHANGELOG.md +0 -29
- gaia/eval/webapp/node_modules/es-define-property/LICENSE +0 -21
- gaia/eval/webapp/node_modules/es-define-property/README.md +0 -49
- gaia/eval/webapp/node_modules/es-define-property/index.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-define-property/index.js +0 -14
- gaia/eval/webapp/node_modules/es-define-property/package.json +0 -81
- gaia/eval/webapp/node_modules/es-define-property/test/index.js +0 -56
- gaia/eval/webapp/node_modules/es-define-property/tsconfig.json +0 -10
- gaia/eval/webapp/node_modules/es-errors/.eslintrc +0 -5
- gaia/eval/webapp/node_modules/es-errors/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/es-errors/CHANGELOG.md +0 -40
- gaia/eval/webapp/node_modules/es-errors/LICENSE +0 -21
- gaia/eval/webapp/node_modules/es-errors/README.md +0 -55
- gaia/eval/webapp/node_modules/es-errors/eval.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-errors/eval.js +0 -4
- gaia/eval/webapp/node_modules/es-errors/index.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-errors/index.js +0 -4
- gaia/eval/webapp/node_modules/es-errors/package.json +0 -80
- gaia/eval/webapp/node_modules/es-errors/range.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-errors/range.js +0 -4
- gaia/eval/webapp/node_modules/es-errors/ref.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-errors/ref.js +0 -4
- gaia/eval/webapp/node_modules/es-errors/syntax.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-errors/syntax.js +0 -4
- gaia/eval/webapp/node_modules/es-errors/test/index.js +0 -19
- gaia/eval/webapp/node_modules/es-errors/tsconfig.json +0 -49
- gaia/eval/webapp/node_modules/es-errors/type.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-errors/type.js +0 -4
- gaia/eval/webapp/node_modules/es-errors/uri.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-errors/uri.js +0 -4
- gaia/eval/webapp/node_modules/es-object-atoms/.eslintrc +0 -16
- gaia/eval/webapp/node_modules/es-object-atoms/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/es-object-atoms/CHANGELOG.md +0 -37
- gaia/eval/webapp/node_modules/es-object-atoms/LICENSE +0 -21
- gaia/eval/webapp/node_modules/es-object-atoms/README.md +0 -63
- gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.js +0 -11
- gaia/eval/webapp/node_modules/es-object-atoms/ToObject.d.ts +0 -7
- gaia/eval/webapp/node_modules/es-object-atoms/ToObject.js +0 -10
- gaia/eval/webapp/node_modules/es-object-atoms/index.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-object-atoms/index.js +0 -4
- gaia/eval/webapp/node_modules/es-object-atoms/isObject.d.ts +0 -3
- gaia/eval/webapp/node_modules/es-object-atoms/isObject.js +0 -6
- gaia/eval/webapp/node_modules/es-object-atoms/package.json +0 -80
- gaia/eval/webapp/node_modules/es-object-atoms/test/index.js +0 -38
- gaia/eval/webapp/node_modules/es-object-atoms/tsconfig.json +0 -6
- gaia/eval/webapp/node_modules/escape-html/LICENSE +0 -24
- gaia/eval/webapp/node_modules/escape-html/Readme.md +0 -43
- gaia/eval/webapp/node_modules/escape-html/index.js +0 -78
- gaia/eval/webapp/node_modules/escape-html/package.json +0 -24
- gaia/eval/webapp/node_modules/etag/HISTORY.md +0 -83
- gaia/eval/webapp/node_modules/etag/LICENSE +0 -22
- gaia/eval/webapp/node_modules/etag/README.md +0 -159
- gaia/eval/webapp/node_modules/etag/index.js +0 -131
- gaia/eval/webapp/node_modules/etag/package.json +0 -47
- gaia/eval/webapp/node_modules/express/History.md +0 -3656
- gaia/eval/webapp/node_modules/express/LICENSE +0 -24
- gaia/eval/webapp/node_modules/express/Readme.md +0 -260
- gaia/eval/webapp/node_modules/express/index.js +0 -11
- gaia/eval/webapp/node_modules/express/lib/application.js +0 -661
- gaia/eval/webapp/node_modules/express/lib/express.js +0 -116
- gaia/eval/webapp/node_modules/express/lib/middleware/init.js +0 -43
- gaia/eval/webapp/node_modules/express/lib/middleware/query.js +0 -47
- gaia/eval/webapp/node_modules/express/lib/request.js +0 -525
- gaia/eval/webapp/node_modules/express/lib/response.js +0 -1179
- gaia/eval/webapp/node_modules/express/lib/router/index.js +0 -673
- gaia/eval/webapp/node_modules/express/lib/router/layer.js +0 -181
- gaia/eval/webapp/node_modules/express/lib/router/route.js +0 -230
- gaia/eval/webapp/node_modules/express/lib/utils.js +0 -303
- gaia/eval/webapp/node_modules/express/lib/view.js +0 -182
- gaia/eval/webapp/node_modules/express/package.json +0 -102
- gaia/eval/webapp/node_modules/finalhandler/HISTORY.md +0 -210
- gaia/eval/webapp/node_modules/finalhandler/LICENSE +0 -22
- gaia/eval/webapp/node_modules/finalhandler/README.md +0 -147
- gaia/eval/webapp/node_modules/finalhandler/SECURITY.md +0 -25
- gaia/eval/webapp/node_modules/finalhandler/index.js +0 -341
- gaia/eval/webapp/node_modules/finalhandler/package.json +0 -47
- gaia/eval/webapp/node_modules/forwarded/HISTORY.md +0 -21
- gaia/eval/webapp/node_modules/forwarded/LICENSE +0 -22
- gaia/eval/webapp/node_modules/forwarded/README.md +0 -57
- gaia/eval/webapp/node_modules/forwarded/index.js +0 -90
- gaia/eval/webapp/node_modules/forwarded/package.json +0 -45
- gaia/eval/webapp/node_modules/fresh/HISTORY.md +0 -70
- gaia/eval/webapp/node_modules/fresh/LICENSE +0 -23
- gaia/eval/webapp/node_modules/fresh/README.md +0 -119
- gaia/eval/webapp/node_modules/fresh/index.js +0 -137
- gaia/eval/webapp/node_modules/fresh/package.json +0 -46
- gaia/eval/webapp/node_modules/fs/README.md +0 -9
- gaia/eval/webapp/node_modules/fs/package.json +0 -20
- gaia/eval/webapp/node_modules/function-bind/.eslintrc +0 -21
- gaia/eval/webapp/node_modules/function-bind/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/function-bind/.github/SECURITY.md +0 -3
- gaia/eval/webapp/node_modules/function-bind/.nycrc +0 -13
- gaia/eval/webapp/node_modules/function-bind/CHANGELOG.md +0 -136
- gaia/eval/webapp/node_modules/function-bind/LICENSE +0 -20
- gaia/eval/webapp/node_modules/function-bind/README.md +0 -46
- gaia/eval/webapp/node_modules/function-bind/implementation.js +0 -84
- gaia/eval/webapp/node_modules/function-bind/index.js +0 -5
- gaia/eval/webapp/node_modules/function-bind/package.json +0 -87
- gaia/eval/webapp/node_modules/function-bind/test/.eslintrc +0 -9
- gaia/eval/webapp/node_modules/function-bind/test/index.js +0 -252
- gaia/eval/webapp/node_modules/get-intrinsic/.eslintrc +0 -42
- gaia/eval/webapp/node_modules/get-intrinsic/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/get-intrinsic/.nycrc +0 -9
- gaia/eval/webapp/node_modules/get-intrinsic/CHANGELOG.md +0 -186
- gaia/eval/webapp/node_modules/get-intrinsic/LICENSE +0 -21
- gaia/eval/webapp/node_modules/get-intrinsic/README.md +0 -71
- gaia/eval/webapp/node_modules/get-intrinsic/index.js +0 -378
- gaia/eval/webapp/node_modules/get-intrinsic/package.json +0 -97
- gaia/eval/webapp/node_modules/get-intrinsic/test/GetIntrinsic.js +0 -274
- gaia/eval/webapp/node_modules/get-proto/.eslintrc +0 -10
- gaia/eval/webapp/node_modules/get-proto/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/get-proto/.nycrc +0 -9
- gaia/eval/webapp/node_modules/get-proto/CHANGELOG.md +0 -21
- gaia/eval/webapp/node_modules/get-proto/LICENSE +0 -21
- gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.d.ts +0 -5
- gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.js +0 -6
- gaia/eval/webapp/node_modules/get-proto/README.md +0 -50
- gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +0 -3
- gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.js +0 -4
- gaia/eval/webapp/node_modules/get-proto/index.d.ts +0 -5
- gaia/eval/webapp/node_modules/get-proto/index.js +0 -27
- gaia/eval/webapp/node_modules/get-proto/package.json +0 -81
- gaia/eval/webapp/node_modules/get-proto/test/index.js +0 -68
- gaia/eval/webapp/node_modules/get-proto/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/gopd/.eslintrc +0 -16
- gaia/eval/webapp/node_modules/gopd/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/gopd/CHANGELOG.md +0 -45
- gaia/eval/webapp/node_modules/gopd/LICENSE +0 -21
- gaia/eval/webapp/node_modules/gopd/README.md +0 -40
- gaia/eval/webapp/node_modules/gopd/gOPD.d.ts +0 -1
- gaia/eval/webapp/node_modules/gopd/gOPD.js +0 -4
- gaia/eval/webapp/node_modules/gopd/index.d.ts +0 -5
- gaia/eval/webapp/node_modules/gopd/index.js +0 -15
- gaia/eval/webapp/node_modules/gopd/package.json +0 -77
- gaia/eval/webapp/node_modules/gopd/test/index.js +0 -36
- gaia/eval/webapp/node_modules/gopd/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/has-symbols/.eslintrc +0 -11
- gaia/eval/webapp/node_modules/has-symbols/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/has-symbols/.nycrc +0 -9
- gaia/eval/webapp/node_modules/has-symbols/CHANGELOG.md +0 -91
- gaia/eval/webapp/node_modules/has-symbols/LICENSE +0 -21
- gaia/eval/webapp/node_modules/has-symbols/README.md +0 -46
- gaia/eval/webapp/node_modules/has-symbols/index.d.ts +0 -3
- gaia/eval/webapp/node_modules/has-symbols/index.js +0 -14
- gaia/eval/webapp/node_modules/has-symbols/package.json +0 -111
- gaia/eval/webapp/node_modules/has-symbols/shams.d.ts +0 -3
- gaia/eval/webapp/node_modules/has-symbols/shams.js +0 -45
- gaia/eval/webapp/node_modules/has-symbols/test/index.js +0 -22
- gaia/eval/webapp/node_modules/has-symbols/test/shams/core-js.js +0 -29
- gaia/eval/webapp/node_modules/has-symbols/test/shams/get-own-property-symbols.js +0 -29
- gaia/eval/webapp/node_modules/has-symbols/test/tests.js +0 -58
- gaia/eval/webapp/node_modules/has-symbols/tsconfig.json +0 -10
- gaia/eval/webapp/node_modules/hasown/.eslintrc +0 -5
- gaia/eval/webapp/node_modules/hasown/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/hasown/.nycrc +0 -13
- gaia/eval/webapp/node_modules/hasown/CHANGELOG.md +0 -40
- gaia/eval/webapp/node_modules/hasown/LICENSE +0 -21
- gaia/eval/webapp/node_modules/hasown/README.md +0 -40
- gaia/eval/webapp/node_modules/hasown/index.d.ts +0 -3
- gaia/eval/webapp/node_modules/hasown/index.js +0 -8
- gaia/eval/webapp/node_modules/hasown/package.json +0 -92
- gaia/eval/webapp/node_modules/hasown/tsconfig.json +0 -6
- gaia/eval/webapp/node_modules/http-errors/HISTORY.md +0 -180
- gaia/eval/webapp/node_modules/http-errors/LICENSE +0 -23
- gaia/eval/webapp/node_modules/http-errors/README.md +0 -169
- gaia/eval/webapp/node_modules/http-errors/index.js +0 -289
- gaia/eval/webapp/node_modules/http-errors/package.json +0 -50
- gaia/eval/webapp/node_modules/iconv-lite/Changelog.md +0 -162
- gaia/eval/webapp/node_modules/iconv-lite/LICENSE +0 -21
- gaia/eval/webapp/node_modules/iconv-lite/README.md +0 -156
- gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-codec.js +0 -555
- gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-data.js +0 -176
- gaia/eval/webapp/node_modules/iconv-lite/encodings/index.js +0 -22
- gaia/eval/webapp/node_modules/iconv-lite/encodings/internal.js +0 -188
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-codec.js +0 -72
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data-generated.js +0 -451
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data.js +0 -174
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/big5-added.json +0 -122
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp936.json +0 -264
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp949.json +0 -273
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp950.json +0 -177
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/eucjp.json +0 -182
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +0 -1
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gbk-added.json +0 -55
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/shiftjis.json +0 -125
- gaia/eval/webapp/node_modules/iconv-lite/encodings/utf16.js +0 -177
- gaia/eval/webapp/node_modules/iconv-lite/encodings/utf7.js +0 -290
- gaia/eval/webapp/node_modules/iconv-lite/lib/bom-handling.js +0 -52
- gaia/eval/webapp/node_modules/iconv-lite/lib/extend-node.js +0 -217
- gaia/eval/webapp/node_modules/iconv-lite/lib/index.d.ts +0 -24
- gaia/eval/webapp/node_modules/iconv-lite/lib/index.js +0 -153
- gaia/eval/webapp/node_modules/iconv-lite/lib/streams.js +0 -121
- gaia/eval/webapp/node_modules/iconv-lite/package.json +0 -46
- gaia/eval/webapp/node_modules/inherits/LICENSE +0 -16
- gaia/eval/webapp/node_modules/inherits/README.md +0 -42
- gaia/eval/webapp/node_modules/inherits/inherits.js +0 -9
- gaia/eval/webapp/node_modules/inherits/inherits_browser.js +0 -27
- gaia/eval/webapp/node_modules/inherits/package.json +0 -29
- gaia/eval/webapp/node_modules/ipaddr.js/LICENSE +0 -19
- gaia/eval/webapp/node_modules/ipaddr.js/README.md +0 -233
- gaia/eval/webapp/node_modules/ipaddr.js/ipaddr.min.js +0 -1
- gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js +0 -673
- gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +0 -68
- gaia/eval/webapp/node_modules/ipaddr.js/package.json +0 -35
- gaia/eval/webapp/node_modules/math-intrinsics/.eslintrc +0 -16
- gaia/eval/webapp/node_modules/math-intrinsics/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/math-intrinsics/CHANGELOG.md +0 -24
- gaia/eval/webapp/node_modules/math-intrinsics/LICENSE +0 -21
- gaia/eval/webapp/node_modules/math-intrinsics/README.md +0 -50
- gaia/eval/webapp/node_modules/math-intrinsics/abs.d.ts +0 -1
- gaia/eval/webapp/node_modules/math-intrinsics/abs.js +0 -4
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.js +0 -4
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.js +0 -5
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.js +0 -5
- gaia/eval/webapp/node_modules/math-intrinsics/floor.d.ts +0 -1
- gaia/eval/webapp/node_modules/math-intrinsics/floor.js +0 -4
- gaia/eval/webapp/node_modules/math-intrinsics/isFinite.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/isFinite.js +0 -12
- gaia/eval/webapp/node_modules/math-intrinsics/isInteger.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/isInteger.js +0 -16
- gaia/eval/webapp/node_modules/math-intrinsics/isNaN.d.ts +0 -1
- gaia/eval/webapp/node_modules/math-intrinsics/isNaN.js +0 -6
- gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.js +0 -6
- gaia/eval/webapp/node_modules/math-intrinsics/max.d.ts +0 -1
- gaia/eval/webapp/node_modules/math-intrinsics/max.js +0 -4
- gaia/eval/webapp/node_modules/math-intrinsics/min.d.ts +0 -1
- gaia/eval/webapp/node_modules/math-intrinsics/min.js +0 -4
- gaia/eval/webapp/node_modules/math-intrinsics/mod.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/mod.js +0 -9
- gaia/eval/webapp/node_modules/math-intrinsics/package.json +0 -86
- gaia/eval/webapp/node_modules/math-intrinsics/pow.d.ts +0 -1
- gaia/eval/webapp/node_modules/math-intrinsics/pow.js +0 -4
- gaia/eval/webapp/node_modules/math-intrinsics/round.d.ts +0 -1
- gaia/eval/webapp/node_modules/math-intrinsics/round.js +0 -4
- gaia/eval/webapp/node_modules/math-intrinsics/sign.d.ts +0 -3
- gaia/eval/webapp/node_modules/math-intrinsics/sign.js +0 -11
- gaia/eval/webapp/node_modules/math-intrinsics/test/index.js +0 -192
- gaia/eval/webapp/node_modules/math-intrinsics/tsconfig.json +0 -3
- gaia/eval/webapp/node_modules/media-typer/HISTORY.md +0 -22
- gaia/eval/webapp/node_modules/media-typer/LICENSE +0 -22
- gaia/eval/webapp/node_modules/media-typer/README.md +0 -81
- gaia/eval/webapp/node_modules/media-typer/index.js +0 -270
- gaia/eval/webapp/node_modules/media-typer/package.json +0 -26
- gaia/eval/webapp/node_modules/merge-descriptors/HISTORY.md +0 -21
- gaia/eval/webapp/node_modules/merge-descriptors/LICENSE +0 -23
- gaia/eval/webapp/node_modules/merge-descriptors/README.md +0 -49
- gaia/eval/webapp/node_modules/merge-descriptors/index.js +0 -60
- gaia/eval/webapp/node_modules/merge-descriptors/package.json +0 -39
- gaia/eval/webapp/node_modules/methods/HISTORY.md +0 -29
- gaia/eval/webapp/node_modules/methods/LICENSE +0 -24
- gaia/eval/webapp/node_modules/methods/README.md +0 -51
- gaia/eval/webapp/node_modules/methods/index.js +0 -69
- gaia/eval/webapp/node_modules/methods/package.json +0 -36
- gaia/eval/webapp/node_modules/mime/.npmignore +0 -0
- gaia/eval/webapp/node_modules/mime/CHANGELOG.md +0 -164
- gaia/eval/webapp/node_modules/mime/LICENSE +0 -21
- gaia/eval/webapp/node_modules/mime/README.md +0 -90
- gaia/eval/webapp/node_modules/mime/cli.js +0 -8
- gaia/eval/webapp/node_modules/mime/mime.js +0 -108
- gaia/eval/webapp/node_modules/mime/package.json +0 -44
- gaia/eval/webapp/node_modules/mime/src/build.js +0 -53
- gaia/eval/webapp/node_modules/mime/src/test.js +0 -60
- gaia/eval/webapp/node_modules/mime/types.json +0 -1
- gaia/eval/webapp/node_modules/mime-db/HISTORY.md +0 -507
- gaia/eval/webapp/node_modules/mime-db/LICENSE +0 -23
- gaia/eval/webapp/node_modules/mime-db/README.md +0 -100
- gaia/eval/webapp/node_modules/mime-db/db.json +0 -8519
- gaia/eval/webapp/node_modules/mime-db/index.js +0 -12
- gaia/eval/webapp/node_modules/mime-db/package.json +0 -60
- gaia/eval/webapp/node_modules/mime-types/HISTORY.md +0 -397
- gaia/eval/webapp/node_modules/mime-types/LICENSE +0 -23
- gaia/eval/webapp/node_modules/mime-types/README.md +0 -113
- gaia/eval/webapp/node_modules/mime-types/index.js +0 -188
- gaia/eval/webapp/node_modules/mime-types/package.json +0 -44
- gaia/eval/webapp/node_modules/ms/index.js +0 -152
- gaia/eval/webapp/node_modules/ms/license.md +0 -21
- gaia/eval/webapp/node_modules/ms/package.json +0 -37
- gaia/eval/webapp/node_modules/ms/readme.md +0 -51
- gaia/eval/webapp/node_modules/negotiator/HISTORY.md +0 -108
- gaia/eval/webapp/node_modules/negotiator/LICENSE +0 -24
- gaia/eval/webapp/node_modules/negotiator/README.md +0 -203
- gaia/eval/webapp/node_modules/negotiator/index.js +0 -82
- gaia/eval/webapp/node_modules/negotiator/lib/charset.js +0 -169
- gaia/eval/webapp/node_modules/negotiator/lib/encoding.js +0 -184
- gaia/eval/webapp/node_modules/negotiator/lib/language.js +0 -179
- gaia/eval/webapp/node_modules/negotiator/lib/mediaType.js +0 -294
- gaia/eval/webapp/node_modules/negotiator/package.json +0 -42
- gaia/eval/webapp/node_modules/object-inspect/.eslintrc +0 -53
- gaia/eval/webapp/node_modules/object-inspect/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/object-inspect/.nycrc +0 -13
- gaia/eval/webapp/node_modules/object-inspect/CHANGELOG.md +0 -424
- gaia/eval/webapp/node_modules/object-inspect/LICENSE +0 -21
- gaia/eval/webapp/node_modules/object-inspect/example/all.js +0 -23
- gaia/eval/webapp/node_modules/object-inspect/example/circular.js +0 -6
- gaia/eval/webapp/node_modules/object-inspect/example/fn.js +0 -5
- gaia/eval/webapp/node_modules/object-inspect/example/inspect.js +0 -10
- gaia/eval/webapp/node_modules/object-inspect/index.js +0 -544
- gaia/eval/webapp/node_modules/object-inspect/package-support.json +0 -20
- gaia/eval/webapp/node_modules/object-inspect/package.json +0 -105
- gaia/eval/webapp/node_modules/object-inspect/readme.markdown +0 -84
- gaia/eval/webapp/node_modules/object-inspect/test/bigint.js +0 -58
- gaia/eval/webapp/node_modules/object-inspect/test/browser/dom.js +0 -15
- gaia/eval/webapp/node_modules/object-inspect/test/circular.js +0 -16
- gaia/eval/webapp/node_modules/object-inspect/test/deep.js +0 -12
- gaia/eval/webapp/node_modules/object-inspect/test/element.js +0 -53
- gaia/eval/webapp/node_modules/object-inspect/test/err.js +0 -48
- gaia/eval/webapp/node_modules/object-inspect/test/fakes.js +0 -29
- gaia/eval/webapp/node_modules/object-inspect/test/fn.js +0 -76
- gaia/eval/webapp/node_modules/object-inspect/test/global.js +0 -17
- gaia/eval/webapp/node_modules/object-inspect/test/has.js +0 -15
- gaia/eval/webapp/node_modules/object-inspect/test/holes.js +0 -15
- gaia/eval/webapp/node_modules/object-inspect/test/indent-option.js +0 -271
- gaia/eval/webapp/node_modules/object-inspect/test/inspect.js +0 -139
- gaia/eval/webapp/node_modules/object-inspect/test/lowbyte.js +0 -12
- gaia/eval/webapp/node_modules/object-inspect/test/number.js +0 -58
- gaia/eval/webapp/node_modules/object-inspect/test/quoteStyle.js +0 -26
- gaia/eval/webapp/node_modules/object-inspect/test/toStringTag.js +0 -40
- gaia/eval/webapp/node_modules/object-inspect/test/undef.js +0 -12
- gaia/eval/webapp/node_modules/object-inspect/test/values.js +0 -261
- gaia/eval/webapp/node_modules/object-inspect/test-core-js.js +0 -26
- gaia/eval/webapp/node_modules/object-inspect/util.inspect.js +0 -1
- gaia/eval/webapp/node_modules/on-finished/HISTORY.md +0 -98
- gaia/eval/webapp/node_modules/on-finished/LICENSE +0 -23
- gaia/eval/webapp/node_modules/on-finished/README.md +0 -162
- gaia/eval/webapp/node_modules/on-finished/index.js +0 -234
- gaia/eval/webapp/node_modules/on-finished/package.json +0 -39
- gaia/eval/webapp/node_modules/parseurl/HISTORY.md +0 -58
- gaia/eval/webapp/node_modules/parseurl/LICENSE +0 -24
- gaia/eval/webapp/node_modules/parseurl/README.md +0 -133
- gaia/eval/webapp/node_modules/parseurl/index.js +0 -158
- gaia/eval/webapp/node_modules/parseurl/package.json +0 -40
- gaia/eval/webapp/node_modules/path/.npmignore +0 -1
- gaia/eval/webapp/node_modules/path/LICENSE +0 -18
- gaia/eval/webapp/node_modules/path/README.md +0 -15
- gaia/eval/webapp/node_modules/path/package.json +0 -24
- gaia/eval/webapp/node_modules/path/path.js +0 -628
- gaia/eval/webapp/node_modules/path-to-regexp/LICENSE +0 -21
- gaia/eval/webapp/node_modules/path-to-regexp/Readme.md +0 -35
- gaia/eval/webapp/node_modules/path-to-regexp/index.js +0 -156
- gaia/eval/webapp/node_modules/path-to-regexp/package.json +0 -30
- gaia/eval/webapp/node_modules/process/.eslintrc +0 -21
- gaia/eval/webapp/node_modules/process/LICENSE +0 -22
- gaia/eval/webapp/node_modules/process/README.md +0 -26
- gaia/eval/webapp/node_modules/process/browser.js +0 -184
- gaia/eval/webapp/node_modules/process/index.js +0 -2
- gaia/eval/webapp/node_modules/process/package.json +0 -27
- gaia/eval/webapp/node_modules/process/test.js +0 -199
- gaia/eval/webapp/node_modules/proxy-addr/HISTORY.md +0 -161
- gaia/eval/webapp/node_modules/proxy-addr/LICENSE +0 -22
- gaia/eval/webapp/node_modules/proxy-addr/README.md +0 -139
- gaia/eval/webapp/node_modules/proxy-addr/index.js +0 -327
- gaia/eval/webapp/node_modules/proxy-addr/package.json +0 -47
- gaia/eval/webapp/node_modules/qs/.editorconfig +0 -46
- gaia/eval/webapp/node_modules/qs/.eslintrc +0 -38
- gaia/eval/webapp/node_modules/qs/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/qs/.nycrc +0 -13
- gaia/eval/webapp/node_modules/qs/CHANGELOG.md +0 -600
- gaia/eval/webapp/node_modules/qs/LICENSE.md +0 -29
- gaia/eval/webapp/node_modules/qs/README.md +0 -709
- gaia/eval/webapp/node_modules/qs/dist/qs.js +0 -90
- gaia/eval/webapp/node_modules/qs/lib/formats.js +0 -23
- gaia/eval/webapp/node_modules/qs/lib/index.js +0 -11
- gaia/eval/webapp/node_modules/qs/lib/parse.js +0 -296
- gaia/eval/webapp/node_modules/qs/lib/stringify.js +0 -351
- gaia/eval/webapp/node_modules/qs/lib/utils.js +0 -265
- gaia/eval/webapp/node_modules/qs/package.json +0 -91
- gaia/eval/webapp/node_modules/qs/test/empty-keys-cases.js +0 -267
- gaia/eval/webapp/node_modules/qs/test/parse.js +0 -1170
- gaia/eval/webapp/node_modules/qs/test/stringify.js +0 -1298
- gaia/eval/webapp/node_modules/qs/test/utils.js +0 -136
- gaia/eval/webapp/node_modules/range-parser/HISTORY.md +0 -56
- gaia/eval/webapp/node_modules/range-parser/LICENSE +0 -23
- gaia/eval/webapp/node_modules/range-parser/README.md +0 -84
- gaia/eval/webapp/node_modules/range-parser/index.js +0 -162
- gaia/eval/webapp/node_modules/range-parser/package.json +0 -44
- gaia/eval/webapp/node_modules/raw-body/HISTORY.md +0 -308
- gaia/eval/webapp/node_modules/raw-body/LICENSE +0 -22
- gaia/eval/webapp/node_modules/raw-body/README.md +0 -223
- gaia/eval/webapp/node_modules/raw-body/SECURITY.md +0 -24
- gaia/eval/webapp/node_modules/raw-body/index.d.ts +0 -87
- gaia/eval/webapp/node_modules/raw-body/index.js +0 -336
- gaia/eval/webapp/node_modules/raw-body/package.json +0 -49
- gaia/eval/webapp/node_modules/safe-buffer/LICENSE +0 -21
- gaia/eval/webapp/node_modules/safe-buffer/README.md +0 -584
- gaia/eval/webapp/node_modules/safe-buffer/index.d.ts +0 -187
- gaia/eval/webapp/node_modules/safe-buffer/index.js +0 -65
- gaia/eval/webapp/node_modules/safe-buffer/package.json +0 -51
- gaia/eval/webapp/node_modules/safer-buffer/LICENSE +0 -21
- gaia/eval/webapp/node_modules/safer-buffer/Porting-Buffer.md +0 -268
- gaia/eval/webapp/node_modules/safer-buffer/Readme.md +0 -156
- gaia/eval/webapp/node_modules/safer-buffer/dangerous.js +0 -58
- gaia/eval/webapp/node_modules/safer-buffer/package.json +0 -34
- gaia/eval/webapp/node_modules/safer-buffer/safer.js +0 -77
- gaia/eval/webapp/node_modules/safer-buffer/tests.js +0 -406
- gaia/eval/webapp/node_modules/send/HISTORY.md +0 -526
- gaia/eval/webapp/node_modules/send/LICENSE +0 -23
- gaia/eval/webapp/node_modules/send/README.md +0 -327
- gaia/eval/webapp/node_modules/send/SECURITY.md +0 -24
- gaia/eval/webapp/node_modules/send/index.js +0 -1142
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/HISTORY.md +0 -14
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/LICENSE +0 -22
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/README.md +0 -128
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/index.js +0 -60
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/package.json +0 -40
- gaia/eval/webapp/node_modules/send/node_modules/ms/index.js +0 -162
- gaia/eval/webapp/node_modules/send/node_modules/ms/license.md +0 -21
- gaia/eval/webapp/node_modules/send/node_modules/ms/package.json +0 -38
- gaia/eval/webapp/node_modules/send/node_modules/ms/readme.md +0 -59
- gaia/eval/webapp/node_modules/send/package.json +0 -62
- gaia/eval/webapp/node_modules/serve-static/HISTORY.md +0 -487
- gaia/eval/webapp/node_modules/serve-static/LICENSE +0 -25
- gaia/eval/webapp/node_modules/serve-static/README.md +0 -257
- gaia/eval/webapp/node_modules/serve-static/index.js +0 -209
- gaia/eval/webapp/node_modules/serve-static/package.json +0 -42
- gaia/eval/webapp/node_modules/setprototypeof/LICENSE +0 -13
- gaia/eval/webapp/node_modules/setprototypeof/README.md +0 -31
- gaia/eval/webapp/node_modules/setprototypeof/index.d.ts +0 -2
- gaia/eval/webapp/node_modules/setprototypeof/index.js +0 -17
- gaia/eval/webapp/node_modules/setprototypeof/package.json +0 -38
- gaia/eval/webapp/node_modules/setprototypeof/test/index.js +0 -24
- gaia/eval/webapp/node_modules/side-channel/.editorconfig +0 -9
- gaia/eval/webapp/node_modules/side-channel/.eslintrc +0 -12
- gaia/eval/webapp/node_modules/side-channel/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/side-channel/.nycrc +0 -13
- gaia/eval/webapp/node_modules/side-channel/CHANGELOG.md +0 -110
- gaia/eval/webapp/node_modules/side-channel/LICENSE +0 -21
- gaia/eval/webapp/node_modules/side-channel/README.md +0 -61
- gaia/eval/webapp/node_modules/side-channel/index.d.ts +0 -14
- gaia/eval/webapp/node_modules/side-channel/index.js +0 -43
- gaia/eval/webapp/node_modules/side-channel/package.json +0 -85
- gaia/eval/webapp/node_modules/side-channel/test/index.js +0 -104
- gaia/eval/webapp/node_modules/side-channel/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/side-channel-list/.editorconfig +0 -9
- gaia/eval/webapp/node_modules/side-channel-list/.eslintrc +0 -11
- gaia/eval/webapp/node_modules/side-channel-list/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/side-channel-list/.nycrc +0 -13
- gaia/eval/webapp/node_modules/side-channel-list/CHANGELOG.md +0 -15
- gaia/eval/webapp/node_modules/side-channel-list/LICENSE +0 -21
- gaia/eval/webapp/node_modules/side-channel-list/README.md +0 -62
- gaia/eval/webapp/node_modules/side-channel-list/index.d.ts +0 -13
- gaia/eval/webapp/node_modules/side-channel-list/index.js +0 -113
- gaia/eval/webapp/node_modules/side-channel-list/list.d.ts +0 -14
- gaia/eval/webapp/node_modules/side-channel-list/package.json +0 -77
- gaia/eval/webapp/node_modules/side-channel-list/test/index.js +0 -104
- gaia/eval/webapp/node_modules/side-channel-list/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/side-channel-map/.editorconfig +0 -9
- gaia/eval/webapp/node_modules/side-channel-map/.eslintrc +0 -11
- gaia/eval/webapp/node_modules/side-channel-map/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/side-channel-map/.nycrc +0 -13
- gaia/eval/webapp/node_modules/side-channel-map/CHANGELOG.md +0 -22
- gaia/eval/webapp/node_modules/side-channel-map/LICENSE +0 -21
- gaia/eval/webapp/node_modules/side-channel-map/README.md +0 -62
- gaia/eval/webapp/node_modules/side-channel-map/index.d.ts +0 -15
- gaia/eval/webapp/node_modules/side-channel-map/index.js +0 -68
- gaia/eval/webapp/node_modules/side-channel-map/package.json +0 -80
- gaia/eval/webapp/node_modules/side-channel-map/test/index.js +0 -114
- gaia/eval/webapp/node_modules/side-channel-map/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/side-channel-weakmap/.editorconfig +0 -9
- gaia/eval/webapp/node_modules/side-channel-weakmap/.eslintrc +0 -12
- gaia/eval/webapp/node_modules/side-channel-weakmap/.github/FUNDING.yml +0 -12
- gaia/eval/webapp/node_modules/side-channel-weakmap/.nycrc +0 -13
- gaia/eval/webapp/node_modules/side-channel-weakmap/CHANGELOG.md +0 -28
- gaia/eval/webapp/node_modules/side-channel-weakmap/LICENSE +0 -21
- gaia/eval/webapp/node_modules/side-channel-weakmap/README.md +0 -62
- gaia/eval/webapp/node_modules/side-channel-weakmap/index.d.ts +0 -15
- gaia/eval/webapp/node_modules/side-channel-weakmap/index.js +0 -84
- gaia/eval/webapp/node_modules/side-channel-weakmap/package.json +0 -87
- gaia/eval/webapp/node_modules/side-channel-weakmap/test/index.js +0 -114
- gaia/eval/webapp/node_modules/side-channel-weakmap/tsconfig.json +0 -9
- gaia/eval/webapp/node_modules/statuses/HISTORY.md +0 -82
- gaia/eval/webapp/node_modules/statuses/LICENSE +0 -23
- gaia/eval/webapp/node_modules/statuses/README.md +0 -136
- gaia/eval/webapp/node_modules/statuses/codes.json +0 -65
- gaia/eval/webapp/node_modules/statuses/index.js +0 -146
- gaia/eval/webapp/node_modules/statuses/package.json +0 -49
- gaia/eval/webapp/node_modules/toidentifier/HISTORY.md +0 -9
- gaia/eval/webapp/node_modules/toidentifier/LICENSE +0 -21
- gaia/eval/webapp/node_modules/toidentifier/README.md +0 -61
- gaia/eval/webapp/node_modules/toidentifier/index.js +0 -32
- gaia/eval/webapp/node_modules/toidentifier/package.json +0 -38
- gaia/eval/webapp/node_modules/type-is/HISTORY.md +0 -259
- gaia/eval/webapp/node_modules/type-is/LICENSE +0 -23
- gaia/eval/webapp/node_modules/type-is/README.md +0 -170
- gaia/eval/webapp/node_modules/type-is/index.js +0 -266
- gaia/eval/webapp/node_modules/type-is/package.json +0 -45
- gaia/eval/webapp/node_modules/unpipe/HISTORY.md +0 -4
- gaia/eval/webapp/node_modules/unpipe/LICENSE +0 -22
- gaia/eval/webapp/node_modules/unpipe/README.md +0 -43
- gaia/eval/webapp/node_modules/unpipe/index.js +0 -69
- gaia/eval/webapp/node_modules/unpipe/package.json +0 -27
- gaia/eval/webapp/node_modules/util/LICENSE +0 -18
- gaia/eval/webapp/node_modules/util/README.md +0 -15
- gaia/eval/webapp/node_modules/util/node_modules/inherits/LICENSE +0 -16
- gaia/eval/webapp/node_modules/util/node_modules/inherits/README.md +0 -42
- gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits.js +0 -7
- gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits_browser.js +0 -23
- gaia/eval/webapp/node_modules/util/node_modules/inherits/package.json +0 -29
- gaia/eval/webapp/node_modules/util/package.json +0 -35
- gaia/eval/webapp/node_modules/util/support/isBuffer.js +0 -3
- gaia/eval/webapp/node_modules/util/support/isBufferBrowser.js +0 -6
- gaia/eval/webapp/node_modules/util/util.js +0 -586
- gaia/eval/webapp/node_modules/utils-merge/.npmignore +0 -9
- gaia/eval/webapp/node_modules/utils-merge/LICENSE +0 -20
- gaia/eval/webapp/node_modules/utils-merge/README.md +0 -34
- gaia/eval/webapp/node_modules/utils-merge/index.js +0 -23
- gaia/eval/webapp/node_modules/utils-merge/package.json +0 -40
- gaia/eval/webapp/node_modules/vary/HISTORY.md +0 -39
- gaia/eval/webapp/node_modules/vary/LICENSE +0 -22
- gaia/eval/webapp/node_modules/vary/README.md +0 -101
- gaia/eval/webapp/node_modules/vary/index.js +0 -149
- gaia/eval/webapp/node_modules/vary/package.json +0 -43
- {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/WHEEL +0 -0
- {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/licenses/LICENSE.md +0 -0
- {amd_gaia-0.14.2.dist-info → amd_gaia-0.14.3.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
"""Assertion helpers for testing GAIA agents."""
|
|
5
|
+
|
|
6
|
+
from typing import Any, Dict, List, Optional, Union
|
|
7
|
+
|
|
8
|
+
from gaia.testing.mocks import MockLLMProvider, MockToolExecutor, MockVLMClient
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def assert_llm_called(
|
|
12
|
+
mock_llm: MockLLMProvider,
|
|
13
|
+
times: Optional[int] = None,
|
|
14
|
+
min_times: Optional[int] = None,
|
|
15
|
+
max_times: Optional[int] = None,
|
|
16
|
+
) -> None:
|
|
17
|
+
"""
|
|
18
|
+
Assert that the mock LLM was called.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
mock_llm: MockLLMProvider instance
|
|
22
|
+
times: Exact number of expected calls (optional)
|
|
23
|
+
min_times: Minimum number of calls (optional)
|
|
24
|
+
max_times: Maximum number of calls (optional)
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
AssertionError: If call count doesn't match expectations
|
|
28
|
+
|
|
29
|
+
Example:
|
|
30
|
+
from gaia.testing import MockLLMProvider, assert_llm_called
|
|
31
|
+
|
|
32
|
+
mock_llm = MockLLMProvider(responses=["Hello"])
|
|
33
|
+
mock_llm.generate("Test")
|
|
34
|
+
|
|
35
|
+
assert_llm_called(mock_llm) # At least once
|
|
36
|
+
assert_llm_called(mock_llm, times=1) # Exactly once
|
|
37
|
+
assert_llm_called(mock_llm, min_times=1, max_times=5) # Range
|
|
38
|
+
"""
|
|
39
|
+
call_count = mock_llm.call_count
|
|
40
|
+
|
|
41
|
+
if times is not None:
|
|
42
|
+
assert call_count == times, (
|
|
43
|
+
f"Expected LLM to be called {times} time(s), "
|
|
44
|
+
f"but was called {call_count} time(s)"
|
|
45
|
+
)
|
|
46
|
+
else:
|
|
47
|
+
if min_times is None and max_times is None:
|
|
48
|
+
# Just check it was called at least once
|
|
49
|
+
assert call_count > 0, "Expected LLM to be called at least once"
|
|
50
|
+
|
|
51
|
+
if min_times is not None:
|
|
52
|
+
assert call_count >= min_times, (
|
|
53
|
+
f"Expected LLM to be called at least {min_times} time(s), "
|
|
54
|
+
f"but was called {call_count} time(s)"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if max_times is not None:
|
|
58
|
+
assert call_count <= max_times, (
|
|
59
|
+
f"Expected LLM to be called at most {max_times} time(s), "
|
|
60
|
+
f"but was called {call_count} time(s)"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def assert_llm_prompt_contains(
|
|
65
|
+
mock_llm: MockLLMProvider,
|
|
66
|
+
text: str,
|
|
67
|
+
call_index: int = -1,
|
|
68
|
+
) -> None:
|
|
69
|
+
"""
|
|
70
|
+
Assert that an LLM prompt contains specific text.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
mock_llm: MockLLMProvider instance
|
|
74
|
+
text: Text that should be in the prompt
|
|
75
|
+
call_index: Which call to check (-1 = last call, 0 = first call)
|
|
76
|
+
|
|
77
|
+
Raises:
|
|
78
|
+
AssertionError: If text not found in prompt
|
|
79
|
+
|
|
80
|
+
Example:
|
|
81
|
+
assert_llm_prompt_contains(mock_llm, "customer")
|
|
82
|
+
assert_llm_prompt_contains(mock_llm, "search", call_index=0)
|
|
83
|
+
"""
|
|
84
|
+
assert mock_llm.call_history, "LLM was never called"
|
|
85
|
+
|
|
86
|
+
call = mock_llm.call_history[call_index]
|
|
87
|
+
prompt = call.get("prompt", "")
|
|
88
|
+
|
|
89
|
+
assert (
|
|
90
|
+
text in prompt
|
|
91
|
+
), f"Expected prompt to contain '{text}', but prompt was:\n{prompt[:500]}"
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def assert_vlm_called(
|
|
95
|
+
mock_vlm: MockVLMClient,
|
|
96
|
+
times: Optional[int] = None,
|
|
97
|
+
) -> None:
|
|
98
|
+
"""
|
|
99
|
+
Assert that the mock VLM was called.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
mock_vlm: MockVLMClient instance
|
|
103
|
+
times: Exact number of expected calls (optional)
|
|
104
|
+
|
|
105
|
+
Raises:
|
|
106
|
+
AssertionError: If call count doesn't match
|
|
107
|
+
|
|
108
|
+
Example:
|
|
109
|
+
assert_vlm_called(mock_vlm) # At least once
|
|
110
|
+
assert_vlm_called(mock_vlm, times=2) # Exactly twice
|
|
111
|
+
"""
|
|
112
|
+
call_count = mock_vlm.call_count
|
|
113
|
+
|
|
114
|
+
if times is not None:
|
|
115
|
+
assert call_count == times, (
|
|
116
|
+
f"Expected VLM to be called {times} time(s), "
|
|
117
|
+
f"but was called {call_count} time(s)"
|
|
118
|
+
)
|
|
119
|
+
else:
|
|
120
|
+
assert call_count > 0, "Expected VLM to be called at least once"
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def assert_tool_called(
|
|
124
|
+
executor: MockToolExecutor,
|
|
125
|
+
tool_name: str,
|
|
126
|
+
times: Optional[int] = None,
|
|
127
|
+
) -> None:
|
|
128
|
+
"""
|
|
129
|
+
Assert that a specific tool was called.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
executor: MockToolExecutor instance
|
|
133
|
+
tool_name: Name of the tool
|
|
134
|
+
times: Exact number of expected calls (optional)
|
|
135
|
+
|
|
136
|
+
Raises:
|
|
137
|
+
AssertionError: If tool wasn't called or count doesn't match
|
|
138
|
+
|
|
139
|
+
Example:
|
|
140
|
+
from gaia.testing import MockToolExecutor, assert_tool_called
|
|
141
|
+
|
|
142
|
+
executor = MockToolExecutor()
|
|
143
|
+
executor.execute("search", {"query": "test"})
|
|
144
|
+
|
|
145
|
+
assert_tool_called(executor, "search")
|
|
146
|
+
assert_tool_called(executor, "search", times=1)
|
|
147
|
+
"""
|
|
148
|
+
calls = executor.get_tool_calls(tool_name)
|
|
149
|
+
|
|
150
|
+
if times is not None:
|
|
151
|
+
assert len(calls) == times, (
|
|
152
|
+
f"Expected tool '{tool_name}' to be called {times} time(s), "
|
|
153
|
+
f"but was called {len(calls)} time(s)"
|
|
154
|
+
)
|
|
155
|
+
else:
|
|
156
|
+
assert len(calls) > 0, (
|
|
157
|
+
f"Expected tool '{tool_name}' to be called, but it was never called. "
|
|
158
|
+
f"Tools called: {executor.tool_names_called}"
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def assert_tool_args(
|
|
163
|
+
executor: MockToolExecutor,
|
|
164
|
+
tool_name: str,
|
|
165
|
+
expected_args: Dict[str, Any],
|
|
166
|
+
call_index: int = 0,
|
|
167
|
+
) -> None:
|
|
168
|
+
"""
|
|
169
|
+
Assert that a tool was called with specific arguments.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
executor: MockToolExecutor instance
|
|
173
|
+
tool_name: Name of the tool
|
|
174
|
+
expected_args: Expected arguments (subset matching)
|
|
175
|
+
call_index: Which call to check (0 = first call)
|
|
176
|
+
|
|
177
|
+
Raises:
|
|
178
|
+
AssertionError: If arguments don't match
|
|
179
|
+
|
|
180
|
+
Example:
|
|
181
|
+
executor.execute("search", {"query": "test", "limit": 10})
|
|
182
|
+
assert_tool_args(executor, "search", {"query": "test"})
|
|
183
|
+
"""
|
|
184
|
+
actual_args = executor.get_tool_args(tool_name, call_index)
|
|
185
|
+
|
|
186
|
+
assert (
|
|
187
|
+
actual_args is not None
|
|
188
|
+
), f"Tool '{tool_name}' was not called (or call_index {call_index} out of range)"
|
|
189
|
+
|
|
190
|
+
for key, expected_value in expected_args.items():
|
|
191
|
+
assert key in actual_args, (
|
|
192
|
+
f"Expected argument '{key}' not found in tool call. "
|
|
193
|
+
f"Actual args: {actual_args}"
|
|
194
|
+
)
|
|
195
|
+
assert actual_args[key] == expected_value, (
|
|
196
|
+
f"Argument '{key}' mismatch. "
|
|
197
|
+
f"Expected: {expected_value}, Actual: {actual_args[key]}"
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def assert_result_has_keys(
|
|
202
|
+
result: Dict[str, Any],
|
|
203
|
+
keys: List[str],
|
|
204
|
+
) -> None:
|
|
205
|
+
"""
|
|
206
|
+
Assert that a result dictionary has specific keys.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
result: Result dictionary to check
|
|
210
|
+
keys: List of required keys
|
|
211
|
+
|
|
212
|
+
Raises:
|
|
213
|
+
AssertionError: If any key is missing
|
|
214
|
+
|
|
215
|
+
Example:
|
|
216
|
+
result = agent.process_query("test")
|
|
217
|
+
assert_result_has_keys(result, ["answer", "steps_taken"])
|
|
218
|
+
"""
|
|
219
|
+
assert isinstance(
|
|
220
|
+
result, dict
|
|
221
|
+
), f"Expected result to be dict, got {type(result).__name__}"
|
|
222
|
+
|
|
223
|
+
missing_keys = [key for key in keys if key not in result]
|
|
224
|
+
if missing_keys:
|
|
225
|
+
raise AssertionError(
|
|
226
|
+
f"Result missing required keys: {missing_keys}. "
|
|
227
|
+
f"Available keys: {list(result.keys())}"
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def assert_result_value(
|
|
232
|
+
result: Dict[str, Any],
|
|
233
|
+
key: str,
|
|
234
|
+
expected: Any,
|
|
235
|
+
) -> None:
|
|
236
|
+
"""
|
|
237
|
+
Assert that a result has a specific value for a key.
|
|
238
|
+
|
|
239
|
+
Args:
|
|
240
|
+
result: Result dictionary
|
|
241
|
+
key: Key to check
|
|
242
|
+
expected: Expected value
|
|
243
|
+
|
|
244
|
+
Raises:
|
|
245
|
+
AssertionError: If value doesn't match
|
|
246
|
+
|
|
247
|
+
Example:
|
|
248
|
+
assert_result_value(result, "status", "success")
|
|
249
|
+
"""
|
|
250
|
+
assert key in result, f"Key '{key}' not found in result: {list(result.keys())}"
|
|
251
|
+
actual = result[key]
|
|
252
|
+
assert (
|
|
253
|
+
actual == expected
|
|
254
|
+
), f"Value mismatch for key '{key}'. Expected: {expected}, Actual: {actual}"
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def assert_agent_completed(
|
|
258
|
+
result: Union[Dict[str, Any], str],
|
|
259
|
+
has_answer: bool = True,
|
|
260
|
+
) -> None:
|
|
261
|
+
"""
|
|
262
|
+
Assert that an agent completed processing successfully.
|
|
263
|
+
|
|
264
|
+
Args:
|
|
265
|
+
result: Result from agent.process_query()
|
|
266
|
+
has_answer: Whether to check for an 'answer' key
|
|
267
|
+
|
|
268
|
+
Raises:
|
|
269
|
+
AssertionError: If agent didn't complete properly
|
|
270
|
+
|
|
271
|
+
Example:
|
|
272
|
+
result = agent.process_query("test")
|
|
273
|
+
assert_agent_completed(result)
|
|
274
|
+
"""
|
|
275
|
+
# Handle string results (some agents return strings directly)
|
|
276
|
+
if isinstance(result, str):
|
|
277
|
+
assert len(result) > 0, "Agent returned empty string"
|
|
278
|
+
return
|
|
279
|
+
|
|
280
|
+
assert isinstance(
|
|
281
|
+
result, dict
|
|
282
|
+
), f"Expected result to be dict or str, got {type(result).__name__}"
|
|
283
|
+
|
|
284
|
+
# Check for error indicators
|
|
285
|
+
if "error" in result and result["error"]:
|
|
286
|
+
raise AssertionError(f"Agent returned error: {result['error']}")
|
|
287
|
+
|
|
288
|
+
if "status" in result and result["status"] == "error":
|
|
289
|
+
error_msg = result.get("message", result.get("error", "Unknown error"))
|
|
290
|
+
raise AssertionError(f"Agent returned error status: {error_msg}")
|
|
291
|
+
|
|
292
|
+
# Check for answer if required
|
|
293
|
+
if has_answer:
|
|
294
|
+
assert "answer" in result or "response" in result or "result" in result, (
|
|
295
|
+
"Agent result missing answer/response/result key. "
|
|
296
|
+
f"Keys present: {list(result.keys())}"
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def assert_no_errors(result: Dict[str, Any]) -> None:
|
|
301
|
+
"""
|
|
302
|
+
Assert that a result contains no errors.
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
result: Result dictionary
|
|
306
|
+
|
|
307
|
+
Raises:
|
|
308
|
+
AssertionError: If result contains error indicators
|
|
309
|
+
|
|
310
|
+
Example:
|
|
311
|
+
result = agent.process_query("test")
|
|
312
|
+
assert_no_errors(result)
|
|
313
|
+
"""
|
|
314
|
+
if not isinstance(result, dict):
|
|
315
|
+
return # Non-dict results don't have error keys
|
|
316
|
+
|
|
317
|
+
# Check various error patterns
|
|
318
|
+
if "error" in result and result["error"]:
|
|
319
|
+
raise AssertionError(f"Result contains error: {result['error']}")
|
|
320
|
+
|
|
321
|
+
if "errors" in result and result["errors"]:
|
|
322
|
+
raise AssertionError(f"Result contains errors: {result['errors']}")
|
|
323
|
+
|
|
324
|
+
if result.get("status") == "error":
|
|
325
|
+
msg = result.get("message", result.get("error", "Unknown"))
|
|
326
|
+
raise AssertionError(f"Result has error status: {msg}")
|
|
327
|
+
|
|
328
|
+
if result.get("success") is False:
|
|
329
|
+
msg = result.get("message", result.get("error", "Unknown"))
|
|
330
|
+
raise AssertionError(f"Result indicates failure: {msg}")
|
gaia/testing/fixtures.py
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
"""Test fixtures and factories for GAIA agent testing."""
|
|
5
|
+
|
|
6
|
+
import tempfile
|
|
7
|
+
from contextlib import contextmanager
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import List, Optional, Type, TypeVar
|
|
10
|
+
|
|
11
|
+
from gaia.testing.mocks import MockLLMProvider, MockVLMClient
|
|
12
|
+
|
|
13
|
+
# Type variable for agent classes
|
|
14
|
+
AgentT = TypeVar("AgentT")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@contextmanager
|
|
18
|
+
def temp_directory():
|
|
19
|
+
"""
|
|
20
|
+
Create a temporary directory for testing with automatic cleanup.
|
|
21
|
+
|
|
22
|
+
Yields a Path object to the temporary directory. The directory
|
|
23
|
+
and all its contents are automatically deleted when the context exits.
|
|
24
|
+
|
|
25
|
+
Example:
|
|
26
|
+
from gaia.testing import temp_directory
|
|
27
|
+
|
|
28
|
+
def test_file_processing():
|
|
29
|
+
with temp_directory() as tmp_dir:
|
|
30
|
+
# Create test files
|
|
31
|
+
test_file = tmp_dir / "test.txt"
|
|
32
|
+
test_file.write_text("Hello World")
|
|
33
|
+
|
|
34
|
+
# Test your agent
|
|
35
|
+
agent = MyAgent(data_dir=str(tmp_dir))
|
|
36
|
+
result = agent.process_file(str(test_file))
|
|
37
|
+
|
|
38
|
+
assert result["status"] == "success"
|
|
39
|
+
|
|
40
|
+
# Directory automatically deleted after context exits
|
|
41
|
+
|
|
42
|
+
Yields:
|
|
43
|
+
Path: Path to the temporary directory
|
|
44
|
+
"""
|
|
45
|
+
with tempfile.TemporaryDirectory() as tmp_dir:
|
|
46
|
+
yield Path(tmp_dir)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@contextmanager
|
|
50
|
+
def temp_file(
|
|
51
|
+
content: str = "",
|
|
52
|
+
suffix: str = ".txt",
|
|
53
|
+
prefix: str = "test_",
|
|
54
|
+
):
|
|
55
|
+
"""
|
|
56
|
+
Create a temporary file for testing with automatic cleanup.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
content: Initial content to write to the file
|
|
60
|
+
suffix: File extension (default: .txt)
|
|
61
|
+
prefix: Filename prefix (default: test_)
|
|
62
|
+
|
|
63
|
+
Yields:
|
|
64
|
+
Path: Path to the temporary file
|
|
65
|
+
|
|
66
|
+
Example:
|
|
67
|
+
from gaia.testing import temp_file
|
|
68
|
+
|
|
69
|
+
def test_file_reading():
|
|
70
|
+
with temp_file(content="test data", suffix=".json") as tmp_path:
|
|
71
|
+
result = my_agent.read_file(str(tmp_path))
|
|
72
|
+
assert "test data" in result
|
|
73
|
+
"""
|
|
74
|
+
with tempfile.NamedTemporaryFile(
|
|
75
|
+
mode="w",
|
|
76
|
+
suffix=suffix,
|
|
77
|
+
prefix=prefix,
|
|
78
|
+
delete=False,
|
|
79
|
+
) as f:
|
|
80
|
+
f.write(content)
|
|
81
|
+
tmp_path = Path(f.name)
|
|
82
|
+
|
|
83
|
+
try:
|
|
84
|
+
yield tmp_path
|
|
85
|
+
finally:
|
|
86
|
+
tmp_path.unlink(missing_ok=True)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def create_test_agent(
|
|
90
|
+
agent_class: Type[AgentT],
|
|
91
|
+
mock_responses: Optional[List[str]] = None,
|
|
92
|
+
mock_vlm_text: Optional[str] = None,
|
|
93
|
+
inject_mocks: bool = True,
|
|
94
|
+
**agent_kwargs,
|
|
95
|
+
) -> AgentT:
|
|
96
|
+
"""
|
|
97
|
+
Create an agent instance configured for testing.
|
|
98
|
+
|
|
99
|
+
Creates an agent with silent mode enabled and optionally injects
|
|
100
|
+
mock LLM and VLM providers for testing without real API calls.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
agent_class: The Agent class to instantiate
|
|
104
|
+
mock_responses: List of LLM responses to return in sequence
|
|
105
|
+
mock_vlm_text: Text for mock VLM to return
|
|
106
|
+
inject_mocks: Whether to inject mock providers (default: True)
|
|
107
|
+
**agent_kwargs: Additional arguments passed to agent constructor
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
Configured agent instance
|
|
111
|
+
|
|
112
|
+
Example:
|
|
113
|
+
from gaia.testing import create_test_agent
|
|
114
|
+
from my_agent import CustomerAgent
|
|
115
|
+
|
|
116
|
+
def test_customer_search():
|
|
117
|
+
agent = create_test_agent(
|
|
118
|
+
CustomerAgent,
|
|
119
|
+
mock_responses=[
|
|
120
|
+
'{"tool": "search", "args": {"name": "John"}}',
|
|
121
|
+
"Found 1 customer named John."
|
|
122
|
+
],
|
|
123
|
+
db_url="sqlite:///:memory:",
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
result = agent.process_query("Find customer John")
|
|
127
|
+
assert "John" in result["answer"]
|
|
128
|
+
|
|
129
|
+
Note:
|
|
130
|
+
The agent is created with `skip_lemonade=True` and `silent_mode=True`
|
|
131
|
+
to avoid requiring a running Lemonade server during tests.
|
|
132
|
+
"""
|
|
133
|
+
# Ensure testing-friendly defaults
|
|
134
|
+
agent_kwargs.setdefault("skip_lemonade", True)
|
|
135
|
+
agent_kwargs.setdefault("silent_mode", True)
|
|
136
|
+
|
|
137
|
+
# Create the agent
|
|
138
|
+
agent = agent_class(**agent_kwargs)
|
|
139
|
+
|
|
140
|
+
# Inject mocks if requested
|
|
141
|
+
if inject_mocks:
|
|
142
|
+
# Create and attach mock LLM
|
|
143
|
+
mock_llm = MockLLMProvider(responses=mock_responses)
|
|
144
|
+
agent._mock_llm = mock_llm # pylint: disable=protected-access
|
|
145
|
+
|
|
146
|
+
# Inject into chat attribute if it exists
|
|
147
|
+
if hasattr(agent, "chat"):
|
|
148
|
+
agent.chat = mock_llm
|
|
149
|
+
|
|
150
|
+
# Create and attach mock VLM if text provided
|
|
151
|
+
if mock_vlm_text is not None:
|
|
152
|
+
mock_vlm = MockVLMClient(extracted_text=mock_vlm_text)
|
|
153
|
+
agent._mock_vlm = mock_vlm # pylint: disable=protected-access
|
|
154
|
+
|
|
155
|
+
if hasattr(agent, "vlm"):
|
|
156
|
+
agent.vlm = mock_vlm
|
|
157
|
+
|
|
158
|
+
return agent
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class AgentTestContext:
|
|
162
|
+
"""
|
|
163
|
+
Context manager for comprehensive agent testing.
|
|
164
|
+
|
|
165
|
+
Provides a clean testing environment with temporary directories,
|
|
166
|
+
mock providers, and automatic cleanup.
|
|
167
|
+
|
|
168
|
+
Example:
|
|
169
|
+
from gaia.testing import AgentTestContext
|
|
170
|
+
from my_agent import IntakeAgent
|
|
171
|
+
|
|
172
|
+
def test_intake_processing():
|
|
173
|
+
with AgentTestContext(IntakeAgent) as ctx:
|
|
174
|
+
# Create test file
|
|
175
|
+
test_file = ctx.create_file("form.txt", "Patient: John Doe")
|
|
176
|
+
|
|
177
|
+
# Process with agent
|
|
178
|
+
result = ctx.agent.process_query(f"Process {test_file}")
|
|
179
|
+
|
|
180
|
+
# Verify
|
|
181
|
+
assert ctx.mock_llm.was_called
|
|
182
|
+
assert "John" in result["answer"]
|
|
183
|
+
"""
|
|
184
|
+
|
|
185
|
+
def __init__(
|
|
186
|
+
self,
|
|
187
|
+
agent_class: Type[AgentT],
|
|
188
|
+
mock_responses: Optional[List[str]] = None,
|
|
189
|
+
mock_vlm_text: Optional[str] = None,
|
|
190
|
+
**agent_kwargs,
|
|
191
|
+
):
|
|
192
|
+
"""
|
|
193
|
+
Initialize test context.
|
|
194
|
+
|
|
195
|
+
Args:
|
|
196
|
+
agent_class: Agent class to instantiate
|
|
197
|
+
mock_responses: LLM responses to use
|
|
198
|
+
mock_vlm_text: VLM extraction text to use
|
|
199
|
+
**agent_kwargs: Additional agent arguments
|
|
200
|
+
"""
|
|
201
|
+
self.agent_class = agent_class
|
|
202
|
+
self.mock_responses = mock_responses
|
|
203
|
+
self.mock_vlm_text = mock_vlm_text
|
|
204
|
+
self.agent_kwargs = agent_kwargs
|
|
205
|
+
|
|
206
|
+
self.agent: Optional[AgentT] = None
|
|
207
|
+
self.mock_llm: Optional[MockLLMProvider] = None
|
|
208
|
+
self.mock_vlm: Optional[MockVLMClient] = None
|
|
209
|
+
self._temp_dir: Optional[Path] = None
|
|
210
|
+
self._temp_dir_context = None
|
|
211
|
+
|
|
212
|
+
def __enter__(self) -> "AgentTestContext":
|
|
213
|
+
"""Enter context and set up test environment."""
|
|
214
|
+
# Create temporary directory
|
|
215
|
+
self._temp_dir_context = tempfile.TemporaryDirectory()
|
|
216
|
+
self._temp_dir = Path(self._temp_dir_context.name)
|
|
217
|
+
|
|
218
|
+
# Create mock providers
|
|
219
|
+
self.mock_llm = MockLLMProvider(responses=self.mock_responses)
|
|
220
|
+
if self.mock_vlm_text is not None:
|
|
221
|
+
self.mock_vlm = MockVLMClient(extracted_text=self.mock_vlm_text)
|
|
222
|
+
|
|
223
|
+
# Create agent with mocks
|
|
224
|
+
self.agent_kwargs.setdefault("skip_lemonade", True)
|
|
225
|
+
self.agent_kwargs.setdefault("silent_mode", True)
|
|
226
|
+
|
|
227
|
+
self.agent = self.agent_class(**self.agent_kwargs)
|
|
228
|
+
|
|
229
|
+
# Inject mocks
|
|
230
|
+
self.agent._mock_llm = self.mock_llm # pylint: disable=protected-access
|
|
231
|
+
if hasattr(self.agent, "chat"):
|
|
232
|
+
self.agent.chat = self.mock_llm
|
|
233
|
+
|
|
234
|
+
if self.mock_vlm is not None:
|
|
235
|
+
self.agent._mock_vlm = self.mock_vlm # pylint: disable=protected-access
|
|
236
|
+
if hasattr(self.agent, "vlm"):
|
|
237
|
+
self.agent.vlm = self.mock_vlm
|
|
238
|
+
|
|
239
|
+
return self
|
|
240
|
+
|
|
241
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
242
|
+
"""Exit context and clean up."""
|
|
243
|
+
# Clean up agent if it has cleanup method
|
|
244
|
+
if self.agent is not None:
|
|
245
|
+
if hasattr(self.agent, "close"):
|
|
246
|
+
try:
|
|
247
|
+
self.agent.close()
|
|
248
|
+
except Exception:
|
|
249
|
+
pass
|
|
250
|
+
if hasattr(self.agent, "close_db"):
|
|
251
|
+
try:
|
|
252
|
+
self.agent.close_db()
|
|
253
|
+
except Exception:
|
|
254
|
+
pass
|
|
255
|
+
if hasattr(self.agent, "stop_all_watchers"):
|
|
256
|
+
try:
|
|
257
|
+
self.agent.stop_all_watchers()
|
|
258
|
+
except Exception:
|
|
259
|
+
pass
|
|
260
|
+
|
|
261
|
+
# Clean up temp directory
|
|
262
|
+
if self._temp_dir_context is not None:
|
|
263
|
+
self._temp_dir_context.cleanup()
|
|
264
|
+
|
|
265
|
+
return False # Don't suppress exceptions
|
|
266
|
+
|
|
267
|
+
@property
|
|
268
|
+
def temp_dir(self) -> Path:
|
|
269
|
+
"""Get the temporary directory path."""
|
|
270
|
+
if self._temp_dir is None:
|
|
271
|
+
raise RuntimeError("Context not entered. Use 'with' statement.")
|
|
272
|
+
return self._temp_dir
|
|
273
|
+
|
|
274
|
+
def create_file(
|
|
275
|
+
self,
|
|
276
|
+
name: str,
|
|
277
|
+
content: str = "",
|
|
278
|
+
subdir: Optional[str] = None,
|
|
279
|
+
) -> Path:
|
|
280
|
+
"""
|
|
281
|
+
Create a file in the temporary directory.
|
|
282
|
+
|
|
283
|
+
Args:
|
|
284
|
+
name: Filename
|
|
285
|
+
content: File content
|
|
286
|
+
subdir: Optional subdirectory to create file in
|
|
287
|
+
|
|
288
|
+
Returns:
|
|
289
|
+
Path to created file
|
|
290
|
+
"""
|
|
291
|
+
if subdir:
|
|
292
|
+
file_dir = self.temp_dir / subdir
|
|
293
|
+
file_dir.mkdir(parents=True, exist_ok=True)
|
|
294
|
+
else:
|
|
295
|
+
file_dir = self.temp_dir
|
|
296
|
+
|
|
297
|
+
file_path = file_dir / name
|
|
298
|
+
file_path.write_text(content)
|
|
299
|
+
return file_path
|
|
300
|
+
|
|
301
|
+
def create_directory(self, name: str) -> Path:
|
|
302
|
+
"""
|
|
303
|
+
Create a subdirectory in the temporary directory.
|
|
304
|
+
|
|
305
|
+
Args:
|
|
306
|
+
name: Directory name
|
|
307
|
+
|
|
308
|
+
Returns:
|
|
309
|
+
Path to created directory
|
|
310
|
+
"""
|
|
311
|
+
dir_path = self.temp_dir / name
|
|
312
|
+
dir_path.mkdir(parents=True, exist_ok=True)
|
|
313
|
+
return dir_path
|
|
314
|
+
|
|
315
|
+
def set_llm_responses(self, responses: List[str]) -> None:
|
|
316
|
+
"""
|
|
317
|
+
Set new LLM responses.
|
|
318
|
+
|
|
319
|
+
Args:
|
|
320
|
+
responses: New list of responses
|
|
321
|
+
"""
|
|
322
|
+
if self.mock_llm:
|
|
323
|
+
self.mock_llm.set_responses(responses)
|
|
324
|
+
|
|
325
|
+
def set_vlm_text(self, text: str) -> None:
|
|
326
|
+
"""
|
|
327
|
+
Set new VLM extraction text.
|
|
328
|
+
|
|
329
|
+
Args:
|
|
330
|
+
text: New extraction text
|
|
331
|
+
"""
|
|
332
|
+
if self.mock_vlm:
|
|
333
|
+
self.mock_vlm.set_extracted_text(text)
|