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/core/common/config.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
|
-
from functools import lru_cache
|
|
4
3
|
from pathlib import Path
|
|
5
4
|
import configparser
|
|
6
5
|
|
|
6
|
+
from pygeai import logger
|
|
7
|
+
|
|
7
8
|
HOME_DIR = Path.home()
|
|
8
9
|
SETTINGS_DIR = HOME_DIR / ".geai"
|
|
9
10
|
SETTINGS_DIR.mkdir(parents=True, exist_ok=True)
|
|
@@ -19,9 +20,13 @@ class SettingsManager:
|
|
|
19
20
|
GEAI_SETTINGS_DIR = str(SETTINGS_DIR)
|
|
20
21
|
GEAI_CREDS_FILE = SETTINGS_DIR / "credentials"
|
|
21
22
|
|
|
22
|
-
def __init__(self):
|
|
23
|
+
def __init__(self, credentials_file: str = None):
|
|
23
24
|
self.config = configparser.ConfigParser()
|
|
24
|
-
|
|
25
|
+
|
|
26
|
+
if credentials_file:
|
|
27
|
+
self.GEAI_CREDS_FILE = Path(credentials_file)
|
|
28
|
+
logger.debug(f"Using custom credentials file: {self.GEAI_CREDS_FILE}")
|
|
29
|
+
|
|
25
30
|
if self.GEAI_CREDS_FILE.exists():
|
|
26
31
|
self.config.read(self.GEAI_CREDS_FILE)
|
|
27
32
|
else:
|
|
@@ -35,13 +40,18 @@ class SettingsManager:
|
|
|
35
40
|
def get_setting_value(self, setting_key: str, alias: str):
|
|
36
41
|
"""Reads a setting value for a specific alias from the credentials file."""
|
|
37
42
|
if alias not in self.config:
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
logger.warning(f"Alias '{alias}' not found in the credentials file.")
|
|
44
|
+
return
|
|
45
|
+
|
|
40
46
|
if setting_key not in self.config[alias]:
|
|
41
47
|
sys.stdout.write(f"'{setting_key}' not found in alias '{alias}' in the credentials file. Adding empty value.\n")
|
|
42
|
-
# SET ADDITIONAL
|
|
48
|
+
# SET ADDITIONAL VARS
|
|
43
49
|
if setting_key.lower() == "GEAI_API_EVAL_URL".lower():
|
|
44
50
|
self.set_eval_url("", alias)
|
|
51
|
+
if setting_key.lower() == "GEAI_OAUTH_ACCESS_TOKEN".lower():
|
|
52
|
+
self.set_access_token("", alias)
|
|
53
|
+
if setting_key.lower() == "GEAI_PROJECT_ID".lower():
|
|
54
|
+
self.set_project_id("", alias)
|
|
45
55
|
|
|
46
56
|
return self.config[alias].get(setting_key, "")
|
|
47
57
|
|
|
@@ -56,7 +66,7 @@ class SettingsManager:
|
|
|
56
66
|
self.config.write(file)
|
|
57
67
|
|
|
58
68
|
def get_api_key(self, alias: str = "default"):
|
|
59
|
-
api_key = os.environ.get("GEAI_API_KEY") if alias == "default" else None
|
|
69
|
+
api_key = os.environ.get("GEAI_API_KEY") if not alias or alias == "default" else None
|
|
60
70
|
if not api_key:
|
|
61
71
|
api_key = self.get_setting_value("GEAI_API_KEY", alias)
|
|
62
72
|
|
|
@@ -66,7 +76,7 @@ class SettingsManager:
|
|
|
66
76
|
self.set_setting_value("GEAI_API_KEY", api_key, alias)
|
|
67
77
|
|
|
68
78
|
def get_base_url(self, alias: str = "default"):
|
|
69
|
-
base_url = os.environ.get("GEAI_API_BASE_URL") if alias == "default" else None
|
|
79
|
+
base_url = os.environ.get("GEAI_API_BASE_URL") if not alias or alias == "default" else None
|
|
70
80
|
if not base_url:
|
|
71
81
|
base_url = self.get_setting_value("GEAI_API_BASE_URL", alias)
|
|
72
82
|
|
|
@@ -75,8 +85,28 @@ class SettingsManager:
|
|
|
75
85
|
def set_base_url(self, base_url, alias: str = "default"):
|
|
76
86
|
self.set_setting_value("GEAI_API_BASE_URL", base_url, alias)
|
|
77
87
|
|
|
88
|
+
def get_access_token(self, alias: str = "default"):
|
|
89
|
+
access_token = os.environ.get("GEAI_OAUTH_ACCESS_TOKEN") if not alias or alias == "default" else None
|
|
90
|
+
if not access_token:
|
|
91
|
+
access_token = self.get_setting_value("GEAI_OAUTH_ACCESS_TOKEN", alias)
|
|
92
|
+
|
|
93
|
+
return access_token
|
|
94
|
+
|
|
95
|
+
def set_access_token(self, access_token, alias: str = "default"):
|
|
96
|
+
self.set_setting_value("GEAI_OAUTH_ACCESS_TOKEN", access_token, alias)
|
|
97
|
+
|
|
98
|
+
def get_project_id(self, alias: str = "default"):
|
|
99
|
+
project_id = os.environ.get("GEAI_PROJECT_ID") if not alias or alias == "default" else None
|
|
100
|
+
if not project_id:
|
|
101
|
+
project_id = self.get_setting_value("GEAI_PROJECT_ID", alias)
|
|
102
|
+
|
|
103
|
+
return project_id
|
|
104
|
+
|
|
105
|
+
def set_project_id(self, project_id, alias: str = "default"):
|
|
106
|
+
self.set_setting_value("GEAI_PROJECT_ID", project_id, alias)
|
|
107
|
+
|
|
78
108
|
def get_eval_url(self, alias: str = "default"):
|
|
79
|
-
eval_url = os.environ.get("GEAI_API_EVAL_URL") if alias == "default" else None
|
|
109
|
+
eval_url = os.environ.get("GEAI_API_EVAL_URL") if not alias or alias == "default" else None
|
|
80
110
|
if not eval_url:
|
|
81
111
|
eval_url = self.get_setting_value("GEAI_API_EVAL_URL", alias)
|
|
82
112
|
|
|
@@ -85,17 +115,51 @@ class SettingsManager:
|
|
|
85
115
|
def set_eval_url(self, eval_url, alias: str = "default"):
|
|
86
116
|
self.set_setting_value("GEAI_API_EVAL_URL", eval_url, alias)
|
|
87
117
|
|
|
118
|
+
def list_aliases(self):
|
|
119
|
+
"""Returns a dict of all aliases and their base URLs."""
|
|
120
|
+
return {
|
|
121
|
+
section: self.config[section].get("GEAI_API_BASE_URL", "")
|
|
122
|
+
for section in self.config.sections()
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
def remove_alias(self, alias: str):
|
|
126
|
+
"""Removes a specific alias and its settings from the credentials file."""
|
|
127
|
+
if alias in self.config:
|
|
128
|
+
self.config.remove_section(alias)
|
|
129
|
+
with self.GEAI_CREDS_FILE.open("w") as file:
|
|
130
|
+
self.config.write(file)
|
|
131
|
+
logger.info(f"Alias '{alias}' removed from the credentials file.")
|
|
132
|
+
else:
|
|
133
|
+
logger.warning(f"Alias '{alias}' not found in the credentials file.")
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
_settings_instance = None
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def get_settings(credentials_file: str = None):
|
|
140
|
+
"""
|
|
141
|
+
Get or create the SettingsManager instance.
|
|
142
|
+
|
|
143
|
+
:param credentials_file: Optional path to a custom credentials file.
|
|
144
|
+
If provided on first call, uses that file.
|
|
145
|
+
Subsequent calls ignore this parameter.
|
|
146
|
+
:return: SettingsManager instance
|
|
147
|
+
"""
|
|
148
|
+
global _settings_instance
|
|
149
|
+
if _settings_instance is None:
|
|
150
|
+
_settings_instance = SettingsManager(credentials_file=credentials_file)
|
|
151
|
+
return _settings_instance
|
|
152
|
+
|
|
88
153
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
154
|
+
def reset_settings():
|
|
155
|
+
"""Reset the settings instance. Useful for testing."""
|
|
156
|
+
global _settings_instance
|
|
157
|
+
_settings_instance = None
|
|
92
158
|
|
|
93
159
|
|
|
94
160
|
if __name__ == "__main__":
|
|
95
161
|
settings = get_settings()
|
|
96
|
-
geai_api_key = settings.get_api_key()
|
|
97
162
|
geai_base_url = settings.get_base_url()
|
|
98
163
|
geai_eval_url = settings.get_eval_url()
|
|
99
|
-
print(f"api_key: {geai_api_key}")
|
|
100
164
|
print(f"base_url: {geai_base_url}")
|
|
101
165
|
print(f"eval_url: {geai_eval_url}")
|
pygeai/core/common/exceptions.py
CHANGED
|
@@ -6,29 +6,119 @@ class GEAIException(Exception):
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class UnknownArgumentError(GEAIException):
|
|
9
|
-
"""
|
|
10
|
-
|
|
9
|
+
"""Raised when an unknown or invalid command/option is provided"""
|
|
10
|
+
|
|
11
|
+
def __init__(self, message: str, arg: str = None, available_commands=None, available_options=None):
|
|
12
|
+
"""
|
|
13
|
+
Initialize an UnknownArgumentError with context.
|
|
14
|
+
|
|
15
|
+
:param message: str - The error message.
|
|
16
|
+
:param arg: str - The unknown argument that was provided.
|
|
17
|
+
:param available_commands: list - Available commands for suggestion.
|
|
18
|
+
:param available_options: list - Available options for suggestion.
|
|
19
|
+
"""
|
|
20
|
+
super().__init__(message)
|
|
21
|
+
self.arg = arg
|
|
22
|
+
self.available_commands = available_commands
|
|
23
|
+
self.available_options = available_options
|
|
11
24
|
|
|
12
25
|
|
|
13
26
|
class MissingRequirementException(GEAIException):
|
|
14
|
-
"""
|
|
27
|
+
"""Raised when a required parameter or argument is missing"""
|
|
15
28
|
pass
|
|
16
29
|
|
|
17
30
|
|
|
18
31
|
class WrongArgumentError(GEAIException):
|
|
19
|
-
"""
|
|
32
|
+
"""Raised when arguments are incorrectly formatted or invalid"""
|
|
20
33
|
pass
|
|
21
34
|
|
|
22
35
|
|
|
36
|
+
class ValidationError(WrongArgumentError):
|
|
37
|
+
"""
|
|
38
|
+
Raised when input validation fails with detailed context.
|
|
39
|
+
|
|
40
|
+
Extends WrongArgumentError to provide structured validation errors
|
|
41
|
+
with field-specific information and examples.
|
|
42
|
+
"""
|
|
43
|
+
def __init__(
|
|
44
|
+
self,
|
|
45
|
+
message: str,
|
|
46
|
+
field: str = None,
|
|
47
|
+
expected: str = None,
|
|
48
|
+
received: str = None,
|
|
49
|
+
example: str = None
|
|
50
|
+
):
|
|
51
|
+
"""
|
|
52
|
+
Initialize a ValidationError with detailed context.
|
|
53
|
+
|
|
54
|
+
:param message: str - The main error message.
|
|
55
|
+
:param field: str - Name of the field that failed validation.
|
|
56
|
+
:param expected: str - Description of what was expected.
|
|
57
|
+
:param received: str - Description of what was received.
|
|
58
|
+
:param example: str - Example of valid input.
|
|
59
|
+
"""
|
|
60
|
+
super().__init__(message)
|
|
61
|
+
self.field = field
|
|
62
|
+
self.expected = expected
|
|
63
|
+
self.received = received
|
|
64
|
+
self.example = example
|
|
65
|
+
|
|
66
|
+
def __str__(self) -> str:
|
|
67
|
+
"""
|
|
68
|
+
Format the error message with all available context.
|
|
69
|
+
|
|
70
|
+
:return: str - Formatted error message with field details.
|
|
71
|
+
"""
|
|
72
|
+
parts = [super().__str__()]
|
|
73
|
+
|
|
74
|
+
if self.field:
|
|
75
|
+
parts.append(f" Field: {self.field}")
|
|
76
|
+
if self.expected:
|
|
77
|
+
parts.append(f" Expected: {self.expected}")
|
|
78
|
+
if self.received:
|
|
79
|
+
parts.append(f" Received: {self.received}")
|
|
80
|
+
if self.example:
|
|
81
|
+
parts.append(f" Example: {self.example}")
|
|
82
|
+
|
|
83
|
+
return "\n".join(parts)
|
|
84
|
+
|
|
85
|
+
|
|
23
86
|
class ServerResponseError(GEAIException):
|
|
24
|
-
"""
|
|
87
|
+
"""Raised when the server returns an error response"""
|
|
25
88
|
pass
|
|
26
89
|
|
|
27
90
|
|
|
28
91
|
class APIError(GEAIException):
|
|
29
|
-
"""
|
|
92
|
+
"""Raised when an API request fails"""
|
|
93
|
+
pass
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class InvalidPathException(GEAIException):
|
|
97
|
+
"""Raised when a file or directory path is invalid or not found"""
|
|
98
|
+
pass
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class InvalidJSONException(GEAIException):
|
|
102
|
+
"""Raised when JSON data cannot be parsed or is malformed"""
|
|
30
103
|
pass
|
|
31
104
|
|
|
32
105
|
|
|
106
|
+
class InvalidAPIResponseException(GEAIException):
|
|
107
|
+
"""Raised when the API response format is unexpected or invalid"""
|
|
108
|
+
pass
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class InvalidResponseException(GEAIException):
|
|
112
|
+
"""Raised when a response cannot be retrieved or processed"""
|
|
113
|
+
pass
|
|
114
|
+
|
|
33
115
|
|
|
116
|
+
class InvalidAgentException(GEAIException):
|
|
117
|
+
"""Raised when an agent cannot be retrieved, validated, or is misconfigured"""
|
|
118
|
+
pass
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class APIResponseError(GEAIException):
|
|
122
|
+
"""Raised when there is an error in the API response"""
|
|
123
|
+
pass
|
|
34
124
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from pygeai.core.embeddings.clients import EmbeddingsClient
|
|
2
|
+
from pygeai.core.embeddings.managers import EmbeddingsManager
|
|
3
|
+
from pygeai.core.embeddings.models import EmbeddingConfiguration
|
|
4
|
+
from pygeai.core.embeddings.responses import (
|
|
5
|
+
EmbeddingResponse,
|
|
6
|
+
EmbeddingData,
|
|
7
|
+
UsageInfo,
|
|
8
|
+
TokenDetails
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
'EmbeddingsClient',
|
|
13
|
+
'EmbeddingsManager',
|
|
14
|
+
'EmbeddingConfiguration',
|
|
15
|
+
'EmbeddingResponse',
|
|
16
|
+
'EmbeddingData',
|
|
17
|
+
'UsageInfo',
|
|
18
|
+
'TokenDetails'
|
|
19
|
+
]
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from typing import Any, Union
|
|
3
1
|
|
|
2
|
+
from pygeai import logger
|
|
4
3
|
from pygeai.core.base.clients import BaseClient
|
|
4
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException, APIResponseError
|
|
5
5
|
from pygeai.core.embeddings.endpoints import GENERATE_EMBEDDINGS
|
|
6
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
7
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
class EmbeddingsClient(BaseClient):
|
|
@@ -41,7 +43,21 @@ class EmbeddingsClient(BaseClient):
|
|
|
41
43
|
|
|
42
44
|
:return: dict - A dictionary containing the embedding results, including the model used, the generated
|
|
43
45
|
embedding vectors, and usage statistics.
|
|
46
|
+
:raises ValueError: If validation fails for input parameters.
|
|
44
47
|
"""
|
|
48
|
+
if not input_list or len(input_list) == 0:
|
|
49
|
+
raise ValueError("input_list cannot be empty")
|
|
50
|
+
|
|
51
|
+
for idx, inp in enumerate(input_list):
|
|
52
|
+
if not inp or (isinstance(inp, str) and inp.strip() == ""):
|
|
53
|
+
raise ValueError(f"Input at index {idx} cannot be empty")
|
|
54
|
+
|
|
55
|
+
if encoding_format is not None and encoding_format not in ['float', 'base64']:
|
|
56
|
+
raise ValueError("encoding_format must be either 'float' or 'base64'")
|
|
57
|
+
|
|
58
|
+
if dimensions is not None and dimensions <= 0:
|
|
59
|
+
raise ValueError("dimensions must be a positive integer")
|
|
60
|
+
|
|
45
61
|
data = {
|
|
46
62
|
'model': model,
|
|
47
63
|
'input': input_list,
|
|
@@ -61,6 +77,8 @@ class EmbeddingsClient(BaseClient):
|
|
|
61
77
|
if timeout is not None:
|
|
62
78
|
data["timeout"] = timeout
|
|
63
79
|
|
|
80
|
+
logger.debug(f"Generating embeddings with data: {data}")
|
|
81
|
+
|
|
64
82
|
headers = {}
|
|
65
83
|
if cache:
|
|
66
84
|
headers['X-Saia-Cache-Enabled'] = "true"
|
|
@@ -70,6 +88,6 @@ class EmbeddingsClient(BaseClient):
|
|
|
70
88
|
data=data,
|
|
71
89
|
headers=headers
|
|
72
90
|
)
|
|
73
|
-
|
|
74
|
-
return
|
|
75
|
-
|
|
91
|
+
validate_status_code(response)
|
|
92
|
+
return parse_json_response(response, "generate embeddings")
|
|
93
|
+
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
from pygeai import logger
|
|
1
2
|
from pygeai.core.base.mappers import ErrorMapper
|
|
3
|
+
from pygeai.core.common.exceptions import APIError
|
|
2
4
|
from pygeai.core.embeddings.clients import EmbeddingsClient
|
|
3
5
|
from pygeai.core.embeddings.mappers import EmbeddingsResponseMapper
|
|
4
6
|
from pygeai.core.embeddings.models import EmbeddingConfiguration
|
|
@@ -8,7 +10,7 @@ from pygeai.core.handlers import ErrorHandler
|
|
|
8
10
|
|
|
9
11
|
class EmbeddingsManager:
|
|
10
12
|
|
|
11
|
-
def __init__(self, api_key: str = None, base_url: str = None, alias: str =
|
|
13
|
+
def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
|
|
12
14
|
self.__client = EmbeddingsClient(api_key, base_url, alias)
|
|
13
15
|
|
|
14
16
|
def generate_embeddings(
|
|
@@ -38,6 +40,7 @@ class EmbeddingsManager:
|
|
|
38
40
|
- cache: bool, optional - Whether to enable caching for the embeddings. Defaults to False.
|
|
39
41
|
|
|
40
42
|
:return: EmbeddingResponse - A response object containing the generated embeddings and usage information.
|
|
43
|
+
:raises APIError - If the API returns errors.
|
|
41
44
|
"""
|
|
42
45
|
response_data = self.__client.generate_embeddings(
|
|
43
46
|
input_list=configuration.inputs,
|
|
@@ -51,7 +54,9 @@ class EmbeddingsManager:
|
|
|
51
54
|
)
|
|
52
55
|
|
|
53
56
|
if ErrorHandler.has_errors(response_data):
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
error = ErrorHandler.extract_error(response_data)
|
|
58
|
+
logger.error(f"Error received while generating embeddings: {error}")
|
|
59
|
+
raise APIError(f"Error received while generating embeddings: {error}")
|
|
60
|
+
|
|
61
|
+
result = EmbeddingsResponseMapper.map_to_embedding_response(response_data)
|
|
57
62
|
return result
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from pygeai.core.embeddings.responses import EmbeddingResponse, EmbeddingData, UsageInfo
|
|
1
|
+
from pygeai.core.embeddings.responses import EmbeddingResponse, EmbeddingData, UsageInfo, TokenDetails
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class EmbeddingsResponseMapper:
|
|
@@ -29,10 +29,24 @@ class EmbeddingsResponseMapper:
|
|
|
29
29
|
|
|
30
30
|
@classmethod
|
|
31
31
|
def map_to_usage_info(cls, data: dict) -> UsageInfo:
|
|
32
|
+
completion_tokens_details_data = data.get('completion_tokens_details')
|
|
33
|
+
prompt_tokens_details_data = data.get('prompt_tokens_details')
|
|
34
|
+
|
|
32
35
|
return UsageInfo(
|
|
33
36
|
prompt_tokens=data.get('prompt_tokens', 0),
|
|
34
37
|
total_cost=data.get('total_cost', 0.0),
|
|
35
38
|
total_tokens=data.get('total_tokens', 0),
|
|
36
39
|
currency=data.get('currency', ''),
|
|
37
|
-
prompt_cost=data.get('prompt_cost', 0.0)
|
|
40
|
+
prompt_cost=data.get('prompt_cost', 0.0),
|
|
41
|
+
completion_tokens_details=cls._parse_token_details(completion_tokens_details_data),
|
|
42
|
+
prompt_tokens_details=cls._parse_token_details(prompt_tokens_details_data)
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def _parse_token_details(cls, data: dict) -> TokenDetails | None:
|
|
47
|
+
if data is None:
|
|
48
|
+
return None
|
|
49
|
+
return TokenDetails(
|
|
50
|
+
reasoning_tokens=data.get('reasoning_tokens'),
|
|
51
|
+
cached_tokens=data.get('cached_tokens')
|
|
38
52
|
)
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
from typing import List
|
|
1
|
+
from typing import List, Union, Optional
|
|
2
2
|
|
|
3
3
|
from pydantic.main import BaseModel
|
|
4
4
|
|
|
5
5
|
|
|
6
|
+
class TokenDetails(BaseModel):
|
|
7
|
+
reasoning_tokens: Optional[int] = None
|
|
8
|
+
cached_tokens: Optional[int] = None
|
|
9
|
+
|
|
10
|
+
|
|
6
11
|
class EmbeddingData(BaseModel):
|
|
7
12
|
index: int
|
|
8
|
-
embedding: List[float]
|
|
13
|
+
embedding: Union[List[float], str]
|
|
9
14
|
object: str
|
|
10
15
|
|
|
11
16
|
|
|
@@ -15,6 +20,8 @@ class UsageInfo(BaseModel):
|
|
|
15
20
|
total_tokens: int
|
|
16
21
|
currency: str
|
|
17
22
|
prompt_cost: float
|
|
23
|
+
completion_tokens_details: Optional[TokenDetails] = None
|
|
24
|
+
prompt_tokens_details: Optional[TokenDetails] = None
|
|
18
25
|
|
|
19
26
|
|
|
20
27
|
class EmbeddingResponse(BaseModel):
|
pygeai/core/feedback/clients.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import json
|
|
2
1
|
from typing import Any, Union
|
|
3
2
|
|
|
3
|
+
from pygeai import logger
|
|
4
4
|
from pygeai.core.base.clients import BaseClient
|
|
5
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
5
6
|
from pygeai.core.feedback.endpoints import SEND_FEEDBACK_V1
|
|
7
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
8
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
6
9
|
|
|
7
10
|
|
|
8
11
|
class FeedbackClient(BaseClient):
|
|
@@ -35,11 +38,13 @@ class FeedbackClient(BaseClient):
|
|
|
35
38
|
if comments:
|
|
36
39
|
data["comments"] = comments
|
|
37
40
|
|
|
41
|
+
logger.debug(f"Providing feedback with data: {data}")
|
|
42
|
+
|
|
38
43
|
endpoint = SEND_FEEDBACK_V1.format(requestId=request_id)
|
|
39
44
|
response = self.api_service.post(
|
|
40
45
|
endpoint=endpoint,
|
|
41
46
|
data=data
|
|
42
47
|
)
|
|
43
|
-
|
|
44
|
-
return
|
|
48
|
+
validate_status_code(response)
|
|
49
|
+
return parse_json_response(response, "send feedback. JSON parsing error")
|
|
45
50
|
|
pygeai/core/files/clients.py
CHANGED
|
@@ -2,9 +2,13 @@ import json
|
|
|
2
2
|
from json import JSONDecodeError
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
|
|
5
|
+
from pygeai import logger
|
|
5
6
|
from pygeai.core.base.clients import BaseClient
|
|
7
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
6
8
|
from pygeai.core.files.endpoints import UPLOAD_FILE_V1, GET_FILE_V1, DELETE_FILE_V1, GET_FILE_CONTENT_V1, \
|
|
7
9
|
GET_ALL_FILES_V1
|
|
10
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
11
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
8
12
|
|
|
9
13
|
|
|
10
14
|
class FileClient(BaseClient):
|
|
@@ -43,18 +47,17 @@ class FileClient(BaseClient):
|
|
|
43
47
|
|
|
44
48
|
files = {"file": file_path.open("rb")}
|
|
45
49
|
|
|
50
|
+
logger.debug(f"Uploading file {file_name}")
|
|
51
|
+
|
|
46
52
|
try:
|
|
47
53
|
response = self.api_service.post_files_multipart(
|
|
48
54
|
endpoint=UPLOAD_FILE_V1,
|
|
49
55
|
headers=headers,
|
|
50
56
|
files=files
|
|
51
57
|
)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
except JSONDecodeError as e:
|
|
55
|
-
result = response.text
|
|
58
|
+
validate_status_code(response)
|
|
59
|
+
return parse_json_response(response, "upload file in project", file_name=file_name, project_id=project_id)
|
|
56
60
|
|
|
57
|
-
return result
|
|
58
61
|
finally:
|
|
59
62
|
files["file"].close()
|
|
60
63
|
|
|
@@ -75,13 +78,9 @@ class FileClient(BaseClient):
|
|
|
75
78
|
"project": project
|
|
76
79
|
}
|
|
77
80
|
)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
except JSONDecodeError as e:
|
|
82
|
-
result = response.text
|
|
83
|
-
|
|
84
|
-
return result
|
|
81
|
+
logger.debug(f"Retrieving file details for id {file_id}")
|
|
82
|
+
validate_status_code(response)
|
|
83
|
+
return parse_json_response(response, "retrieve file details for id in project", file_id=file_id, project=project)
|
|
85
84
|
|
|
86
85
|
def delete_file(self, organization: str, project: str, file_id: str) -> dict:
|
|
87
86
|
"""
|
|
@@ -96,6 +95,9 @@ class FileClient(BaseClient):
|
|
|
96
95
|
headers = {
|
|
97
96
|
"Accept": "application/json",
|
|
98
97
|
}
|
|
98
|
+
|
|
99
|
+
logger.debug(f"Deleting file with id {file_id}")
|
|
100
|
+
|
|
99
101
|
response = self.api_service.delete(
|
|
100
102
|
endpoint=endpoint,
|
|
101
103
|
headers=headers,
|
|
@@ -104,12 +106,8 @@ class FileClient(BaseClient):
|
|
|
104
106
|
"project": project
|
|
105
107
|
}
|
|
106
108
|
)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
except JSONDecodeError as e:
|
|
110
|
-
result = response.text
|
|
111
|
-
|
|
112
|
-
return result
|
|
109
|
+
validate_status_code(response)
|
|
110
|
+
return parse_json_response(response, "delete file with id in project", file_id=file_id, project=project)
|
|
113
111
|
|
|
114
112
|
def get_file_content(self, organization: str, project: str, file_id: str) -> bytes:
|
|
115
113
|
"""
|
|
@@ -121,6 +119,9 @@ class FileClient(BaseClient):
|
|
|
121
119
|
:return: bytes - The file content in binary format.
|
|
122
120
|
"""
|
|
123
121
|
endpoint = GET_FILE_CONTENT_V1.format(fileId=file_id)
|
|
122
|
+
|
|
123
|
+
logger.debug(f"Retrieving raw content of file with id {file_id}")
|
|
124
|
+
|
|
124
125
|
response = self.api_service.get(
|
|
125
126
|
endpoint=endpoint,
|
|
126
127
|
params={
|
|
@@ -142,6 +143,8 @@ class FileClient(BaseClient):
|
|
|
142
143
|
:param project: str - The ID of the project.
|
|
143
144
|
:return: dict - A dictionary containing the list of files.
|
|
144
145
|
"""
|
|
146
|
+
logger.debug(f"Retrieving file list for project {project}")
|
|
147
|
+
|
|
145
148
|
response = self.api_service.get(
|
|
146
149
|
endpoint=GET_ALL_FILES_V1,
|
|
147
150
|
params={
|
|
@@ -149,9 +152,5 @@ class FileClient(BaseClient):
|
|
|
149
152
|
"project": project
|
|
150
153
|
}
|
|
151
154
|
)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
except JSONDecodeError as e:
|
|
155
|
-
result = response.text
|
|
156
|
-
|
|
157
|
-
return result
|
|
155
|
+
validate_status_code(response)
|
|
156
|
+
return parse_json_response(response, "retrieve file list for project", project=project)
|