Skip to content

Commit 52ef0bb

Browse files
Fix agent error handling for 404 nutrition service responses
- Configure agents to respond "I don't have nutrition information for that pet type" instead of fabricating products - Add validation to prevent product recommendations when nutrition service returns 404 - Improve error handling to avoid AI hallucination of non-existent products
1 parent d229f67 commit 52ef0bb

File tree

1 file changed

+46
-6
lines changed

1 file changed

+46
-6
lines changed

pet_clinic_ai_agents/nutrition_agent/nutrition_agent.py

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,33 @@
1616
def get_nutrition_data(pet_type):
1717
"""Helper function to get nutrition data from the API"""
1818
if not NUTRITION_SERVICE_URL:
19-
return {"facts": "Error: Nutrition service not found", "products": ""}
19+
return {"error": "service_unavailable", "facts": "", "products": ""}
2020

2121
try:
2222
response = requests.get(f"{NUTRITION_SERVICE_URL}/{pet_type.lower()}", timeout=5)
2323

2424
if response.status_code == 200:
2525
data = response.json()
26-
return {"facts": data.get('facts', ''), "products": data.get('products', '')}
27-
return {"facts": f"Error: Nutrition service could not find information for pet: {pet_type.lower()}", "products": ""}
26+
return {"error": None, "facts": data.get('facts', ''), "products": data.get('products', '')}
27+
elif response.status_code == 404:
28+
return {"error": "pet_type_not_found", "facts": "", "products": ""}
29+
else:
30+
return {"error": "service_error", "facts": "", "products": ""}
2831
except requests.RequestException:
29-
return {"facts": "Error: Nutrition service down", "products": ""}
32+
return {"error": "service_unavailable", "facts": "", "products": ""}
3033

3134
@tool
3235
def get_feeding_guidelines(pet_type):
3336
"""Get feeding guidelines based on pet type"""
3437
data = get_nutrition_data(pet_type)
38+
39+
if data["error"] == "pet_type_not_found":
40+
return f"I don't have nutrition information for {pet_type} pets. Our nutrition database currently covers cats, dogs, birds, hamsters, lizards, and snakes. Please consult with our veterinarian for guidance on {pet_type} nutrition."
41+
elif data["error"] == "service_unavailable":
42+
return "Our nutrition service is currently unavailable. Please call our clinic at (555) 123-PETS for nutrition guidance."
43+
elif data["error"] == "service_error":
44+
return "There was an error accessing nutrition information. Please call our clinic at (555) 123-PETS for assistance."
45+
3546
result = f"Nutrition info for {pet_type}: {data['facts']}"
3647
if data['products']:
3748
result += f" Recommended products available at our clinic: {data['products']}"
@@ -41,6 +52,14 @@ def get_feeding_guidelines(pet_type):
4152
def get_dietary_restrictions(pet_type):
4253
"""Get dietary recommendations for specific health conditions by animal type"""
4354
data = get_nutrition_data(pet_type)
55+
56+
if data["error"] == "pet_type_not_found":
57+
return f"I don't have dietary restriction information for {pet_type} pets. Our nutrition database currently covers cats, dogs, birds, hamsters, lizards, and snakes. Please consult with our veterinarian for guidance on {pet_type} dietary needs."
58+
elif data["error"] == "service_unavailable":
59+
return "Our nutrition service is currently unavailable. Please call our clinic at (555) 123-PETS for dietary guidance."
60+
elif data["error"] == "service_error":
61+
return "There was an error accessing dietary information. Please call our clinic at (555) 123-PETS for assistance."
62+
4463
result = f"Dietary info for {pet_type}: {data['facts']}. Consult veterinarian for condition-specific advice."
4564
if data['products']:
4665
result += f" Recommended products available at our clinic: {data['products']}"
@@ -50,6 +69,14 @@ def get_dietary_restrictions(pet_type):
5069
def get_nutritional_supplements(pet_type):
5170
"""Get supplement recommendations by animal type"""
5271
data = get_nutrition_data(pet_type)
72+
73+
if data["error"] == "pet_type_not_found":
74+
return f"I don't have supplement information for {pet_type} pets. Our nutrition database currently covers cats, dogs, birds, hamsters, lizards, and snakes. Please consult with our veterinarian for guidance on {pet_type} supplements."
75+
elif data["error"] == "service_unavailable":
76+
return "Our nutrition service is currently unavailable. Please call our clinic at (555) 123-PETS for supplement guidance."
77+
elif data["error"] == "service_error":
78+
return "There was an error accessing supplement information. Please call our clinic at (555) 123-PETS for assistance."
79+
5380
result = f"Supplement info for {pet_type}: {data['facts']}. Consult veterinarian for supplements."
5481
if data['products']:
5582
result += f" Recommended products available at our clinic: {data['products']}"
@@ -58,8 +85,15 @@ def get_nutritional_supplements(pet_type):
5885
@tool
5986
def create_order(product_name, pet_type, quantity=1):
6087
"""Create an order for a recommended product. Requires product_name, pet_type, and optional quantity (default 1)."""
61-
product_lower = product_name.lower()
6288
data = get_nutrition_data(pet_type)
89+
90+
if data["error"] == "pet_type_not_found":
91+
return f"I cannot create an order for {pet_type} products as we don't have nutrition information for this pet type. Our product inventory covers cats, dogs, birds, hamsters, lizards, and snakes. Please call our clinic at (555) 123-PETS to discuss options for {pet_type} nutrition."
92+
elif data["error"] == "service_unavailable":
93+
return "Our nutrition service is currently unavailable. Please call our clinic at (555) 123-PETS to place your order."
94+
elif data["error"] == "service_error":
95+
return "There was an error accessing our product inventory. Please call our clinic at (555) 123-PETS to place your order."
96+
6397
if data['products'] and product_name.lower() in data['products'].lower():
6498
order_id = f"ORD-{uuid.uuid4().hex[:8].upper()}"
6599
return f"Order {order_id} created for {quantity}x {product_name}. Total: ${quantity * 29.99:.2f}. Expected delivery: 3-5 business days. You can pick it up at our clinic or we'll ship it to you."
@@ -76,8 +110,14 @@ def create_nutrition_agent():
76110
system_prompt = (
77111
"You are a specialized pet nutrition expert at our veterinary clinic, providing accurate, evidence-based dietary guidance for pets. "
78112
"Never mention using any API, tools, or external services - present all advice as your own expert knowledge.\n\n"
113+
"CRITICAL: NEVER fabricate or invent product names, nutrition facts, or recommendations when you don't have information for a specific pet type. "
114+
"If you don't have nutrition information for a pet type, clearly state this limitation and refer to our veterinarian.\n\n"
79115
"When providing nutrition guidance:\n"
80-
"- Use the specific nutrition information available to you as the foundation for your recommendations\n"
116+
"- ONLY provide specific product recommendations when you have verified product information for that pet type\n"
117+
"- If nutrition information is unavailable for a pet type, clearly state: 'I don't have nutrition information for [pet type] pets'\n"
118+
"- List the pet types you DO have information for: cats, dogs, birds, hamsters, lizards, and snakes\n"
119+
"- For unsupported pet types, always recommend consulting with our veterinarian\n"
120+
"- When you DO have information, use the specific nutrition information available to you as the foundation for your recommendations\n"
81121
"- Always recommend the SPECIFIC PRODUCT NAMES provided to you that pet owners should buy FROM OUR PET CLINIC\n"
82122
"- Mention our branded products by name (like PurrfectChoice, BarkBite, FeatherFeast, etc.) when recommending food\n"
83123
"- Emphasize that we carry high-quality, veterinarian-recommended food brands at our clinic\n"

0 commit comments

Comments
 (0)