pygeai 0.1.6__py3-none-any.whl → 0.6.0b15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pygeai might be problematic. Click here for more details.
- pygeai/__init__.py +11 -2
- pygeai/_docs/Makefile +20 -0
- pygeai/_docs/make.bat +35 -0
- pygeai/_docs/source/conf.py +117 -0
- pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
- pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
- pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
- pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
- pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
- pygeai/_docs/source/content/ai_lab.rst +102 -0
- pygeai/_docs/source/content/analytics.rst +598 -0
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- pygeai/_docs/source/content/api_reference/chat.rst +754 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +738 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rag.rst +710 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +58 -0
- pygeai/_docs/source/content/authentication.rst +295 -0
- pygeai/_docs/source/content/chat_gui.rst +121 -0
- pygeai/_docs/source/content/cli.rst +203 -0
- pygeai/_docs/source/content/debugger.rst +651 -0
- pygeai/_docs/source/content/intro.rst +67 -0
- pygeai/_docs/source/content/migration.rst +929 -0
- pygeai/_docs/source/content/modules.rst +7 -0
- pygeai/_docs/source/content/quickstart.rst +143 -0
- pygeai/_docs/source/content/samples.rst +394 -0
- pygeai/_docs/source/index.rst +75 -0
- pygeai/_docs/source/modules.rst +7 -0
- pygeai/_docs/source/pygeai.admin.rst +29 -0
- pygeai/_docs/source/pygeai.analytics.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
- pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
- pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.rst +55 -0
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.chat.rst +69 -0
- pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
- pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
- pygeai/_docs/source/pygeai.cli.rst +62 -0
- pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
- pygeai/_docs/source/pygeai.core.base.rst +53 -0
- pygeai/_docs/source/pygeai.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
- pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
- pygeai/_docs/source/pygeai.core.files.rst +61 -0
- pygeai/_docs/source/pygeai.core.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
- pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
- pygeai/_docs/source/pygeai.core.rst +63 -0
- pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.rst +37 -0
- pygeai/_docs/source/pygeai.core.utils.rst +37 -0
- pygeai/_docs/source/pygeai.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.rst +31 -0
- pygeai/_docs/source/pygeai.flows.rst +29 -0
- pygeai/_docs/source/pygeai.gam.rst +29 -0
- pygeai/_docs/source/pygeai.health.rst +29 -0
- pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
- pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
- pygeai/_docs/source/pygeai.lab.rst +65 -0
- pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
- pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
- pygeai/_docs/source/pygeai.man.man1.rst +10 -0
- pygeai/_docs/source/pygeai.man.rst +18 -0
- pygeai/_docs/source/pygeai.migration.rst +29 -0
- pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
- pygeai/_docs/source/pygeai.organization.rst +61 -0
- pygeai/_docs/source/pygeai.proxy.rst +53 -0
- pygeai/_docs/source/pygeai.rst +35 -0
- pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
- pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
- pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
- pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
- pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
- pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
- pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
- pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
- pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
- pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.rst +39 -0
- pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
- pygeai/_docs/source/pygeai.tests.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.gam.rst +21 -0
- pygeai/_docs/source/pygeai.tests.health.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
- pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
- pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
- pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
- pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
- pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
- pygeai/_docs/source/pygeai.tests.rst +33 -0
- pygeai/admin/clients.py +14 -11
- pygeai/admin/endpoints.py +2 -2
- pygeai/analytics/clients.py +505 -0
- pygeai/analytics/endpoints.py +35 -0
- pygeai/analytics/managers.py +606 -0
- pygeai/analytics/mappers.py +207 -0
- pygeai/analytics/responses.py +240 -0
- pygeai/assistant/clients.py +48 -57
- pygeai/assistant/data/__init__.py +0 -0
- pygeai/assistant/data/clients.py +15 -0
- pygeai/assistant/data_analyst/__init__.py +0 -0
- pygeai/assistant/data_analyst/clients.py +75 -0
- pygeai/assistant/data_analyst/endpoints.py +2 -0
- pygeai/assistant/endpoints.py +0 -2
- pygeai/assistant/managers.py +738 -0
- pygeai/assistant/mappers.py +153 -0
- pygeai/assistant/rag/clients.py +132 -21
- pygeai/assistant/rag/mappers.py +228 -0
- pygeai/assistant/rag/models.py +396 -0
- pygeai/assistant/rag/responses.py +10 -0
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +406 -31
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +17 -0
- pygeai/chat/managers.py +64 -0
- pygeai/chat/session.py +38 -0
- pygeai/chat/settings.py +6 -0
- pygeai/chat/ui.py +678 -0
- pygeai/cli/__init__.py +0 -1
- pygeai/cli/commands/admin.py +9 -12
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +11 -11
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +201 -7
- pygeai/cli/commands/chat.py +875 -14
- pygeai/cli/commands/common.py +30 -26
- pygeai/cli/commands/configuration.py +84 -9
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +187 -0
- pygeai/cli/commands/evaluation.py +2069 -0
- pygeai/cli/commands/feedback.py +93 -0
- pygeai/cli/commands/files.py +312 -0
- pygeai/cli/commands/flows/__init__.py +0 -0
- pygeai/cli/commands/gam.py +349 -0
- pygeai/cli/commands/lab/__init__.py +0 -0
- pygeai/cli/commands/lab/ai_lab.py +4110 -0
- pygeai/cli/commands/lab/common.py +135 -0
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/spec.py +273 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/commands/llm.py +164 -0
- pygeai/cli/commands/migrate.py +1198 -0
- pygeai/cli/commands/options.py +86 -0
- pygeai/cli/commands/organization.py +560 -98
- pygeai/cli/commands/rag.py +306 -10
- pygeai/cli/commands/rerank.py +108 -0
- pygeai/cli/commands/secrets.py +357 -0
- pygeai/cli/commands/usage_limits.py +583 -0
- pygeai/cli/commands/validators.py +209 -0
- pygeai/cli/commands/version.py +44 -0
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +171 -30
- pygeai/cli/geai_proxy.py +318 -0
- pygeai/cli/install_man.py +107 -0
- pygeai/cli/parsers.py +78 -25
- pygeai/cli/texts/help.py +712 -55
- pygeai/core/__init__.py +9 -1
- pygeai/core/base/clients.py +61 -10
- pygeai/core/base/mappers.py +208 -30
- pygeai/core/base/models.py +8 -308
- pygeai/core/base/responses.py +18 -1
- pygeai/core/base/session.py +110 -17
- pygeai/core/common/config.py +98 -16
- pygeai/core/common/decorators.py +44 -0
- pygeai/core/common/exceptions.py +104 -4
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +93 -0
- pygeai/core/embeddings/endpoints.py +1 -0
- pygeai/core/embeddings/managers.py +62 -0
- pygeai/core/embeddings/mappers.py +52 -0
- pygeai/core/embeddings/models.py +14 -0
- pygeai/core/embeddings/responses.py +31 -0
- pygeai/core/feedback/__init__.py +0 -0
- pygeai/core/feedback/clients.py +50 -0
- pygeai/core/feedback/endpoints.py +1 -0
- pygeai/core/feedback/models.py +10 -0
- pygeai/core/files/__init__.py +0 -0
- pygeai/core/files/clients.py +156 -0
- pygeai/core/files/endpoints.py +5 -0
- pygeai/core/files/managers.py +224 -0
- pygeai/core/files/mappers.py +44 -0
- pygeai/core/files/models.py +24 -0
- pygeai/core/files/responses.py +19 -0
- pygeai/core/handlers.py +32 -0
- pygeai/core/llm/__init__.py +0 -0
- pygeai/core/llm/clients.py +53 -0
- pygeai/core/llm/endpoints.py +4 -0
- pygeai/core/models.py +799 -0
- pygeai/core/plugins/__init__.py +0 -0
- pygeai/core/plugins/clients.py +32 -0
- pygeai/core/plugins/endpoints.py +1 -0
- pygeai/core/plugins/models.py +86 -0
- pygeai/core/rerank/__init__.py +0 -0
- pygeai/core/rerank/clients.py +35 -0
- pygeai/core/rerank/endpoints.py +1 -0
- pygeai/core/rerank/managers.py +47 -0
- pygeai/core/rerank/mappers.py +23 -0
- pygeai/core/rerank/models.py +27 -0
- pygeai/core/responses.py +104 -0
- pygeai/core/secrets/__init__.py +0 -0
- pygeai/core/secrets/clients.py +212 -0
- pygeai/core/secrets/endpoints.py +7 -0
- pygeai/core/services/llm/__init__.py +0 -0
- pygeai/core/services/llm/model.py +186 -0
- pygeai/core/services/llm/providers.py +15 -0
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +311 -89
- pygeai/core/utils/__init__.py +0 -0
- pygeai/core/utils/console.py +83 -0
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +870 -0
- pygeai/evaluation/__init__.py +0 -0
- pygeai/evaluation/clients.py +19 -0
- pygeai/evaluation/dataset/__init__.py +0 -0
- pygeai/evaluation/dataset/clients.py +514 -0
- pygeai/evaluation/dataset/endpoints.py +26 -0
- pygeai/evaluation/plan/__init__.py +0 -0
- pygeai/evaluation/plan/clients.py +302 -0
- pygeai/evaluation/plan/endpoints.py +16 -0
- pygeai/evaluation/result/__init__.py +0 -0
- pygeai/evaluation/result/clients.py +70 -0
- pygeai/evaluation/result/endpoints.py +2 -0
- pygeai/flows/__init__.py +0 -0
- pygeai/flows/endpoints.py +362 -0
- pygeai/flows/models.py +1304 -0
- pygeai/gam/__init__.py +0 -0
- pygeai/gam/clients.py +178 -0
- pygeai/gam/endpoints.py +4 -0
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -0
- pygeai/lab/agents/__init__.py +0 -0
- pygeai/lab/agents/clients.py +426 -0
- pygeai/lab/agents/endpoints.py +12 -0
- pygeai/lab/agents/mappers.py +319 -0
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +1558 -0
- pygeai/lab/models.py +1719 -0
- pygeai/lab/processes/__init__.py +0 -0
- pygeai/lab/processes/clients.py +1051 -0
- pygeai/lab/processes/endpoints.py +26 -0
- pygeai/lab/processes/mappers.py +395 -0
- pygeai/lab/runners.py +90 -0
- pygeai/lab/spec/__init__.py +0 -0
- pygeai/lab/spec/loader.py +24 -0
- pygeai/lab/spec/parsers.py +39 -0
- pygeai/lab/strategies/__init__.py +0 -0
- pygeai/lab/strategies/clients.py +212 -0
- pygeai/lab/strategies/endpoints.py +5 -0
- pygeai/lab/strategies/mappers.py +58 -0
- pygeai/lab/tools/__init__.py +0 -0
- pygeai/lab/tools/clients.py +465 -0
- pygeai/lab/tools/endpoints.py +13 -0
- pygeai/lab/tools/mappers.py +131 -0
- pygeai/man/__init__.py +1 -0
- pygeai/man/man1/__init__.py +1 -0
- pygeai/man/man1/geai-proxy.1 +246 -0
- pygeai/man/man1/geai.1 +2615 -0
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +603 -0
- pygeai/migration/tools.py +180 -0
- pygeai/organization/clients.py +246 -18
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/__init__.py +0 -0
- pygeai/organization/limits/clients.py +281 -0
- pygeai/organization/limits/endpoints.py +15 -0
- pygeai/organization/limits/managers.py +331 -0
- pygeai/organization/limits/mappers.py +21 -0
- pygeai/organization/managers.py +537 -0
- pygeai/organization/mappers.py +111 -46
- pygeai/organization/responses.py +61 -11
- pygeai/proxy/__init__.py +0 -0
- pygeai/proxy/clients.py +216 -0
- pygeai/proxy/config.py +128 -0
- pygeai/proxy/managers.py +232 -0
- pygeai/proxy/servers.py +304 -0
- pygeai/proxy/tool.py +69 -0
- pygeai/tests/admin/__init__.py +0 -0
- pygeai/tests/admin/test_clients.py +148 -0
- pygeai/tests/analytics/__init__.py +0 -0
- pygeai/tests/analytics/test_clients.py +86 -0
- pygeai/tests/analytics/test_managers.py +94 -0
- pygeai/tests/analytics/test_mappers.py +84 -0
- pygeai/tests/analytics/test_responses.py +73 -0
- pygeai/tests/assistants/rag/__init__.py +0 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_mappers.py +189 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -80
- pygeai/tests/assistants/test_managers.py +198 -0
- pygeai/tests/assistants/test_mappers.py +111 -0
- pygeai/tests/auth/__init__.py +0 -0
- pygeai/tests/auth/test_clients.py +289 -0
- pygeai/tests/auth/test_oauth.py +172 -0
- pygeai/tests/auth/test_session_logging.py +150 -0
- pygeai/tests/chat/__init__.py +0 -0
- pygeai/tests/chat/test_clients.py +393 -0
- pygeai/tests/chat/test_iris.py +38 -0
- pygeai/tests/chat/test_session.py +62 -0
- pygeai/tests/chat/test_ui.py +224 -0
- pygeai/tests/cli/__init__.py +0 -0
- pygeai/tests/cli/commands/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
- pygeai/tests/cli/commands/lab/test_common.py +208 -0
- pygeai/tests/cli/commands/lab/test_spec.py +246 -0
- pygeai/tests/cli/commands/test_assistant.py +202 -0
- pygeai/tests/cli/commands/test_chat.py +130 -0
- pygeai/tests/cli/commands/test_common.py +350 -0
- pygeai/tests/cli/commands/test_embeddings.py +132 -0
- pygeai/tests/cli/commands/test_evaluation.py +656 -0
- pygeai/tests/cli/commands/test_feedback.py +65 -0
- pygeai/tests/cli/commands/test_files.py +161 -0
- pygeai/tests/cli/commands/test_gam.py +201 -0
- pygeai/tests/cli/commands/test_llm.py +114 -0
- pygeai/tests/cli/commands/test_migrate.py +176 -0
- pygeai/tests/cli/commands/test_organization.py +276 -0
- pygeai/tests/cli/commands/test_rag.py +266 -0
- pygeai/tests/cli/commands/test_rerank.py +110 -0
- pygeai/tests/cli/commands/test_secrets.py +171 -0
- pygeai/tests/cli/commands/test_show_help.py +41 -0
- pygeai/tests/cli/commands/test_usage_limits.py +412 -0
- pygeai/tests/cli/commands/test_validators.py +160 -0
- pygeai/tests/cli/commands/test_version.py +81 -0
- pygeai/tests/cli/docker/__init__.py +0 -0
- pygeai/tests/cli/test_credentials_flag.py +316 -0
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +154 -0
- pygeai/tests/core/base/__init__.py +0 -0
- pygeai/tests/core/base/data/__init__.py +0 -0
- pygeai/tests/core/base/data/mappers.py +117 -0
- pygeai/tests/core/base/data/models.py +312 -0
- pygeai/tests/core/base/test_mappers.py +569 -0
- pygeai/tests/core/base/test_models.py +261 -0
- pygeai/tests/core/base/test_responses.py +53 -0
- pygeai/tests/core/common/__init__.py +0 -0
- pygeai/tests/core/common/data/__init__.py +0 -0
- pygeai/tests/core/common/test_config.py +186 -0
- pygeai/tests/core/common/test_decorators.py +69 -0
- pygeai/tests/core/embeddings/__init__.py +0 -0
- pygeai/tests/core/embeddings/test_clients.py +225 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/__init__.py +0 -0
- pygeai/tests/core/feedback/test_clients.py +64 -0
- pygeai/tests/core/files/__init__.py +0 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +219 -0
- pygeai/tests/core/files/test_mappers.py +137 -0
- pygeai/tests/core/files/test_models.py +103 -0
- pygeai/tests/core/files/test_responses.py +122 -0
- pygeai/tests/core/llm/__init__.py +0 -0
- pygeai/tests/core/llm/test_clients.py +142 -0
- pygeai/tests/core/plugins/__init__.py +0 -0
- pygeai/tests/core/plugins/test_clients.py +66 -0
- pygeai/tests/core/rerank/__init__.py +0 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +99 -0
- pygeai/tests/core/rerank/test_mappers.py +54 -0
- pygeai/tests/core/secrets/__init__.py +0 -0
- pygeai/tests/core/secrets/test_clients.py +264 -0
- pygeai/tests/core/services/__init__.py +0 -0
- pygeai/tests/core/services/test_rest.py +273 -0
- pygeai/tests/core/test_handlers.py +66 -0
- pygeai/tests/core/utils/__init__.py +0 -0
- pygeai/tests/core/utils/test_console.py +80 -0
- pygeai/tests/dbg/__init__.py +0 -0
- pygeai/tests/dbg/test_debugger.py +591 -0
- pygeai/tests/evaluation/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/test_clients.py +265 -0
- pygeai/tests/evaluation/plan/__init__.py +0 -0
- pygeai/tests/evaluation/plan/test_clients.py +195 -0
- pygeai/tests/evaluation/result/__init__.py +0 -0
- pygeai/tests/evaluation/result/test_clients.py +66 -0
- pygeai/tests/gam/__init__.py +0 -0
- pygeai/tests/gam/test_clients.py +195 -0
- pygeai/tests/health/__init__.py +0 -0
- pygeai/tests/health/test_clients.py +41 -0
- pygeai/tests/integration/__init__.py +0 -0
- pygeai/tests/integration/assistants/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/test_create_rag.py +91 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +158 -0
- pygeai/tests/integration/lab/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
- pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
- pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
- pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
- pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
- pygeai/tests/integration/lab/processes/__init__.py +0 -0
- pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
- pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
- pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
- pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
- pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
- pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
- pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
- pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
- pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
- pygeai/tests/lab/__init__.py +0 -0
- pygeai/tests/lab/agents/__init__.py +0 -0
- pygeai/tests/lab/agents/test_clients.py +481 -0
- pygeai/tests/lab/agents/test_mappers.py +440 -0
- pygeai/tests/lab/processes/__init__.py +0 -0
- pygeai/tests/lab/processes/test_clients.py +1416 -0
- pygeai/tests/lab/processes/test_mappers.py +1092 -0
- pygeai/tests/lab/spec/__init__.py +0 -0
- pygeai/tests/lab/spec/test_loader.py +59 -0
- pygeai/tests/lab/spec/test_parsers.py +182 -0
- pygeai/tests/lab/strategies/__init__.py +0 -0
- pygeai/tests/lab/strategies/test_clients.py +241 -0
- pygeai/tests/lab/strategies/test_mappers.py +132 -0
- pygeai/tests/lab/test_managers.py +553 -0
- pygeai/tests/lab/test_mappers.py +245 -0
- pygeai/tests/lab/test_models.py +1154 -0
- pygeai/tests/lab/tools/__init__.py +0 -0
- pygeai/tests/lab/tools/test_clients.py +521 -0
- pygeai/tests/lab/tools/test_mappers.py +198 -0
- pygeai/tests/migration/__init__.py +0 -0
- pygeai/tests/migration/test_strategies.py +405 -0
- pygeai/tests/migration/test_tools.py +159 -0
- pygeai/tests/organization/limits/__init__.py +0 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +402 -0
- pygeai/tests/organization/test_clients.py +615 -64
- pygeai/tests/organization/test_managers.py +424 -0
- pygeai/tests/organization/test_mappers.py +153 -0
- pygeai/tests/organization/test_responses.py +137 -0
- pygeai/tests/proxy/__init__.py +1 -0
- pygeai/tests/proxy/test_clients.py +397 -0
- pygeai/tests/proxy/test_config.py +171 -0
- pygeai/tests/proxy/test_integration.py +305 -0
- pygeai/tests/proxy/test_managers.py +312 -0
- pygeai/tests/proxy/test_servers.py +387 -0
- pygeai/tests/proxy/test_tool.py +176 -0
- pygeai/tests/snippets/__init__.py +0 -0
- pygeai/tests/snippets/analytics/__init__.py +0 -0
- pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
- pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
- pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
- pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
- pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
- pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
- pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
- pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
- pygeai/tests/snippets/analytics/get_total_tokens.py +12 -0
- pygeai/tests/snippets/assistants/__init__.py +0 -0
- pygeai/tests/snippets/assistants/create_chat_assistant.py +54 -0
- pygeai/tests/snippets/assistants/create_text_assistant.py +51 -0
- pygeai/tests/snippets/assistants/data_analyst/__init__.py +0 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +100 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +9 -0
- pygeai/tests/snippets/assistants/data_analyst/get_status.py +9 -0
- pygeai/tests/snippets/assistants/file_summarizer_assistant.py +149 -0
- pygeai/tests/snippets/assistants/get_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/get_assistant_list.py +7 -0
- pygeai/tests/snippets/assistants/rag/__init__.py +0 -0
- pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +65 -0
- pygeai/tests/snippets/assistants/rag/delete_al_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/delete_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +8 -0
- pygeai/tests/snippets/assistants/rag/get_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/get_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +48 -0
- pygeai/tests/snippets/assistants/rag/upload_document.py +19 -0
- pygeai/tests/snippets/assistants/send_feedback.py +14 -0
- pygeai/tests/snippets/assistants/update_chat_assistant.py +63 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/__init__.py +0 -0
- pygeai/tests/snippets/chat/cancel_request.py +7 -0
- pygeai/tests/snippets/chat/chat_completion.py +28 -0
- pygeai/tests/snippets/chat/chat_completion_1.py +40 -0
- pygeai/tests/snippets/chat/chat_completion_2.py +60 -0
- pygeai/tests/snippets/chat/chat_completion_3.py +27 -0
- pygeai/tests/snippets/chat/chat_completion_4.py +67 -0
- pygeai/tests/snippets/chat/chat_completion_streaming.py +63 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_request_status.py +7 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_complete_example.py +67 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_instructions.py +19 -0
- pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
- pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
- pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
- pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -0
- pygeai/tests/snippets/chat/send_chat_request.py +33 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/file_debugging.py +72 -0
- pygeai/tests/snippets/dbg/module_debugging.py +61 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/__init__.py +0 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/generate_embeddings.py +26 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/files/__init__.py +0 -0
- pygeai/tests/snippets/files/delete_file.py +9 -0
- pygeai/tests/snippets/files/get_file_content.py +10 -0
- pygeai/tests/snippets/files/get_file_data.py +9 -0
- pygeai/tests/snippets/files/get_file_list.py +6 -0
- pygeai/tests/snippets/files/upload_file.py +13 -0
- pygeai/tests/snippets/gam/__init__.py +0 -0
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/__init__.py +0 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +326 -0
- pygeai/tests/snippets/lab/agentic_flow_example_2.py +206 -0
- pygeai/tests/snippets/lab/agentic_flow_example_3.py +486 -0
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +446 -0
- pygeai/tests/snippets/lab/agents/__init__.py +0 -0
- pygeai/tests/snippets/lab/agents/create_agent.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_2.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/delete_agent.py +12 -0
- pygeai/tests/snippets/lab/agents/get_agent.py +24 -0
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +13 -0
- pygeai/tests/snippets/lab/agents/list_agents.py +18 -0
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +12 -0
- pygeai/tests/snippets/lab/agents/update_agent.py +50 -0
- pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
- pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
- pygeai/tests/snippets/lab/crud_ui.py +462 -0
- pygeai/tests/snippets/lab/processes/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/create_process.py +24 -0
- pygeai/tests/snippets/lab/processes/create_task.py +8 -0
- pygeai/tests/snippets/lab/processes/jobs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +21 -0
- pygeai/tests/snippets/lab/processes/kbs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +18 -0
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +26 -0
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +30 -0
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +73 -0
- pygeai/tests/snippets/lab/processes/list_processes.py +10 -0
- pygeai/tests/snippets/lab/runner_1.py +212 -0
- pygeai/tests/snippets/lab/samples/__init__.py +0 -0
- pygeai/tests/snippets/lab/samples/summarize_files.py +162 -0
- pygeai/tests/snippets/lab/strategies/__init__.py +0 -0
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +22 -0
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +10 -0
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +16 -0
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +26 -0
- pygeai/tests/snippets/lab/tools/__init__.py +0 -0
- pygeai/tests/snippets/lab/tools/create_tool.py +48 -0
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +21 -0
- pygeai/tests/snippets/lab/tools/get_parameter.py +21 -0
- pygeai/tests/snippets/lab/tools/get_tool.py +22 -0
- pygeai/tests/snippets/lab/tools/list_tools.py +23 -0
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +13 -0
- pygeai/tests/snippets/lab/tools/set_parameters.py +33 -0
- pygeai/tests/snippets/lab/tools/update_tool.py +52 -0
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +238 -0
- pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
- pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
- pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
- pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +157 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +157 -0
- pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
- pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/__init__.py +0 -0
- pygeai/tests/snippets/organization/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +23 -0
- pygeai/tests/snippets/organization/delete_project.py +7 -0
- pygeai/tests/snippets/organization/export_request_data.py +7 -0
- pygeai/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_data.py +7 -0
- pygeai/tests/snippets/organization/get_project_list.py +8 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- pygeai/tests/snippets/organization/get_project_tokens.py +7 -0
- pygeai/tests/snippets/organization/update_project.py +14 -0
- pygeai/tests/snippets/rerank/__init__.py +0 -0
- pygeai/tests/snippets/rerank/rerank_chunks.py +19 -0
- pygeai/tests/snippets/secrets/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/delete_usage_limit.py +16 -0
- pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +12 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +11 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +13 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +22 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +24 -0
- pygeai/vendor/a2a/__init__.py +1 -0
- pygeai/vendor/a2a/auth/__init__.py +0 -0
- pygeai/vendor/a2a/auth/user.py +31 -0
- pygeai/vendor/a2a/client/__init__.py +19 -0
- pygeai/vendor/a2a/client/client.py +425 -0
- pygeai/vendor/a2a/client/errors.py +33 -0
- pygeai/vendor/a2a/client/helpers.py +22 -0
- pygeai/vendor/a2a/py.typed +0 -0
- pygeai/vendor/a2a/server/__init__.py +1 -0
- pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
- pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
- pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
- pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
- pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
- pygeai/vendor/a2a/server/apps/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
- pygeai/vendor/a2a/server/context.py +23 -0
- pygeai/vendor/a2a/server/events/__init__.py +21 -0
- pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
- pygeai/vendor/a2a/server/events/event_queue.py +156 -0
- pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
- pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
- pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
- pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
- pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
- pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
- pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
- pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
- pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
- pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
- pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
- pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
- pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
- pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
- pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
- pygeai/vendor/a2a/types.py +1624 -0
- pygeai/vendor/a2a/utils/__init__.py +40 -0
- pygeai/vendor/a2a/utils/artifact.py +72 -0
- pygeai/vendor/a2a/utils/errors.py +69 -0
- pygeai/vendor/a2a/utils/helpers.py +176 -0
- pygeai/vendor/a2a/utils/message.py +83 -0
- pygeai/vendor/a2a/utils/task.py +57 -0
- pygeai/vendor/a2a/utils/telemetry.py +299 -0
- pygeai-0.6.0b15.dist-info/METADATA +205 -0
- pygeai-0.6.0b15.dist-info/RECORD +799 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- pygeai-0.6.0b15.dist-info/entry_points.txt +5 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info/licenses}/LICENSE +13 -1
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/top_level.txt +0 -1
- docs/source/conf.py +0 -45
- pygeai/core/clients.py +0 -240
- pygeai/tests/core/test_clients.py +0 -49
- pygeai-0.1.6.dist-info/METADATA +0 -92
- pygeai-0.1.6.dist-info/RECORD +0 -65
- pygeai-0.1.6.dist-info/SOURCES.sync-conflict-20241223-145950-3QD4F42.txt +0 -41
- pygeai-0.1.6.dist-info/entry_points.txt +0 -2
- /pygeai/{agent → analytics}/__init__.py +0 -0
pygeai/gam/__init__.py
ADDED
|
File without changes
|
pygeai/gam/clients.py
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
|
|
2
|
+
from pygeai import logger
|
|
3
|
+
from pygeai.core.base.clients import BaseClient
|
|
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
|
|
7
|
+
from pygeai.gam.endpoints import GET_ACCESS_TOKEN_V2, GET_USER_INFO_V2, IDP_SIGNIN_V1
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class GAMClient(BaseClient):
|
|
11
|
+
|
|
12
|
+
def generate_signing_url(
|
|
13
|
+
self,
|
|
14
|
+
client_id: str = None,
|
|
15
|
+
redirect_uri: str = None,
|
|
16
|
+
scope: str = "gam_user_data",
|
|
17
|
+
state: str = None,
|
|
18
|
+
response_type: str = "code"
|
|
19
|
+
):
|
|
20
|
+
"""
|
|
21
|
+
Generates the URL for the GAM OAuth 2.0 signin endpoint to initiate user authentication.
|
|
22
|
+
This method does not perform the signin itself but provides the URL for redirection in a browser-based flow.
|
|
23
|
+
|
|
24
|
+
:param client_id: str - Client ID of the application. Required.
|
|
25
|
+
:param redirect_uri: str - Callback URL configured in the application. Required.
|
|
26
|
+
:param scope: str - Scope of the user account to access (e.g., "gam_user_data").
|
|
27
|
+
Defaults to "gam_user_data".
|
|
28
|
+
:param state: str - Random string to store the status before the request. Required.
|
|
29
|
+
:param response_type: str - Response type for the signin request. Defaults to "code".
|
|
30
|
+
:return: str - The URL to redirect to for user authentication in a browser.
|
|
31
|
+
:raises MissingRequirementException: If required parameters are missing.
|
|
32
|
+
"""
|
|
33
|
+
if not all([client_id, redirect_uri, state]):
|
|
34
|
+
raise MissingRequirementException("client_id, redirect_uri, and state are required.")
|
|
35
|
+
|
|
36
|
+
params = {
|
|
37
|
+
"response_type": response_type,
|
|
38
|
+
"client_id": client_id,
|
|
39
|
+
"redirect_uri": redirect_uri,
|
|
40
|
+
"state": state
|
|
41
|
+
}
|
|
42
|
+
if scope:
|
|
43
|
+
params["scope"] = scope
|
|
44
|
+
|
|
45
|
+
endpoint = f"{self.api_service.base_url}{IDP_SIGNIN_V1}"
|
|
46
|
+
redirect_url = f"{endpoint}?{'&'.join(f'{k}={v}' for k, v in params.items())}"
|
|
47
|
+
return redirect_url
|
|
48
|
+
|
|
49
|
+
def get_access_token(
|
|
50
|
+
self,
|
|
51
|
+
client_id: str = None,
|
|
52
|
+
client_secret: str = None,
|
|
53
|
+
grant_type: str = "password",
|
|
54
|
+
authentication_type_name: str = "local",
|
|
55
|
+
scope: str = "gam_user_data",
|
|
56
|
+
username: str = None,
|
|
57
|
+
password: str = None,
|
|
58
|
+
initial_properties: dict = None,
|
|
59
|
+
repository: str = None,
|
|
60
|
+
request_token_type: str = "OAuth"
|
|
61
|
+
):
|
|
62
|
+
"""
|
|
63
|
+
Retrieves an access token by sending a POST request to the GAM OAuth 2.0 access token endpoint.
|
|
64
|
+
|
|
65
|
+
:param client_id: str - Application Client ID. Required.
|
|
66
|
+
:param client_secret: str - Application Client Secret. Required.
|
|
67
|
+
:param grant_type: str - Grant type for authentication. Must be "password". Defaults to "password".
|
|
68
|
+
:param authentication_type_name: str - Authentication type name. Defaults to "local".
|
|
69
|
+
:param scope: str - Scope of the user account to access (e.g., "gam_user_data+gam_user_roles").
|
|
70
|
+
Defaults to "gam_user_data".
|
|
71
|
+
:param username: str - Username of the user to be authenticated. Required.
|
|
72
|
+
:param password: str - Password of the user to be authenticated. Required.
|
|
73
|
+
:param initial_properties: dict - User custom properties array (e.g., [{"Id":"Company","Value":"GeneXus"}]). Optional.
|
|
74
|
+
:param repository: str - Repository identifier, used only if IDP is multitenant. Optional.
|
|
75
|
+
:param request_token_type: str - Determines the token type to return and security policy.
|
|
76
|
+
Options are "OAuth" or "Web". Defaults to "OAuth".
|
|
77
|
+
:return: dict or str - Access token response containing access_token, token_type, expires_in,
|
|
78
|
+
refresh_token, scope, and user_guid; returns raw text if JSON parsing fails.
|
|
79
|
+
"""
|
|
80
|
+
data = {
|
|
81
|
+
"grant_type": grant_type,
|
|
82
|
+
"authentication_type_name": authentication_type_name,
|
|
83
|
+
"scope": scope,
|
|
84
|
+
"request_token_type": request_token_type
|
|
85
|
+
}
|
|
86
|
+
if client_id is not None:
|
|
87
|
+
data["client_id"] = client_id
|
|
88
|
+
if client_secret is not None:
|
|
89
|
+
data["client_secret"] = client_secret
|
|
90
|
+
if username is not None:
|
|
91
|
+
data["username"] = username
|
|
92
|
+
if password is not None:
|
|
93
|
+
data["password"] = password
|
|
94
|
+
if initial_properties is not None:
|
|
95
|
+
data["initial_properties"] = initial_properties
|
|
96
|
+
if repository is not None:
|
|
97
|
+
data["repository"] = repository
|
|
98
|
+
|
|
99
|
+
headers = {
|
|
100
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
101
|
+
}
|
|
102
|
+
response = self.api_service.post(
|
|
103
|
+
endpoint=GET_ACCESS_TOKEN_V2,
|
|
104
|
+
data=data,
|
|
105
|
+
headers=headers,
|
|
106
|
+
form=True
|
|
107
|
+
)
|
|
108
|
+
validate_status_code(response)
|
|
109
|
+
return parse_json_response(response, "get access token")
|
|
110
|
+
|
|
111
|
+
def get_user_info(
|
|
112
|
+
self,
|
|
113
|
+
access_token: str
|
|
114
|
+
):
|
|
115
|
+
"""
|
|
116
|
+
Retrieves user information by sending a GET request to the GAM OAuth 2.0 userinfo endpoint.
|
|
117
|
+
|
|
118
|
+
:param access_token: str - Access token obtained from the access_token endpoint. Required.
|
|
119
|
+
:return: dict or str - User information response containing guid, username, email, and other user
|
|
120
|
+
details based on requested scopes; returns raw text if JSON parsing fails.
|
|
121
|
+
"""
|
|
122
|
+
headers = {
|
|
123
|
+
"Authorization": access_token,
|
|
124
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
125
|
+
}
|
|
126
|
+
response = self.api_service.get(
|
|
127
|
+
endpoint=GET_USER_INFO_V2,
|
|
128
|
+
headers=headers
|
|
129
|
+
)
|
|
130
|
+
validate_status_code(response)
|
|
131
|
+
return parse_json_response(response, "get user info")
|
|
132
|
+
|
|
133
|
+
def refresh_access_token(
|
|
134
|
+
self,
|
|
135
|
+
client_id: str = None,
|
|
136
|
+
client_secret: str = None,
|
|
137
|
+
grant_type: str = "refresh_token",
|
|
138
|
+
refresh_token: str = None
|
|
139
|
+
):
|
|
140
|
+
"""
|
|
141
|
+
Refreshes an access token by sending a GET request to the GAM OAuth 2.0 access token endpoint.
|
|
142
|
+
|
|
143
|
+
:param client_id: str - Application Client ID. Required.
|
|
144
|
+
:param client_secret: str - Application Client Secret. Required.
|
|
145
|
+
:param grant_type: str - Grant type for authentication. Must be "refresh_token". Defaults to "refresh_token".
|
|
146
|
+
:param refresh_token: str - Refresh token obtained from a previous access token response. Required.
|
|
147
|
+
:return: dict or str - New access token response containing access_token, token_type, expires_in,
|
|
148
|
+
refresh_token, scope, and user_guid; returns raw text if JSON parsing fails.
|
|
149
|
+
"""
|
|
150
|
+
data = {
|
|
151
|
+
"grant_type": grant_type,
|
|
152
|
+
}
|
|
153
|
+
if client_id is not None:
|
|
154
|
+
data["client_id"] = client_id
|
|
155
|
+
if client_secret is not None:
|
|
156
|
+
data["client_secret"] = client_secret
|
|
157
|
+
if refresh_token is not None:
|
|
158
|
+
data["refresh_token"] = refresh_token
|
|
159
|
+
|
|
160
|
+
headers = {
|
|
161
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
162
|
+
}
|
|
163
|
+
response = self.api_service.post(
|
|
164
|
+
endpoint=GET_ACCESS_TOKEN_V2,
|
|
165
|
+
data=data,
|
|
166
|
+
headers=headers,
|
|
167
|
+
form=True
|
|
168
|
+
)
|
|
169
|
+
validate_status_code(response)
|
|
170
|
+
return parse_json_response(response, "refresh access token")
|
|
171
|
+
|
|
172
|
+
def get_authentication_types(self):
|
|
173
|
+
response = self.api_service.get(
|
|
174
|
+
endpoint=GET_ACCESS_TOKEN_V2,
|
|
175
|
+
params={},
|
|
176
|
+
)
|
|
177
|
+
validate_status_code(response)
|
|
178
|
+
return parse_json_response(response, "get authentication types")
|
pygeai/gam/endpoints.py
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
GET_ACCESS_TOKEN_V2 = "oauth/gam/v2.0/access_token" # POST -> Sends the user credentials to get a new Token
|
|
2
|
+
GET_USER_INFO_V2 = "oauth/gam/v2.0/userinfo" # GET -> Send the access_token obtained in the previous request and get the user info depending on the scopes you have indicated.
|
|
3
|
+
GET_AUTHENTICATION_TYPES_V1 = "v1/gam/authentication-types" # GET -> Get authentication types
|
|
4
|
+
IDP_SIGNIN_V1 = "/oauth/gam/signin" # NO METHOD -> Just generates URL for authentication in browser
|
|
File without changes
|
pygeai/health/clients.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
from pygeai import logger
|
|
3
|
+
from pygeai.core.base.clients import BaseClient
|
|
4
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
6
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
7
|
+
from pygeai.health.endpoints import STATUS_CHECK_V1
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class HealthClient(BaseClient):
|
|
11
|
+
|
|
12
|
+
def check_api_status(self) -> dict:
|
|
13
|
+
"""
|
|
14
|
+
Checks the status of the API.
|
|
15
|
+
|
|
16
|
+
:return: dict - The API response as a JSON object containing details about the API status.
|
|
17
|
+
If the response cannot be parsed as JSON, returns the raw response text.
|
|
18
|
+
"""
|
|
19
|
+
endpoint = STATUS_CHECK_V1
|
|
20
|
+
response = self.api_service.get(
|
|
21
|
+
endpoint=endpoint
|
|
22
|
+
)
|
|
23
|
+
validate_status_code(response)
|
|
24
|
+
return parse_json_response(response, "check API status")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
STATUS_CHECK_V1 = "/v1/system/status" # GET -> Health Check SAIA APIs
|
pygeai/lab/__init__.py
ADDED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
from typing import Optional, List, Dict
|
|
2
|
+
|
|
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
|
|
7
|
+
from pygeai.lab.agents.endpoints import CREATE_AGENT_V2, LIST_AGENTS_V2, GET_AGENT_V2, CREATE_SHARING_LINK_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
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AgentClient(AILabClient):
|
|
14
|
+
|
|
15
|
+
def list_agents(
|
|
16
|
+
self,
|
|
17
|
+
status: str = "",
|
|
18
|
+
start: int = "",
|
|
19
|
+
count: int = "",
|
|
20
|
+
access_scope: str = "public",
|
|
21
|
+
allow_drafts: bool = True,
|
|
22
|
+
allow_external: bool = False
|
|
23
|
+
) -> dict:
|
|
24
|
+
"""
|
|
25
|
+
Retrieves a list of agents associated with the specified project.
|
|
26
|
+
|
|
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.
|
|
35
|
+
"""
|
|
36
|
+
endpoint = LIST_AGENTS_V2
|
|
37
|
+
headers = {
|
|
38
|
+
"Authorization": self.api_service.token,
|
|
39
|
+
"ProjectId": self.project_id
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
logger.debug(f"Listing agents for project with ID {self.project_id}")
|
|
43
|
+
|
|
44
|
+
response = self.api_service.get(
|
|
45
|
+
endpoint=endpoint,
|
|
46
|
+
headers=headers,
|
|
47
|
+
params={
|
|
48
|
+
"status": status,
|
|
49
|
+
"start": start,
|
|
50
|
+
"count": count,
|
|
51
|
+
"accessScope": access_scope,
|
|
52
|
+
"allowDrafts": allow_drafts,
|
|
53
|
+
"allowExternal": allow_external
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
validate_status_code(response)
|
|
57
|
+
return parse_json_response(response, f"list agents for project {self.project_id}")
|
|
58
|
+
|
|
59
|
+
def create_agent(
|
|
60
|
+
self,
|
|
61
|
+
name: str,
|
|
62
|
+
access_scope: str,
|
|
63
|
+
public_name: str,
|
|
64
|
+
job_description: str,
|
|
65
|
+
avatar_image: str,
|
|
66
|
+
description: str,
|
|
67
|
+
agent_data_prompt: dict,
|
|
68
|
+
agent_data_llm_config: dict,
|
|
69
|
+
agent_data_strategy_name: str,
|
|
70
|
+
agent_data_models: list,
|
|
71
|
+
agent_data_resource_pools: Optional[List[Dict]] = None,
|
|
72
|
+
automatic_publish: bool = False
|
|
73
|
+
) -> dict:
|
|
74
|
+
"""
|
|
75
|
+
Creates a new agent in the specified project.
|
|
76
|
+
|
|
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.
|
|
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
|
+
|
|
96
|
+
data = {
|
|
97
|
+
"agentDefinition": {
|
|
98
|
+
"name": name,
|
|
99
|
+
"accessScope": access_scope,
|
|
100
|
+
"publicName": public_name,
|
|
101
|
+
"jobDescription": job_description,
|
|
102
|
+
"avatarImage": avatar_image,
|
|
103
|
+
"description": description,
|
|
104
|
+
}
|
|
105
|
+
}
|
|
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"] = {}
|
|
111
|
+
if agent_data_resource_pools is not None:
|
|
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}")
|
|
122
|
+
|
|
123
|
+
endpoint = CREATE_AGENT_V2
|
|
124
|
+
if automatic_publish:
|
|
125
|
+
endpoint = f"{endpoint}?automaticPublish=true"
|
|
126
|
+
|
|
127
|
+
headers = {
|
|
128
|
+
"Authorization": self.api_service.token,
|
|
129
|
+
"ProjectId": self.project_id
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
response = self.api_service.post(
|
|
133
|
+
endpoint=endpoint,
|
|
134
|
+
headers=headers,
|
|
135
|
+
data=data
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
validate_status_code(response)
|
|
139
|
+
return parse_json_response(response, f"create agent for project {self.project_id}")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def get_agent(
|
|
143
|
+
self,
|
|
144
|
+
agent_id: str,
|
|
145
|
+
revision: str = 0,
|
|
146
|
+
version: int = 0,
|
|
147
|
+
allow_drafts: bool = True
|
|
148
|
+
) -> dict:
|
|
149
|
+
"""
|
|
150
|
+
Retrieves details of a specific agent from the specified project.
|
|
151
|
+
|
|
152
|
+
:param agent_id: str - Unique identifier of the agent to retrieve.
|
|
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.
|
|
159
|
+
"""
|
|
160
|
+
if not agent_id:
|
|
161
|
+
raise MissingRequirementException("agent_id must be specified in order to retrieve the agent")
|
|
162
|
+
|
|
163
|
+
endpoint = GET_AGENT_V2.format(agentId=agent_id)
|
|
164
|
+
headers = {
|
|
165
|
+
"Authorization": self.api_service.token,
|
|
166
|
+
"ProjectId": self.project_id
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
logger.debug(f"Retrieving agent detail with ID {agent_id}")
|
|
170
|
+
|
|
171
|
+
response = self.api_service.get(
|
|
172
|
+
endpoint=endpoint,
|
|
173
|
+
headers=headers,
|
|
174
|
+
params={
|
|
175
|
+
"revision": revision,
|
|
176
|
+
"version": version,
|
|
177
|
+
"allowDrafts": allow_drafts,
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
validate_status_code(response)
|
|
181
|
+
return parse_json_response(response, f"retrieve agent {agent_id} for project {self.project_id}")
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def create_sharing_link(
|
|
185
|
+
self,
|
|
186
|
+
agent_id: str,
|
|
187
|
+
) -> dict:
|
|
188
|
+
"""
|
|
189
|
+
Creates a sharing link for a specific agent in the specified project.
|
|
190
|
+
|
|
191
|
+
:param agent_id: str - Unique identifier of the agent for which to create a sharing link.
|
|
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.
|
|
195
|
+
"""
|
|
196
|
+
if not agent_id:
|
|
197
|
+
raise MissingRequirementException("agent_id must be specified in order to create sharing link")
|
|
198
|
+
|
|
199
|
+
endpoint = CREATE_SHARING_LINK_V2.format(agentId=agent_id)
|
|
200
|
+
headers = {
|
|
201
|
+
"Authorization": self.api_service.token,
|
|
202
|
+
"ProjectId": self.project_id
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
logger.debug(f"Creating sharing link for agent with ID {agent_id}")
|
|
206
|
+
|
|
207
|
+
response = self.api_service.get(
|
|
208
|
+
endpoint=endpoint,
|
|
209
|
+
headers=headers,
|
|
210
|
+
params={}
|
|
211
|
+
)
|
|
212
|
+
validate_status_code(response)
|
|
213
|
+
return parse_json_response(response, f"create sharing link for agent {agent_id} in project {self.project_id}")
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def publish_agent_revision(
|
|
217
|
+
self,
|
|
218
|
+
agent_id: str,
|
|
219
|
+
revision: str
|
|
220
|
+
) -> dict:
|
|
221
|
+
"""
|
|
222
|
+
Publishes a specific revision of an agent in the specified project.
|
|
223
|
+
|
|
224
|
+
:param agent_id: str - Unique identifier of the agent to publish.
|
|
225
|
+
:param revision: str - Revision of the agent to publish.
|
|
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.
|
|
228
|
+
"""
|
|
229
|
+
endpoint = PUBLISH_AGENT_REVISION_V2.format(agentId=agent_id)
|
|
230
|
+
headers = {
|
|
231
|
+
"Authorization": self.api_service.token,
|
|
232
|
+
"ProjectId": self.project_id
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
logger.debug(f"Publishing revision {revision} for agent with ID {agent_id}")
|
|
236
|
+
|
|
237
|
+
response = self.api_service.post(
|
|
238
|
+
endpoint=endpoint,
|
|
239
|
+
headers=headers,
|
|
240
|
+
data={
|
|
241
|
+
"revision": revision,
|
|
242
|
+
}
|
|
243
|
+
)
|
|
244
|
+
validate_status_code(response)
|
|
245
|
+
return parse_json_response(response, f"publish revision {revision} for agent {agent_id} in project {self.project_id}")
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def delete_agent(
|
|
249
|
+
self,
|
|
250
|
+
agent_id: str,
|
|
251
|
+
) -> dict:
|
|
252
|
+
"""
|
|
253
|
+
Deletes a specific agent from the specified project.
|
|
254
|
+
|
|
255
|
+
:param agent_id: str - Unique identifier of the agent to delete.
|
|
256
|
+
:return: dict - JSON response confirming the deletion.
|
|
257
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
258
|
+
"""
|
|
259
|
+
endpoint = DELETE_AGENT_V2.format(agentId=agent_id)
|
|
260
|
+
headers = {
|
|
261
|
+
"Authorization": self.api_service.token,
|
|
262
|
+
"ProjectId": self.project_id
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
logger.debug(f"Deleting agent with ID {agent_id}")
|
|
266
|
+
|
|
267
|
+
response = self.api_service.delete(
|
|
268
|
+
endpoint=endpoint,
|
|
269
|
+
headers=headers,
|
|
270
|
+
data={}
|
|
271
|
+
)
|
|
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 {}
|
|
277
|
+
|
|
278
|
+
def update_agent(
|
|
279
|
+
self,
|
|
280
|
+
agent_id: str,
|
|
281
|
+
name: str,
|
|
282
|
+
access_scope: str,
|
|
283
|
+
public_name: str,
|
|
284
|
+
job_description: str,
|
|
285
|
+
avatar_image: str,
|
|
286
|
+
description: str,
|
|
287
|
+
agent_data_prompt: dict,
|
|
288
|
+
agent_data_llm_config: dict,
|
|
289
|
+
agent_data_strategy_name: dict,
|
|
290
|
+
agent_data_models: list,
|
|
291
|
+
agent_data_resource_pools: Optional[List[Dict]] = None,
|
|
292
|
+
automatic_publish: bool = False,
|
|
293
|
+
upsert: bool = False
|
|
294
|
+
) -> dict:
|
|
295
|
+
"""
|
|
296
|
+
Updates an existing agent in the specified project or upserts it if specified.
|
|
297
|
+
|
|
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.
|
|
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
|
+
|
|
319
|
+
data = {
|
|
320
|
+
"agentDefinition": {
|
|
321
|
+
"name": name,
|
|
322
|
+
"accessScope": access_scope,
|
|
323
|
+
"publicName": public_name,
|
|
324
|
+
"jobDescription": job_description,
|
|
325
|
+
"avatarImage": avatar_image,
|
|
326
|
+
"description": description,
|
|
327
|
+
}
|
|
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"] = {}
|
|
334
|
+
if agent_data_resource_pools is not None:
|
|
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}")
|
|
346
|
+
|
|
347
|
+
endpoint = UPSERT_AGENT_V2 if upsert else UPDATE_AGENT_V2
|
|
348
|
+
endpoint = endpoint.format(agentId=agent_id) if agent_id else endpoint.format(agentId=name)
|
|
349
|
+
|
|
350
|
+
if automatic_publish:
|
|
351
|
+
endpoint = f"{endpoint}?automaticPublish=true"
|
|
352
|
+
|
|
353
|
+
headers = {
|
|
354
|
+
"Authorization": self.api_service.token,
|
|
355
|
+
"ProjectId": self.project_id
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
response = self.api_service.put(
|
|
359
|
+
endpoint=endpoint,
|
|
360
|
+
headers=headers,
|
|
361
|
+
data=data
|
|
362
|
+
)
|
|
363
|
+
|
|
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}")
|
|
426
|
+
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
CREATE_AGENT_V2 = "v2/agents" # POST -> Create agent
|
|
2
|
+
LIST_AGENTS_V2 = "v2/agents" # GET -> List agents
|
|
3
|
+
GET_AGENT_V2 = "v2/agents/{agentId}" # GET -> Get agent data
|
|
4
|
+
CREATE_SHARING_LINK_V2 = "v2/agents/{agentId}/sharing-token" # GET -> Create sharing link
|
|
5
|
+
PUBLISH_AGENT_REVISION_V2 = "v2/agents/{agentId}/publish-revision" # POST -> Publish Agent revision
|
|
6
|
+
DELETE_AGENT_V2 = "v2/agents/{agentId}" # DEL -> Delete agent
|
|
7
|
+
UPDATE_AGENT_V2 = "v2/agents/{agentId}" # PUT -> Update agent
|
|
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
|