pygeai 0.1.6__py3-none-any.whl → 0.6.0b15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pygeai might be problematic. Click here for more details.
- pygeai/__init__.py +11 -2
- pygeai/_docs/Makefile +20 -0
- pygeai/_docs/make.bat +35 -0
- pygeai/_docs/source/conf.py +117 -0
- pygeai/_docs/source/content/ai_lab/cli.rst +747 -0
- pygeai/_docs/source/content/ai_lab/models.rst +1734 -0
- pygeai/_docs/source/content/ai_lab/runner.rst +253 -0
- pygeai/_docs/source/content/ai_lab/spec.rst +431 -0
- pygeai/_docs/source/content/ai_lab/usage.rst +1011 -0
- pygeai/_docs/source/content/ai_lab.rst +102 -0
- pygeai/_docs/source/content/analytics.rst +598 -0
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- pygeai/_docs/source/content/api_reference/chat.rst +754 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +154 -0
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +738 -0
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rag.rst +710 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +58 -0
- pygeai/_docs/source/content/authentication.rst +295 -0
- pygeai/_docs/source/content/chat_gui.rst +121 -0
- pygeai/_docs/source/content/cli.rst +203 -0
- pygeai/_docs/source/content/debugger.rst +651 -0
- pygeai/_docs/source/content/intro.rst +67 -0
- pygeai/_docs/source/content/migration.rst +929 -0
- pygeai/_docs/source/content/modules.rst +7 -0
- pygeai/_docs/source/content/quickstart.rst +143 -0
- pygeai/_docs/source/content/samples.rst +394 -0
- pygeai/_docs/source/index.rst +75 -0
- pygeai/_docs/source/modules.rst +7 -0
- pygeai/_docs/source/pygeai.admin.rst +29 -0
- pygeai/_docs/source/pygeai.analytics.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.data.rst +21 -0
- pygeai/_docs/source/pygeai.assistant.data_analyst.rst +29 -0
- pygeai/_docs/source/pygeai.assistant.rag.rst +53 -0
- pygeai/_docs/source/pygeai.assistant.rst +55 -0
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.chat.rst +69 -0
- pygeai/_docs/source/pygeai.cli.commands.flows.rst +10 -0
- pygeai/_docs/source/pygeai.cli.commands.lab.rst +53 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +222 -0
- pygeai/_docs/source/pygeai.cli.rst +62 -0
- pygeai/_docs/source/pygeai.cli.texts.rst +21 -0
- pygeai/_docs/source/pygeai.core.base.rst +53 -0
- pygeai/_docs/source/pygeai.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.core.embeddings.rst +61 -0
- pygeai/_docs/source/pygeai.core.feedback.rst +37 -0
- pygeai/_docs/source/pygeai.core.files.rst +61 -0
- pygeai/_docs/source/pygeai.core.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.plugins.rst +37 -0
- pygeai/_docs/source/pygeai.core.rerank.rst +53 -0
- pygeai/_docs/source/pygeai.core.rst +63 -0
- pygeai/_docs/source/pygeai.core.secrets.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.llm.rst +29 -0
- pygeai/_docs/source/pygeai.core.services.rst +37 -0
- pygeai/_docs/source/pygeai.core.utils.rst +37 -0
- pygeai/_docs/source/pygeai.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.evaluation.dataset.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.plan.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.result.rst +29 -0
- pygeai/_docs/source/pygeai.evaluation.rst +31 -0
- pygeai/_docs/source/pygeai.flows.rst +29 -0
- pygeai/_docs/source/pygeai.gam.rst +29 -0
- pygeai/_docs/source/pygeai.health.rst +29 -0
- pygeai/_docs/source/pygeai.lab.agents.rst +37 -0
- pygeai/_docs/source/pygeai.lab.processes.rst +37 -0
- pygeai/_docs/source/pygeai.lab.rst +65 -0
- pygeai/_docs/source/pygeai.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.lab.strategies.rst +37 -0
- pygeai/_docs/source/pygeai.lab.tools.rst +37 -0
- pygeai/_docs/source/pygeai.man.man1.rst +10 -0
- pygeai/_docs/source/pygeai.man.rst +18 -0
- pygeai/_docs/source/pygeai.migration.rst +29 -0
- pygeai/_docs/source/pygeai.organization.limits.rst +45 -0
- pygeai/_docs/source/pygeai.organization.rst +61 -0
- pygeai/_docs/source/pygeai.proxy.rst +53 -0
- pygeai/_docs/source/pygeai.rst +35 -0
- pygeai/_docs/source/pygeai.tests.admin.rst +21 -0
- pygeai/_docs/source/pygeai.tests.analytics.rst +45 -0
- pygeai/_docs/source/pygeai.tests.assistants.rag.rst +37 -0
- pygeai/_docs/source/pygeai.tests.assistants.rst +45 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +29 -0
- pygeai/_docs/source/pygeai.tests.chat.rst +45 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.lab.rst +37 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +165 -0
- pygeai/_docs/source/pygeai.tests.cli.docker.rst +10 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +46 -0
- pygeai/_docs/source/pygeai.tests.core.base.data.rst +29 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +45 -0
- pygeai/_docs/source/pygeai.tests.core.common.data.rst +10 -0
- pygeai/_docs/source/pygeai.tests.core.common.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.feedback.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +53 -0
- pygeai/_docs/source/pygeai.tests.core.llm.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rerank.rst +37 -0
- pygeai/_docs/source/pygeai.tests.core.rst +39 -0
- pygeai/_docs/source/pygeai.tests.core.secrets.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.services.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.utils.rst +21 -0
- pygeai/_docs/source/pygeai.tests.dbg.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.gam.rst +21 -0
- pygeai/_docs/source/pygeai.tests.health.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rag.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.assistants.rst +18 -0
- pygeai/_docs/source/pygeai.tests.integration.chat.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.agents.rst +69 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.reasoning_strategies.rst +37 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.rst +21 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.tools.rst +77 -0
- pygeai/_docs/source/pygeai.tests.integration.rst +20 -0
- pygeai/_docs/source/pygeai.tests.lab.agents.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.processes.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.rst +49 -0
- pygeai/_docs/source/pygeai.tests.lab.spec.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.strategies.rst +29 -0
- pygeai/_docs/source/pygeai.tests.lab.tools.rst +29 -0
- pygeai/_docs/source/pygeai.tests.migration.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.limits.rst +29 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +53 -0
- pygeai/_docs/source/pygeai.tests.proxy.rst +61 -0
- pygeai/_docs/source/pygeai.tests.rst +33 -0
- pygeai/admin/clients.py +14 -11
- pygeai/admin/endpoints.py +2 -2
- pygeai/analytics/clients.py +505 -0
- pygeai/analytics/endpoints.py +35 -0
- pygeai/analytics/managers.py +606 -0
- pygeai/analytics/mappers.py +207 -0
- pygeai/analytics/responses.py +240 -0
- pygeai/assistant/clients.py +48 -57
- pygeai/assistant/data/__init__.py +0 -0
- pygeai/assistant/data/clients.py +15 -0
- pygeai/assistant/data_analyst/__init__.py +0 -0
- pygeai/assistant/data_analyst/clients.py +75 -0
- pygeai/assistant/data_analyst/endpoints.py +2 -0
- pygeai/assistant/endpoints.py +0 -2
- pygeai/assistant/managers.py +738 -0
- pygeai/assistant/mappers.py +153 -0
- pygeai/assistant/rag/clients.py +132 -21
- pygeai/assistant/rag/mappers.py +228 -0
- pygeai/assistant/rag/models.py +396 -0
- pygeai/assistant/rag/responses.py +10 -0
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +406 -31
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +17 -0
- pygeai/chat/managers.py +64 -0
- pygeai/chat/session.py +38 -0
- pygeai/chat/settings.py +6 -0
- pygeai/chat/ui.py +678 -0
- pygeai/cli/__init__.py +0 -1
- pygeai/cli/commands/admin.py +9 -12
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +11 -11
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +201 -7
- pygeai/cli/commands/chat.py +875 -14
- pygeai/cli/commands/common.py +30 -26
- pygeai/cli/commands/configuration.py +84 -9
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +187 -0
- pygeai/cli/commands/evaluation.py +2069 -0
- pygeai/cli/commands/feedback.py +93 -0
- pygeai/cli/commands/files.py +312 -0
- pygeai/cli/commands/flows/__init__.py +0 -0
- pygeai/cli/commands/gam.py +349 -0
- pygeai/cli/commands/lab/__init__.py +0 -0
- pygeai/cli/commands/lab/ai_lab.py +4110 -0
- pygeai/cli/commands/lab/common.py +135 -0
- pygeai/cli/commands/lab/options.py +8 -0
- pygeai/cli/commands/lab/spec.py +273 -0
- pygeai/cli/commands/lab/utils.py +13 -0
- pygeai/cli/commands/llm.py +164 -0
- pygeai/cli/commands/migrate.py +1198 -0
- pygeai/cli/commands/options.py +86 -0
- pygeai/cli/commands/organization.py +560 -98
- pygeai/cli/commands/rag.py +306 -10
- pygeai/cli/commands/rerank.py +108 -0
- pygeai/cli/commands/secrets.py +357 -0
- pygeai/cli/commands/usage_limits.py +583 -0
- pygeai/cli/commands/validators.py +209 -0
- pygeai/cli/commands/version.py +44 -0
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +171 -30
- pygeai/cli/geai_proxy.py +318 -0
- pygeai/cli/install_man.py +107 -0
- pygeai/cli/parsers.py +78 -25
- pygeai/cli/texts/help.py +712 -55
- pygeai/core/__init__.py +9 -1
- pygeai/core/base/clients.py +61 -10
- pygeai/core/base/mappers.py +208 -30
- pygeai/core/base/models.py +8 -308
- pygeai/core/base/responses.py +18 -1
- pygeai/core/base/session.py +110 -17
- pygeai/core/common/config.py +98 -16
- pygeai/core/common/decorators.py +44 -0
- pygeai/core/common/exceptions.py +104 -4
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +93 -0
- pygeai/core/embeddings/endpoints.py +1 -0
- pygeai/core/embeddings/managers.py +62 -0
- pygeai/core/embeddings/mappers.py +52 -0
- pygeai/core/embeddings/models.py +14 -0
- pygeai/core/embeddings/responses.py +31 -0
- pygeai/core/feedback/__init__.py +0 -0
- pygeai/core/feedback/clients.py +50 -0
- pygeai/core/feedback/endpoints.py +1 -0
- pygeai/core/feedback/models.py +10 -0
- pygeai/core/files/__init__.py +0 -0
- pygeai/core/files/clients.py +156 -0
- pygeai/core/files/endpoints.py +5 -0
- pygeai/core/files/managers.py +224 -0
- pygeai/core/files/mappers.py +44 -0
- pygeai/core/files/models.py +24 -0
- pygeai/core/files/responses.py +19 -0
- pygeai/core/handlers.py +32 -0
- pygeai/core/llm/__init__.py +0 -0
- pygeai/core/llm/clients.py +53 -0
- pygeai/core/llm/endpoints.py +4 -0
- pygeai/core/models.py +799 -0
- pygeai/core/plugins/__init__.py +0 -0
- pygeai/core/plugins/clients.py +32 -0
- pygeai/core/plugins/endpoints.py +1 -0
- pygeai/core/plugins/models.py +86 -0
- pygeai/core/rerank/__init__.py +0 -0
- pygeai/core/rerank/clients.py +35 -0
- pygeai/core/rerank/endpoints.py +1 -0
- pygeai/core/rerank/managers.py +47 -0
- pygeai/core/rerank/mappers.py +23 -0
- pygeai/core/rerank/models.py +27 -0
- pygeai/core/responses.py +104 -0
- pygeai/core/secrets/__init__.py +0 -0
- pygeai/core/secrets/clients.py +212 -0
- pygeai/core/secrets/endpoints.py +7 -0
- pygeai/core/services/llm/__init__.py +0 -0
- pygeai/core/services/llm/model.py +186 -0
- pygeai/core/services/llm/providers.py +15 -0
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +311 -89
- pygeai/core/utils/__init__.py +0 -0
- pygeai/core/utils/console.py +83 -0
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +870 -0
- pygeai/evaluation/__init__.py +0 -0
- pygeai/evaluation/clients.py +19 -0
- pygeai/evaluation/dataset/__init__.py +0 -0
- pygeai/evaluation/dataset/clients.py +514 -0
- pygeai/evaluation/dataset/endpoints.py +26 -0
- pygeai/evaluation/plan/__init__.py +0 -0
- pygeai/evaluation/plan/clients.py +302 -0
- pygeai/evaluation/plan/endpoints.py +16 -0
- pygeai/evaluation/result/__init__.py +0 -0
- pygeai/evaluation/result/clients.py +70 -0
- pygeai/evaluation/result/endpoints.py +2 -0
- pygeai/flows/__init__.py +0 -0
- pygeai/flows/endpoints.py +362 -0
- pygeai/flows/models.py +1304 -0
- pygeai/gam/__init__.py +0 -0
- pygeai/gam/clients.py +178 -0
- pygeai/gam/endpoints.py +4 -0
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -0
- pygeai/lab/agents/__init__.py +0 -0
- pygeai/lab/agents/clients.py +426 -0
- pygeai/lab/agents/endpoints.py +12 -0
- pygeai/lab/agents/mappers.py +319 -0
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +1558 -0
- pygeai/lab/models.py +1719 -0
- pygeai/lab/processes/__init__.py +0 -0
- pygeai/lab/processes/clients.py +1051 -0
- pygeai/lab/processes/endpoints.py +26 -0
- pygeai/lab/processes/mappers.py +395 -0
- pygeai/lab/runners.py +90 -0
- pygeai/lab/spec/__init__.py +0 -0
- pygeai/lab/spec/loader.py +24 -0
- pygeai/lab/spec/parsers.py +39 -0
- pygeai/lab/strategies/__init__.py +0 -0
- pygeai/lab/strategies/clients.py +212 -0
- pygeai/lab/strategies/endpoints.py +5 -0
- pygeai/lab/strategies/mappers.py +58 -0
- pygeai/lab/tools/__init__.py +0 -0
- pygeai/lab/tools/clients.py +465 -0
- pygeai/lab/tools/endpoints.py +13 -0
- pygeai/lab/tools/mappers.py +131 -0
- pygeai/man/__init__.py +1 -0
- pygeai/man/man1/__init__.py +1 -0
- pygeai/man/man1/geai-proxy.1 +246 -0
- pygeai/man/man1/geai.1 +2615 -0
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +603 -0
- pygeai/migration/tools.py +180 -0
- pygeai/organization/clients.py +246 -18
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/__init__.py +0 -0
- pygeai/organization/limits/clients.py +281 -0
- pygeai/organization/limits/endpoints.py +15 -0
- pygeai/organization/limits/managers.py +331 -0
- pygeai/organization/limits/mappers.py +21 -0
- pygeai/organization/managers.py +537 -0
- pygeai/organization/mappers.py +111 -46
- pygeai/organization/responses.py +61 -11
- pygeai/proxy/__init__.py +0 -0
- pygeai/proxy/clients.py +216 -0
- pygeai/proxy/config.py +128 -0
- pygeai/proxy/managers.py +232 -0
- pygeai/proxy/servers.py +304 -0
- pygeai/proxy/tool.py +69 -0
- pygeai/tests/admin/__init__.py +0 -0
- pygeai/tests/admin/test_clients.py +148 -0
- pygeai/tests/analytics/__init__.py +0 -0
- pygeai/tests/analytics/test_clients.py +86 -0
- pygeai/tests/analytics/test_managers.py +94 -0
- pygeai/tests/analytics/test_mappers.py +84 -0
- pygeai/tests/analytics/test_responses.py +73 -0
- pygeai/tests/assistants/rag/__init__.py +0 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_mappers.py +189 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -80
- pygeai/tests/assistants/test_managers.py +198 -0
- pygeai/tests/assistants/test_mappers.py +111 -0
- pygeai/tests/auth/__init__.py +0 -0
- pygeai/tests/auth/test_clients.py +289 -0
- pygeai/tests/auth/test_oauth.py +172 -0
- pygeai/tests/auth/test_session_logging.py +150 -0
- pygeai/tests/chat/__init__.py +0 -0
- pygeai/tests/chat/test_clients.py +393 -0
- pygeai/tests/chat/test_iris.py +38 -0
- pygeai/tests/chat/test_session.py +62 -0
- pygeai/tests/chat/test_ui.py +224 -0
- pygeai/tests/cli/__init__.py +0 -0
- pygeai/tests/cli/commands/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/__init__.py +0 -0
- pygeai/tests/cli/commands/lab/test_ai_lab.py +786 -0
- pygeai/tests/cli/commands/lab/test_common.py +208 -0
- pygeai/tests/cli/commands/lab/test_spec.py +246 -0
- pygeai/tests/cli/commands/test_assistant.py +202 -0
- pygeai/tests/cli/commands/test_chat.py +130 -0
- pygeai/tests/cli/commands/test_common.py +350 -0
- pygeai/tests/cli/commands/test_embeddings.py +132 -0
- pygeai/tests/cli/commands/test_evaluation.py +656 -0
- pygeai/tests/cli/commands/test_feedback.py +65 -0
- pygeai/tests/cli/commands/test_files.py +161 -0
- pygeai/tests/cli/commands/test_gam.py +201 -0
- pygeai/tests/cli/commands/test_llm.py +114 -0
- pygeai/tests/cli/commands/test_migrate.py +176 -0
- pygeai/tests/cli/commands/test_organization.py +276 -0
- pygeai/tests/cli/commands/test_rag.py +266 -0
- pygeai/tests/cli/commands/test_rerank.py +110 -0
- pygeai/tests/cli/commands/test_secrets.py +171 -0
- pygeai/tests/cli/commands/test_show_help.py +41 -0
- pygeai/tests/cli/commands/test_usage_limits.py +412 -0
- pygeai/tests/cli/commands/test_validators.py +160 -0
- pygeai/tests/cli/commands/test_version.py +81 -0
- pygeai/tests/cli/docker/__init__.py +0 -0
- pygeai/tests/cli/test_credentials_flag.py +316 -0
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +154 -0
- pygeai/tests/core/base/__init__.py +0 -0
- pygeai/tests/core/base/data/__init__.py +0 -0
- pygeai/tests/core/base/data/mappers.py +117 -0
- pygeai/tests/core/base/data/models.py +312 -0
- pygeai/tests/core/base/test_mappers.py +569 -0
- pygeai/tests/core/base/test_models.py +261 -0
- pygeai/tests/core/base/test_responses.py +53 -0
- pygeai/tests/core/common/__init__.py +0 -0
- pygeai/tests/core/common/data/__init__.py +0 -0
- pygeai/tests/core/common/test_config.py +186 -0
- pygeai/tests/core/common/test_decorators.py +69 -0
- pygeai/tests/core/embeddings/__init__.py +0 -0
- pygeai/tests/core/embeddings/test_clients.py +225 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/__init__.py +0 -0
- pygeai/tests/core/feedback/test_clients.py +64 -0
- pygeai/tests/core/files/__init__.py +0 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +219 -0
- pygeai/tests/core/files/test_mappers.py +137 -0
- pygeai/tests/core/files/test_models.py +103 -0
- pygeai/tests/core/files/test_responses.py +122 -0
- pygeai/tests/core/llm/__init__.py +0 -0
- pygeai/tests/core/llm/test_clients.py +142 -0
- pygeai/tests/core/plugins/__init__.py +0 -0
- pygeai/tests/core/plugins/test_clients.py +66 -0
- pygeai/tests/core/rerank/__init__.py +0 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +99 -0
- pygeai/tests/core/rerank/test_mappers.py +54 -0
- pygeai/tests/core/secrets/__init__.py +0 -0
- pygeai/tests/core/secrets/test_clients.py +264 -0
- pygeai/tests/core/services/__init__.py +0 -0
- pygeai/tests/core/services/test_rest.py +273 -0
- pygeai/tests/core/test_handlers.py +66 -0
- pygeai/tests/core/utils/__init__.py +0 -0
- pygeai/tests/core/utils/test_console.py +80 -0
- pygeai/tests/dbg/__init__.py +0 -0
- pygeai/tests/dbg/test_debugger.py +591 -0
- pygeai/tests/evaluation/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/evaluation/dataset/test_clients.py +265 -0
- pygeai/tests/evaluation/plan/__init__.py +0 -0
- pygeai/tests/evaluation/plan/test_clients.py +195 -0
- pygeai/tests/evaluation/result/__init__.py +0 -0
- pygeai/tests/evaluation/result/test_clients.py +66 -0
- pygeai/tests/gam/__init__.py +0 -0
- pygeai/tests/gam/test_clients.py +195 -0
- pygeai/tests/health/__init__.py +0 -0
- pygeai/tests/health/test_clients.py +41 -0
- pygeai/tests/integration/__init__.py +0 -0
- pygeai/tests/integration/assistants/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/__init__.py +0 -0
- pygeai/tests/integration/assistants/rag/test_create_rag.py +91 -0
- pygeai/tests/integration/chat/__init__.py +0 -0
- pygeai/tests/integration/chat/test_generate_image.py +158 -0
- pygeai/tests/integration/lab/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/__init__.py +0 -0
- pygeai/tests/integration/lab/agents/test_agents_list.py +106 -0
- pygeai/tests/integration/lab/agents/test_create_agent.py +319 -0
- pygeai/tests/integration/lab/agents/test_create_sharing_link.py +70 -0
- pygeai/tests/integration/lab/agents/test_delete_agent.py +75 -0
- pygeai/tests/integration/lab/agents/test_get_agent.py +94 -0
- pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +127 -0
- pygeai/tests/integration/lab/agents/test_update_agent.py +250 -0
- pygeai/tests/integration/lab/processes/__init__.py +0 -0
- pygeai/tests/integration/lab/processes/test_create_process.py +345 -0
- pygeai/tests/integration/lab/processes/test_create_task.py +211 -0
- pygeai/tests/integration/lab/processes/test_delete_process.py +111 -0
- pygeai/tests/integration/lab/processes/test_get_process.py +201 -0
- pygeai/tests/integration/lab/processes/test_list_process_instances.py +91 -0
- pygeai/tests/integration/lab/processes/test_list_processes.py +138 -0
- pygeai/tests/integration/lab/processes/test_publish_process_revision.py +232 -0
- pygeai/tests/integration/lab/processes/test_update_process.py +289 -0
- pygeai/tests/integration/lab/reasoning_strategies/__init__.py +0 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_get_reasoning_strategy.py +70 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_list_reasoning_strategies.py +93 -0
- pygeai/tests/integration/lab/reasoning_strategies/test_update_reasoning_strategy.py +149 -0
- pygeai/tests/integration/lab/tools/__init__.py +0 -0
- pygeai/tests/integration/lab/tools/test_create_tool.py +288 -0
- pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
- pygeai/tests/integration/lab/tools/test_get_parameter.py +98 -0
- pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
- pygeai/tests/integration/lab/tools/test_list_tools.py +106 -0
- pygeai/tests/integration/lab/tools/test_publish_tool_revision.py +119 -0
- pygeai/tests/integration/lab/tools/test_set_parameter.py +114 -0
- pygeai/tests/integration/lab/tools/test_update_tool.py +267 -0
- pygeai/tests/lab/__init__.py +0 -0
- pygeai/tests/lab/agents/__init__.py +0 -0
- pygeai/tests/lab/agents/test_clients.py +481 -0
- pygeai/tests/lab/agents/test_mappers.py +440 -0
- pygeai/tests/lab/processes/__init__.py +0 -0
- pygeai/tests/lab/processes/test_clients.py +1416 -0
- pygeai/tests/lab/processes/test_mappers.py +1092 -0
- pygeai/tests/lab/spec/__init__.py +0 -0
- pygeai/tests/lab/spec/test_loader.py +59 -0
- pygeai/tests/lab/spec/test_parsers.py +182 -0
- pygeai/tests/lab/strategies/__init__.py +0 -0
- pygeai/tests/lab/strategies/test_clients.py +241 -0
- pygeai/tests/lab/strategies/test_mappers.py +132 -0
- pygeai/tests/lab/test_managers.py +553 -0
- pygeai/tests/lab/test_mappers.py +245 -0
- pygeai/tests/lab/test_models.py +1154 -0
- pygeai/tests/lab/tools/__init__.py +0 -0
- pygeai/tests/lab/tools/test_clients.py +521 -0
- pygeai/tests/lab/tools/test_mappers.py +198 -0
- pygeai/tests/migration/__init__.py +0 -0
- pygeai/tests/migration/test_strategies.py +405 -0
- pygeai/tests/migration/test_tools.py +159 -0
- pygeai/tests/organization/limits/__init__.py +0 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +402 -0
- pygeai/tests/organization/test_clients.py +615 -64
- pygeai/tests/organization/test_managers.py +424 -0
- pygeai/tests/organization/test_mappers.py +153 -0
- pygeai/tests/organization/test_responses.py +137 -0
- pygeai/tests/proxy/__init__.py +1 -0
- pygeai/tests/proxy/test_clients.py +397 -0
- pygeai/tests/proxy/test_config.py +171 -0
- pygeai/tests/proxy/test_integration.py +305 -0
- pygeai/tests/proxy/test_managers.py +312 -0
- pygeai/tests/proxy/test_servers.py +387 -0
- pygeai/tests/proxy/test_tool.py +176 -0
- pygeai/tests/snippets/__init__.py +0 -0
- pygeai/tests/snippets/analytics/__init__.py +0 -0
- pygeai/tests/snippets/analytics/get_agent_usage_per_user.py +16 -0
- pygeai/tests/snippets/analytics/get_agents_created_and_modified.py +11 -0
- pygeai/tests/snippets/analytics/get_average_cost_per_request.py +10 -0
- pygeai/tests/snippets/analytics/get_overall_error_rate.py +10 -0
- pygeai/tests/snippets/analytics/get_top_10_agents_by_requests.py +12 -0
- pygeai/tests/snippets/analytics/get_total_active_users.py +10 -0
- pygeai/tests/snippets/analytics/get_total_cost.py +10 -0
- pygeai/tests/snippets/analytics/get_total_requests_per_day.py +12 -0
- pygeai/tests/snippets/analytics/get_total_tokens.py +12 -0
- pygeai/tests/snippets/assistants/__init__.py +0 -0
- pygeai/tests/snippets/assistants/create_chat_assistant.py +54 -0
- pygeai/tests/snippets/assistants/create_text_assistant.py +51 -0
- pygeai/tests/snippets/assistants/data_analyst/__init__.py +0 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +100 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +9 -0
- pygeai/tests/snippets/assistants/data_analyst/get_status.py +9 -0
- pygeai/tests/snippets/assistants/file_summarizer_assistant.py +149 -0
- pygeai/tests/snippets/assistants/get_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/get_assistant_list.py +7 -0
- pygeai/tests/snippets/assistants/rag/__init__.py +0 -0
- pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +65 -0
- pygeai/tests/snippets/assistants/rag/delete_al_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/delete_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +8 -0
- pygeai/tests/snippets/assistants/rag/get_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/get_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +48 -0
- pygeai/tests/snippets/assistants/rag/upload_document.py +19 -0
- pygeai/tests/snippets/assistants/send_feedback.py +14 -0
- pygeai/tests/snippets/assistants/update_chat_assistant.py +63 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/__init__.py +0 -0
- pygeai/tests/snippets/chat/cancel_request.py +7 -0
- pygeai/tests/snippets/chat/chat_completion.py +28 -0
- pygeai/tests/snippets/chat/chat_completion_1.py +40 -0
- pygeai/tests/snippets/chat/chat_completion_2.py +60 -0
- pygeai/tests/snippets/chat/chat_completion_3.py +27 -0
- pygeai/tests/snippets/chat/chat_completion_4.py +67 -0
- pygeai/tests/snippets/chat/chat_completion_streaming.py +63 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_request_status.py +7 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_complete_example.py +67 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_instructions.py +19 -0
- pygeai/tests/snippets/chat/get_response_with_metadata.py +24 -0
- pygeai/tests/snippets/chat/get_response_with_parallel_tools.py +58 -0
- pygeai/tests/snippets/chat/get_response_with_reasoning.py +21 -0
- pygeai/tests/snippets/chat/get_response_with_store.py +38 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/chat/get_response_with_truncation.py +24 -0
- pygeai/tests/snippets/chat/send_chat_request.py +33 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/file_debugging.py +72 -0
- pygeai/tests/snippets/dbg/module_debugging.py +61 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/__init__.py +0 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/generate_embeddings.py +26 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/files/__init__.py +0 -0
- pygeai/tests/snippets/files/delete_file.py +9 -0
- pygeai/tests/snippets/files/get_file_content.py +10 -0
- pygeai/tests/snippets/files/get_file_data.py +9 -0
- pygeai/tests/snippets/files/get_file_list.py +6 -0
- pygeai/tests/snippets/files/upload_file.py +13 -0
- pygeai/tests/snippets/gam/__init__.py +0 -0
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/__init__.py +0 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +326 -0
- pygeai/tests/snippets/lab/agentic_flow_example_2.py +206 -0
- pygeai/tests/snippets/lab/agentic_flow_example_3.py +486 -0
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +446 -0
- pygeai/tests/snippets/lab/agents/__init__.py +0 -0
- pygeai/tests/snippets/lab/agents/create_agent.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_2.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_permissions.py +39 -0
- pygeai/tests/snippets/lab/agents/create_agent_with_properties.py +46 -0
- pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
- pygeai/tests/snippets/lab/agents/delete_agent.py +12 -0
- pygeai/tests/snippets/lab/agents/get_agent.py +24 -0
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +13 -0
- pygeai/tests/snippets/lab/agents/list_agents.py +18 -0
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +12 -0
- pygeai/tests/snippets/lab/agents/update_agent.py +50 -0
- pygeai/tests/snippets/lab/agents/update_agent_properties.py +50 -0
- pygeai/tests/snippets/lab/assistant_to_agent.py +191 -0
- pygeai/tests/snippets/lab/crud_ui.py +462 -0
- pygeai/tests/snippets/lab/processes/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/create_process.py +24 -0
- pygeai/tests/snippets/lab/processes/create_task.py +8 -0
- pygeai/tests/snippets/lab/processes/jobs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +21 -0
- pygeai/tests/snippets/lab/processes/kbs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +18 -0
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +26 -0
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +30 -0
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +73 -0
- pygeai/tests/snippets/lab/processes/list_processes.py +10 -0
- pygeai/tests/snippets/lab/runner_1.py +212 -0
- pygeai/tests/snippets/lab/samples/__init__.py +0 -0
- pygeai/tests/snippets/lab/samples/summarize_files.py +162 -0
- pygeai/tests/snippets/lab/strategies/__init__.py +0 -0
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +22 -0
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +10 -0
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +16 -0
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +26 -0
- pygeai/tests/snippets/lab/tools/__init__.py +0 -0
- pygeai/tests/snippets/lab/tools/create_tool.py +48 -0
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +21 -0
- pygeai/tests/snippets/lab/tools/get_parameter.py +21 -0
- pygeai/tests/snippets/lab/tools/get_tool.py +22 -0
- pygeai/tests/snippets/lab/tools/list_tools.py +23 -0
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +13 -0
- pygeai/tests/snippets/lab/tools/set_parameters.py +33 -0
- pygeai/tests/snippets/lab/tools/update_tool.py +52 -0
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +238 -0
- pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +1640 -0
- pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +133 -0
- pygeai/tests/snippets/lab/use_cases/create_web_designer.py +189 -0
- pygeai/tests/snippets/lab/use_cases/create_web_reader.py +185 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +157 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +157 -0
- pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +1773 -0
- pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +4541 -0
- pygeai/tests/snippets/lab/use_cases/update_web_designer.py +188 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader.py +195 -0
- pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +210 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/__init__.py +0 -0
- pygeai/tests/snippets/organization/add_project_member.py +10 -0
- pygeai/tests/snippets/organization/add_project_member_batch.py +44 -0
- pygeai/tests/snippets/organization/create_project.py +23 -0
- pygeai/tests/snippets/organization/delete_project.py +7 -0
- pygeai/tests/snippets/organization/export_request_data.py +7 -0
- pygeai/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_data.py +7 -0
- pygeai/tests/snippets/organization/get_project_list.py +8 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- pygeai/tests/snippets/organization/get_project_tokens.py +7 -0
- pygeai/tests/snippets/organization/update_project.py +14 -0
- pygeai/tests/snippets/rerank/__init__.py +0 -0
- pygeai/tests/snippets/rerank/rerank_chunks.py +19 -0
- pygeai/tests/snippets/secrets/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/delete_usage_limit.py +16 -0
- pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +12 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +11 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +13 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +22 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +24 -0
- pygeai/vendor/a2a/__init__.py +1 -0
- pygeai/vendor/a2a/auth/__init__.py +0 -0
- pygeai/vendor/a2a/auth/user.py +31 -0
- pygeai/vendor/a2a/client/__init__.py +19 -0
- pygeai/vendor/a2a/client/client.py +425 -0
- pygeai/vendor/a2a/client/errors.py +33 -0
- pygeai/vendor/a2a/client/helpers.py +22 -0
- pygeai/vendor/a2a/py.typed +0 -0
- pygeai/vendor/a2a/server/__init__.py +1 -0
- pygeai/vendor/a2a/server/agent_execution/__init__.py +18 -0
- pygeai/vendor/a2a/server/agent_execution/agent_executor.py +44 -0
- pygeai/vendor/a2a/server/agent_execution/context.py +155 -0
- pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +20 -0
- pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +77 -0
- pygeai/vendor/a2a/server/apps/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +16 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +88 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +426 -0
- pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +123 -0
- pygeai/vendor/a2a/server/context.py +23 -0
- pygeai/vendor/a2a/server/events/__init__.py +21 -0
- pygeai/vendor/a2a/server/events/event_consumer.py +149 -0
- pygeai/vendor/a2a/server/events/event_queue.py +156 -0
- pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +85 -0
- pygeai/vendor/a2a/server/events/queue_manager.py +35 -0
- pygeai/vendor/a2a/server/request_handlers/__init__.py +20 -0
- pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +435 -0
- pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +327 -0
- pygeai/vendor/a2a/server/request_handlers/request_handler.py +161 -0
- pygeai/vendor/a2a/server/request_handlers/response_helpers.py +133 -0
- pygeai/vendor/a2a/server/tasks/__init__.py +20 -0
- pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +62 -0
- pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +51 -0
- pygeai/vendor/a2a/server/tasks/push_notifier.py +25 -0
- pygeai/vendor/a2a/server/tasks/result_aggregator.py +151 -0
- pygeai/vendor/a2a/server/tasks/task_manager.py +253 -0
- pygeai/vendor/a2a/server/tasks/task_store.py +22 -0
- pygeai/vendor/a2a/server/tasks/task_updater.py +155 -0
- pygeai/vendor/a2a/types.py +1624 -0
- pygeai/vendor/a2a/utils/__init__.py +40 -0
- pygeai/vendor/a2a/utils/artifact.py +72 -0
- pygeai/vendor/a2a/utils/errors.py +69 -0
- pygeai/vendor/a2a/utils/helpers.py +176 -0
- pygeai/vendor/a2a/utils/message.py +83 -0
- pygeai/vendor/a2a/utils/task.py +57 -0
- pygeai/vendor/a2a/utils/telemetry.py +299 -0
- pygeai-0.6.0b15.dist-info/METADATA +205 -0
- pygeai-0.6.0b15.dist-info/RECORD +799 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- pygeai-0.6.0b15.dist-info/entry_points.txt +5 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info/licenses}/LICENSE +13 -1
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/top_level.txt +0 -1
- docs/source/conf.py +0 -45
- pygeai/core/clients.py +0 -240
- pygeai/tests/core/test_clients.py +0 -49
- pygeai-0.1.6.dist-info/METADATA +0 -92
- pygeai-0.1.6.dist-info/RECORD +0 -65
- pygeai-0.1.6.dist-info/SOURCES.sync-conflict-20241223-145950-3QD4F42.txt +0 -41
- pygeai-0.1.6.dist-info/entry_points.txt +0 -2
- /pygeai/{agent → analytics}/__init__.py +0 -0
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
Evaluation
|
|
2
|
+
==========
|
|
3
|
+
|
|
4
|
+
The Evaluation module provides functionality to assess and measure the performance of AI assistants using datasets, evaluation plans, and system metrics. This is essential for ensuring quality, tracking improvements, and comparing different assistant configurations.
|
|
5
|
+
|
|
6
|
+
This section covers:
|
|
7
|
+
|
|
8
|
+
* Creating and managing evaluation datasets
|
|
9
|
+
* Defining evaluation plans with metrics
|
|
10
|
+
* Executing evaluations
|
|
11
|
+
* Analyzing evaluation results
|
|
12
|
+
|
|
13
|
+
For each operation, you have three implementation options:
|
|
14
|
+
|
|
15
|
+
* `Command Line`_
|
|
16
|
+
* `Low-Level Service Layer`_
|
|
17
|
+
* `High-Level Service Layer`_
|
|
18
|
+
|
|
19
|
+
Overview
|
|
20
|
+
--------
|
|
21
|
+
|
|
22
|
+
The evaluation workflow consists of:
|
|
23
|
+
|
|
24
|
+
1. **Datasets**: Collections of test cases with inputs and expected outputs
|
|
25
|
+
2. **Evaluation Plans**: Configurations specifying which assistant to evaluate, which dataset to use, and which metrics to apply
|
|
26
|
+
3. **System Metrics**: Predefined metrics (e.g., accuracy, relevance, coherence) with configurable weights
|
|
27
|
+
4. **Execution**: Running the evaluation plan against the dataset
|
|
28
|
+
5. **Results**: Detailed performance metrics and row-level analysis
|
|
29
|
+
|
|
30
|
+
Dataset Management
|
|
31
|
+
------------------
|
|
32
|
+
|
|
33
|
+
Create Dataset
|
|
34
|
+
~~~~~~~~~~~~~~
|
|
35
|
+
|
|
36
|
+
Creates a new evaluation dataset with test cases.
|
|
37
|
+
|
|
38
|
+
Command Line
|
|
39
|
+
^^^^^^^^^^^^
|
|
40
|
+
|
|
41
|
+
.. code-block:: shell
|
|
42
|
+
|
|
43
|
+
geai evaluation create-dataset \
|
|
44
|
+
--name "Customer Support QA" \
|
|
45
|
+
--description "Test cases for customer support assistant" \
|
|
46
|
+
--type "TextPromptAssistant"
|
|
47
|
+
|
|
48
|
+
Low-Level Service Layer
|
|
49
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
50
|
+
|
|
51
|
+
.. code-block:: python
|
|
52
|
+
|
|
53
|
+
from pygeai.evaluation.dataset.clients import EvaluationDatasetClient
|
|
54
|
+
|
|
55
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
56
|
+
|
|
57
|
+
dataset = client.create_dataset(
|
|
58
|
+
dataset_name="Customer Support QA",
|
|
59
|
+
dataset_description="Test cases for customer support assistant",
|
|
60
|
+
dataset_type="TextPromptAssistant",
|
|
61
|
+
dataset_active=True,
|
|
62
|
+
rows=[
|
|
63
|
+
{
|
|
64
|
+
"dataSetRowInput": "How do I reset my password?",
|
|
65
|
+
"dataSetRowExpectedOutput": "Click 'Forgot Password' on the login page..."
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
)
|
|
69
|
+
print(dataset)
|
|
70
|
+
|
|
71
|
+
**Parameters:**
|
|
72
|
+
|
|
73
|
+
* ``dataset_name``: (Required) Name of the dataset
|
|
74
|
+
* ``dataset_description``: Description of the dataset's purpose
|
|
75
|
+
* ``dataset_type``: Type of assistant being evaluated (e.g., "TextPromptAssistant", "RAG Assistant")
|
|
76
|
+
* ``dataset_active``: Boolean indicating if dataset is active (default: True)
|
|
77
|
+
* ``rows``: Optional list of initial dataset rows
|
|
78
|
+
|
|
79
|
+
**Returns:**
|
|
80
|
+
Dictionary containing the created dataset with ID and metadata.
|
|
81
|
+
|
|
82
|
+
High-Level Service Layer
|
|
83
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
84
|
+
|
|
85
|
+
Currently uses the low-level client. Future versions may include a manager class.
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
Create Dataset from File
|
|
89
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
90
|
+
|
|
91
|
+
Uploads a dataset from a JSON file.
|
|
92
|
+
|
|
93
|
+
Command Line
|
|
94
|
+
^^^^^^^^^^^^
|
|
95
|
+
|
|
96
|
+
.. code-block:: shell
|
|
97
|
+
|
|
98
|
+
geai evaluation create-dataset-from-file \
|
|
99
|
+
--file-path "/path/to/dataset.json"
|
|
100
|
+
|
|
101
|
+
**File Format:**
|
|
102
|
+
|
|
103
|
+
.. code-block:: json
|
|
104
|
+
|
|
105
|
+
{
|
|
106
|
+
"dataSetName": "Customer Support QA",
|
|
107
|
+
"dataSetDescription": "Test cases for customer support",
|
|
108
|
+
"dataSetType": "TextPromptAssistant",
|
|
109
|
+
"dataSetActive": true,
|
|
110
|
+
"rows": [
|
|
111
|
+
{
|
|
112
|
+
"dataSetRowInput": "How do I reset my password?",
|
|
113
|
+
"dataSetRowExpectedOutput": "Click 'Forgot Password'..."
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
Low-Level Service Layer
|
|
119
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
120
|
+
|
|
121
|
+
.. code-block:: python
|
|
122
|
+
|
|
123
|
+
from pygeai.evaluation.dataset.clients import EvaluationDatasetClient
|
|
124
|
+
|
|
125
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
126
|
+
result = client.create_dataset_from_file(file_path="/path/to/dataset.json")
|
|
127
|
+
print(result)
|
|
128
|
+
|
|
129
|
+
**Parameters:**
|
|
130
|
+
|
|
131
|
+
* ``file_path``: (Required) Path to JSON file containing dataset definition
|
|
132
|
+
|
|
133
|
+
**Returns:**
|
|
134
|
+
Dictionary with upload result and created dataset ID.
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
List Datasets
|
|
138
|
+
~~~~~~~~~~~~~
|
|
139
|
+
|
|
140
|
+
Retrieves all evaluation datasets.
|
|
141
|
+
|
|
142
|
+
Command Line
|
|
143
|
+
^^^^^^^^^^^^
|
|
144
|
+
|
|
145
|
+
.. code-block:: shell
|
|
146
|
+
|
|
147
|
+
geai evaluation list-datasets
|
|
148
|
+
|
|
149
|
+
Low-Level Service Layer
|
|
150
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
151
|
+
|
|
152
|
+
.. code-block:: python
|
|
153
|
+
|
|
154
|
+
from pygeai.evaluation.dataset.clients import EvaluationDatasetClient
|
|
155
|
+
|
|
156
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
157
|
+
datasets = client.list_datasets()
|
|
158
|
+
|
|
159
|
+
for dataset in datasets.get('datasets', []):
|
|
160
|
+
print(f"{dataset['dataSetId']}: {dataset['dataSetName']}")
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
Get Dataset
|
|
164
|
+
~~~~~~~~~~~
|
|
165
|
+
|
|
166
|
+
Retrieves a specific dataset by ID.
|
|
167
|
+
|
|
168
|
+
Low-Level Service Layer
|
|
169
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
170
|
+
|
|
171
|
+
.. code-block:: python
|
|
172
|
+
|
|
173
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
174
|
+
dataset = client.get_dataset(dataset_id="dataset-uuid")
|
|
175
|
+
print(dataset)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
Update Dataset
|
|
179
|
+
~~~~~~~~~~~~~~
|
|
180
|
+
|
|
181
|
+
Updates dataset metadata.
|
|
182
|
+
|
|
183
|
+
Low-Level Service Layer
|
|
184
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
185
|
+
|
|
186
|
+
.. code-block:: python
|
|
187
|
+
|
|
188
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
189
|
+
|
|
190
|
+
updated = client.update_dataset(
|
|
191
|
+
dataset_id="dataset-uuid",
|
|
192
|
+
dataset_name="Updated Name",
|
|
193
|
+
dataset_description="Updated description",
|
|
194
|
+
dataset_active=True
|
|
195
|
+
)
|
|
196
|
+
print(updated)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
Delete Dataset
|
|
200
|
+
~~~~~~~~~~~~~~
|
|
201
|
+
|
|
202
|
+
Deletes a dataset.
|
|
203
|
+
|
|
204
|
+
Low-Level Service Layer
|
|
205
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
206
|
+
|
|
207
|
+
.. code-block:: python
|
|
208
|
+
|
|
209
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
210
|
+
result = client.delete_dataset(dataset_id="dataset-uuid")
|
|
211
|
+
print(result)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
Dataset Row Management
|
|
215
|
+
----------------------
|
|
216
|
+
|
|
217
|
+
Add Dataset Row
|
|
218
|
+
~~~~~~~~~~~~~~~
|
|
219
|
+
|
|
220
|
+
Adds a test case to an existing dataset.
|
|
221
|
+
|
|
222
|
+
Low-Level Service Layer
|
|
223
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
224
|
+
|
|
225
|
+
.. code-block:: python
|
|
226
|
+
|
|
227
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
228
|
+
|
|
229
|
+
row = client.create_dataset_row(
|
|
230
|
+
dataset_id="dataset-uuid",
|
|
231
|
+
row={
|
|
232
|
+
"dataSetRowInput": "What are your business hours?",
|
|
233
|
+
"dataSetRowExpectedOutput": "We are open Monday-Friday, 9am-5pm EST"
|
|
234
|
+
}
|
|
235
|
+
)
|
|
236
|
+
print(row)
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
List Dataset Rows
|
|
240
|
+
~~~~~~~~~~~~~~~~~
|
|
241
|
+
|
|
242
|
+
Lists all rows in a dataset.
|
|
243
|
+
|
|
244
|
+
Low-Level Service Layer
|
|
245
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
246
|
+
|
|
247
|
+
.. code-block:: python
|
|
248
|
+
|
|
249
|
+
client = EvaluationDatasetClient(eval_url="https://eval.saia.ai")
|
|
250
|
+
rows = client.list_dataset_rows(dataset_id="dataset-uuid")
|
|
251
|
+
|
|
252
|
+
for row in rows.get('rows', []):
|
|
253
|
+
print(f"Input: {row['dataSetRowInput']}")
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
Evaluation Plan Management
|
|
257
|
+
---------------------------
|
|
258
|
+
|
|
259
|
+
Create Evaluation Plan
|
|
260
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
|
261
|
+
|
|
262
|
+
Creates an evaluation plan that defines which assistant to evaluate, which dataset to use, and which metrics to apply.
|
|
263
|
+
|
|
264
|
+
Command Line
|
|
265
|
+
^^^^^^^^^^^^
|
|
266
|
+
|
|
267
|
+
.. code-block:: shell
|
|
268
|
+
|
|
269
|
+
geai evaluation create-plan \
|
|
270
|
+
--name "Support Bot Evaluation v1" \
|
|
271
|
+
--type "TextPromptAssistant" \
|
|
272
|
+
--assistant-id "assistant-uuid" \
|
|
273
|
+
--assistant-name "Support Bot" \
|
|
274
|
+
--assistant-revision "1" \
|
|
275
|
+
--dataset-id "dataset-uuid"
|
|
276
|
+
|
|
277
|
+
Low-Level Service Layer
|
|
278
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
279
|
+
|
|
280
|
+
.. code-block:: python
|
|
281
|
+
|
|
282
|
+
from pygeai.evaluation.plan.clients import EvaluationPlanClient
|
|
283
|
+
|
|
284
|
+
client = EvaluationPlanClient(eval_url="https://eval.saia.ai")
|
|
285
|
+
|
|
286
|
+
plan = client.create_evaluation_plan(
|
|
287
|
+
name="Support Bot Evaluation v1",
|
|
288
|
+
type="TextPromptAssistant",
|
|
289
|
+
assistant_id="assistant-uuid",
|
|
290
|
+
assistant_name="Support Bot",
|
|
291
|
+
assistant_revision="1",
|
|
292
|
+
dataset_id="dataset-uuid",
|
|
293
|
+
system_metrics=[
|
|
294
|
+
{
|
|
295
|
+
"systemMetricId": "metric-uuid-1",
|
|
296
|
+
"systemMetricWeight": 0.6
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"systemMetricId": "metric-uuid-2",
|
|
300
|
+
"systemMetricWeight": 0.4
|
|
301
|
+
}
|
|
302
|
+
]
|
|
303
|
+
)
|
|
304
|
+
print(f"Created plan: {plan['evaluationPlanId']}")
|
|
305
|
+
|
|
306
|
+
**Parameters:**
|
|
307
|
+
|
|
308
|
+
* ``name``: (Required) Name of the evaluation plan
|
|
309
|
+
* ``type``: (Required) Assistant type ("TextPromptAssistant" or "RAG Assistant")
|
|
310
|
+
* ``assistant_id``: Assistant UUID (required for TextPromptAssistant)
|
|
311
|
+
* ``assistant_name``: Assistant name (required for TextPromptAssistant)
|
|
312
|
+
* ``assistant_revision``: Assistant revision number (required for TextPromptAssistant)
|
|
313
|
+
* ``profile_name``: RAG profile name (required for RAG Assistant)
|
|
314
|
+
* ``dataset_id``: UUID of the dataset to use
|
|
315
|
+
* ``system_metrics``: List of metrics with weights (weights should sum to 1.0)
|
|
316
|
+
|
|
317
|
+
**Returns:**
|
|
318
|
+
Dictionary containing the created evaluation plan with ID.
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
List System Metrics
|
|
322
|
+
~~~~~~~~~~~~~~~~~~~
|
|
323
|
+
|
|
324
|
+
Lists available system metrics that can be used in evaluation plans.
|
|
325
|
+
|
|
326
|
+
Low-Level Service Layer
|
|
327
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
328
|
+
|
|
329
|
+
.. code-block:: python
|
|
330
|
+
|
|
331
|
+
client = EvaluationPlanClient(eval_url="https://eval.saia.ai")
|
|
332
|
+
metrics = client.list_system_metrics()
|
|
333
|
+
|
|
334
|
+
for metric in metrics.get('systemMetrics', []):
|
|
335
|
+
print(f"{metric['systemMetricName']}: {metric['systemMetricDescription']}")
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
Execute Evaluation Plan
|
|
339
|
+
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
340
|
+
|
|
341
|
+
Executes an evaluation plan to assess assistant performance.
|
|
342
|
+
|
|
343
|
+
Command Line
|
|
344
|
+
^^^^^^^^^^^^
|
|
345
|
+
|
|
346
|
+
.. code-block:: shell
|
|
347
|
+
|
|
348
|
+
geai evaluation execute-plan \
|
|
349
|
+
--plan-id "plan-uuid"
|
|
350
|
+
|
|
351
|
+
Low-Level Service Layer
|
|
352
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
353
|
+
|
|
354
|
+
.. code-block:: python
|
|
355
|
+
|
|
356
|
+
client = EvaluationPlanClient(eval_url="https://eval.saia.ai")
|
|
357
|
+
result = client.execute_evaluation_plan(evaluation_plan_id="plan-uuid")
|
|
358
|
+
|
|
359
|
+
print(f"Execution started: {result['evaluationResultId']}")
|
|
360
|
+
print(f"Status: {result['evaluationResultStatus']}")
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
List Evaluation Plans
|
|
364
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
|
365
|
+
|
|
366
|
+
Lists all evaluation plans.
|
|
367
|
+
|
|
368
|
+
Low-Level Service Layer
|
|
369
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
370
|
+
|
|
371
|
+
.. code-block:: python
|
|
372
|
+
|
|
373
|
+
client = EvaluationPlanClient(eval_url="https://eval.saia.ai")
|
|
374
|
+
plans = client.list_evaluation_plans()
|
|
375
|
+
|
|
376
|
+
for plan in plans.get('evaluationPlans', []):
|
|
377
|
+
print(f"{plan['evaluationPlanName']}: {plan['evaluationPlanType']}")
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
Get Evaluation Plan
|
|
381
|
+
~~~~~~~~~~~~~~~~~~~
|
|
382
|
+
|
|
383
|
+
Retrieves a specific evaluation plan.
|
|
384
|
+
|
|
385
|
+
Low-Level Service Layer
|
|
386
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
387
|
+
|
|
388
|
+
.. code-block:: python
|
|
389
|
+
|
|
390
|
+
client = EvaluationPlanClient(eval_url="https://eval.saia.ai")
|
|
391
|
+
plan = client.get_evaluation_plan(evaluation_plan_id="plan-uuid")
|
|
392
|
+
print(plan)
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
Evaluation Results
|
|
396
|
+
------------------
|
|
397
|
+
|
|
398
|
+
List Evaluation Results
|
|
399
|
+
~~~~~~~~~~~~~~~~~~~~~~~
|
|
400
|
+
|
|
401
|
+
Lists all results for a specific evaluation plan.
|
|
402
|
+
|
|
403
|
+
Low-Level Service Layer
|
|
404
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
405
|
+
|
|
406
|
+
.. code-block:: python
|
|
407
|
+
|
|
408
|
+
from pygeai.evaluation.result.clients import EvaluationResultClient
|
|
409
|
+
|
|
410
|
+
client = EvaluationResultClient(eval_url="https://eval.saia.ai")
|
|
411
|
+
results = client.list_evaluation_results(evaluation_plan_id="plan-uuid")
|
|
412
|
+
|
|
413
|
+
for result in results.get('evaluationResults', []):
|
|
414
|
+
print(f"Result ID: {result['evaluationResultId']}")
|
|
415
|
+
print(f"Status: {result['evaluationResultStatus']}")
|
|
416
|
+
print(f"Cost: {result['evaluationResultCost']}")
|
|
417
|
+
print(f"Duration: {result['evaluationResultDuration']}s")
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
Get Evaluation Result
|
|
421
|
+
~~~~~~~~~~~~~~~~~~~~~
|
|
422
|
+
|
|
423
|
+
Retrieves detailed results including row-level analysis.
|
|
424
|
+
|
|
425
|
+
Low-Level Service Layer
|
|
426
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
427
|
+
|
|
428
|
+
.. code-block:: python
|
|
429
|
+
|
|
430
|
+
client = EvaluationResultClient(eval_url="https://eval.saia.ai")
|
|
431
|
+
result = client.get_evaluation_result(evaluation_result_id="result-uuid")
|
|
432
|
+
|
|
433
|
+
print(f"Overall Score: {result['evaluationResultScore']}")
|
|
434
|
+
print(f"Total Cost: {result['evaluationResultCost']}")
|
|
435
|
+
|
|
436
|
+
for row in result.get('rows', []):
|
|
437
|
+
print(f"\nRow {row['dataSetRowId']}:")
|
|
438
|
+
print(f" Status: {row['evaluationResultRowStatus']}")
|
|
439
|
+
print(f" Score: {row['evaluationResultRowScore']}")
|
|
440
|
+
print(f" Output: {row['evaluationResultRowOutput']}")
|
|
441
|
+
|
|
442
|
+
**Note:** The API contains some field name typos (e.g., "evaluationResultAssitantRevision", "evaluationResultChunckCount"). These are returned as-is from the API.
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
Complete Workflow Example
|
|
446
|
+
--------------------------
|
|
447
|
+
|
|
448
|
+
.. code-block:: python
|
|
449
|
+
|
|
450
|
+
from pygeai.evaluation.dataset.clients import EvaluationDatasetClient
|
|
451
|
+
from pygeai.evaluation.plan.clients import EvaluationPlanClient
|
|
452
|
+
from pygeai.evaluation.result.clients import EvaluationResultClient
|
|
453
|
+
import time
|
|
454
|
+
|
|
455
|
+
eval_url = "https://eval.saia.ai"
|
|
456
|
+
|
|
457
|
+
dataset_client = EvaluationDatasetClient(eval_url=eval_url)
|
|
458
|
+
dataset = dataset_client.create_dataset(
|
|
459
|
+
dataset_name="Support Bot Test Cases",
|
|
460
|
+
dataset_description="Common customer support questions",
|
|
461
|
+
dataset_type="TextPromptAssistant",
|
|
462
|
+
rows=[
|
|
463
|
+
{
|
|
464
|
+
"dataSetRowInput": "How do I reset my password?",
|
|
465
|
+
"dataSetRowExpectedOutput": "Click 'Forgot Password' on login page"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"dataSetRowInput": "What are your hours?",
|
|
469
|
+
"dataSetRowExpectedOutput": "Monday-Friday, 9am-5pm EST"
|
|
470
|
+
}
|
|
471
|
+
]
|
|
472
|
+
)
|
|
473
|
+
dataset_id = dataset['dataSetId']
|
|
474
|
+
print(f"Created dataset: {dataset_id}")
|
|
475
|
+
|
|
476
|
+
plan_client = EvaluationPlanClient(eval_url=eval_url)
|
|
477
|
+
metrics = plan_client.list_system_metrics()
|
|
478
|
+
metric_id = metrics['systemMetrics'][0]['systemMetricId']
|
|
479
|
+
|
|
480
|
+
plan = plan_client.create_evaluation_plan(
|
|
481
|
+
name="Support Bot v1 Evaluation",
|
|
482
|
+
type="TextPromptAssistant",
|
|
483
|
+
assistant_id="your-assistant-uuid",
|
|
484
|
+
assistant_name="Support Bot",
|
|
485
|
+
assistant_revision="1",
|
|
486
|
+
dataset_id=dataset_id,
|
|
487
|
+
system_metrics=[
|
|
488
|
+
{"systemMetricId": metric_id, "systemMetricWeight": 1.0}
|
|
489
|
+
]
|
|
490
|
+
)
|
|
491
|
+
plan_id = plan['evaluationPlanId']
|
|
492
|
+
print(f"Created plan: {plan_id}")
|
|
493
|
+
|
|
494
|
+
execution = plan_client.execute_evaluation_plan(evaluation_plan_id=plan_id)
|
|
495
|
+
result_id = execution['evaluationResultId']
|
|
496
|
+
print(f"Started execution: {result_id}")
|
|
497
|
+
|
|
498
|
+
result_client = EvaluationResultClient(eval_url=eval_url)
|
|
499
|
+
|
|
500
|
+
while True:
|
|
501
|
+
result = result_client.get_evaluation_result(evaluation_result_id=result_id)
|
|
502
|
+
status = result['evaluationResultStatus']
|
|
503
|
+
print(f"Status: {status}")
|
|
504
|
+
|
|
505
|
+
if status in ['Completed', 'Failed']:
|
|
506
|
+
break
|
|
507
|
+
|
|
508
|
+
time.sleep(5)
|
|
509
|
+
|
|
510
|
+
if status == 'Completed':
|
|
511
|
+
print(f"\nEvaluation Complete!")
|
|
512
|
+
print(f"Overall Score: {result['evaluationResultScore']}")
|
|
513
|
+
print(f"Total Cost: ${result['evaluationResultCost']}")
|
|
514
|
+
print(f"Duration: {result['evaluationResultDuration']}s")
|
|
515
|
+
|
|
516
|
+
print("\nRow Results:")
|
|
517
|
+
for row in result.get('rows', []):
|
|
518
|
+
print(f" - Score: {row['evaluationResultRowScore']}")
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
Best Practices
|
|
522
|
+
--------------
|
|
523
|
+
|
|
524
|
+
Dataset Design
|
|
525
|
+
~~~~~~~~~~~~~~
|
|
526
|
+
|
|
527
|
+
* Include diverse test cases covering common and edge cases
|
|
528
|
+
* Ensure expected outputs are clear and specific
|
|
529
|
+
* Use consistent formatting across rows
|
|
530
|
+
* Start with 20-50 test cases, expand based on results
|
|
531
|
+
* Version datasets alongside assistant versions
|
|
532
|
+
|
|
533
|
+
Metrics Selection
|
|
534
|
+
~~~~~~~~~~~~~~~~~
|
|
535
|
+
|
|
536
|
+
* Choose metrics aligned with your quality goals
|
|
537
|
+
* Weight metrics based on business priorities
|
|
538
|
+
* Test with different metric combinations
|
|
539
|
+
* Document why specific metrics were chosen
|
|
540
|
+
|
|
541
|
+
Evaluation Execution
|
|
542
|
+
~~~~~~~~~~~~~~~~~~~~
|
|
543
|
+
|
|
544
|
+
* Run evaluations regularly (e.g., before deploying new versions)
|
|
545
|
+
* Compare results across assistant revisions
|
|
546
|
+
* Track cost and duration trends
|
|
547
|
+
* Archive historical results for analysis
|
|
548
|
+
|
|
549
|
+
Error Handling
|
|
550
|
+
--------------
|
|
551
|
+
|
|
552
|
+
Common Issues
|
|
553
|
+
~~~~~~~~~~~~~
|
|
554
|
+
|
|
555
|
+
**Missing Evaluation URL**
|
|
556
|
+
|
|
557
|
+
.. code-block:: python
|
|
558
|
+
|
|
559
|
+
from pygeai.core.common.exceptions import MissingRequirementException
|
|
560
|
+
|
|
561
|
+
try:
|
|
562
|
+
client = EvaluationDatasetClient()
|
|
563
|
+
except MissingRequirementException as e:
|
|
564
|
+
print("Set GEAI_EVAL_URL environment variable or pass eval_url parameter")
|
|
565
|
+
|
|
566
|
+
**Invalid Dataset Type**
|
|
567
|
+
|
|
568
|
+
Ensure ``dataset_type`` matches ``evaluation_plan_type`` and assistant type:
|
|
569
|
+
- "TextPromptAssistant" for chat/text assistants
|
|
570
|
+
- "RAG Assistant" for RAG assistants
|
|
571
|
+
|
|
572
|
+
**Metric Weights Don't Sum to 1.0**
|
|
573
|
+
|
|
574
|
+
When specifying multiple metrics, ensure weights sum to 1.0:
|
|
575
|
+
|
|
576
|
+
.. code-block:: python
|
|
577
|
+
|
|
578
|
+
system_metrics=[
|
|
579
|
+
{"systemMetricId": "metric-1", "systemMetricWeight": 0.6},
|
|
580
|
+
{"systemMetricId": "metric-2", "systemMetricWeight": 0.4}
|
|
581
|
+
]
|
|
582
|
+
|
|
583
|
+
Notes
|
|
584
|
+
-----
|
|
585
|
+
|
|
586
|
+
* The Evaluation API requires a separate evaluation URL (``eval_url``)
|
|
587
|
+
* Set via ``GEAI_EVAL_URL`` environment variable or pass to client constructor
|
|
588
|
+
* Evaluation results are read-only; they cannot be modified or deleted
|
|
589
|
+
* Some API response fields contain typos (preserved for compatibility)
|
|
590
|
+
* Execution time depends on dataset size and assistant complexity
|