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
pygeai/organization/mappers.py
CHANGED
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
from pygeai.core.base.mappers import ModelMapper
|
|
2
|
-
from pygeai.core.
|
|
2
|
+
from pygeai.core.models import Assistant, Project, Role, Member, OrganizationMembership, ProjectMembership, Organization
|
|
3
3
|
from pygeai.organization.responses import AssistantListResponse, ProjectListResponse, ProjectDataResponse, \
|
|
4
|
-
ProjectTokensResponse, ProjectItemListResponse
|
|
4
|
+
ProjectTokensResponse, ProjectItemListResponse, MembershipsResponse, ProjectMembershipsResponse, \
|
|
5
|
+
ProjectRolesResponse, ProjectMembersResponse, OrganizationMembersResponse, OrganizationListResponse, \
|
|
6
|
+
OrganizationDataResponse
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
class OrganizationResponseMapper:
|
|
8
10
|
|
|
9
11
|
@classmethod
|
|
10
12
|
def map_to_assistant_list_response(cls, data: dict) -> AssistantListResponse:
|
|
11
|
-
assistant_list =
|
|
13
|
+
assistant_list = data.get('assistants')
|
|
14
|
+
if "projectName" in data and assistant_list:
|
|
15
|
+
for assistant in assistant_list:
|
|
16
|
+
assistant.update({
|
|
17
|
+
'projectId': data.get('projectId'),
|
|
18
|
+
'projectName': data.get('projectName')
|
|
19
|
+
})
|
|
12
20
|
|
|
13
|
-
|
|
21
|
+
assistant_list = cls.map_to_assistant_list(data)
|
|
14
22
|
|
|
15
23
|
return AssistantListResponse(
|
|
16
24
|
assistants=assistant_list,
|
|
17
|
-
project=project
|
|
18
25
|
)
|
|
19
26
|
|
|
20
27
|
@classmethod
|
|
@@ -49,65 +56,123 @@ class OrganizationResponseMapper:
|
|
|
49
56
|
|
|
50
57
|
@classmethod
|
|
51
58
|
def map_to_project_data(cls, data: dict) -> ProjectDataResponse:
|
|
52
|
-
organization = ModelMapper.map_to_organization(data)
|
|
53
59
|
project = ModelMapper.map_to_project(data)
|
|
54
|
-
search_profile_list = cls.map_to_search_profile_list(data)
|
|
55
|
-
token_list = cls.map_to_token_list(data)
|
|
56
|
-
usage_limit = ModelMapper.map_to_usage_limit(data)
|
|
57
60
|
|
|
58
61
|
return ProjectDataResponse(
|
|
59
|
-
organization=organization,
|
|
60
62
|
project=project,
|
|
61
|
-
search_profiles=search_profile_list,
|
|
62
|
-
tokens=token_list,
|
|
63
|
-
usage_limit=usage_limit
|
|
64
63
|
)
|
|
65
64
|
|
|
66
|
-
@classmethod
|
|
67
|
-
def map_to_search_profile_list(cls, data: dict) -> list[ProjectSearchProfile]:
|
|
68
|
-
search_profile_list = list()
|
|
69
|
-
search_profiles = data.get('search_profiles')
|
|
70
|
-
if search_profiles is not None and any(search_profiles):
|
|
71
|
-
for search_profile_data in search_profiles:
|
|
72
|
-
search_profile = ModelMapper.map_to_search_profile(search_profile_data)
|
|
73
|
-
search_profile_list.append(search_profile)
|
|
74
|
-
|
|
75
|
-
return search_profile_list
|
|
76
|
-
|
|
77
65
|
@classmethod
|
|
78
66
|
def map_to_token_list_response(cls, data: dict) -> ProjectTokensResponse:
|
|
79
|
-
token_list =
|
|
67
|
+
token_list = ModelMapper.map_to_token_list(data)
|
|
80
68
|
|
|
81
69
|
return ProjectTokensResponse(
|
|
82
70
|
tokens=token_list
|
|
83
71
|
)
|
|
84
72
|
|
|
85
|
-
@classmethod
|
|
86
|
-
def map_to_token_list(cls, data: dict) -> list[ProjectToken]:
|
|
87
|
-
token_list = list()
|
|
88
|
-
tokens = data.get('tokens')
|
|
89
|
-
if tokens is not None and any(tokens):
|
|
90
|
-
for token_data in tokens:
|
|
91
|
-
token = ModelMapper.map_to_token(token_data)
|
|
92
|
-
token_list.append(token)
|
|
93
|
-
|
|
94
|
-
return token_list
|
|
95
|
-
|
|
96
73
|
@classmethod
|
|
97
74
|
def map_to_item_list_response(cls, data: dict) -> ProjectItemListResponse:
|
|
98
|
-
item_list =
|
|
75
|
+
item_list = ModelMapper.map_to_item_list(data)
|
|
99
76
|
|
|
100
77
|
return ProjectItemListResponse(
|
|
101
78
|
items=item_list
|
|
102
79
|
)
|
|
103
80
|
|
|
104
81
|
@classmethod
|
|
105
|
-
def
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
82
|
+
def map_to_memberships_response(cls, data: dict) -> MembershipsResponse:
|
|
83
|
+
count = data.get("count", 0)
|
|
84
|
+
pages = data.get("pages", 0)
|
|
85
|
+
organizations_data = data.get("organizations", [])
|
|
86
|
+
organizations = []
|
|
87
|
+
|
|
88
|
+
for org_data in organizations_data:
|
|
89
|
+
org = OrganizationMembership.model_validate(org_data)
|
|
90
|
+
organizations.append(org)
|
|
91
|
+
|
|
92
|
+
return MembershipsResponse(
|
|
93
|
+
count=count,
|
|
94
|
+
pages=pages,
|
|
95
|
+
organizations=organizations
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
@classmethod
|
|
99
|
+
def map_to_project_memberships_response(cls, data: dict) -> ProjectMembershipsResponse:
|
|
100
|
+
count = data.get("count", 0)
|
|
101
|
+
pages = data.get("pages", 0)
|
|
102
|
+
projects_data = data.get("projects", [])
|
|
103
|
+
projects = []
|
|
104
|
+
|
|
105
|
+
for project_data in projects_data:
|
|
106
|
+
project = ProjectMembership.model_validate(project_data)
|
|
107
|
+
projects.append(project)
|
|
108
|
+
|
|
109
|
+
return ProjectMembershipsResponse(
|
|
110
|
+
count=count,
|
|
111
|
+
pages=pages,
|
|
112
|
+
projects=projects
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def map_to_project_roles_response(cls, data: dict) -> ProjectRolesResponse:
|
|
117
|
+
roles_data = data.get("roles", [])
|
|
118
|
+
roles = []
|
|
119
|
+
|
|
120
|
+
for role_data in roles_data:
|
|
121
|
+
role = Role.model_validate(role_data)
|
|
122
|
+
roles.append(role)
|
|
123
|
+
|
|
124
|
+
return ProjectRolesResponse(
|
|
125
|
+
roles=roles
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
@classmethod
|
|
129
|
+
def map_to_project_members_response(cls, data: dict) -> ProjectMembersResponse:
|
|
130
|
+
members_data = data.get("members", [])
|
|
131
|
+
members = []
|
|
132
|
+
|
|
133
|
+
for member_data in members_data:
|
|
134
|
+
member = Member.model_validate(member_data)
|
|
135
|
+
members.append(member)
|
|
136
|
+
|
|
137
|
+
return ProjectMembersResponse(
|
|
138
|
+
members=members
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
@classmethod
|
|
142
|
+
def map_to_organization_members_response(cls, data: dict) -> OrganizationMembersResponse:
|
|
143
|
+
members_data = data.get("members", [])
|
|
144
|
+
members = []
|
|
145
|
+
|
|
146
|
+
for member_data in members_data:
|
|
147
|
+
member = Member.model_validate(member_data)
|
|
148
|
+
members.append(member)
|
|
149
|
+
|
|
150
|
+
return OrganizationMembersResponse(
|
|
151
|
+
members=members
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
@classmethod
|
|
155
|
+
def map_to_organization_list_response(cls, data: dict) -> OrganizationListResponse:
|
|
156
|
+
count = data.get("count", 0)
|
|
157
|
+
pages = data.get("pages", 0)
|
|
158
|
+
organizations_data = data.get("organizations", [])
|
|
159
|
+
organizations = []
|
|
160
|
+
|
|
161
|
+
for org_data in organizations_data:
|
|
162
|
+
organization = Organization.model_validate(org_data)
|
|
163
|
+
organizations.append(organization)
|
|
164
|
+
|
|
165
|
+
return OrganizationListResponse(
|
|
166
|
+
count=count,
|
|
167
|
+
pages=pages,
|
|
168
|
+
organizations=organizations
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
@classmethod
|
|
172
|
+
def map_to_organization_data_response(cls, data: dict) -> OrganizationDataResponse:
|
|
173
|
+
organization = Organization.model_validate(data)
|
|
174
|
+
|
|
175
|
+
return OrganizationDataResponse(
|
|
176
|
+
organization=organization
|
|
177
|
+
)
|
|
178
|
+
|
pygeai/organization/responses.py
CHANGED
|
@@ -1,26 +1,19 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
1
|
from pydantic.main import BaseModel
|
|
4
2
|
|
|
5
|
-
from pygeai.core.
|
|
6
|
-
|
|
3
|
+
from pygeai.core.models import Assistant, Project, ProjectToken, \
|
|
4
|
+
RequestItem, Role, Member, OrganizationMembership, ProjectMembership, Organization
|
|
7
5
|
|
|
8
6
|
|
|
9
7
|
class AssistantListResponse(BaseModel):
|
|
10
8
|
assistants: list[Assistant]
|
|
11
|
-
project: Project
|
|
12
9
|
|
|
13
10
|
|
|
14
11
|
class ProjectListResponse(BaseModel):
|
|
15
|
-
projects
|
|
12
|
+
projects: list[Project]
|
|
16
13
|
|
|
17
14
|
|
|
18
15
|
class ProjectDataResponse(BaseModel):
|
|
19
|
-
organization: Optional[Organization]
|
|
20
16
|
project: Project
|
|
21
|
-
search_profile: Optional[list[ProjectSearchProfile]]
|
|
22
|
-
tokens: Optional[list[ProjectToken]]
|
|
23
|
-
usage_limit: Optional[ProjectUsageLimit]
|
|
24
17
|
|
|
25
18
|
|
|
26
19
|
class ProjectTokensResponse(BaseModel):
|
|
@@ -28,4 +21,61 @@ class ProjectTokensResponse(BaseModel):
|
|
|
28
21
|
|
|
29
22
|
|
|
30
23
|
class ProjectItemListResponse(BaseModel):
|
|
31
|
-
items: list[
|
|
24
|
+
items: list[RequestItem]
|
|
25
|
+
|
|
26
|
+
def to_list(self):
|
|
27
|
+
return [item.to_dict() for item in self.items] if self.items else []
|
|
28
|
+
|
|
29
|
+
def __getitem__(self, index: int) -> RequestItem:
|
|
30
|
+
if self.items is None:
|
|
31
|
+
raise IndexError("ProjectItemListResponse is empty")
|
|
32
|
+
return self.items[index]
|
|
33
|
+
|
|
34
|
+
def __len__(self) -> int:
|
|
35
|
+
return len(self.items) if self.items else 0
|
|
36
|
+
|
|
37
|
+
def __iter__(self):
|
|
38
|
+
"""Make ProjectItemListResponse iterable over its items."""
|
|
39
|
+
if self.items is None:
|
|
40
|
+
return iter([])
|
|
41
|
+
return iter(self.items)
|
|
42
|
+
|
|
43
|
+
def append(self, item: RequestItem) -> None:
|
|
44
|
+
"""Append an Agent instance to the items list."""
|
|
45
|
+
if self.items is None:
|
|
46
|
+
self.items = []
|
|
47
|
+
self.items.append(item)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class MembershipsResponse(BaseModel):
|
|
51
|
+
count: int
|
|
52
|
+
pages: int
|
|
53
|
+
organizations: list[OrganizationMembership]
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class ProjectMembershipsResponse(BaseModel):
|
|
57
|
+
count: int
|
|
58
|
+
pages: int
|
|
59
|
+
projects: list[ProjectMembership]
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ProjectRolesResponse(BaseModel):
|
|
63
|
+
roles: list[Role]
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class ProjectMembersResponse(BaseModel):
|
|
67
|
+
members: list[Member]
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class OrganizationMembersResponse(BaseModel):
|
|
71
|
+
members: list[Member]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class OrganizationListResponse(BaseModel):
|
|
75
|
+
count: int
|
|
76
|
+
pages: int
|
|
77
|
+
organizations: list[Organization]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class OrganizationDataResponse(BaseModel):
|
|
81
|
+
organization: Organization
|
pygeai/proxy/__init__.py
ADDED
|
File without changes
|
pygeai/proxy/clients.py
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Optional, Dict, Any, List
|
|
3
|
+
import uuid
|
|
4
|
+
import requests
|
|
5
|
+
from urllib3.exceptions import MaxRetryError
|
|
6
|
+
from pygeai.proxy.tool import ProxiedTool
|
|
7
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
8
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class ToolProxyData:
|
|
13
|
+
"""
|
|
14
|
+
Data class representing a tool proxy registration.
|
|
15
|
+
|
|
16
|
+
:param id: Optional[uuid.UUID] - Unique identifier for the proxy. Defaults to None.
|
|
17
|
+
:param name: Optional[str] - Name of the proxy. Defaults to None.
|
|
18
|
+
:param description: Optional[str] - Description of the proxy. Defaults to None.
|
|
19
|
+
:param affinity: Optional[uuid.UUID] - Affinity UUID. Defaults to None.
|
|
20
|
+
:param tools: Optional[List[Tool]] - List of tools. Defaults to None.
|
|
21
|
+
"""
|
|
22
|
+
id: Optional[uuid.UUID] = None
|
|
23
|
+
name: Optional[str] = None
|
|
24
|
+
description: Optional[str] = None
|
|
25
|
+
affinity: Optional[uuid.UUID] = None
|
|
26
|
+
tools: Optional[List[ProxiedTool]] = None
|
|
27
|
+
|
|
28
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
29
|
+
"""
|
|
30
|
+
Convert the data to a dictionary for API requests.
|
|
31
|
+
|
|
32
|
+
:return: Dict[str, Any] - Dictionary containing proxy data
|
|
33
|
+
"""
|
|
34
|
+
return {
|
|
35
|
+
"id": str(self.id) if self.id else None,
|
|
36
|
+
"name": self.name,
|
|
37
|
+
"description": self.description,
|
|
38
|
+
"affinity": str(self.affinity) if self.affinity else str(uuid.UUID(int=0)),
|
|
39
|
+
"tools": [
|
|
40
|
+
{
|
|
41
|
+
"name": tool.get_full_name(),
|
|
42
|
+
**({"publicName": tool.get_public_name()} if tool.is_public() else {}),
|
|
43
|
+
"server": tool.server_name,
|
|
44
|
+
"description": tool.description,
|
|
45
|
+
"inputSchema": tool.format_for_llm()
|
|
46
|
+
} for tool in self.tools
|
|
47
|
+
] if self.tools else []
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@dataclass
|
|
51
|
+
class ToolProxyJob:
|
|
52
|
+
"""
|
|
53
|
+
Represents a Tool Proxy Job.
|
|
54
|
+
|
|
55
|
+
:param id: uuid.UUID - Unique identifier for the job
|
|
56
|
+
:param proxy_id: uuid.UUID - ID of the proxy handling the job
|
|
57
|
+
:param proxy_status: str - Status of the proxy
|
|
58
|
+
:param job_status: str - Status of the job
|
|
59
|
+
:param input: Optional[str] - Input data for the job. Defaults to None.
|
|
60
|
+
:param output: Optional[str] - Output data from the job. Defaults to None.
|
|
61
|
+
:param server: Optional[str] - Server handling the job. Defaults to None.
|
|
62
|
+
"""
|
|
63
|
+
id: uuid.UUID
|
|
64
|
+
proxy_id: uuid.UUID
|
|
65
|
+
proxy_status: str
|
|
66
|
+
job_status: str
|
|
67
|
+
input: Optional[str] = None
|
|
68
|
+
output: Optional[str] = None
|
|
69
|
+
server: Optional[str] = None
|
|
70
|
+
|
|
71
|
+
@staticmethod
|
|
72
|
+
def from_dict(data: Dict[str, Any]) -> 'ToolProxyJob':
|
|
73
|
+
"""
|
|
74
|
+
Create a ToolProxyJob from a dictionary.
|
|
75
|
+
|
|
76
|
+
:param data: Dict[str, Any] - Dictionary containing job data
|
|
77
|
+
:return: ToolProxyJob - New ToolProxyJob instance
|
|
78
|
+
"""
|
|
79
|
+
return ToolProxyJob(
|
|
80
|
+
id=uuid.UUID(data['id']),
|
|
81
|
+
proxy_id=uuid.UUID(data['proxyId']),
|
|
82
|
+
proxy_status=data['proxyStatus'],
|
|
83
|
+
job_status=data['jobStatus'],
|
|
84
|
+
input=data.get('input'),
|
|
85
|
+
output=data.get('output'),
|
|
86
|
+
server=data.get('server')
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
@dataclass
|
|
90
|
+
class ToolProxyJobResult:
|
|
91
|
+
"""
|
|
92
|
+
Represents the result of a Tool Proxy Job.
|
|
93
|
+
|
|
94
|
+
:param success: bool - Whether the job was successful
|
|
95
|
+
:param job: ToolProxyJob - The job that was executed
|
|
96
|
+
"""
|
|
97
|
+
success: bool
|
|
98
|
+
job: ToolProxyJob
|
|
99
|
+
|
|
100
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
101
|
+
"""
|
|
102
|
+
Convert the result to a dictionary for API requests.
|
|
103
|
+
|
|
104
|
+
:return: Dict[str, Any] - Dictionary containing job result
|
|
105
|
+
"""
|
|
106
|
+
return {
|
|
107
|
+
"success": self.success,
|
|
108
|
+
"job": {
|
|
109
|
+
"id": str(self.job.id),
|
|
110
|
+
"jobStatus": self.job.job_status,
|
|
111
|
+
"output": self.job.output
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class ProxyClient:
|
|
117
|
+
"""
|
|
118
|
+
Client for interacting with the GEAI API proxy.
|
|
119
|
+
|
|
120
|
+
:param base_url: str - Base URL of the GEAI API
|
|
121
|
+
:param api_key: str - API key for authentication
|
|
122
|
+
:param proxy_id: uuid.UUID - ID of the proxy
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
def __init__(self, api_key: str, base_url: str, proxy_id: uuid.UUID ):
|
|
126
|
+
"""
|
|
127
|
+
Initialize a new proxy client.
|
|
128
|
+
|
|
129
|
+
:param base_url: str - Base URL of the GEAI API
|
|
130
|
+
:param api_key: str - API key for authentication
|
|
131
|
+
:param proxy_id: uuid.UUID - ID of the proxy
|
|
132
|
+
"""
|
|
133
|
+
self.proxy_id = proxy_id
|
|
134
|
+
self.base_url = base_url.rstrip('/') + '/v2/tool-proxy'
|
|
135
|
+
self.session = requests.Session()
|
|
136
|
+
self.session.headers.update({'Authorization': f'Bearer {api_key}'})
|
|
137
|
+
# Configurar el timeout
|
|
138
|
+
self.session.timeout = (5, 30) # (connect timeout, read timeout)
|
|
139
|
+
|
|
140
|
+
def _make_request(self, method: str, endpoint: str, **kwargs) -> Dict[str, Any]:
|
|
141
|
+
"""
|
|
142
|
+
Make a request to the proxy service.
|
|
143
|
+
|
|
144
|
+
:param method: str - HTTP method (GET, POST, etc.)
|
|
145
|
+
:param endpoint: str - API endpoint
|
|
146
|
+
:param **kwargs: Additional arguments for requests
|
|
147
|
+
:return: Dict[str, Any] - Response data as dictionary
|
|
148
|
+
:raises: RequestException - For any request-related error
|
|
149
|
+
"""
|
|
150
|
+
url = self.base_url + endpoint
|
|
151
|
+
try:
|
|
152
|
+
response = self.session.request(method, url, **kwargs)
|
|
153
|
+
response.raise_for_status()
|
|
154
|
+
try:
|
|
155
|
+
validate_status_code(response)
|
|
156
|
+
return parse_json_response(response, "unknown operation")
|
|
157
|
+
except ValueError:
|
|
158
|
+
return response.text
|
|
159
|
+
except requests.exceptions.Timeout:
|
|
160
|
+
raise TimeoutError(f"Request timed out for {url}")
|
|
161
|
+
except requests.exceptions.HTTPError as e:
|
|
162
|
+
raise requests.exceptions.HTTPError(f"HTTP error for {url}: {e}") from e
|
|
163
|
+
except requests.exceptions.SSLError as e:
|
|
164
|
+
raise requests.exceptions.SSLError(f"SSL error for {url}: {e}") from e
|
|
165
|
+
except requests.exceptions.ProxyError as e:
|
|
166
|
+
raise requests.exceptions.ProxyError(f"Proxy error for {url}: {e}") from e
|
|
167
|
+
except requests.exceptions.ConnectionError as e:
|
|
168
|
+
raise ConnectionError(f"Failed to connect to {url}") from e
|
|
169
|
+
except MaxRetryError:
|
|
170
|
+
raise
|
|
171
|
+
except requests.exceptions.RequestException as e:
|
|
172
|
+
raise requests.exceptions.RequestException(f"Request failed for {url}: {e}") from e
|
|
173
|
+
except ValueError:
|
|
174
|
+
return {"response": response.text}
|
|
175
|
+
|
|
176
|
+
def register(self, proxy_data: ToolProxyData) -> Dict[str, Any]:
|
|
177
|
+
"""
|
|
178
|
+
Register a new tool proxy.
|
|
179
|
+
|
|
180
|
+
:param proxy_data: ToolProxyData - Object containing the proxy configuration and metadata
|
|
181
|
+
:return: Dict[str, Any] - Dictionary with the registration response
|
|
182
|
+
:raises: ConnectionError - If connection fails
|
|
183
|
+
:raises: MaxRetryError - If max retries are exceeded
|
|
184
|
+
:raises: requests.exceptions.RequestException - For other request errors
|
|
185
|
+
"""
|
|
186
|
+
proxy_data.id = self.proxy_id
|
|
187
|
+
data = {
|
|
188
|
+
"server": proxy_data.to_dict()
|
|
189
|
+
}
|
|
190
|
+
return self._make_request('POST', '/register', json=data)
|
|
191
|
+
|
|
192
|
+
def dequeue(self) -> List[ToolProxyJob]:
|
|
193
|
+
"""
|
|
194
|
+
Dequeue a job from the proxy.
|
|
195
|
+
|
|
196
|
+
:return: List[ToolProxyJob] - List of ToolProxyJob instances
|
|
197
|
+
:raises: RequestException - For any request-related error
|
|
198
|
+
"""
|
|
199
|
+
endpoint = f'/dequeue/{self.proxy_id}'
|
|
200
|
+
response_data = self._make_request('GET', endpoint)
|
|
201
|
+
return [ToolProxyJob.from_dict(job) for job in response_data]
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def send_result(self, result: ToolProxyJobResult):
|
|
205
|
+
"""
|
|
206
|
+
Send the result of a tool proxy job.
|
|
207
|
+
|
|
208
|
+
:param result: ToolProxyJobResult - Result object containing the job outcome
|
|
209
|
+
:return: None
|
|
210
|
+
:raises: RequestException - For any request-related error
|
|
211
|
+
"""
|
|
212
|
+
endpoint = f'/result/{self.proxy_id}'
|
|
213
|
+
data = {
|
|
214
|
+
"jobResult": result.to_dict()
|
|
215
|
+
}
|
|
216
|
+
self._make_request('POST', endpoint, json=data)
|
pygeai/proxy/config.py
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
from pygeai.core.common.config import SettingsManager
|
|
2
|
+
from typing import Optional
|
|
3
|
+
import uuid
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
class ProxySettingsManager(SettingsManager):
|
|
7
|
+
"""
|
|
8
|
+
Settings manager for the GEAI proxy.
|
|
9
|
+
Extends the base SettingsManager with proxy-specific settings.
|
|
10
|
+
|
|
11
|
+
:param DEFAULT_ALIAS: str - Default alias for proxy settings
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
DEFAULT_ALIAS = "default"
|
|
15
|
+
|
|
16
|
+
def __init__(self):
|
|
17
|
+
super().__init__()
|
|
18
|
+
self._current_alias = self.DEFAULT_ALIAS
|
|
19
|
+
|
|
20
|
+
def get_current_alias(self) -> str:
|
|
21
|
+
return self._current_alias
|
|
22
|
+
|
|
23
|
+
def set_current_alias(self, alias: str):
|
|
24
|
+
self._current_alias = alias
|
|
25
|
+
|
|
26
|
+
def get_proxy_id(self, alias: str = DEFAULT_ALIAS) -> Optional[uuid.UUID]:
|
|
27
|
+
"""
|
|
28
|
+
Get the proxy ID for a specific alias.
|
|
29
|
+
|
|
30
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
31
|
+
:return: Optional[uuid.UUID] - Proxy ID if set, None otherwise
|
|
32
|
+
"""
|
|
33
|
+
id_str = self.get_setting_value("PROXY_ID", alias)
|
|
34
|
+
return uuid.UUID(id_str) if id_str else None
|
|
35
|
+
|
|
36
|
+
def set_proxy_id(self, proxy_id: uuid.UUID, alias: str = DEFAULT_ALIAS):
|
|
37
|
+
"""
|
|
38
|
+
Set the proxy ID for a specific alias.
|
|
39
|
+
|
|
40
|
+
:param proxy_id: uuid.UUID - Proxy ID to set
|
|
41
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
42
|
+
"""
|
|
43
|
+
self.set_setting_value("PROXY_ID", str(proxy_id), alias)
|
|
44
|
+
|
|
45
|
+
def get_proxy_name(self, alias: str = DEFAULT_ALIAS) -> Optional[str]:
|
|
46
|
+
"""
|
|
47
|
+
Get the proxy name for a specific alias.
|
|
48
|
+
|
|
49
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
50
|
+
:return: Optional[str] - Proxy name if set, None otherwise
|
|
51
|
+
"""
|
|
52
|
+
return self.get_setting_value("PROXY_NAME", alias)
|
|
53
|
+
|
|
54
|
+
def set_proxy_name(self, name: str, alias: str = DEFAULT_ALIAS):
|
|
55
|
+
"""
|
|
56
|
+
Set the proxy name for a specific alias.
|
|
57
|
+
|
|
58
|
+
:param name: str - Proxy name to set
|
|
59
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
60
|
+
"""
|
|
61
|
+
self.set_setting_value("PROXY_NAME", name, alias)
|
|
62
|
+
|
|
63
|
+
def get_proxy_description(self, alias: str = DEFAULT_ALIAS) -> Optional[str]:
|
|
64
|
+
"""
|
|
65
|
+
Get the proxy description for a specific alias.
|
|
66
|
+
|
|
67
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
68
|
+
:return: Optional[str] - Proxy description if set, None otherwise
|
|
69
|
+
"""
|
|
70
|
+
return self.get_setting_value("PROXY_DESCRIPTION", alias)
|
|
71
|
+
|
|
72
|
+
def set_proxy_description(self, description: str, alias: str = DEFAULT_ALIAS):
|
|
73
|
+
"""
|
|
74
|
+
Set the proxy description for a specific alias.
|
|
75
|
+
|
|
76
|
+
:param description: str - Proxy description to set
|
|
77
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
78
|
+
"""
|
|
79
|
+
self.set_setting_value("PROXY_DESCRIPTION", description, alias)
|
|
80
|
+
|
|
81
|
+
def get_proxy_affinity(self, alias: str = DEFAULT_ALIAS) -> Optional[uuid.UUID]:
|
|
82
|
+
"""
|
|
83
|
+
Get the proxy affinity for a specific alias.
|
|
84
|
+
|
|
85
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
86
|
+
:return: Optional[uuid.UUID] - Proxy affinity if set, None otherwise
|
|
87
|
+
"""
|
|
88
|
+
default_affinity = uuid.UUID(int=0)
|
|
89
|
+
if not self.has_value("PROXY_AFFINITY", alias):
|
|
90
|
+
return default_affinity
|
|
91
|
+
affinity_str = self.get_setting_value("PROXY_AFFINITY", alias)
|
|
92
|
+
return uuid.UUID(affinity_str) if affinity_str else default_affinity
|
|
93
|
+
|
|
94
|
+
def set_proxy_affinity(self, affinity: uuid.UUID, alias: str = DEFAULT_ALIAS):
|
|
95
|
+
"""
|
|
96
|
+
Set the proxy affinity for a specific alias.
|
|
97
|
+
|
|
98
|
+
:param affinity: uuid.UUID - Proxy affinity to set
|
|
99
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
100
|
+
"""
|
|
101
|
+
self.set_setting_value("PROXY_AFFINITY", str(affinity), alias)
|
|
102
|
+
|
|
103
|
+
def get_setting_value(self, setting_key: str, alias: str):
|
|
104
|
+
"""
|
|
105
|
+
Get the value of a specific setting for a specific alias.
|
|
106
|
+
|
|
107
|
+
:param setting_key: str - Key of the setting to get
|
|
108
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
109
|
+
"""
|
|
110
|
+
env_var_name = setting_key.upper()
|
|
111
|
+
if os.getenv(env_var_name) and alias == self.DEFAULT_ALIAS:
|
|
112
|
+
return os.getenv(env_var_name)
|
|
113
|
+
else:
|
|
114
|
+
return super().get_setting_value(setting_key, alias)
|
|
115
|
+
|
|
116
|
+
def get_proxy_config(self, alias: str = DEFAULT_ALIAS) -> dict:
|
|
117
|
+
"""
|
|
118
|
+
Get the complete proxy configuration for a specific alias.
|
|
119
|
+
|
|
120
|
+
:param alias: str - Alias for the settings section. Defaults to DEFAULT_ALIAS.
|
|
121
|
+
:return: dict - Dictionary containing proxy configuration
|
|
122
|
+
"""
|
|
123
|
+
return {
|
|
124
|
+
"id": str(self.get_proxy_id(alias)) if self.get_proxy_id(alias) else None,
|
|
125
|
+
"name": self.get_proxy_name(alias),
|
|
126
|
+
"description": self.get_proxy_description(alias),
|
|
127
|
+
"affinity": str(self.get_proxy_affinity(alias)) if self.get_proxy_affinity(alias) else None
|
|
128
|
+
}
|