pygeai 0.1.6__py3-none-any.whl → 0.6.0b15__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.
Potentially problematic release.
This version of pygeai might be problematic. Click here for more details.
- pygeai/__init__.py +11 -2
- pygeai/_docs/Makefile +20 -0
- pygeai/_docs/make.bat +35 -0
- pygeai/_docs/source/conf.py +117 -0
- pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
- pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
- pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
- pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
- pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
- pygeai/_docs/source/content/ai_lab.rst +102 -0
- pygeai/_docs/source/content/analytics.rst +598 -0
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- pygeai/_docs/source/content/api_reference/chat.rst +754 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +738 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rag.rst +710 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +58 -0
- pygeai/_docs/source/content/authentication.rst +295 -0
- pygeai/_docs/source/content/chat_gui.rst +121 -0
- pygeai/_docs/source/content/cli.rst +203 -0
- pygeai/_docs/source/content/debugger.rst +651 -0
- pygeai/_docs/source/content/intro.rst +67 -0
- pygeai/_docs/source/content/migration.rst +929 -0
- pygeai/_docs/source/content/modules.rst +7 -0
- pygeai/_docs/source/content/quickstart.rst +143 -0
- pygeai/_docs/source/content/samples.rst +394 -0
- pygeai/_docs/source/index.rst +75 -0
- pygeai/_docs/source/modules.rst +7 -0
- pygeai/_docs/source/pygeai.admin.rst +29 -0
- pygeai/_docs/source/pygeai.analytics.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
- pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
- pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.rst +55 -0
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.chat.rst +69 -0
- pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
- pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
- pygeai/_docs/source/pygeai.cli.rst +62 -0
- pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
- pygeai/_docs/source/pygeai.core.base.rst +53 -0
- pygeai/_docs/source/pygeai.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
- pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
- pygeai/_docs/source/pygeai.core.files.rst +61 -0
- pygeai/_docs/source/pygeai.core.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
- pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
- pygeai/_docs/source/pygeai.core.rst +63 -0
- pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.rst +37 -0
- pygeai/_docs/source/pygeai.core.utils.rst +37 -0
- pygeai/_docs/source/pygeai.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.rst +31 -0
- pygeai/_docs/source/pygeai.flows.rst +29 -0
- pygeai/_docs/source/pygeai.gam.rst +29 -0
- pygeai/_docs/source/pygeai.health.rst +29 -0
- pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
- pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
- pygeai/_docs/source/pygeai.lab.rst +65 -0
- pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
- pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
- pygeai/_docs/source/pygeai.man.man1.rst +10 -0
- pygeai/_docs/source/pygeai.man.rst +18 -0
- pygeai/_docs/source/pygeai.migration.rst +29 -0
- pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
- pygeai/_docs/source/pygeai.organization.rst +61 -0
- pygeai/_docs/source/pygeai.proxy.rst +53 -0
- pygeai/_docs/source/pygeai.rst +35 -0
- pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
- pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
- pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
- pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
- pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
- pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
- pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
- pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
- pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
- pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.rst +39 -0
- pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
- pygeai/_docs/source/pygeai.tests.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.gam.rst +21 -0
- pygeai/_docs/source/pygeai.tests.health.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
- pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
- pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
- pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
- pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
- pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
- pygeai/_docs/source/pygeai.tests.rst +33 -0
- pygeai/admin/clients.py +14 -11
- pygeai/admin/endpoints.py +2 -2
- pygeai/analytics/clients.py +505 -0
- pygeai/analytics/endpoints.py +35 -0
- pygeai/analytics/managers.py +606 -0
- pygeai/analytics/mappers.py +207 -0
- pygeai/analytics/responses.py +240 -0
- pygeai/assistant/clients.py +48 -57
- pygeai/assistant/data/__init__.py +0 -0
- pygeai/assistant/data/clients.py +15 -0
- pygeai/assistant/data_analyst/__init__.py +0 -0
- pygeai/assistant/data_analyst/clients.py +75 -0
- pygeai/assistant/data_analyst/endpoints.py +2 -0
- pygeai/assistant/endpoints.py +0 -2
- pygeai/assistant/managers.py +738 -0
- pygeai/assistant/mappers.py +153 -0
- pygeai/assistant/rag/clients.py +132 -21
- pygeai/assistant/rag/mappers.py +228 -0
- pygeai/assistant/rag/models.py +396 -0
- pygeai/assistant/rag/responses.py +10 -0
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +406 -31
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +17 -0
- pygeai/chat/managers.py +64 -0
- pygeai/chat/session.py +38 -0
- pygeai/chat/settings.py +6 -0
- pygeai/chat/ui.py +678 -0
- pygeai/cli/__init__.py +0 -1
- pygeai/cli/commands/admin.py +9 -12
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +11 -11
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +201 -7
- pygeai/cli/commands/chat.py +875 -14
- pygeai/cli/commands/common.py +30 -26
- pygeai/cli/commands/configuration.py +84 -9
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +187 -0
- pygeai/cli/commands/evaluation.py +2069 -0
- pygeai/cli/commands/feedback.py +93 -0
- pygeai/cli/commands/files.py +312 -0
- pygeai/cli/commands/flows/__init__.py +0 -0
- pygeai/cli/commands/gam.py +349 -0
- pygeai/cli/commands/lab/__init__.py +0 -0
- pygeai/cli/commands/lab/ai_lab.py +4110 -0
- pygeai/cli/commands/lab/common.py +135 -0
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/spec.py +273 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/commands/llm.py +164 -0
- pygeai/cli/commands/migrate.py +1198 -0
- pygeai/cli/commands/options.py +86 -0
- pygeai/cli/commands/organization.py +560 -98
- pygeai/cli/commands/rag.py +306 -10
- pygeai/cli/commands/rerank.py +108 -0
- pygeai/cli/commands/secrets.py +357 -0
- pygeai/cli/commands/usage_limits.py +583 -0
- pygeai/cli/commands/validators.py +209 -0
- pygeai/cli/commands/version.py +44 -0
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +171 -30
- pygeai/cli/geai_proxy.py +318 -0
- pygeai/cli/install_man.py +107 -0
- pygeai/cli/parsers.py +78 -25
- pygeai/cli/texts/help.py +712 -55
- pygeai/core/__init__.py +9 -1
- pygeai/core/base/clients.py +61 -10
- pygeai/core/base/mappers.py +208 -30
- pygeai/core/base/models.py +8 -308
- pygeai/core/base/responses.py +18 -1
- pygeai/core/base/session.py +110 -17
- pygeai/core/common/config.py +98 -16
- pygeai/core/common/decorators.py +44 -0
- pygeai/core/common/exceptions.py +104 -4
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +93 -0
- pygeai/core/embeddings/endpoints.py +1 -0
- pygeai/core/embeddings/managers.py +62 -0
- pygeai/core/embeddings/mappers.py +52 -0
- pygeai/core/embeddings/models.py +14 -0
- pygeai/core/embeddings/responses.py +31 -0
- pygeai/core/feedback/__init__.py +0 -0
- pygeai/core/feedback/clients.py +50 -0
- pygeai/core/feedback/endpoints.py +1 -0
- pygeai/core/feedback/models.py +10 -0
- pygeai/core/files/__init__.py +0 -0
- pygeai/core/files/clients.py +156 -0
- pygeai/core/files/endpoints.py +5 -0
- pygeai/core/files/managers.py +224 -0
- pygeai/core/files/mappers.py +44 -0
- pygeai/core/files/models.py +24 -0
- pygeai/core/files/responses.py +19 -0
- pygeai/core/handlers.py +32 -0
- pygeai/core/llm/__init__.py +0 -0
- pygeai/core/llm/clients.py +53 -0
- pygeai/core/llm/endpoints.py +4 -0
- pygeai/core/models.py +799 -0
- pygeai/core/plugins/__init__.py +0 -0
- pygeai/core/plugins/clients.py +32 -0
- pygeai/core/plugins/endpoints.py +1 -0
- pygeai/core/plugins/models.py +86 -0
- pygeai/core/rerank/__init__.py +0 -0
- pygeai/core/rerank/clients.py +35 -0
- pygeai/core/rerank/endpoints.py +1 -0
- pygeai/core/rerank/managers.py +47 -0
- pygeai/core/rerank/mappers.py +23 -0
- pygeai/core/rerank/models.py +27 -0
- pygeai/core/responses.py +104 -0
- pygeai/core/secrets/__init__.py +0 -0
- pygeai/core/secrets/clients.py +212 -0
- pygeai/core/secrets/endpoints.py +7 -0
- pygeai/core/services/llm/__init__.py +0 -0
- pygeai/core/services/llm/model.py +186 -0
- pygeai/core/services/llm/providers.py +15 -0
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +311 -89
- pygeai/core/utils/__init__.py +0 -0
- pygeai/core/utils/console.py +83 -0
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +870 -0
- pygeai/evaluation/__init__.py +0 -0
- pygeai/evaluation/clients.py +19 -0
- pygeai/evaluation/dataset/__init__.py +0 -0
- pygeai/evaluation/dataset/clients.py +514 -0
- pygeai/evaluation/dataset/endpoints.py +26 -0
- pygeai/evaluation/plan/__init__.py +0 -0
- pygeai/evaluation/plan/clients.py +302 -0
- pygeai/evaluation/plan/endpoints.py +16 -0
- pygeai/evaluation/result/__init__.py +0 -0
- pygeai/evaluation/result/clients.py +70 -0
- pygeai/evaluation/result/endpoints.py +2 -0
- pygeai/flows/__init__.py +0 -0
- pygeai/flows/endpoints.py +362 -0
- pygeai/flows/models.py +1304 -0
- pygeai/gam/__init__.py +0 -0
- pygeai/gam/clients.py +178 -0
- pygeai/gam/endpoints.py +4 -0
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -0
- pygeai/lab/agents/__init__.py +0 -0
- pygeai/lab/agents/clients.py +426 -0
- pygeai/lab/agents/endpoints.py +12 -0
- pygeai/lab/agents/mappers.py +319 -0
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +1558 -0
- pygeai/lab/models.py +1719 -0
- pygeai/lab/processes/__init__.py +0 -0
- pygeai/lab/processes/clients.py +1051 -0
- pygeai/lab/processes/endpoints.py +26 -0
- pygeai/lab/processes/mappers.py +395 -0
- pygeai/lab/runners.py +90 -0
- pygeai/lab/spec/__init__.py +0 -0
- pygeai/lab/spec/loader.py +24 -0
- pygeai/lab/spec/parsers.py +39 -0
- pygeai/lab/strategies/__init__.py +0 -0
- pygeai/lab/strategies/clients.py +212 -0
- pygeai/lab/strategies/endpoints.py +5 -0
- pygeai/lab/strategies/mappers.py +58 -0
- pygeai/lab/tools/__init__.py +0 -0
- pygeai/lab/tools/clients.py +465 -0
- pygeai/lab/tools/endpoints.py +13 -0
- pygeai/lab/tools/mappers.py +131 -0
- pygeai/man/__init__.py +1 -0
- pygeai/man/man1/__init__.py +1 -0
- pygeai/man/man1/geai-proxy.1 +246 -0
- pygeai/man/man1/geai.1 +2615 -0
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +603 -0
- pygeai/migration/tools.py +180 -0
- pygeai/organization/clients.py +246 -18
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/__init__.py +0 -0
- pygeai/organization/limits/clients.py +281 -0
- pygeai/organization/limits/endpoints.py +15 -0
- pygeai/organization/limits/managers.py +331 -0
- pygeai/organization/limits/mappers.py +21 -0
- pygeai/organization/managers.py +537 -0
- pygeai/organization/mappers.py +111 -46
- pygeai/organization/responses.py +61 -11
- pygeai/proxy/__init__.py +0 -0
- pygeai/proxy/clients.py +216 -0
- pygeai/proxy/config.py +128 -0
- pygeai/proxy/managers.py +232 -0
- pygeai/proxy/servers.py +304 -0
- pygeai/proxy/tool.py +69 -0
- pygeai/tests/admin/__init__.py +0 -0
- pygeai/tests/admin/test_clients.py +148 -0
- pygeai/tests/analytics/__init__.py +0 -0
- pygeai/tests/analytics/test_clients.py +86 -0
- pygeai/tests/analytics/test_managers.py +94 -0
- pygeai/tests/analytics/test_mappers.py +84 -0
- pygeai/tests/analytics/test_responses.py +73 -0
- pygeai/tests/assistants/rag/__init__.py +0 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_mappers.py +189 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -80
- pygeai/tests/assistants/test_managers.py +198 -0
- pygeai/tests/assistants/test_mappers.py +111 -0
- pygeai/tests/auth/__init__.py +0 -0
- pygeai/tests/auth/test_clients.py +289 -0
- pygeai/tests/auth/test_oauth.py +172 -0
- pygeai/tests/auth/test_session_logging.py +150 -0
- pygeai/tests/chat/__init__.py +0 -0
- pygeai/tests/chat/test_clients.py +393 -0
- pygeai/tests/chat/test_iris.py +38 -0
- pygeai/tests/chat/test_session.py +62 -0
- pygeai/tests/chat/test_ui.py +224 -0
- pygeai/tests/cli/__init__.py +0 -0
- pygeai/tests/cli/commands/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
- pygeai/tests/cli/commands/lab/test_common.py +208 -0
- pygeai/tests/cli/commands/lab/test_spec.py +246 -0
- pygeai/tests/cli/commands/test_assistant.py +202 -0
- pygeai/tests/cli/commands/test_chat.py +130 -0
- pygeai/tests/cli/commands/test_common.py +350 -0
- pygeai/tests/cli/commands/test_embeddings.py +132 -0
- pygeai/tests/cli/commands/test_evaluation.py +656 -0
- pygeai/tests/cli/commands/test_feedback.py +65 -0
- pygeai/tests/cli/commands/test_files.py +161 -0
- pygeai/tests/cli/commands/test_gam.py +201 -0
- pygeai/tests/cli/commands/test_llm.py +114 -0
- pygeai/tests/cli/commands/test_migrate.py +176 -0
- pygeai/tests/cli/commands/test_organization.py +276 -0
- pygeai/tests/cli/commands/test_rag.py +266 -0
- pygeai/tests/cli/commands/test_rerank.py +110 -0
- pygeai/tests/cli/commands/test_secrets.py +171 -0
- pygeai/tests/cli/commands/test_show_help.py +41 -0
- pygeai/tests/cli/commands/test_usage_limits.py +412 -0
- pygeai/tests/cli/commands/test_validators.py +160 -0
- pygeai/tests/cli/commands/test_version.py +81 -0
- pygeai/tests/cli/docker/__init__.py +0 -0
- pygeai/tests/cli/test_credentials_flag.py +316 -0
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +154 -0
- pygeai/tests/core/base/__init__.py +0 -0
- pygeai/tests/core/base/data/__init__.py +0 -0
- pygeai/tests/core/base/data/mappers.py +117 -0
- pygeai/tests/core/base/data/models.py +312 -0
- pygeai/tests/core/base/test_mappers.py +569 -0
- pygeai/tests/core/base/test_models.py +261 -0
- pygeai/tests/core/base/test_responses.py +53 -0
- pygeai/tests/core/common/__init__.py +0 -0
- pygeai/tests/core/common/data/__init__.py +0 -0
- pygeai/tests/core/common/test_config.py +186 -0
- pygeai/tests/core/common/test_decorators.py +69 -0
- pygeai/tests/core/embeddings/__init__.py +0 -0
- pygeai/tests/core/embeddings/test_clients.py +225 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/__init__.py +0 -0
- pygeai/tests/core/feedback/test_clients.py +64 -0
- pygeai/tests/core/files/__init__.py +0 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +219 -0
- pygeai/tests/core/files/test_mappers.py +137 -0
- pygeai/tests/core/files/test_models.py +103 -0
- pygeai/tests/core/files/test_responses.py +122 -0
- pygeai/tests/core/llm/__init__.py +0 -0
- pygeai/tests/core/llm/test_clients.py +142 -0
- pygeai/tests/core/plugins/__init__.py +0 -0
- pygeai/tests/core/plugins/test_clients.py +66 -0
- pygeai/tests/core/rerank/__init__.py +0 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +99 -0
- pygeai/tests/core/rerank/test_mappers.py +54 -0
- pygeai/tests/core/secrets/__init__.py +0 -0
- pygeai/tests/core/secrets/test_clients.py +264 -0
- pygeai/tests/core/services/__init__.py +0 -0
- pygeai/tests/core/services/test_rest.py +273 -0
- pygeai/tests/core/test_handlers.py +66 -0
- pygeai/tests/core/utils/__init__.py +0 -0
- pygeai/tests/core/utils/test_console.py +80 -0
- pygeai/tests/dbg/__init__.py +0 -0
- pygeai/tests/dbg/test_debugger.py +591 -0
- pygeai/tests/evaluation/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/test_clients.py +265 -0
- pygeai/tests/evaluation/plan/__init__.py +0 -0
- pygeai/tests/evaluation/plan/test_clients.py +195 -0
- pygeai/tests/evaluation/result/__init__.py +0 -0
- pygeai/tests/evaluation/result/test_clients.py +66 -0
- pygeai/tests/gam/__init__.py +0 -0
- pygeai/tests/gam/test_clients.py +195 -0
- pygeai/tests/health/__init__.py +0 -0
- pygeai/tests/health/test_clients.py +41 -0
- pygeai/tests/integration/__init__.py +0 -0
- pygeai/tests/integration/assistants/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/test_create_rag.py +91 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +158 -0
- pygeai/tests/integration/lab/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
- pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
- pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
- pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
- pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
- pygeai/tests/integration/lab/processes/__init__.py +0 -0
- pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
- pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
- pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
- pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
- pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
- pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
- pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
- pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
- pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
- pygeai/tests/lab/__init__.py +0 -0
- pygeai/tests/lab/agents/__init__.py +0 -0
- pygeai/tests/lab/agents/test_clients.py +481 -0
- pygeai/tests/lab/agents/test_mappers.py +440 -0
- pygeai/tests/lab/processes/__init__.py +0 -0
- pygeai/tests/lab/processes/test_clients.py +1416 -0
- pygeai/tests/lab/processes/test_mappers.py +1092 -0
- pygeai/tests/lab/spec/__init__.py +0 -0
- pygeai/tests/lab/spec/test_loader.py +59 -0
- pygeai/tests/lab/spec/test_parsers.py +182 -0
- pygeai/tests/lab/strategies/__init__.py +0 -0
- pygeai/tests/lab/strategies/test_clients.py +241 -0
- pygeai/tests/lab/strategies/test_mappers.py +132 -0
- pygeai/tests/lab/test_managers.py +553 -0
- pygeai/tests/lab/test_mappers.py +245 -0
- pygeai/tests/lab/test_models.py +1154 -0
- pygeai/tests/lab/tools/__init__.py +0 -0
- pygeai/tests/lab/tools/test_clients.py +521 -0
- pygeai/tests/lab/tools/test_mappers.py +198 -0
- pygeai/tests/migration/__init__.py +0 -0
- pygeai/tests/migration/test_strategies.py +405 -0
- pygeai/tests/migration/test_tools.py +159 -0
- pygeai/tests/organization/limits/__init__.py +0 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +402 -0
- pygeai/tests/organization/test_clients.py +615 -64
- pygeai/tests/organization/test_managers.py +424 -0
- pygeai/tests/organization/test_mappers.py +153 -0
- pygeai/tests/organization/test_responses.py +137 -0
- pygeai/tests/proxy/__init__.py +1 -0
- pygeai/tests/proxy/test_clients.py +397 -0
- pygeai/tests/proxy/test_config.py +171 -0
- pygeai/tests/proxy/test_integration.py +305 -0
- pygeai/tests/proxy/test_managers.py +312 -0
- pygeai/tests/proxy/test_servers.py +387 -0
- pygeai/tests/proxy/test_tool.py +176 -0
- pygeai/tests/snippets/__init__.py +0 -0
- pygeai/tests/snippets/analytics/__init__.py +0 -0
- pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
- pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
- pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
- pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
- pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
- pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
- pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
- pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
- pygeai/tests/snippets/analytics/get_total_tokens.py +12 -0
- pygeai/tests/snippets/assistants/__init__.py +0 -0
- pygeai/tests/snippets/assistants/create_chat_assistant.py +54 -0
- pygeai/tests/snippets/assistants/create_text_assistant.py +51 -0
- pygeai/tests/snippets/assistants/data_analyst/__init__.py +0 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +100 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +9 -0
- pygeai/tests/snippets/assistants/data_analyst/get_status.py +9 -0
- pygeai/tests/snippets/assistants/file_summarizer_assistant.py +149 -0
- pygeai/tests/snippets/assistants/get_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/get_assistant_list.py +7 -0
- pygeai/tests/snippets/assistants/rag/__init__.py +0 -0
- pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +65 -0
- pygeai/tests/snippets/assistants/rag/delete_al_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/delete_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +8 -0
- pygeai/tests/snippets/assistants/rag/get_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/get_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +48 -0
- pygeai/tests/snippets/assistants/rag/upload_document.py +19 -0
- pygeai/tests/snippets/assistants/send_feedback.py +14 -0
- pygeai/tests/snippets/assistants/update_chat_assistant.py +63 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/__init__.py +0 -0
- pygeai/tests/snippets/chat/cancel_request.py +7 -0
- pygeai/tests/snippets/chat/chat_completion.py +28 -0
- pygeai/tests/snippets/chat/chat_completion_1.py +40 -0
- pygeai/tests/snippets/chat/chat_completion_2.py +60 -0
- pygeai/tests/snippets/chat/chat_completion_3.py +27 -0
- pygeai/tests/snippets/chat/chat_completion_4.py +67 -0
- pygeai/tests/snippets/chat/chat_completion_streaming.py +63 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_request_status.py +7 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_complete_example.py +67 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_instructions.py +19 -0
- pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
- pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
- pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
- pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -0
- pygeai/tests/snippets/chat/send_chat_request.py +33 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/file_debugging.py +72 -0
- pygeai/tests/snippets/dbg/module_debugging.py +61 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/__init__.py +0 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/generate_embeddings.py +26 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/files/__init__.py +0 -0
- pygeai/tests/snippets/files/delete_file.py +9 -0
- pygeai/tests/snippets/files/get_file_content.py +10 -0
- pygeai/tests/snippets/files/get_file_data.py +9 -0
- pygeai/tests/snippets/files/get_file_list.py +6 -0
- pygeai/tests/snippets/files/upload_file.py +13 -0
- pygeai/tests/snippets/gam/__init__.py +0 -0
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/__init__.py +0 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +326 -0
- pygeai/tests/snippets/lab/agentic_flow_example_2.py +206 -0
- pygeai/tests/snippets/lab/agentic_flow_example_3.py +486 -0
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +446 -0
- pygeai/tests/snippets/lab/agents/__init__.py +0 -0
- pygeai/tests/snippets/lab/agents/create_agent.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_2.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/delete_agent.py +12 -0
- pygeai/tests/snippets/lab/agents/get_agent.py +24 -0
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +13 -0
- pygeai/tests/snippets/lab/agents/list_agents.py +18 -0
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +12 -0
- pygeai/tests/snippets/lab/agents/update_agent.py +50 -0
- pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
- pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
- pygeai/tests/snippets/lab/crud_ui.py +462 -0
- pygeai/tests/snippets/lab/processes/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/create_process.py +24 -0
- pygeai/tests/snippets/lab/processes/create_task.py +8 -0
- pygeai/tests/snippets/lab/processes/jobs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +21 -0
- pygeai/tests/snippets/lab/processes/kbs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +18 -0
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +26 -0
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +30 -0
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +73 -0
- pygeai/tests/snippets/lab/processes/list_processes.py +10 -0
- pygeai/tests/snippets/lab/runner_1.py +212 -0
- pygeai/tests/snippets/lab/samples/__init__.py +0 -0
- pygeai/tests/snippets/lab/samples/summarize_files.py +162 -0
- pygeai/tests/snippets/lab/strategies/__init__.py +0 -0
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +22 -0
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +10 -0
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +16 -0
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +26 -0
- pygeai/tests/snippets/lab/tools/__init__.py +0 -0
- pygeai/tests/snippets/lab/tools/create_tool.py +48 -0
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +21 -0
- pygeai/tests/snippets/lab/tools/get_parameter.py +21 -0
- pygeai/tests/snippets/lab/tools/get_tool.py +22 -0
- pygeai/tests/snippets/lab/tools/list_tools.py +23 -0
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +13 -0
- pygeai/tests/snippets/lab/tools/set_parameters.py +33 -0
- pygeai/tests/snippets/lab/tools/update_tool.py +52 -0
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +238 -0
- pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
- pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
- pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
- pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +157 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +157 -0
- pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
- pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/__init__.py +0 -0
- pygeai/tests/snippets/organization/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +23 -0
- pygeai/tests/snippets/organization/delete_project.py +7 -0
- pygeai/tests/snippets/organization/export_request_data.py +7 -0
- pygeai/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_data.py +7 -0
- pygeai/tests/snippets/organization/get_project_list.py +8 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- pygeai/tests/snippets/organization/get_project_tokens.py +7 -0
- pygeai/tests/snippets/organization/update_project.py +14 -0
- pygeai/tests/snippets/rerank/__init__.py +0 -0
- pygeai/tests/snippets/rerank/rerank_chunks.py +19 -0
- pygeai/tests/snippets/secrets/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/delete_usage_limit.py +16 -0
- pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +12 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +11 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +13 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +22 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +24 -0
- pygeai/vendor/a2a/__init__.py +1 -0
- pygeai/vendor/a2a/auth/__init__.py +0 -0
- pygeai/vendor/a2a/auth/user.py +31 -0
- pygeai/vendor/a2a/client/__init__.py +19 -0
- pygeai/vendor/a2a/client/client.py +425 -0
- pygeai/vendor/a2a/client/errors.py +33 -0
- pygeai/vendor/a2a/client/helpers.py +22 -0
- pygeai/vendor/a2a/py.typed +0 -0
- pygeai/vendor/a2a/server/__init__.py +1 -0
- pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
- pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
- pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
- pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
- pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
- pygeai/vendor/a2a/server/apps/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
- pygeai/vendor/a2a/server/context.py +23 -0
- pygeai/vendor/a2a/server/events/__init__.py +21 -0
- pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
- pygeai/vendor/a2a/server/events/event_queue.py +156 -0
- pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
- pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
- pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
- pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
- pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
- pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
- pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
- pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
- pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
- pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
- pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
- pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
- pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
- pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
- pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
- pygeai/vendor/a2a/types.py +1624 -0
- pygeai/vendor/a2a/utils/__init__.py +40 -0
- pygeai/vendor/a2a/utils/artifact.py +72 -0
- pygeai/vendor/a2a/utils/errors.py +69 -0
- pygeai/vendor/a2a/utils/helpers.py +176 -0
- pygeai/vendor/a2a/utils/message.py +83 -0
- pygeai/vendor/a2a/utils/task.py +57 -0
- pygeai/vendor/a2a/utils/telemetry.py +299 -0
- pygeai-0.6.0b15.dist-info/METADATA +205 -0
- pygeai-0.6.0b15.dist-info/RECORD +799 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- pygeai-0.6.0b15.dist-info/entry_points.txt +5 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info/licenses}/LICENSE +13 -1
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/top_level.txt +0 -1
- docs/source/conf.py +0 -45
- pygeai/core/clients.py +0 -240
- pygeai/tests/core/test_clients.py +0 -49
- pygeai-0.1.6.dist-info/METADATA +0 -92
- pygeai-0.1.6.dist-info/RECORD +0 -65
- pygeai-0.1.6.dist-info/SOURCES.sync-conflict-20241223-145950-3QD4F42.txt +0 -41
- pygeai-0.1.6.dist-info/entry_points.txt +0 -2
- /pygeai/{agent → analytics}/__init__.py +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
from pygeai.lab.managers import AILabManager
|
|
2
|
+
from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Sampling, PromptExample, PromptOutput, ResourcePool, ResourcePoolTool, ResourcePoolList, ModelList
|
|
3
|
+
import uuid
|
|
4
|
+
import json
|
|
5
|
+
|
|
6
|
+
WEB_DESIGN_GUIDE = """
|
|
7
|
+
Web Design Analysis Documentation:
|
|
8
|
+
- **HTML**:
|
|
9
|
+
- Standards: HTML5, semantic elements (e.g., <header>, <nav>, <main>).
|
|
10
|
+
- Accessibility: WCAG 2.1 (e.g., alt text, ARIA roles, keyboard navigability).
|
|
11
|
+
- Common issues: Missing <title>, unclosed tags, excessive div nesting.
|
|
12
|
+
- **CSS**:
|
|
13
|
+
- Standards: CSS3, flexbox, grid, media queries for responsiveness.
|
|
14
|
+
- Best practices: Avoid !important, use relative units (rem, vw), optimize selectors.
|
|
15
|
+
- Common issues: High specificity, unused styles, missing fallbacks for older browsers.
|
|
16
|
+
- **JavaScript**:
|
|
17
|
+
- Standards: ES6+, async/await, DOM manipulation.
|
|
18
|
+
- Best practices: Minimize global variables, use event delegation, avoid inline scripts.
|
|
19
|
+
- Common issues: Unhandled errors, large script files, deprecated APIs (e.g., document.all).
|
|
20
|
+
- **Analysis Types**:
|
|
21
|
+
- Accessibility: Check alt attributes, ARIA labels, focusable elements (e.g., <a> with href).
|
|
22
|
+
- Performance: Assess image sizes (>1MB), CSS/JS minification, DOM depth (>10 levels).
|
|
23
|
+
- SEO: Verify meta tags (description, keywords), h1-h6 hierarchy, canonical URLs.
|
|
24
|
+
- Responsive Design: Check media queries, viewport meta tag, mobile-first CSS.
|
|
25
|
+
- Code Quality: Evaluate HTML semantics, CSS modularity (e.g., BEM), JS error handling.
|
|
26
|
+
- UX: Analyze navigation structure, button visibility, content spacing (>10px).
|
|
27
|
+
- Security: Ensure HTTPS, check secure headers (e.g., Content-Security-Policy), avoid eval() in JS.
|
|
28
|
+
- Cross-Browser Compatibility: Identify missing vendor prefixes, test for IE/Edge issues.
|
|
29
|
+
- Content: Assess font readability (e.g., >14px), content length, visual hierarchy.
|
|
30
|
+
- Design Trends: Compare to 2025 trends (e.g., dark mode, micro-animations, neumorphism).
|
|
31
|
+
- **Tools**:
|
|
32
|
+
- get_search_api_v1_web_search__get_get: Performs web searches to find design resources or examples.
|
|
33
|
+
- Input: Query string (e.g., 'modern web design trends 2025').
|
|
34
|
+
- Output: JSON with results (e.g., {'results': [{'url': 'string', 'title': 'string', 'snippet': 'string'}]}).
|
|
35
|
+
- Errors: 400 (invalid query), 429 (rate limit).
|
|
36
|
+
- tool_web_scrap_httpx_post: Scrapes a website’s content.
|
|
37
|
+
- Input: URL (required), selectors (optional, e.g., '.main-content').
|
|
38
|
+
- Output: JSON with html (raw HTML), css (styles), js (scripts).
|
|
39
|
+
- Errors: 400 (invalid URL), 403 (access denied), 429 (rate limit).
|
|
40
|
+
- **Metadata**:
|
|
41
|
+
- Search Results: {'results': [{'url': 'string', 'title': 'string', 'snippet': 'string'}]}
|
|
42
|
+
- Scraped Data: {'html': 'string', 'css': 'string', 'js': 'string'}
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
# Define the agent
|
|
46
|
+
agent_id = "73e0d4f1-5413-49da-a2d8-da63add50ac5"
|
|
47
|
+
|
|
48
|
+
agent = Agent(
|
|
49
|
+
id=agent_id,
|
|
50
|
+
status="active",
|
|
51
|
+
name="WebDesigner",
|
|
52
|
+
access_scope="private",
|
|
53
|
+
public_name="com.globant.web.designer",
|
|
54
|
+
job_description="Analyzes web pages and provides web design recommendations using HTML, CSS, and JavaScript expertise",
|
|
55
|
+
avatar_image="https://www.shareicon.net/data/128x128/2016/06/30/788672_design_512x512.png",
|
|
56
|
+
description="Expert agent for web design analysis, using web search and scraping tools to provide insights on accessibility, performance, SEO, and modern design trends.",
|
|
57
|
+
is_draft=False,
|
|
58
|
+
is_readonly=False,
|
|
59
|
+
revision=1,
|
|
60
|
+
version=None,
|
|
61
|
+
agent_data=AgentData(
|
|
62
|
+
prompt=Prompt(
|
|
63
|
+
instructions=f"""\
|
|
64
|
+
You are WebDesigner, a version 1.0 assistant specializing in web design analysis, proficient in HTML, CSS, and JavaScript. Your role is to answer queries about web design, search for relevant web resources, and analyze web pages using provided tools. Use the get_search_api_v1_web_search__get_get tool for web searches and the tool_web_scrap_httpx_post tool for scraping website content. Follow these steps:
|
|
65
|
+
|
|
66
|
+
1. **Classify Query Type**:
|
|
67
|
+
- **Conversation**: Answer directly using WEB_DESIGN_GUIDE if the query doesn't require data retrieval (e.g., explaining HTML semantics, CSS best practices, or supported analysis types).
|
|
68
|
+
- **Search**: Use get_search_api_v1_web_search__get_get when the query requires finding web resources (e.g., 'find examples of modern web design').
|
|
69
|
+
- **Analysis**: Use tool_web_scrap_httpx_post to scrape a website when analyzing a specific webpage (e.g., accessibility, SEO).
|
|
70
|
+
|
|
71
|
+
2. **For Conversation Queries**:
|
|
72
|
+
- Provide a concise answer based on WEB_DESIGN_GUIDE.
|
|
73
|
+
- Use the 'style' input (formal or informal) to tailor the tone.
|
|
74
|
+
- If the query is unclear, ask for clarification.
|
|
75
|
+
- If asked about supported analysis types, list examples from WEB_DESIGN_GUIDE.
|
|
76
|
+
|
|
77
|
+
3. **For Search Queries**:
|
|
78
|
+
- Use get_search_api_v1_web_search__get_get with the query string to find relevant websites or resources.
|
|
79
|
+
- Summarize the search results, highlighting URLs, titles, and snippets relevant to the query.
|
|
80
|
+
- Return the raw JSON response from the search tool.
|
|
81
|
+
- Provide a brief analysis of the results, focusing on their relevance to web design.
|
|
82
|
+
|
|
83
|
+
4. **For Analysis Queries**:
|
|
84
|
+
- Use tool_web_scrap_httpx_post to fetch the website’s HTML, CSS, and JavaScript, specifying the provided URL and optional selectors.
|
|
85
|
+
- Analyze the scraped content based on the requested analysis type (e.g., accessibility, performance).
|
|
86
|
+
- Perform checks using WEB_DESIGN_GUIDE (e.g., alt attributes for accessibility, media queries for responsiveness).
|
|
87
|
+
- Provide detailed recommendations for improvement, referencing specific HTML elements, CSS rules, or JavaScript functions.
|
|
88
|
+
- Consider the current date (May 27, 2025, 12:05 PM -03) for trends (e.g., outdated design practices like skeuomorphism).
|
|
89
|
+
- If no content is returned (e.g., 403 error), return an empty response ({{"html": "", "css": "", "js": ""}}).
|
|
90
|
+
- Return the raw JSON response from the scraping tool.
|
|
91
|
+
- Include a detailed analysis of the scraped content, focusing on design quality, usability, and business impact (e.g., improved SEO for better traffic).
|
|
92
|
+
- Match the language and style of the initial response.
|
|
93
|
+
|
|
94
|
+
5. **Supported Analysis Types**:
|
|
95
|
+
- Accessibility, Performance Optimization, SEO, Responsive Design, Code Quality, User Experience (UX), Security Best Practices, Cross-Browser Compatibility, Content Analysis, Design Trends.
|
|
96
|
+
- Refer to WEB_DESIGN_GUIDE for specific checks and recommendations.
|
|
97
|
+
|
|
98
|
+
6. **General**:
|
|
99
|
+
- Base responses on WEB_DESIGN_GUIDE and the output of the search or scraping tools.
|
|
100
|
+
- Tailor tone based on 'style' (formal or informal).
|
|
101
|
+
- Handle errors (e.g., 400, 403, 429) with explanations and solutions (e.g., '403: Ensure the URL is publicly accessible').
|
|
102
|
+
- Return the raw JSON response from the tools for search and analysis queries.
|
|
103
|
+
- Use 'history' to interpret context from previous queries.
|
|
104
|
+
- Respond in the specified 'language'.
|
|
105
|
+
|
|
106
|
+
WEB_DESIGN_GUIDE:
|
|
107
|
+
{WEB_DESIGN_GUIDE}
|
|
108
|
+
""",
|
|
109
|
+
inputs=["query", "style", "history", "language"],
|
|
110
|
+
outputs=[
|
|
111
|
+
PromptOutput(
|
|
112
|
+
key="response",
|
|
113
|
+
description="Raw JSON response from the search or scraping tool, or a conversation answer in plain text."
|
|
114
|
+
)
|
|
115
|
+
],
|
|
116
|
+
examples=[
|
|
117
|
+
PromptExample(
|
|
118
|
+
input_data="What is semantic HTML? [informal] [] en",
|
|
119
|
+
output="Semantic HTML uses tags like <header>, <nav>, and <article> to describe content meaning, making your site easier to understand for browsers and screen readers."
|
|
120
|
+
),
|
|
121
|
+
PromptExample(
|
|
122
|
+
input_data="Find examples of modern web design trends [formal] [] en",
|
|
123
|
+
output=json.dumps({
|
|
124
|
+
"results": [
|
|
125
|
+
{"url": "https://designsite1.com", "title": "2025 Web Design Trends", "snippet": "Explore minimalism and micro-animations..."},
|
|
126
|
+
{"url": "https://designsite2.com", "title": "Modern UI Patterns", "snippet": "Dark mode and neumorphism in 2025..."}
|
|
127
|
+
]
|
|
128
|
+
})
|
|
129
|
+
),
|
|
130
|
+
PromptExample(
|
|
131
|
+
input_data="Analyze accessibility for https://example.com [formal] [] en",
|
|
132
|
+
output=json.dumps({
|
|
133
|
+
"html": "<html><body><img src='logo.png'><a href='#'>Link</a></body></html>",
|
|
134
|
+
"css": "body { font-size: 16px; }",
|
|
135
|
+
"js": ""
|
|
136
|
+
})
|
|
137
|
+
),
|
|
138
|
+
PromptExample(
|
|
139
|
+
input_data="Check SEO for https://example.com [formal] [] en",
|
|
140
|
+
output=json.dumps({
|
|
141
|
+
"html": "<html><head><title>Example</title><meta name='description' content='Sample site'></head><body><h1>Welcome</h1></body></html>",
|
|
142
|
+
"css": "",
|
|
143
|
+
"js": ""
|
|
144
|
+
})
|
|
145
|
+
),
|
|
146
|
+
PromptExample(
|
|
147
|
+
input_data="Evaluate responsive design for https://example.com [formal] [] en",
|
|
148
|
+
output=json.dumps({
|
|
149
|
+
"html": "<html><head><meta name='viewport' content='width=device-width'></head><body><div class='container'></div></body></html>",
|
|
150
|
+
"css": "@media (max-width: 600px) { .container { width: 100%; } }",
|
|
151
|
+
"js": ""
|
|
152
|
+
})
|
|
153
|
+
)
|
|
154
|
+
]
|
|
155
|
+
),
|
|
156
|
+
llm_config=LlmConfig(
|
|
157
|
+
max_tokens=5000,
|
|
158
|
+
timeout=0,
|
|
159
|
+
sampling=Sampling(temperature=0.7, top_k=50, top_p=1.0)
|
|
160
|
+
),
|
|
161
|
+
models=ModelList(models=[Model(name="openai/gpt-4.1")]),
|
|
162
|
+
resource_pools=ResourcePoolList(
|
|
163
|
+
resource_pools=[
|
|
164
|
+
ResourcePool(
|
|
165
|
+
name="WebDesignTools",
|
|
166
|
+
tools=[
|
|
167
|
+
ResourcePoolTool(name="get_search_api_v1_web_search__get_get", revision=None),
|
|
168
|
+
ResourcePoolTool(name="tool_web_scrap_httpx_post", revision=None)
|
|
169
|
+
],
|
|
170
|
+
agents=[]
|
|
171
|
+
)
|
|
172
|
+
]
|
|
173
|
+
)
|
|
174
|
+
)
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
# Create the agent
|
|
178
|
+
manager = AILabManager()
|
|
179
|
+
result = manager.update_agent(
|
|
180
|
+
project_id="2ca6883f-6778-40bb-bcc1-85451fb11107",
|
|
181
|
+
agent=agent,
|
|
182
|
+
automatic_publish=True
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
if isinstance(result, Agent):
|
|
186
|
+
print(f"Agent updated successfully: {agent.to_dict()}")
|
|
187
|
+
else:
|
|
188
|
+
print("Errors:", result.errors if hasattr(result, 'errors') else "Unknown error occurred")
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
from pygeai.lab.managers import AILabManager
|
|
2
|
+
from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Sampling, PromptExample, PromptOutput, ResourcePool, ResourcePoolTool, ResourcePoolList, ModelList
|
|
3
|
+
import uuid
|
|
4
|
+
import json
|
|
5
|
+
|
|
6
|
+
WEB_READING_GUIDE = """
|
|
7
|
+
Web Content Reading Documentation:
|
|
8
|
+
- **Content Types**:
|
|
9
|
+
- News Articles: Include headlines, bylines, publication dates, body text. Focus on key events (who/what/when/where/why).
|
|
10
|
+
- Blog Articles: Conversational, with opinions or insights. Identify main arguments, supporting points, conclusions.
|
|
11
|
+
- General Web Content: Informational pages, about pages, product descriptions, navigation, footers. Summarize purpose and key messages.
|
|
12
|
+
- **Summarization**:
|
|
13
|
+
- News: 2-3 sentences, capturing main event and impact (e.g., "Company X launched a new product, targeting Y market.").
|
|
14
|
+
- Blogs: 3-4 sentences, highlighting thesis and key takeaways.
|
|
15
|
+
- Explanations: 1-2 sentence overview of page purpose and content, considering all page elements.
|
|
16
|
+
- Extract from entire page: Headlines (<h1>, <h2>), body text (<p>, <article>), metadata (<meta>), navigation (<nav>), footers (<footer>).
|
|
17
|
+
- **Question Answering**:
|
|
18
|
+
- Answer strictly using all scraped HTML content (e.g., "What’s the article’s stance on X?").
|
|
19
|
+
- If information is missing, state: "The scraped content does not provide this information."
|
|
20
|
+
- Do not use external knowledge or assumptions to fill gaps.
|
|
21
|
+
- **Credibility**:
|
|
22
|
+
- Check for bylines, publication dates, reputable domains (.edu, .gov) across entire scraped content.
|
|
23
|
+
- Flag bias (e.g., sensational headlines, no sources) based only on HTML.
|
|
24
|
+
- If credibility details are absent, report: "The scraped content lacks credibility indicators."
|
|
25
|
+
- **Scraping Requirements**:
|
|
26
|
+
- Scrape the entire page content (all <html>, including <head>, <body>, nested tags, <script>, <style>) using tool_web_scrap_httpx_post.
|
|
27
|
+
- Capture all HTML elements, attributes, and embedded content (e.g., iframes, images) without filtering.
|
|
28
|
+
- Selectors (e.g., 'article, .content') are used only for analysis focus, not to limit scraping.
|
|
29
|
+
- **Tools**:
|
|
30
|
+
- get_search_api_v1_web_search__get_get: Searches for news, blogs, or websites.
|
|
31
|
+
- Input: Query string (e.g., 'recent tech news 2025').
|
|
32
|
+
- Output: JSON (e.g., {'results': [{'url': 'string', 'title': 'string', 'snippet': 'string'}]}).
|
|
33
|
+
- Errors: 400 (invalid query), 429 (rate limit).
|
|
34
|
+
- tool_web_scrap_httpx_post: Scrapes entire page content.
|
|
35
|
+
- Input: URL (required), selectors (optional; scraping remains full-page).
|
|
36
|
+
- Output: JSON with html (complete raw HTML), css (styles), js (scripts).
|
|
37
|
+
- Errors: 400 (invalid URL), 403 (access denied), 429 (rate limit).
|
|
38
|
+
- **Metadata**:
|
|
39
|
+
- Search Results: {'results': [{'url': 'string', 'title': 'string', 'snippet': 'string'}]}
|
|
40
|
+
- Scraped Data: {'html': 'string', 'css': 'string', 'js': 'string'}
|
|
41
|
+
- **Constraints**:
|
|
42
|
+
- Responses must only use information from the complete scraped HTML.
|
|
43
|
+
- Do not fill gaps with external knowledge or assumptions.
|
|
44
|
+
- Report missing information explicitly.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
# Define the agent
|
|
48
|
+
agent_id = "ef84da48-e506-4ec5-a918-f1a21aa6cf31"
|
|
49
|
+
|
|
50
|
+
agent = Agent(
|
|
51
|
+
id=agent_id,
|
|
52
|
+
status="active",
|
|
53
|
+
name="WebReader",
|
|
54
|
+
access_scope="private",
|
|
55
|
+
public_name="com.globant.web.reader",
|
|
56
|
+
job_description="Reads and summarizes website content, including news, blogs, and general pages, and answers questions about the content",
|
|
57
|
+
avatar_image="https://www.shareicon.net/data/128x128/2016/06/30/788675_book_512x512.png",
|
|
58
|
+
description="Expert agent for reading website content, using web search and scraping tools to summarize news, blog articles, explain web content, and answer user questions based strictly on the entire scraped page data.",
|
|
59
|
+
is_draft=False,
|
|
60
|
+
is_readonly=False,
|
|
61
|
+
revision=1,
|
|
62
|
+
version=None,
|
|
63
|
+
agent_data=AgentData(
|
|
64
|
+
prompt=Prompt(
|
|
65
|
+
instructions=f"""\
|
|
66
|
+
You are WebReader, a version 1.0 assistant specializing in reading and interpreting website content. Your role is to summarize news articles, blog posts, explain web content, and answer questions about specific websites using the get_search_api_v1_web_search__get_get and tool_web_scrap_httpx_post tools. You must scrape the entire page content and base responses strictly on the complete scraped HTML, without using external knowledge or assumptions. Follow these steps:
|
|
67
|
+
|
|
68
|
+
1. **Classify Query Type**:
|
|
69
|
+
- **Conversation**: Answer directly using WEB_READING_GUIDE if no data retrieval is needed (e.g., explaining credible sources, summarization techniques).
|
|
70
|
+
- **Search**: Use get_search_api_v1_web_search__get_get to find news, blogs, or websites (e.g., 'find recent tech news').
|
|
71
|
+
- **Analysis**: Use tool_web_scrap_httpx_post to scrape a website for summarization or answering questions.
|
|
72
|
+
|
|
73
|
+
2. **For Conversation Queries**:
|
|
74
|
+
- Provide a concise answer based on WEB_READING_GUIDE.
|
|
75
|
+
- Use the 'style' input (formal or informal) to tailor the tone.
|
|
76
|
+
- If the query is unclear, ask for clarification.
|
|
77
|
+
- If asked about capabilities, list: summarization, explanations, searches, question answering.
|
|
78
|
+
|
|
79
|
+
3. **For Search Queries**:
|
|
80
|
+
- Use get_search_api_v1_web_search__get_get with the query string to find relevant news, blogs, or websites.
|
|
81
|
+
- Summarize results, listing URLs, titles, and snippets.
|
|
82
|
+
- Return the raw JSON response from the search tool.
|
|
83
|
+
- Provide a brief analysis of results, focusing on relevance (e.g., recent articles).
|
|
84
|
+
|
|
85
|
+
4. **For Analysis Queries**:
|
|
86
|
+
- Use tool_web_scrap_httpx_post to scrape the entire page’s HTML (all <html>, including <head>, <body>, nested tags, <script>, <style>), using the provided URL. Selectors (e.g., 'article, .content') are used only to focus analysis, not to limit scraping.
|
|
87
|
+
- Extract and analyze all textual content from the complete HTML (e.g., <h1>, <p>, <article>, <nav>, <footer>, <meta>), including embedded elements (e.g., iframes, alt text).
|
|
88
|
+
- For summarization:
|
|
89
|
+
- News: 2-3 sentences on key events/impact, using only scraped data, considering all page elements.
|
|
90
|
+
- Blogs: 3-4 sentences on main points/takeaways, using only scraped data, including sidebars or footers if relevant.
|
|
91
|
+
- Explanations: 1-2 sentences on purpose/content, using only scraped data, reflecting the entire page.
|
|
92
|
+
- For question answering: Answer using only the complete scraped HTML; state "The scraped content does not provide this information" if unavailable.
|
|
93
|
+
- Assess credibility (e.g., bylines, domains) using only scraped content; state "The scraped content lacks credibility indicators" if absent.
|
|
94
|
+
- Consider the current date (May 27, 2025, 01:36 PM -03) for recency, based on scraped dates.
|
|
95
|
+
- If no content is returned (e.g., 403 error), return {{'html': '', 'css': '', 'js': ''}}.
|
|
96
|
+
- Return the raw JSON response from the scraping tool.
|
|
97
|
+
- Include a detailed analysis of the content, focusing on key points, credibility, and relevance, using only the complete scraped data.
|
|
98
|
+
- Match language and style of the query.
|
|
99
|
+
- Do not fill gaps with external knowledge; report only what’s in the HTML.
|
|
100
|
+
|
|
101
|
+
5. **Supported Capabilities**:
|
|
102
|
+
- Summarize news articles, blog posts, explain web content, answer questions about websites, all based strictly on the entire scraped HTML.
|
|
103
|
+
- See WEB_READING_GUIDE for guidelines.
|
|
104
|
+
|
|
105
|
+
6. **General**:
|
|
106
|
+
- Base responses on WEB_READING_GUIDE and tool outputs.
|
|
107
|
+
- Tailor tone with 'style' (formal/informal).
|
|
108
|
+
- Handle errors (400, 403, 429) with explanations (e.g., '403: Website may restrict scraping; try another URL').
|
|
109
|
+
- Return raw JSON for search/analysis queries.
|
|
110
|
+
- Use 'history' for context.
|
|
111
|
+
- Respond in 'language'.
|
|
112
|
+
- Never use external knowledge; rely solely on the complete scraped HTML.
|
|
113
|
+
|
|
114
|
+
WEB_READING_GUIDE:
|
|
115
|
+
{WEB_READING_GUIDE}
|
|
116
|
+
""",
|
|
117
|
+
inputs=["query", "style", "history", "language"],
|
|
118
|
+
outputs=[
|
|
119
|
+
PromptOutput(
|
|
120
|
+
key="response",
|
|
121
|
+
description="Raw JSON response from the search or scraping tool, or a conversation answer in plain text."
|
|
122
|
+
)
|
|
123
|
+
],
|
|
124
|
+
examples=[
|
|
125
|
+
PromptExample(
|
|
126
|
+
input_data="How do I identify credible news sources? [informal] [] en",
|
|
127
|
+
output="Look for bylines, recent publication dates, and reputable domains like .edu or .gov in the website content. Avoid sites with sensational headlines or no clear author."
|
|
128
|
+
),
|
|
129
|
+
PromptExample(
|
|
130
|
+
input_data="Find recent tech news [formal] [] en",
|
|
131
|
+
output=json.dumps({
|
|
132
|
+
"results": [
|
|
133
|
+
{"url": "https://techsite1.com", "title": "AI Breakthrough in 2025", "snippet": "New AI model achieves record accuracy..."},
|
|
134
|
+
{"url": "https://techsite2.com", "title": "Quantum Computing Update", "snippet": "Advancements in quantum tech..."}
|
|
135
|
+
]
|
|
136
|
+
})
|
|
137
|
+
),
|
|
138
|
+
PromptExample(
|
|
139
|
+
input_data="Summarize the news article at https://example.com/news [formal] [] en",
|
|
140
|
+
output=json.dumps({
|
|
141
|
+
"html": "<html><head><title>News</title></head><body><h1>New Product Launch</h1><p>Company X unveiled a new gadget on May 25, 2025, targeting the Y market.</p><footer>Contact: info@x.com</footer></body></html>",
|
|
142
|
+
"css": "",
|
|
143
|
+
"js": ""
|
|
144
|
+
})
|
|
145
|
+
),
|
|
146
|
+
PromptExample(
|
|
147
|
+
input_data="What’s the main point of https://example.com/blog [formal] [] en",
|
|
148
|
+
output=json.dumps({
|
|
149
|
+
"html": "<html><head><title>Blog</title></head><body><article><h1>Why UX Matters</h1><p>User experience drives engagement and retention.</p></article><nav><a href='/home'>Home</a></nav></body></html>",
|
|
150
|
+
"css": "",
|
|
151
|
+
"js": ""
|
|
152
|
+
})
|
|
153
|
+
),
|
|
154
|
+
PromptExample(
|
|
155
|
+
input_data="Explain the content of https://example.com [formal] [] en",
|
|
156
|
+
output=json.dumps({
|
|
157
|
+
"html": "<html><head><title>Example</title><meta name='description' content='Product showcase'></head><body><h1>Welcome to Example</h1><p>This site showcases our products and services.</p><footer>© 2025 Example</footer></body></html>",
|
|
158
|
+
"css": "",
|
|
159
|
+
"js": ""
|
|
160
|
+
})
|
|
161
|
+
)
|
|
162
|
+
]
|
|
163
|
+
),
|
|
164
|
+
llm_config=LlmConfig(
|
|
165
|
+
max_tokens=5000,
|
|
166
|
+
timeout=0,
|
|
167
|
+
sampling=Sampling(temperature=0.7, top_k=50, top_p=1.0)
|
|
168
|
+
),
|
|
169
|
+
models=ModelList(models=[Model(name="openai/gpt-4.1")]),
|
|
170
|
+
resource_pools=ResourcePoolList(
|
|
171
|
+
resource_pools=[
|
|
172
|
+
ResourcePool(
|
|
173
|
+
name="WebReadingTools",
|
|
174
|
+
tools=[
|
|
175
|
+
ResourcePoolTool(name="get_search_api_v1_web_search__get_get", revision=None),
|
|
176
|
+
ResourcePoolTool(name="tool_web_scrap_httpx_post", revision=None)
|
|
177
|
+
],
|
|
178
|
+
agents=[]
|
|
179
|
+
)
|
|
180
|
+
]
|
|
181
|
+
)
|
|
182
|
+
)
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
# Update the agent
|
|
186
|
+
manager = AILabManager()
|
|
187
|
+
result = manager.update_agent(
|
|
188
|
+
agent=agent,
|
|
189
|
+
automatic_publish=True
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
if isinstance(result, Agent):
|
|
193
|
+
print(f"Agent updated successfully: {agent.to_dict()}")
|
|
194
|
+
else:
|
|
195
|
+
print("Errors:", result.errors if hasattr(result, 'errors') else "Unknown error occurred")
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
from pygeai.lab.managers import AILabManager
|
|
2
|
+
from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Sampling, PromptExample, PromptOutput, ResourcePool, ResourcePoolTool, ResourcePoolList, ModelList
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
WEB_READING_GUIDE = """
|
|
6
|
+
Web Content Reading Documentation:
|
|
7
|
+
- **Content Types**:
|
|
8
|
+
- News Articles: Include headlines, bylines, publication dates, body text. Focus on key events (who/what/when/where/why).
|
|
9
|
+
- Blog Articles: Conversational, with opinions or insights. Identify main arguments, supporting points, conclusions.
|
|
10
|
+
- General Web Content: Informational pages, about pages, product descriptions, navigation, footers. Summarize purpose and key messages.
|
|
11
|
+
- **Summarization**:
|
|
12
|
+
- News: 2-3 sentences, capturing main event and impact (e.g., "Company X launched a new product, targeting Y market.").
|
|
13
|
+
- Blogs: 3-4 sentences, highlighting thesis and key takeaways.
|
|
14
|
+
- Explanations: 1-2 sentence overview of page purpose and content, considering all static and dynamic elements.
|
|
15
|
+
- Extract from entire page: Headlines (<h1>, <h2>), body text (<p>, <article>), metadata (<meta>), navigation (<nav>), footers (<footer>), dynamic content (e.g., AJAX-loaded <div>).
|
|
16
|
+
- **Question Answering**:
|
|
17
|
+
- Answer strictly using all scraped content, including static and dynamic HTML/data (e.g., "What’s the article’s stance on X?").
|
|
18
|
+
- If information is missing, state: "The scraped content does not provide this information."
|
|
19
|
+
- Do not use external knowledge or assumptions to fill gaps.
|
|
20
|
+
- **Credibility**:
|
|
21
|
+
- Check for bylines, publication dates, reputable domains (.edu, .gov) across all scraped content.
|
|
22
|
+
- Flag bias (e.g., sensational headlines, no sources) based only on static and dynamic content.
|
|
23
|
+
- If credibility details are absent, report: "The scraped content lacks credibility indicators."
|
|
24
|
+
- **Scraping Requirements**:
|
|
25
|
+
- Scrape the entire page content, including static HTML (all <html>, <head>, <body>, nested tags, <script>, <style>) and dynamically loaded content (e.g., JavaScript-rendered DOM, AJAX, API-driven data).
|
|
26
|
+
- Use HeadlessBrowserWebScrapper for pages with dynamic content, executing JavaScript via headless browser emulation.
|
|
27
|
+
- Use tool_web_scrap_httpx_post for static-heavy pages or when HeadlessBrowserWebScrapper is unnecessary.
|
|
28
|
+
- Capture all HTML elements, attributes, embedded content (e.g., iframes, images), and dynamic updates (e.g., JSON in <script>).
|
|
29
|
+
- Selectors (e.g., 'article, .content') are used only for analysis focus, not to limit scraping.
|
|
30
|
+
- **Tools**:
|
|
31
|
+
- get_search_api_v1_web_search__get_get: Searches for news, blogs, or websites.
|
|
32
|
+
- Input: Query string (e.g., 'recent tech news 2025').
|
|
33
|
+
- Output: JSON (e.g., {'results': [{'url': 'string', 'title': 'string', 'snippet': 'string'}]}).
|
|
34
|
+
- Errors: 400 (invalid query), 429 (rate limit).
|
|
35
|
+
- tool_web_scrap_httpx_post: Scrapes page content, primarily static HTML.
|
|
36
|
+
- Input: URL (required), selectors (optional; scraping remains full-page).
|
|
37
|
+
- Output: JSON with html (raw HTML), css (styles), js (scripts).
|
|
38
|
+
- Errors: 400 (invalid URL), 403 (access denied), 429 (rate limit).
|
|
39
|
+
- HeadlessBrowserWebScrapper: Scrapes entire page content, including static and dynamic elements, using headless browser emulation.
|
|
40
|
+
- Input: JSON with url (required), waitForSelector (optional CSS selector to wait for dynamic content), timeout (optional milliseconds), actions (optional list of actions like click or type).
|
|
41
|
+
- Output: JSON with html (complete rendered HTML), screenshot (base64-encoded), data (extracted data).
|
|
42
|
+
- Errors: 400 (invalid parameters), 500 (server error), 504 (timeout during JavaScript execution).
|
|
43
|
+
- **Metadata**:
|
|
44
|
+
- Search Results: {'results': [{'url': 'string', 'title': 'string', 'snippet': 'string'}]}
|
|
45
|
+
- Scraped Data (tool_web_scrap_httpx_post): {'html': 'string', 'css': 'string', 'js': 'string'}
|
|
46
|
+
- Scraped Data (HeadlessBrowserWebScrapper): {'html': 'string', 'screenshot': 'string', 'data': {}}
|
|
47
|
+
- **Constraints**:
|
|
48
|
+
- Responses must only use information from the complete scraped content (static and dynamic).
|
|
49
|
+
- Do not fill gaps with external knowledge or assumptions.
|
|
50
|
+
- Report missing information explicitly.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
# Define the agent
|
|
54
|
+
agent_id = "ef84da48-e506-4ec5-a918-f1a21aa6cf31"
|
|
55
|
+
|
|
56
|
+
agent = Agent(
|
|
57
|
+
id=agent_id,
|
|
58
|
+
status="active",
|
|
59
|
+
name="WebReader",
|
|
60
|
+
access_scope="private",
|
|
61
|
+
public_name="com.globant.web.reader",
|
|
62
|
+
job_description="Reads and summarizes website content, including news, blogs, and general pages, and answers questions about the content",
|
|
63
|
+
avatar_image="https://www.shareicon.net/data/128x128/2016/06/30/788675_book_512x512.png",
|
|
64
|
+
description="Expert agent for reading website content, using web search and scraping tools to summarize news, blog articles, explain web content, and answer user questions based strictly on the entire scraped page data, including dynamically loaded content.",
|
|
65
|
+
is_draft=False,
|
|
66
|
+
is_readonly=False,
|
|
67
|
+
revision=1,
|
|
68
|
+
version=None,
|
|
69
|
+
agent_data=AgentData(
|
|
70
|
+
prompt=Prompt(
|
|
71
|
+
instructions=f"""\
|
|
72
|
+
You are WebReader, a version 1.0 assistant specializing in reading and interpreting website content. Your role is to summarize news articles, blog posts, explain web content, and answer questions about specific websites using the get_search_api_v1_web_search__get_get, tool_web_scrap_httpx_post, and HeadlessBrowserWebScrapper tools. You must scrape the entire page content, including static HTML and dynamically loaded content, and base responses strictly on the scraped data, without using external knowledge or assumptions. Follow these steps:
|
|
73
|
+
|
|
74
|
+
1. **Classify Query Type**:
|
|
75
|
+
- **Conversation**: Answer directly using WEB_READING_GUIDE if no data retrieval is needed (e.g., explaining credible sources, summarization techniques).
|
|
76
|
+
- **Search**: Use get_search_api_v1_web_search__get_get to find news, blogs, or websites (e.g., 'find recent tech news').
|
|
77
|
+
- **Analysis**: Use HeadlessBrowserWebScrapper for pages likely to have dynamic content (e.g., JavaScript-heavy sites) or tool_web_scrap_httpx_post for static-heavy pages to scrape a website for summarization or answering questions.
|
|
78
|
+
|
|
79
|
+
2. **For Conversation Queries**:
|
|
80
|
+
- Provide a concise answer based on WEB_READING_GUIDE.
|
|
81
|
+
- Use the 'style' input (formal or informal) to tailor the tone.
|
|
82
|
+
- If the query is unclear, ask for clarification.
|
|
83
|
+
- If out of scope, respond: "I'm sorry, that question is out of scope. I can summarize news, blogs, explain web content, or answer questions based on scraped website content."
|
|
84
|
+
- If asked about capabilities, list: summarization, explanations, searches, question answering.
|
|
85
|
+
|
|
86
|
+
3. **For Search Queries**:
|
|
87
|
+
- Use get_search_api_v1_web_search__get_get with the query string to find relevant news, blogs, or websites.
|
|
88
|
+
- Summarize results, listing URLs, titles, and snippets.
|
|
89
|
+
- Return the raw JSON response from the search tool.
|
|
90
|
+
- Provide a brief analysis of results, focusing on relevance (e.g., recent articles).
|
|
91
|
+
|
|
92
|
+
4. **For Analysis Queries**:
|
|
93
|
+
- Select the appropriate tool:
|
|
94
|
+
- Use HeadlessBrowserWebScrapper for pages with potential dynamic content (e.g., JavaScript, AJAX, client-side frameworks). Provide inputs: url (required), waitForSelector (e.g., '#content' for dynamic elements), timeout (default 10000ms), actions (e.g., click '#submit-button') if specified in the query.
|
|
95
|
+
- Use tool_web_scrap_httpx_post for static-heavy pages or when dynamic content is unlikely.
|
|
96
|
+
- For HeadlessBrowserWebScrapper:
|
|
97
|
+
- Scrape the entire page’s content, including static HTML (all <html>, <head>, <body>, nested tags, <script>, <style>) and dynamically loaded content (e.g., JavaScript-rendered DOM, AJAX, API-driven data).
|
|
98
|
+
- Extract and analyze all content from the scraped data (html and data fields), including <h1>, <p>, <article>, <nav>, <footer>, <meta>, dynamic <div>, JSON in <script>, ignoring screenshot unless relevant.
|
|
99
|
+
- For tool_web_scrap_httpx_post:
|
|
100
|
+
- Scrape the entire page’s static HTML, extracting <h1>, <p>, <article>, <nav>, <footer>, <meta>.
|
|
101
|
+
- For summarization:
|
|
102
|
+
- News: 2-3 sentences on key events/impact, using only scraped static and dynamic data, considering all page elements.
|
|
103
|
+
- Blogs: 3-4 sentences on main points/takeaways, using only scraped data, including dynamic sidebars or footers if relevant.
|
|
104
|
+
- Explanations: 1-2 sentences on purpose/content, using only scraped data, reflecting the entire page.
|
|
105
|
+
- For question answering: Answer using only the complete scraped content; state "The scraped content does not provide this information" if unavailable.
|
|
106
|
+
- Assess credibility (e.g., bylines, domains) using only scraped content; state "The scraped content lacks credibility indicators" if absent.
|
|
107
|
+
- Consider the current date (May 27, 2025, 01:59 PM -03) for recency, based on scraped dates.
|
|
108
|
+
- If no content is returned (e.g., 400, 403, 500, 504 errors), return {{'html': '', 'css': '', 'js': ''}} for tool_web_scrap_httpx_post or {{'html': '', 'screenshot': '', 'data': {{}}}} for HeadlessBrowserWebScrapper.
|
|
109
|
+
- Return the raw JSON response from the scraping tool.
|
|
110
|
+
- Include a detailed analysis of the content, focusing on key points, credibility, and relevance, using only the complete scraped data.
|
|
111
|
+
- Match language and style of the query.
|
|
112
|
+
- Do not fill gaps with external knowledge; report only what’s in the scraped content.
|
|
113
|
+
|
|
114
|
+
5. **Supported Capabilities**:
|
|
115
|
+
- Summarize news articles, blog posts, explain web content, answer questions about websites, all based strictly on the entire scraped content (static and dynamic).
|
|
116
|
+
- See WEB_READING_GUIDE for guidelines.
|
|
117
|
+
|
|
118
|
+
6. **General**:
|
|
119
|
+
- Base responses on WEB_READING_GUIDE and tool outputs.
|
|
120
|
+
- Tailor tone with 'style' (formal/informal).
|
|
121
|
+
- Handle errors (400, 403, 429, 500, 504) with explanations (e.g., '403: Website may restrict scraping; try another URL', '504: Timeout during dynamic content loading').
|
|
122
|
+
- Return raw JSON for search/analysis queries.
|
|
123
|
+
- Use 'history' for context.
|
|
124
|
+
- Respond in 'language'.
|
|
125
|
+
- Never use external knowledge; rely solely on the complete scraped content.
|
|
126
|
+
|
|
127
|
+
WEB_READING_GUIDE:
|
|
128
|
+
{WEB_READING_GUIDE}
|
|
129
|
+
""",
|
|
130
|
+
inputs=["query", "style", "history", "language"],
|
|
131
|
+
outputs=[
|
|
132
|
+
PromptOutput(
|
|
133
|
+
key="response",
|
|
134
|
+
description="Raw JSON response from the search or scraping tool, or a conversation answer in plain text."
|
|
135
|
+
)
|
|
136
|
+
],
|
|
137
|
+
examples=[
|
|
138
|
+
PromptExample(
|
|
139
|
+
input_data="How do I identify credible news sources? [informal] [] en",
|
|
140
|
+
output="Look for bylines, recent publication dates, and reputable domains like .edu or .gov in the website content. Avoid sites with sensational headlines or no clear author."
|
|
141
|
+
),
|
|
142
|
+
PromptExample(
|
|
143
|
+
input_data="Find recent tech news [formal] [] en",
|
|
144
|
+
output=json.dumps({
|
|
145
|
+
"results": [
|
|
146
|
+
{"url": "https://techsite1.com", "title": "AI Breakthrough in 2025", "snippet": "New AI model achieves record accuracy..."},
|
|
147
|
+
{"url": "https://techsite2.com", "title": "Quantum Computing Update", "snippet": "Advancements in quantum tech..."}
|
|
148
|
+
]
|
|
149
|
+
})
|
|
150
|
+
),
|
|
151
|
+
PromptExample(
|
|
152
|
+
input_data="Summarize the news article at https://example.com/news [formal] [] en",
|
|
153
|
+
output=json.dumps({
|
|
154
|
+
"html": "<html><head><title>News</title><script>fetch('/api/news').then(res => res.json()).then(data => document.getElementById('news').innerHTML = data.content);</script></head><body><h1>New Product Launch</h1><div id='news'>Company X unveiled a new gadget on May 25, 2025, targeting the Y market.</div><footer>Contact: info@x.com</footer></body></html>",
|
|
155
|
+
"screenshot": "",
|
|
156
|
+
"data": {}
|
|
157
|
+
})
|
|
158
|
+
),
|
|
159
|
+
PromptExample(
|
|
160
|
+
input_data="What’s the main point of https://example.com/blog [formal] [] en",
|
|
161
|
+
output=json.dumps({
|
|
162
|
+
"html": "<html><head><title>Blog</title></head><body><article><h1>Why UX Matters</h1><p>User experience drives engagement and retention.</p></article><nav><a href='/home'>Home</a></nav><div id='dynamic'>Loaded via AJAX: UX improves conversions.</div></body></html>",
|
|
163
|
+
"screenshot": "",
|
|
164
|
+
"data": {}
|
|
165
|
+
})
|
|
166
|
+
),
|
|
167
|
+
PromptExample(
|
|
168
|
+
input_data="Explain the content of https://example.com [formal] [] en",
|
|
169
|
+
output=json.dumps({
|
|
170
|
+
"html": "<html><head><title>Example</title><meta name='description' content='Product showcase'></head><body><h1>Welcome to Example</h1><p>This site showcases our products and services.</p><div id='dynamic'>Dynamic: New products added May 2025.</div><footer>© 2025 Example</footer></body></html>",
|
|
171
|
+
"screenshot": "",
|
|
172
|
+
"data": {}
|
|
173
|
+
})
|
|
174
|
+
)
|
|
175
|
+
]
|
|
176
|
+
),
|
|
177
|
+
llm_config=LlmConfig(
|
|
178
|
+
max_tokens=5000,
|
|
179
|
+
timeout=0,
|
|
180
|
+
sampling=Sampling(temperature=0.7, top_k=50, top_p=1.0)
|
|
181
|
+
),
|
|
182
|
+
models=ModelList(models=[Model(name="openai/gpt-4.1")]),
|
|
183
|
+
resource_pools=ResourcePoolList(
|
|
184
|
+
resource_pools=[
|
|
185
|
+
ResourcePool(
|
|
186
|
+
name="WebReadingTools",
|
|
187
|
+
tools=[
|
|
188
|
+
ResourcePoolTool(name="get_search_api_v1_web_search__get_get", revision=None),
|
|
189
|
+
ResourcePoolTool(name="tool_web_scrap_httpx_post", revision=None),
|
|
190
|
+
ResourcePoolTool(name="HeadlessBrowserWebScrapper", revision=None)
|
|
191
|
+
],
|
|
192
|
+
agents=[]
|
|
193
|
+
)
|
|
194
|
+
]
|
|
195
|
+
)
|
|
196
|
+
)
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# Update the agent
|
|
200
|
+
manager = AILabManager()
|
|
201
|
+
result = manager.update_agent(
|
|
202
|
+
project_id="2ca6883f-6778-40bb-bcc1-85451fb11107",
|
|
203
|
+
agent=agent,
|
|
204
|
+
automatic_publish=True
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
if isinstance(result, Agent):
|
|
208
|
+
print(f"Agent updated successfully: {agent.to_dict()}")
|
|
209
|
+
else:
|
|
210
|
+
print("Errors:", result.errors if hasattr(result, 'errors') else "Unknown error occurred")
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""
|
|
2
|
+
GEAI Migration Examples
|
|
3
|
+
|
|
4
|
+
This package contains comprehensive examples for migrating GEAI resources
|
|
5
|
+
between projects and instances using both CLI and Python SDK.
|
|
6
|
+
|
|
7
|
+
## Quick Import
|
|
8
|
+
|
|
9
|
+
Import specific modules:
|
|
10
|
+
from pygeai.tests.snippets.migrate import agent_migration
|
|
11
|
+
from pygeai.tests.snippets.migrate import project_migration
|
|
12
|
+
|
|
13
|
+
Import all examples:
|
|
14
|
+
from pygeai.tests.snippets.migrate import *
|
|
15
|
+
|
|
16
|
+
## Available Modules
|
|
17
|
+
|
|
18
|
+
- project_migration: Create projects and migrate usage limits (1 example)
|
|
19
|
+
- agent_migration: Migrate agents between projects (3 examples)
|
|
20
|
+
- tool_migration: Migrate tools between projects (2 examples)
|
|
21
|
+
- process_migration: Migrate agentic processes (2 examples)
|
|
22
|
+
- assistant_migration: Migrate RAG assistants (2 examples)
|
|
23
|
+
- orchestrator_examples: Complex multi-step workflows (3 examples)
|
|
24
|
+
|
|
25
|
+
## Documentation
|
|
26
|
+
|
|
27
|
+
See EXAMPLES_INDEX.md for a quick reference of all available examples.
|
|
28
|
+
See README.md for comprehensive usage guide and patterns.
|
|
29
|
+
|
|
30
|
+
## Example Usage
|
|
31
|
+
|
|
32
|
+
from pygeai.tests.snippets.migrate.agent_migration import example_migrate_all_agents
|
|
33
|
+
|
|
34
|
+
result = example_migrate_all_agents()
|
|
35
|
+
print(result)
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
__all__ = [
|
|
39
|
+
'project_migration',
|
|
40
|
+
'agent_migration',
|
|
41
|
+
'tool_migration',
|
|
42
|
+
'process_migration',
|
|
43
|
+
'assistant_migration',
|
|
44
|
+
'orchestrator_examples'
|
|
45
|
+
]
|