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/processes/mappers.py
CHANGED
|
@@ -110,8 +110,8 @@ class AgenticProcessMapper:
|
|
|
110
110
|
"""
|
|
111
111
|
return [
|
|
112
112
|
Variable(
|
|
113
|
-
key=var
|
|
114
|
-
value=var
|
|
113
|
+
key=var.get("key"),
|
|
114
|
+
value=var.get("value")
|
|
115
115
|
)
|
|
116
116
|
for var in data
|
|
117
117
|
]
|
|
@@ -370,7 +370,7 @@ class JobMapper:
|
|
|
370
370
|
return Job(
|
|
371
371
|
caption=data.get("caption"),
|
|
372
372
|
name=data.get("name"),
|
|
373
|
-
parameters=cls._map_to_job_parameters(parameters_data) if parameters_data else
|
|
373
|
+
parameters=cls._map_to_job_parameters(parameters_data) if parameters_data else [],
|
|
374
374
|
request=data.get("request"),
|
|
375
375
|
token=data.get("token"),
|
|
376
376
|
topic=data.get("topic"),
|
pygeai/lab/runners.py
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from typing import Union
|
|
3
|
+
|
|
4
|
+
from pygeai.chat.managers import ChatManager
|
|
5
|
+
from pygeai.core.common.exceptions import WrongArgumentError
|
|
6
|
+
from pygeai.core.models import ChatMessage, ChatMessageList, LlmSettings
|
|
7
|
+
from pygeai.core.responses import ProviderResponse
|
|
8
|
+
from pygeai.lab.models import Agent
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Runner:
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
async def run(
|
|
15
|
+
cls,
|
|
16
|
+
agent: Agent,
|
|
17
|
+
user_input: Union[str | ChatMessage | ChatMessageList],
|
|
18
|
+
llm_settings: Union[dict | LlmSettings] = None
|
|
19
|
+
) -> ProviderResponse:
|
|
20
|
+
"""
|
|
21
|
+
Asynchronously executes a chat completion request for the specified agent with the provided user input and LLM settings.
|
|
22
|
+
|
|
23
|
+
:param agent: Agent - The agent configuration to use for the chat completion.
|
|
24
|
+
:param user_input: Union[str, ChatMessage, ChatMessageList] - The user input, which can be a string, a single ChatMessage, or a ChatMessageList.
|
|
25
|
+
:param llm_settings: Union[dict, LlmSettings] - Optional LLM configuration settings. If None, default settings are used.
|
|
26
|
+
:return: ProviderResponse - The ProviderResponse from the chat completion request.
|
|
27
|
+
:raises WrongArgumentError: If the user_input type is not str, ChatMessage, or ChatMessageList.
|
|
28
|
+
"""
|
|
29
|
+
messages = cls._get_messages(user_input)
|
|
30
|
+
llm_settings = cls._get_llm_settings(llm_settings)
|
|
31
|
+
|
|
32
|
+
chat_manager = ChatManager()
|
|
33
|
+
response = await asyncio.to_thread(
|
|
34
|
+
chat_manager.chat_completion,
|
|
35
|
+
model=f"saia:agent:{agent.name}",
|
|
36
|
+
messages=messages,
|
|
37
|
+
llm_settings=llm_settings
|
|
38
|
+
)
|
|
39
|
+
return response
|
|
40
|
+
|
|
41
|
+
@classmethod
|
|
42
|
+
def _get_messages(cls, user_input: Union[str | ChatMessage | ChatMessageList]):
|
|
43
|
+
"""
|
|
44
|
+
Converts the user input into a ChatMessageList for use in chat completion.
|
|
45
|
+
|
|
46
|
+
:param user_input: Union[str, ChatMessage, ChatMessageList] - The user input to process.
|
|
47
|
+
:return: ChatMessageList - A ChatMessageList containing the processed user input.
|
|
48
|
+
:raises WrongArgumentError: If the user_input type is not str, ChatMessage, or ChatMessageList.
|
|
49
|
+
"""
|
|
50
|
+
if isinstance(user_input, str):
|
|
51
|
+
new_message = {
|
|
52
|
+
"role": "user",
|
|
53
|
+
"content": user_input
|
|
54
|
+
}
|
|
55
|
+
messages = ChatMessageList(messages=[new_message])
|
|
56
|
+
elif isinstance(user_input, ChatMessage):
|
|
57
|
+
messages = ChatMessageList(messages=[user_input])
|
|
58
|
+
elif isinstance(user_input, ChatMessageList):
|
|
59
|
+
messages = user_input
|
|
60
|
+
else:
|
|
61
|
+
raise WrongArgumentError("message must be either of string, ChatMessage or ChatMessageList type")
|
|
62
|
+
|
|
63
|
+
return messages
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def _get_llm_settings(cls, llm_settings: Union[dict | LlmSettings]):
|
|
67
|
+
"""
|
|
68
|
+
Processes the LLM settings into a dictionary format for chat completion.
|
|
69
|
+
|
|
70
|
+
:param llm_settings: Union[dict, LlmSettings] - The LLM settings to process. If None, default settings are applied.
|
|
71
|
+
:return: LlmSettings - A LlmSettings object containing the LLM configuration settings.
|
|
72
|
+
"""
|
|
73
|
+
if not llm_settings:
|
|
74
|
+
llm_settings = LlmSettings.model_validate({
|
|
75
|
+
"temperature": 0.6,
|
|
76
|
+
"max_tokens": 800,
|
|
77
|
+
"frequency_penalty": 0.1,
|
|
78
|
+
"presence_penalty": 0.2
|
|
79
|
+
})
|
|
80
|
+
elif isinstance(llm_settings, dict):
|
|
81
|
+
llm_settings = LlmSettings(
|
|
82
|
+
provider_name=llm_settings.get("providerName") or llm_settings.get("provider") or llm_settings.get("provider_name"),
|
|
83
|
+
model_name=llm_settings.get("modelName") or llm_settings.get("model") or llm_settings.get("model_name"),
|
|
84
|
+
temperature=llm_settings.get("temperature"),
|
|
85
|
+
max_tokens=llm_settings.get("maxTokens") or llm_settings.get("max_tokens"),
|
|
86
|
+
frequency_penalty=llm_settings.get("frequency_penalty") or llm_settings.get("frequencyPenalty"),
|
|
87
|
+
presence_penalty=llm_settings.get("presence_penalty") or llm_settings.get("presencePenalty"),
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return llm_settings
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
from pygeai import logger
|
|
5
|
+
from pygeai.core.common.exceptions import InvalidPathException, InvalidJSONException
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class JSONLoader:
|
|
9
|
+
|
|
10
|
+
@classmethod
|
|
11
|
+
def load_data(cls, file_path: str):
|
|
12
|
+
data = {}
|
|
13
|
+
file = Path(file_path)
|
|
14
|
+
if not file.exists():
|
|
15
|
+
raise InvalidPathException(f"File {file_path} doesn't exist")
|
|
16
|
+
|
|
17
|
+
with open(file_path, 'r') as f:
|
|
18
|
+
try:
|
|
19
|
+
data = json.load(f)
|
|
20
|
+
except json.JSONDecodeError as e:
|
|
21
|
+
logger.error(f"The file doesn't contain a valid JSON: {e}")
|
|
22
|
+
raise InvalidJSONException(f"File {file_path} doesn't contain valid JSON.")
|
|
23
|
+
|
|
24
|
+
return data
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from pygeai.lab.models import Agent, Tool, Task, AgenticProcess
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class AgentParser:
|
|
5
|
+
|
|
6
|
+
@classmethod
|
|
7
|
+
def get_agent(cls, data: dict):
|
|
8
|
+
agent = Agent.model_validate(data)
|
|
9
|
+
|
|
10
|
+
return agent
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ToolParser:
|
|
14
|
+
|
|
15
|
+
@classmethod
|
|
16
|
+
def get_tool(cls, data: dict):
|
|
17
|
+
tool = Tool.model_validate(data)
|
|
18
|
+
|
|
19
|
+
return tool
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TaskParser:
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def get_task(cls, data: dict):
|
|
26
|
+
task = Task.model_validate(data)
|
|
27
|
+
|
|
28
|
+
return task
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class AgenticProcessParser:
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def get_agentic_process(cls, data: dict):
|
|
35
|
+
proces = AgenticProcess.model_validate(data)
|
|
36
|
+
|
|
37
|
+
return proces
|
|
38
|
+
|
|
39
|
+
|
pygeai/lab/strategies/clients.py
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
from pygeai
|
|
1
|
+
|
|
2
|
+
from pygeai import logger
|
|
3
|
+
from pygeai.core.common.exceptions import InvalidAPIResponseException
|
|
4
|
+
from pygeai.core.utils.validators import validate_status_code
|
|
5
|
+
from pygeai.core.utils.parsers import parse_json_response
|
|
6
|
+
from pygeai.lab.clients import AILabClient
|
|
3
7
|
from pygeai.lab.strategies.endpoints import LIST_REASONING_STRATEGIES_V2, CREATE_REASONING_STRATEGY_V2, \
|
|
4
8
|
UPDATE_REASONING_STRATEGY_V2, UPSERT_REASONING_STRATEGY_V2, GET_REASONING_STRATEGY_V2
|
|
5
9
|
|
|
6
10
|
|
|
7
|
-
class ReasoningStrategyClient(
|
|
11
|
+
class ReasoningStrategyClient(AILabClient):
|
|
8
12
|
|
|
9
13
|
def list_reasoning_strategies(
|
|
10
14
|
self,
|
|
@@ -15,16 +19,16 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
15
19
|
access_scope: str = "public"
|
|
16
20
|
):
|
|
17
21
|
"""
|
|
18
|
-
Retrieves a list of reasoning strategies
|
|
19
|
-
|
|
20
|
-
:param name: str - Name
|
|
21
|
-
:param start: str - Starting index for pagination
|
|
22
|
-
:param count: str - Number of
|
|
23
|
-
:param allow_external: bool -
|
|
24
|
-
:param access_scope: str - Access scope
|
|
25
|
-
:return: dict
|
|
22
|
+
Retrieves a list of reasoning strategies filtered by specified criteria.
|
|
23
|
+
|
|
24
|
+
:param name: str, optional - Name to filter strategies (default: "").
|
|
25
|
+
:param start: str, optional - Starting index for pagination (default: "0").
|
|
26
|
+
:param count: str, optional - Number of strategies to retrieve (default: "100").
|
|
27
|
+
:param allow_external: bool, optional - Include external strategies (default: True).
|
|
28
|
+
:param access_scope: str, optional - Access scope, "public" or "private" (default: "public").
|
|
29
|
+
:return: dict - List of reasoning strategies.
|
|
26
30
|
:raises ValueError: If access_scope is not "public" or "private".
|
|
27
|
-
:raises
|
|
31
|
+
:raises InvalidAPIResponseException: If the API response cannot be parsed.
|
|
28
32
|
"""
|
|
29
33
|
valid_access_scopes = ["public", "private"]
|
|
30
34
|
if access_scope not in valid_access_scopes:
|
|
@@ -39,17 +43,16 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
39
43
|
"allowExternal": allow_external,
|
|
40
44
|
"accessScope": access_scope,
|
|
41
45
|
}
|
|
46
|
+
|
|
47
|
+
logger.debug("Listing reasoning strategies")
|
|
48
|
+
|
|
42
49
|
response = self.api_service.get(endpoint=endpoint, headers=headers, params=params)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
except JSONDecodeError:
|
|
46
|
-
result = response.text
|
|
50
|
+
validate_status_code(response)
|
|
51
|
+
return parse_json_response(response, "list reasoning strategies")
|
|
47
52
|
|
|
48
|
-
return result
|
|
49
53
|
|
|
50
54
|
def create_reasoning_strategy(
|
|
51
55
|
self,
|
|
52
|
-
project_id: str,
|
|
53
56
|
name: str,
|
|
54
57
|
system_prompt: str,
|
|
55
58
|
access_scope: str = "public",
|
|
@@ -60,14 +63,14 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
60
63
|
"""
|
|
61
64
|
Creates a new reasoning strategy in the specified project.
|
|
62
65
|
|
|
63
|
-
:param project_id: str - Unique identifier of the project.
|
|
64
66
|
:param name: str - Name of the reasoning strategy.
|
|
65
|
-
:param system_prompt: str - System prompt for the
|
|
66
|
-
:param access_scope: str - Access scope,
|
|
67
|
-
:param strategy_type: str -
|
|
68
|
-
:param localized_descriptions: list - List of localized description dictionaries
|
|
69
|
-
:param automatic_publish: bool -
|
|
70
|
-
:return: dict
|
|
67
|
+
:param system_prompt: str - System prompt for the strategy.
|
|
68
|
+
:param access_scope: str, optional - Access scope, "public" or "private" (default: "public").
|
|
69
|
+
:param strategy_type: str, optional - Strategy type, e.g., "addendum" (default: "addendum").
|
|
70
|
+
:param localized_descriptions: list, optional - List of localized description dictionaries.
|
|
71
|
+
:param automatic_publish: bool, optional - Publish strategy after creation (default: False).
|
|
72
|
+
:return: dict - Created strategy details.
|
|
73
|
+
:raises InvalidAPIResponseException: If the API response cannot be parsed.
|
|
71
74
|
"""
|
|
72
75
|
endpoint = CREATE_REASONING_STRATEGY_V2
|
|
73
76
|
if automatic_publish:
|
|
@@ -75,7 +78,7 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
75
78
|
|
|
76
79
|
headers = {
|
|
77
80
|
"Authorization": self.api_service.token,
|
|
78
|
-
"ProjectId": project_id,
|
|
81
|
+
"ProjectId": self.project_id,
|
|
79
82
|
"Content-Type": "application/json",
|
|
80
83
|
"Accept": "application/json"
|
|
81
84
|
}
|
|
@@ -88,17 +91,16 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
88
91
|
"localizedDescriptions": localized_descriptions or []
|
|
89
92
|
}
|
|
90
93
|
}
|
|
94
|
+
|
|
95
|
+
logger.debug(f"Creating reasoning strategy with data: {data}")
|
|
96
|
+
|
|
91
97
|
response = self.api_service.post(endpoint=endpoint, headers=headers, data=data)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
except JSONDecodeError:
|
|
95
|
-
result = response.text
|
|
98
|
+
validate_status_code(response)
|
|
99
|
+
return parse_json_response(response, f"create reasoning strategy for project {self.project_id}")
|
|
96
100
|
|
|
97
|
-
return result
|
|
98
101
|
|
|
99
102
|
def update_reasoning_strategy(
|
|
100
103
|
self,
|
|
101
|
-
project_id: str,
|
|
102
104
|
reasoning_strategy_id: str,
|
|
103
105
|
name: str = None,
|
|
104
106
|
system_prompt: str = None,
|
|
@@ -109,19 +111,19 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
109
111
|
upsert: bool = False
|
|
110
112
|
):
|
|
111
113
|
"""
|
|
112
|
-
Updates
|
|
113
|
-
|
|
114
|
-
:param
|
|
115
|
-
:param
|
|
116
|
-
:param
|
|
117
|
-
:param
|
|
118
|
-
:param
|
|
119
|
-
:param
|
|
120
|
-
:param
|
|
121
|
-
:param
|
|
122
|
-
:
|
|
123
|
-
:
|
|
124
|
-
:raises
|
|
114
|
+
Updates or upserts a reasoning strategy in the specified project.
|
|
115
|
+
|
|
116
|
+
:param reasoning_strategy_id: str - Unique identifier of the strategy.
|
|
117
|
+
:param name: str, optional - Updated strategy name.
|
|
118
|
+
:param system_prompt: str, optional - Updated system prompt.
|
|
119
|
+
:param access_scope: str, optional - Updated access scope, "public" or "private".
|
|
120
|
+
:param strategy_type: str, optional - Updated strategy type, e.g., "addendum".
|
|
121
|
+
:param localized_descriptions: list, optional - Updated localized descriptions.
|
|
122
|
+
:param automatic_publish: bool, optional - Publish strategy after update (default: False).
|
|
123
|
+
:param upsert: bool, optional - Create strategy if it doesn't exist (default: False).
|
|
124
|
+
:return: dict - Updated strategy details.
|
|
125
|
+
:raises ValueError: If access_scope is not "public" or "private", or strategy_type is not "addendum".
|
|
126
|
+
:raises InvalidAPIResponseException: If the API response cannot be parsed.
|
|
125
127
|
"""
|
|
126
128
|
if access_scope is not None:
|
|
127
129
|
valid_access_scopes = ["public", "private"]
|
|
@@ -146,6 +148,8 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
146
148
|
if localized_descriptions is not None:
|
|
147
149
|
data["strategyDefinition"]["localizedDescriptions"] = localized_descriptions
|
|
148
150
|
|
|
151
|
+
logger.debug(f"Updating reasoning strategy with ID {reasoning_strategy_id} with data: {data}")
|
|
152
|
+
|
|
149
153
|
endpoint = UPSERT_REASONING_STRATEGY_V2 if upsert else UPDATE_REASONING_STRATEGY_V2
|
|
150
154
|
endpoint = endpoint.format(reasoningStrategyId=reasoning_strategy_id)
|
|
151
155
|
|
|
@@ -154,7 +158,7 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
154
158
|
|
|
155
159
|
headers = {
|
|
156
160
|
"Authorization": self.api_service.token,
|
|
157
|
-
"ProjectId": project_id,
|
|
161
|
+
"ProjectId": self.project_id,
|
|
158
162
|
"Content-Type": "application/json",
|
|
159
163
|
"Accept": "application/json"
|
|
160
164
|
}
|
|
@@ -163,27 +167,23 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
163
167
|
headers=headers,
|
|
164
168
|
data=data
|
|
165
169
|
)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
except JSONDecodeError:
|
|
169
|
-
result = response.text
|
|
170
|
+
validate_status_code(response)
|
|
171
|
+
return parse_json_response(response, f"update reasoning strategy {reasoning_strategy_id} in project {self.project_id}")
|
|
170
172
|
|
|
171
|
-
return result
|
|
172
173
|
|
|
173
174
|
def get_reasoning_strategy(
|
|
174
175
|
self,
|
|
175
|
-
project_id: str,
|
|
176
176
|
reasoning_strategy_id: str = None,
|
|
177
177
|
reasoning_strategy_name: str = None
|
|
178
178
|
):
|
|
179
179
|
"""
|
|
180
|
-
Retrieves
|
|
180
|
+
Retrieves a reasoning strategy by ID or name in the specified project.
|
|
181
181
|
|
|
182
|
-
:param
|
|
183
|
-
:param
|
|
184
|
-
:
|
|
185
|
-
:return: dict or str - JSON response containing the reasoning strategy details if successful, otherwise the raw response text.
|
|
182
|
+
:param reasoning_strategy_id: str, optional - Unique identifier of the strategy.
|
|
183
|
+
:param reasoning_strategy_name: str, optional - Name of the strategy.
|
|
184
|
+
:return: dict - Strategy details.
|
|
186
185
|
:raises ValueError: If neither reasoning_strategy_id nor reasoning_strategy_name is provided.
|
|
186
|
+
:raises InvalidAPIResponseException: If the API response cannot be parsed.
|
|
187
187
|
"""
|
|
188
188
|
if not (reasoning_strategy_id or reasoning_strategy_name):
|
|
189
189
|
raise ValueError("Either reasoning_strategy_id or reasoning_strategy_name must be provided.")
|
|
@@ -193,16 +193,20 @@ class ReasoningStrategyClient(BaseClient):
|
|
|
193
193
|
|
|
194
194
|
headers = {
|
|
195
195
|
"Authorization": self.api_service.token,
|
|
196
|
-
"ProjectId": project_id
|
|
196
|
+
"ProjectId": self.project_id
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
+
if reasoning_strategy_id:
|
|
200
|
+
logger.debug(f"Retrieving reasoning strategy detail with ID {reasoning_strategy_id}")
|
|
201
|
+
else:
|
|
202
|
+
logger.debug(f"Retrieving reasoning strategy detail with name {reasoning_strategy_name}")
|
|
203
|
+
|
|
199
204
|
response = self.api_service.get(
|
|
200
205
|
endpoint=endpoint,
|
|
201
206
|
headers=headers
|
|
202
207
|
)
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
result = response.text
|
|
208
|
+
strategy_identifier = reasoning_strategy_id or reasoning_strategy_name
|
|
209
|
+
validate_status_code(response)
|
|
210
|
+
return parse_json_response(response, f"retrieve reasoning strategy {strategy_identifier} for project {self.project_id}")
|
|
207
211
|
|
|
208
|
-
|
|
212
|
+
|
pygeai/lab/strategies/mappers.py
CHANGED
|
@@ -49,7 +49,7 @@ class ReasoningStrategyMapper:
|
|
|
49
49
|
@classmethod
|
|
50
50
|
def map_to_reasoning_strategy_list(cls, data: dict) -> ReasoningStrategyList:
|
|
51
51
|
strategy_list = []
|
|
52
|
-
strategies = data.get("strategies", data if isinstance(data, list) else []
|
|
52
|
+
strategies = data.get("strategies") if isinstance(data, dict) else data if isinstance(data, list) else []
|
|
53
53
|
if strategies and any(strategies):
|
|
54
54
|
for strategy_data in strategies:
|
|
55
55
|
strategy = cls.map_to_reasoning_strategy(strategy_data)
|