pygeai 0.1.51b3__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 +9 -1
- 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 +18 -45
- pygeai/assistant/data/clients.py +1 -0
- pygeai/assistant/data_analyst/clients.py +8 -12
- pygeai/assistant/managers.py +195 -157
- pygeai/assistant/mappers.py +4 -2
- pygeai/assistant/rag/clients.py +27 -67
- pygeai/assistant/rag/mappers.py +12 -6
- pygeai/assistant/rag/models.py +301 -159
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +308 -37
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +2 -8
- pygeai/chat/managers.py +9 -6
- 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 +7 -10
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +9 -9
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +71 -9
- pygeai/cli/commands/chat.py +676 -19
- pygeai/cli/commands/common.py +28 -24
- pygeai/cli/commands/configuration.py +66 -13
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +58 -11
- pygeai/cli/commands/evaluation.py +38 -38
- pygeai/cli/commands/feedback.py +3 -4
- pygeai/cli/commands/files.py +7 -8
- pygeai/cli/commands/gam.py +85 -10
- pygeai/cli/commands/lab/ai_lab.py +340 -484
- 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 +6 -7
- pygeai/cli/commands/migrate.py +1064 -436
- pygeai/cli/commands/organization.py +516 -11
- pygeai/cli/commands/rag.py +13 -14
- pygeai/cli/commands/rerank.py +3 -5
- pygeai/cli/commands/secrets.py +8 -9
- pygeai/cli/commands/usage_limits.py +18 -20
- pygeai/cli/commands/validators.py +144 -1
- pygeai/cli/commands/version.py +4 -5
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +170 -31
- pygeai/cli/geai_proxy.py +86 -25
- pygeai/cli/install_man.py +93 -22
- pygeai/cli/parsers.py +75 -25
- pygeai/cli/texts/help.py +265 -28
- pygeai/core/base/clients.py +53 -12
- pygeai/core/base/mappers.py +11 -2
- pygeai/core/base/session.py +95 -11
- pygeai/core/common/config.py +78 -14
- pygeai/core/common/exceptions.py +96 -6
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +23 -5
- pygeai/core/embeddings/managers.py +9 -4
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +8 -3
- pygeai/core/files/clients.py +23 -24
- pygeai/core/files/managers.py +121 -30
- pygeai/core/files/responses.py +4 -3
- pygeai/core/handlers.py +10 -1
- pygeai/core/llm/clients.py +22 -29
- pygeai/core/models.py +127 -11
- pygeai/core/plugins/clients.py +6 -6
- pygeai/core/rerank/clients.py +9 -3
- pygeai/core/rerank/managers.py +22 -5
- pygeai/core/secrets/clients.py +16 -37
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +159 -49
- 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 +854 -14
- pygeai/evaluation/clients.py +7 -4
- pygeai/evaluation/dataset/clients.py +46 -44
- pygeai/evaluation/plan/clients.py +28 -26
- pygeai/evaluation/result/clients.py +38 -5
- pygeai/gam/clients.py +50 -28
- pygeai/gam/endpoints.py +2 -1
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -90
- pygeai/lab/agents/clients.py +203 -162
- pygeai/lab/agents/endpoints.py +4 -0
- pygeai/lab/agents/mappers.py +57 -7
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +571 -541
- pygeai/lab/models.py +108 -19
- pygeai/lab/processes/clients.py +332 -340
- pygeai/lab/processes/mappers.py +3 -3
- 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/clients.py +67 -63
- pygeai/lab/strategies/mappers.py +1 -1
- pygeai/lab/tools/clients.py +85 -118
- pygeai/lab/tools/endpoints.py +4 -0
- pygeai/lab/tools/mappers.py +5 -5
- pygeai/man/man1/geai-proxy.1 +116 -0
- pygeai/man/man1/geai.1 +2580 -66
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +468 -146
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +245 -50
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/clients.py +34 -32
- pygeai/organization/limits/managers.py +108 -49
- pygeai/organization/managers.py +347 -53
- pygeai/organization/mappers.py +102 -2
- pygeai/organization/responses.py +58 -1
- pygeai/proxy/clients.py +6 -3
- pygeai/proxy/config.py +14 -1
- pygeai/proxy/managers.py +61 -33
- pygeai/proxy/servers.py +196 -51
- pygeai/proxy/tool.py +33 -16
- 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/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -82
- pygeai/tests/assistants/test_managers.py +191 -57
- 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/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 +5 -5
- pygeai/tests/core/base/data/models.py +7 -0
- pygeai/tests/core/base/test_mappers.py +43 -11
- pygeai/tests/core/base/test_models.py +3 -1
- 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/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +124 -78
- 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/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +61 -39
- 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/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_models.py +500 -3
- 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/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +298 -56
- pygeai/tests/organization/test_clients.py +600 -30
- 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/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/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -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/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/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -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/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/delete_file.py +1 -4
- pygeai/tests/snippets/files/get_file_content.py +2 -4
- pygeai/tests/snippets/files/get_file_data.py +1 -4
- pygeai/tests/snippets/files/get_file_list.py +1 -6
- pygeai/tests/snippets/files/upload_file.py +1 -5
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +25 -23
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +23 -23
- pygeai/tests/snippets/lab/agents/create_agent.py +5 -8
- pygeai/tests/snippets/lab/agents/create_agent_2.py +1 -5
- 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 +1 -5
- pygeai/tests/snippets/lab/agents/get_agent.py +2 -11
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +2 -7
- pygeai/tests/snippets/lab/agents/list_agents.py +4 -7
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +2 -6
- pygeai/tests/snippets/lab/agents/update_agent.py +1 -5
- 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/create_process.py +3 -5
- pygeai/tests/snippets/lab/processes/create_task.py +3 -5
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +10 -19
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +2 -5
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +10 -16
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +13 -20
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +5 -7
- pygeai/tests/snippets/lab/processes/list_processes.py +5 -7
- pygeai/tests/snippets/lab/runner_1.py +1 -1
- pygeai/tests/snippets/lab/samples/summarize_files.py +3 -3
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +3 -6
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/tools/create_tool.py +4 -10
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +2 -6
- pygeai/tests/snippets/lab/tools/get_parameter.py +5 -7
- pygeai/tests/snippets/lab/tools/get_tool.py +5 -7
- pygeai/tests/snippets/lab/tools/list_tools.py +3 -7
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +3 -5
- pygeai/tests/snippets/lab/tools/set_parameters.py +4 -9
- pygeai/tests/snippets/lab/tools/update_tool.py +4 -8
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -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/{file_summarizer_example.py → use_cases/file_summarizer_example.py} +3 -3
- pygeai/tests/snippets/lab/{file_summarizer_example_2.py → use_cases/file_summarizer_example_2.py} +12 -12
- 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/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +2 -2
- 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_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/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.51b3.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/entry_points.txt +2 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/licenses/LICENSE +13 -1
- pygeai-0.6.0b15.dist-info/top_level.txt +1 -0
- docs/geai-proxy/README.md +0 -145
- docs/source/conf.py +0 -45
- pygeai/tests/core/test_managers.py +0 -233
- pygeai-0.1.51b3.dist-info/METADATA +0 -130
- pygeai-0.1.51b3.dist-info/RECORD +0 -324
- pygeai-0.1.51b3.dist-info/top_level.txt +0 -3
- scripts/bump_beta_version.py +0 -56
- {scripts → pygeai/analytics}/__init__.py +0 -0
- /pygeai/tests/snippets/lab/{c_code_fixer_agent_flow.py → use_cases/c_code_fixer_agent_flow.py} +0 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
Runner
|
|
2
|
+
======
|
|
3
|
+
|
|
4
|
+
The `Runner` class in the PyGEAI SDK's `lab` module provides a straightforward, asynchronous interface for executing AI agent tasks within the Globant Enterprise AI Lab's runtime environment. It enables developers to run agents with flexible input formats and customizable language model (LLM) settings, facilitating both testing and production use cases. The `Runner` class abstracts the complexity of chat completion requests, handling message processing and LLM configuration to deliver a `ProviderResponse` object containing the agent’s response and metadata.
|
|
5
|
+
|
|
6
|
+
Overview
|
|
7
|
+
--------
|
|
8
|
+
|
|
9
|
+
The `Runner` class is designed to execute agent tasks by invoking the Lab’s chat completion API. It supports multiple input types—strings, `ChatMessage`, or `ChatMessageList`—allowing developers to interact with agents in various contexts, from simple text inputs to structured conversation histories. The class also accepts optional LLM settings to fine-tune the agent's behavior, such as temperature, token limits, and penalties, ensuring precise control over task execution.
|
|
10
|
+
|
|
11
|
+
The `Runner` is particularly useful for:
|
|
12
|
+
|
|
13
|
+
- **Testing Agents**: Validate agent behavior during development by running tasks with different inputs and configurations.
|
|
14
|
+
- **Production Execution**: Integrate agent execution into applications, leveraging the Lab’s runtime for scalable task processing.
|
|
15
|
+
- **Flexible Input Handling**: Support diverse use cases by accepting raw text, single messages, or multi-message conversation contexts.
|
|
16
|
+
|
|
17
|
+
Key Features
|
|
18
|
+
------------
|
|
19
|
+
|
|
20
|
+
- **Asynchronous Execution**: Uses `asyncio` for non-blocking task execution, suitable for high-performance applications.
|
|
21
|
+
- **Flexible Input Types**:
|
|
22
|
+
- **String**: Simple text input, automatically converted to a user message.
|
|
23
|
+
- **ChatMessage**: A single message with a specified role (e.g., "user") and content.
|
|
24
|
+
- **ChatMessageList**: A list of messages, enabling conversation history or system prompts.
|
|
25
|
+
- **Customizable LLM Settings**: Accepts `LlmSettings` or dictionary-based configurations to adjust parameters like temperature, max tokens, and penalties.
|
|
26
|
+
- **Error Handling**: Raises `WrongArgumentError` for invalid input types, ensuring robust validation.
|
|
27
|
+
- **Integration with AILabManager**: Works seamlessly with agents created and managed via the `AILabManager` class.
|
|
28
|
+
|
|
29
|
+
Usage
|
|
30
|
+
-----
|
|
31
|
+
|
|
32
|
+
The `Runner` class is invoked via its asynchronous `run` method, which takes an `Agent` instance, user input, and optional LLM settings. The method returns a `ProviderResponse` object containing the agent’s response, usage details, and metadata. Below are examples demonstrating its usage with different input types, based on a scenario where an agent translates text into ancient French.
|
|
33
|
+
|
|
34
|
+
### Example: Creating and Running an Agent
|
|
35
|
+
|
|
36
|
+
First, an agent is created using the `AILabManager` to translate modern text into ancient French. The agent is then executed using the `Runner` class with various input formats.
|
|
37
|
+
|
|
38
|
+
.. code-block:: python
|
|
39
|
+
|
|
40
|
+
import asyncio
|
|
41
|
+
from pygeai.lab.runners import Runner
|
|
42
|
+
from pygeai.lab.managers import AILabManager
|
|
43
|
+
from pygeai.lab.models import Agent, AgentData, Prompt, PromptExample, PromptOutput, LlmConfig, Sampling, Model, ModelList
|
|
44
|
+
from pygeai.core.models import ChatMessageList, ChatMessage, LlmSettings
|
|
45
|
+
|
|
46
|
+
manager = AILabManager()
|
|
47
|
+
project_id = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
|
|
48
|
+
|
|
49
|
+
# Track created entities for rollback
|
|
50
|
+
created_entities = {"agent_id": None}
|
|
51
|
+
|
|
52
|
+
def rollback():
|
|
53
|
+
"""Deletes created entities to clean up."""
|
|
54
|
+
print("\n=== Initiating Rollback ===")
|
|
55
|
+
if created_entities["agent_id"]:
|
|
56
|
+
print(f"Deleting agent {created_entities['agent_id']}...")
|
|
57
|
+
result = manager.delete_agent(project_id=project_id, agent_id=created_entities["agent_id"])
|
|
58
|
+
print(f"Rollback: {result}")
|
|
59
|
+
print("Rollback complete.")
|
|
60
|
+
|
|
61
|
+
def create_translation_agent():
|
|
62
|
+
"""Creates and publishes an agent for translating text into ancient French."""
|
|
63
|
+
print("\n=== Agent Creation Flow ===")
|
|
64
|
+
print("Creating agent 'AncientFrenchTranslator' as draft...")
|
|
65
|
+
agent = Agent(
|
|
66
|
+
name="AncientFrenchTranslatorTest",
|
|
67
|
+
access_scope="private",
|
|
68
|
+
public_name="ancient_french_translator_test",
|
|
69
|
+
job_description="Translates modern text into ancient French",
|
|
70
|
+
avatar_image="https://example.com/ancient_french_avatar.png",
|
|
71
|
+
description="An agent for translating text into ancient French",
|
|
72
|
+
agent_data=AgentData(
|
|
73
|
+
prompt=Prompt(
|
|
74
|
+
instructions="Translate the provided text into ancient French, using vocabulary and grammar consistent with medieval French (circa 12th-14th century). Ensure the tone is formal and historically appropriate.",
|
|
75
|
+
inputs=["text"],
|
|
76
|
+
outputs=[
|
|
77
|
+
PromptOutput(key="translated_text", description="Text translated into ancient French")
|
|
78
|
+
],
|
|
79
|
+
examples=[
|
|
80
|
+
PromptExample(
|
|
81
|
+
input_data="Text: Hello, how are you today?",
|
|
82
|
+
output='{"translated_text": "Salvete, comment estes-vous or?"}'
|
|
83
|
+
),
|
|
84
|
+
PromptExample(
|
|
85
|
+
input_data="Text: I am going to the market.",
|
|
86
|
+
output='{"translated_text": "Je vais au marchié."}'
|
|
87
|
+
)
|
|
88
|
+
]
|
|
89
|
+
),
|
|
90
|
+
llm_config=LlmConfig(
|
|
91
|
+
max_tokens=1000,
|
|
92
|
+
timeout=60,
|
|
93
|
+
sampling=Sampling(temperature=0.6, top_k=50, top_p=0.95)
|
|
94
|
+
),
|
|
95
|
+
models=ModelList(models=[
|
|
96
|
+
Model(name="gpt-4-turbo"),
|
|
97
|
+
Model(name="mistral-7b")
|
|
98
|
+
]),
|
|
99
|
+
resource_pools=None
|
|
100
|
+
),
|
|
101
|
+
is_draft=True,
|
|
102
|
+
revision=1,
|
|
103
|
+
status="pending"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Create, update, and publish the agent
|
|
107
|
+
create_agent_result = manager.create_agent(project_id=project_id, agent=agent, automatic_publish=False)
|
|
108
|
+
if isinstance(create_agent_result, Agent):
|
|
109
|
+
created_entities["agent_id"] = create_agent_result.id
|
|
110
|
+
agent = create_agent_result
|
|
111
|
+
agent.description = "Specialized agent for accurate ancient French translations"
|
|
112
|
+
manager.update_agent(project_id=project_id, agent=agent, automatic_publish=False)
|
|
113
|
+
manager.publish_agent_revision(project_id=project_id, agent_id=created_entities["agent_id"], revision="1")
|
|
114
|
+
return manager.get_agent(project_id=project_id, agent_id=created_entities["agent_id"])
|
|
115
|
+
else:
|
|
116
|
+
rollback()
|
|
117
|
+
raise Exception("Agent creation failed")
|
|
118
|
+
|
|
119
|
+
async def test_translation_agent(agent):
|
|
120
|
+
"""Tests the ancient French translation agent with different input types."""
|
|
121
|
+
print("\n=== Testing Ancient French Translation Agent ===")
|
|
122
|
+
|
|
123
|
+
# Test 1: String Input
|
|
124
|
+
print("Test 1: Translating a string input...")
|
|
125
|
+
user_input = "Good morning, my friend!"
|
|
126
|
+
try:
|
|
127
|
+
response = await Runner.run(
|
|
128
|
+
agent=agent,
|
|
129
|
+
user_input=user_input,
|
|
130
|
+
llm_settings={
|
|
131
|
+
"temperature": 0.6,
|
|
132
|
+
"max_tokens": 200,
|
|
133
|
+
"frequency_penalty": 0.1,
|
|
134
|
+
"presence_penalty": 0.2
|
|
135
|
+
}
|
|
136
|
+
)
|
|
137
|
+
print(f"Input: {user_input}")
|
|
138
|
+
print(f"Response: {response}")
|
|
139
|
+
except Exception as e:
|
|
140
|
+
print(f"Error in Test 1: {e}")
|
|
141
|
+
|
|
142
|
+
# Test 2: ChatMessage Input
|
|
143
|
+
print("\nTest 2: Translating a ChatMessage input...")
|
|
144
|
+
chat_message = ChatMessage(
|
|
145
|
+
role="user",
|
|
146
|
+
content="I am traveling to a distant land."
|
|
147
|
+
)
|
|
148
|
+
try:
|
|
149
|
+
response = await Runner.run(
|
|
150
|
+
agent=agent,
|
|
151
|
+
user_input=chat_message,
|
|
152
|
+
llm_settings=LlmSettings(
|
|
153
|
+
temperature=0.7,
|
|
154
|
+
max_tokens=300,
|
|
155
|
+
frequency_penalty=0.0,
|
|
156
|
+
presence_penalty=0.0
|
|
157
|
+
)
|
|
158
|
+
)
|
|
159
|
+
print(f"Input: {chat_message.content}")
|
|
160
|
+
print(f"Response: {response}")
|
|
161
|
+
except Exception as e:
|
|
162
|
+
print(f"Error in Test 2: {e}")
|
|
163
|
+
|
|
164
|
+
# Test 3: ChatMessageList Input
|
|
165
|
+
print("\nTest 3: Translating a ChatMessageList input...")
|
|
166
|
+
chat_message_list = ChatMessageList(messages=[
|
|
167
|
+
ChatMessage(role="system", content="Translate the following into ancient French with a formal tone."),
|
|
168
|
+
ChatMessage(role="user", content="The sun rises slowly over the hills.")
|
|
169
|
+
])
|
|
170
|
+
try:
|
|
171
|
+
response = await Runner.run(
|
|
172
|
+
agent=agent,
|
|
173
|
+
user_input=chat_message_list
|
|
174
|
+
# Using default LLM settings
|
|
175
|
+
)
|
|
176
|
+
print(f"Input: System: {chat_message_list.messages[0].content}\nUser: {chat_message_list.messages[1].content}")
|
|
177
|
+
print(f"Response: {response}")
|
|
178
|
+
except Exception as e:
|
|
179
|
+
print(f"Error in Test 3: {e}")
|
|
180
|
+
|
|
181
|
+
async def main():
|
|
182
|
+
try:
|
|
183
|
+
agent = create_translation_agent()
|
|
184
|
+
await test_translation_agent(agent)
|
|
185
|
+
print("\n=== Translation Agent Testing Completed Successfully ===")
|
|
186
|
+
rollback()
|
|
187
|
+
except Exception as e:
|
|
188
|
+
rollback()
|
|
189
|
+
print(f"\n# Critical error: {e}")
|
|
190
|
+
|
|
191
|
+
if __name__ == "__main__":
|
|
192
|
+
asyncio.run(main())
|
|
193
|
+
|
|
194
|
+
### Output Explanation
|
|
195
|
+
|
|
196
|
+
The `run` method returns a `ProviderResponse` object, which includes:
|
|
197
|
+
|
|
198
|
+
- **choices**: A list of `Choice` objects, each containing a `ChatMessage` with the agent’s response (e.g., translated text).
|
|
199
|
+
- **usage**: A `UsageDetails` object detailing token counts, costs, and currency.
|
|
200
|
+
- **model**: The LLM model used (e.g., `gpt-4-turbo-2024-04-09`).
|
|
201
|
+
- **created**: A timestamp for when the response was generated.
|
|
202
|
+
- **id**: A unique identifier for the chat completion request (optional).
|
|
203
|
+
- **system_fingerprint**: A unique identifier for the system configuration (optional).
|
|
204
|
+
- **service_tier**: The service tier used for the request (optional).
|
|
205
|
+
- **object**: A string indicating the response type, typically `chat.completion` (optional).
|
|
206
|
+
|
|
207
|
+
For example, in the string input test (`"Good morning, my friend!"`):
|
|
208
|
+
|
|
209
|
+
- The response includes a `ChatMessage` with content: `"Salut, amis mien! Bon matin à vous!"`.
|
|
210
|
+
- Usage details show `completion_tokens=15`, `prompt_tokens=312`, and `total_cost=0.00357` USD.
|
|
211
|
+
- Metadata includes `model='gpt-4-turbo-2024-04-09'`, `created=1745598637`, and `id='chatcmpl-BQGEfS8w0z3ly6OZfRKZbN1VxQyFs'`.
|
|
212
|
+
|
|
213
|
+
### Input Flexibility
|
|
214
|
+
|
|
215
|
+
The `Runner` class’s ability to handle multiple input types is a key strength, enabling developers to tailor interactions to specific use cases:
|
|
216
|
+
|
|
217
|
+
- **String Input**: Ideal for quick tests or simple interactions. The input is automatically wrapped as a `ChatMessage` with the "user" role.
|
|
218
|
+
- **ChatMessage Input**: Allows specification of the message role (e.g., "user", "system") and content, useful for structured single-message interactions.
|
|
219
|
+
- **ChatMessageList Input**: Supports conversation history or multi-message contexts, such as including a system prompt followed by user input, enabling complex dialogues.
|
|
220
|
+
|
|
221
|
+
This flexibility ensures the `Runner` can accommodate both lightweight prototyping and sophisticated conversational workflows.
|
|
222
|
+
|
|
223
|
+
### LLM Settings Customization
|
|
224
|
+
|
|
225
|
+
The `llm_settings` parameter accepts either a dictionary or an `LlmSettings` object, allowing developers to fine-tune the agent’s behavior. Key parameters include:
|
|
226
|
+
|
|
227
|
+
- `temperature`: Controls randomness (e.g., 0.6 for balanced outputs).
|
|
228
|
+
- `max_tokens`: Limits the response length (e.g., 200 or 300 tokens).
|
|
229
|
+
- `frequency_penalty` and `presence_penalty`: Adjusts token repetition tendencies.
|
|
230
|
+
|
|
231
|
+
If no `llm_settings` are provided, the `Runner` applies default settings (`temperature=0.6`, `max_tokens=800`, `frequency_penalty=0.1`, `presence_penalty=0.2`).
|
|
232
|
+
|
|
233
|
+
Error Handling
|
|
234
|
+
--------------
|
|
235
|
+
|
|
236
|
+
The `Runner` class validates input types and raises a `WrongArgumentError` if the `user_input` is not a string, `ChatMessage`, or `ChatMessageList`. Developers should handle exceptions to ensure robust execution, as shown in the example’s try-except blocks.
|
|
237
|
+
|
|
238
|
+
Integration with AILabManager
|
|
239
|
+
-----------------------------
|
|
240
|
+
|
|
241
|
+
The `Runner` integrates seamlessly with the `AILabManager` class, which is used to create, manage, and retrieve agents. In the example, the `AILabManager` creates and publishes the agent, which is then passed to the `Runner` for execution. This workflow ensures agents are properly configured before runtime execution.
|
|
242
|
+
|
|
243
|
+
Best Practices
|
|
244
|
+
--------------
|
|
245
|
+
|
|
246
|
+
- **Input Validation**: Always validate input types before passing to `Runner.run` to avoid `WrongArgumentError`.
|
|
247
|
+
- **Asynchronous Execution**: Use `await` in async functions or `asyncio.run` for top-level execution to handle the `Runner`’s asynchronous nature.
|
|
248
|
+
- **Rollback Mechanism**: Implement rollback logic (as shown in the example) to clean up created entities during testing or error scenarios.
|
|
249
|
+
- **LLM Tuning**: Experiment with `llm_settings` to optimize agent responses for specific tasks, balancing creativity and precision.
|
|
250
|
+
- **Testing with Multiple Inputs**: Test agents with all supported input types to ensure robustness across use cases.
|
|
251
|
+
- **Response Processing**: Extract the agent’s response from the `ProviderResponse` object’s `choices` list (e.g., `response.choices[0].message.content`) for further processing.
|
|
252
|
+
|
|
253
|
+
The `Runner` class is a powerful tool for executing AI agents within the Globant Enterprise AI Lab, offering flexibility, ease of use, and seamless integration with the broader PyGEAI SDK ecosystem.
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
GEAI CLI - AI Lab - Spec Command Documentation
|
|
2
|
+
==============================================
|
|
3
|
+
|
|
4
|
+
Name
|
|
5
|
+
----
|
|
6
|
+
|
|
7
|
+
geai - Command Line Interface for Globant Enterprise AI
|
|
8
|
+
|
|
9
|
+
Synopsis
|
|
10
|
+
--------
|
|
11
|
+
|
|
12
|
+
.. code-block:: bash
|
|
13
|
+
|
|
14
|
+
geai spec <subcommand> --[flag] [flag.arg]
|
|
15
|
+
|
|
16
|
+
Description
|
|
17
|
+
-----------
|
|
18
|
+
|
|
19
|
+
The ``geai spec`` command is a utility within the Globant Enterprise AI (GEAI) CLI, designed to load components (agents, tools, tasks, and agentic processes) into the AI Lab from JSON specification files. It supports the following subcommands:
|
|
20
|
+
|
|
21
|
+
- ``help`` (or ``h``): Displays help text for the ``geai spec`` command.
|
|
22
|
+
- ``load-agent`` (or ``la``): Loads agent(s) from a JSON specification file.
|
|
23
|
+
- ``load-tool`` (or ``lt``): Loads tool(s) from a JSON specification file.
|
|
24
|
+
- ``load-task`` (or ``ltask``): Loads task(s) from a JSON specification file.
|
|
25
|
+
- ``load-agentic-process`` (or ``lap``): Loads agentic process(es) from a JSON specification file.
|
|
26
|
+
|
|
27
|
+
Each subcommand accepts specific options to configure the loading process, such as project ID (specified as a UUID), file path, and publication settings.
|
|
28
|
+
|
|
29
|
+
Subcommands and Options
|
|
30
|
+
-----------------------
|
|
31
|
+
|
|
32
|
+
The following subcommands are available under ``geai spec``:
|
|
33
|
+
|
|
34
|
+
help
|
|
35
|
+
~~~~
|
|
36
|
+
|
|
37
|
+
- **Aliases**: ``help``, ``h``
|
|
38
|
+
- **Description**: Displays help text describing the ``geai spec`` command and its subcommands.
|
|
39
|
+
- **Options**: None
|
|
40
|
+
- **Usage**:
|
|
41
|
+
|
|
42
|
+
.. code-block:: bash
|
|
43
|
+
|
|
44
|
+
geai spec help
|
|
45
|
+
|
|
46
|
+
load-agent
|
|
47
|
+
~~~~~~~~~~
|
|
48
|
+
|
|
49
|
+
- **Aliases**: ``load-agent``, ``la``
|
|
50
|
+
- **Description**: Loads one or more agent specifications from a JSON file into the AI Lab for a specified project, identified by a UUID.
|
|
51
|
+
- **Options**:
|
|
52
|
+
|
|
53
|
+
+-------------------------+---------------------------+-------------------------------------------------------------+----------+
|
|
54
|
+
| Option | Aliases | Description | Required |
|
|
55
|
+
+=========================+===========================+=============================================================+==========+
|
|
56
|
+
| project_id | --project-id, --pid | UUID of the project where the agent will be loaded | Yes |
|
|
57
|
+
+-------------------------+---------------------------+-------------------------------------------------------------+----------+
|
|
58
|
+
| file | --file, -f | Path to the JSON file containing the agent definition | Yes |
|
|
59
|
+
+-------------------------+---------------------------+-------------------------------------------------------------+----------+
|
|
60
|
+
| automatic_publish | --automatic-publish, --ap | Define if agent is published (1) or created as draft (0) | Yes |
|
|
61
|
+
+-------------------------+---------------------------+-------------------------------------------------------------+----------+
|
|
62
|
+
|
|
63
|
+
- **Usage**:
|
|
64
|
+
|
|
65
|
+
.. code-block:: bash
|
|
66
|
+
|
|
67
|
+
geai spec load-agent --project-id 123e4567-e89b-12d3-a456-426614174000 --file agent.json --automatic-publish 0
|
|
68
|
+
|
|
69
|
+
load-tool
|
|
70
|
+
~~~~~~~~~
|
|
71
|
+
|
|
72
|
+
- **Aliases**: ``load-tool``, ``lt``
|
|
73
|
+
- **Description**: Loads one or more tool specifications from a JSON file into the AI Lab for a specified project, identified by a UUID.
|
|
74
|
+
- **Options**:
|
|
75
|
+
|
|
76
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
77
|
+
| Option | Aliases | Description | Required |
|
|
78
|
+
+=========================+===========================+===========================================================+==========+
|
|
79
|
+
| project_id | --project-id, --pid | UUID of the project where the tool will be loaded | Yes |
|
|
80
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
81
|
+
| file | --file, -f | Path to the JSON file containing the tool definition | Yes |
|
|
82
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
83
|
+
| automatic_publish | --automatic-publish, --ap | Define if tool is published (1) or created as draft (0) | Yes |
|
|
84
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
85
|
+
|
|
86
|
+
- **Usage**:
|
|
87
|
+
|
|
88
|
+
.. code-block:: bash
|
|
89
|
+
|
|
90
|
+
geai spec load-tool --pid 987fcdeb-1a2b-3c4d-5e6f-7890abcd1234 -f tool.json --ap 1
|
|
91
|
+
|
|
92
|
+
load-task
|
|
93
|
+
~~~~~~~~~
|
|
94
|
+
|
|
95
|
+
- **Aliases**: ``load-task``, ``ltask``
|
|
96
|
+
- **Description**: Loads one or more task specifications from a JSON file into the AI Lab for a specified project, identified by a UUID.
|
|
97
|
+
- **Options**:
|
|
98
|
+
|
|
99
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
100
|
+
| Option | Aliases | Description | Required |
|
|
101
|
+
+=========================+===========================+===========================================================+==========+
|
|
102
|
+
| project_id | --project-id, --pid | UUID of the project where the task will be loaded | Yes |
|
|
103
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
104
|
+
| file | --file, -f | Path to the JSON file containing the task definition | Yes |
|
|
105
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
106
|
+
| automatic_publish | --automatic-publish, --ap | Define if task is published (1) or created as draft (0) | Yes |
|
|
107
|
+
+-------------------------+---------------------------+-----------------------------------------------------------+----------+
|
|
108
|
+
|
|
109
|
+
- **Usage**:
|
|
110
|
+
|
|
111
|
+
.. code-block:: bash
|
|
112
|
+
|
|
113
|
+
geai spec load-task --pid 456e7890-f1a2-4b3c-5d6e-8901bcde2345 -f task.json --ap 0
|
|
114
|
+
|
|
115
|
+
load-agentic-process
|
|
116
|
+
~~~~~~~~~~~~~~~~~~~~
|
|
117
|
+
|
|
118
|
+
- **Aliases**: ``load-agentic-process``, ``lap``
|
|
119
|
+
- **Description**: Loads one or more agentic process specifications from a JSON file into the AI Lab for a specified project, identified by a UUID.
|
|
120
|
+
- **Options**:
|
|
121
|
+
|
|
122
|
+
+-------------------------+---------------------------+---------------------------------------------------------------------+----------+
|
|
123
|
+
| Option | Aliases | Description | Required |
|
|
124
|
+
+=========================+===========================+=====================================================================+==========+
|
|
125
|
+
| project_id | --project-id, --pid | UUID of the project where the agentic process will be loaded | Yes |
|
|
126
|
+
+-------------------------+---------------------------+---------------------------------------------------------------------+----------+
|
|
127
|
+
| file | --file, -f | Path to JSON file containing agentic process definition | Yes |
|
|
128
|
+
+-------------------------+---------------------------+---------------------------------------------------------------------+----------+
|
|
129
|
+
| automatic_publish | --automatic-publish, --ap | Define if process is published (1) or created as draft (0) | Yes |
|
|
130
|
+
+-------------------------+---------------------------+---------------------------------------------------------------------+----------+
|
|
131
|
+
|
|
132
|
+
- **Usage**:
|
|
133
|
+
|
|
134
|
+
.. code-block:: bash
|
|
135
|
+
|
|
136
|
+
geai spec load-agentic-process --project-id 789a0bcd-2e3f-5c4d-6e7f-9012cdef3456 -f process.json --ap 1
|
|
137
|
+
|
|
138
|
+
Usage Examples
|
|
139
|
+
--------------
|
|
140
|
+
|
|
141
|
+
Below are example commands demonstrating the usage of ``geai spec`` subcommands, using UUIDs for project IDs.
|
|
142
|
+
|
|
143
|
+
**Example 1: Display Help**
|
|
144
|
+
|
|
145
|
+
Display the help text for the ``geai spec`` command.
|
|
146
|
+
|
|
147
|
+
.. code-block:: bash
|
|
148
|
+
|
|
149
|
+
geai spec help
|
|
150
|
+
|
|
151
|
+
*Output* (example):
|
|
152
|
+
|
|
153
|
+
.. code-block:: text
|
|
154
|
+
|
|
155
|
+
geai spec - Command Line Interface for Globant Enterprise AI
|
|
156
|
+
Usage: geai spec <subcommand> --[flag] [flag.arg]
|
|
157
|
+
Subcommands:
|
|
158
|
+
help, h Display help text
|
|
159
|
+
load-agent, la Load agent from JSON specification
|
|
160
|
+
load-tool, lt Load tool from JSON specification
|
|
161
|
+
load-task, ltask Load task from JSON specification
|
|
162
|
+
load-agentic-process, lap Load agentic process from JSON specification
|
|
163
|
+
...
|
|
164
|
+
|
|
165
|
+
**Example 2: Load a Single Agent**
|
|
166
|
+
|
|
167
|
+
Load an agent from a JSON file into project with UUID ``123e4567-e89b-12d3-a456-426614174000`` as a draft.
|
|
168
|
+
|
|
169
|
+
.. code-block:: bash
|
|
170
|
+
|
|
171
|
+
geai spec load-agent --project-id 123e4567-e89b-12d3-a456-426614174000 --file agent.json --automatic-publish 0
|
|
172
|
+
|
|
173
|
+
*Output* (example):
|
|
174
|
+
|
|
175
|
+
.. code-block:: text
|
|
176
|
+
|
|
177
|
+
Created agent detail:
|
|
178
|
+
<agent details>
|
|
179
|
+
|
|
180
|
+
**Example 3: Load and Publish a Tool**
|
|
181
|
+
|
|
182
|
+
Load a tool from a JSON file into project with UUID ``987fcdeb-1a2b-3c4d-5e6f-7890abcd1234`` and publish it.
|
|
183
|
+
|
|
184
|
+
.. code-block:: bash
|
|
185
|
+
|
|
186
|
+
geai spec load-tool --pid 987fcdeb-1a2b-3c4d-5e6f-7890abcd1234 -f tool.json --ap 1
|
|
187
|
+
|
|
188
|
+
*Output* (example):
|
|
189
|
+
|
|
190
|
+
.. code-block:: text
|
|
191
|
+
|
|
192
|
+
Created tool detail:
|
|
193
|
+
<tool details>
|
|
194
|
+
|
|
195
|
+
**Example 4: Load a Task**
|
|
196
|
+
|
|
197
|
+
Load a task from a JSON file into project with UUID ``456e7890-f1a2-4b3c-5d6e-8901bcde2345`` as a draft.
|
|
198
|
+
|
|
199
|
+
.. code-block:: bash
|
|
200
|
+
|
|
201
|
+
geai spec load-task --pid 456e7890-f1a2-4b3c-5d6e-8901bcde2345 -f task.json --ap 0
|
|
202
|
+
|
|
203
|
+
*Output* (example):
|
|
204
|
+
|
|
205
|
+
.. code-block:: text
|
|
206
|
+
|
|
207
|
+
Created task detail:
|
|
208
|
+
<task details>
|
|
209
|
+
|
|
210
|
+
**Example 5: Load and Publish an Agentic Process**
|
|
211
|
+
|
|
212
|
+
Load an agentic process from a JSON file into project with UUID ``789a0bcd-2e3f-5c4d-6e7f-9012cdef3456`` and publish it.
|
|
213
|
+
|
|
214
|
+
.. code-block:: bash
|
|
215
|
+
|
|
216
|
+
geai spec load-agentic-process --project-id 789a0bcd-2e3f-5c4d-6e7f-9012cdef3456 -f process.json --ap 1
|
|
217
|
+
|
|
218
|
+
*Output* (example):
|
|
219
|
+
|
|
220
|
+
.. code-block:: text
|
|
221
|
+
|
|
222
|
+
Created agentic process detail:
|
|
223
|
+
<process details>
|
|
224
|
+
|
|
225
|
+
**Example 6: Missing File Path (Error Case)**
|
|
226
|
+
|
|
227
|
+
Attempt to load a task without specifying the file path.
|
|
228
|
+
|
|
229
|
+
.. code-block:: bash
|
|
230
|
+
|
|
231
|
+
geai spec load-task --pid 456e7890-f1a2-4b3c-5d6e-8901bcde2345 --ap 0
|
|
232
|
+
|
|
233
|
+
*Output*:
|
|
234
|
+
|
|
235
|
+
.. code-block:: text
|
|
236
|
+
|
|
237
|
+
Error: Cannot load task definition without specifying path to JSON file.
|
|
238
|
+
|
|
239
|
+
JSON Specification Formats
|
|
240
|
+
--------------------------
|
|
241
|
+
|
|
242
|
+
The ``load-agent``, ``load-tool``, ``load-task``, and ``load-agentic-process`` subcommands expect JSON files containing agent, tool, task, or agentic process specifications, respectively. The JSON file can contain a single specification (object) or multiple specifications (array).
|
|
243
|
+
|
|
244
|
+
**Agent Specification Example**
|
|
245
|
+
|
|
246
|
+
Below is an example of a single agent specification for a "Public Translator V2x" agent.
|
|
247
|
+
|
|
248
|
+
.. code-block:: json
|
|
249
|
+
|
|
250
|
+
{
|
|
251
|
+
"name": "Public Translator V2x",
|
|
252
|
+
"accessScope": "private",
|
|
253
|
+
"publicName": "com.genexus.geai.public_translator_v2x",
|
|
254
|
+
"jobDescription": "Translates",
|
|
255
|
+
"avatarImage": "https://www.shareicon.net/data/128x128/2016/11/09/851442_logo_512x512.png",
|
|
256
|
+
"description": "Agent that translates from any language to english.",
|
|
257
|
+
"agentData": {
|
|
258
|
+
"prompt": {
|
|
259
|
+
"instructions": "the user will provide a text, you must return the same text translated to english",
|
|
260
|
+
"inputs": ["text", "avoid slang indicator"],
|
|
261
|
+
"outputs": [
|
|
262
|
+
{
|
|
263
|
+
"key": "translated_text",
|
|
264
|
+
"description": "translated text, with slang or not depending on the indication. in plain text."
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"key": "summary",
|
|
268
|
+
"description": "a summary in the original language of the text to be translated, also in plain text."
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
"examples": [
|
|
272
|
+
{
|
|
273
|
+
"inputData": "opitiiiis mundo [no-slang]",
|
|
274
|
+
"output": "{\"translated_text\":\"hello world\",\"summary\":\"saludo\"}"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"inputData": "esto es una prueba pincheguey [keep-slang]",
|
|
278
|
+
"output": "{\"translated_text\":\"this is a test pal\",\"summary\":\"prueba\"}"
|
|
279
|
+
}
|
|
280
|
+
]
|
|
281
|
+
},
|
|
282
|
+
"llmConfig": {
|
|
283
|
+
"maxTokens": 5000,
|
|
284
|
+
"timeout": 0,
|
|
285
|
+
"sampling": {
|
|
286
|
+
"temperature": 0.5,
|
|
287
|
+
"topK": 0,
|
|
288
|
+
"topP": 0
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"models": [
|
|
292
|
+
{ "name": "gpt-4-turbo-preview" }
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
**Tool Specification Example**
|
|
298
|
+
|
|
299
|
+
Below is an example of a single tool specification for a "Weather Forecaster" tool.
|
|
300
|
+
|
|
301
|
+
.. code-block:: json
|
|
302
|
+
|
|
303
|
+
{
|
|
304
|
+
"name": "Weather Forecaster",
|
|
305
|
+
"description": "A builtin tool that provides weather forecasts based on location and date.",
|
|
306
|
+
"scope": "builtin",
|
|
307
|
+
"parameters": [
|
|
308
|
+
{
|
|
309
|
+
"key": "location_date",
|
|
310
|
+
"dataType": "String",
|
|
311
|
+
"description": "Location and date for the weather forecast (e.g., 'New York, 2025-05-22').",
|
|
312
|
+
"isRequired": true
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"key": "forecast_type",
|
|
316
|
+
"dataType": "String",
|
|
317
|
+
"description": "Type of forecast (e.g., daily, hourly), configured statically.",
|
|
318
|
+
"isRequired": true,
|
|
319
|
+
"type": "config",
|
|
320
|
+
"fromSecret": false,
|
|
321
|
+
"value": "daily"
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"key": "weather_api_key",
|
|
325
|
+
"dataType": "String",
|
|
326
|
+
"description": "API key for accessing the weather service, stored in secret manager.",
|
|
327
|
+
"isRequired": true,
|
|
328
|
+
"type": "config",
|
|
329
|
+
"fromSecret": true,
|
|
330
|
+
"value": "6f7a8b9c-0d1e-2f3a-4b5c-6d7e8f9a0b1c"
|
|
331
|
+
}
|
|
332
|
+
]
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
**Task Specification Example**
|
|
336
|
+
|
|
337
|
+
Below is an example of a single task specification for an "Email Review v1" task.
|
|
338
|
+
|
|
339
|
+
.. code-block:: json
|
|
340
|
+
|
|
341
|
+
{
|
|
342
|
+
"name": "Email Review v1",
|
|
343
|
+
"description": "A simple task to review and categorize email content, requiring no tools or prompts.",
|
|
344
|
+
"titleTemplate": "Email Review Task"
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
**Agentic Process Specification Example**
|
|
348
|
+
|
|
349
|
+
Below is an example of a single agentic process specification for a "Content Moderation Process."
|
|
350
|
+
|
|
351
|
+
.. code-block:: json
|
|
352
|
+
|
|
353
|
+
{
|
|
354
|
+
"key": "content_moderation_proc",
|
|
355
|
+
"name": "Content Moderation Process",
|
|
356
|
+
"description": "A process to review and moderate user-generated content for compliance.",
|
|
357
|
+
"kb": {
|
|
358
|
+
"name": "content-moderation-kb",
|
|
359
|
+
"artifactTypeName": ["content-artifact"]
|
|
360
|
+
},
|
|
361
|
+
"agenticActivities": [
|
|
362
|
+
{
|
|
363
|
+
"key": "moderate_content",
|
|
364
|
+
"name": "Moderate Content",
|
|
365
|
+
"taskName": "content-moderation-task",
|
|
366
|
+
"agentName": "content-moderator",
|
|
367
|
+
"agentRevisionId": 0
|
|
368
|
+
}
|
|
369
|
+
],
|
|
370
|
+
"artifactSignals": [
|
|
371
|
+
{
|
|
372
|
+
"key": "artifact.content.upload.1",
|
|
373
|
+
"name": "content.upload",
|
|
374
|
+
"handlingType": "C",
|
|
375
|
+
"artifactTypeName": ["content-artifact"]
|
|
376
|
+
}
|
|
377
|
+
],
|
|
378
|
+
"userSignals": [
|
|
379
|
+
{
|
|
380
|
+
"key": "signal_content_done",
|
|
381
|
+
"name": "content-moderation-completed"
|
|
382
|
+
}
|
|
383
|
+
],
|
|
384
|
+
"startEvent": {
|
|
385
|
+
"key": "artifact.content.upload.1",
|
|
386
|
+
"name": "content.upload"
|
|
387
|
+
},
|
|
388
|
+
"endEvent": {
|
|
389
|
+
"key": "end",
|
|
390
|
+
"name": "Done"
|
|
391
|
+
},
|
|
392
|
+
"sequenceFlows": [
|
|
393
|
+
{
|
|
394
|
+
"key": "step1",
|
|
395
|
+
"sourceKey": "artifact.content.upload.1",
|
|
396
|
+
"targetKey": "moderate_content"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"key": "step2",
|
|
400
|
+
"sourceKey": "moderate_content",
|
|
401
|
+
"targetKey": "signal_content_done"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"key": "stepEnd",
|
|
405
|
+
"sourceKey": "signal_content_done",
|
|
406
|
+
"targetKey": "end"
|
|
407
|
+
}
|
|
408
|
+
]
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
Error Handling
|
|
412
|
+
--------------
|
|
413
|
+
|
|
414
|
+
The ``geai spec`` subcommands may raise the following errors:
|
|
415
|
+
|
|
416
|
+
- **MissingRequirementException**:
|
|
417
|
+
- Triggered if required options (``--project-id`` or ``--file``) are not provided.
|
|
418
|
+
- Example: ``Cannot load task definition without specifying path to JSON file.``
|
|
419
|
+
- **File Loading Errors**:
|
|
420
|
+
- Invalid or inaccessible JSON files will cause errors during loading, logged and displayed to stderr.
|
|
421
|
+
- **Parsing Errors**:
|
|
422
|
+
- Malformed JSON specifications may fail during parsing, with errors output to stderr.
|
|
423
|
+
|
|
424
|
+
Notes
|
|
425
|
+
-----
|
|
426
|
+
|
|
427
|
+
- The ``project_id`` must be a valid UUID (e.g., ``123e4567-e89b-12d3-a456-426614174000``).
|
|
428
|
+
- JSON files must conform to the expected format for agents, tools, tasks, or agentic processes, as shown in the examples above.
|
|
429
|
+
- The ``automatic_publish`` option (0 or 1) determines whether the component is created as a draft or published immediately.
|
|
430
|
+
- Ensure the project UUID exists in the AI Lab and the JSON file path is valid before running the command.
|
|
431
|
+
- Multiple components can be loaded from a single JSON file if it contains an array of specifications.
|