Update app.py
Browse files
app.py
CHANGED
|
@@ -729,56 +729,52 @@ def chat():
|
|
| 729 |
# ======================
|
| 730 |
image_base64 = data.get("image_base64")
|
| 731 |
if image_base64:
|
| 732 |
-
|
| 733 |
-
|
| 734 |
-
|
| 735 |
-
|
| 736 |
-
|
| 737 |
-
|
| 738 |
-
|
| 739 |
-
|
| 740 |
-
|
| 741 |
-
|
| 742 |
-
|
| 743 |
-
|
| 744 |
-
|
| 745 |
-
|
| 746 |
-
|
| 747 |
-
|
| 748 |
-
|
| 749 |
-
|
| 750 |
-
|
| 751 |
-
|
| 752 |
-
"url": image_base64,
|
| 753 |
-
"detail": "auto"
|
| 754 |
}
|
| 755 |
-
|
| 756 |
-
|
| 757 |
-
|
| 758 |
-
|
| 759 |
-
|
| 760 |
-
|
| 761 |
-
|
| 762 |
-
|
| 763 |
-
|
| 764 |
-
|
| 765 |
-
|
| 766 |
-
|
| 767 |
-
|
| 768 |
-
|
| 769 |
-
|
| 770 |
-
|
| 771 |
-
|
| 772 |
-
|
| 773 |
-
|
| 774 |
-
|
| 775 |
-
|
| 776 |
-
|
| 777 |
-
|
| 778 |
-
|
| 779 |
-
|
| 780 |
-
|
| 781 |
-
return Response(ai_text, mimetype="text/plain")
|
| 782 |
# =====================================================
|
| 783 |
# 🧩 🎚️ (VISION DONE) — LANJUTKAN MODE TEXT SEPERTI BIASA
|
| 784 |
# =====================================================
|
|
|
|
| 729 |
# ======================
|
| 730 |
image_base64 = data.get("image_base64")
|
| 731 |
if image_base64:
|
| 732 |
+
print("[VISION] 🖼️ Image detected → Cohere c4ai-aya-vision-32b")
|
| 733 |
+
try:
|
| 734 |
+
test_b64 = image_base64.split(",", 1)[1] if image_base64.startswith("data:") else image_base64
|
| 735 |
+
base64.b64decode(test_b64, validate=True)
|
| 736 |
+
except Exception:
|
| 737 |
+
return Response("Invalid base64 image", mimetype="text/plain", status=400)
|
| 738 |
+
cohere_url = "https://api.cohere.ai/v2/chat"
|
| 739 |
+
payload = {
|
| 740 |
+
"model": "c4ai-aya-vision-32b",
|
| 741 |
+
"messages": [
|
| 742 |
+
{
|
| 743 |
+
"role": "user",
|
| 744 |
+
"content": [
|
| 745 |
+
{"type": "text", "text": prompt or "Describe this image."},
|
| 746 |
+
{
|
| 747 |
+
"type": "image_url",
|
| 748 |
+
"image_url": {
|
| 749 |
+
"url": image_base64,
|
| 750 |
+
"detail": "auto"
|
| 751 |
+
}
|
|
|
|
|
|
|
| 752 |
}
|
| 753 |
+
]
|
| 754 |
+
}
|
| 755 |
+
]
|
| 756 |
+
}
|
| 757 |
+
|
| 758 |
+
headers = {
|
| 759 |
+
"Authorization": f"Bearer {COHERE_API_KEY}",
|
| 760 |
+
"Content-Type": "application/json"
|
| 761 |
+
}
|
| 762 |
+
|
| 763 |
+
res = requests.post(cohere_url, json=payload, headers=headers, timeout=60)
|
| 764 |
+
|
| 765 |
+
try:
|
| 766 |
+
res_json = res.json()
|
| 767 |
+
except Exception:
|
| 768 |
+
return Response("Cohere non-json response", mimetype="text/plain", status=500)
|
| 769 |
+
|
| 770 |
+
ai_text = (
|
| 771 |
+
res_json
|
| 772 |
+
.get("message", {})
|
| 773 |
+
.get("content", [{}])[0]
|
| 774 |
+
.get("text", "")
|
| 775 |
+
)
|
| 776 |
+
|
| 777 |
+
return Response(ai_text, mimetype="text/plain")
|
|
|
|
|
|
|
| 778 |
# =====================================================
|
| 779 |
# 🧩 🎚️ (VISION DONE) — LANJUTKAN MODE TEXT SEPERTI BIASA
|
| 780 |
# =====================================================
|