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/commands/rag.py
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import sys
|
|
3
|
-
from json import JSONDecodeError
|
|
4
2
|
from pathlib import Path
|
|
5
3
|
|
|
6
4
|
from pygeai.assistant.rag.clients import RAGAssistantClient
|
|
7
5
|
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
8
6
|
from pygeai.cli.commands.builders import build_help_text
|
|
9
|
-
from pygeai.cli.commands.common import
|
|
7
|
+
from pygeai.cli.commands.common import get_welcome_data, get_search_options, get_boolean_value, \
|
|
10
8
|
get_welcome_data_feature_list, get_welcome_data_example_prompt, get_index_options
|
|
11
9
|
from pygeai.cli.texts.help import RAG_ASSISTANT_HELP_TEXT
|
|
12
10
|
from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
|
|
11
|
+
from pygeai.core.utils.console import Console
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
def show_help():
|
|
@@ -17,13 +16,13 @@ def show_help():
|
|
|
17
16
|
Displays help text in stdout
|
|
18
17
|
"""
|
|
19
18
|
help_text = build_help_text(rag_commands, RAG_ASSISTANT_HELP_TEXT)
|
|
20
|
-
|
|
19
|
+
Console.write_stdout(help_text)
|
|
21
20
|
|
|
22
21
|
|
|
23
22
|
def get_assistants_from_project():
|
|
24
23
|
client = RAGAssistantClient()
|
|
25
24
|
result = client.get_assistants_from_project()
|
|
26
|
-
|
|
25
|
+
Console.write_stdout(f"RAG Assistants in project: \n{result}")
|
|
27
26
|
|
|
28
27
|
|
|
29
28
|
def get_assistant_detail(option_list: list):
|
|
@@ -37,7 +36,7 @@ def get_assistant_detail(option_list: list):
|
|
|
37
36
|
|
|
38
37
|
client = RAGAssistantClient()
|
|
39
38
|
result = client.get_assistant_data(name)
|
|
40
|
-
|
|
39
|
+
Console.write_stdout(f"Assistant detail: \n{result}")
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
assistant_detail_options = [
|
|
@@ -266,7 +265,7 @@ def create_assistant(option_list: list):
|
|
|
266
265
|
index_options=index_options,
|
|
267
266
|
welcome_data=welcome_data
|
|
268
267
|
)
|
|
269
|
-
|
|
268
|
+
Console.write_stdout(f"New RAG Assistant: \n{result}")
|
|
270
269
|
|
|
271
270
|
|
|
272
271
|
create_assistant_options = [
|
|
@@ -687,7 +686,7 @@ def update_assistant(option_list: list):
|
|
|
687
686
|
search_options=search_options,
|
|
688
687
|
welcome_data=welcome_data
|
|
689
688
|
)
|
|
690
|
-
|
|
689
|
+
Console.write_stdout(f"Updated RAG Assistant: \n{result}")
|
|
691
690
|
|
|
692
691
|
|
|
693
692
|
update_assistant_options = [
|
|
@@ -907,7 +906,7 @@ def delete_assistant(option_list: list):
|
|
|
907
906
|
|
|
908
907
|
client = RAGAssistantClient()
|
|
909
908
|
result = client.delete_assistant(name)
|
|
910
|
-
|
|
909
|
+
Console.write_stdout(f"Deleted assistant: \n{result}")
|
|
911
910
|
|
|
912
911
|
|
|
913
912
|
delete_assistant_options = [
|
|
@@ -941,7 +940,7 @@ def list_documents(option_list: list):
|
|
|
941
940
|
skip=skip,
|
|
942
941
|
count=count
|
|
943
942
|
)
|
|
944
|
-
|
|
943
|
+
Console.write_stdout(f"Assistant's documents: \n{result}")
|
|
945
944
|
|
|
946
945
|
|
|
947
946
|
list_documents_options = [
|
|
@@ -979,7 +978,7 @@ def delete_all_documents(option_list: list):
|
|
|
979
978
|
result = client.delete_all_documents(
|
|
980
979
|
name=name,
|
|
981
980
|
)
|
|
982
|
-
|
|
981
|
+
Console.write_stdout(f"Deleted documents: \n{result}")
|
|
983
982
|
|
|
984
983
|
|
|
985
984
|
delete_all_documents_options = [
|
|
@@ -1009,7 +1008,7 @@ def get_document_data(option_list: list):
|
|
|
1009
1008
|
name=name,
|
|
1010
1009
|
document_id=document_id
|
|
1011
1010
|
)
|
|
1012
|
-
|
|
1011
|
+
Console.write_stdout(f"Document detail: \n{result}")
|
|
1013
1012
|
|
|
1014
1013
|
|
|
1015
1014
|
get_document_data_options = [
|
|
@@ -1064,7 +1063,7 @@ def upload_document(option_list: list):
|
|
|
1064
1063
|
metadata=metadata,
|
|
1065
1064
|
content_type=content_type
|
|
1066
1065
|
)
|
|
1067
|
-
|
|
1066
|
+
Console.write_stdout(f"Uploaded: \n{result}")
|
|
1068
1067
|
|
|
1069
1068
|
|
|
1070
1069
|
upload_document_options = [
|
|
@@ -1119,7 +1118,7 @@ def delete_document(option_list: list):
|
|
|
1119
1118
|
name=name,
|
|
1120
1119
|
document_id=document_id
|
|
1121
1120
|
)
|
|
1122
|
-
|
|
1121
|
+
Console.write_stdout(f"Deleted document: \n{result}")
|
|
1123
1122
|
|
|
1124
1123
|
|
|
1125
1124
|
delete_document_options = [
|
pygeai/cli/commands/rerank.py
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import sys
|
|
3
|
-
|
|
4
2
|
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
5
3
|
from pygeai.cli.commands.builders import build_help_text
|
|
6
|
-
from pygeai.cli.commands.common import get_messages, get_boolean_value, get_penalty_float_value
|
|
7
4
|
from pygeai.cli.texts.help import RERANK_HELP_TEXT
|
|
8
5
|
from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
|
|
9
6
|
from pygeai.core.rerank.clients import RerankClient
|
|
7
|
+
from pygeai.core.utils.console import Console
|
|
10
8
|
|
|
11
9
|
|
|
12
10
|
def show_help():
|
|
@@ -14,7 +12,7 @@ def show_help():
|
|
|
14
12
|
Displays help text in stdout
|
|
15
13
|
"""
|
|
16
14
|
help_text = build_help_text(rerank_commands, RERANK_HELP_TEXT)
|
|
17
|
-
|
|
15
|
+
Console.write_stdout(help_text)
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
def rerank_chunks(option_list: list):
|
|
@@ -55,7 +53,7 @@ def rerank_chunks(option_list: list):
|
|
|
55
53
|
documents=documents,
|
|
56
54
|
top_n=top_n
|
|
57
55
|
)
|
|
58
|
-
|
|
56
|
+
Console.write_stdout(f"Rerank details: \n{result}")
|
|
59
57
|
|
|
60
58
|
|
|
61
59
|
rerank_chunks_options = [
|
pygeai/cli/commands/secrets.py
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import json
|
|
2
|
-
import sys
|
|
3
2
|
|
|
4
3
|
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
5
4
|
from pygeai.cli.commands.builders import build_help_text
|
|
6
|
-
from pygeai.cli.commands.common import get_messages, get_boolean_value, get_penalty_float_value
|
|
7
5
|
from pygeai.cli.texts.help import SECRETS_HELP_TEXT
|
|
8
6
|
from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
|
|
9
7
|
from pygeai.core.secrets.clients import SecretClient
|
|
8
|
+
from pygeai.core.utils.console import Console
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
def show_help():
|
|
@@ -14,7 +13,7 @@ def show_help():
|
|
|
14
13
|
Displays help text in stdout
|
|
15
14
|
"""
|
|
16
15
|
help_text = build_help_text(secrets_commands, SECRETS_HELP_TEXT)
|
|
17
|
-
|
|
16
|
+
Console.write_stdout(help_text)
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
def get_secret(option_list: list):
|
|
@@ -32,7 +31,7 @@ def get_secret(option_list: list):
|
|
|
32
31
|
|
|
33
32
|
client = SecretClient()
|
|
34
33
|
result = client.get_secret(secret_id=secret_id)
|
|
35
|
-
|
|
34
|
+
Console.write_stdout(f"Get secret result: \n{result}")
|
|
36
35
|
|
|
37
36
|
|
|
38
37
|
get_secret_options = [
|
|
@@ -70,7 +69,7 @@ def create_secret(option_list: list):
|
|
|
70
69
|
secret_string=secret_string,
|
|
71
70
|
description=description
|
|
72
71
|
)
|
|
73
|
-
|
|
72
|
+
Console.write_stdout(f"Create secret result: \n{result}")
|
|
74
73
|
|
|
75
74
|
|
|
76
75
|
create_secret_options = [
|
|
@@ -124,7 +123,7 @@ def update_secret(option_list: list):
|
|
|
124
123
|
secret_string=secret_string,
|
|
125
124
|
description=description
|
|
126
125
|
)
|
|
127
|
-
|
|
126
|
+
Console.write_stdout(f"Update secret result: \n{result}")
|
|
128
127
|
|
|
129
128
|
|
|
130
129
|
update_secret_options = [
|
|
@@ -187,7 +186,7 @@ def list_secrets(option_list: list):
|
|
|
187
186
|
start=start,
|
|
188
187
|
count=count
|
|
189
188
|
)
|
|
190
|
-
|
|
189
|
+
Console.write_stdout(f"List secrets result: \n{result}")
|
|
191
190
|
|
|
192
191
|
|
|
193
192
|
list_secrets_options = [
|
|
@@ -244,7 +243,7 @@ def set_secret_accesses(option_list: list):
|
|
|
244
243
|
secret_id=secret_id,
|
|
245
244
|
access_list=access_list
|
|
246
245
|
)
|
|
247
|
-
|
|
246
|
+
Console.write_stdout(f"Set secret accesses result: \n{result}")
|
|
248
247
|
|
|
249
248
|
|
|
250
249
|
set_secret_accesses_options = [
|
|
@@ -278,7 +277,7 @@ def get_secret_accesses(option_list: list):
|
|
|
278
277
|
|
|
279
278
|
client = SecretClient()
|
|
280
279
|
result = client.get_secret_accesses(secret_id=secret_id)
|
|
281
|
-
|
|
280
|
+
Console.write_stdout(f"Get secret accesses result: \n{result}")
|
|
282
281
|
|
|
283
282
|
|
|
284
283
|
get_secret_accesses_options = [
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
1
|
+
from pygeai.cli.commands import Command, ArgumentsEnum
|
|
4
2
|
from pygeai.cli.commands.builders import build_help_text
|
|
5
3
|
from pygeai.cli.commands.options import ORGANIZATION_OPTION, SUBSCRIPTION_TYPE_OPTION, USAGE_LIMIT_USAGE_UNIT_OPTION, \
|
|
6
4
|
USAGE_LIMIT_SOFT_LIMIT_OPTION, USAGE_LIMIT_HARD_LIMIT_OPTION, USAGE_LIMIT_RENEWAL_STATUS_OPTION, \
|
|
7
5
|
USAGE_LIMIT_ID_OPTION, PROJECT_OPTION
|
|
8
6
|
from pygeai.cli.texts.help import USAGE_LIMIT_HELP_TEXT
|
|
9
7
|
from pygeai.core.common.exceptions import MissingRequirementException
|
|
10
|
-
from pygeai.
|
|
8
|
+
from pygeai.core.utils.console import Console
|
|
11
9
|
from pygeai.organization.limits.clients import UsageLimitClient
|
|
12
10
|
|
|
13
11
|
|
|
@@ -16,7 +14,7 @@ def show_help():
|
|
|
16
14
|
Displays help text in stdout
|
|
17
15
|
"""
|
|
18
16
|
help_text = build_help_text(usage_limit_commands, USAGE_LIMIT_HELP_TEXT)
|
|
19
|
-
|
|
17
|
+
Console.write_stdout(help_text)
|
|
20
18
|
|
|
21
19
|
|
|
22
20
|
def set_organization_usage_limit(option_list: list):
|
|
@@ -59,7 +57,7 @@ def set_organization_usage_limit(option_list: list):
|
|
|
59
57
|
organization=organization,
|
|
60
58
|
usage_limit=usage_limit
|
|
61
59
|
)
|
|
62
|
-
|
|
60
|
+
Console.write_stdout(f"Organization usage limit: \n{result}")
|
|
63
61
|
|
|
64
62
|
|
|
65
63
|
set_organization_usage_limit_options = [
|
|
@@ -86,7 +84,7 @@ def get_organization_latest_usage_limit(option_list: list):
|
|
|
86
84
|
result = client.get_organization_latest_usage_limit(
|
|
87
85
|
organization=organization,
|
|
88
86
|
)
|
|
89
|
-
|
|
87
|
+
Console.write_stdout(f"Organization usage limit: \n{result}")
|
|
90
88
|
|
|
91
89
|
|
|
92
90
|
get_organization_latest_usage_limit_options = [
|
|
@@ -108,7 +106,7 @@ def get_all_usage_limits_from_organization(option_list: list):
|
|
|
108
106
|
result = client.get_all_usage_limits_from_organization(
|
|
109
107
|
organization=organization,
|
|
110
108
|
)
|
|
111
|
-
|
|
109
|
+
Console.write_stdout(f"Organization usage limits: \n{result}")
|
|
112
110
|
|
|
113
111
|
|
|
114
112
|
get_all_usage_limits_from_organization_options = [
|
|
@@ -134,7 +132,7 @@ def delete_usage_limit_from_organization(option_list: list):
|
|
|
134
132
|
organization=organization,
|
|
135
133
|
limit_id=limit_id
|
|
136
134
|
)
|
|
137
|
-
|
|
135
|
+
Console.write_stdout(f"Deleted usage limit: \n{result}")
|
|
138
136
|
|
|
139
137
|
|
|
140
138
|
delete_usage_limit_from_organization_options = [
|
|
@@ -195,7 +193,7 @@ def set_organization_hard_limit(organization, limit_id, hard_limit):
|
|
|
195
193
|
limit_id=limit_id,
|
|
196
194
|
hard_limit=hard_limit
|
|
197
195
|
)
|
|
198
|
-
|
|
196
|
+
Console.write_stdout(f"Organization hard limit: \n{result}")
|
|
199
197
|
|
|
200
198
|
|
|
201
199
|
def set_organization_soft_limit(organization, limit_id, soft_limit):
|
|
@@ -205,7 +203,7 @@ def set_organization_soft_limit(organization, limit_id, soft_limit):
|
|
|
205
203
|
limit_id=limit_id,
|
|
206
204
|
soft_limit=soft_limit
|
|
207
205
|
)
|
|
208
|
-
|
|
206
|
+
Console.write_stdout(f"Organization soft limit: \n{result}")
|
|
209
207
|
|
|
210
208
|
|
|
211
209
|
def set_organization_renewal_status(organization, limit_id, renewal_status):
|
|
@@ -215,7 +213,7 @@ def set_organization_renewal_status(organization, limit_id, renewal_status):
|
|
|
215
213
|
limit_id=limit_id,
|
|
216
214
|
renewal_status=renewal_status
|
|
217
215
|
)
|
|
218
|
-
|
|
216
|
+
Console.write_stdout(f"Organization renewal status: \n{result}")
|
|
219
217
|
|
|
220
218
|
|
|
221
219
|
def set_project_usage_limit(option_list: list):
|
|
@@ -263,7 +261,7 @@ def set_project_usage_limit(option_list: list):
|
|
|
263
261
|
project=project,
|
|
264
262
|
usage_limit=usage_limit
|
|
265
263
|
)
|
|
266
|
-
|
|
264
|
+
Console.write_stdout(f"Project usage limit: \n{result}")
|
|
267
265
|
|
|
268
266
|
|
|
269
267
|
set_project_usage_limit_options = [
|
|
@@ -295,7 +293,7 @@ def get_all_usage_limits_from_project(option_list: list):
|
|
|
295
293
|
organization=organization,
|
|
296
294
|
project=project
|
|
297
295
|
)
|
|
298
|
-
|
|
296
|
+
Console.write_stdout(f"Project usage limits: \n{result}")
|
|
299
297
|
|
|
300
298
|
|
|
301
299
|
get_all_usage_limits_from_project_options = [
|
|
@@ -322,7 +320,7 @@ def get_latest_usage_limit_from_project(option_list: list):
|
|
|
322
320
|
organization=organization,
|
|
323
321
|
project=project
|
|
324
322
|
)
|
|
325
|
-
|
|
323
|
+
Console.write_stdout(f"Project's latest usage limit: \n{result}")
|
|
326
324
|
|
|
327
325
|
|
|
328
326
|
get_latest_usage_limit_from_project_options = [
|
|
@@ -349,7 +347,7 @@ def get_active_usage_limit_from_project(option_list: list):
|
|
|
349
347
|
organization=organization,
|
|
350
348
|
project=project
|
|
351
349
|
)
|
|
352
|
-
|
|
350
|
+
Console.write_stdout(f"Project's latest usage limit: \n{result}")
|
|
353
351
|
|
|
354
352
|
|
|
355
353
|
get_active_usage_limit_from_project_options = [
|
|
@@ -380,7 +378,7 @@ def delete_usage_limit_from_project(option_list: list):
|
|
|
380
378
|
project=project,
|
|
381
379
|
limit_id=limit_id
|
|
382
380
|
)
|
|
383
|
-
|
|
381
|
+
Console.write_stdout(f"Deleted usage limit: \n{result}")
|
|
384
382
|
|
|
385
383
|
|
|
386
384
|
delete_usage_limit_from_project_options = [
|
|
@@ -447,7 +445,7 @@ def set_project_hard_limit(organization, project, limit_id, hard_limit):
|
|
|
447
445
|
limit_id=limit_id,
|
|
448
446
|
hard_limit=hard_limit
|
|
449
447
|
)
|
|
450
|
-
|
|
448
|
+
Console.write_stdout(f"Project hard limit: \n{result}")
|
|
451
449
|
|
|
452
450
|
|
|
453
451
|
def set_project_soft_limit(organization, project, limit_id, soft_limit):
|
|
@@ -458,7 +456,7 @@ def set_project_soft_limit(organization, project, limit_id, soft_limit):
|
|
|
458
456
|
limit_id=limit_id,
|
|
459
457
|
soft_limit=soft_limit
|
|
460
458
|
)
|
|
461
|
-
|
|
459
|
+
Console.write_stdout(f"Project soft limit: \n{result}")
|
|
462
460
|
|
|
463
461
|
|
|
464
462
|
def set_project_renewal_status(organization, project, limit_id, renewal_status):
|
|
@@ -469,7 +467,7 @@ def set_project_renewal_status(organization, project, limit_id, renewal_status):
|
|
|
469
467
|
limit_id=limit_id,
|
|
470
468
|
renewal_status=renewal_status
|
|
471
469
|
)
|
|
472
|
-
|
|
470
|
+
Console.write_stdout(f"Project renewal status: \n{result}")
|
|
473
471
|
|
|
474
472
|
|
|
475
473
|
usage_limit_commands = [
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
|
+
from typing import Any, Dict, List, Optional, Union
|
|
3
|
+
import json
|
|
2
4
|
|
|
3
|
-
from pygeai.core.common.exceptions import WrongArgumentError
|
|
5
|
+
from pygeai.core.common.exceptions import WrongArgumentError, ValidationError
|
|
4
6
|
|
|
5
7
|
|
|
6
8
|
def validate_dataset_file(dataset_file: str):
|
|
@@ -64,3 +66,144 @@ def validate_system_metric(metric: dict):
|
|
|
64
66
|
|
|
65
67
|
if not isinstance(metric["systemMetricWeight"], (int, float)) or not (0 <= metric["systemMetricWeight"] <= 1):
|
|
66
68
|
raise WrongArgumentError('"systemMetricWeight" must be a number between 0 and 1 (inclusive).')
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def validate_json_input(
|
|
72
|
+
value: str,
|
|
73
|
+
expected_type: type,
|
|
74
|
+
field_name: str,
|
|
75
|
+
example: Optional[str] = None
|
|
76
|
+
) -> Union[Dict, List]:
|
|
77
|
+
"""
|
|
78
|
+
Validates and parses JSON input with detailed error messages.
|
|
79
|
+
|
|
80
|
+
:param value: str - The JSON string to parse.
|
|
81
|
+
:param expected_type: type - Expected type (dict or list).
|
|
82
|
+
:param field_name: str - Name of the field being validated.
|
|
83
|
+
:param example: Optional[str] - Example of valid input.
|
|
84
|
+
:return: Union[Dict, List] - Parsed JSON object.
|
|
85
|
+
:raises ValidationError: If JSON is invalid or doesn't match expected type.
|
|
86
|
+
"""
|
|
87
|
+
try:
|
|
88
|
+
parsed = json.loads(value)
|
|
89
|
+
except json.JSONDecodeError as e:
|
|
90
|
+
raise ValidationError(
|
|
91
|
+
f"Invalid JSON for '{field_name}'",
|
|
92
|
+
field=field_name,
|
|
93
|
+
expected="Valid JSON string",
|
|
94
|
+
received=value[:100] + "..." if len(value) > 100 else value,
|
|
95
|
+
example=example or '{"key": "value"}'
|
|
96
|
+
) from e
|
|
97
|
+
|
|
98
|
+
if not isinstance(parsed, expected_type):
|
|
99
|
+
raise ValidationError(
|
|
100
|
+
f"Wrong type for '{field_name}'",
|
|
101
|
+
field=field_name,
|
|
102
|
+
expected=expected_type.__name__,
|
|
103
|
+
received=type(parsed).__name__,
|
|
104
|
+
example=example
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
return parsed
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def validate_numeric_range(
|
|
111
|
+
value: str,
|
|
112
|
+
field_name: str,
|
|
113
|
+
min_value: Optional[float] = None,
|
|
114
|
+
max_value: Optional[float] = None,
|
|
115
|
+
value_type: type = float
|
|
116
|
+
) -> Union[int, float]:
|
|
117
|
+
"""
|
|
118
|
+
Validates numeric input within a specified range.
|
|
119
|
+
|
|
120
|
+
:param value: str - The numeric string to validate.
|
|
121
|
+
:param field_name: str - Name of the field being validated.
|
|
122
|
+
:param min_value: Optional[float] - Minimum allowed value.
|
|
123
|
+
:param max_value: Optional[float] - Maximum allowed value.
|
|
124
|
+
:param value_type: type - Expected numeric type (int or float).
|
|
125
|
+
:return: Union[int, float] - Validated numeric value.
|
|
126
|
+
:raises ValidationError: If value is not numeric or out of range.
|
|
127
|
+
"""
|
|
128
|
+
try:
|
|
129
|
+
numeric_value = value_type(value)
|
|
130
|
+
except ValueError as e:
|
|
131
|
+
raise ValidationError(
|
|
132
|
+
f"Invalid {value_type.__name__} for '{field_name}'",
|
|
133
|
+
field=field_name,
|
|
134
|
+
expected=f"{value_type.__name__}",
|
|
135
|
+
received=value
|
|
136
|
+
) from e
|
|
137
|
+
|
|
138
|
+
if min_value is not None and numeric_value < min_value:
|
|
139
|
+
raise ValidationError(
|
|
140
|
+
f"Value too low for '{field_name}'",
|
|
141
|
+
field=field_name,
|
|
142
|
+
expected=f">= {min_value}",
|
|
143
|
+
received=str(numeric_value)
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
if max_value is not None and numeric_value > max_value:
|
|
147
|
+
raise ValidationError(
|
|
148
|
+
f"Value too high for '{field_name}'",
|
|
149
|
+
field=field_name,
|
|
150
|
+
expected=f"<= {max_value}",
|
|
151
|
+
received=str(numeric_value)
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
return numeric_value
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def validate_choice(
|
|
158
|
+
value: str,
|
|
159
|
+
field_name: str,
|
|
160
|
+
choices: List[str],
|
|
161
|
+
case_sensitive: bool = True
|
|
162
|
+
) -> str:
|
|
163
|
+
"""
|
|
164
|
+
Validates that input is one of the allowed choices.
|
|
165
|
+
|
|
166
|
+
:param value: str - The value to validate.
|
|
167
|
+
:param field_name: str - Name of the field being validated.
|
|
168
|
+
:param choices: List[str] - List of allowed values.
|
|
169
|
+
:param case_sensitive: bool - Whether comparison is case-sensitive.
|
|
170
|
+
:return: str - Validated value.
|
|
171
|
+
:raises ValidationError: If value is not in choices.
|
|
172
|
+
"""
|
|
173
|
+
compare_value = value if case_sensitive else value.lower()
|
|
174
|
+
compare_choices = choices if case_sensitive else [c.lower() for c in choices]
|
|
175
|
+
|
|
176
|
+
if compare_value not in compare_choices:
|
|
177
|
+
raise ValidationError(
|
|
178
|
+
f"Invalid value for '{field_name}'",
|
|
179
|
+
field=field_name,
|
|
180
|
+
expected=f"One of: {', '.join(choices)}",
|
|
181
|
+
received=value
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
return value
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def validate_boolean_value(value: str, field_name: str = "boolean option") -> bool:
|
|
188
|
+
"""
|
|
189
|
+
Converts a string argument into a boolean value with flexible input formats.
|
|
190
|
+
|
|
191
|
+
:param value: str - A string representation of a boolean.
|
|
192
|
+
:param field_name: str - Name of the field being validated.
|
|
193
|
+
:return: bool - The boolean value corresponding to the input.
|
|
194
|
+
:raises ValidationError: If the input is not a valid boolean representation.
|
|
195
|
+
"""
|
|
196
|
+
normalized = value.lower().strip()
|
|
197
|
+
|
|
198
|
+
if normalized in ("0", "false", "no", "off"):
|
|
199
|
+
return False
|
|
200
|
+
elif normalized in ("1", "true", "yes", "on"):
|
|
201
|
+
return True
|
|
202
|
+
else:
|
|
203
|
+
raise ValidationError(
|
|
204
|
+
f"Invalid boolean value for '{field_name}'",
|
|
205
|
+
field=field_name,
|
|
206
|
+
expected="0/1, true/false, yes/no, on/off",
|
|
207
|
+
received=value,
|
|
208
|
+
example="1 or true"
|
|
209
|
+
)
|
pygeai/cli/commands/version.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
|
|
3
1
|
import requests
|
|
4
2
|
import json
|
|
5
3
|
from packaging.version import Version as LooseVersion
|
|
6
4
|
|
|
5
|
+
from pygeai.core.utils.console import Console
|
|
6
|
+
|
|
7
7
|
|
|
8
8
|
def get_latest_version(package_name):
|
|
9
9
|
url = f"https://pypi.org/pypi/{package_name}/json"
|
|
@@ -13,8 +13,7 @@ def get_latest_version(package_name):
|
|
|
13
13
|
data = json.loads(response.text)
|
|
14
14
|
return data['info']['version']
|
|
15
15
|
except requests.RequestException as e:
|
|
16
|
-
|
|
17
|
-
return None
|
|
16
|
+
Console.write_stderr(f"An error occurred while fetching the latest version: {e}")
|
|
18
17
|
|
|
19
18
|
|
|
20
19
|
def get_installed_version(package_name):
|
|
@@ -25,7 +24,7 @@ def get_installed_version(package_name):
|
|
|
25
24
|
except importlib.metadata.PackageNotFoundError:
|
|
26
25
|
return "Not installed"
|
|
27
26
|
except ModuleNotFoundError:
|
|
28
|
-
|
|
27
|
+
Console.write_stderr("This Python installation does not support importlib.metadata. Use Python 3.8+ or install importlib_metadata manually.")
|
|
29
28
|
return "Unknown"
|
|
30
29
|
|
|
31
30
|
|