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.
- pygeai/__init__.py +11 -2
- pygeai/_docs/Makefile +20 -0
- pygeai/_docs/make.bat +35 -0
- pygeai/_docs/source/conf.py +117 -0
- pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
- pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
- pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
- pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
- pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
- pygeai/_docs/source/content/ai_lab.rst +102 -0
- pygeai/_docs/source/content/analytics.rst +598 -0
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- pygeai/_docs/source/content/api_reference/chat.rst +754 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +738 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rag.rst +710 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +58 -0
- pygeai/_docs/source/content/authentication.rst +295 -0
- pygeai/_docs/source/content/chat_gui.rst +121 -0
- pygeai/_docs/source/content/cli.rst +203 -0
- pygeai/_docs/source/content/debugger.rst +651 -0
- pygeai/_docs/source/content/intro.rst +67 -0
- pygeai/_docs/source/content/migration.rst +929 -0
- pygeai/_docs/source/content/modules.rst +7 -0
- pygeai/_docs/source/content/quickstart.rst +143 -0
- pygeai/_docs/source/content/samples.rst +394 -0
- pygeai/_docs/source/index.rst +75 -0
- pygeai/_docs/source/modules.rst +7 -0
- pygeai/_docs/source/pygeai.admin.rst +29 -0
- pygeai/_docs/source/pygeai.analytics.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
- pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
- pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.rst +55 -0
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.chat.rst +69 -0
- pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
- pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
- pygeai/_docs/source/pygeai.cli.rst +62 -0
- pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
- pygeai/_docs/source/pygeai.core.base.rst +53 -0
- pygeai/_docs/source/pygeai.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
- pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
- pygeai/_docs/source/pygeai.core.files.rst +61 -0
- pygeai/_docs/source/pygeai.core.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
- pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
- pygeai/_docs/source/pygeai.core.rst +63 -0
- pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.rst +37 -0
- pygeai/_docs/source/pygeai.core.utils.rst +37 -0
- pygeai/_docs/source/pygeai.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.rst +31 -0
- pygeai/_docs/source/pygeai.flows.rst +29 -0
- pygeai/_docs/source/pygeai.gam.rst +29 -0
- pygeai/_docs/source/pygeai.health.rst +29 -0
- pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
- pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
- pygeai/_docs/source/pygeai.lab.rst +65 -0
- pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
- pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
- pygeai/_docs/source/pygeai.man.man1.rst +10 -0
- pygeai/_docs/source/pygeai.man.rst +18 -0
- pygeai/_docs/source/pygeai.migration.rst +29 -0
- pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
- pygeai/_docs/source/pygeai.organization.rst +61 -0
- pygeai/_docs/source/pygeai.proxy.rst +53 -0
- pygeai/_docs/source/pygeai.rst +35 -0
- pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
- pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
- pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
- pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
- pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
- pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
- pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
- pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
- pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
- pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.rst +39 -0
- pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
- pygeai/_docs/source/pygeai.tests.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.gam.rst +21 -0
- pygeai/_docs/source/pygeai.tests.health.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
- pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
- pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
- pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
- pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
- pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
- pygeai/_docs/source/pygeai.tests.rst +33 -0
- pygeai/admin/clients.py +14 -11
- pygeai/admin/endpoints.py +2 -2
- pygeai/analytics/clients.py +505 -0
- pygeai/analytics/endpoints.py +35 -0
- pygeai/analytics/managers.py +606 -0
- pygeai/analytics/mappers.py +207 -0
- pygeai/analytics/responses.py +240 -0
- pygeai/assistant/clients.py +48 -57
- pygeai/assistant/data/__init__.py +0 -0
- pygeai/assistant/data/clients.py +15 -0
- pygeai/assistant/data_analyst/__init__.py +0 -0
- pygeai/assistant/data_analyst/clients.py +75 -0
- pygeai/assistant/data_analyst/endpoints.py +2 -0
- pygeai/assistant/endpoints.py +0 -2
- pygeai/assistant/managers.py +738 -0
- pygeai/assistant/mappers.py +153 -0
- pygeai/assistant/rag/clients.py +132 -21
- pygeai/assistant/rag/mappers.py +228 -0
- pygeai/assistant/rag/models.py +396 -0
- pygeai/assistant/rag/responses.py +10 -0
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +406 -31
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +17 -0
- pygeai/chat/managers.py +64 -0
- pygeai/chat/session.py +38 -0
- pygeai/chat/settings.py +6 -0
- pygeai/chat/ui.py +678 -0
- pygeai/cli/__init__.py +0 -1
- pygeai/cli/commands/admin.py +9 -12
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +11 -11
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +201 -7
- pygeai/cli/commands/chat.py +875 -14
- pygeai/cli/commands/common.py +30 -26
- pygeai/cli/commands/configuration.py +84 -9
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +187 -0
- pygeai/cli/commands/evaluation.py +2069 -0
- pygeai/cli/commands/feedback.py +93 -0
- pygeai/cli/commands/files.py +312 -0
- pygeai/cli/commands/flows/__init__.py +0 -0
- pygeai/cli/commands/gam.py +349 -0
- pygeai/cli/commands/lab/__init__.py +0 -0
- pygeai/cli/commands/lab/ai_lab.py +4110 -0
- pygeai/cli/commands/lab/common.py +135 -0
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/spec.py +273 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/commands/llm.py +164 -0
- pygeai/cli/commands/migrate.py +1198 -0
- pygeai/cli/commands/options.py +86 -0
- pygeai/cli/commands/organization.py +560 -98
- pygeai/cli/commands/rag.py +306 -10
- pygeai/cli/commands/rerank.py +108 -0
- pygeai/cli/commands/secrets.py +357 -0
- pygeai/cli/commands/usage_limits.py +583 -0
- pygeai/cli/commands/validators.py +209 -0
- pygeai/cli/commands/version.py +44 -0
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +171 -30
- pygeai/cli/geai_proxy.py +318 -0
- pygeai/cli/install_man.py +107 -0
- pygeai/cli/parsers.py +78 -25
- pygeai/cli/texts/help.py +712 -55
- pygeai/core/__init__.py +9 -1
- pygeai/core/base/clients.py +61 -10
- pygeai/core/base/mappers.py +208 -30
- pygeai/core/base/models.py +8 -308
- pygeai/core/base/responses.py +18 -1
- pygeai/core/base/session.py +110 -17
- pygeai/core/common/config.py +98 -16
- pygeai/core/common/decorators.py +44 -0
- pygeai/core/common/exceptions.py +104 -4
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +93 -0
- pygeai/core/embeddings/endpoints.py +1 -0
- pygeai/core/embeddings/managers.py +62 -0
- pygeai/core/embeddings/mappers.py +52 -0
- pygeai/core/embeddings/models.py +14 -0
- pygeai/core/embeddings/responses.py +31 -0
- pygeai/core/feedback/__init__.py +0 -0
- pygeai/core/feedback/clients.py +50 -0
- pygeai/core/feedback/endpoints.py +1 -0
- pygeai/core/feedback/models.py +10 -0
- pygeai/core/files/__init__.py +0 -0
- pygeai/core/files/clients.py +156 -0
- pygeai/core/files/endpoints.py +5 -0
- pygeai/core/files/managers.py +224 -0
- pygeai/core/files/mappers.py +44 -0
- pygeai/core/files/models.py +24 -0
- pygeai/core/files/responses.py +19 -0
- pygeai/core/handlers.py +32 -0
- pygeai/core/llm/__init__.py +0 -0
- pygeai/core/llm/clients.py +53 -0
- pygeai/core/llm/endpoints.py +4 -0
- pygeai/core/models.py +799 -0
- pygeai/core/plugins/__init__.py +0 -0
- pygeai/core/plugins/clients.py +32 -0
- pygeai/core/plugins/endpoints.py +1 -0
- pygeai/core/plugins/models.py +86 -0
- pygeai/core/rerank/__init__.py +0 -0
- pygeai/core/rerank/clients.py +35 -0
- pygeai/core/rerank/endpoints.py +1 -0
- pygeai/core/rerank/managers.py +47 -0
- pygeai/core/rerank/mappers.py +23 -0
- pygeai/core/rerank/models.py +27 -0
- pygeai/core/responses.py +104 -0
- pygeai/core/secrets/__init__.py +0 -0
- pygeai/core/secrets/clients.py +212 -0
- pygeai/core/secrets/endpoints.py +7 -0
- pygeai/core/services/llm/__init__.py +0 -0
- pygeai/core/services/llm/model.py +186 -0
- pygeai/core/services/llm/providers.py +15 -0
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +311 -89
- pygeai/core/utils/__init__.py +0 -0
- pygeai/core/utils/console.py +83 -0
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +870 -0
- pygeai/evaluation/__init__.py +0 -0
- pygeai/evaluation/clients.py +19 -0
- pygeai/evaluation/dataset/__init__.py +0 -0
- pygeai/evaluation/dataset/clients.py +514 -0
- pygeai/evaluation/dataset/endpoints.py +26 -0
- pygeai/evaluation/plan/__init__.py +0 -0
- pygeai/evaluation/plan/clients.py +302 -0
- pygeai/evaluation/plan/endpoints.py +16 -0
- pygeai/evaluation/result/__init__.py +0 -0
- pygeai/evaluation/result/clients.py +70 -0
- pygeai/evaluation/result/endpoints.py +2 -0
- pygeai/flows/__init__.py +0 -0
- pygeai/flows/endpoints.py +362 -0
- pygeai/flows/models.py +1304 -0
- pygeai/gam/__init__.py +0 -0
- pygeai/gam/clients.py +178 -0
- pygeai/gam/endpoints.py +4 -0
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -0
- pygeai/lab/agents/__init__.py +0 -0
- pygeai/lab/agents/clients.py +426 -0
- pygeai/lab/agents/endpoints.py +12 -0
- pygeai/lab/agents/mappers.py +319 -0
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +1558 -0
- pygeai/lab/models.py +1719 -0
- pygeai/lab/processes/__init__.py +0 -0
- pygeai/lab/processes/clients.py +1051 -0
- pygeai/lab/processes/endpoints.py +26 -0
- pygeai/lab/processes/mappers.py +395 -0
- pygeai/lab/runners.py +90 -0
- pygeai/lab/spec/__init__.py +0 -0
- pygeai/lab/spec/loader.py +24 -0
- pygeai/lab/spec/parsers.py +39 -0
- pygeai/lab/strategies/__init__.py +0 -0
- pygeai/lab/strategies/clients.py +212 -0
- pygeai/lab/strategies/endpoints.py +5 -0
- pygeai/lab/strategies/mappers.py +58 -0
- pygeai/lab/tools/__init__.py +0 -0
- pygeai/lab/tools/clients.py +465 -0
- pygeai/lab/tools/endpoints.py +13 -0
- pygeai/lab/tools/mappers.py +131 -0
- pygeai/man/__init__.py +1 -0
- pygeai/man/man1/__init__.py +1 -0
- pygeai/man/man1/geai-proxy.1 +246 -0
- pygeai/man/man1/geai.1 +2615 -0
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +603 -0
- pygeai/migration/tools.py +180 -0
- pygeai/organization/clients.py +246 -18
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/__init__.py +0 -0
- pygeai/organization/limits/clients.py +281 -0
- pygeai/organization/limits/endpoints.py +15 -0
- pygeai/organization/limits/managers.py +331 -0
- pygeai/organization/limits/mappers.py +21 -0
- pygeai/organization/managers.py +537 -0
- pygeai/organization/mappers.py +111 -46
- pygeai/organization/responses.py +61 -11
- pygeai/proxy/__init__.py +0 -0
- pygeai/proxy/clients.py +216 -0
- pygeai/proxy/config.py +128 -0
- pygeai/proxy/managers.py +232 -0
- pygeai/proxy/servers.py +304 -0
- pygeai/proxy/tool.py +69 -0
- pygeai/tests/admin/__init__.py +0 -0
- pygeai/tests/admin/test_clients.py +148 -0
- pygeai/tests/analytics/__init__.py +0 -0
- pygeai/tests/analytics/test_clients.py +86 -0
- pygeai/tests/analytics/test_managers.py +94 -0
- pygeai/tests/analytics/test_mappers.py +84 -0
- pygeai/tests/analytics/test_responses.py +73 -0
- pygeai/tests/assistants/rag/__init__.py +0 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_mappers.py +189 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -80
- pygeai/tests/assistants/test_managers.py +198 -0
- pygeai/tests/assistants/test_mappers.py +111 -0
- pygeai/tests/auth/__init__.py +0 -0
- pygeai/tests/auth/test_clients.py +289 -0
- pygeai/tests/auth/test_oauth.py +172 -0
- pygeai/tests/auth/test_session_logging.py +150 -0
- pygeai/tests/chat/__init__.py +0 -0
- pygeai/tests/chat/test_clients.py +393 -0
- pygeai/tests/chat/test_iris.py +38 -0
- pygeai/tests/chat/test_session.py +62 -0
- pygeai/tests/chat/test_ui.py +224 -0
- pygeai/tests/cli/__init__.py +0 -0
- pygeai/tests/cli/commands/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
- pygeai/tests/cli/commands/lab/test_common.py +208 -0
- pygeai/tests/cli/commands/lab/test_spec.py +246 -0
- pygeai/tests/cli/commands/test_assistant.py +202 -0
- pygeai/tests/cli/commands/test_chat.py +130 -0
- pygeai/tests/cli/commands/test_common.py +350 -0
- pygeai/tests/cli/commands/test_embeddings.py +132 -0
- pygeai/tests/cli/commands/test_evaluation.py +656 -0
- pygeai/tests/cli/commands/test_feedback.py +65 -0
- pygeai/tests/cli/commands/test_files.py +161 -0
- pygeai/tests/cli/commands/test_gam.py +201 -0
- pygeai/tests/cli/commands/test_llm.py +114 -0
- pygeai/tests/cli/commands/test_migrate.py +176 -0
- pygeai/tests/cli/commands/test_organization.py +276 -0
- pygeai/tests/cli/commands/test_rag.py +266 -0
- pygeai/tests/cli/commands/test_rerank.py +110 -0
- pygeai/tests/cli/commands/test_secrets.py +171 -0
- pygeai/tests/cli/commands/test_show_help.py +41 -0
- pygeai/tests/cli/commands/test_usage_limits.py +412 -0
- pygeai/tests/cli/commands/test_validators.py +160 -0
- pygeai/tests/cli/commands/test_version.py +81 -0
- pygeai/tests/cli/docker/__init__.py +0 -0
- pygeai/tests/cli/test_credentials_flag.py +316 -0
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +154 -0
- pygeai/tests/core/base/__init__.py +0 -0
- pygeai/tests/core/base/data/__init__.py +0 -0
- pygeai/tests/core/base/data/mappers.py +117 -0
- pygeai/tests/core/base/data/models.py +312 -0
- pygeai/tests/core/base/test_mappers.py +569 -0
- pygeai/tests/core/base/test_models.py +261 -0
- pygeai/tests/core/base/test_responses.py +53 -0
- pygeai/tests/core/common/__init__.py +0 -0
- pygeai/tests/core/common/data/__init__.py +0 -0
- pygeai/tests/core/common/test_config.py +186 -0
- pygeai/tests/core/common/test_decorators.py +69 -0
- pygeai/tests/core/embeddings/__init__.py +0 -0
- pygeai/tests/core/embeddings/test_clients.py +225 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/__init__.py +0 -0
- pygeai/tests/core/feedback/test_clients.py +64 -0
- pygeai/tests/core/files/__init__.py +0 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +219 -0
- pygeai/tests/core/files/test_mappers.py +137 -0
- pygeai/tests/core/files/test_models.py +103 -0
- pygeai/tests/core/files/test_responses.py +122 -0
- pygeai/tests/core/llm/__init__.py +0 -0
- pygeai/tests/core/llm/test_clients.py +142 -0
- pygeai/tests/core/plugins/__init__.py +0 -0
- pygeai/tests/core/plugins/test_clients.py +66 -0
- pygeai/tests/core/rerank/__init__.py +0 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +99 -0
- pygeai/tests/core/rerank/test_mappers.py +54 -0
- pygeai/tests/core/secrets/__init__.py +0 -0
- pygeai/tests/core/secrets/test_clients.py +264 -0
- pygeai/tests/core/services/__init__.py +0 -0
- pygeai/tests/core/services/test_rest.py +273 -0
- pygeai/tests/core/test_handlers.py +66 -0
- pygeai/tests/core/utils/__init__.py +0 -0
- pygeai/tests/core/utils/test_console.py +80 -0
- pygeai/tests/dbg/__init__.py +0 -0
- pygeai/tests/dbg/test_debugger.py +591 -0
- pygeai/tests/evaluation/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/test_clients.py +265 -0
- pygeai/tests/evaluation/plan/__init__.py +0 -0
- pygeai/tests/evaluation/plan/test_clients.py +195 -0
- pygeai/tests/evaluation/result/__init__.py +0 -0
- pygeai/tests/evaluation/result/test_clients.py +66 -0
- pygeai/tests/gam/__init__.py +0 -0
- pygeai/tests/gam/test_clients.py +195 -0
- pygeai/tests/health/__init__.py +0 -0
- pygeai/tests/health/test_clients.py +41 -0
- pygeai/tests/integration/__init__.py +0 -0
- pygeai/tests/integration/assistants/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/test_create_rag.py +91 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +158 -0
- pygeai/tests/integration/lab/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
- pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
- pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
- pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
- pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
- pygeai/tests/integration/lab/processes/__init__.py +0 -0
- pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
- pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
- pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
- pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
- pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
- pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
- pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
- pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
- pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
- pygeai/tests/lab/__init__.py +0 -0
- pygeai/tests/lab/agents/__init__.py +0 -0
- pygeai/tests/lab/agents/test_clients.py +481 -0
- pygeai/tests/lab/agents/test_mappers.py +440 -0
- pygeai/tests/lab/processes/__init__.py +0 -0
- pygeai/tests/lab/processes/test_clients.py +1416 -0
- pygeai/tests/lab/processes/test_mappers.py +1092 -0
- pygeai/tests/lab/spec/__init__.py +0 -0
- pygeai/tests/lab/spec/test_loader.py +59 -0
- pygeai/tests/lab/spec/test_parsers.py +182 -0
- pygeai/tests/lab/strategies/__init__.py +0 -0
- pygeai/tests/lab/strategies/test_clients.py +241 -0
- pygeai/tests/lab/strategies/test_mappers.py +132 -0
- pygeai/tests/lab/test_managers.py +553 -0
- pygeai/tests/lab/test_mappers.py +245 -0
- pygeai/tests/lab/test_models.py +1154 -0
- pygeai/tests/lab/tools/__init__.py +0 -0
- pygeai/tests/lab/tools/test_clients.py +521 -0
- pygeai/tests/lab/tools/test_mappers.py +198 -0
- pygeai/tests/migration/__init__.py +0 -0
- pygeai/tests/migration/test_strategies.py +405 -0
- pygeai/tests/migration/test_tools.py +159 -0
- pygeai/tests/organization/limits/__init__.py +0 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +402 -0
- pygeai/tests/organization/test_clients.py +615 -64
- pygeai/tests/organization/test_managers.py +424 -0
- pygeai/tests/organization/test_mappers.py +153 -0
- pygeai/tests/organization/test_responses.py +137 -0
- pygeai/tests/proxy/__init__.py +1 -0
- pygeai/tests/proxy/test_clients.py +397 -0
- pygeai/tests/proxy/test_config.py +171 -0
- pygeai/tests/proxy/test_integration.py +305 -0
- pygeai/tests/proxy/test_managers.py +312 -0
- pygeai/tests/proxy/test_servers.py +387 -0
- pygeai/tests/proxy/test_tool.py +176 -0
- pygeai/tests/snippets/__init__.py +0 -0
- pygeai/tests/snippets/analytics/__init__.py +0 -0
- pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
- pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
- pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
- pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
- pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
- pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
- pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
- pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
- pygeai/tests/snippets/analytics/get_total_tokens.py +12 -0
- pygeai/tests/snippets/assistants/__init__.py +0 -0
- pygeai/tests/snippets/assistants/create_chat_assistant.py +54 -0
- pygeai/tests/snippets/assistants/create_text_assistant.py +51 -0
- pygeai/tests/snippets/assistants/data_analyst/__init__.py +0 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +100 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +9 -0
- pygeai/tests/snippets/assistants/data_analyst/get_status.py +9 -0
- pygeai/tests/snippets/assistants/file_summarizer_assistant.py +149 -0
- pygeai/tests/snippets/assistants/get_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/get_assistant_list.py +7 -0
- pygeai/tests/snippets/assistants/rag/__init__.py +0 -0
- pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +65 -0
- pygeai/tests/snippets/assistants/rag/delete_al_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/delete_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +8 -0
- pygeai/tests/snippets/assistants/rag/get_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/get_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +48 -0
- pygeai/tests/snippets/assistants/rag/upload_document.py +19 -0
- pygeai/tests/snippets/assistants/send_feedback.py +14 -0
- pygeai/tests/snippets/assistants/update_chat_assistant.py +63 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/__init__.py +0 -0
- pygeai/tests/snippets/chat/cancel_request.py +7 -0
- pygeai/tests/snippets/chat/chat_completion.py +28 -0
- pygeai/tests/snippets/chat/chat_completion_1.py +40 -0
- pygeai/tests/snippets/chat/chat_completion_2.py +60 -0
- pygeai/tests/snippets/chat/chat_completion_3.py +27 -0
- pygeai/tests/snippets/chat/chat_completion_4.py +67 -0
- pygeai/tests/snippets/chat/chat_completion_streaming.py +63 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_request_status.py +7 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_complete_example.py +67 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_instructions.py +19 -0
- pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
- pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
- pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
- pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -0
- pygeai/tests/snippets/chat/send_chat_request.py +33 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/file_debugging.py +72 -0
- pygeai/tests/snippets/dbg/module_debugging.py +61 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/__init__.py +0 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/generate_embeddings.py +26 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/files/__init__.py +0 -0
- pygeai/tests/snippets/files/delete_file.py +9 -0
- pygeai/tests/snippets/files/get_file_content.py +10 -0
- pygeai/tests/snippets/files/get_file_data.py +9 -0
- pygeai/tests/snippets/files/get_file_list.py +6 -0
- pygeai/tests/snippets/files/upload_file.py +13 -0
- pygeai/tests/snippets/gam/__init__.py +0 -0
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/__init__.py +0 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +326 -0
- pygeai/tests/snippets/lab/agentic_flow_example_2.py +206 -0
- pygeai/tests/snippets/lab/agentic_flow_example_3.py +486 -0
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +446 -0
- pygeai/tests/snippets/lab/agents/__init__.py +0 -0
- pygeai/tests/snippets/lab/agents/create_agent.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_2.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/delete_agent.py +12 -0
- pygeai/tests/snippets/lab/agents/get_agent.py +24 -0
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +13 -0
- pygeai/tests/snippets/lab/agents/list_agents.py +18 -0
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +12 -0
- pygeai/tests/snippets/lab/agents/update_agent.py +50 -0
- pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
- pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
- pygeai/tests/snippets/lab/crud_ui.py +462 -0
- pygeai/tests/snippets/lab/processes/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/create_process.py +24 -0
- pygeai/tests/snippets/lab/processes/create_task.py +8 -0
- pygeai/tests/snippets/lab/processes/jobs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +21 -0
- pygeai/tests/snippets/lab/processes/kbs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +18 -0
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +26 -0
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +30 -0
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +73 -0
- pygeai/tests/snippets/lab/processes/list_processes.py +10 -0
- pygeai/tests/snippets/lab/runner_1.py +212 -0
- pygeai/tests/snippets/lab/samples/__init__.py +0 -0
- pygeai/tests/snippets/lab/samples/summarize_files.py +162 -0
- pygeai/tests/snippets/lab/strategies/__init__.py +0 -0
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +22 -0
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +10 -0
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +16 -0
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +26 -0
- pygeai/tests/snippets/lab/tools/__init__.py +0 -0
- pygeai/tests/snippets/lab/tools/create_tool.py +48 -0
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +21 -0
- pygeai/tests/snippets/lab/tools/get_parameter.py +21 -0
- pygeai/tests/snippets/lab/tools/get_tool.py +22 -0
- pygeai/tests/snippets/lab/tools/list_tools.py +23 -0
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +13 -0
- pygeai/tests/snippets/lab/tools/set_parameters.py +33 -0
- pygeai/tests/snippets/lab/tools/update_tool.py +52 -0
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +238 -0
- pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
- pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
- pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
- pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +157 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +157 -0
- pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
- pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/__init__.py +0 -0
- pygeai/tests/snippets/organization/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +23 -0
- pygeai/tests/snippets/organization/delete_project.py +7 -0
- pygeai/tests/snippets/organization/export_request_data.py +7 -0
- pygeai/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_data.py +7 -0
- pygeai/tests/snippets/organization/get_project_list.py +8 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- pygeai/tests/snippets/organization/get_project_tokens.py +7 -0
- pygeai/tests/snippets/organization/update_project.py +14 -0
- pygeai/tests/snippets/rerank/__init__.py +0 -0
- pygeai/tests/snippets/rerank/rerank_chunks.py +19 -0
- pygeai/tests/snippets/secrets/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/delete_usage_limit.py +16 -0
- pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +12 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +11 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +13 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +22 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +24 -0
- pygeai/vendor/a2a/__init__.py +1 -0
- pygeai/vendor/a2a/auth/__init__.py +0 -0
- pygeai/vendor/a2a/auth/user.py +31 -0
- pygeai/vendor/a2a/client/__init__.py +19 -0
- pygeai/vendor/a2a/client/client.py +425 -0
- pygeai/vendor/a2a/client/errors.py +33 -0
- pygeai/vendor/a2a/client/helpers.py +22 -0
- pygeai/vendor/a2a/py.typed +0 -0
- pygeai/vendor/a2a/server/__init__.py +1 -0
- pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
- pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
- pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
- pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
- pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
- pygeai/vendor/a2a/server/apps/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
- pygeai/vendor/a2a/server/context.py +23 -0
- pygeai/vendor/a2a/server/events/__init__.py +21 -0
- pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
- pygeai/vendor/a2a/server/events/event_queue.py +156 -0
- pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
- pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
- pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
- pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
- pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
- pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
- pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
- pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
- pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
- pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
- pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
- pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
- pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
- pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
- pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
- pygeai/vendor/a2a/types.py +1624 -0
- pygeai/vendor/a2a/utils/__init__.py +40 -0
- pygeai/vendor/a2a/utils/artifact.py +72 -0
- pygeai/vendor/a2a/utils/errors.py +69 -0
- pygeai/vendor/a2a/utils/helpers.py +176 -0
- pygeai/vendor/a2a/utils/message.py +83 -0
- pygeai/vendor/a2a/utils/task.py +57 -0
- pygeai/vendor/a2a/utils/telemetry.py +299 -0
- pygeai-0.6.0b15.dist-info/METADATA +205 -0
- pygeai-0.6.0b15.dist-info/RECORD +799 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- pygeai-0.6.0b15.dist-info/entry_points.txt +5 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info/licenses}/LICENSE +13 -1
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/top_level.txt +0 -1
- docs/source/conf.py +0 -45
- pygeai/core/clients.py +0 -240
- pygeai/tests/core/test_clients.py +0 -49
- pygeai-0.1.6.dist-info/METADATA +0 -92
- pygeai-0.1.6.dist-info/RECORD +0 -65
- pygeai-0.1.6.dist-info/SOURCES.sync-conflict-20241223-145950-3QD4F42.txt +0 -41
- pygeai-0.1.6.dist-info/entry_points.txt +0 -2
- /pygeai/{agent → analytics}/__init__.py +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
CREATE_PROCESS_V2 = "v2/processes" # POST -> Create process
|
|
2
|
+
UPDATE_PROCESS_V2 = "v2/processes/{processId}" # PUT -> Update process
|
|
3
|
+
UPSERT_PROCESS_V2 = "v2/processes/{processId}/upsert" # PUT -> Update or insert process
|
|
4
|
+
GET_PROCESS_V2 = "v2/processes/{processId}" # GET -> Get process
|
|
5
|
+
LIST_PROCESSES_V2 = "v2/processes" # GET -> Get process
|
|
6
|
+
LIST_PROCESS_INSTANCES_V2 = "v2/processes/{processId}/instances" # GET -> Get process instances
|
|
7
|
+
DELETE_PROCESS_V2 = "v2/processes/{processId}" # DELETE -> Get process
|
|
8
|
+
PUBLISH_PROCESS_REVISION_V2 = "v2/processes/{processId}/publish-revision" # POST -> Publish process revision
|
|
9
|
+
CREATE_TASK_V2 = "v2/processes/tasks" # POST -> Create task
|
|
10
|
+
UPDATE_TASK_V2 = "v2/processes/tasks/{taskId}" # PUT -> Update task
|
|
11
|
+
UPSERT_TASK_V2 = "v2/processes/tasks/{taskId}/upsert" # PUT -> Update or insert task
|
|
12
|
+
GET_TASK_V2 = "v2/processes/tasks/{taskId}" # GET -> Get task
|
|
13
|
+
LIST_TASKS_V2 = "v2/processes/tasks" # GET -> Get task
|
|
14
|
+
DELETE_TASK_V2 = "v2/processes/tasks/{taskId}" # DELETE -> Get task
|
|
15
|
+
PUBLISH_TASK_REVISION_V2 = "v2/processes/tasks/{taskId}/publish-revision" # POST -> Publish task revision
|
|
16
|
+
START_INSTANCE_V2 = "v2/processes/instances" # POST -> Start process instance
|
|
17
|
+
ABORT_INSTANCE_V2 = "v2/processes/instances/{instanceId}/abort" # POST -> Abort process instance
|
|
18
|
+
GET_INSTANCE_V2 = "v2/processes/instances/{instanceId}" # GET -> Get process instance
|
|
19
|
+
GET_INSTANCE_HISTORY_V2 = "v2/processes/instances/{instanceId}/trace" # GET -> Get process instance history
|
|
20
|
+
GET_THREAD_INFORMATION_V2 = "v2/threads/{threadId}" # GET -> Get thread information
|
|
21
|
+
SEND_USER_SIGNAL_V2 = "v2/processes/instances/{instanceId}/signal" # POST -> Send user signal
|
|
22
|
+
CREATE_KB_V1 = "v1/agent-studio/agentic-process-definition/kbs" # POST-> Create Kb
|
|
23
|
+
GET_KB_V1 = "v1/agent-studio/agentic-process-definition/kbs/{kbId}" # GET-> Get Kb
|
|
24
|
+
LIST_KBS_V1 = "v1/agent-studio/agentic-process-definition/kbs" # GET-> Get Kb
|
|
25
|
+
DELETE_KB_V1 = "v1/agent-studio/agentic-process-definition/kbs/{kbId}" # DELETE-> Delete Kb
|
|
26
|
+
LIST_JOBS_V1 = "v1/agent-studio/runtime/jobs" # GET-> Get list of Jobs
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
from typing import List, Dict, Any
|
|
2
|
+
|
|
3
|
+
from pygeai.lab.models import AgenticProcess, KnowledgeBase, AgenticActivity, ArtifactSignal, UserSignal, Event, \
|
|
4
|
+
SequenceFlow, Task, AgenticProcessList, TaskList, ProcessInstance, ProcessInstanceList, Variable, Prompt, \
|
|
5
|
+
PromptOutput, PromptExample, ArtifactType, ArtifactTypeList, KnowledgeBaseList, JobParameter, Job, JobList
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AgenticProcessMapper:
|
|
9
|
+
@classmethod
|
|
10
|
+
def _map_knowledge_base(cls, kb_data: dict) -> KnowledgeBase:
|
|
11
|
+
return KnowledgeBase(
|
|
12
|
+
name=kb_data.get("name"),
|
|
13
|
+
artifact_type_name=kb_data.get("artifactTypeName"),
|
|
14
|
+
id=kb_data.get("id")
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def _map_agentic_activities(cls, activities_data: List[dict]) -> List[AgenticActivity]:
|
|
19
|
+
return [
|
|
20
|
+
AgenticActivity(
|
|
21
|
+
key=activity.get("key"),
|
|
22
|
+
name=activity.get("name"),
|
|
23
|
+
task_name=activity.get("taskName"),
|
|
24
|
+
agent_name=activity.get("agentName"),
|
|
25
|
+
agent_revision_id=activity.get("agentRevisionId"),
|
|
26
|
+
agent_id=activity.get("agentId"),
|
|
27
|
+
task_id=activity.get("taskId"),
|
|
28
|
+
task_revision_id=activity.get("taskRevisionId")
|
|
29
|
+
)
|
|
30
|
+
for activity in activities_data
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def _map_artifact_signals(cls, signals_data: List[dict]) -> List[ArtifactSignal]:
|
|
35
|
+
return [
|
|
36
|
+
ArtifactSignal(
|
|
37
|
+
key=signal.get("key"),
|
|
38
|
+
name=signal.get("name"),
|
|
39
|
+
handling_type=signal.get("handlingType"),
|
|
40
|
+
artifact_type_name=signal.get("artifactTypeName")
|
|
41
|
+
)
|
|
42
|
+
for signal in signals_data
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def _map_user_signals(cls, signals_data: List[dict]) -> List[UserSignal]:
|
|
47
|
+
return [
|
|
48
|
+
UserSignal(
|
|
49
|
+
key=signal.get("key"),
|
|
50
|
+
name=signal.get("name")
|
|
51
|
+
)
|
|
52
|
+
for signal in signals_data
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
@classmethod
|
|
56
|
+
def _map_event(cls, event_data: dict) -> Event:
|
|
57
|
+
return Event(
|
|
58
|
+
key=event_data.get("key"),
|
|
59
|
+
name=event_data.get("name")
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
@classmethod
|
|
63
|
+
def _map_sequence_flows(cls, flows_data: List[dict]) -> List[SequenceFlow]:
|
|
64
|
+
return [
|
|
65
|
+
SequenceFlow(
|
|
66
|
+
key=flow.get("key"),
|
|
67
|
+
source_key=flow.get("sourceKey"),
|
|
68
|
+
target_key=flow.get("targetKey")
|
|
69
|
+
)
|
|
70
|
+
for flow in flows_data
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def map_to_agentic_process(cls, data: dict) -> AgenticProcess:
|
|
75
|
+
process_data = data.get("processDefinition", data)
|
|
76
|
+
kb_data = process_data.get("kb")
|
|
77
|
+
agentic_activities_data = process_data.get("agenticActivities")
|
|
78
|
+
artifacts_data = process_data.get("artifactSignals")
|
|
79
|
+
signals_data = process_data.get("userSignals")
|
|
80
|
+
start_event_data = process_data.get("startEvent")
|
|
81
|
+
end_event_data = process_data.get("endEvent")
|
|
82
|
+
sequence_flows_data = process_data.get("sequenceFlows")
|
|
83
|
+
variables_data = process_data.get("variables")
|
|
84
|
+
return AgenticProcess(
|
|
85
|
+
key=process_data.get("key"),
|
|
86
|
+
name=process_data.get("name"),
|
|
87
|
+
description=process_data.get("description"),
|
|
88
|
+
kb=cls._map_knowledge_base(kb_data) if kb_data else None,
|
|
89
|
+
agentic_activities=cls._map_agentic_activities(agentic_activities_data) if agentic_activities_data else None,
|
|
90
|
+
artifact_signals=cls._map_artifact_signals(artifacts_data) if artifacts_data else None,
|
|
91
|
+
user_signals=cls._map_user_signals(signals_data) if signals_data else None,
|
|
92
|
+
start_event=cls._map_event(start_event_data) if start_event_data else None,
|
|
93
|
+
end_event=cls._map_event(end_event_data) if end_event_data else None,
|
|
94
|
+
sequence_flows=cls._map_sequence_flows(sequence_flows_data) if sequence_flows_data else None,
|
|
95
|
+
variables=cls._map_to_variables(variables_data) if variables_data else None,
|
|
96
|
+
id=process_data.get("id"),
|
|
97
|
+
status=process_data.get("status") or process_data.get("Status"),
|
|
98
|
+
version_id=process_data.get("versionId") or process_data.get("VersionId"),
|
|
99
|
+
is_draft=process_data.get("isDraft"),
|
|
100
|
+
revision=process_data.get("revision")
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
@classmethod
|
|
104
|
+
def _map_to_variables(cls, data: List[dict]) -> List[Variable]:
|
|
105
|
+
"""
|
|
106
|
+
Maps a list of dictionaries to a list of Variable objects.
|
|
107
|
+
|
|
108
|
+
:param data: List[dict] - List of dictionaries containing variable data (key, value).
|
|
109
|
+
:return: List[Variable] - List of mapped Variable objects.
|
|
110
|
+
"""
|
|
111
|
+
return [
|
|
112
|
+
Variable(
|
|
113
|
+
key=var.get("key"),
|
|
114
|
+
value=var.get("value")
|
|
115
|
+
)
|
|
116
|
+
for var in data
|
|
117
|
+
]
|
|
118
|
+
|
|
119
|
+
@classmethod
|
|
120
|
+
def map_to_agentic_process_list(cls, data: dict) -> AgenticProcessList:
|
|
121
|
+
process_list = []
|
|
122
|
+
processes = data.get("processes", data if isinstance(data, list) else [])
|
|
123
|
+
if processes and any(processes):
|
|
124
|
+
for process_data in processes:
|
|
125
|
+
process = cls.map_to_agentic_process(process_data)
|
|
126
|
+
process_list.append(process)
|
|
127
|
+
return AgenticProcessList(processes=process_list)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class TaskMapper:
|
|
131
|
+
@classmethod
|
|
132
|
+
def map_to_task(cls, data: dict) -> Task:
|
|
133
|
+
"""
|
|
134
|
+
Maps a dictionary to a Task object with explicit field mapping.
|
|
135
|
+
|
|
136
|
+
:param data: dict - The raw data, either input (under 'taskDefinition' key) or output (flat structure).
|
|
137
|
+
Expected fields include name, description, titleTemplate, id, promptData, artifactTypes,
|
|
138
|
+
isDraft, revision, and status.
|
|
139
|
+
:return: Task - A Task object representing the task configuration.
|
|
140
|
+
"""
|
|
141
|
+
task_data = data.get("taskDefinition", data)
|
|
142
|
+
prompt_data_data = task_data.get("promptData") or task_data.get('prompt')
|
|
143
|
+
artifact_type_list = task_data.get("artifactTypes")
|
|
144
|
+
return Task(
|
|
145
|
+
name=task_data.get("name"),
|
|
146
|
+
description=task_data.get("description"),
|
|
147
|
+
title_template=task_data.get("titleTemplate"),
|
|
148
|
+
id=task_data.get("id"),
|
|
149
|
+
prompt_data=cls._map_to_prompt_data(prompt_data_data) if prompt_data_data else None,
|
|
150
|
+
artifact_types=cls._map_to_artifact_type_list(artifact_type_list) if artifact_type_list else None,
|
|
151
|
+
is_draft=task_data.get("isDraft"),
|
|
152
|
+
revision=task_data.get("revision"),
|
|
153
|
+
status=task_data.get("status")
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
@classmethod
|
|
157
|
+
def _map_to_prompt_data(cls, data: dict) -> Prompt:
|
|
158
|
+
"""
|
|
159
|
+
Maps a dictionary to a `Prompt` object.
|
|
160
|
+
|
|
161
|
+
:param data: dict - The dictionary containing prompt details.
|
|
162
|
+
:return: Prompt - The mapped `Prompt` object.
|
|
163
|
+
"""
|
|
164
|
+
outputs_list = data.get("outputs", [])
|
|
165
|
+
examples_list = data.get("examples", [])
|
|
166
|
+
return Prompt(
|
|
167
|
+
instructions=data.get("instructions"),
|
|
168
|
+
inputs=data.get("inputs", []),
|
|
169
|
+
outputs=cls._map_to_prompt_output_list(outputs_list) if outputs_list else [],
|
|
170
|
+
examples=cls._map_to_prompt_example_list(examples_list) if examples_list else []
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
@classmethod
|
|
174
|
+
def _map_to_prompt_output_list(cls, data: List[dict]) -> List[PromptOutput]:
|
|
175
|
+
"""
|
|
176
|
+
Maps a list of dictionaries to a list of `PromptOutput` objects.
|
|
177
|
+
|
|
178
|
+
:param data: List[dict] - The list of dictionaries containing prompt output details.
|
|
179
|
+
:return: List[PromptOutput] - The mapped list of `PromptOutput` objects.
|
|
180
|
+
"""
|
|
181
|
+
return [cls._map_to_prompt_output(output) for output in data]
|
|
182
|
+
|
|
183
|
+
@classmethod
|
|
184
|
+
def _map_to_prompt_output(cls, data: dict) -> PromptOutput:
|
|
185
|
+
"""
|
|
186
|
+
Maps a dictionary to a `PromptOutput` object.
|
|
187
|
+
|
|
188
|
+
:param data: dict - The dictionary containing prompt output details.
|
|
189
|
+
:return: PromptOutput - The mapped `PromptOutput` object.
|
|
190
|
+
"""
|
|
191
|
+
return PromptOutput(
|
|
192
|
+
key=data.get("key"),
|
|
193
|
+
description=data.get("description")
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
@classmethod
|
|
197
|
+
def _map_to_prompt_example_list(cls, data: List[dict]) -> List[PromptExample]:
|
|
198
|
+
"""
|
|
199
|
+
Maps a list of dictionaries to a list of `PromptExample` objects.
|
|
200
|
+
|
|
201
|
+
:param data: List[dict] - The list of dictionaries containing prompt example details.
|
|
202
|
+
:return: List[PromptExample] - The mapped list of `PromptExample` objects.
|
|
203
|
+
"""
|
|
204
|
+
return [cls._map_to_prompt_example(example) for example in data]
|
|
205
|
+
|
|
206
|
+
@classmethod
|
|
207
|
+
def _map_to_prompt_example(cls, data: dict) -> PromptExample:
|
|
208
|
+
"""
|
|
209
|
+
Maps a dictionary to a `PromptExample` object.
|
|
210
|
+
|
|
211
|
+
:param data: dict - The dictionary containing prompt example details.
|
|
212
|
+
:return: PromptExample - The mapped `PromptExample` object.
|
|
213
|
+
"""
|
|
214
|
+
return PromptExample(
|
|
215
|
+
input_data=data.get("inputData"),
|
|
216
|
+
output=data.get("output")
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
@classmethod
|
|
220
|
+
def _map_to_artifact_type(cls, data: Dict[str, Any]) -> ArtifactType:
|
|
221
|
+
"""
|
|
222
|
+
Maps a dictionary to an ArtifactType object.
|
|
223
|
+
|
|
224
|
+
:param data: Dict[str, Any] - The dictionary containing artifact type details.
|
|
225
|
+
:return: ArtifactType - The mapped ArtifactType object.
|
|
226
|
+
"""
|
|
227
|
+
return ArtifactType(
|
|
228
|
+
name=data.get("name"),
|
|
229
|
+
description=data.get("description"),
|
|
230
|
+
is_required=data.get("isRequired"),
|
|
231
|
+
usage_type=data.get("usageType"),
|
|
232
|
+
artifact_variable_key=data.get("artifactVariableKey")
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
@classmethod
|
|
236
|
+
def _map_to_artifact_type_list(cls, data: List[Dict[str, Any]]) -> ArtifactTypeList:
|
|
237
|
+
"""
|
|
238
|
+
Maps a list of dictionaries to an ArtifactTypeList object.
|
|
239
|
+
|
|
240
|
+
:param data: List[Dict[str, Any]] - The list of dictionaries containing artifact type details.
|
|
241
|
+
:return: ArtifactTypeList - The mapped ArtifactTypeList object containing ArtifactType instances.
|
|
242
|
+
"""
|
|
243
|
+
artifact_types = [cls._map_to_artifact_type(artifact) for artifact in data]
|
|
244
|
+
return ArtifactTypeList(artifact_types=artifact_types)
|
|
245
|
+
|
|
246
|
+
@classmethod
|
|
247
|
+
def map_to_task_list(cls, data: dict) -> TaskList:
|
|
248
|
+
task_list = []
|
|
249
|
+
tasks = data.get("tasks", data if isinstance(data, list) else [])
|
|
250
|
+
if tasks and any(tasks):
|
|
251
|
+
for task_data in tasks:
|
|
252
|
+
task = cls.map_to_task(task_data)
|
|
253
|
+
task_list.append(task)
|
|
254
|
+
return TaskList(tasks=task_list)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
class ProcessInstanceMapper:
|
|
258
|
+
@classmethod
|
|
259
|
+
def _map_variables(cls, variables_data: List[dict]) -> List[Variable]:
|
|
260
|
+
return [
|
|
261
|
+
Variable(
|
|
262
|
+
key=var.get("key"),
|
|
263
|
+
value=var.get("value")
|
|
264
|
+
)
|
|
265
|
+
for var in variables_data
|
|
266
|
+
] if variables_data else []
|
|
267
|
+
|
|
268
|
+
@classmethod
|
|
269
|
+
def map_to_process_instance(cls, data: dict) -> ProcessInstance:
|
|
270
|
+
process_data = data.get("process", {})
|
|
271
|
+
process = AgenticProcess(
|
|
272
|
+
id=process_data.get("id"),
|
|
273
|
+
is_draft=process_data.get("isDraft"),
|
|
274
|
+
name=process_data.get("name"),
|
|
275
|
+
revision=process_data.get("revision"),
|
|
276
|
+
version_id=process_data.get("version")
|
|
277
|
+
) if isinstance(process_data, dict) else AgenticProcess(name=process_data)
|
|
278
|
+
|
|
279
|
+
variable_data = data.get("variables")
|
|
280
|
+
variables = cls._map_variables(variable_data)
|
|
281
|
+
return ProcessInstance(
|
|
282
|
+
id=data.get("id"),
|
|
283
|
+
process=process,
|
|
284
|
+
created_at=data.get("createdAt"),
|
|
285
|
+
subject=data.get("subject"),
|
|
286
|
+
variables=variables,
|
|
287
|
+
status=data.get("status")
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
@classmethod
|
|
291
|
+
def map_to_process_instance_list(cls, data: dict) -> ProcessInstanceList:
|
|
292
|
+
instance_list = []
|
|
293
|
+
instances = data.get("instances", data if isinstance(data, list) else [])
|
|
294
|
+
if instances and any(instances):
|
|
295
|
+
for instance_data in instances:
|
|
296
|
+
instance = cls.map_to_process_instance(instance_data)
|
|
297
|
+
instance_list.append(instance)
|
|
298
|
+
return ProcessInstanceList(instances=instance_list)
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
class KnowledgeBaseMapper:
|
|
302
|
+
|
|
303
|
+
@classmethod
|
|
304
|
+
def map_to_knowledge_base(cls, data: Dict[str, Any]) -> KnowledgeBase:
|
|
305
|
+
"""
|
|
306
|
+
Maps a dictionary to a KnowledgeBase object.
|
|
307
|
+
|
|
308
|
+
:param data: Dict[str, Any] - The dictionary containing knowledge base details.
|
|
309
|
+
:return: KnowledgeBase - The mapped KnowledgeBase object.
|
|
310
|
+
"""
|
|
311
|
+
return KnowledgeBase(
|
|
312
|
+
name=data.get("name"),
|
|
313
|
+
artifact_type_name=data.get("artifactTypeName"),
|
|
314
|
+
id=data.get("id"),
|
|
315
|
+
artifacts=data.get("artifacts"),
|
|
316
|
+
metadata=data.get("metadata"),
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
@classmethod
|
|
320
|
+
def map_to_knowledge_base_list(cls, data: Dict[str, Any]) -> KnowledgeBaseList:
|
|
321
|
+
"""
|
|
322
|
+
Maps a dictionary to a KnowledgeBaseList object.
|
|
323
|
+
|
|
324
|
+
:param data: Dict[str, Any] - The dictionary containing a list of knowledge base details.
|
|
325
|
+
:return: KnowledgeBaseList - The mapped KnowledgeBaseList object containing KnowledgeBase instances.
|
|
326
|
+
"""
|
|
327
|
+
kb_list = []
|
|
328
|
+
knowledge_bases = data.get("knowledgeBases", data if isinstance(data, list) else [])
|
|
329
|
+
if knowledge_bases and any(knowledge_bases):
|
|
330
|
+
for kb_data in knowledge_bases:
|
|
331
|
+
kb = cls.map_to_knowledge_base(kb_data)
|
|
332
|
+
kb_list.append(kb)
|
|
333
|
+
return KnowledgeBaseList(knowledge_bases=kb_list)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
class JobMapper:
|
|
337
|
+
@classmethod
|
|
338
|
+
def _map_to_job_parameter(cls, data: Dict[str, Any]) -> JobParameter:
|
|
339
|
+
"""
|
|
340
|
+
Maps a dictionary to a JobParameter object.
|
|
341
|
+
|
|
342
|
+
:param data: Dict[str, Any] - The dictionary containing job parameter details.
|
|
343
|
+
:return: JobParameter - The mapped JobParameter object.
|
|
344
|
+
"""
|
|
345
|
+
return JobParameter(
|
|
346
|
+
Name=data.get("Name"),
|
|
347
|
+
Value=data.get("Value")
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
@classmethod
|
|
351
|
+
def _map_to_job_parameters(cls, data: List[Dict[str, Any]]) -> List[JobParameter]:
|
|
352
|
+
"""
|
|
353
|
+
Maps a list of dictionaries to a list of JobParameter objects.
|
|
354
|
+
|
|
355
|
+
:param data: List[Dict[str, Any]] - The list of dictionaries containing job parameter details.
|
|
356
|
+
:return: List[JobParameter] - The mapped list of JobParameter objects.
|
|
357
|
+
"""
|
|
358
|
+
return [cls._map_to_job_parameter(param) for param in data] if data else []
|
|
359
|
+
|
|
360
|
+
@classmethod
|
|
361
|
+
def map_to_job(cls, data: Dict[str, Any]) -> Job:
|
|
362
|
+
"""
|
|
363
|
+
Maps a dictionary to a Job object with explicit field mapping.
|
|
364
|
+
|
|
365
|
+
:param data: Dict[str, Any] - The raw data containing job details.
|
|
366
|
+
Expected fields include caption, name, parameters, request, token, topic, and info.
|
|
367
|
+
:return: Job - A Job object representing the job configuration.
|
|
368
|
+
"""
|
|
369
|
+
parameters_data = data.get("parameters")
|
|
370
|
+
return Job(
|
|
371
|
+
caption=data.get("caption"),
|
|
372
|
+
name=data.get("name"),
|
|
373
|
+
parameters=cls._map_to_job_parameters(parameters_data) if parameters_data else [],
|
|
374
|
+
request=data.get("request"),
|
|
375
|
+
token=data.get("token"),
|
|
376
|
+
topic=data.get("topic"),
|
|
377
|
+
info=data.get("info")
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
@classmethod
|
|
381
|
+
def map_to_job_list(cls, data: List[Dict[str, Any]]) -> JobList:
|
|
382
|
+
"""
|
|
383
|
+
Maps a dictionary to a JobList object.
|
|
384
|
+
|
|
385
|
+
:param data: Dict[str, Any] - The dictionary containing a list of job details.
|
|
386
|
+
:return: JobList - The mapped JobList object containing Job instances.
|
|
387
|
+
"""
|
|
388
|
+
job_list = []
|
|
389
|
+
jobs = data
|
|
390
|
+
if jobs and any(jobs):
|
|
391
|
+
for job_data in jobs:
|
|
392
|
+
job = cls.map_to_job(job_data)
|
|
393
|
+
job_list.append(job)
|
|
394
|
+
|
|
395
|
+
return JobList(jobs=job_list)
|
pygeai/lab/runners.py
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from typing import Union
|
|
3
|
+
|
|
4
|
+
from pygeai.chat.managers import ChatManager
|
|
5
|
+
from pygeai.core.common.exceptions import WrongArgumentError
|
|
6
|
+
from pygeai.core.models import ChatMessage, ChatMessageList, LlmSettings
|
|
7
|
+
from pygeai.core.responses import ProviderResponse
|
|
8
|
+
from pygeai.lab.models import Agent
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Runner:
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
async def run(
|
|
15
|
+
cls,
|
|
16
|
+
agent: Agent,
|
|
17
|
+
user_input: Union[str | ChatMessage | ChatMessageList],
|
|
18
|
+
llm_settings: Union[dict | LlmSettings] = None
|
|
19
|
+
) -> ProviderResponse:
|
|
20
|
+
"""
|
|
21
|
+
Asynchronously executes a chat completion request for the specified agent with the provided user input and LLM settings.
|
|
22
|
+
|
|
23
|
+
:param agent: Agent - The agent configuration to use for the chat completion.
|
|
24
|
+
:param user_input: Union[str, ChatMessage, ChatMessageList] - The user input, which can be a string, a single ChatMessage, or a ChatMessageList.
|
|
25
|
+
:param llm_settings: Union[dict, LlmSettings] - Optional LLM configuration settings. If None, default settings are used.
|
|
26
|
+
:return: ProviderResponse - The ProviderResponse from the chat completion request.
|
|
27
|
+
:raises WrongArgumentError: If the user_input type is not str, ChatMessage, or ChatMessageList.
|
|
28
|
+
"""
|
|
29
|
+
messages = cls._get_messages(user_input)
|
|
30
|
+
llm_settings = cls._get_llm_settings(llm_settings)
|
|
31
|
+
|
|
32
|
+
chat_manager = ChatManager()
|
|
33
|
+
response = await asyncio.to_thread(
|
|
34
|
+
chat_manager.chat_completion,
|
|
35
|
+
model=f"saia:agent:{agent.name}",
|
|
36
|
+
messages=messages,
|
|
37
|
+
llm_settings=llm_settings
|
|
38
|
+
)
|
|
39
|
+
return response
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def _get_messages(cls, user_input: Union[str | ChatMessage | ChatMessageList]):
|
|
43
|
+
"""
|
|
44
|
+
Converts the user input into a ChatMessageList for use in chat completion.
|
|
45
|
+
|
|
46
|
+
:param user_input: Union[str, ChatMessage, ChatMessageList] - The user input to process.
|
|
47
|
+
:return: ChatMessageList - A ChatMessageList containing the processed user input.
|
|
48
|
+
:raises WrongArgumentError: If the user_input type is not str, ChatMessage, or ChatMessageList.
|
|
49
|
+
"""
|
|
50
|
+
if isinstance(user_input, str):
|
|
51
|
+
new_message = {
|
|
52
|
+
"role": "user",
|
|
53
|
+
"content": user_input
|
|
54
|
+
}
|
|
55
|
+
messages = ChatMessageList(messages=[new_message])
|
|
56
|
+
elif isinstance(user_input, ChatMessage):
|
|
57
|
+
messages = ChatMessageList(messages=[user_input])
|
|
58
|
+
elif isinstance(user_input, ChatMessageList):
|
|
59
|
+
messages = user_input
|
|
60
|
+
else:
|
|
61
|
+
raise WrongArgumentError("message must be either of string, ChatMessage or ChatMessageList type")
|
|
62
|
+
|
|
63
|
+
return messages
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def _get_llm_settings(cls, llm_settings: Union[dict | LlmSettings]):
|
|
67
|
+
"""
|
|
68
|
+
Processes the LLM settings into a dictionary format for chat completion.
|
|
69
|
+
|
|
70
|
+
:param llm_settings: Union[dict, LlmSettings] - The LLM settings to process. If None, default settings are applied.
|
|
71
|
+
:return: LlmSettings - A LlmSettings object containing the LLM configuration settings.
|
|
72
|
+
"""
|
|
73
|
+
if not llm_settings:
|
|
74
|
+
llm_settings = LlmSettings.model_validate({
|
|
75
|
+
"temperature": 0.6,
|
|
76
|
+
"max_tokens": 800,
|
|
77
|
+
"frequency_penalty": 0.1,
|
|
78
|
+
"presence_penalty": 0.2
|
|
79
|
+
})
|
|
80
|
+
elif isinstance(llm_settings, dict):
|
|
81
|
+
llm_settings = LlmSettings(
|
|
82
|
+
provider_name=llm_settings.get("providerName") or llm_settings.get("provider") or llm_settings.get("provider_name"),
|
|
83
|
+
model_name=llm_settings.get("modelName") or llm_settings.get("model") or llm_settings.get("model_name"),
|
|
84
|
+
temperature=llm_settings.get("temperature"),
|
|
85
|
+
max_tokens=llm_settings.get("maxTokens") or llm_settings.get("max_tokens"),
|
|
86
|
+
frequency_penalty=llm_settings.get("frequency_penalty") or llm_settings.get("frequencyPenalty"),
|
|
87
|
+
presence_penalty=llm_settings.get("presence_penalty") or llm_settings.get("presencePenalty"),
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return llm_settings
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
from pygeai import logger
|
|
5
|
+
from pygeai.core.common.exceptions import InvalidPathException, InvalidJSONException
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class JSONLoader:
|
|
9
|
+
|
|
10
|
+
@classmethod
|
|
11
|
+
def load_data(cls, file_path: str):
|
|
12
|
+
data = {}
|
|
13
|
+
file = Path(file_path)
|
|
14
|
+
if not file.exists():
|
|
15
|
+
raise InvalidPathException(f"File {file_path} doesn't exist")
|
|
16
|
+
|
|
17
|
+
with open(file_path, 'r') as f:
|
|
18
|
+
try:
|
|
19
|
+
data = json.load(f)
|
|
20
|
+
except json.JSONDecodeError as e:
|
|
21
|
+
logger.error(f"The file doesn't contain a valid JSON: {e}")
|
|
22
|
+
raise InvalidJSONException(f"File {file_path} doesn't contain valid JSON.")
|
|
23
|
+
|
|
24
|
+
return data
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from pygeai.lab.models import Agent, Tool, Task, AgenticProcess
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class AgentParser:
|
|
5
|
+
|
|
6
|
+
@classmethod
|
|
7
|
+
def get_agent(cls, data: dict):
|
|
8
|
+
agent = Agent.model_validate(data)
|
|
9
|
+
|
|
10
|
+
return agent
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ToolParser:
|
|
14
|
+
|
|
15
|
+
@classmethod
|
|
16
|
+
def get_tool(cls, data: dict):
|
|
17
|
+
tool = Tool.model_validate(data)
|
|
18
|
+
|
|
19
|
+
return tool
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TaskParser:
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def get_task(cls, data: dict):
|
|
26
|
+
task = Task.model_validate(data)
|
|
27
|
+
|
|
28
|
+
return task
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class AgenticProcessParser:
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def get_agentic_process(cls, data: dict):
|
|
35
|
+
proces = AgenticProcess.model_validate(data)
|
|
36
|
+
|
|
37
|
+
return proces
|
|
38
|
+
|
|
39
|
+
|
|
File without changes
|