From b25af3f389fafa7ca36e43027c52b9888c954ba5 Mon Sep 17 00:00:00 2001 From: omkarjoshi0304 Date: Wed, 11 Jun 2025 22:26:06 +0100 Subject: [PATCH 1/5] user feeback validation changes --- .../14c22031-eb3d-47c9-ad78-0a4658763cbc.json | 1 + .../34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json | 1 + .../46dbdadc-4904-465d-8215-d888d5821124.json | 1 + .../511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json | 1 + .../70d36446-3821-445d-968c-2fc556869ce8.json | 1 + .../84338b6d-743b-4d4b-8094-04a57a719538.json | 1 + .../91f7af7e-16da-4383-96d3-8223e39fdd93.json | 1 + .../c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json | 1 + .../dbc27338-b442-4001-80c1-a3033616528f.json | 1 + .../df0610a9-b231-4a3a-8ed4-be1c4dc88181.json | 1 + src/app/main.py | 2 +- src/models/requests.py | 11 ++++++-- tests/unit/models/test_requests.py | 28 ++++++++++++++++++- 13 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json create mode 100644 data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json create mode 100644 data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json create mode 100644 data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json create mode 100644 data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json create mode 100644 data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json create mode 100644 data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json create mode 100644 data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json create mode 100644 data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json create mode 100644 data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json diff --git a/data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json b/data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json new file mode 100644 index 00000000..2265317a --- /dev/null +++ b/data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:19:56.810345+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": "Great service!"} \ No newline at end of file diff --git a/data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json b/data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json new file mode 100644 index 00000000..c4d45d2d --- /dev/null +++ b/data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:52:27.366337+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json b/data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json new file mode 100644 index 00000000..abbd19a1 --- /dev/null +++ b/data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:22:17.766765+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": "Hello gvgvehdiedhqvfhqehyfqyfhiqgfihqefh"} \ No newline at end of file diff --git a/data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json b/data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json new file mode 100644 index 00000000..30420d2b --- /dev/null +++ b/data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:37:08.903957+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json b/data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json new file mode 100644 index 00000000..b3447fba --- /dev/null +++ b/data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:52:11.721778+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": "Gre"} \ No newline at end of file diff --git a/data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json b/data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json new file mode 100644 index 00000000..6e662785 --- /dev/null +++ b/data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:53:00.963133+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json b/data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json new file mode 100644 index 00000000..22598a38 --- /dev/null +++ b/data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:22:21.832065+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": "Hello gvgvehdiedhqvfhqehyfqyfhiqgfihqefh"} \ No newline at end of file diff --git a/data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json b/data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json new file mode 100644 index 00000000..f41a15d9 --- /dev/null +++ b/data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:37:20.623086+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json b/data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json new file mode 100644 index 00000000..1ca31bac --- /dev/null +++ b/data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:56:27.277756+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "dsft", "llm_response": "bar", "sentiment": 1, "user_feedback": "Great"} \ No newline at end of file diff --git a/data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json b/data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json new file mode 100644 index 00000000..c43c762e --- /dev/null +++ b/data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json @@ -0,0 +1 @@ +{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:54:00.267635+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": "12"} \ No newline at end of file diff --git a/src/app/main.py b/src/app/main.py index 9ab7959b..9670e458 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -31,4 +31,4 @@ @app.on_event("startup") async def startup_event() -> None: """Perform logger setup on service startup.""" - get_logger("app.endpoints.handlers") +get_logger("app.endpoints.handlers") \ No newline at end of file diff --git a/src/models/requests.py b/src/models/requests.py index 5639493b..ce6af24a 100644 --- a/src/models/requests.py +++ b/src/models/requests.py @@ -2,7 +2,7 @@ from typing import Optional, Self -from pydantic import BaseModel, model_validator, field_validator +from pydantic import BaseModel, model_validator, field_validator, Field from llama_stack_client.types.agents.turn_create_params import Document from utils import suid @@ -159,7 +159,14 @@ class FeedbackRequest(BaseModel): user_question: str llm_response: str sentiment: Optional[int] = None - user_feedback: Optional[str] = None + # Optional user feedback limited to 1–4096 characters to prevent abuse. + user_feedback: Optional[str] = Field( + default=None, + min_length=1, + max_length=4096, + description="Maximum length of user feedback is 4096 characters long.", + examples=["How to Set Up Kubernetes?"], + ) # provides examples for /docs endpoint model_config = { diff --git a/tests/unit/models/test_requests.py b/tests/unit/models/test_requests.py index 7da1cc3b..67e921f3 100644 --- a/tests/unit/models/test_requests.py +++ b/tests/unit/models/test_requests.py @@ -1,5 +1,5 @@ import pytest - +from pydantic import ValidationError from models.requests import QueryRequest, Attachment, FeedbackRequest @@ -176,3 +176,29 @@ def test_check_sentiment_or_user_feedback(self) -> None: sentiment=None, user_feedback=None, ) + + def test_user_feedback_too_long(self) -> None: + """Test that feedback longer than 4096 characters raises an error.""" + with pytest.raises(ValidationError) as exc_info: + FeedbackRequest( + conversation_id="123e4567-e89b-12d3-a456-426614174000", + user_question="What is OpenStack?", + llm_response="OpenStack is a cloud computing platform.", + user_feedback="x" * 4097, + ) + assert "should have at most 4096 characters" in str(exc_info.value) + + + def test_user_feedback_too_short(self) -> None: + """Test that user_feedback shorter than 1 character raises ValidationError.""" + with pytest.raises(ValidationError) as exc_info: + FeedbackRequest( + conversation_id="123e4567-e89b-12d3-a456-426614174000", + user_question="What is OpenStack?", + llm_response="OpenStack is a cloud computing platform.", + user_feedback="", # Empty feedback + ) + assert "should have at least 1 character" in str(exc_info.value) + + + From cff6715b602850595695a7fb8f4959fb840e0b56 Mon Sep 17 00:00:00 2001 From: Omkar Joshi <103182931+omkarjoshi0304@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:09:59 +0100 Subject: [PATCH 2/5] Update main.py --- src/app/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/main.py b/src/app/main.py index 9670e458..b596a5a8 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -31,4 +31,4 @@ @app.on_event("startup") async def startup_event() -> None: """Perform logger setup on service startup.""" -get_logger("app.endpoints.handlers") \ No newline at end of file +get_logger("app.endpoints.handlers") From bb14bacde6ab249e0b8ab6e75aa7748cb615046f Mon Sep 17 00:00:00 2001 From: omkarjoshi0304 Date: Fri, 13 Jun 2025 11:57:11 +0100 Subject: [PATCH 3/5] Fix feedback field validation, remove test data, align with code quality checks --- .gitignore | 1 + .../14c22031-eb3d-47c9-ad78-0a4658763cbc.json | 1 - .../34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json | 1 - .../46dbdadc-4904-465d-8215-d888d5821124.json | 1 - .../511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json | 1 - .../70d36446-3821-445d-968c-2fc556869ce8.json | 1 - .../84338b6d-743b-4d4b-8094-04a57a719538.json | 1 - .../91f7af7e-16da-4383-96d3-8223e39fdd93.json | 1 - .../c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json | 1 - .../dbc27338-b442-4001-80c1-a3033616528f.json | 1 - .../df0610a9-b231-4a3a-8ed4-be1c4dc88181.json | 1 - src/app/main.py | 2 +- src/models/requests.py | 5 ++- tests/unit/models/test_requests.py | 36 ++++++------------- 14 files changed, 15 insertions(+), 39 deletions(-) delete mode 100644 data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json delete mode 100644 data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json delete mode 100644 data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json delete mode 100644 data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json delete mode 100644 data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json delete mode 100644 data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json delete mode 100644 data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json delete mode 100644 data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json delete mode 100644 data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json delete mode 100644 data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json diff --git a/.gitignore b/.gitignore index 4ae1304e..d785927b 100644 --- a/.gitignore +++ b/.gitignore @@ -173,3 +173,4 @@ cython_debug/ # PyPI configuration file .pypirc +data/ diff --git a/data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json b/data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json deleted file mode 100644 index 2265317a..00000000 --- a/data/feedback/14c22031-eb3d-47c9-ad78-0a4658763cbc.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:19:56.810345+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": "Great service!"} \ No newline at end of file diff --git a/data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json b/data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json deleted file mode 100644 index c4d45d2d..00000000 --- a/data/feedback/34b57826-fa8d-4c74-ac25-0f06a8eb9c19.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:52:27.366337+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json b/data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json deleted file mode 100644 index abbd19a1..00000000 --- a/data/feedback/46dbdadc-4904-465d-8215-d888d5821124.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:22:17.766765+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": "Hello gvgvehdiedhqvfhqehyfqyfhiqgfihqefh"} \ No newline at end of file diff --git a/data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json b/data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json deleted file mode 100644 index 30420d2b..00000000 --- a/data/feedback/511b7e4c-af09-4bf9-87ec-4fa2aa785c25.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:37:08.903957+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json b/data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json deleted file mode 100644 index b3447fba..00000000 --- a/data/feedback/70d36446-3821-445d-968c-2fc556869ce8.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:52:11.721778+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": "Gre"} \ No newline at end of file diff --git a/data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json b/data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json deleted file mode 100644 index 6e662785..00000000 --- a/data/feedback/84338b6d-743b-4d4b-8094-04a57a719538.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:53:00.963133+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json b/data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json deleted file mode 100644 index 22598a38..00000000 --- a/data/feedback/91f7af7e-16da-4383-96d3-8223e39fdd93.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:22:21.832065+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "sasddfghlljhkgfdghjkl;kjhgfdfghjklkjhiugyftdsfghjkliuyftdrsadtfyuiopiuytrsdfghj", "llm_response": "bar", "sentiment": 1, "user_feedback": "Hello gvgvehdiedhqvfhqehyfqyfhiqgfihqefh"} \ No newline at end of file diff --git a/data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json b/data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json deleted file mode 100644 index f41a15d9..00000000 --- a/data/feedback/c3a7f66f-56ed-40e2-a8c2-2ca366e16dc4.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:37:20.623086+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "", "llm_response": "bar", "sentiment": 1, "user_feedback": ""} \ No newline at end of file diff --git a/data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json b/data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json deleted file mode 100644 index 1ca31bac..00000000 --- a/data/feedback/dbc27338-b442-4001-80c1-a3033616528f.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:56:27.277756+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "dsft", "llm_response": "bar", "sentiment": 1, "user_feedback": "Great"} \ No newline at end of file diff --git a/data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json b/data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json deleted file mode 100644 index c43c762e..00000000 --- a/data/feedback/df0610a9-b231-4a3a-8ed4-be1c4dc88181.json +++ /dev/null @@ -1 +0,0 @@ -{"user_id": "user_id_placeholder", "timestamp": "2025-06-09 22:54:00.267635+00:00", "conversation_id": "12345678-abcd-0000-0123-456789abcdef", "user_question": "foo", "llm_response": "bar", "sentiment": 1, "user_feedback": "12"} \ No newline at end of file diff --git a/src/app/main.py b/src/app/main.py index b596a5a8..9670e458 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -31,4 +31,4 @@ @app.on_event("startup") async def startup_event() -> None: """Perform logger setup on service startup.""" -get_logger("app.endpoints.handlers") +get_logger("app.endpoints.handlers") \ No newline at end of file diff --git a/src/models/requests.py b/src/models/requests.py index ce6af24a..9db27d4d 100644 --- a/src/models/requests.py +++ b/src/models/requests.py @@ -162,10 +162,9 @@ class FeedbackRequest(BaseModel): # Optional user feedback limited to 1–4096 characters to prevent abuse. user_feedback: Optional[str] = Field( default=None, - min_length=1, max_length=4096, - description="Maximum length of user feedback is 4096 characters long.", - examples=["How to Set Up Kubernetes?"], + description="Feedback on the LLM response.", + examples=["I'm not satisfied with the response because it is too vague."], ) # provides examples for /docs endpoint diff --git a/tests/unit/models/test_requests.py b/tests/unit/models/test_requests.py index 67e921f3..3f97329b 100644 --- a/tests/unit/models/test_requests.py +++ b/tests/unit/models/test_requests.py @@ -177,28 +177,14 @@ def test_check_sentiment_or_user_feedback(self) -> None: user_feedback=None, ) - def test_user_feedback_too_long(self) -> None: - """Test that feedback longer than 4096 characters raises an error.""" - with pytest.raises(ValidationError) as exc_info: - FeedbackRequest( - conversation_id="123e4567-e89b-12d3-a456-426614174000", - user_question="What is OpenStack?", - llm_response="OpenStack is a cloud computing platform.", - user_feedback="x" * 4097, - ) - assert "should have at most 4096 characters" in str(exc_info.value) - - - def test_user_feedback_too_short(self) -> None: - """Test that user_feedback shorter than 1 character raises ValidationError.""" - with pytest.raises(ValidationError) as exc_info: - FeedbackRequest( - conversation_id="123e4567-e89b-12d3-a456-426614174000", - user_question="What is OpenStack?", - llm_response="OpenStack is a cloud computing platform.", - user_feedback="", # Empty feedback - ) - assert "should have at least 1 character" in str(exc_info.value) - - - + def test_feedback_too_long(self) -> None: + """Test that user feedback is limited to 4096 characters.""" + with pytest.raises( + ValidationError, match="should have at most 4096 characters" + ): + FeedbackRequest( + conversation_id="12345678-abcd-0000-0123-456789abcdef", + user_question="What is this?", + llm_response="Some response", + user_feedback="a" * 4097, + ) From c74db013712c423739db9df13ee4f36aaf76ec0f Mon Sep 17 00:00:00 2001 From: Omkar Joshi <103182931+omkarjoshi0304@users.noreply.github.com> Date: Fri, 13 Jun 2025 12:11:13 +0100 Subject: [PATCH 4/5] Update main.py --- src/app/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/main.py b/src/app/main.py index 9670e458..9ab7959b 100644 --- a/src/app/main.py +++ b/src/app/main.py @@ -31,4 +31,4 @@ @app.on_event("startup") async def startup_event() -> None: """Perform logger setup on service startup.""" -get_logger("app.endpoints.handlers") \ No newline at end of file + get_logger("app.endpoints.handlers") From 8f1ea75195ec8860390b708e87035103fdc810a5 Mon Sep 17 00:00:00 2001 From: omkarjoshi0304 Date: Fri, 13 Jun 2025 12:52:32 +0100 Subject: [PATCH 5/5] Remove data/ from .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index d785927b..4ae1304e 100644 --- a/.gitignore +++ b/.gitignore @@ -173,4 +173,3 @@ cython_debug/ # PyPI configuration file .pypirc -data/