{"id":27036,"date":"2026-07-21T04:12:22","date_gmt":"2026-07-21T04:12:22","guid":{"rendered":"https:\/\/umang.pk\/2026\/07\/21\/macos-companion-%da%a9%db%92-%d8%b3%d8%a7%d8%aa%da%be-%d9%88%db%8c%d8%a8-%d8%a7%db%8c%d9%be%d8%b3-%d9%85%db%8c%da%ba-%d8%a7%db%8c%d9%be%d9%84-%da%a9%db%92-%d8%a8%d9%86%db%8c%d8%a7%d8%af%db%8c-%d9%85\/"},"modified":"2026-07-21T04:12:25","modified_gmt":"2026-07-21T04:12:25","slug":"macos-companion-%da%a9%db%92-%d8%b3%d8%a7%d8%aa%da%be-%d9%88%db%8c%d8%a8-%d8%a7%db%8c%d9%be%d8%b3-%d9%85%db%8c%da%ba-%d8%a7%db%8c%d9%be%d9%84-%da%a9%db%92-%d8%a8%d9%86%db%8c%d8%a7%d8%af%db%8c-%d9%85","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/07\/21\/macos-companion-%da%a9%db%92-%d8%b3%d8%a7%d8%aa%da%be-%d9%88%db%8c%d8%a8-%d8%a7%db%8c%d9%be%d8%b3-%d9%85%db%8c%da%ba-%d8%a7%db%8c%d9%be%d9%84-%da%a9%db%92-%d8%a8%d9%86%db%8c%d8%a7%d8%af%db%8c-%d9%85\/","title":{"rendered":"MacOS Companion \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0648\u06cc\u0628 \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u067e\u0644 \u06a9\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0627\u0688\u0644 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u062a\u0645\u0627\u0645 AI \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u0688\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0641\u06cc \u0679\u0648\u06a9\u0646 \u0628\u0644\u0646\u06af\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0631\u0627\u0624\u0646\u0688 \u0679\u0631\u067e\u0633\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0630\u0627\u062a\u06cc \u0688\u06cc\u0679\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06cc\u0627 \u0645\u06cc\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u0645\u0639\u0627\u0648\u0646 \u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0645\u0627\u0688\u0644 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0688\u0633\u06a9 \u067e\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0627\u0688\u0644<\/strong> \u0628\u0691\u06d2 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0645\u0627\u0688\u0644\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u067e\u0644 \u06a9\u0627 \u0633\u0648\u0626\u0641\u0679 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0622\u0646 \u0688\u06cc\u0648\u0627\u0626\u0633 \u0645\u0627\u0688\u0644 \u06c1\u06d2 \u062c\u0648 Apple Intelligence\u060c Apple&#8217;s Private Cloud Compute\u060c \u06cc\u0627 \u062f\u0648\u0633\u0631\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u06d2 \u0633\u0631\u0648\u0631 \u0645\u0627\u0688\u0644\u0632 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0622\u0646 \u0688\u06cc\u0648\u0627\u0626\u0633 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0622\u067e \u06a9\u0648\u0626\u06cc \u067e\u06cc\u063a\u0627\u0645 \u0628\u06be\u06cc\u062c\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0622\u067e \u06a9\u06d2 \u0645\u06cc\u06a9 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u06c1\u0627\u0631\u0688 \u0648\u06cc\u0626\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0641\u06cc \u06a9\u0627\u0644 \u0645\u0641\u062a\u060c \u0627\u0648\u0631 \u0622\u0641 \u0644\u0627\u0626\u0646 \u062f\u0648\u0633\u062a\u0627\u0646\u06c1\u06d4<\/p>\n<p>\u062c\u0628 \u0627\u06cc\u067e\u0644 \u0648\u06cc\u0698\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648\u0691\u0627 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0688\u06cc\u0648\u0627\u0626\u0633 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u0686\u06be\u0648\u0691\u06d2 \u0628\u063a\u06cc\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u062e\u0644\u0627\u0635\u06c1\u060c \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc\u060c \u0627\u0648\u0631 \u0633\u0627\u062e\u062a\u06cc \u0646\u06a9\u0627\u0644\u0646\u06d2 \u062c\u06cc\u0633\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 AI \u0641\u0646\u06a9\u0634\u0646\u0632 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-what-you-will-build\">\u06a9\u06cc\u0627 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u0627 \u06c1\u06d2<\/h2>\n<p>\u062a\u0645 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0648 <strong>\u0648\u0698\u0646 \u0628\u0631\u062c<\/strong>\u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u0627\u06cc\u067e \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0645\u0642\u0627\u0645\u06cc macOS \u0633\u0627\u062a\u06be\u06cc \u06a9\u0648 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2\u06d4 \u0633\u0627\u062a\u06be\u06cc Apple Vision \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0645\u0627\u0688\u0644\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0633\u0627\u062e\u062a\u06c1 JSON \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0648\u06cc\u0628 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0630\u0627\u062a\u06cc\u060c \u0622\u0646 \u0688\u06cc\u0648\u0627\u0626\u0633 AI\u06d4<\/p>\n<p>\u0622\u067e \u0627\u0633 GitHub \u0630\u062e\u06cc\u0631\u06c1 \u0645\u06cc\u06ba \u0645\u06a9\u0645\u0644 \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba: github.com\/03balogun\/vision-bridge\u06d4<\/p>\n<p>\u0645\u0642\u0635\u062f \u0627\u06cc\u06a9 \u0628\u06c1\u062a \u0628\u0691\u0627 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0628\u0646\u0627\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0628\u0644\u06a9\u06c1 \u0627\u0633 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0648\u06cc\u0698\u0646 \u0628\u0631\u062c \u062f\u0648 \u062d\u0635\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2:<\/p>\n<p>React \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba:<\/p>\n<p>macOS \u0633\u0627\u062a\u06be\u06cc \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba:<\/p>\n<p>\u0622\u062e\u0631\u06cc \u062c\u0648\u0627\u0628 \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-json\">{\n  \"support\": {\n    \"visionAvailable\": true,\n    \"foundationModelAvailable\": true,\n    \"foundationModelStatus\": \"available\"\n  },\n  \"image\": {\n    \"filename\": \"screenshot.png\",\n    \"contentType\": \"image\/png\",\n    \"byteCount\": 1048576,\n    \"width\": 1440,\n    \"height\": 900\n  },\n  \"vision\": {\n    \"detectedText\": [\n      {\n        \"text\": \"Build failed\",\n        \"confidence\": 0.96,\n        \"boundingBox\": {\n          \"x\": 0.12,\n          \"y\": 0.31,\n          \"width\": 0.45,\n          \"height\": 0.08\n        }\n      }\n    ]\n  },\n  \"model\": {\n    \"summary\": \"The image appears to show a software build failure.\",\n    \"description\": \"A developer tool window is showing an error state with diagnostic text.\",\n    \"suggestedTags\": [\"screenshot\", \"developer-tool\", \"error\"],\n    \"possibleUses\": [\n      \"Generate alt text\",\n      \"Summarize screenshots\",\n      \"Extract document data\"\n    ]\n  }\n}\n<\/code><\/pre>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0627\u0626\u0637<\/h2>\n<p>\u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u06af\u06cc:<\/p>\n<p>\u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0645\u0627\u0688\u0644\u0632 \u06a9\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0622\u067e \u06a9\u06d2 Mac\u060c OS \u0648\u0631\u0698\u0646\u060c \u0627\u0648\u0631 Apple Intelligence \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0633\u0627\u062a\u06be\u06cc \u0627\u0633\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u0627 \u06c1\u0645 \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h2 id=\"heading-why-a-macos-companion-app\">\u0622\u067e \u06a9\u0648 macOS \u0633\u0627\u062a\u06be\u06cc \u0627\u06cc\u067e \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u06d4<\/h2>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 React \u0627\u06cc\u067e \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be \u0633\u06a9\u062a\u06d2:<\/p>\n<pre><code class=\"language-ts\">import FoundationModels from \"apple-frameworks\";\n<\/code><\/pre>\n<p>\u0648\u06c1 API \u0628\u0631\u0627\u0624\u0632\u0631\u0632 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0645\u0642\u0627\u0645\u06cc macOS \u0627\u06cc\u067e\u0633 \u0627\u06cc\u067e\u0644 \u06a9\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0633\u0627\u062a\u06be\u06cc \u0627\u06cc\u067e \u0645\u0642\u0627\u0645\u06cc \u067e\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1\u06cc \u0637\u0631\u0632 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0645\u0642\u0627\u0645\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0648\u06cc\u0628 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-foundation-models-cant-read-images-directly\">\u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0627\u0688\u0644 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be \u0633\u06a9\u062a\u0627\u06d4<\/h2>\n<p>\u0639\u0627\u0645 \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0645\u0627\u0688\u0644\u0632 \u06a9\u0627 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u06cc\u06a9 \u0644\u06cc\u0646\u06af\u0648\u06cc\u062c \u0645\u0627\u0688\u0644 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0646\u06c1\u06cc\u06ba \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0645\u0644\u0679\u06cc \u0645\u0648\u0688\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u0688\u0644 \u06a9\u06cc \u0637\u0631\u062d \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0635\u0648\u06cc\u0631\u06cc \u0627\u0646 \u067e\u0679 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c Companion \u0622\u067e \u06a9\u06d2 \u0627\u0634\u0627\u0631\u06d2 \u0645\u06cc\u06ba Vision OCR \u0645\u0634\u0627\u06c1\u062f\u0627\u062a \u0627\u0648\u0631 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0627\u0688\u0644 \u062e\u0627\u0645 \u067e\u06a9\u0633\u0644\u0632 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0633\u0627\u062e\u062a\u06cc \u0645\u062a\u0646 \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062a\u0642\u0633\u06cc\u0645 \u06c1\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06cc \u0637\u0627\u0642\u062a \u06a9\u0627 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u062a\u0635\u0648\u06cc\u0631\u0648\u06ba \u0633\u06d2 \u0645\u0634\u06cc\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0646\u06a9\u0627\u0644\u0646\u06d2 \u0645\u06cc\u06ba \u0648\u0698\u0646 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0645\u0627\u0688\u0644\u0632 \u0627\u0633 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0648 \u062e\u0644\u0627\u0635\u0648\u06ba\u060c \u0644\u06cc\u0628\u0644\u0632\u060c \u0648\u0636\u0627\u062d\u062a\u0648\u06ba\u060c \u0627\u0648\u0631 \u0633\u0627\u062e\u062a\u06cc \u0622\u0624\u0679 \u067e\u0679 \u0645\u06cc\u06ba \u0628\u062f\u0644 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1784607142_364_MacOS-Companion-\u06a9\u06d2-\u0633\u0627\u062a\u06be-\u0648\u06cc\u0628-\u0627\u06cc\u067e\u0633-\u0645\u06cc\u06ba-\u0627\u06cc\u067e\u0644-\u06a9\u06d2-\u0628\u0646\u06cc\u0627\u062f\u06cc.png\" alt=\"\u0648\u06cc\u0698\u0646 \u0628\u0631\u062c \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631: \u0628\u0631\u0627\u0624\u0632\u0631 \u0644\u0648\u06a9\u0644 \u06c1\u0648\u0633\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Apple Vision OCR \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u06cc\u06a9 \u0633\u0648\u0626\u0641\u0679 \u0633\u0627\u062a\u06be\u06cc \u06a9\u0648 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0645\u0627\u0688\u0644\u0632 \u06a9\u0648 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a \u0641\u06cc\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0627\u062e\u062a\u06cc JSON \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"2492\" height=\"1572\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u0648\u067e\u0631 \u0648\u0627\u0644\u0627 \u062e\u0627\u06a9\u06c1 \u0627\u0633 \u0631\u0627\u0624\u0646\u0688 \u0679\u0631\u067e \u06a9\u0648 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u06c1\u0645 \u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u06a9\u06d2 \u0628\u0642\u06cc\u06c1 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062f\u06c1 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 Swift \u0633\u0627\u062a\u06be\u06cc \u06a9\u0648 base64 JSON \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u0648\u06a9\u0644 \u06c1\u0648\u0633\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 Companion \u06a9\u06d2 \u0627\u0646\u062f\u0631\u060c Apple Vision \u062a\u0635\u0648\u06cc\u0631\u0648\u06ba \u067e\u0631 OCR \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u062a\u0646\u06cc \u0645\u0634\u0627\u06c1\u062f\u0627\u062a \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u062a\u0633\u0644\u06cc\u0645 \u0634\u062f\u06c1 \u062a\u0627\u0631\u060c \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06d2 \u0627\u0633\u06a9\u0648\u0631\u060c \u0627\u0648\u0631 \u0628\u0627\u0624\u0646\u0688\u0646\u06af \u0628\u06a9\u0633 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a\u060c \u062e\u0648\u062f \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0634\u0627\u0631\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0648 \u062e\u0644\u0627\u0635\u06d2\u060c \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0679\u06cc\u06af\u0632 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0633\u0627\u062a\u06be\u06cc \u067e\u06be\u0631 \u0648\u06cc\u0698\u0646 \u0622\u0624\u0679 \u067e\u0679 \u0627\u0648\u0631 \u0645\u0627\u0688\u0644 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f JSON \u062c\u0648\u0627\u0628 \u0645\u06cc\u06ba \u0628\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-project-structure\">\u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u06cc \u0633\u0627\u062e\u062a<\/h2>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">vision-bridge\/\n  apps\/\n    web\/\n      src\/\n        main.tsx\n        styles.css\n      package.json\n      vite.config.ts\n    macos-companion\/\n      Package.swift\n      Sources\/\n        VisionBridgeCompanion\/\n          main.swift\n  package.json\n  README.md\n<\/code><\/pre>\n<p>\u062c\u0691 <code>package.json<\/code> \u06a9\u0626\u06cc \u0622\u0633\u0627\u0646 \u0627\u062d\u06a9\u0627\u0645\u0627\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-json\">{\n  \"scripts\": {\n    \"dev\": \"npm --workspace apps\/web run dev\",\n    \"build\": \"npm --workspace apps\/web run build\",\n    \"companion\": \"swift run --package-path apps\/macos-companion VisionBridgeCompanion\"\n  },\n  \"workspaces\": [\"apps\/web\"]\n}\n<\/code><\/pre>\n<h2 id=\"heading-build-the-react-app\">\u0627\u06cc\u06a9 React \u0627\u06cc\u067e \u0628\u0646\u0627\u0646\u0627<\/h2>\n<p>\u0648\u06cc\u0628 \u0627\u06cc\u067e \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u06a9\u0627\u0645 \u06c1\u06d2\u06d4 \u062e\u06cc\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0635\u0627\u0631\u0641 \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06d2 \u0627\u0648\u0631 \u0633\u0627\u062a\u06be\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062f\u06c1 JSON \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u06d2\u06d4<\/p>\n<p>\u0648\u06cc\u0628 \u0627\u06cc\u067e Vite\u060c React\u060c Lucide \u0634\u0628\u06cc\u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 JSON \u0648\u06cc\u0648\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-json\">{\n  \"dependencies\": {\n    \"@vitejs\/plugin-react\": \"^6.0.3\",\n    \"lucide-react\": \"^0.468.0\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-json-view-lite\": \"^2.5.0\",\n    \"vite\": \"^8.1.3\"\n  }\n}\n<\/code><\/pre>\n<p>\u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">npm install\n<\/code><\/pre>\n<p>API \u06a9\u0627 \u0628\u0646\u06cc\u0627\u062f\u06cc URL \u0645\u0642\u0627\u0645\u06cc \u0633\u0627\u062a\u06be\u06cc \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-ts\">const API_BASE_URL = \"http:\/\/127.0.0.1:43119\";\n<\/code><\/pre>\n<h3 id=\"heading-check-companion-health\">\u0633\u0627\u062a\u06be\u06cc \u06a9\u06cc \u0635\u062d\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686<\/h3>\n<p>\u0648\u06cc\u0628 \u0627\u06cc\u067e UI \u0645\u06cc\u06ba \u06cc\u06c1 \u0628\u062a\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0627\u062a\u06be\u06cc \u06a9\u0648 \u067e\u0646\u06af \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0645\u0642\u0627\u0645\u06cc \u067e\u0644 \u0622\u0646 \u0644\u0627\u0626\u0646 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-ts\">async function checkHealth() {\n  setHealthError(null);\n\n  try {\n    const response = await fetch(`${API_BASE_URL}\/v1\/health`);\n    if (!response.ok) {\n      throw new Error(`Health check failed with ${response.status}`);\n    }\n\n    const payload = await response.json();\n    setHealth(payload);\n  } catch (error) {\n    setHealth(null);\n    setHealthError(error instanceof Error ? error.message : \"Companion unavailable\");\n  }\n}\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1784607142_219_MacOS-Companion-\u06a9\u06d2-\u0633\u0627\u062a\u06be-\u0648\u06cc\u0628-\u0627\u06cc\u067e\u0633-\u0645\u06cc\u06ba-\u0627\u06cc\u067e\u0644-\u06a9\u06d2-\u0628\u0646\u06cc\u0627\u062f\u06cc.png\" alt=\"\u0633\u0627\u062a\u06be\u06cc \u0622\u0646 \u0644\u0627\u0626\u0646 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06af\u0648\u0644\u06cc \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"732\" height=\"212\" loading=\"lazy\" title=\"\"><\/p>\n<h3 id=\"heading-convert-the-image-to-base64\">\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0628\u06cc\u0633 64 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u062c\u0628 \u0635\u0627\u0631\u0641 \u06a9\u0633\u06cc \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u06cc\u067e \u0627\u0633\u06d2 \u0628\u06cc\u0633 64 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0627\u0633\u06d2 JSON \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4<\/p>\n<pre><code class=\"language-ts\">function readFileAsBase64(file: File) {\n  return new Promise<string>((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => {\n      const result = String(reader.result);\n      resolve(result.includes(\",\") ? result.split(\",\")[1] : result);\n    };\n    reader.onerror = () => reject(reader.error);\n    reader.readAsDataURL(file);\n  });\n}\n<\/string><\/code><\/pre>\n<p>\u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u06cc\u06c1 \u0648\u0627\u062d\u062f \u0637\u0631\u06cc\u0642\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0622\u067e \u0628\u06be\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba <code>multipart\/form-data<\/code>\u062a\u0627\u06c1\u0645\u060c JSON \u0688\u06cc\u0645\u0648 \u06a9\u0648 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0622\u0633\u0627\u0646 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-analyze-immediately-after-upload\">\u0627\u067e \u0644\u0648\u0688 \u06a9\u06d2 \u0628\u0639\u062f \u0641\u0648\u0631\u06cc \u062a\u062c\u0632\u06cc\u06c1<\/h3>\n<p>\u062a\u0635\u0648\u06cc\u0631 \u0627\u067e \u0644\u0648\u0688 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc \u0627\u06cc\u067e \u0627\u0633 \u06a9\u0627 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-ts\">async function handleFile(file: File) {\n  if (!file.type.startsWith(\"image\/\")) {\n    setError(\"Choose a PNG, JPEG, HEIC, or another browser-readable image.\");\n    return;\n  }\n\n  const base64 = await readFileAsBase64(file);\n  const nextImage = {\n    file,\n    previewUrl: URL.createObjectURL(file),\n    base64,\n  };\n\n  setSelectedImage(nextImage);\n  setAnalysis(null);\n  setError(null);\n  setCopied(false);\n\n  analyzeImage(nextImage);\n}\n<\/code><\/pre>\n<p><code>handleFile<\/code>    \u062a\u0645\u0627\u0645 \u0646\u0626\u06cc \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631\u06cc \u06a9\u0627 \u06a9\u0627\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u062a\u0635\u0648\u06cc\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0628\u06cc\u0633 64 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0628\u0627\u0642\u06cc \u0628\u06c1\u0627\u0624 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06c1\u0648\u062a\u06cc \u06c1\u06d2: \u0630\u0631\u06cc\u0639\u06c1\u06d4 <code>File<\/code> (\u0646\u0627\u0645 \u0627\u0648\u0631 MIME \u0642\u0633\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2)\u060c \u067e\u06cc\u0634 \u0646\u0638\u0627\u0631\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0628\u062c\u06cc\u06a9\u0679 URL\u060c \u0627\u0648\u0631 API \u06a9\u0627\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 base64 \u067e\u06d2 \u0644\u0648\u0688\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06cc\u06c1 \u067e\u0686\u06be\u0644\u06cc \u0631\u0646 \u0633\u06d2 \u067e\u0631\u0627\u0646\u06d2 \u062a\u062c\u0632\u06cc\u06c1\u060c \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a\u060c \u0627\u0648\u0631 &quot;\u06a9\u0627\u067e\u06cc \u0634\u062f\u06c1&#8221; \u0627\u0634\u0627\u0631\u06d2 \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 UI \u06a9\u0648 \u0646\u0626\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0648\u0627\u0644\u06cc \u0622\u062e\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0633\u06d2 \u0646\u062a\u0627\u0626\u062c \u062f\u06a9\u06be\u0627\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 <code>analyzeImage(nextImage)<\/code> \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631<\/p>\n<p>\u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u067e\u0627\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>selectedImage<\/code> \u0631\u06cc\u0627\u0633\u062a: \u0631\u06cc \u0627\u06cc\u06a9\u0679 \u0627\u0633\u0679\u06cc\u0679 \u0627\u067e \u0688\u06cc\u0679\u0633 \u0627\u06af\u0644\u06d2 \u0631\u06cc\u0646\u0688\u0631 \u062a\u06a9 \u0627\u062b\u0631 \u0627\u0646\u062f\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0627\u06af\u0631 \u0622\u067e \u0631\u06cc\u0627\u0633\u062a \u06a9\u0648 \u06cc\u06c1\u0627\u06ba \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u06c1\u0648\u06af\u0627 <em>\u067e\u0686\u06be\u0644\u06d2<\/em> \u0648\u06cc\u0688\u06cc\u0648<\/p>\n<p>\u06a9\u06c1 <code>Analyze<\/code> \u0628\u0679\u0646 \u0627\u0628 \u0628\u06be\u06cc UI \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u062f\u0633\u062a\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u0646\u0686 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0628\u0679\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-send-the-image-to-the-companion\">\u062a\u0635\u0648\u06cc\u0631 \u0627\u067e\u0646\u06d2 \u0633\u0627\u062a\u06be\u06cc \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/h3>\n<p>\u0628\u0646\u06cc\u0627\u062f\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-ts\">const analysisRequestId = useRef(0);\n\nasync function analyzeImage(image = selectedImage) {\n  if (!image) {\n    setError(\"Choose an image first.\");\n    return;\n  }\n\n  const requestId = analysisRequestId.current + 1;\n  analysisRequestId.current = requestId;\n\n  setRequestState(\"loading\");\n  setError(null);\n  setCopied(false);\n\n  try {\n    const response = await fetch(`${API_BASE_URL}\/v1\/analyze-image`, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application\/json\",\n      },\n      body: JSON.stringify({\n        filename: image.file.name,\n        mimeType: image.file.type || \"application\/octet-stream\",\n        base64: image.base64,\n      }),\n    });\n\n    const payload = await response.json();\n\n    if (requestId !== analysisRequestId.current) {\n      return;\n    }\n\n    if (!response.ok) {\n      throw new Error(payload.error?.message ?? `Analysis failed with ${response.status}`);\n    }\n\n    setAnalysis(payload);\n    setRequestState(\"success\");\n  } catch (error) {\n    if (requestId !== analysisRequestId.current) {\n      return;\n    }\n\n    setRequestState(\"error\");\n    setError(error instanceof Error ? error.message : \"Could not analyze image\");\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u067e\u0644 \u06a9\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u06c1\u06d2\u06d4 \u0628\u062f\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2 <code>requestState<\/code> \u06a9\u0648 <code>loading<\/code> (\u0627\u0633\u067e\u0646\u0631 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0679\u0646 \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2) \u067e\u06be\u0631 <code>POST<\/code> \u06a9\u0648 <code>\/v1\/analyze-image<\/code> \u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 JSON \u0628\u0627\u0688\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u062a\u06cc\u0646 \u0641\u06cc\u0644\u0688\u0632 \u06c1\u06cc\u06ba: \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0646\u0627\u0645\u060c MIME \u0642\u0633\u0645\u060c \u0627\u0648\u0631 base64 \u0627\u0645\u06cc\u062c \u0688\u06cc\u0679\u0627\u06d4 \u062c\u0633\u0645 \u06a9\u0648 \u0648\u0646 \u0679\u0648 \u0648\u0646 \u0645\u06cc\u067e \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>AnalyzeImageRequest<\/code> \u06c1\u0645 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0633\u0648\u0626\u0641\u0679 \u0633\u0627\u062a\u06be\u06cc \u0688\u06cc \u06a9\u0648\u0688\u0646\u06af \u06a9\u06cc \u0633\u0627\u062e\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u062c\u0648\u0627\u0628 \u06a9\u0648 JSON \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u067e\u0627\u0631\u0633 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <em>\u067e\u06c1\u0644\u06d2<\/em> \u0686\u06cc\u06a9 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>response.ok<\/code>. \u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0633\u0627\u062a\u06be\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2 (\u063a\u0644\u0637 \u0628\u06cc\u0633 64\u060c \u0628\u0691\u06cc \u062a\u0635\u0648\u06cc\u0631)\u060c \u062a\u0648 \u06cc\u06c1 \u067e\u06be\u0631 \u0628\u06be\u06cc JSON \u0628\u0627\u0688\u06cc \u0648\u0627\u067e\u0633 \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u06d4 <code>error.message<\/code> \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c UI \u0639\u0627\u0645 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648\u0688 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0633\u0627\u062a\u06be\u06cc \u06a9\u06cc \u0627\u067e\u0646\u06cc \u062a\u0641\u0635\u06cc\u0644 \u0638\u0627\u06c1\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u067e\u06d2 \u0644\u0648\u0688 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0631\u06cc\u0627\u0633\u062a \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 JSON \u0646\u0627\u0638\u0631 \u06a9\u0648 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0648\u0628\u0627\u0631\u06c1 \u067e\u06cc\u0634 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>requestId<\/code> \u0644\u06cc\u062c\u0631 \u0628\u0627\u0633\u06cc \u0631\u062f\u0639\u0645\u0644 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0635\u0627\u0631\u0641 \u067e\u06c1\u0644\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u0648\u0633\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <em>\u0622\u062e\u0631\u06cc<\/em> \u0622\u067e \u062c\u06cc\u062a \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0648\u0631 OCR \u067e\u0644\u0633 \u0645\u0627\u0688\u0644 \u062c\u0646\u0631\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0627\u0641\u06cc \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0648\u0627\u0628\u0627\u062a \u062d\u0642\u06cc\u0642\u062a \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u067e\u06c1\u0646\u0686 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u06c1\u0630\u0627 \u06c1\u0631 \u06a9\u0627\u0644 \u0627\u06cc\u06a9 \u062d\u0648\u0627\u0644\u06c1 \u0645\u06cc\u06ba \u0630\u062e\u06cc\u0631\u06c1 \u0634\u062f\u06c1 \u06a9\u0627\u0624\u0646\u0679\u0631 \u06a9\u0648 \u0628\u0691\u06be\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u0627\u067e\u0646\u06cc ID \u06cc\u0627\u062f \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0633\u06d2 <code>await<\/code>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u067e \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0645\u0648\u062c\u0648\u062f\u06c1 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0627\u0633 \u062f\u0648\u0631\u0627\u0646 \u06a9\u0648\u0626\u06cc \u0646\u06cc\u0627 \u0627\u067e \u0644\u0648\u0688 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0627\u0648\u0648\u0631 \u0631\u0627\u0626\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u067e\u0631\u0627\u0646\u0627 \u062c\u0648\u0627\u0628 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062d\u0630\u0641 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0648\u06c1\u06cc \u0686\u06cc\u06a9 \u0686\u0644\u062a\u0627 \u06c1\u06d2: <code>catch<\/code> \u0627\u0633 \u0644\u06cc\u06d2 \u067e\u0631\u0627\u0646\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0627\u06ba \u0646\u0626\u06cc \u200b\u200b\u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc\u0648\u06ba \u06a9\u06cc \u0631\u0627\u06c1 \u0645\u06cc\u06ba \u062d\u0627\u0626\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062c\u0627\u0631\u06cc HTTP \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0628\u06be\u06cc \u0645\u0646\u0633\u0648\u062e \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>AbortController<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0642\u062f\u0631\u062a\u06cc \u0627\u06af\u0644\u0627 \u0642\u062f\u0645 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-render-the-json-output\">JSON \u0622\u0624\u0679 \u067e\u0679 \u0631\u06cc\u0646\u0688\u0631\u0646\u06af<\/h3>\n<p>\u0622\u0624\u0679 \u067e\u0679 \u0648\u0646\u0688\u0648 \u0645\u06cc\u06ba\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba: <code>react-json-view-lite<\/code>:<\/p>\n<pre><code class=\"language-tsx\"><jsonview data=\"{jsonData}\" shouldexpandnode=\"{allExpanded}\" style=\"{jsonViewTheme}\"\/>\n<\/code><\/pre>\n<h2 id=\"heading-build-the-macos-companion-app\">\u0627\u06cc\u06a9 macOS \u0633\u0627\u062a\u06be\u06cc \u0627\u06cc\u067e \u0628\u0646\u0627\u0646\u0627<\/h2>\n<p>\u0633\u0627\u062a\u06be\u06cc \u0627\u06cc\u06a9 \u0633\u0648\u0626\u0641\u0679 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0627\u06cc\u067e \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06d2 \u0633\u06d2 \u0645\u0642\u0627\u0645\u06cc HTTP API \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0648\u06cc\u0628 \u0633\u0627\u0626\u0688 \u0633\u06d2 \u0622\u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0646\u0642\u0634\u06c1 \u0633\u0627\u0632\u06cc \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 Swift Package Manager Swift \u06a9\u06d2 \u0644\u06cc\u06d2 npm \u06c1\u06d2\u06d4 <code>Package.swift<\/code> \u0627\u0633 \u06a9\u0627 <code>package.json<\/code>\u0627\u0648\u0631 <code>swift run<\/code> \u0627\u0633 \u06a9\u0627 <code>npm start<\/code>. \u06cc\u06c1 \u0627\u06cc\u06a9\u0633 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0627\u0636\u0627\u0641\u06cc \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>Package.swift<\/code> \u0641\u0627\u0626\u0644\u06cc\u06ba \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-swift\">\/\/ swift-tools-version: 6.0\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"VisionBridgeCompanion\",\n    platforms: [\n        .macOS(\"26.0\")\n    ],\n    products: [\n        .executable(\n            name: \"VisionBridgeCompanion\",\n            targets: [\"VisionBridgeCompanion\"]\n        )\n    ],\n    targets: [\n        .executableTarget(\n            name: \"VisionBridgeCompanion\"\n        )\n    ]\n)\n<\/code><\/pre>\n<p>\u0633\u0627\u062a\u06be\u06cc \u0627\u06cc\u067e\u0644 \u06a9\u06d2 \u0636\u0631\u0648\u0631\u06cc \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-swift\">import Foundation\nimport FoundationModels\nimport ImageIO\nimport Network\nimport Vision\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0633\u0646\u062a\u0627 \u06c1\u06d2 <code>127.0.0.1:43119<\/code>:<\/p>\n<pre><code class=\"language-swift\">private let defaultPort: UInt16 = 43119\n<\/code><\/pre>\n<p>\u0627\u06cc\u067e \u062f\u0648 \u0631\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u062a\u06cc \u06c1\u06d2:<\/p>\n<pre><code class=\"language-swift\">switch (request.method, request.path) {\ncase (\"GET\", \"\/v1\/health\"):\n    let health = HealthResponse(support: ModelSupport.current)\n    return try json(health)\n\ncase (\"POST\", \"\/v1\/analyze-image\"):\n    let payload = try JSONDecoder().decode(AnalyzeImageRequest.self, from: request.body)\n    let response = try await service.analyze(payload)\n    return try json(response)\n\ndefault:\n    return try json(\n        ErrorResponse(error: APIErrorPayload(message: \"Route not found\")),\n        status: .notFound\n    )\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 <code>switch<\/code> \u0633\u0627\u062a\u06be\u06cc \u06a9\u06cc \u067e\u0648\u0631\u06cc \u0631\u0648\u0679\u0646\u06af \u067e\u0631\u062a\u06d4 \u06a9\u0648\u0626\u06cc \u0648\u06cc\u0628 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0635\u0631\u0641 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0627\u0648\u0631 \u0631\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u0646\u0645\u0648\u0646\u06c1 \u0645\u0644\u0627\u067e \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0631\u0627\u0633\u062a\u06d2 \u0635\u0641\u0627\u0626\u06cc \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ul>\n<li>\n<p><code>GET \/v1\/health<\/code>    \u06cc\u06c1 \u0635\u0631\u0641 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0633\u062a\u0627 \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u062a\u062c\u0632\u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627\u062a\u0627\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 \u0645\u06cc\u06a9 \u067e\u0631 \u0648\u06cc\u0698\u0646 \u0627\u0648\u0631 \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0645\u0627\u0688\u0644 \u0628\u0630\u0631\u06cc\u0639\u06c1 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06cc\u06ba: <code>ModelSupport.current<\/code> (\u0627\u06af\u0644\u06d2 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2)\u06d4 React \u0627\u06cc\u067e\u0633 \u0627\u0633\u06d2 \u0622\u0646 \u0644\u0648\u0688 \u067e\u0631 \u0622\u0646 \u0644\u0627\u0626\u0646\/\u0622\u0641 \u0644\u0627\u0626\u0646 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u06cc \u06af\u0648\u0644\u06cc \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062a\u0627\u06a9\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06a9\u06c1 \u067e\u0644 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0648\u06c1 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>POST \/v1\/analyze-image<\/code>    \u06cc\u06c1\u06cc\u06ba \u0633\u06d2 \u0627\u0635\u0644 \u06a9\u0627\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u062c\u0633\u0645 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u0631\u06cc\u06ba: <code>AnalyzeImageRequest<\/code> (\u0627\u06cc\u06a9 \u06c1\u06cc <code>filename<\/code>\u060c <code>mimeType<\/code>\u0627\u0648\u0631 <code>base64<\/code> \u0641\u06cc\u0644\u0688\u0632 \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u06d2 \u0628\u06be\u06cc\u062c\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba) \u0627\u0648\u0631 \u062a\u062c\u0632\u06cc\u06c1 \u0633\u0631\u0648\u0633 \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0648\u06cc\u0698\u0646 OCR \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0627\u0688\u0644 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0646\u062a\u0627\u0626\u062c \u0648\u0627\u067e\u0633 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>try await<\/code> \u06cc\u06c1\u0627\u06ba \u0627\u06c1\u0645 \u0628\u0627\u062a: \u062a\u062c\u0632\u06cc\u06c1 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u0627\u0633\u062a\u06c1 \u0627\u0633\u06d2 \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0635\u0631\u0641 \u062c\u0648\u0627\u0628 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be JSON 404 \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u06cc\u06c1 \u0646\u0627\u0645\u0639\u0644\u0648\u0645 \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2\u060c \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0633\u06cc \u0641\u0627\u0631\u0645\u06cc\u0679 \u0645\u06cc\u06ba \u062c\u0648\u0627\u0628 \u062f\u06d2 \u06af\u0627 \u062c\u0633\u06d2 \u0648\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u062c\u0627\u0646\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u063a\u0644\u0637\u06cc\u0627\u06ba \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u062c\u0648 \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba \u0648\u06c1 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u067e\u06a9\u0691\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be JSON \u0627\u06cc\u0631\u0631 \u0631\u0633\u067e\u0627\u0646\u0633 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06cc\u0628 \u0627\u06cc\u067e \u06a9\u0627 \u06a9\u0648\u0688 \u06c1\u06d2\u06d4 <code>payload.error?.message<\/code> \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc\u0627 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0639\u0645\u0644\u06cc \u062a\u0641\u0635\u06cc\u0644: \u0686\u0648\u0646\u06a9\u06c1 \u0628\u0631\u0627\u0624\u0632\u0631 \u0633\u0627\u062a\u06be\u06cc \u06a9\u0648 \u062f\u0648\u0633\u0631\u06d2 \u0627\u0635\u0644 (\u0648\u0627\u0626\u0679 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u0633\u0631\u0648\u0631) \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06c1\u0631 \u062c\u0648\u0627\u0628 \u0645\u06cc\u06ba CORS \u06c1\u06cc\u0688\u0631 \u0628\u06be\u06cc \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0631\u0627\u0624\u0679\u0631 \u067e\u0631\u0648\u0627\u0632 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>OPTIONS<\/code> \u062e\u0627\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a <code>204<\/code>. \u0628\u0635\u0648\u0631\u062a \u062f\u06cc\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u0628\u0644\u0627\u06a9 \u06a9\u0631 \u062f\u06d2 \u06af\u0627: <code>fetch<\/code> \u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4<\/p>\n<h2 id=\"heading-check-foundation-models-availability\">\u0628\u06cc\u0633 \u0645\u0627\u0688\u0644 \u06a9\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0635\u062d\u0627\u0628\u06c1 \u06a9\u0648 \u06cc\u06c1 \u062e\u06cc\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06c1 \u0627\u06cc\u06a9 \u0645\u0627\u0688\u0644 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2. \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-swift\">private struct ModelSupport: Encodable {\n    let visionAvailable: Bool\n    let foundationModelAvailable: Bool\n    let foundationModelStatus: String\n\n    static var current: ModelSupport {\n        let model = SystemLanguageModel.default\n\n        switch model.availability {\n        case .available:\n            return ModelSupport(\n                visionAvailable: true,\n                foundationModelAvailable: true,\n                foundationModelStatus: \"available\"\n            )\n\n        case .unavailable(let reason):\n            return ModelSupport(\n                visionAvailable: true,\n                foundationModelAvailable: false,\n                foundationModelStatus: \"unavailable.(reason.description)\"\n            )\n\n        @unknown default:\n            return ModelSupport(\n                visionAvailable: true,\n                foundationModelAvailable: false,\n                foundationModelStatus: \"unavailable.unknown\"\n            )\n        }\n    }\n}\n<\/code><\/pre>\n<p>\u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0635\u0627\u0631\u0641 \u063a\u06cc\u0631 \u062a\u0639\u0627\u0648\u0646 \u06cc\u0627\u0641\u062a\u06c1 \u0645\u06cc\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u0648\u060c \u0627\u06cc\u067e\u0644 \u0627\u0646\u0679\u06cc\u0644\u06cc \u062c\u0646\u0633 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u060c \u06cc\u0627 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0627\u0688\u0644 \u0627\u0628\u06be\u06cc \u062a\u06cc\u0627\u0631 \u0646\u06c1 \u06c1\u0648\u06d4 \u062c\u0648\u0627\u0628 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u06a9\u06cc\u0633 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0627\u062a\u06be\u06cc \u0628\u06cc\u0633 64 \u0627\u0645\u06cc\u062c \u06a9\u0648 \u0688\u06cc \u06a9\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 Vision OCR \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062a\u0646 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-swift\">private func recognizeText(in imageData: Data) async throws -> [DetectedText] {\n    var request = RecognizeTextRequest()\n    request.recognitionLevel = .accurate\n    request.automaticallyDetectsLanguage = true\n    request.usesLanguageCorrection = true\n\n    let observations = try await request.perform(on: imageData)\n\n    var detectedText: [DetectedText] = []\n\n    for observation in observations {\n        guard let candidate = observation.topCandidates(1).first else {\n            continue\n        }\n\n        let bounds = NormalizedBox.from(points: [\n            observation.topLeft,\n            observation.topRight,\n            observation.bottomRight,\n            observation.bottomLeft\n        ])\n\n        detectedText.append(DetectedText(\n            text: candidate.string,\n            confidence: Double(candidate.confidence),\n            boundingBox: bounds\n        ))\n    }\n\n    return detectedText\n}\n<\/code><\/pre>\n<p>\u0648\u0698\u0646 \u0645\u0646\u0638\u0645 \u0645\u0634\u0627\u06c1\u062f\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0634\u0627\u06c1\u062f\u0627\u062a \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0628\u0646 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-ask-foundation-models-to-explain-the-vision-output\">\u0648\u0698\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc\u0633 \u0645\u0627\u0688\u0644 \u0633\u06d2 \u067e\u0648\u0686\u06be\u06cc\u06ba\u06d4<\/h2>\n<p>\u0633\u0627\u062a\u06be\u06cc \u0627\u0628 \u062a\u0635\u0648\u06cc\u0631\u06cc \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0627\u0648\u0631 OCR \u0646\u062a\u0627\u0626\u062c \u0633\u06d2 \u0627\u0634\u0627\u0631\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u062f\u0627\u06cc\u0627\u062a \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba.<\/p>\n<pre><code class=\"language-text\">You cannot see the original image. Use only the metadata and OCR observations below.\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0627\u06cc\u0645\u0627\u0646\u062f\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u0633\u06d2 \u067e\u06a9\u0633\u0644\u0632 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u0628\u06c1\u0627\u0646\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0648 \u0648\u06c1\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0631\u0627\u0645\u067e\u0679 \u0627\u0633 \u0637\u0631\u062d \u0644\u06af\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-swift\">let textPreview = detectedText\n    .prefix(30)\n    .map { \"- ($0.text) (confidence: (String(format: \"%.2f\", $0.confidence)))\" }\n    .joined(separator: \"n\")\n\nlet prompt = \"\"\"\nYou are summarizing Apple Vision OCR output for a developer tool named Vision Bridge.\nYou cannot see the original image. Use only the metadata and OCR observations below.\n\nImage:\n- filename: (image.filename)\n- content type: (image.contentType)\n- size: (image.width ?? 0)x(image.height ?? 0)\n\nOCR observations:\n(textPreview.isEmpty ? \"- No text detected.\" : textPreview)\n\nReturn a compact JSON object with these exact keys:\nsummary: one sentence\ndescription: one short paragraph\nsuggestedTags: 3 to 6 short tags\npossibleUses: 3 to 5 practical use cases for this kind of image analysis\n\"\"\"\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u06c1\u0645 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-swift\">let session = LanguageModelSession(\n    model: .default,\n    instructions: \"Return valid JSON only. Do not include Markdown fences.\"\n)\n\nlet response = try await session.respond(to: prompt)\nlet raw = response.content.trimmingCharacters(in: .whitespacesAndNewlines)\n<\/code><\/pre>\n<p>\u06c1\u0645\u06cc\u0634\u06c1 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u060c \u0686\u0627\u06c1\u06d2 \u0622\u067e JSON \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u0648\u06ba\u06d4 \u0645\u0627\u0688\u0644 \u0627\u0628 \u0628\u06be\u06cc \u0645\u0627\u0631\u06a9 \u0688\u0627\u0648\u0646 \u0628\u0627\u0691 \u06cc\u0627 \u062e\u0631\u0627\u0628 \u0645\u062a\u0646 \u0648\u0627\u067e\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0645\u0648\u0646\u06c1 \u0627\u06cc\u067e \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0645\u0627\u0631\u06a9 \u0688\u0627\u0624\u0646 \u06a9\u0648\u0688 \u06a9\u06cc \u0628\u0627\u0691 \u06a9\u0648 \u06c1\u0679\u0627 \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0631 \u062a\u062c\u0632\u06cc\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u062e\u0627\u0645 \u062c\u0648\u0627\u0628 \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-return-json-to-the-browser\">JSON \u06a9\u0648 \u0628\u0631\u0627\u0624\u0632\u0631 \u067e\u0631 \u0644\u0648\u0679\u0627\u0626\u06cc\u06ba\u06d4<\/h2>\n<p>\u0633\u0627\u062a\u06be\u06cc \u0633\u067e\u0648\u0631\u0679 \u0627\u0633\u0679\u06cc\u0679\u0633\u060c \u0627\u0645\u06cc\u062c \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627\u060c \u0648\u06cc\u0698\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c\u060c \u0627\u0648\u0631 \u0645\u0627\u0688\u0644 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 \u06cc\u06a9\u062c\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-swift\">return AnalyzeImageResponse(\n    support: support,\n    image: metadata,\n    vision: VisionPayload(detectedText: detectedText),\n    model: modelInsight\n)\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0648\u0698\u0646 \u06cc\u0627 \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0645\u0627\u0688\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 JSON \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0642\u0627\u0645\u06cc \u0627\u06cc\u067e\u0633 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06cc \u0645\u0627\u0644\u06a9 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06cc\u0628 \u0627\u06cc\u067e\u0633 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06cc \u0645\u0627\u0644\u06a9 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0686\u0627\u0631 \u0628\u0644\u0627\u06a9\u0633 \u0627\u06cc\u06a9 \u06c1\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0633\u0648\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06c1 \u0644\u06cc\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0628\u0644\u0627\u06a9 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><code>support<\/code>    \u06c1\u0645 \u0622\u067e \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u0627\u0633 \u0645\u06cc\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0627 \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 <code>foundationModelAvailable<\/code> \u06c1\u06d2 <code>false<\/code>\u060c <code>model<\/code> \u0628\u0644\u0627\u06a9 \u0627\u0628 \u0628\u06be\u06cc \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0645\u06cc\u06ba \u0627\u0635\u0644 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u0645\u062a\u0628\u0627\u062f\u0644 \u067e\u06cc\u063a\u0627\u0645 \u06c1\u06d2\u060c \u0627\u0648\u0631 <code>foundationModelStatus<\/code> \u0627\u06cc\u06a9 \u062a\u0627\u0631\u060c \u062c\u06cc\u0633\u06d2 <code>unavailable.appleIntelligenceNotEnabled<\/code>) UI \u06a9\u0648 \u0645\u0637\u0644\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <em>\u06a9\u06cc\u0648\u06ba<\/em>\u0644\u06c1\u0670\u0630\u0627 \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0627\u0646\u062d\u0637\u0627\u0637 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>image<\/code>    \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0627\u0648\u0631 \u0645\u0627\u067e\u06d2 \u06c1\u0648\u0626\u06d2 \u067e\u06a9\u0633\u0644 \u06a9\u06d2 \u0637\u0648\u0644 \u0648 \u0639\u0631\u0636 \u06a9\u06cc \u0628\u0627\u0632\u06af\u0634\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0639\u0642\u0644 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0648\u0698\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0642\u0627\u0645\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0648\u0691\u0627\u0626\u06cc \u0627\u0648\u0631 \u0627\u0648\u0646\u0686\u0627\u0626\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p><code>vision<\/code>    \u0633\u0686 \u06c1\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u0634\u06d2 \u06c1\u06d2\u06d4 <code>detectedText<\/code> \u06cc\u06c1 \u0648\u06c1 \u0633\u0679\u0631\u0646\u06af \u06c1\u06d2 \u062c\u0633\u06d2 \u0648\u0698\u0646 \u0646\u06d2 \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u067e\u0627\u06cc\u0627\u060c 0 \u0627\u0648\u0631 1 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06d2 \u0627\u0633\u06a9\u0648\u0631 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u0627\u0631\u0645\u0644\u0627\u0626\u0632\u0688 \u0628\u0627\u0624\u0646\u0688\u0646\u06af \u0628\u0627\u06a9\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 (\u062a\u0635\u0648\u06cc\u0631\u06cc \u0633\u0627\u0626\u0632 \u06a9\u06d2 \u0627\u06cc\u06a9 \u062d\u0635\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062f\u06c1 \u0646\u0642\u0627\u0637)\u06d4 <code>x: 0.12, width: 0.45<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 &quot;\u0628\u0627\u0626\u06cc\u06ba \u0633\u06d2 12% \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0686\u0648\u0691\u0627\u0626\u06cc \u06a9\u06d2 45% \u062a\u06a9 \u067e\u06be\u06cc\u0644\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4&#8221; \u062e\u0627\u0646\u0648\u06ba \u06a9\u0648 \u0646\u0627\u0631\u0645\u0644\u0627\u0626\u0632 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0688\u0633\u067e\u0644\u06d2 \u0633\u0627\u0626\u0632 \u067e\u0631 \u067e\u06cc\u0634 \u0646\u0638\u0627\u0631\u06c1 \u0645\u06cc\u06ba \u0646\u0645\u0627\u06cc\u0627\u06ba \u0627\u0648\u0648\u0631\u0644\u06d2 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06cc\u0634 \u06a9\u0631\u062f\u06c1 \u0633\u0627\u0626\u0632 \u06a9\u0648 \u0636\u0631\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0645 \u0628\u06be\u0631\u0648\u0633\u06c1 \u0648\u0627\u0644\u06cc \u0627\u0634\u06cc\u0627\u0621 \u067e\u0631 \u0628\u06be\u0631\u0648\u0633\u06c1 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0646 \u06a9\u0648 \u0641\u0644\u0679\u0631 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 \u062c\u06be\u0646\u0688\u0627 \u0644\u06af\u0627\u0646\u06d2 \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>model<\/code>    \u06cc\u06c1 \u0627\u06cc\u06a9 \u062a\u0639\u0628\u06cc\u0631 \u06c1\u06d2\u060c \u0645\u0634\u0627\u06c1\u062f\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>summary<\/code>\u060c <code>description<\/code>\u060c <code>suggestedTags<\/code>\u0627\u0648\u0631 <code>possibleUses<\/code> \u0641\u06cc\u0644\u0688\u0632 OCR \u0679\u06cc\u06a9\u0633\u0679 \u06a9\u06d2 \u0644\u06cc\u0646\u06af\u0648\u06cc\u062c \u0645\u0627\u0688\u0644 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u062a\u0628\u0627\u062f\u0644 \u0645\u062a\u0646\u060c \u06a9\u06cc\u067e\u0634\u0646\u0632\u060c \u06cc\u0627 \u0679\u06cc\u06af \u06a9\u06cc \u062a\u062c\u0627\u0648\u06cc\u0632 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 OCR \u0633\u06d2 \u063a\u0627\u0626\u0628 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0648\u0631\u0627\u062b\u062a \u0645\u06cc\u06ba \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062d\u0642\u06cc\u0642\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u0645\u0633\u0648\u062f\u06c1 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0648 JSON \u06a9\u06d2 \u0628\u0637\u0648\u0631 \u067e\u0627\u0631\u0633 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>rawResponse<\/code> \u06cc\u06c1 \u063a\u06cc\u0631 \u062a\u062c\u0632\u06cc\u06c1 \u0634\u062f\u06c1 \u0645\u062a\u0646 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0636\u0627\u0626\u0639 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0646\u0627\u06a9\u0627\u0645 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0645\u0627\u0688\u0644 \u0628\u0644\u0627\u06a9 \u0627\u0633 \u0637\u0631\u062d \u0648\u0627\u067e\u0633 \u0622\u0633\u06a9\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-json\">{\n  \"model\": {\n    \"summary\": \"The image appears to show a software build failure.\",\n    \"description\": \"A developer tool window is showing an error state with diagnostic text.\",\n    \"suggestedTags\": [\"screenshot\", \"developer-tool\", \"error\"],\n    \"possibleUses\": [\n      \"Generate alt text\",\n      \"Summarize screenshots\",\n      \"Extract document data\"\n    ]\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0645\u062c\u0645\u0648\u0639\u06c1 (\u0648\u0698\u0646 \u0645\u06cc\u06ba \u0645\u0642\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062f\u0631\u0633\u062a \u0645\u062a\u0646 \u0627\u0648\u0631 \u0645\u0627\u0688\u0644 \u0633\u06d2 \u0627\u0646\u0633\u0627\u0646\u06cc \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u062a\u0634\u0631\u06cc\u062d) \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u062d\u0642\u06cc\u0642\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>detectedText<\/code> \u0627\u0648\u0631 <code>suggestedTags<\/code>\u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062f\u06c1 \u0627\u0645\u06cc\u062c\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0648\u062f\u06a9\u0627\u0631 Alt \u0679\u06cc\u06a9\u0633\u0679 \u06cc\u0627 \u0628\u0627\u0624\u0646\u0688\u0646\u06af \u0628\u0627\u06a9\u0633\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0686\u0644\u0627\u0626\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0648\u0648\u0631\u0644\u06cc\u0632 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0648\u0631 \u0686\u0648\u0646\u06a9\u06c1 \u067e\u0631\u0627\u0645\u067e\u0679 \u0633\u0627\u062a\u06be\u06cc \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062c\u0648 \u0648\u0627\u067e\u0633 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 (\u062c\u06cc\u0633\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06a9\u0648 \u0679\u06cc\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0631\u0633\u06cc\u062f \u0633\u06d2 \u0622\u0626\u0679\u0645\u0632 \u0646\u06a9\u0627\u0644\u0646\u0627) \u067e\u0631\u0627\u0645\u067e\u0679 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06c1\u06d2\u060c \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-run-the-app\">\u0627\u06cc\u067e \u0686\u0644\u0627\u0626\u06cc\u06ba<\/h2>\n<p>\u0633\u0627\u062a\u06be\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-sh\">npm run companion\n<\/code><\/pre>\n<p>\u0648\u06cc\u0628 \u0627\u06cc\u067e \u06a9\u0648 \u062f\u0648\u0633\u0631\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-sh\">npm run dev\n<\/code><\/pre>\n<p>Vite URL \u06a9\u06be\u0648\u0644\u06cc\u06ba:<\/p>\n<pre><code class=\"language-text\">http:\/\/127.0.0.1:5173\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0648\u06c1 \u0628\u0646\u062f\u0631\u06af\u0627\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u062a\u0648 Vite \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u0628\u0646\u062f\u0631\u06af\u0627\u06c1 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0627 \u0633\u0627\u062a\u06be\u06cc \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0642\u0627\u0645 \u067e\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2:<\/p>\n<pre><code class=\"language-text\">http:\/\/127.0.0.1:43119\n<\/code><\/pre>\n<p>\u0622\u067e \u062e\u0648\u062f \u0627\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-sh\">curl http:\/\/127.0.0.1:43119\/v1\/health\n<\/code><\/pre>\n<p>\u0645\u062a\u0648\u0642\u0639 \u062c\u0648\u0627\u0628:<\/p>\n<pre><code class=\"language-json\">{\n  \"app\": \"Vision Bridge Companion\",\n  \"ok\": true,\n  \"support\": {\n    \"foundationModelAvailable\": true,\n    \"foundationModelStatus\": \"available\",\n    \"visionAvailable\": true\n  },\n  \"version\": \"0.1.0\"\n}\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/07\/1784607142_44_MacOS-Companion-\u06a9\u06d2-\u0633\u0627\u062a\u06be-\u0648\u06cc\u0628-\u0627\u06cc\u067e\u0633-\u0645\u06cc\u06ba-\u0627\u06cc\u067e\u0644-\u06a9\u06d2-\u0628\u0646\u06cc\u0627\u062f\u06cc.png\" alt=\"\u0679\u0631\u0645\u06cc\u0646\u0644 \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u0627\u062a\u06be\u06cc \u06a9\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\" style=\"display:block;margin:0 auto\" width=\"1448\" height=\"556\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0627\u0628 \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 React \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06c1\u06d2\u060c \u0627\u06cc\u067e\u0644 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0645\u06cc\u062c\u0632 \u06a9\u0627 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 Swift \u0633\u0627\u062a\u06be\u06cc\u060c \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0628\u06c1\u0646\u06d2 \u0648\u0627\u0644\u0627 JSON \u06c1\u06d2\u06d4<\/p>\n<p>\u0648\u0698\u0646 \u0628\u0631\u062c \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0686\u06be\u0648\u0679\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u067e\u0644 \u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u06be\u0631\u0648\u0633\u06c1 \u0645\u0646\u062f \u0688\u06cc\u0641\u0627\u0644\u0679 \u0633\u0627\u062a\u06be\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u0622\u067e \u06a9\u06cc \u0648\u06cc\u0628 \u0627\u06cc\u067e \u0631\u06cc\u0645\u0648\u0679 \u0645\u0627\u0688\u0644\u0632 \u06a9\u0648 \u067e\u0631\u0627\u0645\u067e\u0679 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0627\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0645\u06cc\u06a9 \u0633\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2\u060c \u0627\u06cc\u067e\u0644 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2\u060c \u0627\u0648\u0631 \u0633\u0679\u0631\u06a9\u0686\u0631\u0688 \u0688\u06cc\u0679\u0627 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0631\u06cc\u0646\u0688\u0631\u060c \u0627\u0633\u0679\u0648\u0631\u060c \u06cc\u0627 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-resources\">\u0648\u0633\u0627\u0626\u0644<\/h2>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062a\u0645\u0627\u0645 AI \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0645\u0627\u0688\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0641\u06cc \u0679\u0648\u06a9\u0646 \u0628\u0644\u0646\u06af\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0631\u0627\u0624\u0646\u0688 \u0679\u0631\u067e\u0633\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u0648 \u0686\u06be\u0648\u0691\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0630\u0627\u062a\u06cc \u0688\u06cc\u0679\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06cc\u0627 \u0645\u06cc\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u0645\u0639\u0627\u0648\u0646 \u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0645\u0627\u0688\u0644 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0688\u0633\u06a9 \u067e\u0631 \u06c1\u06cc\u06ba\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0627\u0688\u0644 \u0628\u0691\u06d2 \u067e\u06cc\u0645\u0627\u0646\u06d2 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":27037,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-27036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=27036"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27036\/revisions"}],"predecessor-version":[{"id":27038,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/27036\/revisions\/27038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/27037"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=27036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=27036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=27036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}