pygeai 0.6.0b6__py3-none-any.whl → 0.6.0b10__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/_docs/source/conf.py +78 -6
- 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/embeddings.rst +31 -1
- 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 +20 -18
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -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 +13 -1
- pygeai/_docs/source/content/debugger.rst +376 -83
- pygeai/_docs/source/content/migration.rst +528 -0
- pygeai/_docs/source/content/modules.rst +1 -1
- pygeai/_docs/source/index.rst +59 -7
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +16 -0
- pygeai/_docs/source/pygeai.cli.rst +8 -0
- pygeai/_docs/source/pygeai.core.utils.rst +16 -0
- pygeai/_docs/source/pygeai.rst +1 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +21 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +16 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +16 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +8 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +16 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +8 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rst +1 -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.integration.lab.processes.rst +8 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +8 -0
- pygeai/_docs/source/pygeai.tests.rst +2 -0
- pygeai/_docs/source/pygeai.tests.snippets.auth.rst +10 -0
- pygeai/_docs/source/pygeai.tests.snippets.chat.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.dbg.rst +45 -0
- pygeai/_docs/source/pygeai.tests.snippets.embeddings.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.dataset.rst +197 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.plan.rst +133 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.result.rst +37 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.rst +10 -0
- pygeai/_docs/source/pygeai.tests.snippets.organization.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.rst +2 -0
- pygeai/admin/clients.py +12 -32
- pygeai/assistant/clients.py +16 -44
- pygeai/assistant/data/clients.py +1 -0
- pygeai/assistant/data_analyst/clients.py +6 -13
- pygeai/assistant/rag/clients.py +24 -67
- pygeai/auth/clients.py +88 -14
- pygeai/auth/endpoints.py +4 -0
- pygeai/chat/clients.py +192 -25
- pygeai/chat/endpoints.py +2 -1
- pygeai/cli/commands/auth.py +178 -2
- pygeai/cli/commands/chat.py +227 -1
- pygeai/cli/commands/embeddings.py +56 -8
- pygeai/cli/commands/lab/ai_lab.py +0 -2
- pygeai/cli/commands/migrate.py +994 -434
- pygeai/cli/commands/organization.py +241 -0
- pygeai/cli/error_handler.py +116 -0
- pygeai/cli/geai.py +28 -10
- pygeai/cli/parsers.py +8 -2
- pygeai/core/base/clients.py +4 -1
- pygeai/core/common/exceptions.py +11 -10
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +20 -9
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +4 -8
- pygeai/core/files/clients.py +10 -25
- pygeai/core/files/managers.py +42 -0
- pygeai/core/llm/clients.py +11 -26
- pygeai/core/models.py +107 -0
- pygeai/core/plugins/clients.py +4 -7
- pygeai/core/rerank/clients.py +4 -8
- pygeai/core/secrets/clients.py +14 -37
- pygeai/core/services/rest.py +1 -1
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +565 -70
- pygeai/evaluation/clients.py +2 -1
- 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 +10 -25
- pygeai/health/clients.py +4 -7
- pygeai/lab/agents/clients.py +21 -54
- pygeai/lab/agents/endpoints.py +2 -0
- pygeai/lab/clients.py +1 -0
- pygeai/lab/models.py +3 -3
- pygeai/lab/processes/clients.py +45 -127
- pygeai/lab/strategies/clients.py +11 -25
- pygeai/lab/tools/clients.py +23 -67
- pygeai/lab/tools/endpoints.py +3 -0
- pygeai/migration/__init__.py +31 -0
- pygeai/migration/strategies.py +404 -155
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +135 -51
- pygeai/organization/endpoints.py +6 -1
- pygeai/organization/limits/clients.py +32 -91
- pygeai/organization/managers.py +157 -1
- pygeai/organization/mappers.py +76 -2
- pygeai/organization/responses.py +25 -1
- pygeai/proxy/clients.py +4 -1
- pygeai/tests/admin/test_clients.py +16 -11
- pygeai/tests/assistants/rag/test_clients.py +35 -23
- pygeai/tests/assistants/test_clients.py +22 -15
- pygeai/tests/auth/test_clients.py +191 -7
- pygeai/tests/chat/test_clients.py +211 -1
- pygeai/tests/cli/commands/test_embeddings.py +32 -9
- pygeai/tests/cli/commands/test_evaluation.py +7 -0
- pygeai/tests/cli/commands/test_migrate.py +112 -243
- 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/embeddings/test_clients.py +144 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/test_clients.py +2 -0
- pygeai/tests/core/files/test_clients.py +1 -0
- pygeai/tests/core/llm/test_clients.py +14 -9
- pygeai/tests/core/plugins/test_clients.py +5 -3
- pygeai/tests/core/rerank/test_clients.py +1 -0
- pygeai/tests/core/secrets/test_clients.py +19 -13
- pygeai/tests/dbg/test_debugger.py +453 -75
- pygeai/tests/evaluation/dataset/test_clients.py +3 -1
- pygeai/tests/evaluation/plan/test_clients.py +4 -2
- pygeai/tests/evaluation/result/test_clients.py +7 -5
- pygeai/tests/gam/test_clients.py +1 -1
- pygeai/tests/health/test_clients.py +1 -0
- pygeai/tests/lab/agents/test_clients.py +9 -0
- pygeai/tests/lab/processes/test_clients.py +36 -0
- pygeai/tests/lab/processes/test_mappers.py +3 -0
- pygeai/tests/lab/strategies/test_clients.py +14 -9
- pygeai/tests/migration/test_strategies.py +45 -218
- pygeai/tests/migration/test_tools.py +133 -9
- pygeai/tests/organization/limits/test_clients.py +17 -0
- pygeai/tests/organization/test_clients.py +206 -1
- pygeai/tests/organization/test_managers.py +122 -1
- pygeai/tests/proxy/test_clients.py +2 -0
- pygeai/tests/proxy/test_integration.py +1 -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_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -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/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/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/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-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/METADATA +1 -1
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/RECORD +227 -124
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/WHEEL +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/entry_points.txt +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/licenses/LICENSE +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
Proxy
|
|
2
|
+
=====
|
|
3
|
+
|
|
4
|
+
The Proxy module enables tool proxying functionality, allowing external tools and services to be registered and made available to AI assistants. This creates a bridge between GEAI assistants and external APIs or custom functions.
|
|
5
|
+
|
|
6
|
+
This section covers:
|
|
7
|
+
|
|
8
|
+
* Registering tool proxies
|
|
9
|
+
* Submitting jobs to proxies
|
|
10
|
+
* Monitoring job execution
|
|
11
|
+
* Retrieving results
|
|
12
|
+
|
|
13
|
+
For each operation, you use the Low-Level Service Layer.
|
|
14
|
+
|
|
15
|
+
Overview
|
|
16
|
+
--------
|
|
17
|
+
|
|
18
|
+
The proxy system enables:
|
|
19
|
+
|
|
20
|
+
* **Tool Registration**: Register external tools with the system
|
|
21
|
+
* **Job Submission**: Submit work to registered tools
|
|
22
|
+
* **Async Execution**: Tools process jobs asynchronously
|
|
23
|
+
* **Result Retrieval**: Poll for and retrieve job results
|
|
24
|
+
* **Server Deployment**: Run proxy servers to handle tool execution
|
|
25
|
+
|
|
26
|
+
Architecture:
|
|
27
|
+
|
|
28
|
+
1. Register tools with proxy
|
|
29
|
+
2. Assistant requests tool execution
|
|
30
|
+
3. Job submitted to proxy
|
|
31
|
+
4. Proxy routes to appropriate tool/server
|
|
32
|
+
5. Results returned to assistant
|
|
33
|
+
|
|
34
|
+
Tool Proxy Registration
|
|
35
|
+
-----------------------
|
|
36
|
+
|
|
37
|
+
Register a Proxy
|
|
38
|
+
~~~~~~~~~~~~~~~~
|
|
39
|
+
|
|
40
|
+
.. code-block:: python
|
|
41
|
+
|
|
42
|
+
from pygeai.proxy.clients import ToolProxyData, ProxiedTool
|
|
43
|
+
import uuid
|
|
44
|
+
|
|
45
|
+
# Define a tool
|
|
46
|
+
tool = ProxiedTool(
|
|
47
|
+
name="weather_lookup",
|
|
48
|
+
description="Get current weather for a location",
|
|
49
|
+
server_name="weather-server",
|
|
50
|
+
input_schema={
|
|
51
|
+
"type": "object",
|
|
52
|
+
"properties": {
|
|
53
|
+
"location": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "City name"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"required": ["location"]
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Create proxy registration
|
|
63
|
+
proxy_data = ToolProxyData(
|
|
64
|
+
id=uuid.uuid4(),
|
|
65
|
+
name="Weather Tools",
|
|
66
|
+
description="Weather information tools",
|
|
67
|
+
affinity=uuid.uuid4(),
|
|
68
|
+
tools=[tool]
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Register (implementation depends on proxy client setup)
|
|
72
|
+
# proxy_client.register(proxy_data)
|
|
73
|
+
|
|
74
|
+
**Components:**
|
|
75
|
+
|
|
76
|
+
* ``ToolProxyData``: Proxy registration information
|
|
77
|
+
* ``ProxiedTool``: Individual tool definition
|
|
78
|
+
* ``input_schema``: JSON Schema for tool parameters
|
|
79
|
+
|
|
80
|
+
Job Management
|
|
81
|
+
--------------
|
|
82
|
+
|
|
83
|
+
Submit Job
|
|
84
|
+
~~~~~~~~~~
|
|
85
|
+
|
|
86
|
+
.. code-block:: python
|
|
87
|
+
|
|
88
|
+
from pygeai.proxy.clients import ToolProxyJob
|
|
89
|
+
|
|
90
|
+
# Job submission (conceptual - actual implementation may vary)
|
|
91
|
+
job = {
|
|
92
|
+
"proxy_id": "proxy-uuid",
|
|
93
|
+
"tool_name": "weather_lookup",
|
|
94
|
+
"input": {
|
|
95
|
+
"location": "San Francisco"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
# Submit job to proxy
|
|
100
|
+
# result = proxy_client.submit_job(job)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
Check Job Status
|
|
104
|
+
~~~~~~~~~~~~~~~~
|
|
105
|
+
|
|
106
|
+
.. code-block:: python
|
|
107
|
+
|
|
108
|
+
from pygeai.proxy.clients import ToolProxyJob
|
|
109
|
+
|
|
110
|
+
# Poll for job completion
|
|
111
|
+
job = ToolProxyJob(
|
|
112
|
+
id=uuid.UUID("job-uuid"),
|
|
113
|
+
proxy_id=uuid.UUID("proxy-uuid"),
|
|
114
|
+
proxy_status="active",
|
|
115
|
+
job_status="pending"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Check status
|
|
119
|
+
# status = proxy_client.get_job_status(job.id)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
Get Job Result
|
|
123
|
+
~~~~~~~~~~~~~~
|
|
124
|
+
|
|
125
|
+
.. code-block:: python
|
|
126
|
+
|
|
127
|
+
from pygeai.proxy.clients import ToolProxyJobResult
|
|
128
|
+
|
|
129
|
+
# Retrieve completed job result
|
|
130
|
+
result = ToolProxyJobResult(
|
|
131
|
+
success=True,
|
|
132
|
+
job=job # ToolProxyJob instance
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
if result.success:
|
|
136
|
+
output = result.job.output
|
|
137
|
+
print(f"Result: {output}")
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
Proxy Server
|
|
141
|
+
------------
|
|
142
|
+
|
|
143
|
+
The proxy module includes server functionality to handle tool execution:
|
|
144
|
+
|
|
145
|
+
.. code-block:: python
|
|
146
|
+
|
|
147
|
+
from pygeai.proxy.servers import ProxyServer
|
|
148
|
+
from pygeai.proxy.config import ProxyConfig
|
|
149
|
+
|
|
150
|
+
# Configure proxy server
|
|
151
|
+
config = ProxyConfig(
|
|
152
|
+
host="localhost",
|
|
153
|
+
port=8080,
|
|
154
|
+
# Additional configuration...
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
# Start server
|
|
158
|
+
server = ProxyServer(config)
|
|
159
|
+
server.start()
|
|
160
|
+
|
|
161
|
+
**Note:** Server deployment typically runs as a separate service.
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
Complete Example
|
|
165
|
+
----------------
|
|
166
|
+
|
|
167
|
+
.. code-block:: python
|
|
168
|
+
|
|
169
|
+
from pygeai.proxy.clients import ToolProxyData, ProxiedTool
|
|
170
|
+
from pygeai.proxy.tool import ProxiedTool
|
|
171
|
+
import uuid
|
|
172
|
+
|
|
173
|
+
# Define tools
|
|
174
|
+
calculator_tool = ProxiedTool(
|
|
175
|
+
name="calculate",
|
|
176
|
+
description="Perform mathematical calculations",
|
|
177
|
+
server_name="calc-server",
|
|
178
|
+
input_schema={
|
|
179
|
+
"type": "object",
|
|
180
|
+
"properties": {
|
|
181
|
+
"expression": {"type": "string"},
|
|
182
|
+
"operation": {"type": "string", "enum": ["add", "subtract", "multiply", "divide"]}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
database_tool = ProxiedTool(
|
|
188
|
+
name="query_db",
|
|
189
|
+
description="Query customer database",
|
|
190
|
+
server_name="db-server",
|
|
191
|
+
input_schema={
|
|
192
|
+
"type": "object",
|
|
193
|
+
"properties": {
|
|
194
|
+
"query": {"type": "string"},
|
|
195
|
+
"limit": {"type": "integer"}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# Create proxy with multiple tools
|
|
201
|
+
proxy = ToolProxyData(
|
|
202
|
+
id=uuid.uuid4(),
|
|
203
|
+
name="Business Tools",
|
|
204
|
+
description="Tools for business operations",
|
|
205
|
+
tools=[calculator_tool, database_tool]
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
print(f"Proxy configuration: {proxy.to_dict()}")
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
Tool Definition Schema
|
|
212
|
+
----------------------
|
|
213
|
+
|
|
214
|
+
Required Fields
|
|
215
|
+
~~~~~~~~~~~~~~~
|
|
216
|
+
|
|
217
|
+
* ``name``: Unique tool identifier
|
|
218
|
+
* ``description``: Human-readable description
|
|
219
|
+
* ``server_name``: Server handling this tool
|
|
220
|
+
* ``input_schema``: JSON Schema for parameters
|
|
221
|
+
|
|
222
|
+
Input Schema Format
|
|
223
|
+
~~~~~~~~~~~~~~~~~~~
|
|
224
|
+
|
|
225
|
+
.. code-block:: python
|
|
226
|
+
|
|
227
|
+
input_schema = {
|
|
228
|
+
"type": "object",
|
|
229
|
+
"properties": {
|
|
230
|
+
"param1": {
|
|
231
|
+
"type": "string",
|
|
232
|
+
"description": "First parameter",
|
|
233
|
+
"enum": ["option1", "option2"] # Optional
|
|
234
|
+
},
|
|
235
|
+
"param2": {
|
|
236
|
+
"type": "integer",
|
|
237
|
+
"description": "Second parameter",
|
|
238
|
+
"minimum": 0, # Optional constraints
|
|
239
|
+
"maximum": 100
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
"required": ["param1"]
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
Best Practices
|
|
247
|
+
--------------
|
|
248
|
+
|
|
249
|
+
Tool Design
|
|
250
|
+
~~~~~~~~~~~
|
|
251
|
+
|
|
252
|
+
* Use clear, descriptive tool names
|
|
253
|
+
* Provide detailed descriptions
|
|
254
|
+
* Define complete input schemas
|
|
255
|
+
* Include parameter descriptions
|
|
256
|
+
* Specify required vs optional parameters
|
|
257
|
+
* Add validation constraints
|
|
258
|
+
|
|
259
|
+
Security
|
|
260
|
+
~~~~~~~~
|
|
261
|
+
|
|
262
|
+
* Validate all input parameters
|
|
263
|
+
* Sanitize user inputs
|
|
264
|
+
* Implement authentication
|
|
265
|
+
* Use HTTPS for communication
|
|
266
|
+
* Rate limit tool usage
|
|
267
|
+
* Log all tool executions
|
|
268
|
+
|
|
269
|
+
Error Handling
|
|
270
|
+
~~~~~~~~~~~~~~
|
|
271
|
+
|
|
272
|
+
* Return clear error messages
|
|
273
|
+
* Include error codes
|
|
274
|
+
* Handle timeouts gracefully
|
|
275
|
+
* Implement retry logic
|
|
276
|
+
* Log failures for debugging
|
|
277
|
+
|
|
278
|
+
Performance
|
|
279
|
+
~~~~~~~~~~~
|
|
280
|
+
|
|
281
|
+
* Optimize tool execution time
|
|
282
|
+
* Implement caching where appropriate
|
|
283
|
+
* Use async processing
|
|
284
|
+
* Monitor resource usage
|
|
285
|
+
* Scale servers based on load
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
Integration with Assistants
|
|
289
|
+
----------------------------
|
|
290
|
+
|
|
291
|
+
Tools registered via proxy can be made available to assistants:
|
|
292
|
+
|
|
293
|
+
.. code-block:: python
|
|
294
|
+
|
|
295
|
+
# Register proxy with tools
|
|
296
|
+
# ...
|
|
297
|
+
|
|
298
|
+
# Configure assistant to use proxied tools
|
|
299
|
+
# (Specific integration depends on assistant configuration)
|
|
300
|
+
|
|
301
|
+
# Assistant can now call:
|
|
302
|
+
# "Get the weather in Tokyo"
|
|
303
|
+
# -> Routes to weather_lookup tool
|
|
304
|
+
# -> Returns weather data
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
Notes
|
|
308
|
+
-----
|
|
309
|
+
|
|
310
|
+
* Proxies enable extensibility of assistant capabilities
|
|
311
|
+
* Tools execute asynchronously
|
|
312
|
+
* Affinity groups related tools
|
|
313
|
+
* Public vs private tool visibility options
|
|
314
|
+
* Server handles actual tool execution
|
|
315
|
+
* Input schemas use JSON Schema specification
|
|
316
|
+
* Tool responses should be JSON-serializable
|
|
317
|
+
|
|
318
|
+
For detailed proxy architecture, see ``docs/geai-proxy/README.md``.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
Reranking
|
|
2
|
+
=========
|
|
3
|
+
|
|
4
|
+
The Rerank module provides functionality to reorder document chunks based on their relevance to a query. This is particularly useful in retrieval-augmented generation (RAG) systems to prioritize the most relevant context.
|
|
5
|
+
|
|
6
|
+
This section covers:
|
|
7
|
+
|
|
8
|
+
* Reranking document chunks based on relevance
|
|
9
|
+
* Selecting top-N most relevant documents
|
|
10
|
+
|
|
11
|
+
For each operation, you have two implementation options:
|
|
12
|
+
|
|
13
|
+
* `Command Line`_
|
|
14
|
+
* `Low-Level Service Layer`_
|
|
15
|
+
|
|
16
|
+
.. note::
|
|
17
|
+
The Rerank module currently does not have a High-Level Service Layer (Manager class).
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
Rerank Chunks
|
|
21
|
+
~~~~~~~~~~~~~
|
|
22
|
+
|
|
23
|
+
Reranks a list of document chunks based on their relevance to a given query.
|
|
24
|
+
|
|
25
|
+
Command Line
|
|
26
|
+
^^^^^^^^^^^^
|
|
27
|
+
|
|
28
|
+
.. code-block:: shell
|
|
29
|
+
|
|
30
|
+
geai rerank rerank-chunks \
|
|
31
|
+
--query "What is machine learning?" \
|
|
32
|
+
--documents '["Machine learning is a subset of AI", "Python is a programming language", "Deep learning uses neural networks"]' \
|
|
33
|
+
--model "cohere/rerank-english-v3.0" \
|
|
34
|
+
--top-n 2
|
|
35
|
+
|
|
36
|
+
Using the alias:
|
|
37
|
+
|
|
38
|
+
.. code-block:: shell
|
|
39
|
+
|
|
40
|
+
geai rerank chunks \
|
|
41
|
+
-q "What is machine learning?" \
|
|
42
|
+
-d "Machine learning is a subset of AI" \
|
|
43
|
+
--top-n 2
|
|
44
|
+
|
|
45
|
+
Low-Level Service Layer
|
|
46
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
47
|
+
|
|
48
|
+
.. code-block:: python
|
|
49
|
+
|
|
50
|
+
from pygeai.core.rerank.clients import RerankClient
|
|
51
|
+
|
|
52
|
+
client = RerankClient()
|
|
53
|
+
|
|
54
|
+
query = "What is machine learning?"
|
|
55
|
+
documents = [
|
|
56
|
+
"Machine learning is a subset of AI",
|
|
57
|
+
"Python is a programming language",
|
|
58
|
+
"Deep learning uses neural networks"
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
results = client.rerank_chunks(
|
|
62
|
+
query=query,
|
|
63
|
+
documents=documents,
|
|
64
|
+
model="cohere/rerank-english-v3.0",
|
|
65
|
+
top_n=2
|
|
66
|
+
)
|
|
67
|
+
print(results)
|
|
68
|
+
|
|
69
|
+
Example response:
|
|
70
|
+
|
|
71
|
+
.. code-block:: json
|
|
72
|
+
|
|
73
|
+
{
|
|
74
|
+
"results": [
|
|
75
|
+
{
|
|
76
|
+
"index": 0,
|
|
77
|
+
"document": "Machine learning is a subset of AI",
|
|
78
|
+
"relevance_score": 0.95
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"index": 2,
|
|
82
|
+
"document": "Deep learning uses neural networks",
|
|
83
|
+
"relevance_score": 0.72
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
Parameters
|
|
89
|
+
^^^^^^^^^^
|
|
90
|
+
|
|
91
|
+
* **query** (required): The search query to rank documents against
|
|
92
|
+
* **documents** (required): List of document strings to rerank
|
|
93
|
+
* **model** (optional): The reranking model to use (default: "cohere/rerank-english-v3.0")
|
|
94
|
+
* **top_n** (optional): Number of top results to return (default: returns all)
|