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/lab/tools/clients.py
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import json
|
|
2
|
-
from json import JSONDecodeError
|
|
3
2
|
|
|
4
|
-
from pygeai
|
|
3
|
+
from pygeai import logger
|
|
4
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException, MissingRequirementException, APIResponseError
|
|
5
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
6
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
7
|
+
from pygeai.lab.constants import VALID_SCOPES, VALID_ACCESS_SCOPES, VALID_REPORT_EVENTS
|
|
5
8
|
from pygeai.lab.tools.endpoints import CREATE_TOOL_V2, LIST_TOOLS_V2, GET_TOOL_V2, UPDATE_TOOL_V2, UPSERT_TOOL_V2, \
|
|
6
9
|
PUBLISH_TOOL_REVISION_V2, GET_PARAMETER_V2, SET_PARAMETER_V2, DELETE_TOOL_V2
|
|
10
|
+
from pygeai.lab.clients import AILabClient
|
|
7
11
|
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
VALID_ACCESS_SCOPES = ["public", "private"]
|
|
11
|
-
VALID_REPORT_EVENTS = ["None", "All", "Start", "Finish", "Progress"]
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class ToolClient(BaseClient):
|
|
13
|
+
class ToolClient(AILabClient):
|
|
15
14
|
|
|
16
15
|
def create_tool(
|
|
17
16
|
self,
|
|
18
|
-
project_id: str,
|
|
19
17
|
name: str,
|
|
20
18
|
description: str = None,
|
|
21
19
|
scope: str = None,
|
|
@@ -31,7 +29,6 @@ class ToolClient(BaseClient):
|
|
|
31
29
|
"""
|
|
32
30
|
Creates a new tool in the specified project.
|
|
33
31
|
|
|
34
|
-
:param project_id: str - Unique identifier of the project where the tool will be created.
|
|
35
32
|
:param name: str - Name of the tool. Must be non-empty, unique within the project, and exclude ':' or '/'.
|
|
36
33
|
:param description: str - Description of the tool's purpose, helping agents decide when to use it. Optional.
|
|
37
34
|
:param scope: str - Scope of the tool, either 'builtin', 'external', or 'api'. Optional.
|
|
@@ -100,33 +97,22 @@ class ToolClient(BaseClient):
|
|
|
100
97
|
if parameters:
|
|
101
98
|
data["tool"]["parameters"] = parameters
|
|
102
99
|
|
|
100
|
+
logger.debug(f"Creating new tool with data: {data}")
|
|
101
|
+
|
|
103
102
|
endpoint = CREATE_TOOL_V2
|
|
104
103
|
if automatic_publish:
|
|
105
104
|
endpoint = f"{endpoint}?automaticPublish=true"
|
|
106
105
|
|
|
107
|
-
headers = {
|
|
108
|
-
"Accept": "application/json",
|
|
109
|
-
"Content-Type": "application/json",
|
|
110
|
-
"Authorization": self.api_service.token,
|
|
111
|
-
"ProjectId": project_id
|
|
112
|
-
}
|
|
113
|
-
|
|
114
106
|
response = self.api_service.post(
|
|
115
107
|
endpoint=endpoint,
|
|
116
|
-
headers=headers,
|
|
117
108
|
data=data
|
|
118
109
|
)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
except JSONDecodeError as e:
|
|
123
|
-
result = response.text
|
|
124
|
-
|
|
125
|
-
return result
|
|
110
|
+
|
|
111
|
+
validate_status_code(response)
|
|
112
|
+
return parse_json_response(response, f"create tool for project {self.project_id}")
|
|
126
113
|
|
|
127
114
|
def list_tools(
|
|
128
115
|
self,
|
|
129
|
-
project_id: str,
|
|
130
116
|
id: str = "",
|
|
131
117
|
count: str = "100",
|
|
132
118
|
access_scope: str = "public",
|
|
@@ -137,7 +123,6 @@ class ToolClient(BaseClient):
|
|
|
137
123
|
"""
|
|
138
124
|
Retrieves a list of tools associated with the specified project.
|
|
139
125
|
|
|
140
|
-
:param project_id: str - Unique identifier of the project.
|
|
141
126
|
:param id: str - ID of the tool to filter by. Defaults to "" (no filtering).
|
|
142
127
|
:param count: str - Number of tools to retrieve. Defaults to "100".
|
|
143
128
|
:param access_scope: str - Access scope of the tools, either "public" or "private". Defaults to "public".
|
|
@@ -147,17 +132,14 @@ class ToolClient(BaseClient):
|
|
|
147
132
|
:return: dict or str - JSON response containing the list of tools if successful, otherwise the raw response text.
|
|
148
133
|
"""
|
|
149
134
|
endpoint = LIST_TOOLS_V2
|
|
150
|
-
headers = {
|
|
151
|
-
"Authorization": self.api_service.token,
|
|
152
|
-
"ProjectId": project_id
|
|
153
|
-
}
|
|
154
135
|
|
|
155
136
|
if scope and scope not in VALID_SCOPES:
|
|
156
137
|
raise ValueError(f"Scope must be one of {', '.join(VALID_SCOPES)}.")
|
|
157
138
|
|
|
139
|
+
logger.debug(f"Listing tools available for the project with ID: {self.project_id}")
|
|
140
|
+
|
|
158
141
|
response = self.api_service.get(
|
|
159
142
|
endpoint=endpoint,
|
|
160
|
-
headers=headers,
|
|
161
143
|
params={
|
|
162
144
|
"id": id,
|
|
163
145
|
"count": count,
|
|
@@ -167,16 +149,11 @@ class ToolClient(BaseClient):
|
|
|
167
149
|
"allowExternal": allow_external
|
|
168
150
|
}
|
|
169
151
|
)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
except JSONDecodeError as e:
|
|
173
|
-
result = response.text
|
|
174
|
-
|
|
175
|
-
return result
|
|
152
|
+
validate_status_code(response)
|
|
153
|
+
return parse_json_response(response, f"list tools for project {self.project_id}")
|
|
176
154
|
|
|
177
155
|
def get_tool(
|
|
178
156
|
self,
|
|
179
|
-
project_id: str,
|
|
180
157
|
tool_id: str,
|
|
181
158
|
revision: str = 0,
|
|
182
159
|
version: int = 0,
|
|
@@ -185,7 +162,6 @@ class ToolClient(BaseClient):
|
|
|
185
162
|
"""
|
|
186
163
|
Retrieves details of a specific tool from the specified project.
|
|
187
164
|
|
|
188
|
-
:param project_id: str - Unique identifier of the project.
|
|
189
165
|
:param tool_id: str - Unique identifier of the tool to retrieve.
|
|
190
166
|
:param revision: str - Revision of the tool to retrieve. Defaults to 0 (latest revision).
|
|
191
167
|
:param version: int - Version of the tool to retrieve. Defaults to 0 (latest version).
|
|
@@ -193,37 +169,28 @@ class ToolClient(BaseClient):
|
|
|
193
169
|
:return: dict or str - JSON response containing the tool details if successful, otherwise the raw response text.
|
|
194
170
|
"""
|
|
195
171
|
endpoint = GET_TOOL_V2.format(toolId=tool_id)
|
|
196
|
-
|
|
197
|
-
"Authorization": self.api_service.token,
|
|
198
|
-
"ProjectId": project_id
|
|
199
|
-
}
|
|
172
|
+
logger.debug(f"Retrieving detail of tool with ID: {tool_id}")
|
|
200
173
|
|
|
201
174
|
response = self.api_service.get(
|
|
202
175
|
endpoint=endpoint,
|
|
203
|
-
headers=headers,
|
|
204
176
|
params={
|
|
205
177
|
"revision": revision,
|
|
206
178
|
"version": version,
|
|
207
179
|
"allowDrafts": allow_drafts,
|
|
208
180
|
}
|
|
209
181
|
)
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
except JSONDecodeError as e:
|
|
213
|
-
result = response.text
|
|
182
|
+
validate_status_code(response)
|
|
183
|
+
return parse_json_response(response, f"retrieve tool {tool_id} for project {self.project_id}")
|
|
214
184
|
|
|
215
|
-
return result
|
|
216
185
|
|
|
217
186
|
def delete_tool(
|
|
218
187
|
self,
|
|
219
|
-
project_id: str,
|
|
220
188
|
tool_id: str = None,
|
|
221
189
|
tool_name: str = None
|
|
222
190
|
) -> dict | str:
|
|
223
191
|
"""
|
|
224
192
|
Deletes a specific tool from the specified project.
|
|
225
193
|
|
|
226
|
-
:param project_id: str - Unique identifier of the project.
|
|
227
194
|
:param tool_id: str, optional - Unique identifier of the tool to delete. Defaults to None.
|
|
228
195
|
:param tool_name: str, optional - Name of the tool to delete. Defaults to None.
|
|
229
196
|
:return: dict or str - JSON response containing the result of the delete operation if successful,
|
|
@@ -234,27 +201,26 @@ class ToolClient(BaseClient):
|
|
|
234
201
|
raise ValueError("Either tool_id or tool_name must be provided.")
|
|
235
202
|
|
|
236
203
|
endpoint = DELETE_TOOL_V2.format(toolId=tool_id if tool_id else tool_name)
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
"
|
|
240
|
-
|
|
204
|
+
|
|
205
|
+
if tool_id:
|
|
206
|
+
logger.debug(f"Deleting tool with ID {tool_id}")
|
|
207
|
+
else:
|
|
208
|
+
logger.debug(f"Deleting tool with name '{tool_name}'")
|
|
241
209
|
|
|
242
210
|
response = self.api_service.delete(
|
|
243
211
|
endpoint=endpoint,
|
|
244
|
-
headers=headers
|
|
245
212
|
)
|
|
213
|
+
validate_status_code(response)
|
|
246
214
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
return result
|
|
215
|
+
if response.status_code != 204:
|
|
216
|
+
logger.error(f"Unable to delete tool {tool_id or tool_name} in project {self.project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
|
|
217
|
+
raise InvalidAPIResponseException(f"Unable to delete tool {tool_id or tool_name} in project {self.project_id}: {response.text}")
|
|
218
|
+
else:
|
|
219
|
+
return {}
|
|
253
220
|
|
|
254
221
|
def update_tool(
|
|
255
222
|
self,
|
|
256
|
-
|
|
257
|
-
tool_id: str,
|
|
223
|
+
tool_id: str = None,
|
|
258
224
|
name: str = None,
|
|
259
225
|
description: str = None,
|
|
260
226
|
scope: str = None,
|
|
@@ -271,7 +237,6 @@ class ToolClient(BaseClient):
|
|
|
271
237
|
"""
|
|
272
238
|
Updates an existing tool in the specified project or upserts it if specified.
|
|
273
239
|
|
|
274
|
-
:param project_id: str - Unique identifier of the project containing the tool.
|
|
275
240
|
:param tool_id: str - Unique identifier of the tool to update. Required for update operations.
|
|
276
241
|
:param name: str - Updated name of the tool. Must be non-empty, unique within the project, and exclude ':' or '/' if provided. Optional.
|
|
277
242
|
:param description: str - Updated description of the tool's purpose, helping agents decide when to use it. Optional.
|
|
@@ -312,6 +277,8 @@ class ToolClient(BaseClient):
|
|
|
312
277
|
:raises JSONDecodeError: Caught internally if the response cannot be parsed as JSON; returns raw response text.
|
|
313
278
|
:raises Exception: May be raised by `api_service.put` for network issues, authentication errors, or server-side problems (not caught here).
|
|
314
279
|
"""
|
|
280
|
+
if not (tool_id or name):
|
|
281
|
+
raise ValueError(f"Either tool ID or tool Name must be defined in order to update tool.")
|
|
315
282
|
if scope and scope not in VALID_SCOPES:
|
|
316
283
|
raise ValueError(f"Scope must be one of {', '.join(VALID_SCOPES)}.")
|
|
317
284
|
if access_scope and access_scope not in VALID_ACCESS_SCOPES:
|
|
@@ -344,66 +311,48 @@ class ToolClient(BaseClient):
|
|
|
344
311
|
if parameters:
|
|
345
312
|
data["tool"]["parameters"] = parameters
|
|
346
313
|
|
|
314
|
+
logger.debug(f"Updating tool with ID {tool_id} with data: {data}")
|
|
315
|
+
|
|
347
316
|
endpoint = UPSERT_TOOL_V2 if upsert else UPDATE_TOOL_V2
|
|
348
317
|
endpoint = endpoint.format(toolId=tool_id) if tool_id else endpoint.format(toolId=name)
|
|
349
318
|
|
|
350
319
|
if automatic_publish:
|
|
351
320
|
endpoint = f"{endpoint}?automaticPublish=true"
|
|
352
321
|
|
|
353
|
-
headers = {
|
|
354
|
-
"Authorization": self.api_service.token,
|
|
355
|
-
"ProjectId": project_id
|
|
356
|
-
}
|
|
357
322
|
response = self.api_service.put(
|
|
358
323
|
endpoint=endpoint,
|
|
359
|
-
headers=headers,
|
|
360
324
|
data=data
|
|
361
325
|
)
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
result = response.json()
|
|
365
|
-
except JSONDecodeError as e:
|
|
366
|
-
result = response.text
|
|
367
|
-
|
|
368
|
-
return result
|
|
326
|
+
validate_status_code(response)
|
|
327
|
+
return parse_json_response(response, f"update tool {tool_id} in project {self.project_id}")
|
|
369
328
|
|
|
370
329
|
def publish_tool_revision(
|
|
371
330
|
self,
|
|
372
|
-
project_id: str,
|
|
373
331
|
tool_id: str,
|
|
374
332
|
revision: str
|
|
375
333
|
):
|
|
376
334
|
"""
|
|
377
335
|
Publishes a specific revision of a tool in the specified project.
|
|
378
336
|
|
|
379
|
-
:param project_id: str - Unique identifier of the project.
|
|
380
337
|
:param tool_id: str - Unique identifier of the tool to publish.
|
|
381
338
|
:param revision: str - Revision of the tool to publish.
|
|
382
339
|
:return: dict or str - JSON response containing the result of the publish operation if successful, otherwise the raw response text.
|
|
383
340
|
"""
|
|
384
341
|
endpoint = PUBLISH_TOOL_REVISION_V2.format(toolId=tool_id)
|
|
385
|
-
|
|
386
|
-
"Authorization": self.api_service.token,
|
|
387
|
-
"ProjectId": project_id
|
|
388
|
-
}
|
|
342
|
+
logger.debug(f"Publishing revision {revision} for tool with ID {tool_id}")
|
|
389
343
|
|
|
390
344
|
response = self.api_service.post(
|
|
391
345
|
endpoint=endpoint,
|
|
392
|
-
headers=headers,
|
|
393
346
|
data={
|
|
394
347
|
"revision": revision,
|
|
395
348
|
}
|
|
396
349
|
)
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
except JSONDecodeError as e:
|
|
400
|
-
result = response.text
|
|
350
|
+
validate_status_code(response)
|
|
351
|
+
return parse_json_response(response, f"publish revision {revision} for tool {tool_id} in project {self.project_id}")
|
|
401
352
|
|
|
402
|
-
return result
|
|
403
353
|
|
|
404
354
|
def get_parameter(
|
|
405
355
|
self,
|
|
406
|
-
project_id: str,
|
|
407
356
|
tool_id: str = None,
|
|
408
357
|
tool_public_name: str = None,
|
|
409
358
|
revision: str = 0,
|
|
@@ -413,7 +362,6 @@ class ToolClient(BaseClient):
|
|
|
413
362
|
"""
|
|
414
363
|
Retrieves details of parameters for a specific tool identified by either its ID or public name in the specified project.
|
|
415
364
|
|
|
416
|
-
:param project_id: str - Unique identifier of the project.
|
|
417
365
|
:param tool_id: str, optional - Unique identifier of the tool whose parameters are to be retrieved. Defaults to None.
|
|
418
366
|
:param tool_public_name: str, optional - Public name of the tool whose parameters are to be retrieved. Defaults to None.
|
|
419
367
|
:param revision: str - Revision of the parameters to retrieve. Defaults to "0" (latest revision).
|
|
@@ -425,31 +373,26 @@ class ToolClient(BaseClient):
|
|
|
425
373
|
if not (tool_id or tool_public_name):
|
|
426
374
|
raise ValueError("Either tool_id or tool_public_name must be provided.")
|
|
427
375
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
"
|
|
432
|
-
}
|
|
376
|
+
if tool_id:
|
|
377
|
+
logger.debug(f"Retrieving parameter for tool with ID {tool_id}")
|
|
378
|
+
else:
|
|
379
|
+
logger.debug(f"Retrieving parameter for tool with name '{tool_public_name}'")
|
|
433
380
|
|
|
381
|
+
endpoint = GET_PARAMETER_V2.format(toolPublicName=tool_public_name) if tool_public_name else GET_PARAMETER_V2.format(toolPublicName=tool_id)
|
|
434
382
|
response = self.api_service.get(
|
|
435
383
|
endpoint=endpoint,
|
|
436
|
-
headers=headers,
|
|
437
384
|
params={
|
|
438
385
|
"revision": revision,
|
|
439
386
|
"version": version,
|
|
440
387
|
"allowDrafts": allow_drafts,
|
|
441
388
|
}
|
|
442
389
|
)
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
result = response.text
|
|
447
|
-
|
|
448
|
-
return result
|
|
390
|
+
validate_status_code(response)
|
|
391
|
+
tool_identifier = tool_id or tool_public_name
|
|
392
|
+
return parse_json_response(response, f"retrieve parameters for tool {tool_identifier} in project {self.project_id}")
|
|
449
393
|
|
|
450
394
|
def set_parameter(
|
|
451
395
|
self,
|
|
452
|
-
project_id: str,
|
|
453
396
|
tool_id: str = None,
|
|
454
397
|
tool_public_name: str = None,
|
|
455
398
|
parameters: list = None
|
|
@@ -457,7 +400,6 @@ class ToolClient(BaseClient):
|
|
|
457
400
|
"""
|
|
458
401
|
Sets or updates parameters for a specific tool identified by either its ID or public name in the specified project.
|
|
459
402
|
|
|
460
|
-
:param project_id: str - Unique identifier of the project.
|
|
461
403
|
:param tool_id: str, optional - Unique identifier of the tool whose parameters are to be set. Defaults to None.
|
|
462
404
|
:param tool_public_name: str, optional - Public name of the tool whose parameters are to be set. Defaults to None.
|
|
463
405
|
:param parameters: list - List of parameter dictionaries defining the tool's parameters.
|
|
@@ -472,12 +414,6 @@ class ToolClient(BaseClient):
|
|
|
472
414
|
raise ValueError("Parameters list must be provided and non-empty.")
|
|
473
415
|
|
|
474
416
|
endpoint = SET_PARAMETER_V2.format(toolPublicName=tool_public_name) if tool_public_name else SET_PARAMETER_V2.format(toolPublicName=tool_id)
|
|
475
|
-
headers = {
|
|
476
|
-
"Authorization": self.api_service.token,
|
|
477
|
-
"ProjectId": project_id,
|
|
478
|
-
"Content-Type": "application/json",
|
|
479
|
-
"Accept": "application/json"
|
|
480
|
-
}
|
|
481
417
|
|
|
482
418
|
data = {
|
|
483
419
|
"parameterDefinition": {
|
|
@@ -485,14 +421,45 @@ class ToolClient(BaseClient):
|
|
|
485
421
|
}
|
|
486
422
|
}
|
|
487
423
|
|
|
424
|
+
if tool_id:
|
|
425
|
+
logger.debug(f"Setting parameter for tool with ID {tool_id} with data: {data}")
|
|
426
|
+
else:
|
|
427
|
+
logger.debug(f"Setting parameter for tool with name '{tool_public_name}' with data: {data}")
|
|
428
|
+
|
|
488
429
|
response = self.api_service.post(
|
|
489
430
|
endpoint=endpoint,
|
|
490
|
-
headers=headers,
|
|
491
431
|
data=data
|
|
492
432
|
)
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
433
|
+
if response.status_code != 204:
|
|
434
|
+
logger.error(f"Unable to set parameters for tool {tool_id or tool_public_name} in project {self.project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
|
|
435
|
+
raise InvalidAPIResponseException(f"Unable to set parameters for tool {tool_id or tool_public_name} in project {self.project_id}: {response.text}")
|
|
436
|
+
else:
|
|
437
|
+
return {}
|
|
438
|
+
|
|
439
|
+
'''
|
|
440
|
+
def export_tool(
|
|
441
|
+
self,
|
|
442
|
+
tool_id: str,
|
|
443
|
+
) -> dict:
|
|
444
|
+
"""
|
|
445
|
+
Retrieves details of a specific tool from the specified project.
|
|
446
|
+
|
|
447
|
+
:param tool_id: str - Unique identifier of the tool to retrieve.
|
|
448
|
+
:return: dict - JSON response containing the tool details.
|
|
449
|
+
:raises InvalidAPIResponseException: If the response cannot be parsed as JSON or an error occurs.
|
|
450
|
+
:raises MissingRequirementException: If project_id or tool_id is not provided.
|
|
451
|
+
"""
|
|
452
|
+
|
|
453
|
+
if not tool_id:
|
|
454
|
+
raise MissingRequirementException("tool_id must be specified in order to retrieve the tool")
|
|
455
|
+
|
|
456
|
+
endpoint = EXPORT_TOOL_V4.format(toolId=tool_id)
|
|
457
|
+
logger.debug(f"Exporting tool with ID {tool_id}")
|
|
458
|
+
|
|
459
|
+
response = self.api_service.get(
|
|
460
|
+
endpoint=endpoint,
|
|
461
|
+
)
|
|
462
|
+
validate_status_code(response)
|
|
463
|
+
return parse_json_response(response, f"export tool {tool_id} for project {self.project_id}")
|
|
497
464
|
|
|
498
|
-
|
|
465
|
+
'''
|
pygeai/lab/tools/endpoints.py
CHANGED
|
@@ -7,3 +7,7 @@ UPSERT_TOOL_V2 = "v2/tools/{toolId}/upsert" # PUT -> Update or insert tool data
|
|
|
7
7
|
PUBLISH_TOOL_REVISION_V2 = "v2/tools/{toolId}/publish-revision" # POST -> Publish Tool revision
|
|
8
8
|
GET_PARAMETER_V2 = "v2/tools/{toolPublicName}/config" # GET -> Get tool parameter
|
|
9
9
|
SET_PARAMETER_V2 = "v2/tools/{toolPublicName}/config" # POST -> Set tool parameter
|
|
10
|
+
EXPORT_TOOL_V2 = "v2/tools/{toolId}/export" # GET -> Export tool
|
|
11
|
+
IMPORT_TOOL_V2 = "v2/tools/import" # POST -> Import tool
|
|
12
|
+
EXPORT_TOOL_V4 = "v4/tools/{toolId}/export" # GET -> Export tool
|
|
13
|
+
IMPORT_TOOL_V4 = "v4/tools/import" # POST -> Import tool
|
pygeai/lab/tools/mappers.py
CHANGED
|
@@ -37,8 +37,8 @@ class ToolMapper:
|
|
|
37
37
|
"""
|
|
38
38
|
return [
|
|
39
39
|
ToolMessage(
|
|
40
|
-
description=msg
|
|
41
|
-
type=msg
|
|
40
|
+
description=msg.get("description"),
|
|
41
|
+
type=msg.get("type")
|
|
42
42
|
)
|
|
43
43
|
for msg in messages_data
|
|
44
44
|
]
|
|
@@ -55,9 +55,9 @@ class ToolMapper:
|
|
|
55
55
|
"""
|
|
56
56
|
tool_data = data.get("tool", data)
|
|
57
57
|
|
|
58
|
-
name = tool_data
|
|
59
|
-
description = tool_data
|
|
60
|
-
scope = tool_data
|
|
58
|
+
name = tool_data.get("name")
|
|
59
|
+
description = tool_data.get("description")
|
|
60
|
+
scope = tool_data.get("scope")
|
|
61
61
|
parameter_data = tool_data.get("parameters")
|
|
62
62
|
parameters = cls._map_parameters(parameter_data) if parameter_data else None
|
|
63
63
|
|
pygeai/man/man1/geai-proxy.1
CHANGED
|
@@ -58,6 +58,17 @@ The configuration file should be in JSON format with the following structure:
|
|
|
58
58
|
}
|
|
59
59
|
.fi
|
|
60
60
|
.TP
|
|
61
|
+
.B Example: HTTP+SSE Server
|
|
62
|
+
.nf
|
|
63
|
+
{
|
|
64
|
+
"mcpServers": {
|
|
65
|
+
"markitdown": {
|
|
66
|
+
"uri": "http://localhost:5000/sse"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
.fi
|
|
71
|
+
.TP
|
|
61
72
|
.B Example: Multiple Servers Combined
|
|
62
73
|
.nf
|
|
63
74
|
{
|
|
@@ -70,6 +81,9 @@ The configuration file should be in JSON format with the following structure:
|
|
|
70
81
|
"command": "npx",
|
|
71
82
|
"args": ["-y", "@modelcontextprotocol/server-filesystem", "~/mcp-shared-folder"]
|
|
72
83
|
},
|
|
84
|
+
"markitdown": {
|
|
85
|
+
"uri": "http://localhost:5000/sse"
|
|
86
|
+
},
|
|
73
87
|
"custom-server": {
|
|
74
88
|
"command": "python",
|
|
75
89
|
"args": ["path/to/your/custom_mcp_server.py"]
|
|
@@ -78,6 +92,55 @@ The configuration file should be in JSON format with the following structure:
|
|
|
78
92
|
}
|
|
79
93
|
.fi
|
|
80
94
|
|
|
95
|
+
.SH PUBLIC TOOL REGISTRATION
|
|
96
|
+
Tools provided by both MCP and A2A servers can be published to GEAI under a public namespace
|
|
97
|
+
by including the \fBpublic_prefix\fR field in their configuration entry.
|
|
98
|
+
|
|
99
|
+
This allows tools to be registered under a well-defined global identifier, making them
|
|
100
|
+
discoverable and shareable across proxies and clients.
|
|
101
|
+
|
|
102
|
+
.SS MCP SERVER EXAMPLE WITH PUBLIC PREFIX
|
|
103
|
+
The following configuration registers all tools from the \fBpuppeteer\fR MCP server under
|
|
104
|
+
the public prefix \fIcom.globant.puppeteer\fR:
|
|
105
|
+
|
|
106
|
+
.nf
|
|
107
|
+
{
|
|
108
|
+
"mcpServers": {
|
|
109
|
+
"public_prefix": "com.globant.puppeteer",
|
|
110
|
+
"puppeteer": {
|
|
111
|
+
"command": "npx",
|
|
112
|
+
"args": ["-y", "@modelcontextprotocol/server-puppeteer"]
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
.fi
|
|
117
|
+
|
|
118
|
+
.SS A2A SERVER EXAMPLE WITH PUBLIC PREFIX
|
|
119
|
+
The following configuration registers the tools provided by the \fBhello-world\fR A2A agent
|
|
120
|
+
under the prefix \fIcom.genexus.a2a.sampleagent\fR:
|
|
121
|
+
|
|
122
|
+
.nf
|
|
123
|
+
{
|
|
124
|
+
"a2aServers": {
|
|
125
|
+
"hello-world": {
|
|
126
|
+
"public_prefix": "com.genexus.a2a.sampleagent",
|
|
127
|
+
"url": "http://localhost:9999",
|
|
128
|
+
"headers": {
|
|
129
|
+
"Authorization": "Bearer fh84ff...."
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
.fi
|
|
135
|
+
|
|
136
|
+
.SS RESULTING TOOL IDENTIFIERS
|
|
137
|
+
When this prefix is set, all tools will be published using it. For example, a tool named
|
|
138
|
+
\fBtranslate_text\fR would be available as:
|
|
139
|
+
|
|
140
|
+
.nf
|
|
141
|
+
com.genexus.a2a.sampleagent.translate_text
|
|
142
|
+
.fi
|
|
143
|
+
|
|
81
144
|
.SS 2. Proxy Authentication Configuration
|
|
82
145
|
This section establishes the connection between the proxy and GEAI and manages user aliases.
|
|
83
146
|
.TP
|
|
@@ -102,6 +165,48 @@ Generated new proxy ID: 37bae96b-bc99-4110-bb61-b912b28f9e32
|
|
|
102
165
|
-> Insert proxy description:
|
|
103
166
|
.fi
|
|
104
167
|
|
|
168
|
+
.SH PROXY CONFIGURATION PARAMETERS
|
|
169
|
+
During interactive setup, the following parameters are requested:
|
|
170
|
+
|
|
171
|
+
.TP
|
|
172
|
+
\fBproxy ID (UUID)\fR
|
|
173
|
+
A unique identifier for this proxy instance. If left empty, the automatically generated UUID
|
|
174
|
+
will be used.
|
|
175
|
+
|
|
176
|
+
.TP
|
|
177
|
+
\fBproxy API key\fR
|
|
178
|
+
The API key used to authenticate the proxy with the GEAI backend. This must be an API token
|
|
179
|
+
generated in GEAI for a specific project.
|
|
180
|
+
|
|
181
|
+
.TP
|
|
182
|
+
\fBproxy base URL\fR
|
|
183
|
+
The base URL of the GEAI installation this proxy will connect to.
|
|
184
|
+
For example: \fIhttps://api.beta.saia.ai\fR
|
|
185
|
+
|
|
186
|
+
.TP
|
|
187
|
+
\fBproxy name\fR
|
|
188
|
+
A human-readable name assigned to this instance of \fBgeai-proxy\fR. This name is stored under the configured alias.
|
|
189
|
+
|
|
190
|
+
.TP
|
|
191
|
+
\fBproxy description\fR
|
|
192
|
+
An optional description to help identify this proxy instance, especially when multiple proxies are used under different aliases.
|
|
193
|
+
|
|
194
|
+
.SS Environment Variables
|
|
195
|
+
The above configuration parameters can also be set using environment variables:
|
|
196
|
+
|
|
197
|
+
.TP
|
|
198
|
+
\fBGEAI_API_KEY\fR
|
|
199
|
+
.TP
|
|
200
|
+
\fBGEAI_API_BASE_URL\fR
|
|
201
|
+
.TP
|
|
202
|
+
\fBPROXY_ID\fR
|
|
203
|
+
.TP
|
|
204
|
+
\fBPROXY_NAME\fR
|
|
205
|
+
.TP
|
|
206
|
+
\fBPROXY_DESCRIPTION\fR
|
|
207
|
+
|
|
208
|
+
These environment variables override or represent the configuration of the \fBdefault alias\fR. Therefore, they are only taken into account if the proxy is invoked with \fB\-\-alias default\fR. When using a different alias, these variables are ignored.
|
|
209
|
+
|
|
105
210
|
.SH USAGE
|
|
106
211
|
To start the proxy server with a specific configuration and alias:
|
|
107
212
|
.nf
|
|
@@ -123,6 +228,17 @@ Reconfigure proxy authentication settings.
|
|
|
123
228
|
Sample configuration file for MCP servers.
|
|
124
229
|
.SH SEE ALSO
|
|
125
230
|
.BR pygeai (1)
|
|
231
|
+
.SH THIRD-PARTY COMPONENTS
|
|
232
|
+
This software includes code from the \fBa2a-python\fR project developed by Google LLC, which is licensed under the Apache License, Version 2.0.
|
|
233
|
+
|
|
234
|
+
Only the vendored component located in \fIpygeai/vendor/a2a/\fR is subject to the Apache License. The rest of this software is licensed under the MIT License.
|
|
235
|
+
|
|
236
|
+
For full license details, see:
|
|
237
|
+
.IP \[bu]
|
|
238
|
+
https://github.com/google/a2a-python
|
|
239
|
+
.IP \[bu]
|
|
240
|
+
pygeai/vendor/a2a/LICENSE
|
|
241
|
+
|
|
126
242
|
.SH AUTHOR
|
|
127
243
|
Written by the GEAI development team.
|
|
128
244
|
.SH COPYRIGHT
|