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
gaia/agents/chat/app.py
ADDED
|
@@ -0,0 +1,1058 @@
|
|
|
1
|
+
# Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
"""
|
|
4
|
+
Chat Agent Application - Interactive chat with RAG and file search.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import os
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
from gaia.agents.chat.agent import ChatAgent, ChatAgentConfig
|
|
13
|
+
from gaia.logger import get_logger
|
|
14
|
+
|
|
15
|
+
logger = get_logger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def parse_args():
|
|
19
|
+
"""Parse command line arguments."""
|
|
20
|
+
parser = argparse.ArgumentParser(
|
|
21
|
+
description="Chat Agent with RAG and file search capabilities"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
# LLM backend options
|
|
25
|
+
parser.add_argument(
|
|
26
|
+
"--use-claude", action="store_true", help="Use Claude API instead of local LLM"
|
|
27
|
+
)
|
|
28
|
+
parser.add_argument(
|
|
29
|
+
"--use-chatgpt",
|
|
30
|
+
action="store_true",
|
|
31
|
+
help="Use ChatGPT/OpenAI API instead of local LLM",
|
|
32
|
+
)
|
|
33
|
+
parser.add_argument(
|
|
34
|
+
"--claude-model",
|
|
35
|
+
type=str,
|
|
36
|
+
default="claude-sonnet-4-20250514",
|
|
37
|
+
help="Claude model to use (default: claude-sonnet-4-20250514)",
|
|
38
|
+
)
|
|
39
|
+
parser.add_argument(
|
|
40
|
+
"--model-id",
|
|
41
|
+
type=str,
|
|
42
|
+
default=None,
|
|
43
|
+
help="Model ID for local LLM (default: Qwen3-Coder-30B-A3B-Instruct-GGUF)",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# Agent configuration
|
|
47
|
+
parser.add_argument(
|
|
48
|
+
"--max-steps",
|
|
49
|
+
type=int,
|
|
50
|
+
default=10,
|
|
51
|
+
help="Maximum conversation steps (default: 10)",
|
|
52
|
+
)
|
|
53
|
+
parser.add_argument(
|
|
54
|
+
"--streaming", action="store_true", help="Enable streaming responses"
|
|
55
|
+
)
|
|
56
|
+
parser.add_argument(
|
|
57
|
+
"--show-stats", action="store_true", help="Show performance statistics"
|
|
58
|
+
)
|
|
59
|
+
parser.add_argument(
|
|
60
|
+
"--show-prompts", action="store_true", help="Display prompts sent to LLM"
|
|
61
|
+
)
|
|
62
|
+
parser.add_argument("--debug", action="store_true", help="Enable debug output")
|
|
63
|
+
parser.add_argument(
|
|
64
|
+
"--silent",
|
|
65
|
+
action="store_true",
|
|
66
|
+
help="Suppress agent reasoning output (silent mode)",
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# RAG configuration
|
|
70
|
+
parser.add_argument(
|
|
71
|
+
"--index",
|
|
72
|
+
"-i",
|
|
73
|
+
type=str,
|
|
74
|
+
metavar="PATH",
|
|
75
|
+
help="Index a document before running (combine with --query for one-shot usage)",
|
|
76
|
+
)
|
|
77
|
+
parser.add_argument(
|
|
78
|
+
"--documents", "-d", nargs="+", help="Documents to index for RAG"
|
|
79
|
+
)
|
|
80
|
+
parser.add_argument(
|
|
81
|
+
"--watch", "-w", nargs="+", help="Directories to monitor for new documents"
|
|
82
|
+
)
|
|
83
|
+
parser.add_argument(
|
|
84
|
+
"--chunk-size", type=int, default=500, help="Document chunk size (default: 500)"
|
|
85
|
+
)
|
|
86
|
+
parser.add_argument(
|
|
87
|
+
"--chunk-overlap",
|
|
88
|
+
type=int,
|
|
89
|
+
default=100,
|
|
90
|
+
help="Chunk overlap in characters (default: 100)",
|
|
91
|
+
)
|
|
92
|
+
parser.add_argument(
|
|
93
|
+
"--max-chunks",
|
|
94
|
+
type=int,
|
|
95
|
+
default=5,
|
|
96
|
+
help="Maximum chunks to retrieve (default: 5)",
|
|
97
|
+
)
|
|
98
|
+
parser.add_argument(
|
|
99
|
+
"--use-llm-chunking",
|
|
100
|
+
action="store_true",
|
|
101
|
+
help="Use LLM-based semantic chunking for better context preservation (slower but more accurate)",
|
|
102
|
+
)
|
|
103
|
+
parser.add_argument(
|
|
104
|
+
"--allowed-paths",
|
|
105
|
+
nargs="+",
|
|
106
|
+
help="Allowed directory paths for file operations (default: current directory)",
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
# Input/output
|
|
110
|
+
parser.add_argument(
|
|
111
|
+
"--query", "-q", type=str, help="Single query to execute (non-interactive mode)"
|
|
112
|
+
)
|
|
113
|
+
parser.add_argument("--output-dir", type=str, help="Directory for output files")
|
|
114
|
+
parser.add_argument(
|
|
115
|
+
"--list-tools", action="store_true", help="List available tools and exit"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
return parser.parse_args()
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def interactive_mode(agent: ChatAgent):
|
|
122
|
+
"""Run agent in interactive chat mode."""
|
|
123
|
+
print("=" * 60)
|
|
124
|
+
print("Chat Agent with RAG - Interactive Mode")
|
|
125
|
+
print("=" * 60)
|
|
126
|
+
|
|
127
|
+
# Display model information
|
|
128
|
+
model_name = getattr(agent, "model_display_name", "Unknown")
|
|
129
|
+
print(f"\nš¤ Model: {model_name}")
|
|
130
|
+
|
|
131
|
+
print("\nCapabilities:")
|
|
132
|
+
print(" ⢠Document Q&A using RAG")
|
|
133
|
+
print(" - Documents: PDF, TXT, MD, CSV, JSON")
|
|
134
|
+
print(" - Backend: Python, Java, C/C++, Go, Rust, Ruby, PHP, Swift, etc.")
|
|
135
|
+
print(" - Web: JS/TS, HTML, CSS/SCSS/SASS, Vue, Svelte, React (JSX/TSX)")
|
|
136
|
+
print(" - Config: YAML, XML, TOML, INI, ENV")
|
|
137
|
+
print(" ⢠Document summarization with multiple styles")
|
|
138
|
+
print(" ⢠Code retrieval and search (no code generation)")
|
|
139
|
+
print(" ⢠File search and operations")
|
|
140
|
+
print(" ⢠Shell command execution")
|
|
141
|
+
print(" ⢠Auto-indexing when files change")
|
|
142
|
+
print(" ⢠Session persistence with auto-save")
|
|
143
|
+
print("\nSession Commands:")
|
|
144
|
+
print(" /resume [id] - Resume a previous session (or list if no id)")
|
|
145
|
+
print(" /save - Save current session")
|
|
146
|
+
print(" /sessions - List all available sessions")
|
|
147
|
+
print(" /reset - Clear conversation and start fresh")
|
|
148
|
+
print("\nDocument Commands:")
|
|
149
|
+
print(" /index <path> - Index a document or directory")
|
|
150
|
+
print(" /watch <dir> - Watch a directory for changes")
|
|
151
|
+
print(" /list - List indexed documents")
|
|
152
|
+
print(" /status - Show system status")
|
|
153
|
+
print("\nDebug Commands:")
|
|
154
|
+
print(" /chunks <file> - Show all chunks for a document")
|
|
155
|
+
print(" /chunk <n> - Show specific chunk content")
|
|
156
|
+
print(" /test <query> - Test query retrieval with scores")
|
|
157
|
+
print(
|
|
158
|
+
" /dump <file|#> - Export document + chunks to markdown (use number from /list)"
|
|
159
|
+
)
|
|
160
|
+
print(" /clear-cache - Clear RAG cache (force re-indexing)")
|
|
161
|
+
print(" /search-debug - Toggle RAG debug mode")
|
|
162
|
+
print("\nOther Commands:")
|
|
163
|
+
print(" /help or /? - Show this help")
|
|
164
|
+
print(" /quit - Exit")
|
|
165
|
+
print("\nOr just type your question to chat with indexed documents.")
|
|
166
|
+
print("=" * 60)
|
|
167
|
+
|
|
168
|
+
while True:
|
|
169
|
+
try:
|
|
170
|
+
user_input = input("\nYou: ").strip()
|
|
171
|
+
|
|
172
|
+
if not user_input:
|
|
173
|
+
continue
|
|
174
|
+
|
|
175
|
+
# Handle commands
|
|
176
|
+
if user_input.startswith("/"):
|
|
177
|
+
parts = user_input.split(maxsplit=1)
|
|
178
|
+
command = parts[0].lower()
|
|
179
|
+
arg = parts[1] if len(parts) > 1 else None
|
|
180
|
+
|
|
181
|
+
if command == "/quit":
|
|
182
|
+
# Auto-save before quitting
|
|
183
|
+
if agent.current_session:
|
|
184
|
+
print("\nš¾ Saving current session...")
|
|
185
|
+
agent.save_current_session()
|
|
186
|
+
print("Goodbye!")
|
|
187
|
+
break
|
|
188
|
+
|
|
189
|
+
elif command in ["/help", "/?"]:
|
|
190
|
+
print("\n" + "=" * 60)
|
|
191
|
+
print("Chat Agent - Available Commands & Capabilities")
|
|
192
|
+
print("=" * 60)
|
|
193
|
+
print("\nšÆ CAPABILITIES:")
|
|
194
|
+
print(" ⢠Document Q&A using RAG")
|
|
195
|
+
print(" - Documents: PDF, TXT, MD, CSV, JSON")
|
|
196
|
+
print(
|
|
197
|
+
" - Backend: Python, Java, C/C++, Go, Rust, Ruby, PHP, Swift, Kotlin, Scala"
|
|
198
|
+
)
|
|
199
|
+
print(
|
|
200
|
+
" - Web: JS/TS, HTML, CSS/SCSS/SASS/LESS, Vue, Svelte, Astro, React"
|
|
201
|
+
)
|
|
202
|
+
print(" - Config: YAML, XML, TOML, INI, ENV, Properties")
|
|
203
|
+
print(" - Build: Gradle, CMake, Makefiles")
|
|
204
|
+
print(" - Database: SQL")
|
|
205
|
+
print(
|
|
206
|
+
" ⢠Document summarization (brief, detailed, bullets, executive, etc.)"
|
|
207
|
+
)
|
|
208
|
+
print(" ⢠Code retrieval and search (no code generation)")
|
|
209
|
+
print(" ⢠File operations and search")
|
|
210
|
+
print(" ⢠Shell command execution (ls, grep, find, etc.)")
|
|
211
|
+
print(" ⢠Auto-indexing when files change")
|
|
212
|
+
print(" ⢠Session persistence with auto-save")
|
|
213
|
+
print("\nš SESSION MANAGEMENT:")
|
|
214
|
+
print(" /resume [id] - Resume session (or list if no id)")
|
|
215
|
+
print(" /save - Save current session")
|
|
216
|
+
print(" /sessions - List all sessions")
|
|
217
|
+
print(" /reset - Clear and start fresh")
|
|
218
|
+
print("\nš DOCUMENT MANAGEMENT:")
|
|
219
|
+
print(" /index <path> - Index file or directory")
|
|
220
|
+
print(" /watch <dir> - Watch directory for changes")
|
|
221
|
+
print(" /list - List indexed documents")
|
|
222
|
+
print(" /status - Show system status")
|
|
223
|
+
print("\nš DEBUG & OBSERVABILITY:")
|
|
224
|
+
print(" /chunks <file> - Show all chunks for a document")
|
|
225
|
+
print(" /chunk <n> - Show specific chunk content")
|
|
226
|
+
print(" /test <query> - Test query retrieval with scores")
|
|
227
|
+
print(
|
|
228
|
+
" /dump <file|#> - Export document + chunks to markdown (use number from /list)"
|
|
229
|
+
)
|
|
230
|
+
print(" /clear-cache - Clear RAG cache (force re-indexing)")
|
|
231
|
+
print(" /search-debug - Toggle RAG debug mode")
|
|
232
|
+
print("\nš¬ EXAMPLE QUERIES:")
|
|
233
|
+
print(" Documents:")
|
|
234
|
+
print(" 'What does the document say about X?'")
|
|
235
|
+
print(" 'Summarize report.pdf in bullet points'")
|
|
236
|
+
print(" Backend Code:")
|
|
237
|
+
print(" 'Where is the UserAuth class defined?'")
|
|
238
|
+
print(" 'Find all functions that use database connections'")
|
|
239
|
+
print(" 'What does the authenticate() function do?'")
|
|
240
|
+
print(" Web Development:")
|
|
241
|
+
print(" 'Find all CSS classes with hover effects'")
|
|
242
|
+
print(" 'Where are the API endpoints defined?'")
|
|
243
|
+
print(" 'Show me all Vue components that use props'")
|
|
244
|
+
print(" General:")
|
|
245
|
+
print(" 'List all Python files in src/'")
|
|
246
|
+
print(" 'Search for TODO comments in my code'")
|
|
247
|
+
print(" 'Find all files that import React'")
|
|
248
|
+
print("\nāļø OTHER COMMANDS:")
|
|
249
|
+
print(" /help or /? - Show this help")
|
|
250
|
+
print(" /quit - Exit (auto-saves)")
|
|
251
|
+
print("=" * 60)
|
|
252
|
+
|
|
253
|
+
elif command == "/resume":
|
|
254
|
+
if not arg:
|
|
255
|
+
# List available sessions
|
|
256
|
+
sessions = agent.session_manager.list_sessions()
|
|
257
|
+
if not sessions:
|
|
258
|
+
print("\nš No saved sessions found.")
|
|
259
|
+
else:
|
|
260
|
+
print("\n" + "=" * 60)
|
|
261
|
+
print("Available Sessions")
|
|
262
|
+
print("=" * 60)
|
|
263
|
+
for sess in sessions:
|
|
264
|
+
print(f"\n ID: {sess['session_id']}")
|
|
265
|
+
print(f" Created: {sess['created_at']}")
|
|
266
|
+
print(f" Updated: {sess['updated_at']}")
|
|
267
|
+
print(f" Documents: {sess['num_documents']}")
|
|
268
|
+
print(f" Messages: {sess['num_messages']}")
|
|
269
|
+
print("\n" + "=" * 60)
|
|
270
|
+
print("\nUse: /resume <session_id> to load a session")
|
|
271
|
+
else:
|
|
272
|
+
# Resume specific session
|
|
273
|
+
print(f"\nš Resuming session: {arg}")
|
|
274
|
+
if agent.load_session(arg):
|
|
275
|
+
session = agent.current_session
|
|
276
|
+
print("ā
Loaded session with:")
|
|
277
|
+
print(f" - {len(session.indexed_documents)} documents")
|
|
278
|
+
print(
|
|
279
|
+
f" - {len(session.watched_directories)} watched directories"
|
|
280
|
+
)
|
|
281
|
+
print(f" - {len(session.chat_history)} chat messages")
|
|
282
|
+
else:
|
|
283
|
+
print(f"ā Failed to load session: {arg}")
|
|
284
|
+
|
|
285
|
+
elif command == "/save":
|
|
286
|
+
print("\nš¾ Saving current session...")
|
|
287
|
+
if agent.save_current_session():
|
|
288
|
+
session_id = (
|
|
289
|
+
agent.current_session.session_id
|
|
290
|
+
if agent.current_session
|
|
291
|
+
else "unknown"
|
|
292
|
+
)
|
|
293
|
+
print(f"ā
Session saved: {session_id}")
|
|
294
|
+
else:
|
|
295
|
+
print("ā Failed to save session")
|
|
296
|
+
|
|
297
|
+
elif command == "/sessions":
|
|
298
|
+
sessions = agent.session_manager.list_sessions()
|
|
299
|
+
if not sessions:
|
|
300
|
+
print("\nš No saved sessions found.")
|
|
301
|
+
else:
|
|
302
|
+
print("\n" + "=" * 60)
|
|
303
|
+
print(f"Found {len(sessions)} Session(s)")
|
|
304
|
+
print("=" * 60)
|
|
305
|
+
for i, sess in enumerate(sessions, 1):
|
|
306
|
+
print(f"\n{i}. {sess['session_id']}")
|
|
307
|
+
print(f" Created: {sess['created_at']}")
|
|
308
|
+
print(
|
|
309
|
+
f" Documents: {sess['num_documents']}, Messages: {sess['num_messages']}"
|
|
310
|
+
)
|
|
311
|
+
print("\n" + "=" * 60)
|
|
312
|
+
|
|
313
|
+
elif command == "/reset":
|
|
314
|
+
print("\nš Resetting conversation...")
|
|
315
|
+
# Save current session first
|
|
316
|
+
if agent.current_session:
|
|
317
|
+
agent.save_current_session()
|
|
318
|
+
# Create new session
|
|
319
|
+
agent.current_session = agent.session_manager.create_session()
|
|
320
|
+
# Clear chat history (if agent tracks it)
|
|
321
|
+
if hasattr(agent, "chat_history"):
|
|
322
|
+
agent.chat_history = []
|
|
323
|
+
print("ā
Conversation reset. Previous session saved.")
|
|
324
|
+
print(f" New session: {agent.current_session.session_id}")
|
|
325
|
+
|
|
326
|
+
elif command == "/index":
|
|
327
|
+
if not arg:
|
|
328
|
+
print("Usage: /index <file_or_directory_path>")
|
|
329
|
+
print("Example: /index /path/to/document.pdf")
|
|
330
|
+
print(" /index /path/to/documents/")
|
|
331
|
+
continue
|
|
332
|
+
|
|
333
|
+
# Check if it's a directory or file
|
|
334
|
+
path = Path(arg)
|
|
335
|
+
|
|
336
|
+
if path.is_dir():
|
|
337
|
+
print(f"\nš Indexing all documents in directory: {arg}")
|
|
338
|
+
# Find all supported document types
|
|
339
|
+
doc_patterns = ["*.pdf", "*.txt", "*.md", "*.csv", "*.json"]
|
|
340
|
+
doc_files = []
|
|
341
|
+
for pattern in doc_patterns:
|
|
342
|
+
doc_files.extend(path.glob(pattern))
|
|
343
|
+
|
|
344
|
+
if not doc_files:
|
|
345
|
+
print("ā No supported documents found in directory")
|
|
346
|
+
print(" Supported types: PDF, TXT, MD, CSV, JSON")
|
|
347
|
+
continue
|
|
348
|
+
|
|
349
|
+
print(f"Found {len(doc_files)} document(s)\n")
|
|
350
|
+
success_count = 0
|
|
351
|
+
for doc_file in doc_files:
|
|
352
|
+
print(f" š Indexing: {doc_file.name}...")
|
|
353
|
+
# Directly call the RAG index method
|
|
354
|
+
try:
|
|
355
|
+
result = agent.rag.index_document(
|
|
356
|
+
str(doc_file.absolute())
|
|
357
|
+
)
|
|
358
|
+
if result.get("success"):
|
|
359
|
+
print(
|
|
360
|
+
f" ā
Success: {result.get('num_chunks', 0)} chunks created"
|
|
361
|
+
)
|
|
362
|
+
success_count += 1
|
|
363
|
+
else:
|
|
364
|
+
error = result.get("error", "Unknown error")
|
|
365
|
+
print(f" ā Failed: {error}")
|
|
366
|
+
except Exception as e:
|
|
367
|
+
print(f" ā Error: {e}")
|
|
368
|
+
|
|
369
|
+
print(
|
|
370
|
+
f"\nš Summary: {success_count}/{len(doc_files)} documents indexed successfully"
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
else:
|
|
374
|
+
# Single file
|
|
375
|
+
if not os.path.exists(arg):
|
|
376
|
+
print(f"\nā File not found: {arg}")
|
|
377
|
+
print(" Please check the file path and try again")
|
|
378
|
+
continue
|
|
379
|
+
|
|
380
|
+
print(f"\nš Indexing: {path.name}")
|
|
381
|
+
print("=" * 60)
|
|
382
|
+
|
|
383
|
+
try:
|
|
384
|
+
# Directly call the RAG index method
|
|
385
|
+
result = agent.rag.index_document(str(path.absolute()))
|
|
386
|
+
|
|
387
|
+
if result.get("success"):
|
|
388
|
+
# Display success with detailed stats
|
|
389
|
+
print("ā
INDEXING SUCCESSFUL")
|
|
390
|
+
print("=" * 60)
|
|
391
|
+
print(f"š File: {result.get('file_name', path.name)}")
|
|
392
|
+
print(f"š Type: {result.get('file_type', 'Unknown')}")
|
|
393
|
+
print(
|
|
394
|
+
f"š¾ Size: {result.get('file_size_mb', 0):.2f} MB"
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
# Show num_pages for PDFs
|
|
398
|
+
if result.get("num_pages"):
|
|
399
|
+
print(f"š Pages: {result['num_pages']}")
|
|
400
|
+
|
|
401
|
+
print(
|
|
402
|
+
f"š¦ Chunks Created: {result.get('num_chunks', 0)}"
|
|
403
|
+
)
|
|
404
|
+
|
|
405
|
+
# Show cache/reindex status
|
|
406
|
+
if result.get("from_cache"):
|
|
407
|
+
print("ā” Loaded from cache (fast)")
|
|
408
|
+
elif result.get("already_indexed"):
|
|
409
|
+
print("ā¹ļø Already indexed (skipped)")
|
|
410
|
+
elif result.get("reindexed"):
|
|
411
|
+
print("š Reindexed (updated)")
|
|
412
|
+
|
|
413
|
+
print("\nš GLOBAL STATISTICS")
|
|
414
|
+
print("=" * 60)
|
|
415
|
+
print(
|
|
416
|
+
f"Total Documents Indexed: {result.get('total_indexed_files', 0)}"
|
|
417
|
+
)
|
|
418
|
+
print(f"Total Chunks: {result.get('total_chunks', 0)}")
|
|
419
|
+
print("=" * 60)
|
|
420
|
+
else:
|
|
421
|
+
# Display error
|
|
422
|
+
print("ā INDEXING FAILED")
|
|
423
|
+
print("=" * 60)
|
|
424
|
+
error = result.get("error", "Unknown error")
|
|
425
|
+
print(f"Error: {error}")
|
|
426
|
+
if result.get("file_name"):
|
|
427
|
+
print(f"File: {result['file_name']}")
|
|
428
|
+
print("=" * 60)
|
|
429
|
+
|
|
430
|
+
except Exception as e:
|
|
431
|
+
print("ā INDEXING FAILED")
|
|
432
|
+
print("=" * 60)
|
|
433
|
+
print(f"Error: {e}")
|
|
434
|
+
print("=" * 60)
|
|
435
|
+
|
|
436
|
+
elif command == "/watch":
|
|
437
|
+
if not arg:
|
|
438
|
+
print("Usage: /watch <directory_path>")
|
|
439
|
+
print("Example: /watch /path/to/documents")
|
|
440
|
+
continue
|
|
441
|
+
result = agent.process_query(f"Watch the directory: {arg}")
|
|
442
|
+
print(f"\n{result['result']}")
|
|
443
|
+
|
|
444
|
+
elif command == "/list":
|
|
445
|
+
# Directly access indexed files from RAG system
|
|
446
|
+
print("\n" + "=" * 60)
|
|
447
|
+
print("š INDEXED DOCUMENTS")
|
|
448
|
+
print("=" * 60)
|
|
449
|
+
|
|
450
|
+
if not agent.rag.indexed_files:
|
|
451
|
+
print("No documents indexed yet.")
|
|
452
|
+
print("\nUse /index <path> to index a document")
|
|
453
|
+
else:
|
|
454
|
+
print(f"Total: {len(agent.rag.indexed_files)} document(s)\n")
|
|
455
|
+
for i, file_path in enumerate(
|
|
456
|
+
sorted(agent.rag.indexed_files), 1
|
|
457
|
+
):
|
|
458
|
+
file_name = Path(file_path).name
|
|
459
|
+
file_type = Path(file_path).suffix
|
|
460
|
+
|
|
461
|
+
# Get chunk count for this file if available
|
|
462
|
+
num_chunks = 0
|
|
463
|
+
if file_path in agent.rag.file_to_chunk_indices:
|
|
464
|
+
num_chunks = len(
|
|
465
|
+
agent.rag.file_to_chunk_indices[file_path]
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
print(f"{i}. {file_name}")
|
|
469
|
+
print(f" Type: {file_type}")
|
|
470
|
+
print(f" Chunks: {num_chunks}")
|
|
471
|
+
print(f" Path: {file_path}")
|
|
472
|
+
print()
|
|
473
|
+
|
|
474
|
+
print("=" * 60)
|
|
475
|
+
|
|
476
|
+
elif command == "/status":
|
|
477
|
+
# Directly access RAG status
|
|
478
|
+
print("\n" + "=" * 60)
|
|
479
|
+
print("š RAG SYSTEM STATUS")
|
|
480
|
+
print("=" * 60)
|
|
481
|
+
|
|
482
|
+
status = agent.rag.get_status()
|
|
483
|
+
|
|
484
|
+
print("\nš Documents:")
|
|
485
|
+
print(f" Indexed Files: {status['indexed_files']}")
|
|
486
|
+
print(f" Total Chunks: {status['total_chunks']}")
|
|
487
|
+
|
|
488
|
+
print("\nāļø Configuration:")
|
|
489
|
+
print(f" Chunk Size: {status['config']['chunk_size']} tokens")
|
|
490
|
+
print(
|
|
491
|
+
f" Chunk Overlap: {status['config']['chunk_overlap']} tokens"
|
|
492
|
+
)
|
|
493
|
+
print(f" Max Chunks per Query: {status['config']['max_chunks']}")
|
|
494
|
+
|
|
495
|
+
print("\nš¾ Storage:")
|
|
496
|
+
print(f" Cache Directory: {status['cache_dir']}")
|
|
497
|
+
print(f" Embedding Model: {status['embedding_model']}")
|
|
498
|
+
|
|
499
|
+
# Show watched directories
|
|
500
|
+
if agent.watch_directories:
|
|
501
|
+
print("\nš Watched Directories:")
|
|
502
|
+
for i, dir_path in enumerate(agent.watch_directories, 1):
|
|
503
|
+
print(f" {i}. {dir_path}")
|
|
504
|
+
|
|
505
|
+
# Show session info
|
|
506
|
+
if agent.current_session:
|
|
507
|
+
print("\nš Current Session:")
|
|
508
|
+
print(f" ID: {agent.current_session.session_id}")
|
|
509
|
+
print(f" Created: {agent.current_session.created_at}")
|
|
510
|
+
print(f" Updated: {agent.current_session.updated_at}")
|
|
511
|
+
print(
|
|
512
|
+
f" Documents: {len(agent.current_session.indexed_documents)}"
|
|
513
|
+
)
|
|
514
|
+
print(f" Messages: {len(agent.current_session.chat_history)}")
|
|
515
|
+
|
|
516
|
+
print("\n" + "=" * 60)
|
|
517
|
+
|
|
518
|
+
elif command == "/chunks":
|
|
519
|
+
if not arg:
|
|
520
|
+
print("Usage: /chunks <filename>")
|
|
521
|
+
print("Example: /chunks document.pdf")
|
|
522
|
+
continue
|
|
523
|
+
|
|
524
|
+
# Find file in indexed files
|
|
525
|
+
matching_files = [
|
|
526
|
+
f
|
|
527
|
+
for f in agent.rag.indexed_files
|
|
528
|
+
if Path(f).name == arg or f == arg
|
|
529
|
+
]
|
|
530
|
+
|
|
531
|
+
if not matching_files:
|
|
532
|
+
print(f"\nā File not indexed: {arg}")
|
|
533
|
+
print("\nIndexed files:")
|
|
534
|
+
for f in agent.rag.indexed_files:
|
|
535
|
+
print(f" - {Path(f).name}")
|
|
536
|
+
continue
|
|
537
|
+
|
|
538
|
+
file_path = matching_files[0]
|
|
539
|
+
|
|
540
|
+
# Get chunks for this file
|
|
541
|
+
if file_path not in agent.rag.file_to_chunk_indices:
|
|
542
|
+
print(f"\nā No chunks found for: {arg}")
|
|
543
|
+
continue
|
|
544
|
+
|
|
545
|
+
chunk_indices = agent.rag.file_to_chunk_indices[file_path]
|
|
546
|
+
|
|
547
|
+
print("\n" + "=" * 60)
|
|
548
|
+
print(f"DOCUMENT CHUNKS: {Path(file_path).name}")
|
|
549
|
+
print("=" * 60)
|
|
550
|
+
print(f"Total Chunks: {len(chunk_indices)}")
|
|
551
|
+
print(f"Chunk Size: {agent.rag.config.chunk_size} tokens")
|
|
552
|
+
print(f"Overlap: {agent.rag.config.chunk_overlap} tokens\n")
|
|
553
|
+
|
|
554
|
+
for i, chunk_idx in enumerate(chunk_indices, 1):
|
|
555
|
+
if chunk_idx < len(agent.rag.chunks):
|
|
556
|
+
chunk = agent.rag.chunks[chunk_idx]
|
|
557
|
+
token_count = len(chunk) // 4 # Rough estimate
|
|
558
|
+
|
|
559
|
+
print(f"CHUNK {i} ({token_count} tokens):")
|
|
560
|
+
print("ā" + "ā" * 58 + "ā")
|
|
561
|
+
|
|
562
|
+
# Show first 200 chars of chunk
|
|
563
|
+
preview = chunk[:200].replace("\n", " ")
|
|
564
|
+
if len(chunk) > 200:
|
|
565
|
+
preview += "..."
|
|
566
|
+
|
|
567
|
+
# Word wrap the preview
|
|
568
|
+
import textwrap
|
|
569
|
+
|
|
570
|
+
wrapped = textwrap.wrap(preview, width=56)
|
|
571
|
+
for line in wrapped:
|
|
572
|
+
print(f"ā {line:<56} ā")
|
|
573
|
+
|
|
574
|
+
print("ā" + "ā" * 58 + "ā")
|
|
575
|
+
print()
|
|
576
|
+
|
|
577
|
+
print("=" * 60)
|
|
578
|
+
print("\nUse '/chunk <n>' to see full content of a specific chunk")
|
|
579
|
+
|
|
580
|
+
elif command == "/chunk":
|
|
581
|
+
if not arg or not arg.isdigit():
|
|
582
|
+
print("Usage: /chunk <number>")
|
|
583
|
+
print("Example: /chunk 5")
|
|
584
|
+
continue
|
|
585
|
+
|
|
586
|
+
chunk_num = int(arg) - 1 # Convert to 0-indexed
|
|
587
|
+
|
|
588
|
+
if chunk_num < 0 or chunk_num >= len(agent.rag.chunks):
|
|
589
|
+
print(
|
|
590
|
+
f"\nā Invalid chunk number. Valid range: 1-{len(agent.rag.chunks)}"
|
|
591
|
+
)
|
|
592
|
+
continue
|
|
593
|
+
|
|
594
|
+
chunk = agent.rag.chunks[chunk_num]
|
|
595
|
+
|
|
596
|
+
# Find which file this chunk belongs to
|
|
597
|
+
source_file = agent.rag.chunk_to_file.get(chunk_num, "Unknown")
|
|
598
|
+
|
|
599
|
+
print("\n" + "=" * 60)
|
|
600
|
+
print(f"CHUNK {arg}")
|
|
601
|
+
print("=" * 60)
|
|
602
|
+
print(
|
|
603
|
+
f"Source: {Path(source_file).name if source_file != 'Unknown' else 'Unknown'}"
|
|
604
|
+
)
|
|
605
|
+
print(f"Token count: {len(chunk) // 4} (estimated)")
|
|
606
|
+
print(f"Character count: {len(chunk):,}")
|
|
607
|
+
print("\nCONTENT:")
|
|
608
|
+
print("ā" + "ā" * 58 + "ā")
|
|
609
|
+
|
|
610
|
+
# Word wrap content
|
|
611
|
+
import textwrap
|
|
612
|
+
|
|
613
|
+
wrapped = textwrap.wrap(chunk, width=56)
|
|
614
|
+
for line in wrapped:
|
|
615
|
+
print(f"ā {line:<56} ā")
|
|
616
|
+
|
|
617
|
+
print("ā" + "ā" * 58 + "ā")
|
|
618
|
+
print("=" * 60)
|
|
619
|
+
|
|
620
|
+
elif command == "/test":
|
|
621
|
+
if not arg:
|
|
622
|
+
print("Usage: /test <query>")
|
|
623
|
+
print("Example: /test what is the vision?")
|
|
624
|
+
continue
|
|
625
|
+
|
|
626
|
+
if not agent.rag.indexed_files:
|
|
627
|
+
print("\nā No documents indexed. Use /index <path> first.")
|
|
628
|
+
continue
|
|
629
|
+
|
|
630
|
+
print("\n" + "=" * 60)
|
|
631
|
+
print(f'QUERY TEST: "{arg}"')
|
|
632
|
+
print("=" * 60)
|
|
633
|
+
|
|
634
|
+
# Test retrieval
|
|
635
|
+
try:
|
|
636
|
+
# pylint: disable=protected-access
|
|
637
|
+
chunks, scores = agent.rag._retrieve_chunks(arg)
|
|
638
|
+
|
|
639
|
+
print(f"\nTop {len(chunks)} matching chunks:\n")
|
|
640
|
+
|
|
641
|
+
for i, (chunk, score) in enumerate(zip(chunks, scores), 1):
|
|
642
|
+
# Find chunk index
|
|
643
|
+
chunk_idx = (
|
|
644
|
+
agent.rag.chunks.index(chunk)
|
|
645
|
+
if chunk in agent.rag.chunks
|
|
646
|
+
else -1
|
|
647
|
+
)
|
|
648
|
+
source_file = agent.rag.chunk_to_file.get(
|
|
649
|
+
chunk_idx, "Unknown"
|
|
650
|
+
)
|
|
651
|
+
|
|
652
|
+
# Color code by score
|
|
653
|
+
if score > 0.75:
|
|
654
|
+
emoji = "ā"
|
|
655
|
+
elif score > 0.60:
|
|
656
|
+
emoji = "ā
"
|
|
657
|
+
else:
|
|
658
|
+
emoji = "ā ļø"
|
|
659
|
+
|
|
660
|
+
print(
|
|
661
|
+
f"{i}. {emoji} CHUNK {chunk_idx + 1} (score: {score:.3f})"
|
|
662
|
+
)
|
|
663
|
+
print(
|
|
664
|
+
f" Source: {Path(source_file).name if source_file != 'Unknown' else 'Unknown'}"
|
|
665
|
+
)
|
|
666
|
+
|
|
667
|
+
# Preview
|
|
668
|
+
preview = chunk[:150].replace("\n", " ")
|
|
669
|
+
if len(chunk) > 150:
|
|
670
|
+
preview += "..."
|
|
671
|
+
print(f" Preview: {preview}")
|
|
672
|
+
print()
|
|
673
|
+
|
|
674
|
+
print("=" * 60)
|
|
675
|
+
print("\nScore Legend:")
|
|
676
|
+
print(" ā Excellent (>0.75) - Highly relevant")
|
|
677
|
+
print(" ā
Good (0.60-0.75) - Probably relevant")
|
|
678
|
+
print(" ā ļø Poor (<0.60) - May not be relevant")
|
|
679
|
+
|
|
680
|
+
except Exception as e:
|
|
681
|
+
print(f"\nā Query test failed: {e}")
|
|
682
|
+
|
|
683
|
+
elif command == "/dump":
|
|
684
|
+
if not arg:
|
|
685
|
+
print("Usage: /dump <filename_or_number>")
|
|
686
|
+
print("Example: /dump document.pdf")
|
|
687
|
+
print("Example: /dump 1")
|
|
688
|
+
continue
|
|
689
|
+
|
|
690
|
+
# Find file in indexed files
|
|
691
|
+
from datetime import datetime
|
|
692
|
+
|
|
693
|
+
file_path = None
|
|
694
|
+
|
|
695
|
+
# Check if arg is a number (index)
|
|
696
|
+
if arg.isdigit():
|
|
697
|
+
index = int(arg) - 1 # Convert to 0-based index
|
|
698
|
+
indexed_list = list(agent.rag.indexed_files)
|
|
699
|
+
if 0 <= index < len(indexed_list):
|
|
700
|
+
file_path = indexed_list[index]
|
|
701
|
+
else:
|
|
702
|
+
print(f"\nā Invalid index: {arg}")
|
|
703
|
+
print(f"Valid range: 1-{len(indexed_list)}")
|
|
704
|
+
continue
|
|
705
|
+
else:
|
|
706
|
+
# Try to match by filename
|
|
707
|
+
matching_files = [
|
|
708
|
+
f
|
|
709
|
+
for f in agent.rag.indexed_files
|
|
710
|
+
if Path(f).name == arg or f == arg
|
|
711
|
+
]
|
|
712
|
+
|
|
713
|
+
if not matching_files:
|
|
714
|
+
print(f"\nā File not indexed: {arg}")
|
|
715
|
+
print("\nIndexed files:")
|
|
716
|
+
for i, f in enumerate(agent.rag.indexed_files, 1):
|
|
717
|
+
print(f" {i}. {Path(f).name}")
|
|
718
|
+
continue
|
|
719
|
+
|
|
720
|
+
file_path = matching_files[0]
|
|
721
|
+
|
|
722
|
+
# Get chunks for this file
|
|
723
|
+
if file_path not in agent.rag.file_to_chunk_indices:
|
|
724
|
+
print(f"\nā No chunks found for: {arg}")
|
|
725
|
+
continue
|
|
726
|
+
|
|
727
|
+
chunk_indices = agent.rag.file_to_chunk_indices[file_path]
|
|
728
|
+
|
|
729
|
+
print(f"\nš Generating markdown dump for: {Path(file_path).name}")
|
|
730
|
+
|
|
731
|
+
# Try to get cached metadata first (faster!)
|
|
732
|
+
cached_metadata = agent.rag.file_metadata.get(file_path, {})
|
|
733
|
+
extracted_text = cached_metadata.get("full_text")
|
|
734
|
+
num_pages = cached_metadata.get("num_pages")
|
|
735
|
+
vlm_pages = cached_metadata.get("vlm_pages", 0)
|
|
736
|
+
total_images = cached_metadata.get("total_images", 0)
|
|
737
|
+
|
|
738
|
+
# Fall back to re-extraction only if cache is missing
|
|
739
|
+
if not extracted_text:
|
|
740
|
+
print(" ā ļø No cached text found, re-extracting from file...")
|
|
741
|
+
try:
|
|
742
|
+
# pylint: disable=protected-access
|
|
743
|
+
extracted_text, metadata = (
|
|
744
|
+
agent.rag._extract_text_from_file(file_path)
|
|
745
|
+
)
|
|
746
|
+
num_pages = metadata.get("num_pages")
|
|
747
|
+
vlm_pages = metadata.get("vlm_pages", 0)
|
|
748
|
+
total_images = metadata.get("total_images", 0)
|
|
749
|
+
except Exception as e:
|
|
750
|
+
print(f"ā Failed to extract text: {e}")
|
|
751
|
+
continue
|
|
752
|
+
else:
|
|
753
|
+
print(
|
|
754
|
+
" ā
Using cached text and metadata (no re-extraction needed)"
|
|
755
|
+
)
|
|
756
|
+
|
|
757
|
+
# Create markdown content
|
|
758
|
+
markdown_lines = []
|
|
759
|
+
markdown_lines.append(f"# RAG Debug Dump: {Path(file_path).name}")
|
|
760
|
+
markdown_lines.append(
|
|
761
|
+
f"\nGenerated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
|
|
762
|
+
)
|
|
763
|
+
|
|
764
|
+
# Metadata
|
|
765
|
+
markdown_lines.append("## Document Metadata\n")
|
|
766
|
+
markdown_lines.append(f"- **File:** {Path(file_path).name}")
|
|
767
|
+
markdown_lines.append(f"- **Path:** {file_path}")
|
|
768
|
+
file_size = os.path.getsize(file_path) / (1024 * 1024)
|
|
769
|
+
markdown_lines.append(f"- **Size:** {file_size:.2f} MB")
|
|
770
|
+
if num_pages:
|
|
771
|
+
markdown_lines.append(f"- **Pages:** {num_pages}")
|
|
772
|
+
if vlm_pages and vlm_pages > 0:
|
|
773
|
+
markdown_lines.append(
|
|
774
|
+
f"- **VLM Enhanced Pages:** {vlm_pages} (images processed)"
|
|
775
|
+
)
|
|
776
|
+
if total_images and total_images > 0:
|
|
777
|
+
markdown_lines.append(
|
|
778
|
+
f"- **Total Images Extracted:** {total_images}"
|
|
779
|
+
)
|
|
780
|
+
markdown_lines.append(f"- **Characters:** {len(extracted_text):,}")
|
|
781
|
+
markdown_lines.append(f"- **Chunks:** {len(chunk_indices)}")
|
|
782
|
+
markdown_lines.append(
|
|
783
|
+
f"- **Chunk Size:** {agent.rag.config.chunk_size} tokens"
|
|
784
|
+
)
|
|
785
|
+
markdown_lines.append(
|
|
786
|
+
f"- **Chunk Overlap:** {agent.rag.config.chunk_overlap} tokens"
|
|
787
|
+
)
|
|
788
|
+
markdown_lines.append("")
|
|
789
|
+
|
|
790
|
+
# Full document text
|
|
791
|
+
markdown_lines.append("---\n")
|
|
792
|
+
markdown_lines.append("## Full Document Text (As Extracted)")
|
|
793
|
+
markdown_lines.append("\n```")
|
|
794
|
+
markdown_lines.append(extracted_text)
|
|
795
|
+
markdown_lines.append("```\n")
|
|
796
|
+
|
|
797
|
+
# Chunked version with boundaries
|
|
798
|
+
markdown_lines.append("---\n")
|
|
799
|
+
markdown_lines.append("## Document with Chunk Boundaries\n")
|
|
800
|
+
|
|
801
|
+
for i, chunk_idx in enumerate(chunk_indices, 1):
|
|
802
|
+
if chunk_idx < len(agent.rag.chunks):
|
|
803
|
+
chunk = agent.rag.chunks[chunk_idx]
|
|
804
|
+
|
|
805
|
+
# Extract page number from chunk (with lookback)
|
|
806
|
+
from gaia.agents.chat.tools.rag_tools import (
|
|
807
|
+
extract_page_from_chunk,
|
|
808
|
+
)
|
|
809
|
+
|
|
810
|
+
page_num = extract_page_from_chunk(
|
|
811
|
+
chunk, chunk_idx, agent.rag.chunks
|
|
812
|
+
)
|
|
813
|
+
page_info = (
|
|
814
|
+
f"Page {page_num}" if page_num else "Page Unknown"
|
|
815
|
+
)
|
|
816
|
+
|
|
817
|
+
markdown_lines.append(
|
|
818
|
+
f"### š· CHUNK {i} ({page_info}, Index: {chunk_idx})\n"
|
|
819
|
+
)
|
|
820
|
+
markdown_lines.append(
|
|
821
|
+
f"- **Token Count:** {len(chunk) // 4} (estimated)"
|
|
822
|
+
)
|
|
823
|
+
markdown_lines.append(
|
|
824
|
+
f"- **Character Count:** {len(chunk):,}"
|
|
825
|
+
)
|
|
826
|
+
markdown_lines.append("")
|
|
827
|
+
markdown_lines.append("```")
|
|
828
|
+
markdown_lines.append(chunk)
|
|
829
|
+
markdown_lines.append("```\n")
|
|
830
|
+
|
|
831
|
+
markdown_lines.append("---\n")
|
|
832
|
+
markdown_lines.append("## Chunk Summary\n")
|
|
833
|
+
markdown_lines.append("| Chunk | Tokens | Characters | Preview |")
|
|
834
|
+
markdown_lines.append("|-------|--------|------------|---------|")
|
|
835
|
+
|
|
836
|
+
for i, chunk_idx in enumerate(chunk_indices, 1):
|
|
837
|
+
if chunk_idx < len(agent.rag.chunks):
|
|
838
|
+
chunk = agent.rag.chunks[chunk_idx]
|
|
839
|
+
tokens = len(chunk) // 4
|
|
840
|
+
chars = len(chunk)
|
|
841
|
+
preview = chunk[:50].replace("\n", " ").replace("|", "\\|")
|
|
842
|
+
markdown_lines.append(
|
|
843
|
+
f"| {i} | {tokens} | {chars:,} | {preview}... |"
|
|
844
|
+
)
|
|
845
|
+
|
|
846
|
+
# Write to file
|
|
847
|
+
output_filename = f"{Path(file_path).stem}_rag_dump.md"
|
|
848
|
+
output_path = Path.cwd() / output_filename
|
|
849
|
+
|
|
850
|
+
with open(output_path, "w", encoding="utf-8") as f:
|
|
851
|
+
f.write("\n".join(markdown_lines))
|
|
852
|
+
|
|
853
|
+
# Calculate output size
|
|
854
|
+
output_content = "\n".join(markdown_lines)
|
|
855
|
+
output_size = len(output_content)
|
|
856
|
+
|
|
857
|
+
print(f"ā
Markdown dump created: {output_filename}")
|
|
858
|
+
print(f" Path: {output_path}")
|
|
859
|
+
print("\nš Statistics:")
|
|
860
|
+
print(f" Document: {len(extracted_text):,} characters")
|
|
861
|
+
print(f" Chunks: {len(chunk_indices)}")
|
|
862
|
+
print(f" Output: {output_size:,} characters")
|
|
863
|
+
print("\nYou can now:")
|
|
864
|
+
print(" 1. Review chunking quality")
|
|
865
|
+
print(" 2. Verify PDF extraction accuracy")
|
|
866
|
+
print(" 3. Search for specific content (Ctrl+F)")
|
|
867
|
+
print(" 4. Share with others for troubleshooting")
|
|
868
|
+
|
|
869
|
+
elif command == "/clear-cache":
|
|
870
|
+
print("\nā ļø This will clear the RAG cache for all documents.")
|
|
871
|
+
print(
|
|
872
|
+
" Cached chunks will be deleted and documents will need to be re-indexed."
|
|
873
|
+
)
|
|
874
|
+
response = input("\nAre you sure? (yes/no): ").strip().lower()
|
|
875
|
+
|
|
876
|
+
if response == "yes":
|
|
877
|
+
import shutil
|
|
878
|
+
|
|
879
|
+
cache_dir = agent.rag.config.cache_dir
|
|
880
|
+
if os.path.exists(cache_dir):
|
|
881
|
+
shutil.rmtree(cache_dir)
|
|
882
|
+
os.makedirs(cache_dir, exist_ok=True)
|
|
883
|
+
print(f"\nā
Cache cleared: {cache_dir}")
|
|
884
|
+
|
|
885
|
+
# Clear in-memory state as well
|
|
886
|
+
agent.rag.indexed_files.clear()
|
|
887
|
+
agent.rag.chunks.clear()
|
|
888
|
+
agent.rag.chunk_to_file.clear()
|
|
889
|
+
agent.rag.file_to_chunk_indices.clear()
|
|
890
|
+
agent.rag.file_metadata.clear()
|
|
891
|
+
agent.rag.index = None
|
|
892
|
+
agent.indexed_files.clear()
|
|
893
|
+
|
|
894
|
+
print(
|
|
895
|
+
"\nAll documents will be re-indexed from scratch on next access."
|
|
896
|
+
)
|
|
897
|
+
else:
|
|
898
|
+
print(f"\nā¹ļø Cache directory doesn't exist: {cache_dir}")
|
|
899
|
+
else:
|
|
900
|
+
print("\nā Cache clear cancelled")
|
|
901
|
+
|
|
902
|
+
elif command == "/search-debug":
|
|
903
|
+
# Toggle RAG debug mode
|
|
904
|
+
current_debug = getattr(agent.rag.config, "show_stats", False)
|
|
905
|
+
agent.rag.config.show_stats = not current_debug
|
|
906
|
+
|
|
907
|
+
if agent.rag.config.show_stats:
|
|
908
|
+
print("\nš§ RAG Debug Mode: ENABLED")
|
|
909
|
+
print("\nAll queries will now show:")
|
|
910
|
+
print(" - Embedding generation details")
|
|
911
|
+
print(" - Search execution info")
|
|
912
|
+
print(" - Similarity scores")
|
|
913
|
+
print(" - Chunk selection reasoning")
|
|
914
|
+
else:
|
|
915
|
+
print("\nš§ RAG Debug Mode: DISABLED")
|
|
916
|
+
print("\nQueries will run in normal mode")
|
|
917
|
+
|
|
918
|
+
else:
|
|
919
|
+
print(f"Unknown command: {command}. Type /help for help.")
|
|
920
|
+
|
|
921
|
+
continue
|
|
922
|
+
|
|
923
|
+
# Process regular query
|
|
924
|
+
result = agent.process_query(user_input)
|
|
925
|
+
# The answer is already streamed by the agent, no need to print it again
|
|
926
|
+
|
|
927
|
+
# Update conversation history for session persistence
|
|
928
|
+
if hasattr(agent, "conversation_history"):
|
|
929
|
+
agent.conversation_history.append(
|
|
930
|
+
{"role": "user", "content": user_input}
|
|
931
|
+
)
|
|
932
|
+
if result.get("result"):
|
|
933
|
+
agent.conversation_history.append(
|
|
934
|
+
{"role": "assistant", "content": result["result"]}
|
|
935
|
+
)
|
|
936
|
+
|
|
937
|
+
if result.get("error_count", 0) > 0:
|
|
938
|
+
print(f"\nā ļø {result['error_count']} error(s) occurred")
|
|
939
|
+
|
|
940
|
+
except KeyboardInterrupt:
|
|
941
|
+
print("\n\nGoodbye!")
|
|
942
|
+
break
|
|
943
|
+
except EOFError:
|
|
944
|
+
print("\n\nGoodbye!")
|
|
945
|
+
break
|
|
946
|
+
except Exception as e:
|
|
947
|
+
logger.error(f"Error: {e}")
|
|
948
|
+
print(f"\nā Error: {e}")
|
|
949
|
+
|
|
950
|
+
|
|
951
|
+
def main():
|
|
952
|
+
"""Main entry point."""
|
|
953
|
+
args = parse_args()
|
|
954
|
+
|
|
955
|
+
try:
|
|
956
|
+
# Keep console output visible by default so users can see agent reasoning
|
|
957
|
+
# Silent mode can be enabled with --silent flag or for single-query mode
|
|
958
|
+
if args.silent:
|
|
959
|
+
use_silent_mode = True
|
|
960
|
+
elif args.query is not None:
|
|
961
|
+
use_silent_mode = True # Auto-silent for non-interactive queries
|
|
962
|
+
else:
|
|
963
|
+
use_silent_mode = False # Show output in interactive mode
|
|
964
|
+
|
|
965
|
+
# Create agent config
|
|
966
|
+
config = ChatAgentConfig(
|
|
967
|
+
use_claude=args.use_claude,
|
|
968
|
+
use_chatgpt=args.use_chatgpt,
|
|
969
|
+
claude_model=args.claude_model,
|
|
970
|
+
model_id=args.model_id,
|
|
971
|
+
max_steps=args.max_steps,
|
|
972
|
+
show_prompts=args.show_prompts,
|
|
973
|
+
output_dir=args.output_dir,
|
|
974
|
+
streaming=args.streaming,
|
|
975
|
+
show_stats=args.show_stats,
|
|
976
|
+
silent_mode=use_silent_mode,
|
|
977
|
+
debug=args.debug,
|
|
978
|
+
rag_documents=args.documents,
|
|
979
|
+
watch_directories=args.watch,
|
|
980
|
+
chunk_size=args.chunk_size,
|
|
981
|
+
chunk_overlap=args.chunk_overlap,
|
|
982
|
+
max_chunks=args.max_chunks,
|
|
983
|
+
use_llm_chunking=args.use_llm_chunking,
|
|
984
|
+
allowed_paths=args.allowed_paths,
|
|
985
|
+
)
|
|
986
|
+
|
|
987
|
+
# Create agent with config
|
|
988
|
+
agent = ChatAgent(config)
|
|
989
|
+
|
|
990
|
+
# Create initial session if not loading one
|
|
991
|
+
if not agent.current_session:
|
|
992
|
+
agent.current_session = agent.session_manager.create_session()
|
|
993
|
+
logger.debug(f"Created new session: {agent.current_session.session_id}")
|
|
994
|
+
|
|
995
|
+
# Index document if --index flag provided
|
|
996
|
+
if args.index:
|
|
997
|
+
index_path = args.index
|
|
998
|
+
if not os.path.exists(index_path):
|
|
999
|
+
print(f"ā File not found: {index_path}")
|
|
1000
|
+
return 1
|
|
1001
|
+
|
|
1002
|
+
print(f"š Indexing: {Path(index_path).name}")
|
|
1003
|
+
print("=" * 60)
|
|
1004
|
+
|
|
1005
|
+
result = agent.rag.index_document(str(Path(index_path).absolute()))
|
|
1006
|
+
|
|
1007
|
+
if result.get("success"):
|
|
1008
|
+
print("ā
INDEXING SUCCESSFUL")
|
|
1009
|
+
print(f"š File: {result.get('file_name')}")
|
|
1010
|
+
print(f"š Type: {result.get('file_type')}")
|
|
1011
|
+
print(f"š¾ Size: {result.get('file_size_mb', 0):.2f} MB")
|
|
1012
|
+
if result.get("num_pages"):
|
|
1013
|
+
print(f"š Pages: {result['num_pages']}")
|
|
1014
|
+
print(f"š¦ Chunks: {result.get('num_chunks', 0)}")
|
|
1015
|
+
print("=" * 60)
|
|
1016
|
+
else:
|
|
1017
|
+
print(f"ā Indexing failed: {result.get('error')}")
|
|
1018
|
+
return 1
|
|
1019
|
+
|
|
1020
|
+
# List tools if requested
|
|
1021
|
+
if args.list_tools:
|
|
1022
|
+
agent.list_tools(verbose=True)
|
|
1023
|
+
return 0
|
|
1024
|
+
|
|
1025
|
+
# Single query mode
|
|
1026
|
+
if args.query:
|
|
1027
|
+
result = agent.process_query(args.query)
|
|
1028
|
+
print(f"\n{result['result']}")
|
|
1029
|
+
|
|
1030
|
+
if args.show_stats and result.get("duration"):
|
|
1031
|
+
print("\nš Stats:")
|
|
1032
|
+
print(f" Duration: {result['duration']:.2f}s")
|
|
1033
|
+
print(f" Steps: {result['steps_taken']}")
|
|
1034
|
+
print(f" Tokens: {result.get('total_tokens', 0):,}")
|
|
1035
|
+
|
|
1036
|
+
return 0 if result["status"] == "success" else 1
|
|
1037
|
+
|
|
1038
|
+
# Interactive mode
|
|
1039
|
+
interactive_mode(agent)
|
|
1040
|
+
return 0
|
|
1041
|
+
|
|
1042
|
+
except KeyboardInterrupt:
|
|
1043
|
+
print("\n\nInterrupted by user")
|
|
1044
|
+
return 130
|
|
1045
|
+
except Exception as e:
|
|
1046
|
+
logger.error(f"Error: {e}", exc_info=True)
|
|
1047
|
+
print(f"\nā Error: {e}")
|
|
1048
|
+
return 1
|
|
1049
|
+
finally:
|
|
1050
|
+
# Cleanup
|
|
1051
|
+
try:
|
|
1052
|
+
agent.stop_watching()
|
|
1053
|
+
except Exception: # pylint: disable=broad-except
|
|
1054
|
+
pass
|
|
1055
|
+
|
|
1056
|
+
|
|
1057
|
+
if __name__ == "__main__":
|
|
1058
|
+
sys.exit(main())
|