pygeai 0.1.51b3__py3-none-any.whl → 0.6.0b15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pygeai might be problematic. Click here for more details.
- pygeai/__init__.py +9 -1
- pygeai/_docs/Makefile +20 -0
- pygeai/_docs/make.bat +35 -0
- pygeai/_docs/source/conf.py +117 -0
- pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
- pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
- pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
- pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
- pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
- pygeai/_docs/source/content/ai_lab.rst +102 -0
- pygeai/_docs/source/content/analytics.rst +598 -0
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- pygeai/_docs/source/content/api_reference/chat.rst +754 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +738 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rag.rst +710 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +58 -0
- pygeai/_docs/source/content/authentication.rst +295 -0
- pygeai/_docs/source/content/chat_gui.rst +121 -0
- pygeai/_docs/source/content/cli.rst +203 -0
- pygeai/_docs/source/content/debugger.rst +651 -0
- pygeai/_docs/source/content/intro.rst +67 -0
- pygeai/_docs/source/content/migration.rst +929 -0
- pygeai/_docs/source/content/modules.rst +7 -0
- pygeai/_docs/source/content/quickstart.rst +143 -0
- pygeai/_docs/source/content/samples.rst +394 -0
- pygeai/_docs/source/index.rst +75 -0
- pygeai/_docs/source/modules.rst +7 -0
- pygeai/_docs/source/pygeai.admin.rst +29 -0
- pygeai/_docs/source/pygeai.analytics.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
- pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
- pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.rst +55 -0
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.chat.rst +69 -0
- pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
- pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
- pygeai/_docs/source/pygeai.cli.rst +62 -0
- pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
- pygeai/_docs/source/pygeai.core.base.rst +53 -0
- pygeai/_docs/source/pygeai.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
- pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
- pygeai/_docs/source/pygeai.core.files.rst +61 -0
- pygeai/_docs/source/pygeai.core.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
- pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
- pygeai/_docs/source/pygeai.core.rst +63 -0
- pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.rst +37 -0
- pygeai/_docs/source/pygeai.core.utils.rst +37 -0
- pygeai/_docs/source/pygeai.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.rst +31 -0
- pygeai/_docs/source/pygeai.flows.rst +29 -0
- pygeai/_docs/source/pygeai.gam.rst +29 -0
- pygeai/_docs/source/pygeai.health.rst +29 -0
- pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
- pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
- pygeai/_docs/source/pygeai.lab.rst +65 -0
- pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
- pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
- pygeai/_docs/source/pygeai.man.man1.rst +10 -0
- pygeai/_docs/source/pygeai.man.rst +18 -0
- pygeai/_docs/source/pygeai.migration.rst +29 -0
- pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
- pygeai/_docs/source/pygeai.organization.rst +61 -0
- pygeai/_docs/source/pygeai.proxy.rst +53 -0
- pygeai/_docs/source/pygeai.rst +35 -0
- pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
- pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
- pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
- pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
- pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
- pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
- pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
- pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
- pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
- pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.rst +39 -0
- pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
- pygeai/_docs/source/pygeai.tests.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.gam.rst +21 -0
- pygeai/_docs/source/pygeai.tests.health.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
- pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
- pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
- pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
- pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
- pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
- pygeai/_docs/source/pygeai.tests.rst +33 -0
- pygeai/admin/clients.py +14 -11
- pygeai/admin/endpoints.py +2 -2
- pygeai/analytics/clients.py +505 -0
- pygeai/analytics/endpoints.py +35 -0
- pygeai/analytics/managers.py +606 -0
- pygeai/analytics/mappers.py +207 -0
- pygeai/analytics/responses.py +240 -0
- pygeai/assistant/clients.py +18 -45
- pygeai/assistant/data/clients.py +1 -0
- pygeai/assistant/data_analyst/clients.py +8 -12
- pygeai/assistant/managers.py +195 -157
- pygeai/assistant/mappers.py +4 -2
- pygeai/assistant/rag/clients.py +27 -67
- pygeai/assistant/rag/mappers.py +12 -6
- pygeai/assistant/rag/models.py +301 -159
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +308 -37
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +2 -8
- pygeai/chat/managers.py +9 -6
- pygeai/chat/session.py +38 -0
- pygeai/chat/settings.py +6 -0
- pygeai/chat/ui.py +678 -0
- pygeai/cli/__init__.py +0 -1
- pygeai/cli/commands/admin.py +7 -10
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +9 -9
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +71 -9
- pygeai/cli/commands/chat.py +676 -19
- pygeai/cli/commands/common.py +28 -24
- pygeai/cli/commands/configuration.py +66 -13
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +58 -11
- pygeai/cli/commands/evaluation.py +38 -38
- pygeai/cli/commands/feedback.py +3 -4
- pygeai/cli/commands/files.py +7 -8
- pygeai/cli/commands/gam.py +85 -10
- pygeai/cli/commands/lab/ai_lab.py +340 -484
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/spec.py +273 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/commands/llm.py +6 -7
- pygeai/cli/commands/migrate.py +1064 -436
- pygeai/cli/commands/organization.py +516 -11
- pygeai/cli/commands/rag.py +13 -14
- pygeai/cli/commands/rerank.py +3 -5
- pygeai/cli/commands/secrets.py +8 -9
- pygeai/cli/commands/usage_limits.py +18 -20
- pygeai/cli/commands/validators.py +144 -1
- pygeai/cli/commands/version.py +4 -5
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +170 -31
- pygeai/cli/geai_proxy.py +86 -25
- pygeai/cli/install_man.py +93 -22
- pygeai/cli/parsers.py +75 -25
- pygeai/cli/texts/help.py +265 -28
- pygeai/core/base/clients.py +53 -12
- pygeai/core/base/mappers.py +11 -2
- pygeai/core/base/session.py +95 -11
- pygeai/core/common/config.py +78 -14
- pygeai/core/common/exceptions.py +96 -6
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +23 -5
- pygeai/core/embeddings/managers.py +9 -4
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +8 -3
- pygeai/core/files/clients.py +23 -24
- pygeai/core/files/managers.py +121 -30
- pygeai/core/files/responses.py +4 -3
- pygeai/core/handlers.py +10 -1
- pygeai/core/llm/clients.py +22 -29
- pygeai/core/models.py +127 -11
- pygeai/core/plugins/clients.py +6 -6
- pygeai/core/rerank/clients.py +9 -3
- pygeai/core/rerank/managers.py +22 -5
- pygeai/core/secrets/clients.py +16 -37
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +159 -49
- pygeai/core/utils/__init__.py +0 -0
- pygeai/core/utils/console.py +83 -0
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +854 -14
- pygeai/evaluation/clients.py +7 -4
- pygeai/evaluation/dataset/clients.py +46 -44
- pygeai/evaluation/plan/clients.py +28 -26
- pygeai/evaluation/result/clients.py +38 -5
- pygeai/gam/clients.py +50 -28
- pygeai/gam/endpoints.py +2 -1
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -90
- pygeai/lab/agents/clients.py +203 -162
- pygeai/lab/agents/endpoints.py +4 -0
- pygeai/lab/agents/mappers.py +57 -7
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +571 -541
- pygeai/lab/models.py +108 -19
- pygeai/lab/processes/clients.py +332 -340
- pygeai/lab/processes/mappers.py +3 -3
- pygeai/lab/runners.py +90 -0
- pygeai/lab/spec/__init__.py +0 -0
- pygeai/lab/spec/loader.py +24 -0
- pygeai/lab/spec/parsers.py +39 -0
- pygeai/lab/strategies/clients.py +67 -63
- pygeai/lab/strategies/mappers.py +1 -1
- pygeai/lab/tools/clients.py +85 -118
- pygeai/lab/tools/endpoints.py +4 -0
- pygeai/lab/tools/mappers.py +5 -5
- pygeai/man/man1/geai-proxy.1 +116 -0
- pygeai/man/man1/geai.1 +2580 -66
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +468 -146
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +245 -50
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/clients.py +34 -32
- pygeai/organization/limits/managers.py +108 -49
- pygeai/organization/managers.py +347 -53
- pygeai/organization/mappers.py +102 -2
- pygeai/organization/responses.py +58 -1
- pygeai/proxy/clients.py +6 -3
- pygeai/proxy/config.py +14 -1
- pygeai/proxy/managers.py +61 -33
- pygeai/proxy/servers.py +196 -51
- pygeai/proxy/tool.py +33 -16
- pygeai/tests/admin/__init__.py +0 -0
- pygeai/tests/admin/test_clients.py +148 -0
- pygeai/tests/analytics/__init__.py +0 -0
- pygeai/tests/analytics/test_clients.py +86 -0
- pygeai/tests/analytics/test_managers.py +94 -0
- pygeai/tests/analytics/test_mappers.py +84 -0
- pygeai/tests/analytics/test_responses.py +73 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -82
- pygeai/tests/assistants/test_managers.py +191 -57
- pygeai/tests/auth/__init__.py +0 -0
- pygeai/tests/auth/test_clients.py +289 -0
- pygeai/tests/auth/test_oauth.py +172 -0
- pygeai/tests/auth/test_session_logging.py +150 -0
- pygeai/tests/chat/__init__.py +0 -0
- pygeai/tests/chat/test_clients.py +393 -0
- pygeai/tests/chat/test_iris.py +38 -0
- pygeai/tests/chat/test_session.py +62 -0
- pygeai/tests/chat/test_ui.py +224 -0
- pygeai/tests/cli/commands/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
- pygeai/tests/cli/commands/lab/test_common.py +208 -0
- pygeai/tests/cli/commands/lab/test_spec.py +246 -0
- pygeai/tests/cli/commands/test_assistant.py +202 -0
- pygeai/tests/cli/commands/test_chat.py +130 -0
- pygeai/tests/cli/commands/test_common.py +350 -0
- pygeai/tests/cli/commands/test_embeddings.py +132 -0
- pygeai/tests/cli/commands/test_evaluation.py +656 -0
- pygeai/tests/cli/commands/test_feedback.py +65 -0
- pygeai/tests/cli/commands/test_files.py +161 -0
- pygeai/tests/cli/commands/test_gam.py +201 -0
- pygeai/tests/cli/commands/test_llm.py +114 -0
- pygeai/tests/cli/commands/test_migrate.py +176 -0
- pygeai/tests/cli/commands/test_organization.py +276 -0
- pygeai/tests/cli/commands/test_rag.py +266 -0
- pygeai/tests/cli/commands/test_rerank.py +110 -0
- pygeai/tests/cli/commands/test_secrets.py +171 -0
- pygeai/tests/cli/commands/test_show_help.py +41 -0
- pygeai/tests/cli/commands/test_usage_limits.py +412 -0
- pygeai/tests/cli/commands/test_validators.py +160 -0
- pygeai/tests/cli/commands/test_version.py +81 -0
- pygeai/tests/cli/docker/__init__.py +0 -0
- pygeai/tests/cli/test_credentials_flag.py +316 -0
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +5 -5
- pygeai/tests/core/base/data/models.py +7 -0
- pygeai/tests/core/base/test_mappers.py +43 -11
- pygeai/tests/core/base/test_models.py +3 -1
- pygeai/tests/core/base/test_responses.py +53 -0
- pygeai/tests/core/common/__init__.py +0 -0
- pygeai/tests/core/common/data/__init__.py +0 -0
- pygeai/tests/core/common/test_config.py +186 -0
- pygeai/tests/core/common/test_decorators.py +69 -0
- pygeai/tests/core/embeddings/__init__.py +0 -0
- pygeai/tests/core/embeddings/test_clients.py +225 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/__init__.py +0 -0
- pygeai/tests/core/feedback/test_clients.py +64 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +124 -78
- pygeai/tests/core/files/test_mappers.py +137 -0
- pygeai/tests/core/files/test_models.py +103 -0
- pygeai/tests/core/files/test_responses.py +122 -0
- pygeai/tests/core/llm/__init__.py +0 -0
- pygeai/tests/core/llm/test_clients.py +142 -0
- pygeai/tests/core/plugins/__init__.py +0 -0
- pygeai/tests/core/plugins/test_clients.py +66 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +61 -39
- pygeai/tests/core/secrets/__init__.py +0 -0
- pygeai/tests/core/secrets/test_clients.py +264 -0
- pygeai/tests/core/services/__init__.py +0 -0
- pygeai/tests/core/services/test_rest.py +273 -0
- pygeai/tests/core/test_handlers.py +66 -0
- pygeai/tests/core/utils/__init__.py +0 -0
- pygeai/tests/core/utils/test_console.py +80 -0
- pygeai/tests/dbg/__init__.py +0 -0
- pygeai/tests/dbg/test_debugger.py +591 -0
- pygeai/tests/evaluation/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/test_clients.py +265 -0
- pygeai/tests/evaluation/plan/__init__.py +0 -0
- pygeai/tests/evaluation/plan/test_clients.py +195 -0
- pygeai/tests/evaluation/result/__init__.py +0 -0
- pygeai/tests/evaluation/result/test_clients.py +66 -0
- pygeai/tests/gam/__init__.py +0 -0
- pygeai/tests/gam/test_clients.py +195 -0
- pygeai/tests/health/__init__.py +0 -0
- pygeai/tests/health/test_clients.py +41 -0
- pygeai/tests/integration/__init__.py +0 -0
- pygeai/tests/integration/assistants/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/test_create_rag.py +91 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +158 -0
- pygeai/tests/integration/lab/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
- pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
- pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
- pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
- pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
- pygeai/tests/integration/lab/processes/__init__.py +0 -0
- pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
- pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
- pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
- pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
- pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
- pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
- pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
- pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
- pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
- pygeai/tests/lab/agents/__init__.py +0 -0
- pygeai/tests/lab/agents/test_clients.py +481 -0
- pygeai/tests/lab/agents/test_mappers.py +440 -0
- pygeai/tests/lab/processes/__init__.py +0 -0
- pygeai/tests/lab/processes/test_clients.py +1416 -0
- pygeai/tests/lab/processes/test_mappers.py +1092 -0
- pygeai/tests/lab/spec/__init__.py +0 -0
- pygeai/tests/lab/spec/test_loader.py +59 -0
- pygeai/tests/lab/spec/test_parsers.py +182 -0
- pygeai/tests/lab/strategies/__init__.py +0 -0
- pygeai/tests/lab/strategies/test_clients.py +241 -0
- pygeai/tests/lab/strategies/test_mappers.py +132 -0
- pygeai/tests/lab/test_managers.py +553 -0
- pygeai/tests/lab/test_models.py +500 -3
- pygeai/tests/lab/tools/__init__.py +0 -0
- pygeai/tests/lab/tools/test_clients.py +521 -0
- pygeai/tests/lab/tools/test_mappers.py +198 -0
- pygeai/tests/migration/__init__.py +0 -0
- pygeai/tests/migration/test_strategies.py +405 -0
- pygeai/tests/migration/test_tools.py +159 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +298 -56
- pygeai/tests/organization/test_clients.py +600 -30
- pygeai/tests/organization/test_managers.py +424 -0
- pygeai/tests/organization/test_mappers.py +153 -0
- pygeai/tests/organization/test_responses.py +137 -0
- pygeai/tests/proxy/__init__.py +1 -0
- pygeai/tests/proxy/test_clients.py +397 -0
- pygeai/tests/proxy/test_config.py +171 -0
- pygeai/tests/proxy/test_integration.py +305 -0
- pygeai/tests/proxy/test_managers.py +312 -0
- pygeai/tests/proxy/test_servers.py +387 -0
- pygeai/tests/proxy/test_tool.py +176 -0
- pygeai/tests/snippets/analytics/__init__.py +0 -0
- pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
- pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
- pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
- pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
- pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
- pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
- pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
- pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
- pygeai/tests/snippets/analytics/get_total_tokens.py +12 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_complete_example.py +67 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_instructions.py +19 -0
- pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
- pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
- pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
- pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/file_debugging.py +72 -0
- pygeai/tests/snippets/dbg/module_debugging.py +61 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/files/delete_file.py +1 -4
- pygeai/tests/snippets/files/get_file_content.py +2 -4
- pygeai/tests/snippets/files/get_file_data.py +1 -4
- pygeai/tests/snippets/files/get_file_list.py +1 -6
- pygeai/tests/snippets/files/upload_file.py +1 -5
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +25 -23
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +23 -23
- pygeai/tests/snippets/lab/agents/create_agent.py +5 -8
- pygeai/tests/snippets/lab/agents/create_agent_2.py +1 -5
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/delete_agent.py +1 -5
- pygeai/tests/snippets/lab/agents/get_agent.py +2 -11
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +2 -7
- pygeai/tests/snippets/lab/agents/list_agents.py +4 -7
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +2 -6
- pygeai/tests/snippets/lab/agents/update_agent.py +1 -5
- pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
- pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
- pygeai/tests/snippets/lab/crud_ui.py +462 -0
- pygeai/tests/snippets/lab/processes/create_process.py +3 -5
- pygeai/tests/snippets/lab/processes/create_task.py +3 -5
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +10 -19
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +2 -5
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +10 -16
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +13 -20
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +5 -7
- pygeai/tests/snippets/lab/processes/list_processes.py +5 -7
- pygeai/tests/snippets/lab/runner_1.py +1 -1
- pygeai/tests/snippets/lab/samples/summarize_files.py +3 -3
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +3 -6
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +2 -5
- pygeai/tests/snippets/lab/tools/create_tool.py +4 -10
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +2 -6
- pygeai/tests/snippets/lab/tools/get_parameter.py +5 -7
- pygeai/tests/snippets/lab/tools/get_tool.py +5 -7
- pygeai/tests/snippets/lab/tools/list_tools.py +3 -7
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +3 -5
- pygeai/tests/snippets/lab/tools/set_parameters.py +4 -9
- pygeai/tests/snippets/lab/tools/update_tool.py +4 -8
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
- pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
- pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
- pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
- pygeai/tests/snippets/lab/{file_summarizer_example.py → use_cases/file_summarizer_example.py} +3 -3
- pygeai/tests/snippets/lab/{file_summarizer_example_2.py → use_cases/file_summarizer_example_2.py} +12 -12
- pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
- pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +2 -2
- pygeai/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- pygeai/vendor/a2a/__init__.py +1 -0
- pygeai/vendor/a2a/auth/__init__.py +0 -0
- pygeai/vendor/a2a/auth/user.py +31 -0
- pygeai/vendor/a2a/client/__init__.py +19 -0
- pygeai/vendor/a2a/client/client.py +425 -0
- pygeai/vendor/a2a/client/errors.py +33 -0
- pygeai/vendor/a2a/client/helpers.py +22 -0
- pygeai/vendor/a2a/py.typed +0 -0
- pygeai/vendor/a2a/server/__init__.py +1 -0
- pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
- pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
- pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
- pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
- pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
- pygeai/vendor/a2a/server/apps/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
- pygeai/vendor/a2a/server/context.py +23 -0
- pygeai/vendor/a2a/server/events/__init__.py +21 -0
- pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
- pygeai/vendor/a2a/server/events/event_queue.py +156 -0
- pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
- pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
- pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
- pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
- pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
- pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
- pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
- pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
- pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
- pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
- pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
- pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
- pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
- pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
- pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
- pygeai/vendor/a2a/types.py +1624 -0
- pygeai/vendor/a2a/utils/__init__.py +40 -0
- pygeai/vendor/a2a/utils/artifact.py +72 -0
- pygeai/vendor/a2a/utils/errors.py +69 -0
- pygeai/vendor/a2a/utils/helpers.py +176 -0
- pygeai/vendor/a2a/utils/message.py +83 -0
- pygeai/vendor/a2a/utils/task.py +57 -0
- pygeai/vendor/a2a/utils/telemetry.py +299 -0
- pygeai-0.6.0b15.dist-info/METADATA +205 -0
- pygeai-0.6.0b15.dist-info/RECORD +799 -0
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/entry_points.txt +2 -1
- {pygeai-0.1.51b3.dist-info → pygeai-0.6.0b15.dist-info}/licenses/LICENSE +13 -1
- pygeai-0.6.0b15.dist-info/top_level.txt +1 -0
- docs/geai-proxy/README.md +0 -145
- docs/source/conf.py +0 -45
- pygeai/tests/core/test_managers.py +0 -233
- pygeai-0.1.51b3.dist-info/METADATA +0 -130
- pygeai-0.1.51b3.dist-info/RECORD +0 -324
- pygeai-0.1.51b3.dist-info/top_level.txt +0 -3
- scripts/bump_beta_version.py +0 -56
- {scripts → pygeai/analytics}/__init__.py +0 -0
- /pygeai/tests/snippets/lab/{c_code_fixer_agent_flow.py → use_cases/c_code_fixer_agent_flow.py} +0 -0
pygeai/evaluation/clients.py
CHANGED
|
@@ -2,15 +2,18 @@ from pygeai.core.base.clients import BaseClient
|
|
|
2
2
|
from pygeai.core.base.session import Session
|
|
3
3
|
from pygeai.core.common.exceptions import MissingRequirementException
|
|
4
4
|
from pygeai.core.services.rest import ApiService
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class EvaluationClient(BaseClient):
|
|
8
9
|
|
|
9
|
-
def __init__(self, api_key: str = None, base_url: str = None, alias: str =
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
def __init__(self, api_key: str = None, base_url: str = None, alias: str = None, eval_url: str = None, *,
|
|
11
|
+
access_token: str = None, project_id: str = None):
|
|
12
|
+
super().__init__(api_key, base_url, alias, access_token=access_token, project_id=project_id)
|
|
13
|
+
eval_url = self.session.eval_url if not eval_url else eval_url
|
|
12
14
|
if not eval_url:
|
|
13
15
|
raise MissingRequirementException("EVAL URL must be defined in order to use the Evaluation module.")
|
|
14
16
|
|
|
15
17
|
self.session.eval_url = eval_url
|
|
16
|
-
self.
|
|
18
|
+
token = self.session.access_token if self.session.access_token else self.session.api_key
|
|
19
|
+
self.api_service = ApiService(base_url=self.session.eval_url, token=token, project_id=self.session.project_id)
|
|
@@ -9,6 +9,8 @@ from pygeai.evaluation.dataset.endpoints import (
|
|
|
9
9
|
CREATE_FILTER_VARIABLE, LIST_FILTER_VARIABLES, GET_FILTER_VARIABLE, UPDATE_FILTER_VARIABLE, DELETE_FILTER_VARIABLE,
|
|
10
10
|
UPLOAD_DATASET_ROWS_FILE
|
|
11
11
|
)
|
|
12
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
13
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
class EvaluationDatasetClient(EvaluationClient):
|
|
@@ -22,8 +24,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
22
24
|
response = self.api_service.get(
|
|
23
25
|
endpoint=LIST_DATASETS
|
|
24
26
|
)
|
|
25
|
-
|
|
26
|
-
return
|
|
27
|
+
validate_status_code(response)
|
|
28
|
+
return parse_json_response(response, "dataset operation")
|
|
27
29
|
|
|
28
30
|
def create_dataset(
|
|
29
31
|
self,
|
|
@@ -56,8 +58,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
56
58
|
endpoint=CREATE_DATASET,
|
|
57
59
|
data=data
|
|
58
60
|
)
|
|
59
|
-
|
|
60
|
-
return
|
|
61
|
+
validate_status_code(response)
|
|
62
|
+
return parse_json_response(response, "dataset operation")
|
|
61
63
|
|
|
62
64
|
def create_dataset_from_file(self, file_path: str) -> dict:
|
|
63
65
|
"""
|
|
@@ -82,8 +84,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
82
84
|
headers=headers,
|
|
83
85
|
file=file
|
|
84
86
|
)
|
|
85
|
-
|
|
86
|
-
return
|
|
87
|
+
validate_status_code(response)
|
|
88
|
+
return parse_json_response(response, "upload dataset file")
|
|
87
89
|
finally:
|
|
88
90
|
if file:
|
|
89
91
|
file.close()
|
|
@@ -100,8 +102,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
100
102
|
response = self.api_service.get(
|
|
101
103
|
endpoint=endpoint
|
|
102
104
|
)
|
|
103
|
-
|
|
104
|
-
return
|
|
105
|
+
validate_status_code(response)
|
|
106
|
+
return parse_json_response(response, "dataset operation")
|
|
105
107
|
|
|
106
108
|
def update_dataset(
|
|
107
109
|
self,
|
|
@@ -141,8 +143,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
141
143
|
endpoint=endpoint,
|
|
142
144
|
data=data
|
|
143
145
|
)
|
|
144
|
-
|
|
145
|
-
return
|
|
146
|
+
validate_status_code(response)
|
|
147
|
+
return parse_json_response(response, "dataset operation")
|
|
146
148
|
|
|
147
149
|
def delete_dataset(self, dataset_id: str) -> dict:
|
|
148
150
|
"""
|
|
@@ -156,8 +158,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
156
158
|
response = self.api_service.delete(
|
|
157
159
|
endpoint=endpoint
|
|
158
160
|
)
|
|
159
|
-
|
|
160
|
-
return
|
|
161
|
+
validate_status_code(response)
|
|
162
|
+
return parse_json_response(response, "dataset operation")
|
|
161
163
|
|
|
162
164
|
def create_dataset_row(self, dataset_id: str, row: dict) -> dict:
|
|
163
165
|
"""
|
|
@@ -173,8 +175,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
173
175
|
endpoint=endpoint,
|
|
174
176
|
data=row
|
|
175
177
|
)
|
|
176
|
-
|
|
177
|
-
return
|
|
178
|
+
validate_status_code(response)
|
|
179
|
+
return parse_json_response(response, "dataset operation")
|
|
178
180
|
|
|
179
181
|
def list_dataset_rows(self, dataset_id: str) -> dict:
|
|
180
182
|
"""
|
|
@@ -188,8 +190,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
188
190
|
response = self.api_service.get(
|
|
189
191
|
endpoint=endpoint
|
|
190
192
|
)
|
|
191
|
-
|
|
192
|
-
return
|
|
193
|
+
validate_status_code(response)
|
|
194
|
+
return parse_json_response(response, "dataset operation")
|
|
193
195
|
|
|
194
196
|
def get_dataset_row(self, dataset_id: str, dataset_row_id: str) -> dict:
|
|
195
197
|
"""
|
|
@@ -204,8 +206,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
204
206
|
response = self.api_service.get(
|
|
205
207
|
endpoint=endpoint
|
|
206
208
|
)
|
|
207
|
-
|
|
208
|
-
return
|
|
209
|
+
validate_status_code(response)
|
|
210
|
+
return parse_json_response(response, "dataset operation")
|
|
209
211
|
|
|
210
212
|
def update_dataset_row(self, dataset_id: str, dataset_row_id: str, row: dict) -> dict:
|
|
211
213
|
"""
|
|
@@ -222,8 +224,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
222
224
|
endpoint=endpoint,
|
|
223
225
|
data=row
|
|
224
226
|
)
|
|
225
|
-
|
|
226
|
-
return
|
|
227
|
+
validate_status_code(response)
|
|
228
|
+
return parse_json_response(response, "dataset operation")
|
|
227
229
|
|
|
228
230
|
def delete_dataset_row(self, dataset_id: str, dataset_row_id: str) -> dict:
|
|
229
231
|
"""
|
|
@@ -238,8 +240,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
238
240
|
response = self.api_service.delete(
|
|
239
241
|
endpoint=endpoint
|
|
240
242
|
)
|
|
241
|
-
|
|
242
|
-
return
|
|
243
|
+
validate_status_code(response)
|
|
244
|
+
return parse_json_response(response, "dataset operation")
|
|
243
245
|
|
|
244
246
|
def create_expected_source(
|
|
245
247
|
self,
|
|
@@ -270,8 +272,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
270
272
|
endpoint=endpoint,
|
|
271
273
|
data=data
|
|
272
274
|
)
|
|
273
|
-
|
|
274
|
-
return
|
|
275
|
+
validate_status_code(response)
|
|
276
|
+
return parse_json_response(response, "dataset operation")
|
|
275
277
|
|
|
276
278
|
def list_expected_sources(self, dataset_id: str, dataset_row_id: str) -> dict:
|
|
277
279
|
"""
|
|
@@ -286,8 +288,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
286
288
|
response = self.api_service.get(
|
|
287
289
|
endpoint=endpoint
|
|
288
290
|
)
|
|
289
|
-
|
|
290
|
-
return
|
|
291
|
+
validate_status_code(response)
|
|
292
|
+
return parse_json_response(response, "dataset operation")
|
|
291
293
|
|
|
292
294
|
def get_expected_source(self, dataset_id: str, dataset_row_id: str, expected_source_id: str) -> dict:
|
|
293
295
|
"""
|
|
@@ -303,8 +305,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
303
305
|
response = self.api_service.get(
|
|
304
306
|
endpoint=endpoint
|
|
305
307
|
)
|
|
306
|
-
|
|
307
|
-
return
|
|
308
|
+
validate_status_code(response)
|
|
309
|
+
return parse_json_response(response, "dataset operation")
|
|
308
310
|
|
|
309
311
|
def update_expected_source(
|
|
310
312
|
self,
|
|
@@ -337,8 +339,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
337
339
|
endpoint=endpoint,
|
|
338
340
|
data=data
|
|
339
341
|
)
|
|
340
|
-
|
|
341
|
-
return
|
|
342
|
+
validate_status_code(response)
|
|
343
|
+
return parse_json_response(response, "dataset operation")
|
|
342
344
|
|
|
343
345
|
def delete_expected_source(self, dataset_id: str, dataset_row_id: str, expected_source_id: str) -> dict:
|
|
344
346
|
"""
|
|
@@ -354,8 +356,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
354
356
|
response = self.api_service.delete(
|
|
355
357
|
endpoint=endpoint
|
|
356
358
|
)
|
|
357
|
-
|
|
358
|
-
return
|
|
359
|
+
validate_status_code(response)
|
|
360
|
+
return parse_json_response(response, "dataset operation")
|
|
359
361
|
|
|
360
362
|
def create_filter_variable(
|
|
361
363
|
self,
|
|
@@ -389,8 +391,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
389
391
|
endpoint=endpoint,
|
|
390
392
|
data=data
|
|
391
393
|
)
|
|
392
|
-
|
|
393
|
-
return
|
|
394
|
+
validate_status_code(response)
|
|
395
|
+
return parse_json_response(response, "dataset operation")
|
|
394
396
|
|
|
395
397
|
def list_filter_variables(self, dataset_id: str, dataset_row_id: str) -> dict:
|
|
396
398
|
"""
|
|
@@ -405,8 +407,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
405
407
|
response = self.api_service.get(
|
|
406
408
|
endpoint=endpoint
|
|
407
409
|
)
|
|
408
|
-
|
|
409
|
-
return
|
|
410
|
+
validate_status_code(response)
|
|
411
|
+
return parse_json_response(response, "dataset operation")
|
|
410
412
|
|
|
411
413
|
def get_filter_variable(self, dataset_id: str, dataset_row_id: str, filter_variable_id: str) -> dict:
|
|
412
414
|
"""
|
|
@@ -422,8 +424,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
422
424
|
response = self.api_service.get(
|
|
423
425
|
endpoint=endpoint
|
|
424
426
|
)
|
|
425
|
-
|
|
426
|
-
return
|
|
427
|
+
validate_status_code(response)
|
|
428
|
+
return parse_json_response(response, "dataset operation")
|
|
427
429
|
|
|
428
430
|
def update_filter_variable(
|
|
429
431
|
self,
|
|
@@ -459,8 +461,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
459
461
|
endpoint=endpoint,
|
|
460
462
|
data=data
|
|
461
463
|
)
|
|
462
|
-
|
|
463
|
-
return
|
|
464
|
+
validate_status_code(response)
|
|
465
|
+
return parse_json_response(response, "dataset operation")
|
|
464
466
|
|
|
465
467
|
def delete_filter_variable(self, dataset_id: str, dataset_row_id: str, filter_variable_id: str) -> dict:
|
|
466
468
|
"""
|
|
@@ -476,8 +478,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
476
478
|
response = self.api_service.delete(
|
|
477
479
|
endpoint=endpoint
|
|
478
480
|
)
|
|
479
|
-
|
|
480
|
-
return
|
|
481
|
+
validate_status_code(response)
|
|
482
|
+
return parse_json_response(response, "dataset operation")
|
|
481
483
|
|
|
482
484
|
def upload_dataset_rows_file(self, dataset_id: str, file_path: str) -> dict:
|
|
483
485
|
"""
|
|
@@ -504,8 +506,8 @@ class EvaluationDatasetClient(EvaluationClient):
|
|
|
504
506
|
headers=headers,
|
|
505
507
|
file=file
|
|
506
508
|
)
|
|
507
|
-
|
|
508
|
-
return
|
|
509
|
+
validate_status_code(response)
|
|
510
|
+
return parse_json_response(response, "upload dataset rows file")
|
|
509
511
|
finally:
|
|
510
512
|
if file:
|
|
511
513
|
file.close()
|
|
@@ -5,6 +5,8 @@ from pygeai.evaluation.plan.endpoints import LIST_EVALUATION_PLANS, CREATE_EVALU
|
|
|
5
5
|
UPDATE_EVALUATION_PLAN, DELETE_EVALUATION_PLAN, LIST_EVALUATION_PLAN_SYSTEM_METRICS, \
|
|
6
6
|
ADD_EVALUATION_PLAN_SYSTEM_METRIC, GET_EVALUATION_PLAN_SYSTEM_METRIC, UPDATE_EVALUATION_PLAN_SYSTEM_METRIC, \
|
|
7
7
|
DELETE_EVALUATION_PLAN_SYSTEM_METRIC, LIST_SYSTEM_METRICS, GET_SYSTEM_METRIC, EXECUTE_EVALUATION_PLAN
|
|
8
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
9
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
8
10
|
|
|
9
11
|
|
|
10
12
|
class EvaluationPlanClient(EvaluationClient):
|
|
@@ -18,8 +20,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
18
20
|
response = self.api_service.get(
|
|
19
21
|
endpoint=LIST_EVALUATION_PLANS
|
|
20
22
|
)
|
|
21
|
-
|
|
22
|
-
return
|
|
23
|
+
validate_status_code(response)
|
|
24
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
23
25
|
|
|
24
26
|
def create_evaluation_plan(
|
|
25
27
|
self,
|
|
@@ -68,8 +70,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
68
70
|
endpoint=CREATE_EVALUATION_PLAN,
|
|
69
71
|
data=data
|
|
70
72
|
)
|
|
71
|
-
|
|
72
|
-
return
|
|
73
|
+
validate_status_code(response)
|
|
74
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
73
75
|
|
|
74
76
|
def get_evaluation_plan(self, evaluation_plan_id: str) -> dict:
|
|
75
77
|
"""
|
|
@@ -83,8 +85,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
83
85
|
response = self.api_service.get(
|
|
84
86
|
endpoint=endpoint
|
|
85
87
|
)
|
|
86
|
-
|
|
87
|
-
return
|
|
88
|
+
validate_status_code(response)
|
|
89
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
88
90
|
|
|
89
91
|
def update_evaluation_plan(
|
|
90
92
|
self,
|
|
@@ -139,8 +141,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
139
141
|
endpoint=endpoint,
|
|
140
142
|
data=data
|
|
141
143
|
)
|
|
142
|
-
|
|
143
|
-
return
|
|
144
|
+
validate_status_code(response)
|
|
145
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
144
146
|
|
|
145
147
|
def delete_evaluation_plan(self, evaluation_plan_id: str) -> dict:
|
|
146
148
|
"""
|
|
@@ -154,8 +156,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
154
156
|
response = self.api_service.delete(
|
|
155
157
|
endpoint=endpoint
|
|
156
158
|
)
|
|
157
|
-
|
|
158
|
-
return
|
|
159
|
+
validate_status_code(response)
|
|
160
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
159
161
|
|
|
160
162
|
def list_evaluation_plan_system_metrics(self, evaluation_plan_id: str) -> dict:
|
|
161
163
|
"""
|
|
@@ -169,8 +171,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
169
171
|
response = self.api_service.get(
|
|
170
172
|
endpoint=endpoint
|
|
171
173
|
)
|
|
172
|
-
|
|
173
|
-
return
|
|
174
|
+
validate_status_code(response)
|
|
175
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
174
176
|
|
|
175
177
|
def add_evaluation_plan_system_metric(
|
|
176
178
|
self,
|
|
@@ -196,8 +198,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
196
198
|
endpoint=endpoint,
|
|
197
199
|
data=data
|
|
198
200
|
)
|
|
199
|
-
|
|
200
|
-
return
|
|
201
|
+
validate_status_code(response)
|
|
202
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
201
203
|
|
|
202
204
|
def get_evaluation_plan_system_metric(self, evaluation_plan_id: str, system_metric_id: str) -> dict:
|
|
203
205
|
"""
|
|
@@ -212,8 +214,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
212
214
|
response = self.api_service.get(
|
|
213
215
|
endpoint=endpoint
|
|
214
216
|
)
|
|
215
|
-
|
|
216
|
-
return
|
|
217
|
+
validate_status_code(response)
|
|
218
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
217
219
|
|
|
218
220
|
def update_evaluation_plan_system_metric(
|
|
219
221
|
self,
|
|
@@ -238,8 +240,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
238
240
|
endpoint=endpoint,
|
|
239
241
|
data=data
|
|
240
242
|
)
|
|
241
|
-
|
|
242
|
-
return
|
|
243
|
+
validate_status_code(response)
|
|
244
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
243
245
|
|
|
244
246
|
def delete_evaluation_plan_system_metric(self, evaluation_plan_id: str, system_metric_id: str) -> dict:
|
|
245
247
|
"""
|
|
@@ -254,8 +256,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
254
256
|
response = self.api_service.delete(
|
|
255
257
|
endpoint=endpoint
|
|
256
258
|
)
|
|
257
|
-
|
|
258
|
-
return
|
|
259
|
+
validate_status_code(response)
|
|
260
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
259
261
|
|
|
260
262
|
def list_system_metrics(self) -> dict:
|
|
261
263
|
"""
|
|
@@ -266,8 +268,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
266
268
|
response = self.api_service.get(
|
|
267
269
|
endpoint=LIST_SYSTEM_METRICS
|
|
268
270
|
)
|
|
269
|
-
|
|
270
|
-
return
|
|
271
|
+
validate_status_code(response)
|
|
272
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
271
273
|
|
|
272
274
|
def get_system_metric(self, system_metric_id: str) -> dict:
|
|
273
275
|
"""
|
|
@@ -281,8 +283,8 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
281
283
|
response = self.api_service.get(
|
|
282
284
|
endpoint=endpoint
|
|
283
285
|
)
|
|
284
|
-
|
|
285
|
-
return
|
|
286
|
+
validate_status_code(response)
|
|
287
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
286
288
|
|
|
287
289
|
def execute_evaluation_plan(self, evaluation_plan_id: str) -> dict:
|
|
288
290
|
"""
|
|
@@ -296,5 +298,5 @@ class EvaluationPlanClient(EvaluationClient):
|
|
|
296
298
|
response = self.api_service.post(
|
|
297
299
|
endpoint=endpoint,
|
|
298
300
|
)
|
|
299
|
-
|
|
300
|
-
return
|
|
301
|
+
validate_status_code(response)
|
|
302
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
@@ -2,9 +2,27 @@ import json
|
|
|
2
2
|
|
|
3
3
|
from pygeai.evaluation.clients import EvaluationClient
|
|
4
4
|
from pygeai.evaluation.result.endpoints import LIST_EVALUATION_RESULTS, GET_EVALUATION_RESULT
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
6
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
class EvaluationResultClient(EvaluationClient):
|
|
10
|
+
"""
|
|
11
|
+
Client for interacting with the Evaluation Result API.
|
|
12
|
+
|
|
13
|
+
This API is read-only and retrieves results from executed evaluation plans.
|
|
14
|
+
|
|
15
|
+
.. warning::
|
|
16
|
+
The API documentation at https://docs.globant.ai/en/wiki?856,Evaluation+Result+API
|
|
17
|
+
contains several typos in field names. The actual API responses use these typo'd names:
|
|
18
|
+
|
|
19
|
+
- evaluationResultAssitantRevision (missing 's' in Assistant)
|
|
20
|
+
- evaluationResultChunckCount (should be Chunk, not Chunck)
|
|
21
|
+
- evaluationResultChunckSize (should be Chunk, not Chunck)
|
|
22
|
+
- evaluationResultaMaxTokens (lowercase 'a' should be uppercase 'M', no 'a')
|
|
23
|
+
|
|
24
|
+
Our implementation returns these fields as-is from the API.
|
|
25
|
+
"""
|
|
8
26
|
|
|
9
27
|
def list_evaluation_results(self, evaluation_plan_id: str) -> dict:
|
|
10
28
|
"""
|
|
@@ -13,13 +31,20 @@ class EvaluationResultClient(EvaluationClient):
|
|
|
13
31
|
:param evaluation_plan_id: str - The ID of the evaluation plan.
|
|
14
32
|
|
|
15
33
|
:return: dict - API response containing a list of evaluation results.
|
|
34
|
+
|
|
35
|
+
.. note::
|
|
36
|
+
Response contains evaluation result objects with fields including:
|
|
37
|
+
dataSetId, evaluationPlanId, evaluationResultId, evaluationResultStatus,
|
|
38
|
+
evaluationResultCost, evaluationResultDuration, and others.
|
|
39
|
+
|
|
40
|
+
See class documentation for field name typos in the API.
|
|
16
41
|
"""
|
|
17
42
|
endpoint = LIST_EVALUATION_RESULTS.format(evaluationPlanId=evaluation_plan_id)
|
|
18
43
|
response = self.api_service.get(
|
|
19
44
|
endpoint=endpoint
|
|
20
45
|
)
|
|
21
|
-
|
|
22
|
-
return
|
|
46
|
+
validate_status_code(response)
|
|
47
|
+
return parse_json_response(response, "evaluation plan operation")
|
|
23
48
|
|
|
24
49
|
def get_evaluation_result(self, evaluation_result_id: str) -> dict:
|
|
25
50
|
"""
|
|
@@ -27,11 +52,19 @@ class EvaluationResultClient(EvaluationClient):
|
|
|
27
52
|
|
|
28
53
|
:param evaluation_result_id: str - The ID of the evaluation result.
|
|
29
54
|
|
|
30
|
-
:return: dict - The evaluation result metadata as a dictionary.
|
|
55
|
+
:return: dict - The evaluation result metadata as a dictionary, including row-level data.
|
|
56
|
+
|
|
57
|
+
.. note::
|
|
58
|
+
Response includes all fields from list_evaluation_results plus a 'rows' array
|
|
59
|
+
containing detailed row-level evaluation data with fields like:
|
|
60
|
+
dataSetRowId, evaluationResultRowStatus, evaluationResultRowOutput,
|
|
61
|
+
evaluationResultRowCost, etc.
|
|
62
|
+
|
|
63
|
+
See class documentation for field name typos in the API.
|
|
31
64
|
"""
|
|
32
65
|
endpoint = GET_EVALUATION_RESULT.format(evaluationResultId=evaluation_result_id)
|
|
33
66
|
response = self.api_service.get(
|
|
34
67
|
endpoint=endpoint
|
|
35
68
|
)
|
|
36
|
-
|
|
37
|
-
return
|
|
69
|
+
validate_status_code(response)
|
|
70
|
+
return parse_json_response(response, "evaluation plan operation")
|
pygeai/gam/clients.py
CHANGED
|
@@ -1,13 +1,51 @@
|
|
|
1
|
-
from json import JSONDecodeError
|
|
2
1
|
|
|
2
|
+
from pygeai import logger
|
|
3
3
|
from pygeai.core.base.clients import BaseClient
|
|
4
|
-
from pygeai.core.common.exceptions import MissingRequirementException
|
|
5
|
-
from pygeai.core.
|
|
6
|
-
from pygeai.
|
|
4
|
+
from pygeai.core.common.exceptions import MissingRequirementException, InvalidAPIResponseException
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
6
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
7
|
+
from pygeai.gam.endpoints import GET_ACCESS_TOKEN_V2, GET_USER_INFO_V2, IDP_SIGNIN_V1
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class GAMClient(BaseClient):
|
|
10
11
|
|
|
12
|
+
def generate_signing_url(
|
|
13
|
+
self,
|
|
14
|
+
client_id: str = None,
|
|
15
|
+
redirect_uri: str = None,
|
|
16
|
+
scope: str = "gam_user_data",
|
|
17
|
+
state: str = None,
|
|
18
|
+
response_type: str = "code"
|
|
19
|
+
):
|
|
20
|
+
"""
|
|
21
|
+
Generates the URL for the GAM OAuth 2.0 signin endpoint to initiate user authentication.
|
|
22
|
+
This method does not perform the signin itself but provides the URL for redirection in a browser-based flow.
|
|
23
|
+
|
|
24
|
+
:param client_id: str - Client ID of the application. Required.
|
|
25
|
+
:param redirect_uri: str - Callback URL configured in the application. Required.
|
|
26
|
+
:param scope: str - Scope of the user account to access (e.g., "gam_user_data").
|
|
27
|
+
Defaults to "gam_user_data".
|
|
28
|
+
:param state: str - Random string to store the status before the request. Required.
|
|
29
|
+
:param response_type: str - Response type for the signin request. Defaults to "code".
|
|
30
|
+
:return: str - The URL to redirect to for user authentication in a browser.
|
|
31
|
+
:raises MissingRequirementException: If required parameters are missing.
|
|
32
|
+
"""
|
|
33
|
+
if not all([client_id, redirect_uri, state]):
|
|
34
|
+
raise MissingRequirementException("client_id, redirect_uri, and state are required.")
|
|
35
|
+
|
|
36
|
+
params = {
|
|
37
|
+
"response_type": response_type,
|
|
38
|
+
"client_id": client_id,
|
|
39
|
+
"redirect_uri": redirect_uri,
|
|
40
|
+
"state": state
|
|
41
|
+
}
|
|
42
|
+
if scope:
|
|
43
|
+
params["scope"] = scope
|
|
44
|
+
|
|
45
|
+
endpoint = f"{self.api_service.base_url}{IDP_SIGNIN_V1}"
|
|
46
|
+
redirect_url = f"{endpoint}?{'&'.join(f'{k}={v}' for k, v in params.items())}"
|
|
47
|
+
return redirect_url
|
|
48
|
+
|
|
11
49
|
def get_access_token(
|
|
12
50
|
self,
|
|
13
51
|
client_id: str = None,
|
|
@@ -67,12 +105,8 @@ class GAMClient(BaseClient):
|
|
|
67
105
|
headers=headers,
|
|
68
106
|
form=True
|
|
69
107
|
)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
except JSONDecodeError as e:
|
|
73
|
-
result = response.text
|
|
74
|
-
|
|
75
|
-
return result
|
|
108
|
+
validate_status_code(response)
|
|
109
|
+
return parse_json_response(response, "get access token")
|
|
76
110
|
|
|
77
111
|
def get_user_info(
|
|
78
112
|
self,
|
|
@@ -93,12 +127,8 @@ class GAMClient(BaseClient):
|
|
|
93
127
|
endpoint=GET_USER_INFO_V2,
|
|
94
128
|
headers=headers
|
|
95
129
|
)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
except JSONDecodeError as e:
|
|
99
|
-
result = response.text
|
|
100
|
-
|
|
101
|
-
return result
|
|
130
|
+
validate_status_code(response)
|
|
131
|
+
return parse_json_response(response, "get user info")
|
|
102
132
|
|
|
103
133
|
def refresh_access_token(
|
|
104
134
|
self,
|
|
@@ -136,21 +166,13 @@ class GAMClient(BaseClient):
|
|
|
136
166
|
headers=headers,
|
|
137
167
|
form=True
|
|
138
168
|
)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
except JSONDecodeError as e:
|
|
142
|
-
result = response.text
|
|
143
|
-
|
|
144
|
-
return result
|
|
169
|
+
validate_status_code(response)
|
|
170
|
+
return parse_json_response(response, "refresh access token")
|
|
145
171
|
|
|
146
172
|
def get_authentication_types(self):
|
|
147
173
|
response = self.api_service.get(
|
|
148
174
|
endpoint=GET_ACCESS_TOKEN_V2,
|
|
149
175
|
params={},
|
|
150
176
|
)
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
except JSONDecodeError as e:
|
|
154
|
-
result = response.text
|
|
155
|
-
|
|
156
|
-
return result
|
|
177
|
+
validate_status_code(response)
|
|
178
|
+
return parse_json_response(response, "get authentication types")
|
pygeai/gam/endpoints.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
GET_ACCESS_TOKEN_V2 = "oauth/gam/v2.0/access_token" # POST -> Sends the user credentials to get a new Token
|
|
2
2
|
GET_USER_INFO_V2 = "oauth/gam/v2.0/userinfo" # GET -> Send the access_token obtained in the previous request and get the user info depending on the scopes you have indicated.
|
|
3
|
-
GET_AUTHENTICATION_TYPES_V1 = "v1/gam/authentication-types" # GET -> Get authentication types
|
|
3
|
+
GET_AUTHENTICATION_TYPES_V1 = "v1/gam/authentication-types" # GET -> Get authentication types
|
|
4
|
+
IDP_SIGNIN_V1 = "/oauth/gam/signin" # NO METHOD -> Just generates URL for authentication in browser
|
|
File without changes
|
pygeai/health/clients.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
from pygeai import logger
|
|
3
|
+
from pygeai.core.base.clients import BaseClient
|
|
4
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
6
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
7
|
+
from pygeai.health.endpoints import STATUS_CHECK_V1
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class HealthClient(BaseClient):
|
|
11
|
+
|
|
12
|
+
def check_api_status(self) -> dict:
|
|
13
|
+
"""
|
|
14
|
+
Checks the status of the API.
|
|
15
|
+
|
|
16
|
+
:return: dict - The API response as a JSON object containing details about the API status.
|
|
17
|
+
If the response cannot be parsed as JSON, returns the raw response text.
|
|
18
|
+
"""
|
|
19
|
+
endpoint = STATUS_CHECK_V1
|
|
20
|
+
response = self.api_service.get(
|
|
21
|
+
endpoint=endpoint
|
|
22
|
+
)
|
|
23
|
+
validate_status_code(response)
|
|
24
|
+
return parse_json_response(response, "check API status")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
STATUS_CHECK_V1 = "/v1/system/status" # GET -> Health Check SAIA APIs
|