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.
- 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
pygeai/lab/agents/clients.py
CHANGED
|
@@ -1,41 +1,46 @@
|
|
|
1
|
-
from json import JSONDecodeError
|
|
2
1
|
from typing import Optional, List, Dict
|
|
3
2
|
|
|
4
|
-
from pygeai
|
|
3
|
+
from pygeai import logger
|
|
4
|
+
from pygeai.core.common.exceptions import MissingRequirementException, InvalidAPIResponseException
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
6
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
5
7
|
from pygeai.lab.agents.endpoints import CREATE_AGENT_V2, LIST_AGENTS_V2, GET_AGENT_V2, CREATE_SHARING_LINK_V2, \
|
|
6
|
-
PUBLISH_AGENT_REVISION_V2, DELETE_AGENT_V2, UPDATE_AGENT_V2, UPSERT_AGENT_V2
|
|
8
|
+
PUBLISH_AGENT_REVISION_V2, DELETE_AGENT_V2, UPDATE_AGENT_V2, UPSERT_AGENT_V2, EXPORT_AGENT_V2, IMPORT_AGENT_V2
|
|
9
|
+
from pygeai.lab.constants import VALID_ACCESS_SCOPES
|
|
10
|
+
from pygeai.lab.clients import AILabClient
|
|
7
11
|
|
|
8
12
|
|
|
9
|
-
class AgentClient(
|
|
13
|
+
class AgentClient(AILabClient):
|
|
10
14
|
|
|
11
15
|
def list_agents(
|
|
12
16
|
self,
|
|
13
|
-
project_id: str,
|
|
14
17
|
status: str = "",
|
|
15
18
|
start: int = "",
|
|
16
19
|
count: int = "",
|
|
17
20
|
access_scope: str = "public",
|
|
18
21
|
allow_drafts: bool = True,
|
|
19
22
|
allow_external: bool = False
|
|
20
|
-
):
|
|
23
|
+
) -> dict:
|
|
21
24
|
"""
|
|
22
25
|
Retrieves a list of agents associated with the specified project.
|
|
23
26
|
|
|
24
|
-
:param
|
|
25
|
-
:param
|
|
26
|
-
:param
|
|
27
|
-
:param
|
|
28
|
-
:param
|
|
29
|
-
:param
|
|
30
|
-
:
|
|
31
|
-
:
|
|
27
|
+
:param status: str, optional - Filter agents by status (e.g., "active", "draft"). Defaults to "" (no filtering).
|
|
28
|
+
:param start: int, optional - Starting index for pagination. Defaults to "" (no offset).
|
|
29
|
+
:param count: int, optional - Maximum number of agents to retrieve. Defaults to "" (no limit).
|
|
30
|
+
:param access_scope: str, optional - Filter agents by access scope ("public" or "private"). Defaults to "public".
|
|
31
|
+
:param allow_drafts: bool, optional - Include draft agents in the results. Defaults to True.
|
|
32
|
+
:param allow_external: bool, optional - Include external agents in the results. Defaults to False.
|
|
33
|
+
:return: dict - JSON response containing the list of agents.
|
|
34
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
32
35
|
"""
|
|
33
36
|
endpoint = LIST_AGENTS_V2
|
|
34
37
|
headers = {
|
|
35
38
|
"Authorization": self.api_service.token,
|
|
36
|
-
"ProjectId": project_id
|
|
39
|
+
"ProjectId": self.project_id
|
|
37
40
|
}
|
|
38
41
|
|
|
42
|
+
logger.debug(f"Listing agents for project with ID {self.project_id}")
|
|
43
|
+
|
|
39
44
|
response = self.api_service.get(
|
|
40
45
|
endpoint=endpoint,
|
|
41
46
|
headers=headers,
|
|
@@ -48,16 +53,11 @@ class AgentClient(BaseClient):
|
|
|
48
53
|
"allowExternal": allow_external
|
|
49
54
|
}
|
|
50
55
|
)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
except JSONDecodeError as e:
|
|
54
|
-
result = response.text
|
|
55
|
-
|
|
56
|
-
return result
|
|
56
|
+
validate_status_code(response)
|
|
57
|
+
return parse_json_response(response, f"list agents for project {self.project_id}")
|
|
57
58
|
|
|
58
59
|
def create_agent(
|
|
59
60
|
self,
|
|
60
|
-
project_id: str,
|
|
61
61
|
name: str,
|
|
62
62
|
access_scope: str,
|
|
63
63
|
public_name: str,
|
|
@@ -66,6 +66,7 @@ class AgentClient(BaseClient):
|
|
|
66
66
|
description: str,
|
|
67
67
|
agent_data_prompt: dict,
|
|
68
68
|
agent_data_llm_config: dict,
|
|
69
|
+
agent_data_strategy_name: str,
|
|
69
70
|
agent_data_models: list,
|
|
70
71
|
agent_data_resource_pools: Optional[List[Dict]] = None,
|
|
71
72
|
automatic_publish: bool = False
|
|
@@ -73,42 +74,25 @@ class AgentClient(BaseClient):
|
|
|
73
74
|
"""
|
|
74
75
|
Creates a new agent in the specified project.
|
|
75
76
|
|
|
76
|
-
:param
|
|
77
|
-
:param
|
|
78
|
-
:param
|
|
79
|
-
:param
|
|
80
|
-
:param
|
|
81
|
-
:param
|
|
82
|
-
:param
|
|
83
|
-
:param
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
:
|
|
90
|
-
|
|
91
|
-
'maxTokens': int, # Maximum tokens for generation
|
|
92
|
-
'timeout': int, # Timeout in seconds
|
|
93
|
-
'sampling': {
|
|
94
|
-
'temperature': float # Controls randomness (0.0 to 1.0)
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
:param agent_data_models: list - List of models the agent can use, in order of preference. At least one valid model is required for publication. Each model is a dict with 'name' (e.g., 'gpt-4o' or 'openai/gpt-4o') and optional 'llmConfig' to override defaults. Example:
|
|
98
|
-
[{'name': str, 'llmConfig': dict}, ...]
|
|
99
|
-
:param agent_data_resource_pools: Optional[List[Dict]] - List of resource pools organizing tools and helper agents. Optional. Each pool is a dict with 'name' (required), and optional 'tools' and 'agents' lists. Example structure:
|
|
100
|
-
[
|
|
101
|
-
{
|
|
102
|
-
'name': str,
|
|
103
|
-
'tools': [{'name': str, 'revision': int}, ...],
|
|
104
|
-
'agents': [{'name': str, 'revision': int}, ...]
|
|
105
|
-
},
|
|
106
|
-
...
|
|
107
|
-
]
|
|
108
|
-
:param automatic_publish: bool - If True, automatically publishes the agent after creation. Defaults to False.
|
|
109
|
-
:return: dict - JSON response containing the created agent details if successful, otherwise the raw response text.
|
|
110
|
-
:raises JSONDecodeError: If the response cannot be parsed as JSON.
|
|
77
|
+
:param name: str - Name of the agent (must be unique within the project, non-empty, and exclude ':' or '/').
|
|
78
|
+
:param access_scope: str - Access scope of the agent ("public" or "private").
|
|
79
|
+
:param public_name: str - Public name for the agent, required if access_scope is "public" (must follow domain/library convention, e.g., 'com.example.my-agent').
|
|
80
|
+
:param job_description: str - Description of the agent's role (optional).
|
|
81
|
+
:param avatar_image: str - URL for the agent's avatar image (optional).
|
|
82
|
+
:param description: str - Detailed description of the agent’s purpose (optional).
|
|
83
|
+
:param agent_data_prompt: dict - Prompt configuration, including 'context', 'instructions', and optional 'examples' (e.g., {'context': str, 'instructions': str, 'examples': [{'inputData': str, 'output': str}]}).
|
|
84
|
+
:param agent_data_llm_config: dict - LLM configuration (e.g., {'maxTokens': int, 'timeout': int, 'sampling': {'temperature': float}}).
|
|
85
|
+
:param agent_data_strategy_name: str - Strategy name to be used.
|
|
86
|
+
:param agent_data_models: list - List of models the agent can use (e.g., [{'name': 'gpt-4o', 'llmConfig': dict}]).
|
|
87
|
+
:param agent_data_resource_pools: Optional[List[Dict]] - Resource pools for tools and helper agents (e.g., [{'name': str, 'tools': [{'name': str, 'revision': int}], 'agents': [{'name': str, 'revision': int}]}]).
|
|
88
|
+
:param automatic_publish: bool - Automatically publish the agent after creation (default: False).
|
|
89
|
+
:return: dict - JSON response containing the created agent details.
|
|
90
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
91
|
+
:raises ValueError: If access_scope is invalid.
|
|
111
92
|
"""
|
|
93
|
+
if access_scope is not None and access_scope not in VALID_ACCESS_SCOPES:
|
|
94
|
+
raise ValueError(f"Access scope must be one of {', '.join(VALID_ACCESS_SCOPES)}.")
|
|
95
|
+
|
|
112
96
|
data = {
|
|
113
97
|
"agentDefinition": {
|
|
114
98
|
"name": name,
|
|
@@ -117,16 +101,24 @@ class AgentClient(BaseClient):
|
|
|
117
101
|
"jobDescription": job_description,
|
|
118
102
|
"avatarImage": avatar_image,
|
|
119
103
|
"description": description,
|
|
120
|
-
"agentData": {
|
|
121
|
-
"prompt": agent_data_prompt,
|
|
122
|
-
"llmConfig": agent_data_llm_config,
|
|
123
|
-
"models": agent_data_models
|
|
124
|
-
}
|
|
125
104
|
}
|
|
126
105
|
}
|
|
127
|
-
|
|
106
|
+
if (
|
|
107
|
+
agent_data_prompt or agent_data_strategy_name or agent_data_prompt or agent_data_resource_pools or
|
|
108
|
+
agent_data_llm_config or agent_data_models
|
|
109
|
+
):
|
|
110
|
+
data["agentDefinition"]["agentData"] = {}
|
|
128
111
|
if agent_data_resource_pools is not None:
|
|
129
112
|
data["agentDefinition"]["agentData"]["resourcePools"] = agent_data_resource_pools
|
|
113
|
+
if agent_data_prompt is not None:
|
|
114
|
+
data["agentDefinition"]["agentData"]["prompt"] = agent_data_prompt
|
|
115
|
+
if agent_data_llm_config is not None:
|
|
116
|
+
data["agentDefinition"]["agentData"]["llmConfig"] = agent_data_llm_config
|
|
117
|
+
if agent_data_strategy_name is not None:
|
|
118
|
+
data["agentDefinition"]["agentData"]["strategyName"] = agent_data_strategy_name
|
|
119
|
+
if agent_data_models is not None:
|
|
120
|
+
data["agentDefinition"]["agentData"]["models"] = agent_data_models
|
|
121
|
+
logger.debug(f"Creating agent with data: {data}")
|
|
130
122
|
|
|
131
123
|
endpoint = CREATE_AGENT_V2
|
|
132
124
|
if automatic_publish:
|
|
@@ -134,7 +126,7 @@ class AgentClient(BaseClient):
|
|
|
134
126
|
|
|
135
127
|
headers = {
|
|
136
128
|
"Authorization": self.api_service.token,
|
|
137
|
-
"ProjectId": project_id
|
|
129
|
+
"ProjectId": self.project_id
|
|
138
130
|
}
|
|
139
131
|
|
|
140
132
|
response = self.api_service.post(
|
|
@@ -143,37 +135,39 @@ class AgentClient(BaseClient):
|
|
|
143
135
|
data=data
|
|
144
136
|
)
|
|
145
137
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
except JSONDecodeError as e:
|
|
149
|
-
result = response.text
|
|
138
|
+
validate_status_code(response)
|
|
139
|
+
return parse_json_response(response, f"create agent for project {self.project_id}")
|
|
150
140
|
|
|
151
|
-
return result
|
|
152
141
|
|
|
153
142
|
def get_agent(
|
|
154
143
|
self,
|
|
155
|
-
project_id: str,
|
|
156
144
|
agent_id: str,
|
|
157
145
|
revision: str = 0,
|
|
158
146
|
version: int = 0,
|
|
159
147
|
allow_drafts: bool = True
|
|
160
|
-
):
|
|
148
|
+
) -> dict:
|
|
161
149
|
"""
|
|
162
150
|
Retrieves details of a specific agent from the specified project.
|
|
163
151
|
|
|
164
|
-
:param project_id: str - Unique identifier of the project.
|
|
165
152
|
:param agent_id: str - Unique identifier of the agent to retrieve.
|
|
166
|
-
:param revision: str -
|
|
167
|
-
:param version: int -
|
|
168
|
-
:param allow_drafts: bool -
|
|
169
|
-
:return: dict
|
|
153
|
+
:param revision: str, optional - Specific revision of the agent to retrieve (default: 0, latest revision).
|
|
154
|
+
:param version: int, optional - Specific version of the agent to retrieve (default: 0, latest version).
|
|
155
|
+
:param allow_drafts: bool, optional - Include draft agents in the results (default: True).
|
|
156
|
+
:return: dict - JSON response containing the agent details.
|
|
157
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
158
|
+
:raises MissingRequirementException: If project_id or agent_id is not provided.
|
|
170
159
|
"""
|
|
160
|
+
if not agent_id:
|
|
161
|
+
raise MissingRequirementException("agent_id must be specified in order to retrieve the agent")
|
|
162
|
+
|
|
171
163
|
endpoint = GET_AGENT_V2.format(agentId=agent_id)
|
|
172
164
|
headers = {
|
|
173
165
|
"Authorization": self.api_service.token,
|
|
174
|
-
"ProjectId": project_id
|
|
166
|
+
"ProjectId": self.project_id
|
|
175
167
|
}
|
|
176
168
|
|
|
169
|
+
logger.debug(f"Retrieving agent detail with ID {agent_id}")
|
|
170
|
+
|
|
177
171
|
response = self.api_service.get(
|
|
178
172
|
endpoint=endpoint,
|
|
179
173
|
headers=headers,
|
|
@@ -183,63 +177,63 @@ class AgentClient(BaseClient):
|
|
|
183
177
|
"allowDrafts": allow_drafts,
|
|
184
178
|
}
|
|
185
179
|
)
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
except JSONDecodeError as e:
|
|
189
|
-
result = response.text
|
|
180
|
+
validate_status_code(response)
|
|
181
|
+
return parse_json_response(response, f"retrieve agent {agent_id} for project {self.project_id}")
|
|
190
182
|
|
|
191
|
-
return result
|
|
192
183
|
|
|
193
184
|
def create_sharing_link(
|
|
194
185
|
self,
|
|
195
|
-
project_id: str,
|
|
196
186
|
agent_id: str,
|
|
197
|
-
):
|
|
187
|
+
) -> dict:
|
|
198
188
|
"""
|
|
199
189
|
Creates a sharing link for a specific agent in the specified project.
|
|
200
190
|
|
|
201
|
-
:param project_id: str - Unique identifier of the project.
|
|
202
191
|
:param agent_id: str - Unique identifier of the agent for which to create a sharing link.
|
|
203
|
-
:return: dict
|
|
192
|
+
:return: dict - JSON response containing the sharing link details.
|
|
193
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
194
|
+
:raises MissingRequirementException: If project_id or agent_id is not provided.
|
|
204
195
|
"""
|
|
196
|
+
if not agent_id:
|
|
197
|
+
raise MissingRequirementException("agent_id must be specified in order to create sharing link")
|
|
198
|
+
|
|
205
199
|
endpoint = CREATE_SHARING_LINK_V2.format(agentId=agent_id)
|
|
206
200
|
headers = {
|
|
207
201
|
"Authorization": self.api_service.token,
|
|
208
|
-
"ProjectId": project_id
|
|
202
|
+
"ProjectId": self.project_id
|
|
209
203
|
}
|
|
210
204
|
|
|
205
|
+
logger.debug(f"Creating sharing link for agent with ID {agent_id}")
|
|
206
|
+
|
|
211
207
|
response = self.api_service.get(
|
|
212
208
|
endpoint=endpoint,
|
|
213
209
|
headers=headers,
|
|
214
210
|
params={}
|
|
215
211
|
)
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
except JSONDecodeError as e:
|
|
219
|
-
result = response.text
|
|
212
|
+
validate_status_code(response)
|
|
213
|
+
return parse_json_response(response, f"create sharing link for agent {agent_id} in project {self.project_id}")
|
|
220
214
|
|
|
221
|
-
return result
|
|
222
215
|
|
|
223
216
|
def publish_agent_revision(
|
|
224
217
|
self,
|
|
225
|
-
project_id: str,
|
|
226
218
|
agent_id: str,
|
|
227
219
|
revision: str
|
|
228
|
-
):
|
|
220
|
+
) -> dict:
|
|
229
221
|
"""
|
|
230
222
|
Publishes a specific revision of an agent in the specified project.
|
|
231
223
|
|
|
232
|
-
:param project_id: str - Unique identifier of the project.
|
|
233
224
|
:param agent_id: str - Unique identifier of the agent to publish.
|
|
234
225
|
:param revision: str - Revision of the agent to publish.
|
|
235
|
-
:return: dict
|
|
226
|
+
:return: dict - JSON response containing the result of the publish operation.
|
|
227
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
236
228
|
"""
|
|
237
229
|
endpoint = PUBLISH_AGENT_REVISION_V2.format(agentId=agent_id)
|
|
238
230
|
headers = {
|
|
239
231
|
"Authorization": self.api_service.token,
|
|
240
|
-
"ProjectId": project_id
|
|
232
|
+
"ProjectId": self.project_id
|
|
241
233
|
}
|
|
242
234
|
|
|
235
|
+
logger.debug(f"Publishing revision {revision} for agent with ID {agent_id}")
|
|
236
|
+
|
|
243
237
|
response = self.api_service.post(
|
|
244
238
|
endpoint=endpoint,
|
|
245
239
|
headers=headers,
|
|
@@ -247,46 +241,42 @@ class AgentClient(BaseClient):
|
|
|
247
241
|
"revision": revision,
|
|
248
242
|
}
|
|
249
243
|
)
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
except JSONDecodeError as e:
|
|
253
|
-
result = response.text
|
|
244
|
+
validate_status_code(response)
|
|
245
|
+
return parse_json_response(response, f"publish revision {revision} for agent {agent_id} in project {self.project_id}")
|
|
254
246
|
|
|
255
|
-
return result
|
|
256
247
|
|
|
257
248
|
def delete_agent(
|
|
258
249
|
self,
|
|
259
|
-
project_id: str,
|
|
260
250
|
agent_id: str,
|
|
261
|
-
):
|
|
251
|
+
) -> dict:
|
|
262
252
|
"""
|
|
263
253
|
Deletes a specific agent from the specified project.
|
|
264
254
|
|
|
265
|
-
:param project_id: str - Unique identifier of the project.
|
|
266
255
|
:param agent_id: str - Unique identifier of the agent to delete.
|
|
267
|
-
:return: dict
|
|
256
|
+
:return: dict - JSON response confirming the deletion.
|
|
257
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
268
258
|
"""
|
|
269
259
|
endpoint = DELETE_AGENT_V2.format(agentId=agent_id)
|
|
270
260
|
headers = {
|
|
271
261
|
"Authorization": self.api_service.token,
|
|
272
|
-
"ProjectId": project_id
|
|
262
|
+
"ProjectId": self.project_id
|
|
273
263
|
}
|
|
274
264
|
|
|
265
|
+
logger.debug(f"Deleting agent with ID {agent_id}")
|
|
266
|
+
|
|
275
267
|
response = self.api_service.delete(
|
|
276
268
|
endpoint=endpoint,
|
|
277
269
|
headers=headers,
|
|
278
270
|
data={}
|
|
279
271
|
)
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
return result
|
|
272
|
+
if response.status_code != 204:
|
|
273
|
+
logger.error(f"Unable to delete agent {agent_id} from project {self.project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
|
|
274
|
+
raise InvalidAPIResponseException(f"Unable to delete agent {agent_id} from project {self.project_id}: {response.text}")
|
|
275
|
+
else:
|
|
276
|
+
return {}
|
|
286
277
|
|
|
287
278
|
def update_agent(
|
|
288
279
|
self,
|
|
289
|
-
project_id: str,
|
|
290
280
|
agent_id: str,
|
|
291
281
|
name: str,
|
|
292
282
|
access_scope: str,
|
|
@@ -296,6 +286,7 @@ class AgentClient(BaseClient):
|
|
|
296
286
|
description: str,
|
|
297
287
|
agent_data_prompt: dict,
|
|
298
288
|
agent_data_llm_config: dict,
|
|
289
|
+
agent_data_strategy_name: dict,
|
|
299
290
|
agent_data_models: list,
|
|
300
291
|
agent_data_resource_pools: Optional[List[Dict]] = None,
|
|
301
292
|
automatic_publish: bool = False,
|
|
@@ -304,44 +295,27 @@ class AgentClient(BaseClient):
|
|
|
304
295
|
"""
|
|
305
296
|
Updates an existing agent in the specified project or upserts it if specified.
|
|
306
297
|
|
|
307
|
-
:param
|
|
308
|
-
:param
|
|
309
|
-
:param
|
|
310
|
-
:param
|
|
311
|
-
:param
|
|
312
|
-
:param
|
|
313
|
-
:param
|
|
314
|
-
:param
|
|
315
|
-
:param
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
:
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
'timeout': int, # Timeout in seconds
|
|
325
|
-
'sampling': {
|
|
326
|
-
'temperature': float # Controls randomness (0.0 to 1.0)
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
:param agent_data_models: list - Updated list of models the agent can use, in order of preference. At least one valid model is required for publication. Each model is a dict with 'name' (e.g., 'gpt-4o' or 'openai/gpt-4o') and optional 'llmConfig' to override defaults. Optional. Example:
|
|
330
|
-
[{'name': str, 'llmConfig': dict}, ...]
|
|
331
|
-
:param agent_data_resource_pools: Optional[List[Dict]] - Updated list of resource pools organizing tools and helper agents. Optional. Each pool is a dict with 'name' (required), and optional 'tools' and 'agents' lists. Example structure:
|
|
332
|
-
[
|
|
333
|
-
{
|
|
334
|
-
'name': str,
|
|
335
|
-
'tools': [{'name': str, 'revision': int}, ...],
|
|
336
|
-
'agents': [{'name': str, 'revision': int}, ...]
|
|
337
|
-
},
|
|
338
|
-
...
|
|
339
|
-
]
|
|
340
|
-
:param automatic_publish: bool - If True, automatically publishes the agent after updating. Defaults to False.
|
|
341
|
-
:param upsert: bool - If True, creates the agent if it does not exist (upsert); otherwise, only updates an existing agent. Defaults to False.
|
|
342
|
-
:return: dict - JSON response containing the updated or created agent details if successful, otherwise the raw response text.
|
|
343
|
-
:raises JSONDecodeError: If the response cannot be parsed as JSON.
|
|
298
|
+
:param agent_id: str - Unique identifier of the agent to update (required for updates).
|
|
299
|
+
:param name: str - Updated name of the agent (must be unique, non-empty, exclude ':' or '/'; optional).
|
|
300
|
+
:param access_scope: str - Updated access scope ("public" or "private").
|
|
301
|
+
:param public_name: str - Updated public name, required if access_scope is "public" (must follow domain/library convention).
|
|
302
|
+
:param job_description: str - Updated role description (optional).
|
|
303
|
+
:param avatar_image: str - Updated avatar image URL (optional).
|
|
304
|
+
:param description: str - Updated purpose description (optional).
|
|
305
|
+
:param agent_data_prompt: dict - Updated prompt configuration (e.g., {'context': str, 'instructions': str, 'examples': [{'inputData': str, 'output': str}]}).
|
|
306
|
+
:param agent_data_llm_config: dict - Updated LLM configuration (e.g., {'maxTokens': int, 'timeout': int, 'sampling': {'temperature': float}}).
|
|
307
|
+
:param agent_data_strategy_name: str - Updated StrategyName configuration.
|
|
308
|
+
:param agent_data_models: list - Updated model list (e.g., [{'name': 'gpt-4o', 'llmConfig': dict}]).
|
|
309
|
+
:param agent_data_resource_pools: Optional[List[Dict]] - Updated resource pools (e.g., [{'name': str, 'tools': [{'name': str, 'revision': int}], 'agents': [{'name': str, 'revision': int}]}]).
|
|
310
|
+
:param automatic_publish: bool - Automatically publish the agent after updating (default: False).
|
|
311
|
+
:param upsert: bool - Create the agent if it does not exist (default: False).
|
|
312
|
+
:return: dict - JSON response containing the updated or created agent details.
|
|
313
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
314
|
+
:raises ValueError: If access_scope is invalid.
|
|
344
315
|
"""
|
|
316
|
+
if access_scope is not None and access_scope not in VALID_ACCESS_SCOPES:
|
|
317
|
+
raise ValueError(f"Access scope must be one of {', '.join(VALID_ACCESS_SCOPES)}.")
|
|
318
|
+
|
|
345
319
|
data = {
|
|
346
320
|
"agentDefinition": {
|
|
347
321
|
"name": name,
|
|
@@ -350,15 +324,25 @@ class AgentClient(BaseClient):
|
|
|
350
324
|
"jobDescription": job_description,
|
|
351
325
|
"avatarImage": avatar_image,
|
|
352
326
|
"description": description,
|
|
353
|
-
"agentData": {
|
|
354
|
-
"prompt": agent_data_prompt,
|
|
355
|
-
"llmConfig": agent_data_llm_config,
|
|
356
|
-
"models": agent_data_models
|
|
357
|
-
}
|
|
358
327
|
}
|
|
359
328
|
}
|
|
329
|
+
if (
|
|
330
|
+
agent_data_prompt or agent_data_strategy_name or agent_data_prompt or agent_data_resource_pools or
|
|
331
|
+
agent_data_llm_config or agent_data_models
|
|
332
|
+
):
|
|
333
|
+
data["agentDefinition"]["agentData"] = {}
|
|
360
334
|
if agent_data_resource_pools is not None:
|
|
361
335
|
data["agentDefinition"]["agentData"]["resourcePools"] = agent_data_resource_pools
|
|
336
|
+
if agent_data_prompt is not None:
|
|
337
|
+
data["agentDefinition"]["agentData"]["prompt"] = agent_data_prompt
|
|
338
|
+
if agent_data_llm_config is not None:
|
|
339
|
+
data["agentDefinition"]["agentData"]["llmConfig"] = agent_data_llm_config
|
|
340
|
+
if agent_data_strategy_name is not None:
|
|
341
|
+
data["agentDefinition"]["agentData"]["strategyName"] = agent_data_strategy_name
|
|
342
|
+
if agent_data_models is not None:
|
|
343
|
+
data["agentDefinition"]["agentData"]["models"] = agent_data_models
|
|
344
|
+
|
|
345
|
+
logger.debug(f"Updating agent with ID {agent_id} with data: {data}")
|
|
362
346
|
|
|
363
347
|
endpoint = UPSERT_AGENT_V2 if upsert else UPDATE_AGENT_V2
|
|
364
348
|
endpoint = endpoint.format(agentId=agent_id) if agent_id else endpoint.format(agentId=name)
|
|
@@ -368,7 +352,7 @@ class AgentClient(BaseClient):
|
|
|
368
352
|
|
|
369
353
|
headers = {
|
|
370
354
|
"Authorization": self.api_service.token,
|
|
371
|
-
"ProjectId": project_id
|
|
355
|
+
"ProjectId": self.project_id
|
|
372
356
|
}
|
|
373
357
|
|
|
374
358
|
response = self.api_service.put(
|
|
@@ -377,9 +361,66 @@ class AgentClient(BaseClient):
|
|
|
377
361
|
data=data
|
|
378
362
|
)
|
|
379
363
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
364
|
+
validate_status_code(response)
|
|
365
|
+
return parse_json_response(response, f"update agent {agent_id} in project {self.project_id}")
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def export_agent(
|
|
369
|
+
self,
|
|
370
|
+
agent_id: str,
|
|
371
|
+
) -> dict:
|
|
372
|
+
"""
|
|
373
|
+
Retrieves details of a specific agent from the specified project.
|
|
374
|
+
|
|
375
|
+
:param agent_id: str - Unique identifier of the agent to retrieve.
|
|
376
|
+
:return: dict - JSON response containing the agent details.
|
|
377
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
378
|
+
:raises MissingRequirementException: If project_id or agent_id is not provided.
|
|
379
|
+
"""
|
|
380
|
+
if not agent_id:
|
|
381
|
+
raise MissingRequirementException("agent_id must be specified in order to export the agent")
|
|
382
|
+
|
|
383
|
+
endpoint = EXPORT_AGENT_V2.format(agentId=agent_id)
|
|
384
|
+
headers = {
|
|
385
|
+
"Authorization": self.api_service.token,
|
|
386
|
+
"ProjectId": self.project_id
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
logger.debug(f"Exporting agent with ID {agent_id}")
|
|
390
|
+
|
|
391
|
+
response = self.api_service.get(
|
|
392
|
+
endpoint=endpoint,
|
|
393
|
+
headers=headers,
|
|
394
|
+
)
|
|
395
|
+
validate_status_code(response)
|
|
396
|
+
return parse_json_response(response, f"export agent {agent_id} for project {self.project_id}")
|
|
397
|
+
|
|
398
|
+
def import_agent(
|
|
399
|
+
self,
|
|
400
|
+
data: dict,
|
|
401
|
+
) -> dict:
|
|
402
|
+
"""
|
|
403
|
+
Retrieves details of a specific agent from the specified project.
|
|
404
|
+
|
|
405
|
+
:param data: dict - Agent specification to import
|
|
406
|
+
:return: dict - JSON response containing the agent details.
|
|
407
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
408
|
+
:raises MissingRequirementException: If project_id or agent_id is not provided.
|
|
409
|
+
"""
|
|
410
|
+
if not data:
|
|
411
|
+
raise MissingRequirementException("data for spec must be specified in order to import the agent")
|
|
412
|
+
|
|
413
|
+
endpoint = IMPORT_AGENT_V2
|
|
414
|
+
headers = {
|
|
415
|
+
"Authorization": self.api_service.token,
|
|
416
|
+
"ProjectId": self.project_id
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
response = self.api_service.post(
|
|
420
|
+
endpoint=endpoint,
|
|
421
|
+
headers=headers,
|
|
422
|
+
data=data
|
|
423
|
+
)
|
|
424
|
+
validate_status_code(response)
|
|
425
|
+
return parse_json_response(response, f"import agent for project {self.project_id}")
|
|
384
426
|
|
|
385
|
-
return result
|
pygeai/lab/agents/endpoints.py
CHANGED
|
@@ -6,3 +6,7 @@ PUBLISH_AGENT_REVISION_V2 = "v2/agents/{agentId}/publish-revision" # POST -> Pu
|
|
|
6
6
|
DELETE_AGENT_V2 = "v2/agents/{agentId}" # DEL -> Delete agent
|
|
7
7
|
UPDATE_AGENT_V2 = "v2/agents/{agentId}" # PUT -> Update agent
|
|
8
8
|
UPSERT_AGENT_V2 = "v2/agents/{agentId}/upsert" # PUT -> Update or Insert agent
|
|
9
|
+
EXPORT_AGENT_V2 = "v2/agents/{agentId}/export" # GET -> Export agent
|
|
10
|
+
IMPORT_AGENT_V2 = "v2/agents/import" # POST -> Import agent
|
|
11
|
+
# EXPORT_AGENT_V4 = "v4/agents/{agentId}/export" # GET -> Export agent
|
|
12
|
+
# IMPORT_AGENT_V4 = "v4/agents/import" # POST -> Import agent
|