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.
- 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/assistant/managers.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from typing import Any
|
|
2
|
-
import
|
|
2
|
+
from pygeai import logger
|
|
3
3
|
from pygeai.assistant.clients import AssistantClient
|
|
4
4
|
from pygeai.assistant.rag.clients import RAGAssistantClient
|
|
5
5
|
from pygeai.assistant.rag.mappers import RAGAssistantMapper
|
|
@@ -15,12 +15,12 @@ from pygeai.core.feedback.models import FeedbackRequest
|
|
|
15
15
|
from pygeai.core.responses import NewAssistantResponse, ChatResponse
|
|
16
16
|
from pygeai.chat.clients import ChatClient
|
|
17
17
|
from pygeai.assistant.rag.models import RAGAssistant, Document, UploadDocument
|
|
18
|
-
from pygeai.core.common.exceptions import MissingRequirementException
|
|
18
|
+
from pygeai.core.common.exceptions import MissingRequirementException, APIError
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class AssistantManager:
|
|
22
22
|
|
|
23
|
-
def __init__(self, api_key: str = None, base_url: str = None, alias: str =
|
|
23
|
+
def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
|
|
24
24
|
self.__assistant_client = AssistantClient(api_key, base_url, alias)
|
|
25
25
|
self.__chat_client = ChatClient(api_key, base_url, alias)
|
|
26
26
|
self.__rag_client = RAGAssistantClient(api_key, base_url, alias)
|
|
@@ -68,25 +68,25 @@ class AssistantManager:
|
|
|
68
68
|
Retrieves detailed data for a specific assistant.
|
|
69
69
|
|
|
70
70
|
This method calls `AssistantClient.get_assistant_data` to fetch assistant details
|
|
71
|
-
and maps the response using `AssistantResponseMapper.
|
|
72
|
-
|
|
73
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
71
|
+
and maps the response using `AssistantResponseMapper.map_to_assistant_response`.
|
|
74
72
|
|
|
75
73
|
:param assistant_id: str - The unique identifier of the assistant to retrieve.
|
|
76
74
|
:param detail: str, optional - The level of detail to include in the response. Possible values:
|
|
77
75
|
- "summary": Provides a summarized response. (Default)
|
|
78
76
|
- "full": Provides detailed assistant data.
|
|
79
|
-
:return:
|
|
77
|
+
:return: Assistant - The mapped response containing assistant details.
|
|
78
|
+
:raises APIError: If the API returns errors.
|
|
80
79
|
"""
|
|
81
80
|
response_data = self.__assistant_client.get_assistant_data(
|
|
82
81
|
assistant_id=assistant_id,
|
|
83
82
|
detail=detail
|
|
84
83
|
)
|
|
85
84
|
if ErrorHandler.has_errors(response_data):
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
error = ErrorHandler.extract_error(response_data)
|
|
86
|
+
logger.error(f"Error received while retrieving assistant data by ID: {error}")
|
|
87
|
+
raise APIError(f"Error received while retrieving assistant data by ID: {error}")
|
|
89
88
|
|
|
89
|
+
result = AssistantResponseMapper.map_to_assistant_response(response_data)
|
|
90
90
|
return result
|
|
91
91
|
|
|
92
92
|
def _get_assistant_data_by_name(self, assistant_name: str) -> RAGAssistant:
|
|
@@ -96,19 +96,19 @@ class AssistantManager:
|
|
|
96
96
|
This method calls `RAGAssistantClient.get_assistant_data` to fetch assistant details
|
|
97
97
|
and maps the response using `RAGAssistantMapper.map_to_rag_assistant`.
|
|
98
98
|
|
|
99
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
100
|
-
|
|
101
99
|
:param assistant_name: str - The name of the assistant to retrieve.
|
|
102
|
-
:return: RAGAssistant - The mapped response containing assistant details
|
|
100
|
+
:return: RAGAssistant - The mapped response containing assistant details.
|
|
101
|
+
:raises APIError: If the API returns errors.
|
|
103
102
|
"""
|
|
104
103
|
response_data = self.__rag_client.get_assistant_data(
|
|
105
104
|
name=assistant_name
|
|
106
105
|
)
|
|
107
106
|
if ErrorHandler.has_errors(response_data):
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
error = ErrorHandler.extract_error(response_data)
|
|
108
|
+
logger.error(f"Error received while retrieving assistant data by name: {error}")
|
|
109
|
+
raise APIError(f"Error received while retrieving assistant data by name: {error}")
|
|
111
110
|
|
|
111
|
+
result = RAGAssistantMapper.map_to_rag_assistant(response_data)
|
|
112
112
|
return result
|
|
113
113
|
|
|
114
114
|
def create_assistant(
|
|
@@ -141,26 +141,46 @@ class AssistantManager:
|
|
|
141
141
|
self,
|
|
142
142
|
assistant: Assistant
|
|
143
143
|
) -> NewAssistantResponse:
|
|
144
|
+
"""
|
|
145
|
+
Creates a new chat assistant.
|
|
146
|
+
|
|
147
|
+
This method calls `AssistantClient.create_assistant` to create a new assistant
|
|
148
|
+
and maps the response using `AssistantResponseMapper.map_to_assistant_created_response`.
|
|
149
|
+
|
|
150
|
+
:param assistant: Assistant - The assistant instance to be created.
|
|
151
|
+
:return: NewAssistantResponse - The mapped response containing the created assistant details.
|
|
152
|
+
:raises APIError: If the API returns errors.
|
|
153
|
+
"""
|
|
144
154
|
response_data = self.__assistant_client.create_assistant(
|
|
145
155
|
assistant_type=assistant.type,
|
|
146
156
|
name=assistant.name,
|
|
147
157
|
prompt=assistant.prompt,
|
|
148
158
|
description=assistant.description,
|
|
149
|
-
llm_settings=assistant.llm_settings.to_dict(),
|
|
150
|
-
welcome_data=assistant.welcome_data.to_dict()
|
|
159
|
+
llm_settings=assistant.llm_settings.to_dict() if assistant.llm_settings else None,
|
|
160
|
+
welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
|
|
151
161
|
)
|
|
152
162
|
if ErrorHandler.has_errors(response_data):
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
163
|
+
error = ErrorHandler.extract_error(response_data)
|
|
164
|
+
logger.error(f"Error received while creating chat assistant: {error}")
|
|
165
|
+
raise APIError(f"Error received while creating chat assistant: {error}")
|
|
156
166
|
|
|
167
|
+
result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
|
|
157
168
|
return result
|
|
158
169
|
|
|
159
170
|
def _create_rag_assistant(
|
|
160
171
|
self,
|
|
161
172
|
assistant: RAGAssistant
|
|
162
173
|
) -> RAGAssistant:
|
|
174
|
+
"""
|
|
175
|
+
Creates a new RAG assistant.
|
|
176
|
+
|
|
177
|
+
This method calls `RAGAssistantClient.create_assistant` to create a new assistant
|
|
178
|
+
and maps the response using `RAGAssistantMapper.map_to_rag_assistant`.
|
|
163
179
|
|
|
180
|
+
:param assistant: RAGAssistant - The assistant instance to be created.
|
|
181
|
+
:return: RAGAssistant - The mapped response containing the created assistant details.
|
|
182
|
+
:raises APIError: If the API returns errors.
|
|
183
|
+
"""
|
|
164
184
|
response_data = self.__rag_client.create_assistant(
|
|
165
185
|
name=assistant.name,
|
|
166
186
|
description=assistant.description,
|
|
@@ -170,16 +190,27 @@ class AssistantManager:
|
|
|
170
190
|
welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
|
|
171
191
|
)
|
|
172
192
|
if ErrorHandler.has_errors(response_data):
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
193
|
+
error = ErrorHandler.extract_error(response_data)
|
|
194
|
+
logger.error(f"Error received while creating RAG assistant: {error}")
|
|
195
|
+
raise APIError(f"Error received while creating RAG assistant: {error}")
|
|
176
196
|
|
|
197
|
+
result = RAGAssistantMapper.map_to_rag_assistant(response_data)
|
|
177
198
|
return result
|
|
178
199
|
|
|
179
200
|
def _create_chat_with_data_assistant(
|
|
180
201
|
self,
|
|
181
202
|
assistant: ChatWithDataAssistant
|
|
182
203
|
) -> NewAssistantResponse:
|
|
204
|
+
"""
|
|
205
|
+
Creates a new chat with data assistant.
|
|
206
|
+
|
|
207
|
+
This method calls `AssistantClient.create_assistant` to create a new assistant
|
|
208
|
+
and maps the response using `AssistantResponseMapper.map_to_assistant_created_response`.
|
|
209
|
+
|
|
210
|
+
:param assistant: ChatWithDataAssistant - The assistant instance to be created.
|
|
211
|
+
:return: NewAssistantResponse - The mapped response containing the created assistant details.
|
|
212
|
+
:raises APIError: If the API returns errors.
|
|
213
|
+
"""
|
|
183
214
|
response_data = self.__assistant_client.create_assistant(
|
|
184
215
|
assistant_type=assistant.type,
|
|
185
216
|
name=assistant.name,
|
|
@@ -189,10 +220,11 @@ class AssistantManager:
|
|
|
189
220
|
welcome_data=assistant.welcome_data.to_dict()
|
|
190
221
|
)
|
|
191
222
|
if ErrorHandler.has_errors(response_data):
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
223
|
+
error = ErrorHandler.extract_error(response_data)
|
|
224
|
+
logger.error(f"Error received while creating chat with data assistant: {error}")
|
|
225
|
+
raise APIError(f"Error received while creating chat with data assistant: {error}")
|
|
195
226
|
|
|
227
|
+
result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
|
|
196
228
|
return result
|
|
197
229
|
|
|
198
230
|
def update_assistant(
|
|
@@ -202,25 +234,25 @@ class AssistantManager:
|
|
|
202
234
|
revision_id: str = None
|
|
203
235
|
) -> Any:
|
|
204
236
|
"""
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
237
|
+
Updates an assistant based on its type.
|
|
238
|
+
|
|
239
|
+
This method determines the assistant type and delegates the update process accordingly:
|
|
240
|
+
- Calls `_update_chat_assistant` for `TextAssistant` or `ChatAssistant`.
|
|
241
|
+
- Calls `_update_rag_assistant` for `RAGAssistant`.
|
|
242
|
+
|
|
243
|
+
:param assistant: Assistant - The assistant instance to be updated.
|
|
244
|
+
:param action: str, optional - The type of update action for chat-based assistants. Options:
|
|
245
|
+
- "save": Updates an existing revision (requires `revision_id`).
|
|
246
|
+
- "saveNewRevision" (default): Creates and saves a new revision.
|
|
247
|
+
- "savePublishNewRevision": Creates, saves, and publishes a new revision.
|
|
248
|
+
:param revision_id: str, optional - The ID of the existing revision to update.
|
|
249
|
+
Required if `action` is "save". Must be None for "saveNewRevision" or "savePublishNewRevision".
|
|
250
|
+
:return: Any - The updated assistant instance or an error response if the update fails.
|
|
251
|
+
:raises ValueError: If `action` is not a valid option.
|
|
252
|
+
:raises MissingRequirementException:
|
|
253
|
+
- If `action` is "save" and `revision_id` is not provided.
|
|
254
|
+
- If `revision_id` is provided for "saveNewRevision" or "savePublishNewRevision".
|
|
255
|
+
"""
|
|
224
256
|
if isinstance(assistant, TextAssistant) or isinstance(assistant, ChatAssistant):
|
|
225
257
|
return self._update_chat_assistant(assistant=assistant, action=action, revision_id=revision_id)
|
|
226
258
|
elif isinstance(assistant, RAGAssistant):
|
|
@@ -229,16 +261,14 @@ class AssistantManager:
|
|
|
229
261
|
def _update_chat_assistant(
|
|
230
262
|
self,
|
|
231
263
|
assistant: Assistant,
|
|
232
|
-
action: str = "saveNewRevision",
|
|
264
|
+
action: str = "saveNewRevision",
|
|
233
265
|
revision_id: str = None
|
|
234
266
|
) -> NewAssistantResponse:
|
|
235
267
|
"""
|
|
236
268
|
Updates an assistant with a specified action.
|
|
237
269
|
|
|
238
|
-
This method calls `AssistantClient.update_assistant` to update the assistant
|
|
239
|
-
using `AssistantResponseMapper.map_to_assistant_created_response`.
|
|
240
|
-
|
|
241
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
270
|
+
This method calls `AssistantClient.update_assistant` to update the assistant
|
|
271
|
+
and maps the response using `AssistantResponseMapper.map_to_assistant_created_response`.
|
|
242
272
|
|
|
243
273
|
:param assistant: Assistant - The assistant instance containing updated details.
|
|
244
274
|
:param action: str - The type of update action. Options:
|
|
@@ -247,11 +277,12 @@ class AssistantManager:
|
|
|
247
277
|
- "savePublishNewRevision": Creates, saves, and publishes a new revision.
|
|
248
278
|
:param revision_id: str, optional - The ID of the existing revision to update.
|
|
249
279
|
Required if `action` is "save". Must be None for "saveNewRevision" or "savePublishNewRevision".
|
|
250
|
-
:return: NewAssistantResponse - A response object containing the updated assistant details
|
|
280
|
+
:return: NewAssistantResponse - A response object containing the updated assistant details.
|
|
251
281
|
:raises ValueError: If `action` is not one of the valid options.
|
|
252
282
|
:raises MissingRequirementException:
|
|
253
283
|
- If `action` is "save" and `revision_id` is not provided.
|
|
254
284
|
- If `revision_id` is provided for "saveNewRevision" or "savePublishNewRevision".
|
|
285
|
+
:raises APIError: If the API returns errors.
|
|
255
286
|
"""
|
|
256
287
|
if action not in ["save", "saveNewRevision", "savePublishNewRevision"]:
|
|
257
288
|
raise ValueError("Valid actions are: 'save', 'saveNewRevision', 'savePublishNewRevision'")
|
|
@@ -266,6 +297,11 @@ class AssistantManager:
|
|
|
266
297
|
"Assistant prompt is required if revisionId is specified or in case of actions saveNewRevision and savePublishNewRevision"
|
|
267
298
|
)
|
|
268
299
|
|
|
300
|
+
if not assistant.id:
|
|
301
|
+
raise MissingRequirementException(
|
|
302
|
+
"Assistant must have a valid ID in order to be able to be updated."
|
|
303
|
+
)
|
|
304
|
+
|
|
269
305
|
response_data = self.__assistant_client.update_assistant(
|
|
270
306
|
assistant_id=assistant.id,
|
|
271
307
|
status=assistant.status,
|
|
@@ -274,15 +310,16 @@ class AssistantManager:
|
|
|
274
310
|
name=assistant.name,
|
|
275
311
|
prompt=assistant.prompt,
|
|
276
312
|
description=assistant.description,
|
|
277
|
-
llm_settings=assistant.llm_settings.to_dict(),
|
|
278
|
-
welcome_data=assistant.welcome_data.to_dict()
|
|
313
|
+
llm_settings=assistant.llm_settings.to_dict() if assistant.llm_settings else None,
|
|
314
|
+
welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
|
|
279
315
|
)
|
|
280
316
|
|
|
281
317
|
if ErrorHandler.has_errors(response_data):
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
318
|
+
error = ErrorHandler.extract_error(response_data)
|
|
319
|
+
logger.error(f"Error received while updating chat assistant: {error}")
|
|
320
|
+
raise APIError(f"Error received while updating chat assistant: {error}")
|
|
285
321
|
|
|
322
|
+
result = AssistantResponseMapper.map_to_assistant_created_response(response_data)
|
|
286
323
|
return result
|
|
287
324
|
|
|
288
325
|
def _update_rag_assistant(
|
|
@@ -292,14 +329,12 @@ class AssistantManager:
|
|
|
292
329
|
"""
|
|
293
330
|
Updates an existing RAGAssistant instance.
|
|
294
331
|
|
|
295
|
-
This method calls `RAGAssistantClient.update_assistant` to update the assistant details
|
|
296
|
-
using `RAGAssistantMapper.map_to_rag_assistant`.
|
|
297
|
-
|
|
298
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
332
|
+
This method calls `RAGAssistantClient.update_assistant` to update the assistant details
|
|
333
|
+
and maps the response using `RAGAssistantMapper.map_to_rag_assistant`.
|
|
299
334
|
|
|
300
335
|
:param assistant: RAGAssistant - The assistant instance containing updated details.
|
|
301
|
-
:return: RAGAssistant - The updated RAGAssistant instance
|
|
302
|
-
:raises
|
|
336
|
+
:return: RAGAssistant - The updated RAGAssistant instance.
|
|
337
|
+
:raises APIError: If the API returns errors.
|
|
303
338
|
"""
|
|
304
339
|
response_data = self.__rag_client.update_assistant(
|
|
305
340
|
name=assistant.name,
|
|
@@ -310,10 +345,11 @@ class AssistantManager:
|
|
|
310
345
|
welcome_data=assistant.welcome_data.to_dict() if assistant.welcome_data else None
|
|
311
346
|
)
|
|
312
347
|
if ErrorHandler.has_errors(response_data):
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
348
|
+
error = ErrorHandler.extract_error(response_data)
|
|
349
|
+
logger.error(f"Error received while updating RAG assistant: {error}")
|
|
350
|
+
raise APIError(f"Error received while updating RAG assistant: {error}")
|
|
316
351
|
|
|
352
|
+
result = RAGAssistantMapper.map_to_rag_assistant(response_data)
|
|
317
353
|
return result
|
|
318
354
|
|
|
319
355
|
def delete_assistant(
|
|
@@ -334,7 +370,7 @@ class AssistantManager:
|
|
|
334
370
|
:param assistant_id: str, optional - The unique identifier of the assistant to delete.
|
|
335
371
|
:param assistant_name: str, optional - The name of the assistant to delete.
|
|
336
372
|
:raises MissingRequirementException: If neither `assistant_id` nor `assistant_name` is provided.
|
|
337
|
-
:return: EmptyResponse - A response indicating success
|
|
373
|
+
:return: EmptyResponse - A response indicating success.
|
|
338
374
|
"""
|
|
339
375
|
if not (assistant_id or assistant_name):
|
|
340
376
|
raise MissingRequirementException("Cannot delete assistant without either assistant_id or assistant_name")
|
|
@@ -351,22 +387,22 @@ class AssistantManager:
|
|
|
351
387
|
"""
|
|
352
388
|
Deletes an assistant by its unique identifier.
|
|
353
389
|
|
|
354
|
-
This method calls `AssistantClient.delete_assistant` to remove an assistant
|
|
355
|
-
using `ResponseMapper.map_to_empty_response`.
|
|
356
|
-
|
|
357
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
390
|
+
This method calls `AssistantClient.delete_assistant` to remove an assistant
|
|
391
|
+
and maps the response using `ResponseMapper.map_to_empty_response`.
|
|
358
392
|
|
|
359
393
|
:param assistant_id: str - The unique identifier of the assistant to be deleted.
|
|
360
|
-
:return: EmptyResponse - An empty response indicating successful deletion
|
|
394
|
+
:return: EmptyResponse - An empty response indicating successful deletion.
|
|
395
|
+
:raises APIError: If the API returns errors.
|
|
361
396
|
"""
|
|
362
397
|
response_data = self.__assistant_client.delete_assistant(
|
|
363
398
|
assistant_id=assistant_id
|
|
364
399
|
)
|
|
365
400
|
if ErrorHandler.has_errors(response_data):
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
401
|
+
error = ErrorHandler.extract_error(response_data)
|
|
402
|
+
logger.error(f"Error received while deleting assistant by ID: {error}")
|
|
403
|
+
raise APIError(f"Error received while deleting assistant by ID: {error}")
|
|
369
404
|
|
|
405
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Assistant deleted successfully")
|
|
370
406
|
return result
|
|
371
407
|
|
|
372
408
|
def _delete_assistant_by_name(
|
|
@@ -379,19 +415,19 @@ class AssistantManager:
|
|
|
379
415
|
This method calls `RAGAssistantClient.delete_assistant` to remove the assistant
|
|
380
416
|
and maps the response using `ResponseMapper.map_to_empty_response`.
|
|
381
417
|
|
|
382
|
-
If the response contains errors, they are processed using `ErrorMapper` to return an `ErrorListResponse`.
|
|
383
|
-
|
|
384
418
|
:param assistant_name: str - The name of the assistant to be deleted.
|
|
385
|
-
:return: EmptyResponse - A response indicating success
|
|
419
|
+
:return: EmptyResponse - A response indicating success.
|
|
420
|
+
:raises APIError: If the API returns errors.
|
|
386
421
|
"""
|
|
387
422
|
response_data = self.__rag_client.delete_assistant(
|
|
388
423
|
name=assistant_name
|
|
389
424
|
)
|
|
390
425
|
if ErrorHandler.has_errors(response_data):
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
426
|
+
error = ErrorHandler.extract_error(response_data)
|
|
427
|
+
logger.error(f"Error received while deleting assistant by name: {error}")
|
|
428
|
+
raise APIError(f"Error received while deleting assistant by name: {error}")
|
|
394
429
|
|
|
430
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Assistant deleted successfully")
|
|
395
431
|
return result
|
|
396
432
|
|
|
397
433
|
def send_chat_request(
|
|
@@ -405,16 +441,14 @@ class AssistantManager:
|
|
|
405
441
|
Sends a chat request to the assistant and processes the response.
|
|
406
442
|
|
|
407
443
|
This method sends a conversation request to an AI assistant, including a list of chat messages,
|
|
408
|
-
an optional revision identifier, and optional chat variables.
|
|
409
|
-
either an error list or a structured chat response.
|
|
444
|
+
an optional revision identifier, and optional chat variables.
|
|
410
445
|
|
|
411
446
|
:param assistant: Assistant - The assistant instance handling the request.
|
|
412
447
|
:param messages: ChatMessageList - The list of messages forming the chat history.
|
|
413
448
|
:param revision: AssistantRevision, optional - The assistant revision details (default: None).
|
|
414
449
|
:param variables: ChatVariableList, optional - Additional variables for the chat request (default: None).
|
|
415
|
-
|
|
416
|
-
:
|
|
417
|
-
or an error list.
|
|
450
|
+
:return: ChatResponse - The structured response from the assistant.
|
|
451
|
+
:raises APIError: If the API returns errors.
|
|
418
452
|
"""
|
|
419
453
|
response_data = self.__assistant_client.send_chat_request(
|
|
420
454
|
assistant_name=assistant.name,
|
|
@@ -424,10 +458,11 @@ class AssistantManager:
|
|
|
424
458
|
variables=variables.to_list() if variables else None
|
|
425
459
|
)
|
|
426
460
|
if ErrorHandler.has_errors(response_data):
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
461
|
+
error = ErrorHandler.extract_error(response_data)
|
|
462
|
+
logger.error(f"Error received while sending chat request: {error}")
|
|
463
|
+
raise APIError(f"Error received while sending chat request: {error}")
|
|
430
464
|
|
|
465
|
+
result = AssistantResponseMapper.map_to_chat_request_response(response_data)
|
|
431
466
|
return result
|
|
432
467
|
|
|
433
468
|
def get_request_status(self, request_id: str) -> ChatResponse:
|
|
@@ -435,45 +470,42 @@ class AssistantManager:
|
|
|
435
470
|
Retrieves the status of a chat request using the provided request ID.
|
|
436
471
|
|
|
437
472
|
This method queries the assistant service to check the current status of a
|
|
438
|
-
previously sent chat request.
|
|
439
|
-
a structured chat response or an error list if any issues are found.
|
|
473
|
+
previously sent chat request.
|
|
440
474
|
|
|
441
475
|
:param request_id: str - The unique identifier of the chat request.
|
|
442
|
-
|
|
443
|
-
:
|
|
444
|
-
an error list if the request failed.
|
|
476
|
+
:return: ChatResponse - The structured response containing the request status.
|
|
477
|
+
:raises APIError: If the API returns errors.
|
|
445
478
|
"""
|
|
446
479
|
response_data = self.__assistant_client.get_request_status(
|
|
447
480
|
request_id=request_id
|
|
448
481
|
)
|
|
449
482
|
if ErrorHandler.has_errors(response_data):
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
483
|
+
error = ErrorHandler.extract_error(response_data)
|
|
484
|
+
logger.error(f"Error received while retrieving request status: {error}")
|
|
485
|
+
raise APIError(f"Error received while retrieving request status: {error}")
|
|
453
486
|
|
|
487
|
+
result = AssistantResponseMapper.map_to_chat_request_response(response_data)
|
|
454
488
|
return result
|
|
455
489
|
|
|
456
490
|
def cancel_request(self, request_id: str) -> ChatResponse:
|
|
457
491
|
"""
|
|
458
492
|
Cancels an ongoing chat request using the provided request ID.
|
|
459
493
|
|
|
460
|
-
This method sends a cancellation request to the assistant service.
|
|
461
|
-
is successfully canceled, it returns a structured chat response. If there are
|
|
462
|
-
errors, it maps them to an error list response.
|
|
494
|
+
This method sends a cancellation request to the assistant service.
|
|
463
495
|
|
|
464
496
|
:param request_id: str - The unique identifier of the chat request to cancel.
|
|
465
|
-
|
|
466
|
-
:
|
|
467
|
-
or an error list if the cancellation fails.
|
|
497
|
+
:return: ChatResponse - The structured response confirming the cancellation.
|
|
498
|
+
:raises APIError: If the API returns errors.
|
|
468
499
|
"""
|
|
469
500
|
response_data = self.__assistant_client.cancel_request(
|
|
470
501
|
request_id=request_id
|
|
471
502
|
)
|
|
472
503
|
if ErrorHandler.has_errors(response_data):
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
504
|
+
error = ErrorHandler.extract_error(response_data)
|
|
505
|
+
logger.error(f"Error received while canceling request: {error}")
|
|
506
|
+
raise APIError(f"Error received while canceling request: {error}")
|
|
476
507
|
|
|
508
|
+
result = AssistantResponseMapper.map_to_chat_request_response(response_data)
|
|
477
509
|
return result
|
|
478
510
|
|
|
479
511
|
def chat_completion(
|
|
@@ -485,13 +517,12 @@ class AssistantManager:
|
|
|
485
517
|
variables: ChatVariableList = None,
|
|
486
518
|
tool_choice: ToolChoice = None,
|
|
487
519
|
tools: ChatToolList = None
|
|
488
|
-
):
|
|
520
|
+
) -> ChatResponse:
|
|
489
521
|
"""
|
|
490
522
|
Generates a chat completion response using the specified language model.
|
|
491
523
|
|
|
492
524
|
This method sends a chat completion request to the ChatClient with the provided
|
|
493
|
-
model, messages, and settings.
|
|
494
|
-
present or converting it into an assistant response format.
|
|
525
|
+
model, messages, and settings.
|
|
495
526
|
|
|
496
527
|
:param model: str - The identifier of the language model to use.
|
|
497
528
|
:param messages: ChatMessageList - A list of chat messages to provide context for the completion.
|
|
@@ -501,9 +532,8 @@ class AssistantManager:
|
|
|
501
532
|
:param variables: ChatVariableList, optional - Additional variables to include in the request.
|
|
502
533
|
:param tool_choice: ToolChoice, optional - Indicates which tool to call.
|
|
503
534
|
:param tools: ChatToolList, optional - Additional tools the model may call
|
|
504
|
-
|
|
505
|
-
:
|
|
506
|
-
or an error list if an issue occurs.
|
|
535
|
+
:return: ChatResponse - The structured chat response.
|
|
536
|
+
:raises APIError: If the API returns errors.
|
|
507
537
|
"""
|
|
508
538
|
response_data = self.__chat_client.chat_completion(
|
|
509
539
|
model=model,
|
|
@@ -520,10 +550,11 @@ class AssistantManager:
|
|
|
520
550
|
)
|
|
521
551
|
|
|
522
552
|
if ErrorHandler.has_errors(response_data):
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
553
|
+
error = ErrorHandler.extract_error(response_data)
|
|
554
|
+
logger.error(f"Error received while generating chat completion: {error}")
|
|
555
|
+
raise APIError(f"Error received while generating chat completion: {error}")
|
|
526
556
|
|
|
557
|
+
result = AssistantResponseMapper.map_to_provider_response(response_data)
|
|
527
558
|
return result
|
|
528
559
|
|
|
529
560
|
def get_document_list(
|
|
@@ -535,13 +566,14 @@ class AssistantManager:
|
|
|
535
566
|
"""
|
|
536
567
|
Retrieves a list of documents associated with a specified RAG assistant.
|
|
537
568
|
|
|
569
|
+
This method queries the RAG client to fetch a list of documents for the given assistant name,
|
|
570
|
+
applying pagination parameters.
|
|
571
|
+
|
|
538
572
|
:param name: str - The name of the RAG assistant.
|
|
539
573
|
:param skip: int - The number of documents to skip (default: 0).
|
|
540
574
|
:param count: int - The number of documents to retrieve (default: 10).
|
|
541
|
-
|
|
542
|
-
:
|
|
543
|
-
|
|
544
|
-
:raises Exception: If the API call encounters errors, they will be mapped using ErrorMapper.
|
|
575
|
+
:return: DocumentListResponse - A response object containing the retrieved documents.
|
|
576
|
+
:raises APIError: If the API returns errors.
|
|
545
577
|
"""
|
|
546
578
|
response_data = self.__rag_client.get_documents(
|
|
547
579
|
name=name,
|
|
@@ -550,10 +582,11 @@ class AssistantManager:
|
|
|
550
582
|
)
|
|
551
583
|
|
|
552
584
|
if ErrorHandler.has_errors(response_data):
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
585
|
+
error = ErrorHandler.extract_error(response_data)
|
|
586
|
+
logger.error(f"Error received while retrieving document list: {error}")
|
|
587
|
+
raise APIError(f"Error received while retrieving document list: {error}")
|
|
556
588
|
|
|
589
|
+
result = RAGAssistantMapper.map_to_document_list_response(response_data)
|
|
557
590
|
return result
|
|
558
591
|
|
|
559
592
|
def delete_all_documents(
|
|
@@ -563,21 +596,22 @@ class AssistantManager:
|
|
|
563
596
|
"""
|
|
564
597
|
Deletes all documents associated with a specified RAG assistant.
|
|
565
598
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
:return: EmptyResponse - A response object indicating the success or failure of the operation.
|
|
599
|
+
This method sends a request to the RAG client to delete all documents for the given assistant name.
|
|
569
600
|
|
|
570
|
-
:
|
|
601
|
+
:param name: str - The name of the RAG assistant whose documents should be deleted.
|
|
602
|
+
:return: EmptyResponse - A response object indicating the success of the operation.
|
|
603
|
+
:raises APIError: If the API returns errors.
|
|
571
604
|
"""
|
|
572
605
|
response_data = self.__rag_client.delete_all_documents(
|
|
573
606
|
name=name
|
|
574
607
|
)
|
|
575
608
|
|
|
576
609
|
if ErrorHandler.has_errors(response_data):
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
610
|
+
error = ErrorHandler.extract_error(response_data)
|
|
611
|
+
logger.error(f"Error received while deleting all documents: {error}")
|
|
612
|
+
raise APIError(f"Error received while deleting all documents: {error}")
|
|
580
613
|
|
|
614
|
+
result = ResponseMapper.map_to_empty_response(response_data or "All documents deleted successfully")
|
|
581
615
|
return result
|
|
582
616
|
|
|
583
617
|
def get_document(
|
|
@@ -588,12 +622,13 @@ class AssistantManager:
|
|
|
588
622
|
"""
|
|
589
623
|
Retrieves a specific document associated with a RAG assistant.
|
|
590
624
|
|
|
625
|
+
This method sends a request to the RAG client to retrieve a document identified by its ID
|
|
626
|
+
for the given assistant name.
|
|
627
|
+
|
|
591
628
|
:param name: str - The name of the RAG assistant.
|
|
592
629
|
:param document_id: str - The unique identifier of the document to retrieve.
|
|
593
|
-
|
|
594
|
-
:
|
|
595
|
-
|
|
596
|
-
:raises Exception: If the API call encounters errors, they will be mapped using ErrorMapper.
|
|
630
|
+
:return: Document - The retrieved document instance.
|
|
631
|
+
:raises APIError: If the API returns errors.
|
|
597
632
|
"""
|
|
598
633
|
response_data = self.__rag_client.retrieve_document(
|
|
599
634
|
name=name,
|
|
@@ -601,10 +636,11 @@ class AssistantManager:
|
|
|
601
636
|
)
|
|
602
637
|
|
|
603
638
|
if ErrorHandler.has_errors(response_data):
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
639
|
+
error = ErrorHandler.extract_error(response_data)
|
|
640
|
+
logger.error(f"Error received while retrieving document: {error}")
|
|
641
|
+
raise APIError(f"Error received while retrieving document: {error}")
|
|
607
642
|
|
|
643
|
+
result = RAGAssistantMapper.map_to_document(response_data)
|
|
608
644
|
return result
|
|
609
645
|
|
|
610
646
|
def upload_document(
|
|
@@ -615,16 +651,16 @@ class AssistantManager:
|
|
|
615
651
|
"""
|
|
616
652
|
Uploads a document to the specified RAG assistant.
|
|
617
653
|
|
|
654
|
+
This method sends a request to the RAG client to upload a document for the given assistant.
|
|
655
|
+
|
|
618
656
|
:param assistant: RAGAssistant - The assistant to which the document will be uploaded.
|
|
619
657
|
:param document: UploadDocument - The document object containing:
|
|
620
658
|
- path (str): The file path of the document.
|
|
621
659
|
- upload_type (str): The type of upload (e.g., "multipart" or "binary").
|
|
622
660
|
- metadata (dict | str | None): Additional metadata, either as a dictionary or a file path.
|
|
623
661
|
- content_type (str): The MIME type of the document (e.g., "application/pdf", "text/plain").
|
|
624
|
-
|
|
625
662
|
:return: Document - The uploaded document instance.
|
|
626
|
-
|
|
627
|
-
:raises ValueError: If an error occurs during the upload, it is mapped using ErrorMapper.
|
|
663
|
+
:raises APIError: If the API returns errors.
|
|
628
664
|
"""
|
|
629
665
|
response_data = self.__rag_client.upload_document(
|
|
630
666
|
name=assistant.name,
|
|
@@ -635,10 +671,11 @@ class AssistantManager:
|
|
|
635
671
|
)
|
|
636
672
|
|
|
637
673
|
if ErrorHandler.has_errors(response_data):
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
674
|
+
error = ErrorHandler.extract_error(response_data)
|
|
675
|
+
logger.error(f"Error received while uploading document: {error}")
|
|
676
|
+
raise APIError(f"Error received while uploading document: {error}")
|
|
641
677
|
|
|
678
|
+
result = RAGAssistantMapper.map_to_document(response_data)
|
|
642
679
|
return result
|
|
643
680
|
|
|
644
681
|
def delete_document(
|
|
@@ -649,12 +686,13 @@ class AssistantManager:
|
|
|
649
686
|
"""
|
|
650
687
|
Deletes a specific document from the given RAG assistant.
|
|
651
688
|
|
|
689
|
+
This method sends a request to the RAG client to delete a document identified by its ID
|
|
690
|
+
for the given assistant name.
|
|
691
|
+
|
|
652
692
|
:param name: str - The name of the RAG assistant from which the document will be deleted.
|
|
653
693
|
:param document_id: str - The unique identifier of the document to be deleted.
|
|
654
|
-
|
|
655
|
-
:
|
|
656
|
-
|
|
657
|
-
:raises ValueError: If an error occurs during deletion, it is mapped using ErrorMapper.
|
|
694
|
+
:return: EmptyResponse - An empty response object indicating success.
|
|
695
|
+
:raises APIError: If the API returns errors.
|
|
658
696
|
"""
|
|
659
697
|
response_data = self.__rag_client.delete_document(
|
|
660
698
|
name=name,
|
|
@@ -662,10 +700,11 @@ class AssistantManager:
|
|
|
662
700
|
)
|
|
663
701
|
|
|
664
702
|
if ErrorHandler.has_errors(response_data):
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
703
|
+
error = ErrorHandler.extract_error(response_data)
|
|
704
|
+
logger.error(f"Error received while deleting document: {error}")
|
|
705
|
+
raise APIError(f"Error received while deleting document: {error}")
|
|
668
706
|
|
|
707
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Document deleted successfully")
|
|
669
708
|
return result
|
|
670
709
|
|
|
671
710
|
def send_feedback(
|
|
@@ -676,14 +715,11 @@ class AssistantManager:
|
|
|
676
715
|
Sends feedback for an assistant's response.
|
|
677
716
|
|
|
678
717
|
This method submits user feedback to the Feedback API using the provided `FeedbackRequest` object.
|
|
679
|
-
The feedback includes a request identifier, origin, answer score, and an optional comment.
|
|
680
|
-
If the API response contains errors, they are processed and returned as an `ErrorListResponse`.
|
|
681
|
-
Otherwise, an `EmptyResponse` is returned.
|
|
682
718
|
|
|
683
719
|
:param feedback_request: FeedbackRequest - The feedback details, including request ID, origin,
|
|
684
720
|
answer score, and optional comments.
|
|
685
|
-
:return: EmptyResponse
|
|
686
|
-
|
|
721
|
+
:return: EmptyResponse - The processed API response indicating success.
|
|
722
|
+
:raises APIError: If the API returns errors.
|
|
687
723
|
"""
|
|
688
724
|
response_data = self.__feedback_client.send_feedback(
|
|
689
725
|
request_id=feedback_request.request_id,
|
|
@@ -693,8 +729,10 @@ class AssistantManager:
|
|
|
693
729
|
)
|
|
694
730
|
|
|
695
731
|
if ErrorHandler.has_errors(response_data):
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
732
|
+
error = ErrorHandler.extract_error(response_data)
|
|
733
|
+
logger.error(f"Error received while sending feedback: {error}")
|
|
734
|
+
raise APIError(f"Error received while sending feedback: {error}")
|
|
699
735
|
|
|
736
|
+
result = ResponseMapper.map_to_empty_response(response_data or "Feedback sent successfully")
|
|
700
737
|
return result
|
|
738
|
+
|