amd-gaia 0.14.1__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.1.dist-info/METADATA +768 -0
- amd_gaia-0.14.1.dist-info/RECORD +800 -0
- amd_gaia-0.14.1.dist-info/WHEEL +5 -0
- amd_gaia-0.14.1.dist-info/entry_points.txt +5 -0
- amd_gaia-0.14.1.dist-info/licenses/LICENSE.md +21 -0
- amd_gaia-0.14.1.dist-info/top_level.txt +1 -0
- gaia/__init__.py +2 -0
- gaia/agents/__init__.py +19 -0
- gaia/agents/base/__init__.py +9 -0
- gaia/agents/base/agent.py +2072 -0
- gaia/agents/base/api_agent.py +120 -0
- gaia/agents/base/console.py +1457 -0
- gaia/agents/base/mcp_agent.py +86 -0
- gaia/agents/base/tools.py +83 -0
- gaia/agents/blender/agent.py +556 -0
- gaia/agents/blender/agent_simple.py +135 -0
- gaia/agents/blender/app.py +211 -0
- gaia/agents/blender/app_simple.py +41 -0
- gaia/agents/blender/core/__init__.py +16 -0
- gaia/agents/blender/core/materials.py +506 -0
- gaia/agents/blender/core/objects.py +316 -0
- gaia/agents/blender/core/rendering.py +225 -0
- gaia/agents/blender/core/scene.py +220 -0
- gaia/agents/blender/core/view.py +146 -0
- gaia/agents/chat/__init__.py +9 -0
- gaia/agents/chat/agent.py +975 -0
- gaia/agents/chat/app.py +1058 -0
- gaia/agents/chat/session.py +508 -0
- gaia/agents/chat/tools/__init__.py +15 -0
- gaia/agents/chat/tools/file_tools.py +96 -0
- gaia/agents/chat/tools/rag_tools.py +1729 -0
- gaia/agents/chat/tools/shell_tools.py +436 -0
- gaia/agents/code/__init__.py +7 -0
- gaia/agents/code/agent.py +547 -0
- gaia/agents/code/app.py +266 -0
- gaia/agents/code/models.py +135 -0
- gaia/agents/code/orchestration/__init__.py +24 -0
- gaia/agents/code/orchestration/checklist_executor.py +1739 -0
- gaia/agents/code/orchestration/checklist_generator.py +709 -0
- gaia/agents/code/orchestration/factories/__init__.py +9 -0
- gaia/agents/code/orchestration/factories/base.py +63 -0
- gaia/agents/code/orchestration/factories/nextjs_factory.py +118 -0
- gaia/agents/code/orchestration/factories/python_factory.py +106 -0
- gaia/agents/code/orchestration/orchestrator.py +610 -0
- gaia/agents/code/orchestration/project_analyzer.py +391 -0
- gaia/agents/code/orchestration/steps/__init__.py +67 -0
- gaia/agents/code/orchestration/steps/base.py +188 -0
- gaia/agents/code/orchestration/steps/error_handler.py +314 -0
- gaia/agents/code/orchestration/steps/nextjs.py +828 -0
- gaia/agents/code/orchestration/steps/python.py +307 -0
- gaia/agents/code/orchestration/template_catalog.py +463 -0
- gaia/agents/code/orchestration/workflows/__init__.py +14 -0
- gaia/agents/code/orchestration/workflows/base.py +80 -0
- gaia/agents/code/orchestration/workflows/nextjs.py +186 -0
- gaia/agents/code/orchestration/workflows/python.py +94 -0
- gaia/agents/code/prompts/__init__.py +11 -0
- gaia/agents/code/prompts/base_prompt.py +77 -0
- gaia/agents/code/prompts/code_patterns.py +1925 -0
- gaia/agents/code/prompts/nextjs_prompt.py +40 -0
- gaia/agents/code/prompts/python_prompt.py +109 -0
- gaia/agents/code/schema_inference.py +365 -0
- gaia/agents/code/system_prompt.py +41 -0
- gaia/agents/code/tools/__init__.py +42 -0
- gaia/agents/code/tools/cli_tools.py +1138 -0
- gaia/agents/code/tools/code_formatting.py +319 -0
- gaia/agents/code/tools/code_tools.py +769 -0
- gaia/agents/code/tools/error_fixing.py +1347 -0
- gaia/agents/code/tools/external_tools.py +180 -0
- gaia/agents/code/tools/file_io.py +845 -0
- gaia/agents/code/tools/prisma_tools.py +190 -0
- gaia/agents/code/tools/project_management.py +1016 -0
- gaia/agents/code/tools/testing.py +321 -0
- gaia/agents/code/tools/typescript_tools.py +122 -0
- gaia/agents/code/tools/validation_parsing.py +461 -0
- gaia/agents/code/tools/validation_tools.py +803 -0
- gaia/agents/code/tools/web_dev_tools.py +1744 -0
- gaia/agents/code/validators/__init__.py +16 -0
- gaia/agents/code/validators/antipattern_checker.py +241 -0
- gaia/agents/code/validators/ast_analyzer.py +197 -0
- gaia/agents/code/validators/requirements_validator.py +145 -0
- gaia/agents/code/validators/syntax_validator.py +171 -0
- gaia/agents/docker/__init__.py +7 -0
- gaia/agents/docker/agent.py +642 -0
- gaia/agents/jira/__init__.py +11 -0
- gaia/agents/jira/agent.py +894 -0
- gaia/agents/jira/jql_templates.py +299 -0
- gaia/agents/routing/__init__.py +7 -0
- gaia/agents/routing/agent.py +512 -0
- gaia/agents/routing/system_prompt.py +75 -0
- gaia/api/__init__.py +23 -0
- gaia/api/agent_registry.py +238 -0
- gaia/api/app.py +305 -0
- gaia/api/openai_server.py +575 -0
- gaia/api/schemas.py +186 -0
- gaia/api/sse_handler.py +370 -0
- gaia/apps/__init__.py +4 -0
- gaia/apps/llm/__init__.py +6 -0
- gaia/apps/llm/app.py +169 -0
- gaia/apps/summarize/app.py +633 -0
- gaia/apps/summarize/html_viewer.py +133 -0
- gaia/apps/summarize/pdf_formatter.py +284 -0
- gaia/audio/__init__.py +2 -0
- gaia/audio/audio_client.py +439 -0
- gaia/audio/audio_recorder.py +269 -0
- gaia/audio/kokoro_tts.py +599 -0
- gaia/audio/whisper_asr.py +432 -0
- gaia/chat/__init__.py +16 -0
- gaia/chat/app.py +430 -0
- gaia/chat/prompts.py +522 -0
- gaia/chat/sdk.py +1200 -0
- gaia/cli.py +5621 -0
- gaia/eval/batch_experiment.py +2332 -0
- gaia/eval/claude.py +542 -0
- gaia/eval/config.py +37 -0
- gaia/eval/email_generator.py +512 -0
- gaia/eval/eval.py +3179 -0
- gaia/eval/groundtruth.py +1130 -0
- gaia/eval/transcript_generator.py +582 -0
- gaia/eval/webapp/README.md +168 -0
- gaia/eval/webapp/node_modules/.bin/mime +16 -0
- gaia/eval/webapp/node_modules/.bin/mime.cmd +17 -0
- gaia/eval/webapp/node_modules/.bin/mime.ps1 +28 -0
- gaia/eval/webapp/node_modules/.package-lock.json +865 -0
- gaia/eval/webapp/node_modules/accepts/HISTORY.md +243 -0
- gaia/eval/webapp/node_modules/accepts/LICENSE +23 -0
- gaia/eval/webapp/node_modules/accepts/README.md +140 -0
- gaia/eval/webapp/node_modules/accepts/index.js +238 -0
- gaia/eval/webapp/node_modules/accepts/package.json +47 -0
- gaia/eval/webapp/node_modules/array-flatten/LICENSE +21 -0
- gaia/eval/webapp/node_modules/array-flatten/README.md +43 -0
- gaia/eval/webapp/node_modules/array-flatten/array-flatten.js +64 -0
- gaia/eval/webapp/node_modules/array-flatten/package.json +39 -0
- gaia/eval/webapp/node_modules/body-parser/HISTORY.md +672 -0
- gaia/eval/webapp/node_modules/body-parser/LICENSE +23 -0
- gaia/eval/webapp/node_modules/body-parser/README.md +476 -0
- gaia/eval/webapp/node_modules/body-parser/SECURITY.md +25 -0
- gaia/eval/webapp/node_modules/body-parser/index.js +156 -0
- gaia/eval/webapp/node_modules/body-parser/lib/read.js +205 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/json.js +247 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/raw.js +101 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/text.js +121 -0
- gaia/eval/webapp/node_modules/body-parser/lib/types/urlencoded.js +307 -0
- gaia/eval/webapp/node_modules/body-parser/package.json +56 -0
- gaia/eval/webapp/node_modules/bytes/History.md +97 -0
- gaia/eval/webapp/node_modules/bytes/LICENSE +23 -0
- gaia/eval/webapp/node_modules/bytes/Readme.md +152 -0
- gaia/eval/webapp/node_modules/bytes/index.js +170 -0
- gaia/eval/webapp/node_modules/bytes/package.json +42 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.eslintrc +17 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/.nycrc +9 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/README.md +62 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/index.js +15 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/package.json +85 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/test/index.js +63 -0
- gaia/eval/webapp/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/call-bound/.eslintrc +13 -0
- gaia/eval/webapp/node_modules/call-bound/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/call-bound/.nycrc +9 -0
- gaia/eval/webapp/node_modules/call-bound/CHANGELOG.md +42 -0
- gaia/eval/webapp/node_modules/call-bound/LICENSE +21 -0
- gaia/eval/webapp/node_modules/call-bound/README.md +53 -0
- gaia/eval/webapp/node_modules/call-bound/index.d.ts +94 -0
- gaia/eval/webapp/node_modules/call-bound/index.js +19 -0
- gaia/eval/webapp/node_modules/call-bound/package.json +99 -0
- gaia/eval/webapp/node_modules/call-bound/test/index.js +61 -0
- gaia/eval/webapp/node_modules/call-bound/tsconfig.json +10 -0
- gaia/eval/webapp/node_modules/content-disposition/HISTORY.md +60 -0
- gaia/eval/webapp/node_modules/content-disposition/LICENSE +22 -0
- gaia/eval/webapp/node_modules/content-disposition/README.md +142 -0
- gaia/eval/webapp/node_modules/content-disposition/index.js +458 -0
- gaia/eval/webapp/node_modules/content-disposition/package.json +44 -0
- gaia/eval/webapp/node_modules/content-type/HISTORY.md +29 -0
- gaia/eval/webapp/node_modules/content-type/LICENSE +22 -0
- gaia/eval/webapp/node_modules/content-type/README.md +94 -0
- gaia/eval/webapp/node_modules/content-type/index.js +225 -0
- gaia/eval/webapp/node_modules/content-type/package.json +42 -0
- gaia/eval/webapp/node_modules/cookie/LICENSE +24 -0
- gaia/eval/webapp/node_modules/cookie/README.md +317 -0
- gaia/eval/webapp/node_modules/cookie/SECURITY.md +25 -0
- gaia/eval/webapp/node_modules/cookie/index.js +334 -0
- gaia/eval/webapp/node_modules/cookie/package.json +44 -0
- gaia/eval/webapp/node_modules/cookie-signature/.npmignore +4 -0
- gaia/eval/webapp/node_modules/cookie-signature/History.md +38 -0
- gaia/eval/webapp/node_modules/cookie-signature/Readme.md +42 -0
- gaia/eval/webapp/node_modules/cookie-signature/index.js +51 -0
- gaia/eval/webapp/node_modules/cookie-signature/package.json +18 -0
- gaia/eval/webapp/node_modules/debug/.coveralls.yml +1 -0
- gaia/eval/webapp/node_modules/debug/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/debug/.npmignore +9 -0
- gaia/eval/webapp/node_modules/debug/.travis.yml +14 -0
- gaia/eval/webapp/node_modules/debug/CHANGELOG.md +362 -0
- gaia/eval/webapp/node_modules/debug/LICENSE +19 -0
- gaia/eval/webapp/node_modules/debug/Makefile +50 -0
- gaia/eval/webapp/node_modules/debug/README.md +312 -0
- gaia/eval/webapp/node_modules/debug/component.json +19 -0
- gaia/eval/webapp/node_modules/debug/karma.conf.js +70 -0
- gaia/eval/webapp/node_modules/debug/node.js +1 -0
- gaia/eval/webapp/node_modules/debug/package.json +49 -0
- gaia/eval/webapp/node_modules/debug/src/browser.js +185 -0
- gaia/eval/webapp/node_modules/debug/src/debug.js +202 -0
- gaia/eval/webapp/node_modules/debug/src/index.js +10 -0
- gaia/eval/webapp/node_modules/debug/src/inspector-log.js +15 -0
- gaia/eval/webapp/node_modules/debug/src/node.js +248 -0
- gaia/eval/webapp/node_modules/depd/History.md +103 -0
- gaia/eval/webapp/node_modules/depd/LICENSE +22 -0
- gaia/eval/webapp/node_modules/depd/Readme.md +280 -0
- gaia/eval/webapp/node_modules/depd/index.js +538 -0
- gaia/eval/webapp/node_modules/depd/lib/browser/index.js +77 -0
- gaia/eval/webapp/node_modules/depd/package.json +45 -0
- gaia/eval/webapp/node_modules/destroy/LICENSE +23 -0
- gaia/eval/webapp/node_modules/destroy/README.md +63 -0
- gaia/eval/webapp/node_modules/destroy/index.js +209 -0
- gaia/eval/webapp/node_modules/destroy/package.json +48 -0
- gaia/eval/webapp/node_modules/dunder-proto/.eslintrc +5 -0
- gaia/eval/webapp/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/dunder-proto/.nycrc +13 -0
- gaia/eval/webapp/node_modules/dunder-proto/CHANGELOG.md +24 -0
- gaia/eval/webapp/node_modules/dunder-proto/LICENSE +21 -0
- gaia/eval/webapp/node_modules/dunder-proto/README.md +54 -0
- gaia/eval/webapp/node_modules/dunder-proto/get.d.ts +5 -0
- gaia/eval/webapp/node_modules/dunder-proto/get.js +30 -0
- gaia/eval/webapp/node_modules/dunder-proto/package.json +76 -0
- gaia/eval/webapp/node_modules/dunder-proto/set.d.ts +5 -0
- gaia/eval/webapp/node_modules/dunder-proto/set.js +35 -0
- gaia/eval/webapp/node_modules/dunder-proto/test/get.js +34 -0
- gaia/eval/webapp/node_modules/dunder-proto/test/index.js +4 -0
- gaia/eval/webapp/node_modules/dunder-proto/test/set.js +50 -0
- gaia/eval/webapp/node_modules/dunder-proto/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/ee-first/LICENSE +22 -0
- gaia/eval/webapp/node_modules/ee-first/README.md +80 -0
- gaia/eval/webapp/node_modules/ee-first/index.js +95 -0
- gaia/eval/webapp/node_modules/ee-first/package.json +29 -0
- gaia/eval/webapp/node_modules/encodeurl/LICENSE +22 -0
- gaia/eval/webapp/node_modules/encodeurl/README.md +109 -0
- gaia/eval/webapp/node_modules/encodeurl/index.js +60 -0
- gaia/eval/webapp/node_modules/encodeurl/package.json +40 -0
- gaia/eval/webapp/node_modules/es-define-property/.eslintrc +13 -0
- gaia/eval/webapp/node_modules/es-define-property/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/es-define-property/.nycrc +9 -0
- gaia/eval/webapp/node_modules/es-define-property/CHANGELOG.md +29 -0
- gaia/eval/webapp/node_modules/es-define-property/LICENSE +21 -0
- gaia/eval/webapp/node_modules/es-define-property/README.md +49 -0
- gaia/eval/webapp/node_modules/es-define-property/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-define-property/index.js +14 -0
- gaia/eval/webapp/node_modules/es-define-property/package.json +81 -0
- gaia/eval/webapp/node_modules/es-define-property/test/index.js +56 -0
- gaia/eval/webapp/node_modules/es-define-property/tsconfig.json +10 -0
- gaia/eval/webapp/node_modules/es-errors/.eslintrc +5 -0
- gaia/eval/webapp/node_modules/es-errors/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/es-errors/CHANGELOG.md +40 -0
- gaia/eval/webapp/node_modules/es-errors/LICENSE +21 -0
- gaia/eval/webapp/node_modules/es-errors/README.md +55 -0
- gaia/eval/webapp/node_modules/es-errors/eval.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/eval.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/index.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/package.json +80 -0
- gaia/eval/webapp/node_modules/es-errors/range.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/range.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/ref.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/ref.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/syntax.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/syntax.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/test/index.js +19 -0
- gaia/eval/webapp/node_modules/es-errors/tsconfig.json +49 -0
- gaia/eval/webapp/node_modules/es-errors/type.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/type.js +4 -0
- gaia/eval/webapp/node_modules/es-errors/uri.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-errors/uri.js +4 -0
- gaia/eval/webapp/node_modules/es-object-atoms/.eslintrc +16 -0
- gaia/eval/webapp/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/es-object-atoms/CHANGELOG.md +37 -0
- gaia/eval/webapp/node_modules/es-object-atoms/LICENSE +21 -0
- gaia/eval/webapp/node_modules/es-object-atoms/README.md +63 -0
- gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- gaia/eval/webapp/node_modules/es-object-atoms/ToObject.d.ts +7 -0
- gaia/eval/webapp/node_modules/es-object-atoms/ToObject.js +10 -0
- gaia/eval/webapp/node_modules/es-object-atoms/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-object-atoms/index.js +4 -0
- gaia/eval/webapp/node_modules/es-object-atoms/isObject.d.ts +3 -0
- gaia/eval/webapp/node_modules/es-object-atoms/isObject.js +6 -0
- gaia/eval/webapp/node_modules/es-object-atoms/package.json +80 -0
- gaia/eval/webapp/node_modules/es-object-atoms/test/index.js +38 -0
- gaia/eval/webapp/node_modules/es-object-atoms/tsconfig.json +6 -0
- gaia/eval/webapp/node_modules/escape-html/LICENSE +24 -0
- gaia/eval/webapp/node_modules/escape-html/Readme.md +43 -0
- gaia/eval/webapp/node_modules/escape-html/index.js +78 -0
- gaia/eval/webapp/node_modules/escape-html/package.json +24 -0
- gaia/eval/webapp/node_modules/etag/HISTORY.md +83 -0
- gaia/eval/webapp/node_modules/etag/LICENSE +22 -0
- gaia/eval/webapp/node_modules/etag/README.md +159 -0
- gaia/eval/webapp/node_modules/etag/index.js +131 -0
- gaia/eval/webapp/node_modules/etag/package.json +47 -0
- gaia/eval/webapp/node_modules/express/History.md +3656 -0
- gaia/eval/webapp/node_modules/express/LICENSE +24 -0
- gaia/eval/webapp/node_modules/express/Readme.md +260 -0
- gaia/eval/webapp/node_modules/express/index.js +11 -0
- gaia/eval/webapp/node_modules/express/lib/application.js +661 -0
- gaia/eval/webapp/node_modules/express/lib/express.js +116 -0
- gaia/eval/webapp/node_modules/express/lib/middleware/init.js +43 -0
- gaia/eval/webapp/node_modules/express/lib/middleware/query.js +47 -0
- gaia/eval/webapp/node_modules/express/lib/request.js +525 -0
- gaia/eval/webapp/node_modules/express/lib/response.js +1179 -0
- gaia/eval/webapp/node_modules/express/lib/router/index.js +673 -0
- gaia/eval/webapp/node_modules/express/lib/router/layer.js +181 -0
- gaia/eval/webapp/node_modules/express/lib/router/route.js +230 -0
- gaia/eval/webapp/node_modules/express/lib/utils.js +303 -0
- gaia/eval/webapp/node_modules/express/lib/view.js +182 -0
- gaia/eval/webapp/node_modules/express/package.json +102 -0
- gaia/eval/webapp/node_modules/finalhandler/HISTORY.md +210 -0
- gaia/eval/webapp/node_modules/finalhandler/LICENSE +22 -0
- gaia/eval/webapp/node_modules/finalhandler/README.md +147 -0
- gaia/eval/webapp/node_modules/finalhandler/SECURITY.md +25 -0
- gaia/eval/webapp/node_modules/finalhandler/index.js +341 -0
- gaia/eval/webapp/node_modules/finalhandler/package.json +47 -0
- gaia/eval/webapp/node_modules/forwarded/HISTORY.md +21 -0
- gaia/eval/webapp/node_modules/forwarded/LICENSE +22 -0
- gaia/eval/webapp/node_modules/forwarded/README.md +57 -0
- gaia/eval/webapp/node_modules/forwarded/index.js +90 -0
- gaia/eval/webapp/node_modules/forwarded/package.json +45 -0
- gaia/eval/webapp/node_modules/fresh/HISTORY.md +70 -0
- gaia/eval/webapp/node_modules/fresh/LICENSE +23 -0
- gaia/eval/webapp/node_modules/fresh/README.md +119 -0
- gaia/eval/webapp/node_modules/fresh/index.js +137 -0
- gaia/eval/webapp/node_modules/fresh/package.json +46 -0
- gaia/eval/webapp/node_modules/fs/README.md +9 -0
- gaia/eval/webapp/node_modules/fs/package.json +20 -0
- gaia/eval/webapp/node_modules/function-bind/.eslintrc +21 -0
- gaia/eval/webapp/node_modules/function-bind/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/function-bind/.github/SECURITY.md +3 -0
- gaia/eval/webapp/node_modules/function-bind/.nycrc +13 -0
- gaia/eval/webapp/node_modules/function-bind/CHANGELOG.md +136 -0
- gaia/eval/webapp/node_modules/function-bind/LICENSE +20 -0
- gaia/eval/webapp/node_modules/function-bind/README.md +46 -0
- gaia/eval/webapp/node_modules/function-bind/implementation.js +84 -0
- gaia/eval/webapp/node_modules/function-bind/index.js +5 -0
- gaia/eval/webapp/node_modules/function-bind/package.json +87 -0
- gaia/eval/webapp/node_modules/function-bind/test/.eslintrc +9 -0
- gaia/eval/webapp/node_modules/function-bind/test/index.js +252 -0
- gaia/eval/webapp/node_modules/get-intrinsic/.eslintrc +42 -0
- gaia/eval/webapp/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/get-intrinsic/.nycrc +9 -0
- gaia/eval/webapp/node_modules/get-intrinsic/CHANGELOG.md +186 -0
- gaia/eval/webapp/node_modules/get-intrinsic/LICENSE +21 -0
- gaia/eval/webapp/node_modules/get-intrinsic/README.md +71 -0
- gaia/eval/webapp/node_modules/get-intrinsic/index.js +378 -0
- gaia/eval/webapp/node_modules/get-intrinsic/package.json +97 -0
- gaia/eval/webapp/node_modules/get-intrinsic/test/GetIntrinsic.js +274 -0
- gaia/eval/webapp/node_modules/get-proto/.eslintrc +10 -0
- gaia/eval/webapp/node_modules/get-proto/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/get-proto/.nycrc +9 -0
- gaia/eval/webapp/node_modules/get-proto/CHANGELOG.md +21 -0
- gaia/eval/webapp/node_modules/get-proto/LICENSE +21 -0
- gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- gaia/eval/webapp/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
- gaia/eval/webapp/node_modules/get-proto/README.md +50 -0
- gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- gaia/eval/webapp/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- gaia/eval/webapp/node_modules/get-proto/index.d.ts +5 -0
- gaia/eval/webapp/node_modules/get-proto/index.js +27 -0
- gaia/eval/webapp/node_modules/get-proto/package.json +81 -0
- gaia/eval/webapp/node_modules/get-proto/test/index.js +68 -0
- gaia/eval/webapp/node_modules/get-proto/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/gopd/.eslintrc +16 -0
- gaia/eval/webapp/node_modules/gopd/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/gopd/CHANGELOG.md +45 -0
- gaia/eval/webapp/node_modules/gopd/LICENSE +21 -0
- gaia/eval/webapp/node_modules/gopd/README.md +40 -0
- gaia/eval/webapp/node_modules/gopd/gOPD.d.ts +1 -0
- gaia/eval/webapp/node_modules/gopd/gOPD.js +4 -0
- gaia/eval/webapp/node_modules/gopd/index.d.ts +5 -0
- gaia/eval/webapp/node_modules/gopd/index.js +15 -0
- gaia/eval/webapp/node_modules/gopd/package.json +77 -0
- gaia/eval/webapp/node_modules/gopd/test/index.js +36 -0
- gaia/eval/webapp/node_modules/gopd/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/has-symbols/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/has-symbols/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/has-symbols/.nycrc +9 -0
- gaia/eval/webapp/node_modules/has-symbols/CHANGELOG.md +91 -0
- gaia/eval/webapp/node_modules/has-symbols/LICENSE +21 -0
- gaia/eval/webapp/node_modules/has-symbols/README.md +46 -0
- gaia/eval/webapp/node_modules/has-symbols/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/has-symbols/index.js +14 -0
- gaia/eval/webapp/node_modules/has-symbols/package.json +111 -0
- gaia/eval/webapp/node_modules/has-symbols/shams.d.ts +3 -0
- gaia/eval/webapp/node_modules/has-symbols/shams.js +45 -0
- gaia/eval/webapp/node_modules/has-symbols/test/index.js +22 -0
- gaia/eval/webapp/node_modules/has-symbols/test/shams/core-js.js +29 -0
- gaia/eval/webapp/node_modules/has-symbols/test/shams/get-own-property-symbols.js +29 -0
- gaia/eval/webapp/node_modules/has-symbols/test/tests.js +58 -0
- gaia/eval/webapp/node_modules/has-symbols/tsconfig.json +10 -0
- gaia/eval/webapp/node_modules/hasown/.eslintrc +5 -0
- gaia/eval/webapp/node_modules/hasown/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/hasown/.nycrc +13 -0
- gaia/eval/webapp/node_modules/hasown/CHANGELOG.md +40 -0
- gaia/eval/webapp/node_modules/hasown/LICENSE +21 -0
- gaia/eval/webapp/node_modules/hasown/README.md +40 -0
- gaia/eval/webapp/node_modules/hasown/index.d.ts +3 -0
- gaia/eval/webapp/node_modules/hasown/index.js +8 -0
- gaia/eval/webapp/node_modules/hasown/package.json +92 -0
- gaia/eval/webapp/node_modules/hasown/tsconfig.json +6 -0
- gaia/eval/webapp/node_modules/http-errors/HISTORY.md +180 -0
- gaia/eval/webapp/node_modules/http-errors/LICENSE +23 -0
- gaia/eval/webapp/node_modules/http-errors/README.md +169 -0
- gaia/eval/webapp/node_modules/http-errors/index.js +289 -0
- gaia/eval/webapp/node_modules/http-errors/package.json +50 -0
- gaia/eval/webapp/node_modules/iconv-lite/Changelog.md +162 -0
- gaia/eval/webapp/node_modules/iconv-lite/LICENSE +21 -0
- gaia/eval/webapp/node_modules/iconv-lite/README.md +156 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/index.js +22 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/internal.js +188 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/utf16.js +177 -0
- gaia/eval/webapp/node_modules/iconv-lite/encodings/utf7.js +290 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/bom-handling.js +52 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/extend-node.js +217 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/index.d.ts +24 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/index.js +153 -0
- gaia/eval/webapp/node_modules/iconv-lite/lib/streams.js +121 -0
- gaia/eval/webapp/node_modules/iconv-lite/package.json +46 -0
- gaia/eval/webapp/node_modules/inherits/LICENSE +16 -0
- gaia/eval/webapp/node_modules/inherits/README.md +42 -0
- gaia/eval/webapp/node_modules/inherits/inherits.js +9 -0
- gaia/eval/webapp/node_modules/inherits/inherits_browser.js +27 -0
- gaia/eval/webapp/node_modules/inherits/package.json +29 -0
- gaia/eval/webapp/node_modules/ipaddr.js/LICENSE +19 -0
- gaia/eval/webapp/node_modules/ipaddr.js/README.md +233 -0
- gaia/eval/webapp/node_modules/ipaddr.js/ipaddr.min.js +1 -0
- gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
- gaia/eval/webapp/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- gaia/eval/webapp/node_modules/ipaddr.js/package.json +35 -0
- gaia/eval/webapp/node_modules/math-intrinsics/.eslintrc +16 -0
- gaia/eval/webapp/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/math-intrinsics/CHANGELOG.md +24 -0
- gaia/eval/webapp/node_modules/math-intrinsics/LICENSE +21 -0
- gaia/eval/webapp/node_modules/math-intrinsics/README.md +50 -0
- gaia/eval/webapp/node_modules/math-intrinsics/abs.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/abs.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/constants/maxValue.js +5 -0
- gaia/eval/webapp/node_modules/math-intrinsics/floor.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/floor.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isFinite.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isFinite.js +12 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isInteger.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isInteger.js +16 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNaN.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNaN.js +6 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/isNegativeZero.js +6 -0
- gaia/eval/webapp/node_modules/math-intrinsics/max.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/max.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/min.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/min.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/mod.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/mod.js +9 -0
- gaia/eval/webapp/node_modules/math-intrinsics/package.json +86 -0
- gaia/eval/webapp/node_modules/math-intrinsics/pow.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/pow.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/round.d.ts +1 -0
- gaia/eval/webapp/node_modules/math-intrinsics/round.js +4 -0
- gaia/eval/webapp/node_modules/math-intrinsics/sign.d.ts +3 -0
- gaia/eval/webapp/node_modules/math-intrinsics/sign.js +11 -0
- gaia/eval/webapp/node_modules/math-intrinsics/test/index.js +192 -0
- gaia/eval/webapp/node_modules/math-intrinsics/tsconfig.json +3 -0
- gaia/eval/webapp/node_modules/media-typer/HISTORY.md +22 -0
- gaia/eval/webapp/node_modules/media-typer/LICENSE +22 -0
- gaia/eval/webapp/node_modules/media-typer/README.md +81 -0
- gaia/eval/webapp/node_modules/media-typer/index.js +270 -0
- gaia/eval/webapp/node_modules/media-typer/package.json +26 -0
- gaia/eval/webapp/node_modules/merge-descriptors/HISTORY.md +21 -0
- gaia/eval/webapp/node_modules/merge-descriptors/LICENSE +23 -0
- gaia/eval/webapp/node_modules/merge-descriptors/README.md +49 -0
- gaia/eval/webapp/node_modules/merge-descriptors/index.js +60 -0
- gaia/eval/webapp/node_modules/merge-descriptors/package.json +39 -0
- gaia/eval/webapp/node_modules/methods/HISTORY.md +29 -0
- gaia/eval/webapp/node_modules/methods/LICENSE +24 -0
- gaia/eval/webapp/node_modules/methods/README.md +51 -0
- gaia/eval/webapp/node_modules/methods/index.js +69 -0
- gaia/eval/webapp/node_modules/methods/package.json +36 -0
- gaia/eval/webapp/node_modules/mime/.npmignore +0 -0
- gaia/eval/webapp/node_modules/mime/CHANGELOG.md +164 -0
- gaia/eval/webapp/node_modules/mime/LICENSE +21 -0
- gaia/eval/webapp/node_modules/mime/README.md +90 -0
- gaia/eval/webapp/node_modules/mime/cli.js +8 -0
- gaia/eval/webapp/node_modules/mime/mime.js +108 -0
- gaia/eval/webapp/node_modules/mime/package.json +44 -0
- gaia/eval/webapp/node_modules/mime/src/build.js +53 -0
- gaia/eval/webapp/node_modules/mime/src/test.js +60 -0
- gaia/eval/webapp/node_modules/mime/types.json +1 -0
- gaia/eval/webapp/node_modules/mime-db/HISTORY.md +507 -0
- gaia/eval/webapp/node_modules/mime-db/LICENSE +23 -0
- gaia/eval/webapp/node_modules/mime-db/README.md +100 -0
- gaia/eval/webapp/node_modules/mime-db/db.json +8519 -0
- gaia/eval/webapp/node_modules/mime-db/index.js +12 -0
- gaia/eval/webapp/node_modules/mime-db/package.json +60 -0
- gaia/eval/webapp/node_modules/mime-types/HISTORY.md +397 -0
- gaia/eval/webapp/node_modules/mime-types/LICENSE +23 -0
- gaia/eval/webapp/node_modules/mime-types/README.md +113 -0
- gaia/eval/webapp/node_modules/mime-types/index.js +188 -0
- gaia/eval/webapp/node_modules/mime-types/package.json +44 -0
- gaia/eval/webapp/node_modules/ms/index.js +152 -0
- gaia/eval/webapp/node_modules/ms/license.md +21 -0
- gaia/eval/webapp/node_modules/ms/package.json +37 -0
- gaia/eval/webapp/node_modules/ms/readme.md +51 -0
- gaia/eval/webapp/node_modules/negotiator/HISTORY.md +108 -0
- gaia/eval/webapp/node_modules/negotiator/LICENSE +24 -0
- gaia/eval/webapp/node_modules/negotiator/README.md +203 -0
- gaia/eval/webapp/node_modules/negotiator/index.js +82 -0
- gaia/eval/webapp/node_modules/negotiator/lib/charset.js +169 -0
- gaia/eval/webapp/node_modules/negotiator/lib/encoding.js +184 -0
- gaia/eval/webapp/node_modules/negotiator/lib/language.js +179 -0
- gaia/eval/webapp/node_modules/negotiator/lib/mediaType.js +294 -0
- gaia/eval/webapp/node_modules/negotiator/package.json +42 -0
- gaia/eval/webapp/node_modules/object-inspect/.eslintrc +53 -0
- gaia/eval/webapp/node_modules/object-inspect/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/object-inspect/.nycrc +13 -0
- gaia/eval/webapp/node_modules/object-inspect/CHANGELOG.md +424 -0
- gaia/eval/webapp/node_modules/object-inspect/LICENSE +21 -0
- gaia/eval/webapp/node_modules/object-inspect/example/all.js +23 -0
- gaia/eval/webapp/node_modules/object-inspect/example/circular.js +6 -0
- gaia/eval/webapp/node_modules/object-inspect/example/fn.js +5 -0
- gaia/eval/webapp/node_modules/object-inspect/example/inspect.js +10 -0
- gaia/eval/webapp/node_modules/object-inspect/index.js +544 -0
- gaia/eval/webapp/node_modules/object-inspect/package-support.json +20 -0
- gaia/eval/webapp/node_modules/object-inspect/package.json +105 -0
- gaia/eval/webapp/node_modules/object-inspect/readme.markdown +84 -0
- gaia/eval/webapp/node_modules/object-inspect/test/bigint.js +58 -0
- gaia/eval/webapp/node_modules/object-inspect/test/browser/dom.js +15 -0
- gaia/eval/webapp/node_modules/object-inspect/test/circular.js +16 -0
- gaia/eval/webapp/node_modules/object-inspect/test/deep.js +12 -0
- gaia/eval/webapp/node_modules/object-inspect/test/element.js +53 -0
- gaia/eval/webapp/node_modules/object-inspect/test/err.js +48 -0
- gaia/eval/webapp/node_modules/object-inspect/test/fakes.js +29 -0
- gaia/eval/webapp/node_modules/object-inspect/test/fn.js +76 -0
- gaia/eval/webapp/node_modules/object-inspect/test/global.js +17 -0
- gaia/eval/webapp/node_modules/object-inspect/test/has.js +15 -0
- gaia/eval/webapp/node_modules/object-inspect/test/holes.js +15 -0
- gaia/eval/webapp/node_modules/object-inspect/test/indent-option.js +271 -0
- gaia/eval/webapp/node_modules/object-inspect/test/inspect.js +139 -0
- gaia/eval/webapp/node_modules/object-inspect/test/lowbyte.js +12 -0
- gaia/eval/webapp/node_modules/object-inspect/test/number.js +58 -0
- gaia/eval/webapp/node_modules/object-inspect/test/quoteStyle.js +26 -0
- gaia/eval/webapp/node_modules/object-inspect/test/toStringTag.js +40 -0
- gaia/eval/webapp/node_modules/object-inspect/test/undef.js +12 -0
- gaia/eval/webapp/node_modules/object-inspect/test/values.js +261 -0
- gaia/eval/webapp/node_modules/object-inspect/test-core-js.js +26 -0
- gaia/eval/webapp/node_modules/object-inspect/util.inspect.js +1 -0
- gaia/eval/webapp/node_modules/on-finished/HISTORY.md +98 -0
- gaia/eval/webapp/node_modules/on-finished/LICENSE +23 -0
- gaia/eval/webapp/node_modules/on-finished/README.md +162 -0
- gaia/eval/webapp/node_modules/on-finished/index.js +234 -0
- gaia/eval/webapp/node_modules/on-finished/package.json +39 -0
- gaia/eval/webapp/node_modules/parseurl/HISTORY.md +58 -0
- gaia/eval/webapp/node_modules/parseurl/LICENSE +24 -0
- gaia/eval/webapp/node_modules/parseurl/README.md +133 -0
- gaia/eval/webapp/node_modules/parseurl/index.js +158 -0
- gaia/eval/webapp/node_modules/parseurl/package.json +40 -0
- gaia/eval/webapp/node_modules/path/.npmignore +1 -0
- gaia/eval/webapp/node_modules/path/LICENSE +18 -0
- gaia/eval/webapp/node_modules/path/README.md +15 -0
- gaia/eval/webapp/node_modules/path/package.json +24 -0
- gaia/eval/webapp/node_modules/path/path.js +628 -0
- gaia/eval/webapp/node_modules/path-to-regexp/LICENSE +21 -0
- gaia/eval/webapp/node_modules/path-to-regexp/Readme.md +35 -0
- gaia/eval/webapp/node_modules/path-to-regexp/index.js +156 -0
- gaia/eval/webapp/node_modules/path-to-regexp/package.json +30 -0
- gaia/eval/webapp/node_modules/process/.eslintrc +21 -0
- gaia/eval/webapp/node_modules/process/LICENSE +22 -0
- gaia/eval/webapp/node_modules/process/README.md +26 -0
- gaia/eval/webapp/node_modules/process/browser.js +184 -0
- gaia/eval/webapp/node_modules/process/index.js +2 -0
- gaia/eval/webapp/node_modules/process/package.json +27 -0
- gaia/eval/webapp/node_modules/process/test.js +199 -0
- gaia/eval/webapp/node_modules/proxy-addr/HISTORY.md +161 -0
- gaia/eval/webapp/node_modules/proxy-addr/LICENSE +22 -0
- gaia/eval/webapp/node_modules/proxy-addr/README.md +139 -0
- gaia/eval/webapp/node_modules/proxy-addr/index.js +327 -0
- gaia/eval/webapp/node_modules/proxy-addr/package.json +47 -0
- gaia/eval/webapp/node_modules/qs/.editorconfig +46 -0
- gaia/eval/webapp/node_modules/qs/.eslintrc +38 -0
- gaia/eval/webapp/node_modules/qs/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/qs/.nycrc +13 -0
- gaia/eval/webapp/node_modules/qs/CHANGELOG.md +600 -0
- gaia/eval/webapp/node_modules/qs/LICENSE.md +29 -0
- gaia/eval/webapp/node_modules/qs/README.md +709 -0
- gaia/eval/webapp/node_modules/qs/dist/qs.js +90 -0
- gaia/eval/webapp/node_modules/qs/lib/formats.js +23 -0
- gaia/eval/webapp/node_modules/qs/lib/index.js +11 -0
- gaia/eval/webapp/node_modules/qs/lib/parse.js +296 -0
- gaia/eval/webapp/node_modules/qs/lib/stringify.js +351 -0
- gaia/eval/webapp/node_modules/qs/lib/utils.js +265 -0
- gaia/eval/webapp/node_modules/qs/package.json +91 -0
- gaia/eval/webapp/node_modules/qs/test/empty-keys-cases.js +267 -0
- gaia/eval/webapp/node_modules/qs/test/parse.js +1170 -0
- gaia/eval/webapp/node_modules/qs/test/stringify.js +1298 -0
- gaia/eval/webapp/node_modules/qs/test/utils.js +136 -0
- gaia/eval/webapp/node_modules/range-parser/HISTORY.md +56 -0
- gaia/eval/webapp/node_modules/range-parser/LICENSE +23 -0
- gaia/eval/webapp/node_modules/range-parser/README.md +84 -0
- gaia/eval/webapp/node_modules/range-parser/index.js +162 -0
- gaia/eval/webapp/node_modules/range-parser/package.json +44 -0
- gaia/eval/webapp/node_modules/raw-body/HISTORY.md +308 -0
- gaia/eval/webapp/node_modules/raw-body/LICENSE +22 -0
- gaia/eval/webapp/node_modules/raw-body/README.md +223 -0
- gaia/eval/webapp/node_modules/raw-body/SECURITY.md +24 -0
- gaia/eval/webapp/node_modules/raw-body/index.d.ts +87 -0
- gaia/eval/webapp/node_modules/raw-body/index.js +336 -0
- gaia/eval/webapp/node_modules/raw-body/package.json +49 -0
- gaia/eval/webapp/node_modules/safe-buffer/LICENSE +21 -0
- gaia/eval/webapp/node_modules/safe-buffer/README.md +584 -0
- gaia/eval/webapp/node_modules/safe-buffer/index.d.ts +187 -0
- gaia/eval/webapp/node_modules/safe-buffer/index.js +65 -0
- gaia/eval/webapp/node_modules/safe-buffer/package.json +51 -0
- gaia/eval/webapp/node_modules/safer-buffer/LICENSE +21 -0
- gaia/eval/webapp/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- gaia/eval/webapp/node_modules/safer-buffer/Readme.md +156 -0
- gaia/eval/webapp/node_modules/safer-buffer/dangerous.js +58 -0
- gaia/eval/webapp/node_modules/safer-buffer/package.json +34 -0
- gaia/eval/webapp/node_modules/safer-buffer/safer.js +77 -0
- gaia/eval/webapp/node_modules/safer-buffer/tests.js +406 -0
- gaia/eval/webapp/node_modules/send/HISTORY.md +526 -0
- gaia/eval/webapp/node_modules/send/LICENSE +23 -0
- gaia/eval/webapp/node_modules/send/README.md +327 -0
- gaia/eval/webapp/node_modules/send/SECURITY.md +24 -0
- gaia/eval/webapp/node_modules/send/index.js +1142 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/HISTORY.md +14 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/LICENSE +22 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/README.md +128 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/index.js +60 -0
- gaia/eval/webapp/node_modules/send/node_modules/encodeurl/package.json +40 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/index.js +162 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/license.md +21 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/package.json +38 -0
- gaia/eval/webapp/node_modules/send/node_modules/ms/readme.md +59 -0
- gaia/eval/webapp/node_modules/send/package.json +62 -0
- gaia/eval/webapp/node_modules/serve-static/HISTORY.md +487 -0
- gaia/eval/webapp/node_modules/serve-static/LICENSE +25 -0
- gaia/eval/webapp/node_modules/serve-static/README.md +257 -0
- gaia/eval/webapp/node_modules/serve-static/index.js +209 -0
- gaia/eval/webapp/node_modules/serve-static/package.json +42 -0
- gaia/eval/webapp/node_modules/setprototypeof/LICENSE +13 -0
- gaia/eval/webapp/node_modules/setprototypeof/README.md +31 -0
- gaia/eval/webapp/node_modules/setprototypeof/index.d.ts +2 -0
- gaia/eval/webapp/node_modules/setprototypeof/index.js +17 -0
- gaia/eval/webapp/node_modules/setprototypeof/package.json +38 -0
- gaia/eval/webapp/node_modules/setprototypeof/test/index.js +24 -0
- gaia/eval/webapp/node_modules/side-channel/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel/.eslintrc +12 -0
- gaia/eval/webapp/node_modules/side-channel/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel/CHANGELOG.md +110 -0
- gaia/eval/webapp/node_modules/side-channel/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel/README.md +61 -0
- gaia/eval/webapp/node_modules/side-channel/index.d.ts +14 -0
- gaia/eval/webapp/node_modules/side-channel/index.js +43 -0
- gaia/eval/webapp/node_modules/side-channel/package.json +85 -0
- gaia/eval/webapp/node_modules/side-channel/test/index.js +104 -0
- gaia/eval/webapp/node_modules/side-channel/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/side-channel-list/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel-list/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel-list/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel-list/CHANGELOG.md +15 -0
- gaia/eval/webapp/node_modules/side-channel-list/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel-list/README.md +62 -0
- gaia/eval/webapp/node_modules/side-channel-list/index.d.ts +13 -0
- gaia/eval/webapp/node_modules/side-channel-list/index.js +113 -0
- gaia/eval/webapp/node_modules/side-channel-list/list.d.ts +14 -0
- gaia/eval/webapp/node_modules/side-channel-list/package.json +77 -0
- gaia/eval/webapp/node_modules/side-channel-list/test/index.js +104 -0
- gaia/eval/webapp/node_modules/side-channel-list/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/side-channel-map/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel-map/.eslintrc +11 -0
- gaia/eval/webapp/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel-map/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel-map/CHANGELOG.md +22 -0
- gaia/eval/webapp/node_modules/side-channel-map/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel-map/README.md +62 -0
- gaia/eval/webapp/node_modules/side-channel-map/index.d.ts +15 -0
- gaia/eval/webapp/node_modules/side-channel-map/index.js +68 -0
- gaia/eval/webapp/node_modules/side-channel-map/package.json +80 -0
- gaia/eval/webapp/node_modules/side-channel-map/test/index.js +114 -0
- gaia/eval/webapp/node_modules/side-channel-map/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.editorconfig +9 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.eslintrc +12 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/.nycrc +13 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/LICENSE +21 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/README.md +62 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/index.d.ts +15 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/index.js +84 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/package.json +87 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/test/index.js +114 -0
- gaia/eval/webapp/node_modules/side-channel-weakmap/tsconfig.json +9 -0
- gaia/eval/webapp/node_modules/statuses/HISTORY.md +82 -0
- gaia/eval/webapp/node_modules/statuses/LICENSE +23 -0
- gaia/eval/webapp/node_modules/statuses/README.md +136 -0
- gaia/eval/webapp/node_modules/statuses/codes.json +65 -0
- gaia/eval/webapp/node_modules/statuses/index.js +146 -0
- gaia/eval/webapp/node_modules/statuses/package.json +49 -0
- gaia/eval/webapp/node_modules/toidentifier/HISTORY.md +9 -0
- gaia/eval/webapp/node_modules/toidentifier/LICENSE +21 -0
- gaia/eval/webapp/node_modules/toidentifier/README.md +61 -0
- gaia/eval/webapp/node_modules/toidentifier/index.js +32 -0
- gaia/eval/webapp/node_modules/toidentifier/package.json +38 -0
- gaia/eval/webapp/node_modules/type-is/HISTORY.md +259 -0
- gaia/eval/webapp/node_modules/type-is/LICENSE +23 -0
- gaia/eval/webapp/node_modules/type-is/README.md +170 -0
- gaia/eval/webapp/node_modules/type-is/index.js +266 -0
- gaia/eval/webapp/node_modules/type-is/package.json +45 -0
- gaia/eval/webapp/node_modules/unpipe/HISTORY.md +4 -0
- gaia/eval/webapp/node_modules/unpipe/LICENSE +22 -0
- gaia/eval/webapp/node_modules/unpipe/README.md +43 -0
- gaia/eval/webapp/node_modules/unpipe/index.js +69 -0
- gaia/eval/webapp/node_modules/unpipe/package.json +27 -0
- gaia/eval/webapp/node_modules/util/LICENSE +18 -0
- gaia/eval/webapp/node_modules/util/README.md +15 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/LICENSE +16 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/README.md +42 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits.js +7 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/inherits_browser.js +23 -0
- gaia/eval/webapp/node_modules/util/node_modules/inherits/package.json +29 -0
- gaia/eval/webapp/node_modules/util/package.json +35 -0
- gaia/eval/webapp/node_modules/util/support/isBuffer.js +3 -0
- gaia/eval/webapp/node_modules/util/support/isBufferBrowser.js +6 -0
- gaia/eval/webapp/node_modules/util/util.js +586 -0
- gaia/eval/webapp/node_modules/utils-merge/.npmignore +9 -0
- gaia/eval/webapp/node_modules/utils-merge/LICENSE +20 -0
- gaia/eval/webapp/node_modules/utils-merge/README.md +34 -0
- gaia/eval/webapp/node_modules/utils-merge/index.js +23 -0
- gaia/eval/webapp/node_modules/utils-merge/package.json +40 -0
- gaia/eval/webapp/node_modules/vary/HISTORY.md +39 -0
- gaia/eval/webapp/node_modules/vary/LICENSE +22 -0
- gaia/eval/webapp/node_modules/vary/README.md +101 -0
- gaia/eval/webapp/node_modules/vary/index.js +149 -0
- gaia/eval/webapp/node_modules/vary/package.json +43 -0
- gaia/eval/webapp/package-lock.json +875 -0
- gaia/eval/webapp/package.json +21 -0
- gaia/eval/webapp/public/app.js +3403 -0
- gaia/eval/webapp/public/index.html +88 -0
- gaia/eval/webapp/public/styles.css +3661 -0
- gaia/eval/webapp/server.js +416 -0
- gaia/eval/webapp/test-setup.js +73 -0
- gaia/llm/__init__.py +2 -0
- gaia/llm/lemonade_client.py +3083 -0
- gaia/llm/lemonade_manager.py +269 -0
- gaia/llm/llm_client.py +729 -0
- gaia/llm/vlm_client.py +307 -0
- gaia/logger.py +189 -0
- gaia/mcp/agent_mcp_server.py +245 -0
- gaia/mcp/blender_mcp_client.py +138 -0
- gaia/mcp/blender_mcp_server.py +648 -0
- gaia/mcp/context7_cache.py +332 -0
- gaia/mcp/external_services.py +518 -0
- gaia/mcp/mcp_bridge.py +550 -0
- gaia/mcp/servers/__init__.py +6 -0
- gaia/mcp/servers/docker_mcp.py +83 -0
- gaia/rag/__init__.py +10 -0
- gaia/rag/app.py +293 -0
- gaia/rag/demo.py +304 -0
- gaia/rag/pdf_utils.py +235 -0
- gaia/rag/sdk.py +2194 -0
- gaia/security.py +163 -0
- gaia/talk/app.py +289 -0
- gaia/talk/sdk.py +538 -0
- gaia/util.py +46 -0
- gaia/version.py +100 -0
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
# Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
"""
|
|
4
|
+
Blender-specific agent for creating and modifying 3D scenes.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Any, Dict, Optional
|
|
9
|
+
|
|
10
|
+
from gaia.agents.base.agent import Agent
|
|
11
|
+
from gaia.agents.base.console import AgentConsole
|
|
12
|
+
from gaia.agents.base.tools import tool
|
|
13
|
+
from gaia.agents.blender.core.scene import generate_scene_diagnosis_code
|
|
14
|
+
from gaia.mcp.blender_mcp_client import MCPClient
|
|
15
|
+
|
|
16
|
+
# Set up logging
|
|
17
|
+
logging.basicConfig(level=logging.INFO)
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class BlenderAgent(Agent):
|
|
22
|
+
"""
|
|
23
|
+
Blender-specific agent focused on 3D scene creation and modification.
|
|
24
|
+
Inherits core functionality from the base Agent class.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
# Define Blender-specific tools that can execute directly without requiring a plan
|
|
28
|
+
SIMPLE_TOOLS = ["clear_scene", "get_scene_info"]
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
mcp: Optional[MCPClient] = None,
|
|
33
|
+
model_id: str = None,
|
|
34
|
+
base_url: str = "http://localhost:8000/api/v1",
|
|
35
|
+
max_steps: int = 5,
|
|
36
|
+
debug_prompts: bool = False,
|
|
37
|
+
output_dir: str = None,
|
|
38
|
+
streaming: bool = False,
|
|
39
|
+
show_stats: bool = True,
|
|
40
|
+
):
|
|
41
|
+
"""
|
|
42
|
+
Initialize the BlenderAgent with MCP client and LLM client.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
mcp: An optional pre-configured MCP client, otherwise a new one will be created
|
|
46
|
+
model_id: The ID of the model to use with LLM server
|
|
47
|
+
base_url: Base URL for the local LLM server API
|
|
48
|
+
max_steps: Maximum number of steps the agent can take before terminating
|
|
49
|
+
debug_prompts: If True, includes prompts in the conversation history
|
|
50
|
+
output_dir: Directory for storing JSON output files (default: current directory)
|
|
51
|
+
streaming: If True, enables real-time streaming of LLM responses (default: False)
|
|
52
|
+
show_stats: If True, displays LLM performance stats after each response (default: True)
|
|
53
|
+
"""
|
|
54
|
+
# Initialize the MCP client for Blender communication
|
|
55
|
+
self.mcp = mcp if mcp else MCPClient()
|
|
56
|
+
|
|
57
|
+
# Call the parent class constructor
|
|
58
|
+
super().__init__(
|
|
59
|
+
model_id=model_id,
|
|
60
|
+
base_url=base_url,
|
|
61
|
+
max_steps=max_steps,
|
|
62
|
+
debug_prompts=debug_prompts,
|
|
63
|
+
output_dir=output_dir,
|
|
64
|
+
streaming=streaming,
|
|
65
|
+
show_stats=show_stats,
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# Register Blender-specific tools
|
|
69
|
+
self._register_tools()
|
|
70
|
+
|
|
71
|
+
def _create_console(self) -> AgentConsole:
|
|
72
|
+
"""
|
|
73
|
+
Create and return a Agent-specific console output handler.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
A AgentConsole instance
|
|
77
|
+
"""
|
|
78
|
+
return AgentConsole()
|
|
79
|
+
|
|
80
|
+
def _get_system_prompt(self) -> str:
|
|
81
|
+
"""Generate the system prompt for the Blender agent."""
|
|
82
|
+
# Get formatted tools from registry
|
|
83
|
+
return f"""
|
|
84
|
+
You are a specialized Blender 3D assistant that can create and modify 3D scenes.
|
|
85
|
+
You will use a set of tools to accomplish tasks based on the user's request.
|
|
86
|
+
|
|
87
|
+
==== JSON RESPONSE FORMAT ====
|
|
88
|
+
ALWAYS respond with a single valid JSON object. NO text outside this structure.
|
|
89
|
+
- Use double quotes for keys and string values
|
|
90
|
+
- Ensure all braces and brackets are properly closed
|
|
91
|
+
- No trailing commas in arrays or objects
|
|
92
|
+
- All required fields must be included
|
|
93
|
+
- Never wrap your JSON in code blocks or backticks
|
|
94
|
+
|
|
95
|
+
Your JSON response must follow this format:
|
|
96
|
+
{{
|
|
97
|
+
"thought": "your reasoning about what to do",
|
|
98
|
+
"goal": "clear statement of what you're achieving",
|
|
99
|
+
"plan": [
|
|
100
|
+
{{"tool": "tool1", "tool_args": {{"arg1": "val1"}}}},
|
|
101
|
+
{{"tool": "tool2", "tool_args": {{"arg1": "val1"}}}}
|
|
102
|
+
],
|
|
103
|
+
"tool": "first_tool_to_execute",
|
|
104
|
+
"tool_args": {{"arg1": "val1", "arg2": "val2"}}
|
|
105
|
+
}}
|
|
106
|
+
|
|
107
|
+
For final answers:
|
|
108
|
+
{{
|
|
109
|
+
"thought": "your reasoning",
|
|
110
|
+
"goal": "what was achieved",
|
|
111
|
+
"answer": "your final answer"
|
|
112
|
+
}}
|
|
113
|
+
|
|
114
|
+
==== CRITICAL RULES ====
|
|
115
|
+
1. Create a plan for multi-step tasks, but simple single operations (like clear_scene) can execute directly
|
|
116
|
+
2. Each plan step must be atomic (one tool call per step)
|
|
117
|
+
3. For colored objects, ALWAYS include both create_object AND set_material_color steps
|
|
118
|
+
4. When clearing a scene, ONLY use clear_scene without creating new objects unless requested
|
|
119
|
+
5. Always use the actual returned object names for subsequent operations
|
|
120
|
+
6. Never repeat the same tool call with identical arguments
|
|
121
|
+
|
|
122
|
+
==== COLORED OBJECT DETECTION ====
|
|
123
|
+
🔍 SCAN the user request for color words:
|
|
124
|
+
- "red", "green", "blue", "yellow", "purple", "cyan", "white", "black"
|
|
125
|
+
- "colored", "paint", "material"
|
|
126
|
+
|
|
127
|
+
⚠️ IF you find ANY color words, you MUST:
|
|
128
|
+
1. Create the object with create_object
|
|
129
|
+
2. Set its color with set_material_color
|
|
130
|
+
3. Then do any other modifications
|
|
131
|
+
|
|
132
|
+
❌ NEVER skip the color step if a color is mentioned!
|
|
133
|
+
|
|
134
|
+
Examples of colored requests:
|
|
135
|
+
- "blue cylinder" → needs create_object + set_material_color
|
|
136
|
+
- "red sphere" → needs create_object + set_material_color
|
|
137
|
+
- "green cube and yellow cone" → needs 4 steps total
|
|
138
|
+
|
|
139
|
+
==== TOOL PARAMETER RULES ====
|
|
140
|
+
⚠️ CRITICAL: create_object does NOT accept a 'color' parameter!
|
|
141
|
+
✅ CORRECT workflow for colored objects:
|
|
142
|
+
Step 1: create_object (type, name, location, rotation, scale ONLY)
|
|
143
|
+
Step 2: set_material_color (object_name, color)
|
|
144
|
+
|
|
145
|
+
⚠️ CRITICAL: Colors must be RGBA format with 4 values [r, g, b, a]
|
|
146
|
+
❌ WRONG: [0, 0, 1] (only 3 values)
|
|
147
|
+
✅ CORRECT: [0, 0, 1, 1] (4 values including alpha)
|
|
148
|
+
|
|
149
|
+
⚠️ CRITICAL: EVERY colored object must have BOTH steps!
|
|
150
|
+
If user asks for "green cube and red sphere", you need 4 steps:
|
|
151
|
+
1. create_object (cube)
|
|
152
|
+
2. set_material_color (cube, green)
|
|
153
|
+
3. create_object (sphere)
|
|
154
|
+
4. set_material_color (sphere, red)
|
|
155
|
+
|
|
156
|
+
==== COMMON WORKFLOWS ====
|
|
157
|
+
1. Clearing a scene: Use clear_scene() with no arguments
|
|
158
|
+
2. Creating a single colored object:
|
|
159
|
+
- Step 1: create_object(type="CYLINDER", name="my_obj", location=[0,0,0])
|
|
160
|
+
- Step 2: set_material_color(object_name="my_obj", color=[0,0,1,1])
|
|
161
|
+
3. Creating multiple colored objects:
|
|
162
|
+
- Step 1: create_object(type="CUBE", name="cube1", location=[0,0,0])
|
|
163
|
+
- Step 2: set_material_color(object_name="cube1", color=[0,1,0,1])
|
|
164
|
+
- Step 3: create_object(type="SPHERE", name="sphere1", location=[3,0,0])
|
|
165
|
+
- Step 4: set_material_color(object_name="sphere1", color=[1,0,0,1])
|
|
166
|
+
4. Modifying objects: Use modify_object with the parameters you want to change
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
def _register_tools(self):
|
|
170
|
+
"""Register all Blender-related tools for the agent."""
|
|
171
|
+
|
|
172
|
+
@tool
|
|
173
|
+
def clear_scene() -> Dict[str, Any]:
|
|
174
|
+
"""
|
|
175
|
+
Remove all objects from the current Blender scene.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Dictionary containing the operation result
|
|
179
|
+
|
|
180
|
+
Example JSON response:
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"thought": "I will clear the scene to start fresh",
|
|
184
|
+
"goal": "Clear the scene to start fresh",
|
|
185
|
+
"tool": "clear_scene",
|
|
186
|
+
"tool_args": {}
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
"""
|
|
190
|
+
try:
|
|
191
|
+
from gaia.agents.blender.core.scene import SceneManager
|
|
192
|
+
|
|
193
|
+
scene_manager = SceneManager(self.mcp)
|
|
194
|
+
return scene_manager.clear_scene()
|
|
195
|
+
except Exception as e:
|
|
196
|
+
self.error_history.append(str(e))
|
|
197
|
+
return {"status": "error", "error": str(e)}
|
|
198
|
+
|
|
199
|
+
@tool
|
|
200
|
+
def create_object(
|
|
201
|
+
type: str = "CUBE",
|
|
202
|
+
name: str = None,
|
|
203
|
+
location: tuple = (0, 0, 0),
|
|
204
|
+
rotation: tuple = (0, 0, 0),
|
|
205
|
+
scale: tuple = (1, 1, 1),
|
|
206
|
+
) -> Dict[str, Any]:
|
|
207
|
+
"""
|
|
208
|
+
Create a 3D object in Blender.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
type: Object type (CUBE, SPHERE, CYLINDER, CONE, TORUS)
|
|
212
|
+
name: Optional name for the object (default: generated from type)
|
|
213
|
+
location: (x, y, z) coordinates for object position (default: (0,0,0))
|
|
214
|
+
rotation: (rx, ry, rz) rotation in radians (default: (0,0,0))
|
|
215
|
+
scale: (sx, sy, sz) scaling factors for the object (default: (1,1,1))
|
|
216
|
+
|
|
217
|
+
Returns:
|
|
218
|
+
Dictionary containing the creation result
|
|
219
|
+
|
|
220
|
+
Example JSON response:
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"thought": "I will create a cube at the center of the scene",
|
|
224
|
+
"goal": "Create a red cube at the center of the scene",
|
|
225
|
+
"tool": "create_object",
|
|
226
|
+
"tool_args": {
|
|
227
|
+
"type": "CUBE",
|
|
228
|
+
"name": "my_cube",
|
|
229
|
+
"location": [0, 0, 0],
|
|
230
|
+
"rotation": [0, 0, 0],
|
|
231
|
+
"scale": [1, 1, 1]
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
"""
|
|
236
|
+
try:
|
|
237
|
+
result = self.mcp.create_object(
|
|
238
|
+
type=type.upper(),
|
|
239
|
+
name=name or f"generated_{type.lower()}",
|
|
240
|
+
location=location,
|
|
241
|
+
rotation=rotation,
|
|
242
|
+
scale=scale,
|
|
243
|
+
)
|
|
244
|
+
return result
|
|
245
|
+
except Exception as e:
|
|
246
|
+
self.error_history.append(str(e))
|
|
247
|
+
return {"status": "error", "error": str(e)}
|
|
248
|
+
|
|
249
|
+
@tool
|
|
250
|
+
def set_material_color(
|
|
251
|
+
object_name: str, color: tuple = (1, 0, 0, 1)
|
|
252
|
+
) -> Dict[str, Any]:
|
|
253
|
+
"""
|
|
254
|
+
Set the material color for an object. Creates a new material if one doesn't exist.
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
object_name: Name of the object to modify
|
|
258
|
+
color: RGBA color values as tuple (red, green, blue, alpha), values from 0-1
|
|
259
|
+
|
|
260
|
+
Returns:
|
|
261
|
+
Dictionary with the operation result
|
|
262
|
+
|
|
263
|
+
Example JSON response:
|
|
264
|
+
```json
|
|
265
|
+
{
|
|
266
|
+
"thought": "I will set the cube's material to red",
|
|
267
|
+
"goal": "Create a red cube at the center of the scene",
|
|
268
|
+
"tool": "set_material_color",
|
|
269
|
+
"tool_args": {
|
|
270
|
+
"object_name": "my_cube",
|
|
271
|
+
"color": [1, 0, 0, 1]
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
"""
|
|
276
|
+
try:
|
|
277
|
+
from gaia.agents.blender.core.materials import MaterialManager
|
|
278
|
+
|
|
279
|
+
material_manager = MaterialManager(self.mcp)
|
|
280
|
+
return material_manager.set_material_color(object_name, color)
|
|
281
|
+
except Exception as e:
|
|
282
|
+
self.error_history.append(str(e))
|
|
283
|
+
return {"status": "error", "error": str(e)}
|
|
284
|
+
|
|
285
|
+
# @tool
|
|
286
|
+
def get_object_info(name: str) -> Dict[str, Any]:
|
|
287
|
+
"""
|
|
288
|
+
Get information about an object in the scene.
|
|
289
|
+
|
|
290
|
+
Args:
|
|
291
|
+
name: Name of the object
|
|
292
|
+
|
|
293
|
+
Returns:
|
|
294
|
+
Dictionary containing object information
|
|
295
|
+
|
|
296
|
+
Example JSON response:
|
|
297
|
+
```json
|
|
298
|
+
{
|
|
299
|
+
"thought": "I will get information about the cube",
|
|
300
|
+
"goal": "Create a red cube at the center of the scene",
|
|
301
|
+
"tool": "get_object_info",
|
|
302
|
+
"tool_args": {
|
|
303
|
+
"name": "my_cube"
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
"""
|
|
308
|
+
try:
|
|
309
|
+
return self.mcp.get_object_info(name)
|
|
310
|
+
except Exception as e:
|
|
311
|
+
self.error_history.append(str(e))
|
|
312
|
+
return {"status": "error", "error": str(e)}
|
|
313
|
+
|
|
314
|
+
@tool
|
|
315
|
+
def modify_object(
|
|
316
|
+
name: str,
|
|
317
|
+
location: tuple = None,
|
|
318
|
+
scale: tuple = None,
|
|
319
|
+
rotation: tuple = None,
|
|
320
|
+
) -> Dict[str, Any]:
|
|
321
|
+
"""
|
|
322
|
+
Modify an existing object in Blender.
|
|
323
|
+
|
|
324
|
+
Args:
|
|
325
|
+
name: Name of the object to modify
|
|
326
|
+
location: New (x, y, z) location or None to keep current
|
|
327
|
+
scale: New (sx, sy, sz) scale or None to keep current
|
|
328
|
+
rotation: New (rx, ry, rz) rotation or None to keep current
|
|
329
|
+
|
|
330
|
+
Returns:
|
|
331
|
+
Dictionary with the modification result
|
|
332
|
+
|
|
333
|
+
Example JSON response:
|
|
334
|
+
```json
|
|
335
|
+
{
|
|
336
|
+
"thought": "I will move the cube up by 2 units",
|
|
337
|
+
"goal": "Create a red cube at the center of the scene",
|
|
338
|
+
"tool": "modify_object",
|
|
339
|
+
"tool_args": {
|
|
340
|
+
"name": "my_cube",
|
|
341
|
+
"location": [0, 0, 2],
|
|
342
|
+
"scale": null,
|
|
343
|
+
"rotation": null
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
"""
|
|
348
|
+
try:
|
|
349
|
+
return self.mcp.modify_object(
|
|
350
|
+
name=name, location=location, scale=scale, rotation=rotation
|
|
351
|
+
)
|
|
352
|
+
except Exception as e:
|
|
353
|
+
self.error_history.append(str(e))
|
|
354
|
+
return {"status": "error", "error": str(e)}
|
|
355
|
+
|
|
356
|
+
# @tool
|
|
357
|
+
def delete_object(name: str) -> Dict[str, Any]:
|
|
358
|
+
"""
|
|
359
|
+
Delete an object from the scene.
|
|
360
|
+
|
|
361
|
+
Args:
|
|
362
|
+
name: Name of the object to delete
|
|
363
|
+
|
|
364
|
+
Returns:
|
|
365
|
+
Dictionary with the deletion result
|
|
366
|
+
|
|
367
|
+
Example JSON response:
|
|
368
|
+
```json
|
|
369
|
+
{
|
|
370
|
+
"thought": "I will delete the cube",
|
|
371
|
+
"goal": "Clear the scene to start fresh",
|
|
372
|
+
"tool": "delete_object",
|
|
373
|
+
"tool_args": {
|
|
374
|
+
"name": "my_cube"
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
```
|
|
378
|
+
"""
|
|
379
|
+
try:
|
|
380
|
+
return self.mcp.delete_object(name)
|
|
381
|
+
except Exception as e:
|
|
382
|
+
self.error_history.append(str(e))
|
|
383
|
+
return {"status": "error", "error": str(e)}
|
|
384
|
+
|
|
385
|
+
@tool
|
|
386
|
+
def get_scene_info() -> Dict[str, Any]:
|
|
387
|
+
"""
|
|
388
|
+
Get information about the current scene.
|
|
389
|
+
|
|
390
|
+
Returns:
|
|
391
|
+
Dictionary containing scene information
|
|
392
|
+
|
|
393
|
+
Example JSON response:
|
|
394
|
+
```json
|
|
395
|
+
{
|
|
396
|
+
"thought": "I will get information about the current scene",
|
|
397
|
+
"goal": "Clear the scene to start fresh",
|
|
398
|
+
"tool": "get_scene_info",
|
|
399
|
+
"tool_args": {}
|
|
400
|
+
}
|
|
401
|
+
```
|
|
402
|
+
"""
|
|
403
|
+
try:
|
|
404
|
+
return self.mcp.get_scene_info()
|
|
405
|
+
except Exception as e:
|
|
406
|
+
self.error_history.append(str(e))
|
|
407
|
+
return {"status": "error", "error": str(e)}
|
|
408
|
+
|
|
409
|
+
# @tool
|
|
410
|
+
def execute_blender_code(code: str) -> Dict[str, Any]:
|
|
411
|
+
"""
|
|
412
|
+
Execute arbitrary Python code in Blender with error handling.
|
|
413
|
+
|
|
414
|
+
Args:
|
|
415
|
+
code: Python code to execute in Blender
|
|
416
|
+
|
|
417
|
+
Returns:
|
|
418
|
+
Dictionary with execution results or error information
|
|
419
|
+
|
|
420
|
+
Example JSON response:
|
|
421
|
+
```json
|
|
422
|
+
{
|
|
423
|
+
"thought": "I will execute custom code to create a complex shape",
|
|
424
|
+
"goal": "Create a red cube at the center of the scene",
|
|
425
|
+
"tool": "execute_blender_code",
|
|
426
|
+
"tool_args": {
|
|
427
|
+
"code": "import bpy\\nbpy.ops.mesh.primitive_cube_add()"
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
"""
|
|
432
|
+
try:
|
|
433
|
+
return self.mcp.execute_code(code)
|
|
434
|
+
except Exception as e:
|
|
435
|
+
self.error_history.append(str(e))
|
|
436
|
+
return {"status": "error", "error": str(e)}
|
|
437
|
+
|
|
438
|
+
# @tool
|
|
439
|
+
def diagnose_scene() -> Dict[str, Any]:
|
|
440
|
+
"""
|
|
441
|
+
Diagnose the current Blender scene for common issues.
|
|
442
|
+
Returns information about objects, materials, and potential problems.
|
|
443
|
+
|
|
444
|
+
Returns:
|
|
445
|
+
Dictionary with diagnostic information
|
|
446
|
+
|
|
447
|
+
Example JSON response:
|
|
448
|
+
```json
|
|
449
|
+
{
|
|
450
|
+
"thought": "I will diagnose the scene for any issues",
|
|
451
|
+
"goal": "Clear the scene to start fresh",
|
|
452
|
+
"tool": "diagnose_scene",
|
|
453
|
+
"tool_args": {}
|
|
454
|
+
}
|
|
455
|
+
```
|
|
456
|
+
"""
|
|
457
|
+
try:
|
|
458
|
+
# Use the core library's scene diagnosis code generator
|
|
459
|
+
diagnostic_code = generate_scene_diagnosis_code()
|
|
460
|
+
return self.mcp.execute_code(diagnostic_code)
|
|
461
|
+
except Exception as e:
|
|
462
|
+
self.error_history.append(str(e))
|
|
463
|
+
return {"status": "error", "error": str(e)}
|
|
464
|
+
|
|
465
|
+
def _post_process_tool_result(
|
|
466
|
+
self, tool_name: str, tool_args: Dict[str, Any], tool_result: Dict[str, Any]
|
|
467
|
+
) -> None:
|
|
468
|
+
"""
|
|
469
|
+
Post-process the tool result for Blender-specific handling.
|
|
470
|
+
|
|
471
|
+
Args:
|
|
472
|
+
tool_name: Name of the tool that was executed
|
|
473
|
+
tool_args: Arguments that were passed to the tool
|
|
474
|
+
tool_result: Result returned by the tool
|
|
475
|
+
"""
|
|
476
|
+
# Track object name if created
|
|
477
|
+
if tool_name == "create_object":
|
|
478
|
+
actual_name = self._track_object_name(tool_result)
|
|
479
|
+
if actual_name:
|
|
480
|
+
logger.debug(f"Actual object name created: {actual_name}")
|
|
481
|
+
self.console.print_info(
|
|
482
|
+
f"Note: Blender assigned name '{actual_name}' to the created object"
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
# Update subsequent steps in the plan that might use this object
|
|
486
|
+
if self.current_plan and self.current_step < len(self.current_plan) - 1:
|
|
487
|
+
for i in range(self.current_step + 1, len(self.current_plan)):
|
|
488
|
+
future_step = self.current_plan[i]
|
|
489
|
+
if isinstance(future_step, dict) and "tool_args" in future_step:
|
|
490
|
+
args = future_step["tool_args"]
|
|
491
|
+
# Look for object_name or name parameters
|
|
492
|
+
if "object_name" in args and args[
|
|
493
|
+
"object_name"
|
|
494
|
+
] == tool_args.get("name"):
|
|
495
|
+
logger.debug(
|
|
496
|
+
f"Updating object_name in future step {i+1} from {args['object_name']} to {actual_name}"
|
|
497
|
+
)
|
|
498
|
+
self.current_plan[i]["tool_args"][
|
|
499
|
+
"object_name"
|
|
500
|
+
] = actual_name
|
|
501
|
+
if "name" in args and args["name"] == tool_args.get("name"):
|
|
502
|
+
logger.debug(
|
|
503
|
+
f"Updating name in future step {i+1} from {args['name']} to {actual_name}"
|
|
504
|
+
)
|
|
505
|
+
self.current_plan[i]["tool_args"]["name"] = actual_name
|
|
506
|
+
|
|
507
|
+
def _track_object_name(self, result):
|
|
508
|
+
"""
|
|
509
|
+
Extract and track the actual object name returned by Blender.
|
|
510
|
+
|
|
511
|
+
Args:
|
|
512
|
+
result: The result dictionary from a tool execution
|
|
513
|
+
|
|
514
|
+
Returns:
|
|
515
|
+
The actual object name if found, None otherwise
|
|
516
|
+
"""
|
|
517
|
+
try:
|
|
518
|
+
if isinstance(result, dict):
|
|
519
|
+
if result.get("status") == "success":
|
|
520
|
+
if "result" in result and isinstance(result["result"], dict):
|
|
521
|
+
# Extract name from create_object result
|
|
522
|
+
if "name" in result["result"]:
|
|
523
|
+
actual_name = result["result"]["name"]
|
|
524
|
+
logger.debug(f"Extracted object name: {actual_name}")
|
|
525
|
+
return actual_name
|
|
526
|
+
return None
|
|
527
|
+
except Exception as e:
|
|
528
|
+
logger.error(f"Error extracting object name: {str(e)}")
|
|
529
|
+
return None
|
|
530
|
+
|
|
531
|
+
def create_interactive_scene(
|
|
532
|
+
self,
|
|
533
|
+
scene_description: str,
|
|
534
|
+
max_steps: int = None,
|
|
535
|
+
trace: bool = True,
|
|
536
|
+
filename: str = None,
|
|
537
|
+
) -> Dict[str, Any]:
|
|
538
|
+
"""
|
|
539
|
+
Create a more complex scene with multiple objects and relationships.
|
|
540
|
+
|
|
541
|
+
Args:
|
|
542
|
+
scene_description: Description of the scene to create
|
|
543
|
+
max_steps: Maximum number of steps to take in the conversation (overrides class default if provided)
|
|
544
|
+
trace: If True, write detailed trace to file
|
|
545
|
+
filename: Optional filename for trace output, if None a timestamped name will be generated
|
|
546
|
+
|
|
547
|
+
Returns:
|
|
548
|
+
Dict containing the scene creation result
|
|
549
|
+
"""
|
|
550
|
+
# Same process as process_query but with more steps allowed if specified
|
|
551
|
+
return self.process_query(
|
|
552
|
+
f"Create a complete 3D scene with the following description: {scene_description}",
|
|
553
|
+
max_steps=max_steps if max_steps is not None else self.max_steps * 2,
|
|
554
|
+
trace=trace,
|
|
555
|
+
filename=filename,
|
|
556
|
+
)
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
from typing import Any, Dict, Optional, Tuple
|
|
5
|
+
|
|
6
|
+
from gaia.llm.llm_client import LLMClient
|
|
7
|
+
from gaia.mcp.blender_mcp_client import MCPClient
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class BlenderAgentSimple:
|
|
11
|
+
"""Agent wrapper for the Blender Object Creator that handles LLM-driven object creation.
|
|
12
|
+
|
|
13
|
+
This is a 'simple' agent because it provides a streamlined interface between natural language
|
|
14
|
+
input and Blender operations, focusing only on basic object creation. It uses an LLM to parse
|
|
15
|
+
user requests into structured commands and the MCP client to execute those commands in Blender.
|
|
16
|
+
Unlike more complex agents, it doesn't handle advanced modeling, scene composition, or multi-step
|
|
17
|
+
operations - it's designed for single-object creation with minimal parameters (type, location, scale).
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
# Embed system prompt directly in the class
|
|
21
|
+
SYSTEM_PROMPT = """
|
|
22
|
+
You are a 3D modeling assistant. IMPORTANT: For EACH user request, respond with EXACTLY ONE LINE in this format:
|
|
23
|
+
TYPE,x,y,z,sx,sy,sz
|
|
24
|
+
|
|
25
|
+
Where:
|
|
26
|
+
- TYPE is one of: CUBE, SPHERE, CYLINDER, CONE, TORUS - no other types allowed
|
|
27
|
+
- x,y,z are the LOCATION coordinates in 3D space (must be numbers)
|
|
28
|
+
- sx,sy,sz are the SCALE factors (must be numbers)
|
|
29
|
+
|
|
30
|
+
You MUST include ALL 7 parameters separated by commas.
|
|
31
|
+
You MUST respond with ONLY ONE LINE.
|
|
32
|
+
You MUST NOT include any other text.
|
|
33
|
+
|
|
34
|
+
Example: "Create a large sphere at the origin" → SPHERE,0,0,0,2,2,2
|
|
35
|
+
Example: "Make a tall cylinder" → CYLINDER,0,0,0,1,1,3
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
llm: Optional[LLMClient] = None,
|
|
41
|
+
mcp: Optional[MCPClient] = None,
|
|
42
|
+
use_local: bool = True,
|
|
43
|
+
base_url: Optional[str] = "http://localhost:8000/api/v1",
|
|
44
|
+
):
|
|
45
|
+
"""
|
|
46
|
+
Initialize the BlenderAgentSimple with LLM and MCP clients.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
llm: An optional pre-configured LLM client, otherwise a new one will be created
|
|
50
|
+
mcp: An optional pre-configured MCP client, otherwise a new one will be created
|
|
51
|
+
use_local: Whether to use a local LLM (True) or a remote API (False)
|
|
52
|
+
base_url: Base URL for the local LLM API if using local LLM. If None and use_local=True,
|
|
53
|
+
defaults to "http://localhost:8000/api/v1"
|
|
54
|
+
"""
|
|
55
|
+
self.llm = (
|
|
56
|
+
llm
|
|
57
|
+
if llm
|
|
58
|
+
else LLMClient(
|
|
59
|
+
use_local=use_local, system_prompt=self.SYSTEM_PROMPT, base_url=base_url
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
self.mcp = mcp if mcp else MCPClient()
|
|
63
|
+
|
|
64
|
+
def process_query(self, user_input: str) -> Dict[str, Any]:
|
|
65
|
+
"""
|
|
66
|
+
Process a user query to create a 3D object.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
user_input: User's description of the object to create
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
Dict containing the result of the operation and any relevant data
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
# Get object creation instruction from LLM based on user input
|
|
76
|
+
llm_response = self.llm.generate(user_input).strip()
|
|
77
|
+
|
|
78
|
+
# Parse the LLM response
|
|
79
|
+
obj_type, location, scale = self._parse_llm_response(llm_response)
|
|
80
|
+
|
|
81
|
+
# Create the object in Blender
|
|
82
|
+
result = self.mcp.create_object(
|
|
83
|
+
type=obj_type,
|
|
84
|
+
name=f"llm_generated_{obj_type.lower()}",
|
|
85
|
+
location=location,
|
|
86
|
+
scale=scale,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
return {
|
|
90
|
+
"status": "success",
|
|
91
|
+
"llm_response": llm_response,
|
|
92
|
+
"object_type": obj_type,
|
|
93
|
+
"location": location,
|
|
94
|
+
"scale": scale,
|
|
95
|
+
"blender_result": result,
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
except Exception as e:
|
|
99
|
+
return {
|
|
100
|
+
"status": "error",
|
|
101
|
+
"error": str(e),
|
|
102
|
+
"llm_response": llm_response if "llm_response" in locals() else None,
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
def _parse_llm_response(
|
|
106
|
+
self, llm_response: str
|
|
107
|
+
) -> Tuple[str, Tuple[float, float, float], Tuple[float, float, float]]:
|
|
108
|
+
"""
|
|
109
|
+
Parse the LLM response into object parameters.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
llm_response: The response from the LLM in the format TYPE,x,y,z,sx,sy,sz
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Tuple containing (object_type, location_tuple, scale_tuple)
|
|
116
|
+
|
|
117
|
+
Raises:
|
|
118
|
+
ValueError: If the response format is invalid
|
|
119
|
+
"""
|
|
120
|
+
try:
|
|
121
|
+
# Simple parsing, assuming format: TYPE,x,y,z,sx,sy,sz
|
|
122
|
+
parts = llm_response.split(",")
|
|
123
|
+
if len(parts) != 7:
|
|
124
|
+
raise ValueError(f"Expected 7 parts in response, got {len(parts)}")
|
|
125
|
+
|
|
126
|
+
obj_type = parts[0].strip().upper()
|
|
127
|
+
location = (float(parts[1]), float(parts[2]), float(parts[3]))
|
|
128
|
+
scale = (float(parts[4]), float(parts[5]), float(parts[6]))
|
|
129
|
+
|
|
130
|
+
return obj_type, location, scale
|
|
131
|
+
|
|
132
|
+
except Exception as e:
|
|
133
|
+
raise ValueError(
|
|
134
|
+
f"Failed to parse LLM response: {e}. Raw response: {llm_response}"
|
|
135
|
+
)
|