pygeai 0.1.6__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 +11 -2
- 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 +48 -57
- pygeai/assistant/data/__init__.py +0 -0
- pygeai/assistant/data/clients.py +15 -0
- pygeai/assistant/data_analyst/__init__.py +0 -0
- pygeai/assistant/data_analyst/clients.py +75 -0
- pygeai/assistant/data_analyst/endpoints.py +2 -0
- pygeai/assistant/endpoints.py +0 -2
- pygeai/assistant/managers.py +738 -0
- pygeai/assistant/mappers.py +153 -0
- pygeai/assistant/rag/clients.py +132 -21
- pygeai/assistant/rag/mappers.py +228 -0
- pygeai/assistant/rag/models.py +396 -0
- pygeai/assistant/rag/responses.py +10 -0
- pygeai/auth/__init__.py +0 -0
- pygeai/auth/clients.py +129 -0
- pygeai/auth/endpoints.py +6 -0
- pygeai/chat/clients.py +406 -31
- pygeai/chat/endpoints.py +3 -0
- pygeai/chat/iris.py +17 -0
- pygeai/chat/managers.py +64 -0
- 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 +9 -12
- pygeai/cli/commands/analytics.py +533 -0
- pygeai/cli/commands/assistant.py +11 -11
- pygeai/cli/commands/auth.py +299 -0
- pygeai/cli/commands/base.py +201 -7
- pygeai/cli/commands/chat.py +875 -14
- pygeai/cli/commands/common.py +30 -26
- pygeai/cli/commands/configuration.py +84 -9
- pygeai/cli/commands/docs.py +105 -0
- pygeai/cli/commands/embeddings.py +187 -0
- pygeai/cli/commands/evaluation.py +2069 -0
- pygeai/cli/commands/feedback.py +93 -0
- pygeai/cli/commands/files.py +312 -0
- pygeai/cli/commands/flows/__init__.py +0 -0
- pygeai/cli/commands/gam.py +349 -0
- pygeai/cli/commands/lab/__init__.py +0 -0
- pygeai/cli/commands/lab/ai_lab.py +4110 -0
- pygeai/cli/commands/lab/common.py +135 -0
- 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 +164 -0
- pygeai/cli/commands/migrate.py +1198 -0
- pygeai/cli/commands/options.py +86 -0
- pygeai/cli/commands/organization.py +560 -98
- pygeai/cli/commands/rag.py +306 -10
- pygeai/cli/commands/rerank.py +108 -0
- pygeai/cli/commands/secrets.py +357 -0
- pygeai/cli/commands/usage_limits.py +583 -0
- pygeai/cli/commands/validators.py +209 -0
- pygeai/cli/commands/version.py +44 -0
- pygeai/cli/error_handler.py +151 -0
- pygeai/cli/geai.py +171 -30
- pygeai/cli/geai_proxy.py +318 -0
- pygeai/cli/install_man.py +107 -0
- pygeai/cli/parsers.py +78 -25
- pygeai/cli/texts/help.py +712 -55
- pygeai/core/__init__.py +9 -1
- pygeai/core/base/clients.py +61 -10
- pygeai/core/base/mappers.py +208 -30
- pygeai/core/base/models.py +8 -308
- pygeai/core/base/responses.py +18 -1
- pygeai/core/base/session.py +110 -17
- pygeai/core/common/config.py +98 -16
- pygeai/core/common/decorators.py +44 -0
- pygeai/core/common/exceptions.py +104 -4
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +93 -0
- pygeai/core/embeddings/endpoints.py +1 -0
- pygeai/core/embeddings/managers.py +62 -0
- pygeai/core/embeddings/mappers.py +52 -0
- pygeai/core/embeddings/models.py +14 -0
- pygeai/core/embeddings/responses.py +31 -0
- pygeai/core/feedback/__init__.py +0 -0
- pygeai/core/feedback/clients.py +50 -0
- pygeai/core/feedback/endpoints.py +1 -0
- pygeai/core/feedback/models.py +10 -0
- pygeai/core/files/__init__.py +0 -0
- pygeai/core/files/clients.py +156 -0
- pygeai/core/files/endpoints.py +5 -0
- pygeai/core/files/managers.py +224 -0
- pygeai/core/files/mappers.py +44 -0
- pygeai/core/files/models.py +24 -0
- pygeai/core/files/responses.py +19 -0
- pygeai/core/handlers.py +32 -0
- pygeai/core/llm/__init__.py +0 -0
- pygeai/core/llm/clients.py +53 -0
- pygeai/core/llm/endpoints.py +4 -0
- pygeai/core/models.py +799 -0
- pygeai/core/plugins/__init__.py +0 -0
- pygeai/core/plugins/clients.py +32 -0
- pygeai/core/plugins/endpoints.py +1 -0
- pygeai/core/plugins/models.py +86 -0
- pygeai/core/rerank/__init__.py +0 -0
- pygeai/core/rerank/clients.py +35 -0
- pygeai/core/rerank/endpoints.py +1 -0
- pygeai/core/rerank/managers.py +47 -0
- pygeai/core/rerank/mappers.py +23 -0
- pygeai/core/rerank/models.py +27 -0
- pygeai/core/responses.py +104 -0
- pygeai/core/secrets/__init__.py +0 -0
- pygeai/core/secrets/clients.py +212 -0
- pygeai/core/secrets/endpoints.py +7 -0
- pygeai/core/services/llm/__init__.py +0 -0
- pygeai/core/services/llm/model.py +186 -0
- pygeai/core/services/llm/providers.py +15 -0
- pygeai/core/services/response.py +18 -0
- pygeai/core/services/rest.py +311 -89
- 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 +870 -0
- pygeai/evaluation/__init__.py +0 -0
- pygeai/evaluation/clients.py +19 -0
- pygeai/evaluation/dataset/__init__.py +0 -0
- pygeai/evaluation/dataset/clients.py +514 -0
- pygeai/evaluation/dataset/endpoints.py +26 -0
- pygeai/evaluation/plan/__init__.py +0 -0
- pygeai/evaluation/plan/clients.py +302 -0
- pygeai/evaluation/plan/endpoints.py +16 -0
- pygeai/evaluation/result/__init__.py +0 -0
- pygeai/evaluation/result/clients.py +70 -0
- pygeai/evaluation/result/endpoints.py +2 -0
- pygeai/flows/__init__.py +0 -0
- pygeai/flows/endpoints.py +362 -0
- pygeai/flows/models.py +1304 -0
- pygeai/gam/__init__.py +0 -0
- pygeai/gam/clients.py +178 -0
- pygeai/gam/endpoints.py +4 -0
- pygeai/health/__init__.py +0 -0
- pygeai/health/clients.py +24 -0
- pygeai/health/endpoints.py +1 -0
- pygeai/lab/__init__.py +0 -0
- pygeai/lab/agents/__init__.py +0 -0
- pygeai/lab/agents/clients.py +426 -0
- pygeai/lab/agents/endpoints.py +12 -0
- pygeai/lab/agents/mappers.py +319 -0
- pygeai/lab/clients.py +24 -0
- pygeai/lab/constants.py +3 -0
- pygeai/lab/managers.py +1558 -0
- pygeai/lab/models.py +1719 -0
- pygeai/lab/processes/__init__.py +0 -0
- pygeai/lab/processes/clients.py +1051 -0
- pygeai/lab/processes/endpoints.py +26 -0
- pygeai/lab/processes/mappers.py +395 -0
- 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/__init__.py +0 -0
- pygeai/lab/strategies/clients.py +212 -0
- pygeai/lab/strategies/endpoints.py +5 -0
- pygeai/lab/strategies/mappers.py +58 -0
- pygeai/lab/tools/__init__.py +0 -0
- pygeai/lab/tools/clients.py +465 -0
- pygeai/lab/tools/endpoints.py +13 -0
- pygeai/lab/tools/mappers.py +131 -0
- pygeai/man/__init__.py +1 -0
- pygeai/man/man1/__init__.py +1 -0
- pygeai/man/man1/geai-proxy.1 +246 -0
- pygeai/man/man1/geai.1 +2615 -0
- pygeai/migration/__init__.py +33 -0
- pygeai/migration/strategies.py +603 -0
- pygeai/migration/tools.py +180 -0
- pygeai/organization/clients.py +246 -18
- pygeai/organization/endpoints.py +17 -8
- pygeai/organization/limits/__init__.py +0 -0
- pygeai/organization/limits/clients.py +281 -0
- pygeai/organization/limits/endpoints.py +15 -0
- pygeai/organization/limits/managers.py +331 -0
- pygeai/organization/limits/mappers.py +21 -0
- pygeai/organization/managers.py +537 -0
- pygeai/organization/mappers.py +111 -46
- pygeai/organization/responses.py +61 -11
- pygeai/proxy/__init__.py +0 -0
- pygeai/proxy/clients.py +216 -0
- pygeai/proxy/config.py +128 -0
- pygeai/proxy/managers.py +232 -0
- pygeai/proxy/servers.py +304 -0
- pygeai/proxy/tool.py +69 -0
- 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/__init__.py +0 -0
- pygeai/tests/assistants/rag/test_clients.py +346 -0
- pygeai/tests/assistants/rag/test_mappers.py +189 -0
- pygeai/tests/assistants/rag/test_models.py +292 -0
- pygeai/tests/assistants/test_clients.py +176 -80
- pygeai/tests/assistants/test_managers.py +198 -0
- pygeai/tests/assistants/test_mappers.py +111 -0
- 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/__init__.py +0 -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 +154 -0
- pygeai/tests/core/base/__init__.py +0 -0
- pygeai/tests/core/base/data/__init__.py +0 -0
- pygeai/tests/core/base/data/mappers.py +117 -0
- pygeai/tests/core/base/data/models.py +312 -0
- pygeai/tests/core/base/test_mappers.py +569 -0
- pygeai/tests/core/base/test_models.py +261 -0
- 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/__init__.py +0 -0
- pygeai/tests/core/files/test_clients.py +128 -0
- pygeai/tests/core/files/test_managers.py +219 -0
- 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/__init__.py +0 -0
- pygeai/tests/core/rerank/test_clients.py +76 -0
- pygeai/tests/core/rerank/test_managers.py +99 -0
- pygeai/tests/core/rerank/test_mappers.py +54 -0
- 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/__init__.py +0 -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_mappers.py +245 -0
- pygeai/tests/lab/test_models.py +1154 -0
- 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/__init__.py +0 -0
- pygeai/tests/organization/limits/test_clients.py +567 -0
- pygeai/tests/organization/limits/test_managers.py +402 -0
- pygeai/tests/organization/test_clients.py +615 -64
- 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/__init__.py +0 -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/assistants/__init__.py +0 -0
- pygeai/tests/snippets/assistants/create_chat_assistant.py +54 -0
- pygeai/tests/snippets/assistants/create_text_assistant.py +51 -0
- pygeai/tests/snippets/assistants/data_analyst/__init__.py +0 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +100 -0
- pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +9 -0
- pygeai/tests/snippets/assistants/data_analyst/get_status.py +9 -0
- pygeai/tests/snippets/assistants/file_summarizer_assistant.py +149 -0
- pygeai/tests/snippets/assistants/get_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/get_assistant_list.py +7 -0
- pygeai/tests/snippets/assistants/rag/__init__.py +0 -0
- pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +65 -0
- pygeai/tests/snippets/assistants/rag/delete_al_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/delete_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +8 -0
- pygeai/tests/snippets/assistants/rag/get_document.py +10 -0
- pygeai/tests/snippets/assistants/rag/get_documents.py +7 -0
- pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +8 -0
- pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +48 -0
- pygeai/tests/snippets/assistants/rag/upload_document.py +19 -0
- pygeai/tests/snippets/assistants/send_feedback.py +14 -0
- pygeai/tests/snippets/assistants/update_chat_assistant.py +63 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/__init__.py +0 -0
- pygeai/tests/snippets/chat/cancel_request.py +7 -0
- pygeai/tests/snippets/chat/chat_completion.py +28 -0
- pygeai/tests/snippets/chat/chat_completion_1.py +40 -0
- pygeai/tests/snippets/chat/chat_completion_2.py +60 -0
- pygeai/tests/snippets/chat/chat_completion_3.py +27 -0
- pygeai/tests/snippets/chat/chat_completion_4.py +67 -0
- pygeai/tests/snippets/chat/chat_completion_streaming.py +63 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_request_status.py +7 -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/chat/send_chat_request.py +33 -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/__init__.py +0 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/generate_embeddings.py +26 -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/__init__.py +0 -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/__init__.py +0 -0
- pygeai/tests/snippets/files/delete_file.py +9 -0
- pygeai/tests/snippets/files/get_file_content.py +10 -0
- pygeai/tests/snippets/files/get_file_data.py +9 -0
- pygeai/tests/snippets/files/get_file_list.py +6 -0
- pygeai/tests/snippets/files/upload_file.py +13 -0
- pygeai/tests/snippets/gam/__init__.py +0 -0
- pygeai/tests/snippets/gam/gam_access_token.py +87 -0
- pygeai/tests/snippets/lab/__init__.py +0 -0
- pygeai/tests/snippets/lab/agentic_flow_example_1.py +326 -0
- pygeai/tests/snippets/lab/agentic_flow_example_2.py +206 -0
- pygeai/tests/snippets/lab/agentic_flow_example_3.py +486 -0
- pygeai/tests/snippets/lab/agentic_flow_example_4.py +446 -0
- pygeai/tests/snippets/lab/agents/__init__.py +0 -0
- pygeai/tests/snippets/lab/agents/create_agent.py +48 -0
- pygeai/tests/snippets/lab/agents/create_agent_2.py +48 -0
- 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 +12 -0
- pygeai/tests/snippets/lab/agents/get_agent.py +24 -0
- pygeai/tests/snippets/lab/agents/get_agent_with_new_fields.py +62 -0
- pygeai/tests/snippets/lab/agents/get_sharing_link.py +13 -0
- pygeai/tests/snippets/lab/agents/list_agents.py +18 -0
- pygeai/tests/snippets/lab/agents/publish_agent_revision.py +12 -0
- pygeai/tests/snippets/lab/agents/update_agent.py +50 -0
- 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/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/create_process.py +24 -0
- pygeai/tests/snippets/lab/processes/create_task.py +8 -0
- pygeai/tests/snippets/lab/processes/jobs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +21 -0
- pygeai/tests/snippets/lab/processes/kbs/__init__.py +0 -0
- pygeai/tests/snippets/lab/processes/kbs/create_kb.py +18 -0
- pygeai/tests/snippets/lab/processes/kbs/get_kb.py +26 -0
- pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +30 -0
- pygeai/tests/snippets/lab/processes/kbs/try_all.py +73 -0
- pygeai/tests/snippets/lab/processes/list_processes.py +10 -0
- pygeai/tests/snippets/lab/runner_1.py +212 -0
- pygeai/tests/snippets/lab/samples/__init__.py +0 -0
- pygeai/tests/snippets/lab/samples/summarize_files.py +162 -0
- pygeai/tests/snippets/lab/strategies/__init__.py +0 -0
- pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +22 -0
- pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +10 -0
- pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +16 -0
- pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +26 -0
- pygeai/tests/snippets/lab/tools/__init__.py +0 -0
- pygeai/tests/snippets/lab/tools/create_tool.py +48 -0
- pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
- pygeai/tests/snippets/lab/tools/delete_tool.py +21 -0
- pygeai/tests/snippets/lab/tools/get_parameter.py +21 -0
- pygeai/tests/snippets/lab/tools/get_tool.py +22 -0
- pygeai/tests/snippets/lab/tools/list_tools.py +23 -0
- pygeai/tests/snippets/lab/tools/publish_tool_revision.py +13 -0
- pygeai/tests/snippets/lab/tools/set_parameters.py +33 -0
- pygeai/tests/snippets/lab/tools/update_tool.py +52 -0
- pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
- pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +238 -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/use_cases/file_summarizer_example.py +157 -0
- pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +157 -0
- 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/__init__.py +0 -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 +23 -0
- pygeai/tests/snippets/organization/delete_project.py +7 -0
- pygeai/tests/snippets/organization/export_request_data.py +7 -0
- 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_data.py +7 -0
- pygeai/tests/snippets/organization/get_project_list.py +8 -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/tests/snippets/organization/get_project_tokens.py +7 -0
- pygeai/tests/snippets/organization/update_project.py +14 -0
- pygeai/tests/snippets/rerank/__init__.py +0 -0
- pygeai/tests/snippets/rerank/rerank_chunks.py +19 -0
- pygeai/tests/snippets/secrets/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/__init__.py +0 -0
- pygeai/tests/snippets/usage_limit/delete_usage_limit.py +16 -0
- pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +12 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +11 -0
- pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +13 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +22 -0
- pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +23 -0
- pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +24 -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.6.dist-info → pygeai-0.6.0b15.dist-info}/WHEEL +1 -1
- pygeai-0.6.0b15.dist-info/entry_points.txt +5 -0
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info/licenses}/LICENSE +13 -1
- {pygeai-0.1.6.dist-info → pygeai-0.6.0b15.dist-info}/top_level.txt +0 -1
- docs/source/conf.py +0 -45
- pygeai/core/clients.py +0 -240
- pygeai/tests/core/test_clients.py +0 -49
- pygeai-0.1.6.dist-info/METADATA +0 -92
- pygeai-0.1.6.dist-info/RECORD +0 -65
- pygeai-0.1.6.dist-info/SOURCES.sync-conflict-20241223-145950-3QD4F42.txt +0 -41
- pygeai-0.1.6.dist-info/entry_points.txt +0 -2
- /pygeai/{agent → analytics}/__init__.py +0 -0
pygeai/cli/commands/chat.py
CHANGED
|
@@ -1,20 +1,34 @@
|
|
|
1
1
|
import json
|
|
2
|
+
import platform
|
|
3
|
+
import os
|
|
4
|
+
import subprocess
|
|
2
5
|
import sys
|
|
6
|
+
from importlib import resources
|
|
7
|
+
from pathlib import Path
|
|
3
8
|
|
|
9
|
+
from pygeai import logger
|
|
4
10
|
from pygeai.chat.clients import ChatClient
|
|
11
|
+
from pygeai.chat.iris import Iris
|
|
12
|
+
from pygeai.chat.session import AgentChatSession
|
|
5
13
|
from pygeai.cli.commands import Command, Option, ArgumentsEnum
|
|
6
14
|
from pygeai.cli.commands.builders import build_help_text
|
|
7
15
|
from pygeai.cli.commands.common import get_messages, get_boolean_value, get_penalty_float_value
|
|
16
|
+
from pygeai.cli.commands.lab.utils import get_project_id
|
|
8
17
|
from pygeai.cli.texts.help import CHAT_HELP_TEXT
|
|
9
|
-
from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError
|
|
18
|
+
from pygeai.core.common.exceptions import MissingRequirementException, WrongArgumentError, InvalidAgentException
|
|
19
|
+
from prompt_toolkit import PromptSession
|
|
20
|
+
from prompt_toolkit.history import InMemoryHistory
|
|
10
21
|
|
|
22
|
+
from pygeai.core.utils.console import Console
|
|
23
|
+
from pygeai.lab.agents.clients import AgentClient
|
|
11
24
|
|
|
12
|
-
|
|
25
|
+
|
|
26
|
+
def show_help():
|
|
13
27
|
"""
|
|
14
28
|
Displays help text in stdout
|
|
15
29
|
"""
|
|
16
30
|
help_text = build_help_text(chat_commands, CHAT_HELP_TEXT)
|
|
17
|
-
|
|
31
|
+
Console.write_stdout(help_text)
|
|
18
32
|
|
|
19
33
|
|
|
20
34
|
def get_chat_completion(option_list: list):
|
|
@@ -26,6 +40,20 @@ def get_chat_completion(option_list: list):
|
|
|
26
40
|
thread_id = None
|
|
27
41
|
frequency_penalty = None
|
|
28
42
|
presence_penalty = None
|
|
43
|
+
top_p = None
|
|
44
|
+
stop = None
|
|
45
|
+
response_format = None
|
|
46
|
+
tools = None
|
|
47
|
+
tool_choice = None
|
|
48
|
+
logprobs = None
|
|
49
|
+
top_logprobs = None
|
|
50
|
+
seed = None
|
|
51
|
+
stream_options = None
|
|
52
|
+
store = None
|
|
53
|
+
metadata = None
|
|
54
|
+
user = None
|
|
55
|
+
reasoning_effort = None
|
|
56
|
+
|
|
29
57
|
for option_flag, option_arg in option_list:
|
|
30
58
|
if option_flag.name == "model":
|
|
31
59
|
model = option_arg
|
|
@@ -44,9 +72,9 @@ def get_chat_completion(option_list: list):
|
|
|
44
72
|
if option_arg:
|
|
45
73
|
stream = get_boolean_value(option_arg)
|
|
46
74
|
if option_flag.name == "temperature":
|
|
47
|
-
temperature = option_arg
|
|
75
|
+
temperature = float(option_arg) if option_arg is not None else None
|
|
48
76
|
if option_flag.name == "max_tokens":
|
|
49
|
-
max_tokens = option_arg
|
|
77
|
+
max_tokens = int(option_arg) if option_arg is not None else None
|
|
50
78
|
if option_flag.name == "thread_id":
|
|
51
79
|
thread_id = option_arg
|
|
52
80
|
if option_flag.name == "frequency_penalty":
|
|
@@ -55,6 +83,50 @@ def get_chat_completion(option_list: list):
|
|
|
55
83
|
if option_flag.name == "presence_penalty":
|
|
56
84
|
if option_arg:
|
|
57
85
|
presence_penalty = get_penalty_float_value(option_arg)
|
|
86
|
+
if option_flag.name == "top_p":
|
|
87
|
+
top_p = float(option_arg) if option_arg else None
|
|
88
|
+
if option_flag.name == "stop":
|
|
89
|
+
try:
|
|
90
|
+
stop = json.loads(option_arg) if option_arg else None
|
|
91
|
+
except json.JSONDecodeError:
|
|
92
|
+
stop = option_arg
|
|
93
|
+
if option_flag.name == "response_format":
|
|
94
|
+
try:
|
|
95
|
+
response_format = json.loads(option_arg) if option_arg else None
|
|
96
|
+
except json.JSONDecodeError:
|
|
97
|
+
raise WrongArgumentError("response_format must be a valid JSON object")
|
|
98
|
+
if option_flag.name == "tools":
|
|
99
|
+
try:
|
|
100
|
+
tools = json.loads(option_arg) if option_arg else None
|
|
101
|
+
except json.JSONDecodeError:
|
|
102
|
+
raise WrongArgumentError("tools must be a valid JSON array")
|
|
103
|
+
if option_flag.name == "tool_choice":
|
|
104
|
+
try:
|
|
105
|
+
tool_choice = json.loads(option_arg) if option_arg else None
|
|
106
|
+
except json.JSONDecodeError:
|
|
107
|
+
tool_choice = option_arg
|
|
108
|
+
if option_flag.name == "logprobs":
|
|
109
|
+
logprobs = get_boolean_value(option_arg) if option_arg else None
|
|
110
|
+
if option_flag.name == "top_logprobs":
|
|
111
|
+
top_logprobs = int(option_arg) if option_arg else None
|
|
112
|
+
if option_flag.name == "seed":
|
|
113
|
+
seed = int(option_arg) if option_arg else None
|
|
114
|
+
if option_flag.name == "stream_options":
|
|
115
|
+
try:
|
|
116
|
+
stream_options = json.loads(option_arg) if option_arg else None
|
|
117
|
+
except json.JSONDecodeError:
|
|
118
|
+
raise WrongArgumentError("stream_options must be a valid JSON object")
|
|
119
|
+
if option_flag.name == "store":
|
|
120
|
+
store = get_boolean_value(option_arg) if option_arg else None
|
|
121
|
+
if option_flag.name == "metadata":
|
|
122
|
+
try:
|
|
123
|
+
metadata = json.loads(option_arg) if option_arg else None
|
|
124
|
+
except json.JSONDecodeError:
|
|
125
|
+
raise WrongArgumentError("metadata must be a valid JSON object")
|
|
126
|
+
if option_flag.name == "user":
|
|
127
|
+
user = option_arg
|
|
128
|
+
if option_flag.name == "reasoning_effort":
|
|
129
|
+
reasoning_effort = option_arg
|
|
58
130
|
|
|
59
131
|
messages = get_messages(message_list)
|
|
60
132
|
|
|
@@ -70,16 +142,36 @@ def get_chat_completion(option_list: list):
|
|
|
70
142
|
max_tokens=max_tokens,
|
|
71
143
|
thread_id=thread_id,
|
|
72
144
|
frequency_penalty=frequency_penalty,
|
|
73
|
-
presence_penalty=presence_penalty
|
|
145
|
+
presence_penalty=presence_penalty,
|
|
146
|
+
top_p=top_p,
|
|
147
|
+
stop=stop,
|
|
148
|
+
response_format=response_format,
|
|
149
|
+
tools=tools,
|
|
150
|
+
tool_choice=tool_choice,
|
|
151
|
+
logprobs=logprobs,
|
|
152
|
+
top_logprobs=top_logprobs,
|
|
153
|
+
seed=seed,
|
|
154
|
+
stream_options=stream_options,
|
|
155
|
+
store=store,
|
|
156
|
+
metadata=metadata,
|
|
157
|
+
user=user,
|
|
158
|
+
reasoning_effort=reasoning_effort
|
|
74
159
|
)
|
|
75
|
-
|
|
160
|
+
if stream:
|
|
161
|
+
Console.write_stdout("Streaming chat completion:")
|
|
162
|
+
for chunk in result:
|
|
163
|
+
Console.write_stdout(f"{chunk}", end="")
|
|
164
|
+
sys.stdout.flush()
|
|
165
|
+
Console.write_stdout()
|
|
166
|
+
else:
|
|
167
|
+
Console.write_stdout(f"Chat completion detail: \n{result}\n")
|
|
76
168
|
|
|
77
169
|
|
|
78
170
|
chat_completion_options = [
|
|
79
171
|
Option(
|
|
80
172
|
"model",
|
|
81
173
|
["--model", "-m"],
|
|
82
|
-
"The model needs to address the assistant type and name or
|
|
174
|
+
"The model needs to address the assistant type and name or bot_id, depending on the Type. Then, the parameters"
|
|
83
175
|
" will vary depending on the type. Its format is as follows: \n"
|
|
84
176
|
"\t\"model\": \"saia:<assistant_type>:<assistant_name>|<bot_id>\"",
|
|
85
177
|
True
|
|
@@ -104,45 +196,768 @@ chat_completion_options = [
|
|
|
104
196
|
Option(
|
|
105
197
|
"temperature",
|
|
106
198
|
["--temperature", "--temp"],
|
|
107
|
-
"
|
|
199
|
+
"Float value to set volatility of the assistant's answers (between 0 and 2)",
|
|
108
200
|
True
|
|
109
201
|
),
|
|
110
202
|
Option(
|
|
111
203
|
"max_tokens",
|
|
112
204
|
["--max-tokens"],
|
|
113
|
-
"
|
|
205
|
+
"Integer value to set max tokens to use",
|
|
114
206
|
True
|
|
115
207
|
),
|
|
116
208
|
Option(
|
|
117
209
|
"thread_id",
|
|
118
210
|
["--thread-id"],
|
|
119
|
-
"
|
|
211
|
+
"Optional UUID for conversation identifier",
|
|
120
212
|
True
|
|
121
213
|
),
|
|
122
214
|
Option(
|
|
123
215
|
"frequency_penalty",
|
|
124
216
|
["--frequency-penalty"],
|
|
125
|
-
"
|
|
217
|
+
"Optional number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency "
|
|
126
218
|
"in the text so far, decreasing the model's likelihood to repeat the same line verbatim.",
|
|
127
219
|
True
|
|
128
220
|
),
|
|
129
221
|
Option(
|
|
130
222
|
"presence_penalty",
|
|
131
223
|
["--presence-penalty"],
|
|
132
|
-
"
|
|
224
|
+
"Optional number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in "
|
|
133
225
|
"the text so far, increasing the model's likelihood to talk about new topics.",
|
|
134
226
|
True
|
|
135
227
|
),
|
|
228
|
+
Option(
|
|
229
|
+
"top_p",
|
|
230
|
+
["--top-p"],
|
|
231
|
+
"Optional float value for nucleus sampling, where the model considers tokens with top_p probability mass "
|
|
232
|
+
"(between 0 and 1). An alternative to temperature.",
|
|
233
|
+
True
|
|
234
|
+
),
|
|
235
|
+
Option(
|
|
236
|
+
"stop",
|
|
237
|
+
["--stop"],
|
|
238
|
+
"Optional string or JSON array of up to 4 sequences where the API will stop generating further tokens.",
|
|
239
|
+
True
|
|
240
|
+
),
|
|
241
|
+
Option(
|
|
242
|
+
"response_format",
|
|
243
|
+
["--response-format"],
|
|
244
|
+
"Optional JSON object specifying the output format, e.g., {\"type\": \"json_schema\", \"json_schema\": {...}} "
|
|
245
|
+
"for structured outputs.",
|
|
246
|
+
True
|
|
247
|
+
),
|
|
248
|
+
Option(
|
|
249
|
+
"tools",
|
|
250
|
+
["--tools"],
|
|
251
|
+
"Optional JSON array of tools (e.g., functions) the model may call.",
|
|
252
|
+
True
|
|
253
|
+
),
|
|
254
|
+
Option(
|
|
255
|
+
"tool_choice",
|
|
256
|
+
["--tool-choice"],
|
|
257
|
+
"Optional string (e.g., \"none\", \"auto\") or JSON object to control which tool is called.",
|
|
258
|
+
True
|
|
259
|
+
),
|
|
260
|
+
Option(
|
|
261
|
+
"logprobs",
|
|
262
|
+
["--logprobs"],
|
|
263
|
+
"Optional boolean to return log probabilities of output tokens. Possible values: 0: OFF; 1: ON",
|
|
264
|
+
True
|
|
265
|
+
),
|
|
266
|
+
Option(
|
|
267
|
+
"top_logprobs",
|
|
268
|
+
["--top-logprobs"],
|
|
269
|
+
"Optional integer (0-20) specifying the number of most likely tokens to return with log probabilities.",
|
|
270
|
+
True
|
|
271
|
+
),
|
|
272
|
+
Option(
|
|
273
|
+
"seed",
|
|
274
|
+
["--seed"],
|
|
275
|
+
"Optional integer for deterministic sampling (in Beta).",
|
|
276
|
+
True
|
|
277
|
+
),
|
|
278
|
+
Option(
|
|
279
|
+
"stream_options",
|
|
280
|
+
["--stream-options"],
|
|
281
|
+
"Optional JSON object for streaming options, e.g., {\"include_usage\": true}.",
|
|
282
|
+
True
|
|
283
|
+
),
|
|
284
|
+
Option(
|
|
285
|
+
"store",
|
|
286
|
+
["--store"],
|
|
287
|
+
"Optional boolean to store the output for model distillation or evals. Possible values: 0: OFF; 1: ON",
|
|
288
|
+
True
|
|
289
|
+
),
|
|
290
|
+
Option(
|
|
291
|
+
"metadata",
|
|
292
|
+
["--metadata"],
|
|
293
|
+
"Optional JSON object with up to 16 key-value pairs to attach to the object.",
|
|
294
|
+
True
|
|
295
|
+
),
|
|
296
|
+
Option(
|
|
297
|
+
"user",
|
|
298
|
+
["--user"],
|
|
299
|
+
"Optional string identifier for the end-user to monitor abuse.",
|
|
300
|
+
True
|
|
301
|
+
),
|
|
302
|
+
Option(
|
|
303
|
+
"reasoning_effort",
|
|
304
|
+
["--reasoning-effort"],
|
|
305
|
+
"Optional string to control the depth of reasoning applied by supported models. "
|
|
306
|
+
"Possible values: 'low', 'medium', 'high'. Supported by OpenAI models from version 5, "
|
|
307
|
+
"Claude models from version 4.1, and Gemini models from version 2.0.",
|
|
308
|
+
True
|
|
309
|
+
),
|
|
310
|
+
]
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
def chat_with_iris():
|
|
314
|
+
iris = Iris()
|
|
315
|
+
messages = list()
|
|
316
|
+
|
|
317
|
+
history = InMemoryHistory()
|
|
318
|
+
session = PromptSession(">> Ask Iris: ", history=history)
|
|
319
|
+
|
|
320
|
+
Console.write_stdout(f"#=================================================#")
|
|
321
|
+
Console.write_stdout(f"#--------------------- IRIS ----------------------#")
|
|
322
|
+
Console.write_stdout(f"#=================================================#")
|
|
323
|
+
Console.write_stdout(f"# This is the start of your conversation with Iris. Type 'exit' or press Ctrl+C to close the chat.\n")
|
|
324
|
+
Console.write_stdout("""- Iris: Hello! I'm Iris. I'll guide you step by step to create your agent.
|
|
325
|
+
First, we need to define some key details for your agent. You can specify its role and purpose or give it a name, and I'll help you set up the rest. Once we have that, we'll refine its knowledge and behavior.""")
|
|
326
|
+
try:
|
|
327
|
+
while (user_input := session.prompt()) != "exit":
|
|
328
|
+
Console.write_stdout(f"- User: {user_input}")
|
|
329
|
+
new_message = {
|
|
330
|
+
"role": "user",
|
|
331
|
+
"content": user_input
|
|
332
|
+
}
|
|
333
|
+
messages.append(new_message)
|
|
334
|
+
|
|
335
|
+
result = iris.stream_answer(messages)
|
|
336
|
+
answer = ""
|
|
337
|
+
Console.write_stdout("- Iris: ")
|
|
338
|
+
for chunk in result:
|
|
339
|
+
answer += chunk
|
|
340
|
+
Console.write_stdout(f"{chunk}", end="")
|
|
341
|
+
sys.stdout.flush()
|
|
342
|
+
Console.write_stdout()
|
|
343
|
+
|
|
344
|
+
new_answer = {
|
|
345
|
+
"role": "assistant",
|
|
346
|
+
"content": answer
|
|
347
|
+
}
|
|
348
|
+
messages.append(new_answer)
|
|
349
|
+
except KeyboardInterrupt:
|
|
350
|
+
print("\nExiting chat...")
|
|
351
|
+
sys.exit(0)
|
|
352
|
+
|
|
353
|
+
except Exception as e:
|
|
354
|
+
logger.error(f"Error chatting with Iris: {e}")
|
|
355
|
+
Console.write_stderr("An unexpected error has occurred. Please contact the developers.")
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
def chat_with_agent(option_list: list):
|
|
359
|
+
agent_name = None
|
|
360
|
+
use_gui = False
|
|
361
|
+
save_session_file = None
|
|
362
|
+
restore_session_file = None
|
|
363
|
+
for option_flag, option_arg in option_list:
|
|
364
|
+
if option_flag.name == "agent_name":
|
|
365
|
+
agent_name = option_arg
|
|
366
|
+
if option_flag.name == "gui":
|
|
367
|
+
use_gui = True
|
|
368
|
+
if option_flag.name == "save_session":
|
|
369
|
+
save_session_file = option_arg
|
|
370
|
+
if option_flag.name == "restore_session":
|
|
371
|
+
restore_session_file = option_arg
|
|
372
|
+
|
|
373
|
+
if not agent_name:
|
|
374
|
+
raise MissingRequirementException(f"Agent name must be specified.")
|
|
375
|
+
|
|
376
|
+
project_id = get_project_id()
|
|
377
|
+
agent_data = AgentClient(project_id=project_id).get_agent(agent_id=agent_name)
|
|
378
|
+
if 'errors' in agent_data:
|
|
379
|
+
raise InvalidAgentException(f"There is no agent with that name: {agent_data.get('errors')}")
|
|
380
|
+
|
|
381
|
+
if use_gui:
|
|
382
|
+
try:
|
|
383
|
+
import streamlit
|
|
384
|
+
except ImportError:
|
|
385
|
+
logger.error("Streamlit not installed")
|
|
386
|
+
Console.write_stderr("Streamlit is required for GUI mode. Install it with 'pip install streamlit'.")
|
|
387
|
+
sys.exit(1)
|
|
388
|
+
|
|
389
|
+
try:
|
|
390
|
+
ui_path = resources.files("pygeai.chat").joinpath("ui.py")
|
|
391
|
+
ui_file_path = str(ui_path)
|
|
392
|
+
|
|
393
|
+
# Add the top-level project root to PYTHONPATH
|
|
394
|
+
package_root = str(Path(ui_file_path).resolve().parents[2])
|
|
395
|
+
env = os.environ.copy()
|
|
396
|
+
env["PYTHONPATH"] = package_root + os.pathsep + env.get("PYTHONPATH", "")
|
|
397
|
+
|
|
398
|
+
streamlit_cmd = [
|
|
399
|
+
sys.executable, "-m", "streamlit", "run", ui_file_path,
|
|
400
|
+
"--server.address", "127.0.0.1",
|
|
401
|
+
"--", "--agent-name", agent_name
|
|
402
|
+
]
|
|
403
|
+
|
|
404
|
+
if platform.system() == "Linux":
|
|
405
|
+
streamlit_cmd.insert(5, "--server.headless=true")
|
|
406
|
+
|
|
407
|
+
process = subprocess.Popen(
|
|
408
|
+
streamlit_cmd,
|
|
409
|
+
stdout=subprocess.PIPE,
|
|
410
|
+
stderr=subprocess.PIPE,
|
|
411
|
+
text=True
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
url = "http://localhost:8501"
|
|
415
|
+
if platform.system() == "Linux":
|
|
416
|
+
Console.write_stdout(f"Open Streamlit app at {url} (or next port like 8502 if 8501 is taken)")
|
|
417
|
+
|
|
418
|
+
try:
|
|
419
|
+
stdout, stderr = process.communicate()
|
|
420
|
+
if stderr:
|
|
421
|
+
logger.error(f"Streamlit stderr:\n{stderr}")
|
|
422
|
+
Console.write_stderr(f"Streamlit error:\n{stderr}")
|
|
423
|
+
except KeyboardInterrupt:
|
|
424
|
+
process.terminate()
|
|
425
|
+
Console.write_stdout("Streamlit stopped.")
|
|
426
|
+
sys.exit(0)
|
|
427
|
+
|
|
428
|
+
except FileNotFoundError:
|
|
429
|
+
logger.error("Could not locate pygeai/chat/ui.py")
|
|
430
|
+
Console.write_stderr("Streamlit UI file not found. Ensure pygeai is installed correctly.")
|
|
431
|
+
sys.exit(1)
|
|
432
|
+
except Exception as e:
|
|
433
|
+
logger.error(f"Streamlit error: {e}")
|
|
434
|
+
Console.write_stderr(
|
|
435
|
+
f"Failed to launch Streamlit. Check port with 'lsof -i :8501' and kill any process, or try {url}.")
|
|
436
|
+
sys.exit(1)
|
|
437
|
+
else:
|
|
438
|
+
chat_session = AgentChatSession(agent_name)
|
|
439
|
+
messages = list()
|
|
440
|
+
|
|
441
|
+
# Restore session if specified
|
|
442
|
+
if restore_session_file:
|
|
443
|
+
try:
|
|
444
|
+
with open(restore_session_file, 'r') as f:
|
|
445
|
+
restored_data = json.load(f)
|
|
446
|
+
if isinstance(restored_data, list):
|
|
447
|
+
messages = restored_data
|
|
448
|
+
Console.write_stdout(f"Restored conversation from {restore_session_file}")
|
|
449
|
+
# Display restored conversation history
|
|
450
|
+
Console.write_stdout(f"#=================================================#")
|
|
451
|
+
Console.write_stdout(f"# CHAT SESSION WITH {agent_name} ")
|
|
452
|
+
Console.write_stdout(f"#=================================================#")
|
|
453
|
+
for msg in messages:
|
|
454
|
+
role = msg.get("role", "unknown")
|
|
455
|
+
content = msg.get("content", "")
|
|
456
|
+
if role == "assistant":
|
|
457
|
+
Console.write_stdout(f"- Agent: {content}")
|
|
458
|
+
elif role == "user":
|
|
459
|
+
Console.write_stdout(f"- User: {content}")
|
|
460
|
+
else:
|
|
461
|
+
raise WrongArgumentError("Session file must contain a list of messages in JSON format.")
|
|
462
|
+
except FileNotFoundError:
|
|
463
|
+
logger.error(f"Session file {restore_session_file} not found.")
|
|
464
|
+
Console.write_stderr(f"Session file {restore_session_file} not found. Starting a new conversation.")
|
|
465
|
+
except json.JSONDecodeError:
|
|
466
|
+
logger.error(f"Invalid JSON format in {restore_session_file}.")
|
|
467
|
+
Console.write_stderr(f"Invalid JSON format in {restore_session_file}. Starting a new conversation.")
|
|
468
|
+
except Exception as e:
|
|
469
|
+
logger.error(f"Error restoring session: {e}")
|
|
470
|
+
Console.write_stderr(f"Error restoring session from {restore_session_file}. Starting a new conversation.")
|
|
471
|
+
|
|
472
|
+
# If no session was restored or messages are empty, get the agent's introduction
|
|
473
|
+
if not messages:
|
|
474
|
+
introduction_message = chat_session.get_answer(
|
|
475
|
+
["You're about to speak to a user. Introduce yourself in a clear and concise manner, "
|
|
476
|
+
"stating who you are and what you do. Nothing else."]
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
if "Agent not found" in str(introduction_message):
|
|
480
|
+
raise WrongArgumentError(
|
|
481
|
+
"The specified agent doesn't seem to exist. Please review the name and try again.")
|
|
482
|
+
|
|
483
|
+
Console.write_stdout(f"#=================================================#")
|
|
484
|
+
Console.write_stdout(f"# CHAT SESSION WITH {agent_name} ")
|
|
485
|
+
Console.write_stdout(f"#=================================================#")
|
|
486
|
+
Console.write_stdout(introduction_message)
|
|
487
|
+
messages.append({"role": "assistant", "content": introduction_message})
|
|
488
|
+
|
|
489
|
+
history = InMemoryHistory()
|
|
490
|
+
session = PromptSession(f">> Ask {agent_name}: ", history=history)
|
|
491
|
+
|
|
492
|
+
# Save session function
|
|
493
|
+
def save_session(messages, file_path):
|
|
494
|
+
try:
|
|
495
|
+
with open(file_path, 'w') as f:
|
|
496
|
+
json.dump(messages, f, indent=2)
|
|
497
|
+
logger.info(f"Session saved to {file_path}")
|
|
498
|
+
except Exception as e:
|
|
499
|
+
logger.error(f"Error saving session to {file_path}: {e}")
|
|
500
|
+
Console.write_stderr(f"Failed to save session to {file_path}: {e}")
|
|
501
|
+
|
|
502
|
+
try:
|
|
503
|
+
while (user_input := session.prompt()) != "exit":
|
|
504
|
+
Console.write_stdout(f"- User: {user_input}")
|
|
505
|
+
new_message = {
|
|
506
|
+
"role": "user",
|
|
507
|
+
"content": user_input
|
|
508
|
+
}
|
|
509
|
+
messages.append(new_message)
|
|
510
|
+
|
|
511
|
+
# Save session after user input if specified
|
|
512
|
+
if save_session_file:
|
|
513
|
+
save_session(messages, save_session_file)
|
|
514
|
+
|
|
515
|
+
result = chat_session.stream_answer(messages)
|
|
516
|
+
answer = ""
|
|
517
|
+
Console.write_stdout("- Agent: ")
|
|
518
|
+
for chunk in result:
|
|
519
|
+
answer += chunk
|
|
520
|
+
Console.write_stdout(f"{chunk}", end="")
|
|
521
|
+
sys.stdout.flush()
|
|
522
|
+
Console.write_stdout()
|
|
523
|
+
|
|
524
|
+
new_answer = {
|
|
525
|
+
"role": "assistant",
|
|
526
|
+
"content": answer
|
|
527
|
+
}
|
|
528
|
+
messages.append(new_answer)
|
|
529
|
+
|
|
530
|
+
# Save session after agent response if specified
|
|
531
|
+
if save_session_file:
|
|
532
|
+
save_session(messages, save_session_file)
|
|
533
|
+
|
|
534
|
+
except KeyboardInterrupt:
|
|
535
|
+
print("\nExiting chat...")
|
|
536
|
+
# Final save before exit if specified
|
|
537
|
+
if save_session_file:
|
|
538
|
+
save_session(messages, save_session_file)
|
|
539
|
+
sys.exit(0)
|
|
540
|
+
except WrongArgumentError as e:
|
|
541
|
+
Console.write_stderr(f"There was an error: {e}")
|
|
542
|
+
except Exception as e:
|
|
543
|
+
logger.error(f"Error chatting with Agent: {e}")
|
|
544
|
+
Console.write_stderr("An unexpected error has occurred. Please contact the developers.")
|
|
545
|
+
# Save session on error if specified
|
|
546
|
+
if save_session_file:
|
|
547
|
+
save_session(messages, save_session_file)
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
chat_with_agent_options = [
|
|
551
|
+
Option(
|
|
552
|
+
"agent_name",
|
|
553
|
+
["--agent-name", "--name", "-n"],
|
|
554
|
+
"You can use the internal name, public name and agent id in order to chat interactively with any agent",
|
|
555
|
+
True
|
|
556
|
+
),
|
|
557
|
+
Option(
|
|
558
|
+
"gui",
|
|
559
|
+
["--gui", "-g"],
|
|
560
|
+
"Launch a Streamlit GUI chat interface. No need to specify argument next to the option",
|
|
561
|
+
False
|
|
562
|
+
),
|
|
563
|
+
Option(
|
|
564
|
+
"save_session",
|
|
565
|
+
["--save-session", "--ss"],
|
|
566
|
+
"Save the conversation to a JSON file. Provide the file path as the argument.",
|
|
567
|
+
True
|
|
568
|
+
),
|
|
569
|
+
Option(
|
|
570
|
+
"restore_session",
|
|
571
|
+
["--restore-session", "--rs"],
|
|
572
|
+
"Restore a conversation from a JSON file. Provide the file path as the argument.",
|
|
573
|
+
True
|
|
574
|
+
),
|
|
575
|
+
]
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
def get_generate_image(option_list: list):
|
|
579
|
+
model = None
|
|
580
|
+
prompt = None
|
|
581
|
+
n = None
|
|
582
|
+
quality = None
|
|
583
|
+
size = None
|
|
584
|
+
aspect_ratio = None
|
|
585
|
+
|
|
586
|
+
for option_flag, option_arg in option_list:
|
|
587
|
+
if option_flag.name == "model":
|
|
588
|
+
model = option_arg
|
|
589
|
+
if option_flag.name == "prompt":
|
|
590
|
+
prompt = option_arg
|
|
591
|
+
if option_flag.name == "n":
|
|
592
|
+
try:
|
|
593
|
+
n = int(option_arg)
|
|
594
|
+
if n < 1 or n > 10:
|
|
595
|
+
raise WrongArgumentError("n must be an integer between 1 and 10.")
|
|
596
|
+
except ValueError:
|
|
597
|
+
raise WrongArgumentError("n must be a valid integer.")
|
|
598
|
+
if option_flag.name == "quality":
|
|
599
|
+
quality = option_arg
|
|
600
|
+
if option_flag.name == "size":
|
|
601
|
+
size = option_arg
|
|
602
|
+
if option_flag.name == "aspect_ratio":
|
|
603
|
+
aspect_ratio = option_arg
|
|
604
|
+
|
|
605
|
+
if not (model and prompt and n is not None and quality and size):
|
|
606
|
+
raise MissingRequirementException("Cannot generate image without specifying model, prompt, n, quality, and size.")
|
|
607
|
+
|
|
608
|
+
client = ChatClient()
|
|
609
|
+
try:
|
|
610
|
+
result = client.generate_image(
|
|
611
|
+
model=model,
|
|
612
|
+
prompt=prompt,
|
|
613
|
+
n=n,
|
|
614
|
+
quality=quality,
|
|
615
|
+
size=size,
|
|
616
|
+
aspect_ratio=aspect_ratio
|
|
617
|
+
)
|
|
618
|
+
Console.write_stdout(f"Image generation result: \n{result}\n")
|
|
619
|
+
except Exception as e:
|
|
620
|
+
logger.error(f"Error generating image: {e}")
|
|
621
|
+
Console.write_stderr(f"Failed to generate image: {e}")
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
generate_image_options = [
|
|
625
|
+
Option(
|
|
626
|
+
"model",
|
|
627
|
+
["--model", "-m"],
|
|
628
|
+
"The model specification for image generation, e.g., 'openai/gpt-image-1'.",
|
|
629
|
+
True
|
|
630
|
+
),
|
|
631
|
+
Option(
|
|
632
|
+
"prompt",
|
|
633
|
+
["--prompt", "-p"],
|
|
634
|
+
"Description of the desired image.",
|
|
635
|
+
True
|
|
636
|
+
),
|
|
637
|
+
Option(
|
|
638
|
+
"n",
|
|
639
|
+
["--n"],
|
|
640
|
+
"Number of images to generate (1-10, depending on the model).",
|
|
641
|
+
True
|
|
642
|
+
),
|
|
643
|
+
Option(
|
|
644
|
+
"quality",
|
|
645
|
+
["--quality", "-q"],
|
|
646
|
+
"Rendering quality, e.g., 'high'.",
|
|
647
|
+
True
|
|
648
|
+
),
|
|
649
|
+
Option(
|
|
650
|
+
"size",
|
|
651
|
+
["--size", "-s"],
|
|
652
|
+
"Image dimensions, e.g., '1024x1024'.",
|
|
653
|
+
True
|
|
654
|
+
),
|
|
655
|
+
Option(
|
|
656
|
+
"aspect_ratio",
|
|
657
|
+
["--aspect-ratio", "-ar"],
|
|
658
|
+
"Relationship between image’s width and height, e.g., '1:1', '9:16', '16:9', '3:4', '4:3'.",
|
|
659
|
+
True
|
|
660
|
+
),
|
|
661
|
+
]
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def get_edit_image(option_list: list):
|
|
665
|
+
model = None
|
|
666
|
+
prompt = None
|
|
667
|
+
image = None
|
|
668
|
+
size = None
|
|
669
|
+
n = 1
|
|
670
|
+
quality = None
|
|
136
671
|
|
|
672
|
+
for option_flag, option_arg in option_list:
|
|
673
|
+
if option_flag.name == "model":
|
|
674
|
+
model = option_arg
|
|
675
|
+
if option_flag.name == "prompt":
|
|
676
|
+
prompt = option_arg
|
|
677
|
+
if option_flag.name == "image":
|
|
678
|
+
image = option_arg
|
|
679
|
+
if option_flag.name == "size":
|
|
680
|
+
size = option_arg
|
|
681
|
+
if option_flag.name == "n":
|
|
682
|
+
try:
|
|
683
|
+
n = int(option_arg)
|
|
684
|
+
if n < 1 or n > 10:
|
|
685
|
+
raise WrongArgumentError("n must be an integer between 1 and 10.")
|
|
686
|
+
except ValueError:
|
|
687
|
+
raise WrongArgumentError("n must be a valid integer.")
|
|
688
|
+
if option_flag.name == "quality":
|
|
689
|
+
quality = option_arg
|
|
690
|
+
|
|
691
|
+
if not (model and prompt and image and size):
|
|
692
|
+
raise MissingRequirementException("Cannot edit image without specifying model, prompt, image, and size.")
|
|
693
|
+
|
|
694
|
+
client = ChatClient()
|
|
695
|
+
try:
|
|
696
|
+
result = client.edit_image(
|
|
697
|
+
model=model,
|
|
698
|
+
prompt=prompt,
|
|
699
|
+
image=image,
|
|
700
|
+
size=size,
|
|
701
|
+
n=n,
|
|
702
|
+
quality=quality
|
|
703
|
+
)
|
|
704
|
+
Console.write_stdout(f"Image editing result: \n{result}\n")
|
|
705
|
+
except Exception as e:
|
|
706
|
+
logger.error(f"Error editing image: {e}")
|
|
707
|
+
Console.write_stderr(f"Failed to edit image: {e}")
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
edit_image_options = [
|
|
711
|
+
Option(
|
|
712
|
+
"model",
|
|
713
|
+
["--model", "-m"],
|
|
714
|
+
"The model specification for image editing, e.g., 'openai/gpt-image-1'.",
|
|
715
|
+
True
|
|
716
|
+
),
|
|
717
|
+
Option(
|
|
718
|
+
"prompt",
|
|
719
|
+
["--prompt", "-p"],
|
|
720
|
+
"Description of the desired edit, e.g., 'remove the ball'.",
|
|
721
|
+
True
|
|
722
|
+
),
|
|
723
|
+
Option(
|
|
724
|
+
"image",
|
|
725
|
+
["--image", "-img"],
|
|
726
|
+
"URL of the image to be edited, e.g., 'https://example.com/image.jpg'.",
|
|
727
|
+
True
|
|
728
|
+
),
|
|
729
|
+
Option(
|
|
730
|
+
"size",
|
|
731
|
+
["--size", "-s"],
|
|
732
|
+
"Desired dimensions of the output image in pixels, e.g., '1024x1024'.",
|
|
733
|
+
True
|
|
734
|
+
),
|
|
735
|
+
Option(
|
|
736
|
+
"n",
|
|
737
|
+
["--n"],
|
|
738
|
+
"Number of edited images to generate (1-10, depending on the model). Default is 1.",
|
|
739
|
+
True
|
|
740
|
+
),
|
|
741
|
+
Option(
|
|
742
|
+
"quality",
|
|
743
|
+
["--quality", "-q"],
|
|
744
|
+
"Rendering quality, e.g., 'high', 'medium', 'low'.",
|
|
745
|
+
True
|
|
746
|
+
),
|
|
137
747
|
]
|
|
138
748
|
|
|
139
749
|
|
|
750
|
+
def get_response(option_list: list):
|
|
751
|
+
model = None
|
|
752
|
+
input_text = None
|
|
753
|
+
files = None
|
|
754
|
+
tools = None
|
|
755
|
+
tool_choice = None
|
|
756
|
+
temperature = None
|
|
757
|
+
max_output_tokens = None
|
|
758
|
+
top_p = None
|
|
759
|
+
metadata = None
|
|
760
|
+
user = None
|
|
761
|
+
instructions = None
|
|
762
|
+
reasoning = None
|
|
763
|
+
truncation = None
|
|
764
|
+
parallel_tool_calls = None
|
|
765
|
+
store = None
|
|
766
|
+
stream = False
|
|
767
|
+
|
|
768
|
+
for option_flag, option_arg in option_list:
|
|
769
|
+
if option_flag.name == "model":
|
|
770
|
+
model = option_arg
|
|
771
|
+
if option_flag.name == "input":
|
|
772
|
+
input_text = option_arg
|
|
773
|
+
if option_flag.name == "files":
|
|
774
|
+
try:
|
|
775
|
+
files = json.loads(option_arg) if option_arg else None
|
|
776
|
+
if files and not isinstance(files, list):
|
|
777
|
+
raise WrongArgumentError("files must be a JSON array of file paths")
|
|
778
|
+
except json.JSONDecodeError:
|
|
779
|
+
raise WrongArgumentError("files must be a valid JSON array")
|
|
780
|
+
if option_flag.name == "tools":
|
|
781
|
+
try:
|
|
782
|
+
tools = json.loads(option_arg) if option_arg else None
|
|
783
|
+
except json.JSONDecodeError:
|
|
784
|
+
raise WrongArgumentError("tools must be a valid JSON array")
|
|
785
|
+
if option_flag.name == "tool_choice":
|
|
786
|
+
try:
|
|
787
|
+
tool_choice = json.loads(option_arg) if option_arg else None
|
|
788
|
+
except json.JSONDecodeError:
|
|
789
|
+
tool_choice = option_arg
|
|
790
|
+
if option_flag.name == "temperature":
|
|
791
|
+
temperature = float(option_arg) if option_arg is not None else None
|
|
792
|
+
if option_flag.name == "max_output_tokens":
|
|
793
|
+
max_output_tokens = int(option_arg) if option_arg is not None else None
|
|
794
|
+
if option_flag.name == "top_p":
|
|
795
|
+
top_p = float(option_arg) if option_arg else None
|
|
796
|
+
if option_flag.name == "metadata":
|
|
797
|
+
try:
|
|
798
|
+
metadata = json.loads(option_arg) if option_arg else None
|
|
799
|
+
except json.JSONDecodeError:
|
|
800
|
+
raise WrongArgumentError("metadata must be a valid JSON object")
|
|
801
|
+
if option_flag.name == "user":
|
|
802
|
+
user = option_arg
|
|
803
|
+
if option_flag.name == "instructions":
|
|
804
|
+
instructions = option_arg
|
|
805
|
+
if option_flag.name == "reasoning":
|
|
806
|
+
try:
|
|
807
|
+
reasoning = json.loads(option_arg) if option_arg else None
|
|
808
|
+
except json.JSONDecodeError:
|
|
809
|
+
raise WrongArgumentError("reasoning must be a valid JSON object")
|
|
810
|
+
if option_flag.name == "truncation":
|
|
811
|
+
truncation = option_arg
|
|
812
|
+
if option_flag.name == "parallel_tool_calls":
|
|
813
|
+
parallel_tool_calls = get_boolean_value(option_arg) if option_arg else None
|
|
814
|
+
if option_flag.name == "store":
|
|
815
|
+
store = get_boolean_value(option_arg) if option_arg else None
|
|
816
|
+
if option_flag.name == "stream":
|
|
817
|
+
if option_arg:
|
|
818
|
+
stream = get_boolean_value(option_arg)
|
|
819
|
+
|
|
820
|
+
if not (model and input_text):
|
|
821
|
+
raise MissingRequirementException("Cannot get response without specifying model and input")
|
|
822
|
+
|
|
823
|
+
client = ChatClient()
|
|
824
|
+
try:
|
|
825
|
+
result = client.get_response(
|
|
826
|
+
model=model,
|
|
827
|
+
input=input_text,
|
|
828
|
+
files=files,
|
|
829
|
+
tools=tools,
|
|
830
|
+
tool_choice=tool_choice,
|
|
831
|
+
temperature=temperature,
|
|
832
|
+
max_output_tokens=max_output_tokens,
|
|
833
|
+
top_p=top_p,
|
|
834
|
+
metadata=metadata,
|
|
835
|
+
user=user,
|
|
836
|
+
instructions=instructions,
|
|
837
|
+
reasoning=reasoning,
|
|
838
|
+
truncation=truncation,
|
|
839
|
+
parallel_tool_calls=parallel_tool_calls,
|
|
840
|
+
store=store,
|
|
841
|
+
stream=stream
|
|
842
|
+
)
|
|
843
|
+
if stream:
|
|
844
|
+
Console.write_stdout("Streaming response:")
|
|
845
|
+
for chunk in result:
|
|
846
|
+
Console.write_stdout(f"{chunk}", end="")
|
|
847
|
+
sys.stdout.flush()
|
|
848
|
+
Console.write_stdout()
|
|
849
|
+
else:
|
|
850
|
+
Console.write_stdout(f"Response result: \n{json.dumps(result, indent=2)}\n")
|
|
851
|
+
except Exception as e:
|
|
852
|
+
logger.error(f"Error getting response: {e}")
|
|
853
|
+
Console.write_stderr(f"Failed to get response: {e}")
|
|
854
|
+
|
|
855
|
+
|
|
856
|
+
response_options = [
|
|
857
|
+
Option(
|
|
858
|
+
"model",
|
|
859
|
+
["--model", "-m"],
|
|
860
|
+
"The model specification, e.g., 'openai/o1-pro'.",
|
|
861
|
+
True
|
|
862
|
+
),
|
|
863
|
+
Option(
|
|
864
|
+
"input",
|
|
865
|
+
["--input", "-i"],
|
|
866
|
+
"The user input text.",
|
|
867
|
+
True
|
|
868
|
+
),
|
|
869
|
+
Option(
|
|
870
|
+
"files",
|
|
871
|
+
["--files", "-f"],
|
|
872
|
+
"JSON array of file paths (images or PDFs) to include in the request, e.g., '[\"image.jpg\", \"doc.pdf\"]'.",
|
|
873
|
+
True
|
|
874
|
+
),
|
|
875
|
+
Option(
|
|
876
|
+
"tools",
|
|
877
|
+
["--tools"],
|
|
878
|
+
"Optional JSON array of tools (e.g., functions) the model may call.",
|
|
879
|
+
True
|
|
880
|
+
),
|
|
881
|
+
Option(
|
|
882
|
+
"tool_choice",
|
|
883
|
+
["--tool-choice"],
|
|
884
|
+
"Optional string (e.g., \"none\", \"auto\") or JSON object to control which tool is called.",
|
|
885
|
+
True
|
|
886
|
+
),
|
|
887
|
+
Option(
|
|
888
|
+
"temperature",
|
|
889
|
+
["--temperature", "--temp"],
|
|
890
|
+
"Float value to set randomness of the response (between 0 and 2).",
|
|
891
|
+
True
|
|
892
|
+
),
|
|
893
|
+
Option(
|
|
894
|
+
"max_output_tokens",
|
|
895
|
+
["--max-output-tokens"],
|
|
896
|
+
"Integer value to set max tokens in the output.",
|
|
897
|
+
True
|
|
898
|
+
),
|
|
899
|
+
Option(
|
|
900
|
+
"top_p",
|
|
901
|
+
["--top-p"],
|
|
902
|
+
"Optional float value for nucleus sampling (between 0 and 1).",
|
|
903
|
+
True
|
|
904
|
+
),
|
|
905
|
+
Option(
|
|
906
|
+
"metadata",
|
|
907
|
+
["--metadata"],
|
|
908
|
+
"Optional JSON object with up to 16 key-value pairs to attach to the object.",
|
|
909
|
+
True
|
|
910
|
+
),
|
|
911
|
+
Option(
|
|
912
|
+
"user",
|
|
913
|
+
["--user"],
|
|
914
|
+
"Optional string identifier for the end-user.",
|
|
915
|
+
True
|
|
916
|
+
),
|
|
917
|
+
Option(
|
|
918
|
+
"instructions",
|
|
919
|
+
["--instructions"],
|
|
920
|
+
"Optional additional instructions for the model.",
|
|
921
|
+
True
|
|
922
|
+
),
|
|
923
|
+
Option(
|
|
924
|
+
"reasoning",
|
|
925
|
+
["--reasoning"],
|
|
926
|
+
"Optional JSON object for reasoning configuration, e.g., {\"effort\": \"medium\"}.",
|
|
927
|
+
True
|
|
928
|
+
),
|
|
929
|
+
Option(
|
|
930
|
+
"truncation",
|
|
931
|
+
["--truncation"],
|
|
932
|
+
"Optional truncation strategy, e.g., \"disabled\".",
|
|
933
|
+
True
|
|
934
|
+
),
|
|
935
|
+
Option(
|
|
936
|
+
"parallel_tool_calls",
|
|
937
|
+
["--parallel-tool-calls"],
|
|
938
|
+
"Optional boolean to enable parallel tool calls. Possible values: 0: OFF; 1: ON",
|
|
939
|
+
True
|
|
940
|
+
),
|
|
941
|
+
Option(
|
|
942
|
+
"store",
|
|
943
|
+
["--store"],
|
|
944
|
+
"Optional boolean to store the output. Possible values: 0: OFF; 1: ON",
|
|
945
|
+
True
|
|
946
|
+
),
|
|
947
|
+
Option(
|
|
948
|
+
"stream",
|
|
949
|
+
["--stream"],
|
|
950
|
+
"Whether to stream the response. Possible values: 0: OFF; 1: ON",
|
|
951
|
+
True
|
|
952
|
+
),
|
|
953
|
+
]
|
|
954
|
+
|
|
140
955
|
chat_commands = [
|
|
141
956
|
Command(
|
|
142
957
|
"help",
|
|
143
958
|
["help", "h"],
|
|
144
959
|
"Display help text",
|
|
145
|
-
|
|
960
|
+
show_help,
|
|
146
961
|
ArgumentsEnum.NOT_AVAILABLE,
|
|
147
962
|
[],
|
|
148
963
|
[]
|
|
@@ -156,4 +971,50 @@ chat_commands = [
|
|
|
156
971
|
[],
|
|
157
972
|
chat_completion_options
|
|
158
973
|
),
|
|
974
|
+
Command(
|
|
975
|
+
"iris",
|
|
976
|
+
["iris"],
|
|
977
|
+
"Interactive chat with Iris",
|
|
978
|
+
chat_with_iris,
|
|
979
|
+
ArgumentsEnum.NOT_AVAILABLE,
|
|
980
|
+
[],
|
|
981
|
+
[]
|
|
982
|
+
),
|
|
983
|
+
Command(
|
|
984
|
+
"agent",
|
|
985
|
+
["agent"],
|
|
986
|
+
"Interactive chat with Agent",
|
|
987
|
+
chat_with_agent,
|
|
988
|
+
ArgumentsEnum.REQUIRED,
|
|
989
|
+
[],
|
|
990
|
+
chat_with_agent_options
|
|
991
|
+
),
|
|
992
|
+
Command(
|
|
993
|
+
"generate_image",
|
|
994
|
+
["generate-image", "gen-img"],
|
|
995
|
+
"Generate an image using the specified model and parameters",
|
|
996
|
+
get_generate_image,
|
|
997
|
+
ArgumentsEnum.REQUIRED,
|
|
998
|
+
[],
|
|
999
|
+
generate_image_options
|
|
1000
|
+
),
|
|
1001
|
+
Command(
|
|
1002
|
+
"edit_image",
|
|
1003
|
+
["edit-image", "edit-img"],
|
|
1004
|
+
"Edit an existing image using the specified model and parameters",
|
|
1005
|
+
get_edit_image,
|
|
1006
|
+
ArgumentsEnum.REQUIRED,
|
|
1007
|
+
[],
|
|
1008
|
+
edit_image_options
|
|
1009
|
+
),
|
|
1010
|
+
Command(
|
|
1011
|
+
"response",
|
|
1012
|
+
["response", "resp"],
|
|
1013
|
+
"Get a response using the Responses API with support for images and PDFs",
|
|
1014
|
+
get_response,
|
|
1015
|
+
ArgumentsEnum.REQUIRED,
|
|
1016
|
+
[],
|
|
1017
|
+
response_options
|
|
1018
|
+
),
|
|
1019
|
+
|
|
159
1020
|
]
|