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/cli/__init__.py
CHANGED
pygeai/cli/commands/admin.py
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import sys
|
|
3
|
-
|
|
4
1
|
from pygeai.admin.clients import AdminClient
|
|
5
2
|
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
6
3
|
from pygeai.cli.commands.builders import build_help_text
|
|
7
4
|
from pygeai.cli.texts.help import ADMIN_HELP_TEXT
|
|
8
5
|
from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
|
|
6
|
+
from pygeai.core.utils.console import Console
|
|
9
7
|
|
|
10
8
|
|
|
11
9
|
def show_help():
|
|
@@ -13,20 +11,19 @@ def show_help():
|
|
|
13
11
|
Displays help text in stdout
|
|
14
12
|
"""
|
|
15
13
|
help_text = build_help_text(admin_commands, ADMIN_HELP_TEXT)
|
|
16
|
-
|
|
14
|
+
Console.write_stdout(help_text)
|
|
17
15
|
|
|
18
16
|
|
|
19
17
|
def validate_api_token():
|
|
20
|
-
|
|
21
18
|
client = AdminClient()
|
|
22
19
|
result = client.validate_api_token()
|
|
23
|
-
|
|
20
|
+
Console.write_stdout(f"API Token access detail: \n{result}")
|
|
24
21
|
|
|
25
22
|
|
|
26
23
|
def get_authorized_organizations():
|
|
27
24
|
client = AdminClient()
|
|
28
25
|
result = client.get_authorized_organizations()
|
|
29
|
-
|
|
26
|
+
Console.write_stdout(f"Authorized organizations: \n{result}")
|
|
30
27
|
|
|
31
28
|
|
|
32
29
|
def get_authorized_projects_by_organization(option_list: list):
|
|
@@ -42,7 +39,7 @@ def get_authorized_projects_by_organization(option_list: list):
|
|
|
42
39
|
result = client.get_authorized_projects_by_organization(
|
|
43
40
|
organization=organization
|
|
44
41
|
)
|
|
45
|
-
|
|
42
|
+
Console.write_stdout(f"Authorized projects detail: \n{result}")
|
|
46
43
|
|
|
47
44
|
|
|
48
45
|
authorized_projects_by_organization_options = [
|
|
@@ -77,7 +74,7 @@ def get_project_visibility(option_list: list):
|
|
|
77
74
|
project=project,
|
|
78
75
|
access_token=access_token
|
|
79
76
|
)
|
|
80
|
-
|
|
77
|
+
Console.write_stdout(f"Project visibility detail: \n{result}")
|
|
81
78
|
|
|
82
79
|
|
|
83
80
|
project_visibility_options = [
|
|
@@ -124,7 +121,7 @@ def get_project_api_token(option_list: list):
|
|
|
124
121
|
project=project,
|
|
125
122
|
access_token=access_token
|
|
126
123
|
)
|
|
127
|
-
|
|
124
|
+
Console.write_stdout(f"Project API Token: \n{result}")
|
|
128
125
|
|
|
129
126
|
|
|
130
127
|
project_api_token_options = [
|
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
2
|
+
from pygeai.cli.commands.builders import build_help_text
|
|
3
|
+
from pygeai.cli.texts.help import ANALYTICS_HELP_TEXT
|
|
4
|
+
from pygeai.core.common.exceptions import MissingRequirementException
|
|
5
|
+
from pygeai.core.utils.console import Console
|
|
6
|
+
from pygeai.analytics.managers import AnalyticsManager
|
|
7
|
+
import csv
|
|
8
|
+
from datetime import datetime, timedelta
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def show_help():
|
|
12
|
+
help_text = build_help_text(analytics_commands, ANALYTICS_HELP_TEXT)
|
|
13
|
+
Console.write_stdout(help_text)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def get_default_date_range():
|
|
17
|
+
today = datetime.now()
|
|
18
|
+
first_day_current_month = today.replace(day=1)
|
|
19
|
+
last_day_last_month = first_day_current_month - timedelta(days=1)
|
|
20
|
+
first_day_last_month = last_day_last_month.replace(day=1)
|
|
21
|
+
|
|
22
|
+
start_date = first_day_last_month.strftime('%Y-%m-%d')
|
|
23
|
+
end_date = last_day_last_month.strftime('%Y-%m-%d')
|
|
24
|
+
|
|
25
|
+
return start_date, end_date
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
START_DATE_OPTION = Option(
|
|
29
|
+
"start_date",
|
|
30
|
+
["--start-date", "-s"],
|
|
31
|
+
"Start date in YYYY-MM-DD format (defaults to first day of last month)",
|
|
32
|
+
True
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
END_DATE_OPTION = Option(
|
|
36
|
+
"end_date",
|
|
37
|
+
["--end-date", "-e"],
|
|
38
|
+
"End date in YYYY-MM-DD format (defaults to last day of last month)",
|
|
39
|
+
True
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
AGENT_NAME_OPTION = Option(
|
|
43
|
+
"agent_name",
|
|
44
|
+
["--agent-name", "-a"],
|
|
45
|
+
"Name of the agent to filter results",
|
|
46
|
+
True
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
CSV_EXPORT_OPTION = Option(
|
|
50
|
+
"csv_file",
|
|
51
|
+
["--csv", "-c"],
|
|
52
|
+
"Export results to CSV file",
|
|
53
|
+
True
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def get_agents_created_and_modified(option_list: list):
|
|
58
|
+
start_date = None
|
|
59
|
+
end_date = None
|
|
60
|
+
for option_flag, option_arg in option_list:
|
|
61
|
+
if option_flag.name == "start_date":
|
|
62
|
+
start_date = option_arg
|
|
63
|
+
if option_flag.name == "end_date":
|
|
64
|
+
end_date = option_arg
|
|
65
|
+
|
|
66
|
+
if not start_date or not end_date:
|
|
67
|
+
start_date, end_date = get_default_date_range()
|
|
68
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
69
|
+
|
|
70
|
+
manager = AnalyticsManager()
|
|
71
|
+
result = manager.get_agents_created_and_modified(start_date, end_date)
|
|
72
|
+
Console.write_stdout(f"Agents created and modified:\n Created: {result.createdAgents}\n Modified: {result.modifiedAgents}")
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
agents_created_options = [START_DATE_OPTION, END_DATE_OPTION]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def get_total_requests_per_day(option_list: list):
|
|
79
|
+
start_date = None
|
|
80
|
+
end_date = None
|
|
81
|
+
agent_name = None
|
|
82
|
+
for option_flag, option_arg in option_list:
|
|
83
|
+
if option_flag.name == "start_date":
|
|
84
|
+
start_date = option_arg
|
|
85
|
+
if option_flag.name == "end_date":
|
|
86
|
+
end_date = option_arg
|
|
87
|
+
if option_flag.name == "agent_name":
|
|
88
|
+
agent_name = option_arg
|
|
89
|
+
|
|
90
|
+
if not start_date or not end_date:
|
|
91
|
+
start_date, end_date = get_default_date_range()
|
|
92
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
93
|
+
|
|
94
|
+
manager = AnalyticsManager()
|
|
95
|
+
result = manager.get_total_requests_per_day(start_date, end_date, agent_name)
|
|
96
|
+
Console.write_stdout(f"Total requests per day:")
|
|
97
|
+
for item in result.requestsPerDay:
|
|
98
|
+
Console.write_stdout(f" {item.date}: {item.totalRequests} requests ({item.totalRequestsWithError} errors)")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
total_requests_per_day_options = [START_DATE_OPTION, END_DATE_OPTION, AGENT_NAME_OPTION]
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def get_total_cost(option_list: list):
|
|
105
|
+
start_date = None
|
|
106
|
+
end_date = None
|
|
107
|
+
for option_flag, option_arg in option_list:
|
|
108
|
+
if option_flag.name == "start_date":
|
|
109
|
+
start_date = option_arg
|
|
110
|
+
if option_flag.name == "end_date":
|
|
111
|
+
end_date = option_arg
|
|
112
|
+
|
|
113
|
+
if not start_date or not end_date:
|
|
114
|
+
start_date, end_date = get_default_date_range()
|
|
115
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
116
|
+
|
|
117
|
+
manager = AnalyticsManager()
|
|
118
|
+
result = manager.get_total_cost(start_date, end_date)
|
|
119
|
+
Console.write_stdout(f"Total cost: ${result.totalCost:.2f}")
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
total_cost_options = [START_DATE_OPTION, END_DATE_OPTION]
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def get_average_cost_per_request(option_list: list):
|
|
126
|
+
start_date = None
|
|
127
|
+
end_date = None
|
|
128
|
+
for option_flag, option_arg in option_list:
|
|
129
|
+
if option_flag.name == "start_date":
|
|
130
|
+
start_date = option_arg
|
|
131
|
+
if option_flag.name == "end_date":
|
|
132
|
+
end_date = option_arg
|
|
133
|
+
|
|
134
|
+
if not start_date or not end_date:
|
|
135
|
+
start_date, end_date = get_default_date_range()
|
|
136
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
137
|
+
|
|
138
|
+
manager = AnalyticsManager()
|
|
139
|
+
result = manager.get_average_cost_per_request(start_date, end_date)
|
|
140
|
+
Console.write_stdout(f"Average cost per request: ${result.averageCost:.4f}")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
average_cost_per_request_options = [START_DATE_OPTION, END_DATE_OPTION]
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def get_total_tokens(option_list: list):
|
|
147
|
+
start_date = None
|
|
148
|
+
end_date = None
|
|
149
|
+
for option_flag, option_arg in option_list:
|
|
150
|
+
if option_flag.name == "start_date":
|
|
151
|
+
start_date = option_arg
|
|
152
|
+
if option_flag.name == "end_date":
|
|
153
|
+
end_date = option_arg
|
|
154
|
+
|
|
155
|
+
if not start_date or not end_date:
|
|
156
|
+
start_date, end_date = get_default_date_range()
|
|
157
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
158
|
+
|
|
159
|
+
manager = AnalyticsManager()
|
|
160
|
+
result = manager.get_total_tokens(start_date, end_date)
|
|
161
|
+
Console.write_stdout(f"Total tokens:\n Input: {result.totalInputTokens}\n Output: {result.totalOutputTokens}\n Total: {result.totalTokens}")
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
total_tokens_options = [START_DATE_OPTION, END_DATE_OPTION]
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def get_overall_error_rate(option_list: list):
|
|
168
|
+
start_date = None
|
|
169
|
+
end_date = None
|
|
170
|
+
for option_flag, option_arg in option_list:
|
|
171
|
+
if option_flag.name == "start_date":
|
|
172
|
+
start_date = option_arg
|
|
173
|
+
if option_flag.name == "end_date":
|
|
174
|
+
end_date = option_arg
|
|
175
|
+
|
|
176
|
+
if not start_date or not end_date:
|
|
177
|
+
start_date, end_date = get_default_date_range()
|
|
178
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
179
|
+
|
|
180
|
+
manager = AnalyticsManager()
|
|
181
|
+
result = manager.get_overall_error_rate(start_date, end_date)
|
|
182
|
+
Console.write_stdout(f"Overall error rate: {result.errorRate:.2%}")
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
error_rate_options = [START_DATE_OPTION, END_DATE_OPTION]
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def get_top_agents_by_requests(option_list: list):
|
|
189
|
+
start_date = None
|
|
190
|
+
end_date = None
|
|
191
|
+
for option_flag, option_arg in option_list:
|
|
192
|
+
if option_flag.name == "start_date":
|
|
193
|
+
start_date = option_arg
|
|
194
|
+
if option_flag.name == "end_date":
|
|
195
|
+
end_date = option_arg
|
|
196
|
+
|
|
197
|
+
if not start_date or not end_date:
|
|
198
|
+
start_date, end_date = get_default_date_range()
|
|
199
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
200
|
+
|
|
201
|
+
manager = AnalyticsManager()
|
|
202
|
+
result = manager.get_top_10_agents_by_requests(start_date, end_date)
|
|
203
|
+
Console.write_stdout("Top 10 agents by requests:")
|
|
204
|
+
for idx, agent in enumerate(result.topAgents, 1):
|
|
205
|
+
Console.write_stdout(f" {idx}. {agent.agentName}: {agent.totalRequests} requests")
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
top_agents_options = [START_DATE_OPTION, END_DATE_OPTION]
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def get_total_active_users(option_list: list):
|
|
212
|
+
start_date = None
|
|
213
|
+
end_date = None
|
|
214
|
+
for option_flag, option_arg in option_list:
|
|
215
|
+
if option_flag.name == "start_date":
|
|
216
|
+
start_date = option_arg
|
|
217
|
+
if option_flag.name == "end_date":
|
|
218
|
+
end_date = option_arg
|
|
219
|
+
|
|
220
|
+
if not start_date or not end_date:
|
|
221
|
+
start_date, end_date = get_default_date_range()
|
|
222
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
223
|
+
|
|
224
|
+
manager = AnalyticsManager()
|
|
225
|
+
result = manager.get_total_active_users(start_date, end_date)
|
|
226
|
+
Console.write_stdout(f"Total active users: {result.totalActiveUsers}")
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
active_users_options = [START_DATE_OPTION, END_DATE_OPTION]
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def get_full_report(option_list: list):
|
|
233
|
+
start_date = None
|
|
234
|
+
end_date = None
|
|
235
|
+
csv_file = None
|
|
236
|
+
for option_flag, option_arg in option_list:
|
|
237
|
+
if option_flag.name == "start_date":
|
|
238
|
+
start_date = option_arg
|
|
239
|
+
if option_flag.name == "end_date":
|
|
240
|
+
end_date = option_arg
|
|
241
|
+
if option_flag.name == "csv_file":
|
|
242
|
+
csv_file = option_arg
|
|
243
|
+
|
|
244
|
+
if not start_date or not end_date:
|
|
245
|
+
start_date, end_date = get_default_date_range()
|
|
246
|
+
Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
|
|
247
|
+
|
|
248
|
+
manager = AnalyticsManager()
|
|
249
|
+
|
|
250
|
+
Console.write_stdout(f"\n{'='*80}")
|
|
251
|
+
Console.write_stdout(f"ANALYTICS FULL REPORT - Period: {start_date} to {end_date}")
|
|
252
|
+
Console.write_stdout(f"{'='*80}\n")
|
|
253
|
+
|
|
254
|
+
report_data = {}
|
|
255
|
+
|
|
256
|
+
try:
|
|
257
|
+
Console.write_stdout("LAB METRICS")
|
|
258
|
+
Console.write_stdout("-" * 80)
|
|
259
|
+
agents_created = manager.get_agents_created_and_modified(start_date, end_date)
|
|
260
|
+
Console.write_stdout(f"Agents Created: {agents_created.createdAgents}")
|
|
261
|
+
Console.write_stdout(f"Agents Modified: {agents_created.modifiedAgents}")
|
|
262
|
+
report_data["Agents Created"] = agents_created.createdAgents
|
|
263
|
+
report_data["Agents Modified"] = agents_created.modifiedAgents
|
|
264
|
+
except Exception as e:
|
|
265
|
+
Console.write_stdout(f"Error retrieving agents data: {e}")
|
|
266
|
+
|
|
267
|
+
try:
|
|
268
|
+
flows_created = manager.get_flows_created_and_modified(start_date, end_date)
|
|
269
|
+
Console.write_stdout(f"Flows Created: {flows_created.createdFlows}")
|
|
270
|
+
Console.write_stdout(f"Flows Modified: {flows_created.modifiedFlows}")
|
|
271
|
+
report_data["Flows Created"] = flows_created.createdFlows
|
|
272
|
+
report_data["Flows Modified"] = flows_created.modifiedFlows
|
|
273
|
+
except Exception as e:
|
|
274
|
+
Console.write_stdout(f"Error retrieving flows data: {e}")
|
|
275
|
+
|
|
276
|
+
try:
|
|
277
|
+
processes_created = manager.get_processes_created_and_modified(start_date, end_date)
|
|
278
|
+
Console.write_stdout(f"Processes Created: {processes_created.createdProcesses}")
|
|
279
|
+
Console.write_stdout(f"Processes Modified: {processes_created.modifiedProcesses}")
|
|
280
|
+
report_data["Processes Created"] = processes_created.createdProcesses
|
|
281
|
+
report_data["Processes Modified"] = processes_created.modifiedProcesses
|
|
282
|
+
except Exception as e:
|
|
283
|
+
Console.write_stdout(f"Error retrieving processes data: {e}")
|
|
284
|
+
|
|
285
|
+
Console.write_stdout("\nREQUEST METRICS")
|
|
286
|
+
Console.write_stdout("-" * 80)
|
|
287
|
+
|
|
288
|
+
try:
|
|
289
|
+
total_requests = manager.get_total_requests(start_date, end_date)
|
|
290
|
+
Console.write_stdout(f"Total Requests: {total_requests.totalRequests}")
|
|
291
|
+
report_data["Total Requests"] = total_requests.totalRequests
|
|
292
|
+
except Exception as e:
|
|
293
|
+
Console.write_stdout(f"Error retrieving total requests: {e}")
|
|
294
|
+
|
|
295
|
+
try:
|
|
296
|
+
total_errors = manager.get_total_requests_with_error(start_date, end_date)
|
|
297
|
+
Console.write_stdout(f"Total Requests with Error: {total_errors.totalRequestsWithError}")
|
|
298
|
+
report_data["Total Requests with Error"] = total_errors.totalRequestsWithError
|
|
299
|
+
except Exception as e:
|
|
300
|
+
Console.write_stdout(f"Error retrieving error requests: {e}")
|
|
301
|
+
|
|
302
|
+
try:
|
|
303
|
+
error_rate = manager.get_overall_error_rate(start_date, end_date)
|
|
304
|
+
Console.write_stdout(f"Overall Error Rate: {error_rate.errorRate:.2%}")
|
|
305
|
+
report_data["Overall Error Rate (%)"] = f"{error_rate.errorRate:.2%}"
|
|
306
|
+
except Exception as e:
|
|
307
|
+
Console.write_stdout(f"Error retrieving error rate: {e}")
|
|
308
|
+
|
|
309
|
+
try:
|
|
310
|
+
avg_request_time = manager.get_average_request_time(start_date, end_date)
|
|
311
|
+
Console.write_stdout(f"Average Request Time: {avg_request_time.averageTime:.2f} ms")
|
|
312
|
+
report_data["Average Request Time (ms)"] = f"{avg_request_time.averageTime:.2f}"
|
|
313
|
+
except Exception as e:
|
|
314
|
+
Console.write_stdout(f"Error retrieving average request time: {e}")
|
|
315
|
+
|
|
316
|
+
Console.write_stdout("\nCOST METRICS")
|
|
317
|
+
Console.write_stdout("-" * 80)
|
|
318
|
+
|
|
319
|
+
try:
|
|
320
|
+
total_cost = manager.get_total_cost(start_date, end_date)
|
|
321
|
+
Console.write_stdout(f"Total Cost: ${total_cost.totalCost:.2f}")
|
|
322
|
+
report_data["Total Cost (USD)"] = f"{total_cost.totalCost:.2f}"
|
|
323
|
+
except Exception as e:
|
|
324
|
+
Console.write_stdout(f"Error retrieving total cost: {e}")
|
|
325
|
+
|
|
326
|
+
try:
|
|
327
|
+
avg_cost = manager.get_average_cost_per_request(start_date, end_date)
|
|
328
|
+
Console.write_stdout(f"Average Cost per Request: ${avg_cost.averageCost:.4f}")
|
|
329
|
+
report_data["Average Cost per Request (USD)"] = f"{avg_cost.averageCost:.4f}"
|
|
330
|
+
except Exception as e:
|
|
331
|
+
Console.write_stdout(f"Error retrieving average cost: {e}")
|
|
332
|
+
|
|
333
|
+
Console.write_stdout("\nTOKEN METRICS")
|
|
334
|
+
Console.write_stdout("-" * 80)
|
|
335
|
+
|
|
336
|
+
try:
|
|
337
|
+
total_tokens = manager.get_total_tokens(start_date, end_date)
|
|
338
|
+
Console.write_stdout(f"Total Input Tokens: {total_tokens.totalInputTokens}")
|
|
339
|
+
Console.write_stdout(f"Total Output Tokens: {total_tokens.totalOutputTokens}")
|
|
340
|
+
Console.write_stdout(f"Total Tokens: {total_tokens.totalTokens}")
|
|
341
|
+
report_data["Total Input Tokens"] = total_tokens.totalInputTokens
|
|
342
|
+
report_data["Total Output Tokens"] = total_tokens.totalOutputTokens
|
|
343
|
+
report_data["Total Tokens"] = total_tokens.totalTokens
|
|
344
|
+
except Exception as e:
|
|
345
|
+
Console.write_stdout(f"Error retrieving token data: {e}")
|
|
346
|
+
|
|
347
|
+
try:
|
|
348
|
+
avg_tokens = manager.get_average_tokens_per_request(start_date, end_date)
|
|
349
|
+
Console.write_stdout(f"Average Input Tokens per Request: {avg_tokens.averageInputTokens:.2f}")
|
|
350
|
+
Console.write_stdout(f"Average Output Tokens per Request: {avg_tokens.averageOutputTokens:.2f}")
|
|
351
|
+
Console.write_stdout(f"Average Total Tokens per Request: {avg_tokens.averageTotalTokens:.2f}")
|
|
352
|
+
report_data["Average Input Tokens per Request"] = f"{avg_tokens.averageInputTokens:.2f}"
|
|
353
|
+
report_data["Average Output Tokens per Request"] = f"{avg_tokens.averageOutputTokens:.2f}"
|
|
354
|
+
report_data["Average Total Tokens per Request"] = f"{avg_tokens.averageTotalTokens:.2f}"
|
|
355
|
+
except Exception as e:
|
|
356
|
+
Console.write_stdout(f"Error retrieving average tokens: {e}")
|
|
357
|
+
|
|
358
|
+
Console.write_stdout("\nUSER & AGENT METRICS")
|
|
359
|
+
Console.write_stdout("-" * 80)
|
|
360
|
+
|
|
361
|
+
try:
|
|
362
|
+
active_users = manager.get_total_active_users(start_date, end_date)
|
|
363
|
+
Console.write_stdout(f"Total Active Users: {active_users.totalActiveUsers}")
|
|
364
|
+
report_data["Total Active Users"] = active_users.totalActiveUsers
|
|
365
|
+
except Exception as e:
|
|
366
|
+
Console.write_stdout(f"Error retrieving active users: {e}")
|
|
367
|
+
|
|
368
|
+
try:
|
|
369
|
+
active_agents = manager.get_total_active_agents(start_date, end_date)
|
|
370
|
+
Console.write_stdout(f"Total Active Agents: {active_agents.totalActiveAgents}")
|
|
371
|
+
report_data["Total Active Agents"] = active_agents.totalActiveAgents
|
|
372
|
+
except Exception as e:
|
|
373
|
+
Console.write_stdout(f"Error retrieving active agents: {e}")
|
|
374
|
+
|
|
375
|
+
try:
|
|
376
|
+
active_projects = manager.get_total_active_projects(start_date, end_date)
|
|
377
|
+
Console.write_stdout(f"Total Active Projects: {active_projects.totalActiveProjects}")
|
|
378
|
+
report_data["Total Active Projects"] = active_projects.totalActiveProjects
|
|
379
|
+
except Exception as e:
|
|
380
|
+
Console.write_stdout(f"Error retrieving active projects: {e}")
|
|
381
|
+
|
|
382
|
+
Console.write_stdout("\nTOP 10 AGENTS BY REQUESTS")
|
|
383
|
+
Console.write_stdout("-" * 80)
|
|
384
|
+
|
|
385
|
+
try:
|
|
386
|
+
top_agents_requests = manager.get_top_10_agents_by_requests(start_date, end_date)
|
|
387
|
+
for idx, agent in enumerate(top_agents_requests.topAgents, 1):
|
|
388
|
+
Console.write_stdout(f"{idx}. {agent.agentName}: {agent.totalRequests} requests")
|
|
389
|
+
except Exception as e:
|
|
390
|
+
Console.write_stdout(f"Error retrieving top agents by requests: {e}")
|
|
391
|
+
|
|
392
|
+
Console.write_stdout("\nTOP 10 AGENTS BY TOKENS")
|
|
393
|
+
Console.write_stdout("-" * 80)
|
|
394
|
+
|
|
395
|
+
try:
|
|
396
|
+
top_agents_tokens = manager.get_top_10_agents_by_tokens(start_date, end_date)
|
|
397
|
+
for idx, agent in enumerate(top_agents_tokens.topAgents, 1):
|
|
398
|
+
Console.write_stdout(f"{idx}. {agent.agentName}: {agent.totalTokens} tokens")
|
|
399
|
+
except Exception as e:
|
|
400
|
+
Console.write_stdout(f"Error retrieving top agents by tokens: {e}")
|
|
401
|
+
|
|
402
|
+
Console.write_stdout("\nTOP 10 USERS BY REQUESTS")
|
|
403
|
+
Console.write_stdout("-" * 80)
|
|
404
|
+
|
|
405
|
+
try:
|
|
406
|
+
top_users_requests = manager.get_top_10_users_by_requests(start_date, end_date)
|
|
407
|
+
for idx, user in enumerate(top_users_requests.topUsers, 1):
|
|
408
|
+
Console.write_stdout(f"{idx}. {user.userEmail}: {user.totalRequests} requests")
|
|
409
|
+
except Exception as e:
|
|
410
|
+
Console.write_stdout(f"Error retrieving top users by requests: {e}")
|
|
411
|
+
|
|
412
|
+
Console.write_stdout("\nTOP 10 USERS BY COST")
|
|
413
|
+
Console.write_stdout("-" * 80)
|
|
414
|
+
|
|
415
|
+
try:
|
|
416
|
+
top_users_cost = manager.get_top_10_users_by_cost(start_date, end_date)
|
|
417
|
+
for idx, user in enumerate(top_users_cost.topUsers, 1):
|
|
418
|
+
Console.write_stdout(f"{idx}. {user.userEmail}: ${user.totalCost:.2f}")
|
|
419
|
+
except Exception as e:
|
|
420
|
+
Console.write_stdout(f"Error retrieving top users by cost: {e}")
|
|
421
|
+
|
|
422
|
+
Console.write_stdout(f"\n{'='*80}\n")
|
|
423
|
+
|
|
424
|
+
if csv_file:
|
|
425
|
+
try:
|
|
426
|
+
with open(csv_file, 'w', newline='') as f:
|
|
427
|
+
writer = csv.writer(f)
|
|
428
|
+
writer.writerow(['Metric', 'Value'])
|
|
429
|
+
writer.writerow(['Report Period', f"{start_date} to {end_date}"])
|
|
430
|
+
writer.writerow(['Generated At', datetime.now().strftime('%Y-%m-%d %H:%M:%S')])
|
|
431
|
+
writer.writerow([])
|
|
432
|
+
for key, value in report_data.items():
|
|
433
|
+
writer.writerow([key, value])
|
|
434
|
+
Console.write_stdout(f"Report exported to: {csv_file}")
|
|
435
|
+
except Exception as e:
|
|
436
|
+
Console.write_stdout(f"Error exporting to CSV: {e}")
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
full_report_options = [START_DATE_OPTION, END_DATE_OPTION, CSV_EXPORT_OPTION]
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
analytics_commands = [
|
|
443
|
+
Command(
|
|
444
|
+
"help",
|
|
445
|
+
["help", "h"],
|
|
446
|
+
"Display analytics help text",
|
|
447
|
+
show_help,
|
|
448
|
+
ArgumentsEnum.NOT_AVAILABLE,
|
|
449
|
+
[],
|
|
450
|
+
[]
|
|
451
|
+
),
|
|
452
|
+
Command(
|
|
453
|
+
"agents_created",
|
|
454
|
+
["agents-created", "ac"],
|
|
455
|
+
"Get total agents created and modified",
|
|
456
|
+
get_agents_created_and_modified,
|
|
457
|
+
ArgumentsEnum.OPTIONAL,
|
|
458
|
+
[],
|
|
459
|
+
agents_created_options
|
|
460
|
+
),
|
|
461
|
+
Command(
|
|
462
|
+
"requests_per_day",
|
|
463
|
+
["requests-per-day", "rpd"],
|
|
464
|
+
"Get total requests per day",
|
|
465
|
+
get_total_requests_per_day,
|
|
466
|
+
ArgumentsEnum.OPTIONAL,
|
|
467
|
+
[],
|
|
468
|
+
total_requests_per_day_options
|
|
469
|
+
),
|
|
470
|
+
Command(
|
|
471
|
+
"total_cost",
|
|
472
|
+
["total-cost", "tc"],
|
|
473
|
+
"Get total cost for the period",
|
|
474
|
+
get_total_cost,
|
|
475
|
+
ArgumentsEnum.OPTIONAL,
|
|
476
|
+
[],
|
|
477
|
+
total_cost_options
|
|
478
|
+
),
|
|
479
|
+
Command(
|
|
480
|
+
"average_cost",
|
|
481
|
+
["average-cost", "ac"],
|
|
482
|
+
"Get average cost per request",
|
|
483
|
+
get_average_cost_per_request,
|
|
484
|
+
ArgumentsEnum.OPTIONAL,
|
|
485
|
+
[],
|
|
486
|
+
average_cost_per_request_options
|
|
487
|
+
),
|
|
488
|
+
Command(
|
|
489
|
+
"total_tokens",
|
|
490
|
+
["total-tokens", "tt"],
|
|
491
|
+
"Get total tokens consumed",
|
|
492
|
+
get_total_tokens,
|
|
493
|
+
ArgumentsEnum.OPTIONAL,
|
|
494
|
+
[],
|
|
495
|
+
total_tokens_options
|
|
496
|
+
),
|
|
497
|
+
Command(
|
|
498
|
+
"error_rate",
|
|
499
|
+
["error-rate", "er"],
|
|
500
|
+
"Get overall error rate",
|
|
501
|
+
get_overall_error_rate,
|
|
502
|
+
ArgumentsEnum.OPTIONAL,
|
|
503
|
+
[],
|
|
504
|
+
error_rate_options
|
|
505
|
+
),
|
|
506
|
+
Command(
|
|
507
|
+
"top_agents",
|
|
508
|
+
["top-agents", "ta"],
|
|
509
|
+
"Get top 10 agents by requests",
|
|
510
|
+
get_top_agents_by_requests,
|
|
511
|
+
ArgumentsEnum.OPTIONAL,
|
|
512
|
+
[],
|
|
513
|
+
top_agents_options
|
|
514
|
+
),
|
|
515
|
+
Command(
|
|
516
|
+
"active_users",
|
|
517
|
+
["active-users", "au"],
|
|
518
|
+
"Get total active users",
|
|
519
|
+
get_total_active_users,
|
|
520
|
+
ArgumentsEnum.OPTIONAL,
|
|
521
|
+
[],
|
|
522
|
+
active_users_options
|
|
523
|
+
),
|
|
524
|
+
Command(
|
|
525
|
+
"full_report",
|
|
526
|
+
["full-report", "fr"],
|
|
527
|
+
"Get comprehensive analytics report",
|
|
528
|
+
get_full_report,
|
|
529
|
+
ArgumentsEnum.OPTIONAL,
|
|
530
|
+
[],
|
|
531
|
+
full_report_options
|
|
532
|
+
),
|
|
533
|
+
]
|
pygeai/cli/commands/assistant.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import sys
|
|
3
2
|
|
|
4
3
|
from pygeai.assistant.clients import AssistantClient
|
|
5
4
|
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
@@ -8,6 +7,7 @@ from pygeai.cli.commands.common import get_llm_settings, get_welcome_data, get_m
|
|
|
8
7
|
get_welcome_data_example_prompt
|
|
9
8
|
from pygeai.cli.texts.help import ASSISTANT_HELP_TEXT
|
|
10
9
|
from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
|
|
10
|
+
from pygeai.core.utils.console import Console
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def show_help():
|
|
@@ -15,7 +15,7 @@ def show_help():
|
|
|
15
15
|
Displays help text in stdout
|
|
16
16
|
"""
|
|
17
17
|
help_text = build_help_text(assistant_commands, ASSISTANT_HELP_TEXT)
|
|
18
|
-
|
|
18
|
+
Console.write_stdout(help_text)
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def get_assistant_detail(option_list: list):
|
|
@@ -32,7 +32,7 @@ def get_assistant_detail(option_list: list):
|
|
|
32
32
|
|
|
33
33
|
client = AssistantClient()
|
|
34
34
|
result = client.get_assistant_data(assistant_id, detail)
|
|
35
|
-
|
|
35
|
+
Console.write_stdout(f"Assistant detail: \n{result}")
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
assistant_detail_options = [
|
|
@@ -121,7 +121,7 @@ def create_assistant(option_list: list):
|
|
|
121
121
|
llm_settings=llm_settings,
|
|
122
122
|
welcome_data=welcome_data
|
|
123
123
|
)
|
|
124
|
-
|
|
124
|
+
Console.write_stdout(f"New assistant detail: \n{result}")
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
create_assistant_options = [
|
|
@@ -287,7 +287,7 @@ def update_assistant(option_list: list):
|
|
|
287
287
|
llm_settings=llm_settings,
|
|
288
288
|
welcome_data=welcome_data
|
|
289
289
|
)
|
|
290
|
-
|
|
290
|
+
Console.write_stdout(f"Updated assistant detail: \n{result}")
|
|
291
291
|
|
|
292
292
|
|
|
293
293
|
update_assistant_options = [
|
|
@@ -401,7 +401,7 @@ def delete_assistant(option_list: list):
|
|
|
401
401
|
result = client.delete_assistant(
|
|
402
402
|
assistant_id=assistant_id,
|
|
403
403
|
)
|
|
404
|
-
|
|
404
|
+
Console.write_stdout(f"Deleted assistant: \n{result}")
|
|
405
405
|
|
|
406
406
|
|
|
407
407
|
delete_assistant_options = [
|
|
@@ -454,7 +454,7 @@ def send_chat_request(option_list: list):
|
|
|
454
454
|
revision=revision,
|
|
455
455
|
revision_name=revision_name
|
|
456
456
|
)
|
|
457
|
-
|
|
457
|
+
Console.write_stdout(f"Chat request response: \n{result}")
|
|
458
458
|
|
|
459
459
|
|
|
460
460
|
send_chat_request_options = [
|
|
@@ -503,7 +503,7 @@ def get_request_status(option_list: list):
|
|
|
503
503
|
|
|
504
504
|
client = AssistantClient()
|
|
505
505
|
result = client.get_request_status(request_id)
|
|
506
|
-
|
|
506
|
+
Console.write_stdout(f"Request status: \n{result}")
|
|
507
507
|
|
|
508
508
|
|
|
509
509
|
request_status_options = [
|
|
@@ -527,7 +527,7 @@ def cancel_request(option_list: list):
|
|
|
527
527
|
|
|
528
528
|
client = AssistantClient()
|
|
529
529
|
result = client.cancel_request(request_id)
|
|
530
|
-
|
|
530
|
+
Console.write_stdout(f"Cancel request detail: \n{result}")
|
|
531
531
|
|
|
532
532
|
|
|
533
533
|
cancel_request_options = [
|