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,237 @@
|
|
|
1
|
+
Feedback
|
|
2
|
+
========
|
|
3
|
+
|
|
4
|
+
The Feedback module allows you to collect and submit user feedback for assistant responses. This helps track response quality, identify areas for improvement, and train better models.
|
|
5
|
+
|
|
6
|
+
Overview
|
|
7
|
+
--------
|
|
8
|
+
|
|
9
|
+
Feedback enables you to:
|
|
10
|
+
|
|
11
|
+
* Submit ratings for assistant responses (good/bad)
|
|
12
|
+
* Add optional comments for context
|
|
13
|
+
* Track feedback via request IDs
|
|
14
|
+
* Analyze response quality over time
|
|
15
|
+
|
|
16
|
+
Send Feedback
|
|
17
|
+
-------------
|
|
18
|
+
|
|
19
|
+
Submits feedback for a specific assistant response.
|
|
20
|
+
|
|
21
|
+
Command Line
|
|
22
|
+
^^^^^^^^^^^^
|
|
23
|
+
|
|
24
|
+
.. code-block:: shell
|
|
25
|
+
|
|
26
|
+
geai feedback send \
|
|
27
|
+
--request-id "request-uuid" \
|
|
28
|
+
--score 1 \
|
|
29
|
+
--comments "Very helpful response"
|
|
30
|
+
|
|
31
|
+
Low-Level Service Layer
|
|
32
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
33
|
+
|
|
34
|
+
.. code-block:: python
|
|
35
|
+
|
|
36
|
+
from pygeai.core.feedback.clients import FeedbackClient
|
|
37
|
+
|
|
38
|
+
client = FeedbackClient()
|
|
39
|
+
|
|
40
|
+
result = client.send_feedback(
|
|
41
|
+
request_id="request-uuid",
|
|
42
|
+
answer_score=1,
|
|
43
|
+
comments="Very helpful and accurate response"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
print("Feedback submitted successfully")
|
|
47
|
+
|
|
48
|
+
**Parameters:**
|
|
49
|
+
|
|
50
|
+
* ``request_id``: (Required) The request ID from the assistant execution
|
|
51
|
+
* ``origin``: Feedback origin (default: "user-feedback")
|
|
52
|
+
* ``answer_score``: (Required) Score indicating quality:
|
|
53
|
+
|
|
54
|
+
* ``1``: Good response
|
|
55
|
+
* ``2``: Bad response
|
|
56
|
+
|
|
57
|
+
* ``comments``: Optional text feedback/explanation
|
|
58
|
+
|
|
59
|
+
**Returns:**
|
|
60
|
+
Dictionary confirming feedback submission (typically empty JSON ``{}``)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
Complete Example
|
|
64
|
+
----------------
|
|
65
|
+
|
|
66
|
+
.. code-block:: python
|
|
67
|
+
|
|
68
|
+
from pygeai.assistant.managers import AssistantManager
|
|
69
|
+
from pygeai.core.feedback.clients import FeedbackClient
|
|
70
|
+
from pygeai.core.models import ChatMessageList, ChatMessage
|
|
71
|
+
|
|
72
|
+
# Send a chat request
|
|
73
|
+
assistant_manager = AssistantManager()
|
|
74
|
+
|
|
75
|
+
messages = ChatMessageList(
|
|
76
|
+
messages=[
|
|
77
|
+
ChatMessage(role="user", content="What is the capital of France?")
|
|
78
|
+
]
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
response = assistant_manager.chat_completion(
|
|
82
|
+
assistant_name="Geography Assistant",
|
|
83
|
+
messages=messages
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
request_id = response.request_id
|
|
87
|
+
answer = response.content
|
|
88
|
+
|
|
89
|
+
print(f"Assistant: {answer}")
|
|
90
|
+
|
|
91
|
+
# Collect user feedback
|
|
92
|
+
user_rating = input("Was this helpful? (y/n): ")
|
|
93
|
+
user_comment = input("Additional feedback (optional): ")
|
|
94
|
+
|
|
95
|
+
# Submit feedback
|
|
96
|
+
feedback_client = FeedbackClient()
|
|
97
|
+
|
|
98
|
+
feedback_client.send_feedback(
|
|
99
|
+
request_id=request_id,
|
|
100
|
+
answer_score=1 if user_rating.lower() == 'y' else 2,
|
|
101
|
+
comments=user_comment if user_comment else None
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
print("Thank you for your feedback!")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
Best Practices
|
|
108
|
+
--------------
|
|
109
|
+
|
|
110
|
+
Collection Strategy
|
|
111
|
+
~~~~~~~~~~~~~~~~~~~
|
|
112
|
+
|
|
113
|
+
* Collect feedback at appropriate moments
|
|
114
|
+
* Don't interrupt critical user workflows
|
|
115
|
+
* Make feedback optional, not mandatory
|
|
116
|
+
* Use simple rating mechanisms
|
|
117
|
+
* Allow optional detailed comments
|
|
118
|
+
|
|
119
|
+
Request ID Tracking
|
|
120
|
+
~~~~~~~~~~~~~~~~~~~
|
|
121
|
+
|
|
122
|
+
* Always capture and store request IDs
|
|
123
|
+
* Associate request IDs with user sessions
|
|
124
|
+
* Track which responses received feedback
|
|
125
|
+
* Monitor feedback completion rates
|
|
126
|
+
|
|
127
|
+
Feedback Quality
|
|
128
|
+
~~~~~~~~~~~~~~~~
|
|
129
|
+
|
|
130
|
+
* Provide clear rating options
|
|
131
|
+
* Explain what "good" and "bad" mean
|
|
132
|
+
* Encourage specific comments
|
|
133
|
+
* Follow up on negative feedback
|
|
134
|
+
* Thank users for providing feedback
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
Integration Patterns
|
|
138
|
+
--------------------
|
|
139
|
+
|
|
140
|
+
Inline Feedback
|
|
141
|
+
~~~~~~~~~~~~~~~
|
|
142
|
+
|
|
143
|
+
.. code-block:: python
|
|
144
|
+
|
|
145
|
+
from pygeai.assistant.managers import AssistantManager
|
|
146
|
+
from pygeai.core.feedback.clients import FeedbackClient
|
|
147
|
+
|
|
148
|
+
def chat_with_feedback(assistant_name, user_message):
|
|
149
|
+
# Get assistant response
|
|
150
|
+
manager = AssistantManager()
|
|
151
|
+
response = manager.chat_completion(
|
|
152
|
+
assistant_name=assistant_name,
|
|
153
|
+
messages=[{"role": "user", "content": user_message}]
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
print(f"Assistant: {response.content}")
|
|
157
|
+
|
|
158
|
+
# Prompt for immediate feedback
|
|
159
|
+
rating = input("Rate this response (1=good, 2=bad): ")
|
|
160
|
+
|
|
161
|
+
if rating in ['1', '2']:
|
|
162
|
+
feedback_client = FeedbackClient()
|
|
163
|
+
feedback_client.send_feedback(
|
|
164
|
+
request_id=response.request_id,
|
|
165
|
+
answer_score=int(rating)
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
return response
|
|
169
|
+
|
|
170
|
+
Batch Feedback
|
|
171
|
+
~~~~~~~~~~~~~~
|
|
172
|
+
|
|
173
|
+
.. code-block:: python
|
|
174
|
+
|
|
175
|
+
from pygeai.core.feedback.clients import FeedbackClient
|
|
176
|
+
|
|
177
|
+
# Collect feedback for multiple requests
|
|
178
|
+
feedback_queue = [
|
|
179
|
+
{"request_id": "req-1", "score": 1, "comments": "Great!"},
|
|
180
|
+
{"request_id": "req-2", "score": 2, "comments": "Inaccurate"},
|
|
181
|
+
{"request_id": "req-3", "score": 1, "comments": None}
|
|
182
|
+
]
|
|
183
|
+
|
|
184
|
+
client = FeedbackClient()
|
|
185
|
+
|
|
186
|
+
for item in feedback_queue:
|
|
187
|
+
try:
|
|
188
|
+
client.send_feedback(
|
|
189
|
+
request_id=item["request_id"],
|
|
190
|
+
answer_score=item["score"],
|
|
191
|
+
comments=item["comments"]
|
|
192
|
+
)
|
|
193
|
+
print(f"Submitted feedback for {item['request_id']}")
|
|
194
|
+
except Exception as e:
|
|
195
|
+
print(f"Failed to submit feedback: {e}")
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
Error Handling
|
|
199
|
+
--------------
|
|
200
|
+
|
|
201
|
+
.. code-block:: python
|
|
202
|
+
|
|
203
|
+
from pygeai.core.feedback.clients import FeedbackClient
|
|
204
|
+
from pygeai.core.common.exceptions import APIError
|
|
205
|
+
|
|
206
|
+
client = FeedbackClient()
|
|
207
|
+
|
|
208
|
+
try:
|
|
209
|
+
client.send_feedback(
|
|
210
|
+
request_id="invalid-request-id",
|
|
211
|
+
answer_score=1
|
|
212
|
+
)
|
|
213
|
+
except APIError as e:
|
|
214
|
+
print(f"Failed to submit feedback: {e}")
|
|
215
|
+
# Log error for later retry
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
Common Issues
|
|
219
|
+
~~~~~~~~~~~~~
|
|
220
|
+
|
|
221
|
+
**Invalid Request ID**
|
|
222
|
+
|
|
223
|
+
Ensure the request ID is valid and from a recent assistant execution.
|
|
224
|
+
|
|
225
|
+
**Invalid Score Value**
|
|
226
|
+
|
|
227
|
+
Score must be exactly ``1`` (good) or ``2`` (bad).
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
Notes
|
|
231
|
+
-----
|
|
232
|
+
|
|
233
|
+
* Feedback is associated with specific assistant requests
|
|
234
|
+
* The origin parameter should typically remain "user-feedback"
|
|
235
|
+
* Comments are optional but provide valuable context
|
|
236
|
+
* Feedback data can be used for assistant improvement
|
|
237
|
+
* Request IDs expire after a certain period (check your configuration)
|