{"id":254,"date":"2026-10-05T00:00:00","date_gmt":"2026-10-04T20:30:00","guid":{"rendered":"https:\/\/www.anynet.ir\/blog\/%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-%d9%85%d8%af%d9%84%d9%87%d8%a7%db%8c-%d8%b2%d8%a8%d8%a7%d9%86%db%8c-llm-%d8%a8%d8%b1%d8%a7%db%8c-%d9%86%d9%85%d9%88%d9%86%d9%87%d8%b3%d8%a7-2\/"},"modified":"2026-10-05T00:00:00","modified_gmt":"2026-10-04T20:30:00","slug":"%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-%d9%85%d8%af%d9%84%d9%87%d8%a7%db%8c-%d8%b2%d8%a8%d8%a7%d9%86%db%8c-llm-%d8%a8%d8%b1%d8%a7%db%8c-%d9%86%d9%85%d9%88%d9%86%d9%87%d8%b3%d8%a7-2","status":"publish","type":"post","link":"https:\/\/www.anynet.ir\/blog\/%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-%d9%85%d8%af%d9%84%d9%87%d8%a7%db%8c-%d8%b2%d8%a8%d8%a7%d9%86%db%8c-llm-%d8%a8%d8%b1%d8%a7%db%8c-%d9%86%d9%85%d9%88%d9%86%d9%87%d8%b3%d8%a7-2\/","title":{"rendered":"\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u0632\u0628\u0627\u0646\u06cc (LLM) \u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0631\u06cc\u0632\u06cc \u062f\u0631 Cisco Crosswork"},"content":{"rendered":"<div>\n<div>\n<div>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u0645\u0642\u062f\u0645\u0647<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 Crosswork Planning \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u062c\u0627\u0645\u0639\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc \u062a\u0623\u062b\u06cc\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0634\u0628\u06a9\u0647\u060c \u0631\u0634\u062f \u062a\u0631\u0627\u0641\u06cc\u06a9\u060c \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0648 \u062e\u0631\u0627\u0628\u06cc\u200c\u0647\u0627\u06cc \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0631\u0627\u0647\u06a9\u0627\u0631 \u0628\u0627 \u0628\u0647\u0631\u0647\u200c\u06af\u06cc\u0631\u06cc \u0627\u0632 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062a\u0631\u0627\u0641\u06cc\u06a9\u06cc\u060c \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0631\u06cc\u0632\u06cc \u0638\u0631\u0641\u06cc\u062a (Capacity Planning) \u0648 \u0628\u0647\u06cc\u0646\u0647\u200c\u0633\u0627\u0632\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u06a9\u0647 \u0628\u0647 \u0627\u067e\u0631\u0627\u062a\u0648\u0631 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0637\u0631\u0627\u062d\u06cc \u0634\u0628\u06a9\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0648 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 (Reliability) \u0628\u0647\u06cc\u0646\u0647 \u06a9\u0646\u062f. \u062f\u0631 \u0647\u0633\u062a\u0647 \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u060c \u0628\u0644\u0648\u06a9\u200c\u0647\u0627\u06cc \u0633\u0627\u0632\u0646\u062f\u0647 \u0628\u0646\u06cc\u0627\u062f\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0645\u062f\u0644\u200c\u0633\u0627\u0632\u06cc \u0648 \u062f\u0633\u062a\u06a9\u0627\u0631\u06cc \u0634\u0628\u06a9\u0647\u060c \u0634\u0628\u06cc\u0647\u200c\u0633\u0627\u0632\u06cc\u060c \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647\u06cc\u0646\u0647\u200c\u0633\u0627\u0632\u06cc \u0648 \u062a\u062d\u0644\u06cc\u0644 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u0646\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0645\u0634\u062a\u0631\u06cc\u0627\u0646 \u0627\u063a\u0644\u0628 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0645\u062d\u06cc\u0637 \u06a9\u0627\u0631\u06cc \u062e\u0648\u062f \u062f\u0627\u0631\u0646\u062f\u060c \u0627\u0632 \u062c\u0645\u0644\u0647 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\u06cc (Inventory)\u060c \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0646\u0628\u0648\u0647 \u06a9\u0647 \u062a\u0648\u0633\u0637 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u0634\u0648\u0646\u062f. \u067e\u0644\u062a\u0641\u0631\u0645 Crosswork Planning \u0628\u0631\u0627\u06cc \u062f\u0642\u06cc\u0642\u0627\u064b \u0647\u0645\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f\u060c \u0631\u0627\u0628\u0637\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc (APIs) \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 (Python) \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f\u060c \u0627\u0645\u0627 \u062a\u0648\u0633\u0639\u0647 \u0628\u0631 \u067e\u0627\u06cc\u0647 \u0622\u0646\u200c\u0647\u0627 \u0628\u0647\u200c\u0637\u0648\u0631 \u0633\u0646\u062a\u06cc \u0645\u0633\u062a\u0644\u0632\u0645 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0645\u062f\u0644 \u0634\u06cc\u0621\u06af\u0631\u0627 \u0648 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f\u0647\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0628\u0648\u062f\u0647 \u0627\u0633\u062a: \u0635\u0631\u0641 \u0631\u0648\u0632\u0647\u0627 \u062a\u0644\u0627\u0634 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0648\u0631\u062f\u06cc. \u0639\u0627\u0645\u0644\u200c\u0647\u0627\u06cc \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u0632\u0628\u0627\u0646\u06cc \u0628\u0632\u0631\u06af (LLM) \u0627\u06cc\u0646 \u0631\u0648\u0646\u062f \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f. \u0622\u0646\u200c\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u0646\u062f\u060c \u0628\u0631 \u0627\u0633\u0627\u0633 \u0631\u0627\u0628\u0637\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc (APIs) \u0648\u0627\u0642\u0639\u06cc \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u06a9\u0646\u0646\u062f\u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u062f\u0631 \u0645\u062d\u06cc\u0637 Crosswork Planning \u062a\u0633\u062a \u06a9\u0646\u0646\u062f \u0648 \u062f\u0631 \u0639\u0631\u0636 \u0686\u0646\u062f \u062f\u0642\u06cc\u0642\u0647 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0627\u0648\u0644\u06cc\u0647 (Prototype) \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062a\u0648\u0644\u06cc\u062f \u0646\u0645\u0627\u06cc\u0646\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0628\u0647 \u0628\u0631\u0631\u0633\u06cc \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0627\u0648\u0644\u06cc\u0647 (Prototype) \u0628\u0631\u0627\u06cc \u067e\u0627\u0633\u062e\u06af\u0648\u06cc\u06cc \u0628\u0647 \u0633\u0646\u0627\u0631\u06cc\u0648\u06cc \u0645\u0634\u062a\u0631\u06cc \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u062f: \u0645\u0634\u062a\u0631\u06cc \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u0627\u0631\u0647\u0627\u06cc (Circuit IDs) \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u062c\u0648\u062f\u06cc \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u062f \u0622\u0646\u200c\u0647\u0627 \u062f\u0631 \u0645\u062f\u0644 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0631\u06cc\u0632\u06cc (Planning Model) \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0634\u0648\u0646\u062f.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u0622\u0646\u0686\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u0633\u0627\u062e\u062a<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0627\u0632 \u06cc\u06a9 \u0639\u0627\u0645\u0644 \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc LLM \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u062a\u0627 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u067e\u0627\u06cc\u062a\u0648\u0646 (Python) \u0628\u0631\u0627\u06cc Cisco Crosswork Planning \u0628\u0646\u0648\u06cc\u0633\u062f \u0648 \u0633\u067e\u0633 \u0622\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0631 \u0631\u0648\u06cc \u06cc\u06a9 \u0645\u062f\u0644 \u0634\u0628\u06a9\u0647 \u0646\u0645\u0648\u0646\u0647 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0641\u0647\u0631\u0633\u062a\u06cc \u0627\u0632 \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u0645\u062f\u0627\u0631 (Circuit IDs) \u0631\u0627 \u0627\u0632 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 CSV \u0645\u06cc\u200c\u062e\u0648\u0627\u0646\u062f \u0648 \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u0645\u062f\u0627\u0631 \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0628\u0647 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0631\u0627\u0628\u0637 (Interface Description) \u062f\u0631 \u0647\u0631 \u062f\u0648 \u0627\u0646\u062a\u0647\u0627\u06cc \u0645\u062f\u0627\u0631 \u0645\u0646\u0637\u0628\u0642 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<pre><code><span>Connection to device node-2 destination interface 1\n<\/span><\/code><\/pre>\n<p style=\"direction: rtl; text-align: right\">\u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f \u0628\u0647:<\/p>\n<pre><code><span>Connection to device node-2 destination interface 1 (Circuit ID: SR\/IPIG\/371968\/CNC)\n<\/span><\/code><\/pre>\n<p style=\"direction: rtl; text-align: right\">\u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0632\u0628\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc Python \u06cc\u0627 \u0631\u0627\u0628\u0637\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc (API) \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Crosswork Planning \u0622\u0634\u0646\u0627 \u0628\u0627\u0634\u06cc\u062f\u061b \u0627\u06cc\u0646 \u0639\u0627\u0645\u0644 (Agent) \u0645\u0633\u062a\u0646\u062f\u0627\u062a Cisco \u0631\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0646\u062f \u0648 \u06a9\u062f \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0645\u06cc\u200c\u0646\u0648\u06cc\u0633\u062f\u060c \u0648\u0638\u06cc\u0641\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0646\u062a\u06cc\u062c\u0647 \u0645\u0637\u0644\u0648\u0628 \u0631\u0627 \u0628\u0647 \u0648\u0636\u0648\u062d \u0634\u0631\u062d \u062f\u0647\u06cc\u062f \u0648 \u062e\u0631\u0648\u062c\u06cc \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u062d\u062f\u0648\u062f 30 \u062f\u0642\u06cc\u0642\u0647 \u0632\u0645\u0627\u0646 \u0645\u06cc\u200c\u0628\u0631\u062f.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u067e\u06cc\u0634 \u0627\u0632 \u0634\u0631\u0648\u0639<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0634\u0645\u0627 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u0628\u0647:<\/p>\n<ul style=\"direction: rtl; text-align: right\">\n<li><strong style=\"color: rgb(26, 26, 26)\">Crosswork Planning 7.2<\/strong>\u06cc\u0627 \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u062a\u0631\u060c \u0628\u0627 \u0645\u062c\u0648\u0632 \u0627\u062c\u0631\u0627\u06cc Job\u0647\u0627.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u06cc\u06a9 \u0639\u0627\u0645\u0644 (Agent) \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc LLM<\/strong>\u06a9\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u062e\u0648\u0627\u0646\u062f\u0646 \u0635\u0641\u062d\u0627\u062a \u0648\u0628 \u0648 \u0630\u062e\u06cc\u0631\u0647 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0631\u0627 \u062f\u0627\u0631\u062f\u060c \u0645\u0627\u0646\u0646\u062f Codex\u060c Cursor \u06cc\u0627 GitHub Copilot. \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u062f\u0631 \u0627\u06a9\u062a\u0628\u0631 2026 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062f\u0644 Codex \u0628\u0627 \u0628\u0647\u0631\u0647\u200c\u06af\u06cc\u0631\u06cc \u0627\u0632 GPT-6-Luna high \u062a\u0633\u062a \u0634\u062f\u0647 \u0627\u0633\u062a. \u0633\u0627\u06cc\u0631 \u0645\u062f\u0644\u200c\u0647\u0627 \u0646\u06cc\u0632 \u0628\u0627\u06cc\u062f \u06a9\u0627\u0631 \u06a9\u0646\u0646\u062f\u060c \u0627\u0645\u0627 \u062e\u0631\u0648\u062c\u06cc \u0622\u0646\u200c\u0647\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647<\/strong>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634:\n<ul>\n<li><code>sr_topo_base.txt<\/code>: \u06cc\u06a9 \u0634\u0628\u06a9\u0647 \u0646\u0645\u0648\u0646\u0647 \u06a9\u0648\u0686\u06a9 \u0628\u0627 \u0647\u0634\u062a \u06af\u0631\u0647 (Node).<\/li>\n<li><code>circuitid_mappings.csv<\/code>: \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u0645\u062f\u0627\u0631 (Circuit IDs) \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"direction: rtl; text-align: right\">\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0641\u0648\u0642 \u0628\u0631\u0627\u06cc \u062f\u0627\u0646\u0644\u0648\u062f \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0647\u0633\u062a\u0646\u062f \u062f\u0631 <a href=\"https:\/\/github.com\/flim226\/crosswork\/tree\/main\/sample-scripts\/append_circuit_id\" style=\"color: rgb(0, 102, 204)\">github<\/a>.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0635\u0628 Python \u0631\u0648\u06cc \u0633\u06cc\u0633\u062a\u0645 \u062e\u0648\u062f \u0646\u062f\u0627\u0631\u06cc\u062f. \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0631 \u062f\u0627\u062e\u0644 Crosswork Planning \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f \u06a9\u0647 \u0627\u0632 \u0642\u0628\u0644 \u0634\u0627\u0645\u0644 Python \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc Cisco \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062a\u0648\u0633\u0637 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a.<\/p>\n<blockquote style=\"direction: rtl; text-align: right\">\n<p><strong style=\"color: rgb(26, 26, 26)\">\u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u062d\u0633\u0627\u0633 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u067e\u0631\u0627\u0645\u067e\u062a\u200c\u0647\u0627 (Prompts) \u0648\u0627\u0631\u062f \u0646\u06a9\u0646\u06cc\u062f.<\/strong>\u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631\u060c \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u060c \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0637\u0631\u062d \u0645\u0634\u062a\u0631\u06cc \u06cc\u0627 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0645\u062f\u0627\u0631 \u0631\u0627 \u062f\u0631 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u0632\u0628\u0627\u0646\u06cc (LLM) \u06a9\u067e\u06cc \u0646\u06a9\u0646\u06cc\u062f. \u0647\u0646\u06af\u0627\u0645 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u067e\u06cc\u0634 \u0627\u0632 \u0627\u0634\u062a\u0631\u0627\u06a9\u200c\u06af\u0630\u0627\u0631\u06cc \u0647\u0631\u06af\u0648\u0646\u0647 \u062f\u0627\u062f\u0647 \u0648\u0627\u0642\u0639\u06cc\u060c \u0645\u0642\u0627\u062f\u06cc\u0631 \u062d\u0633\u0627\u0633 \u0631\u0627 \u062d\u0630\u0641 \u06cc\u0627 \u0646\u0627\u0634\u0646\u0627\u0633\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<\/blockquote>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Step 1: Look at the input data<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0627\u0628\u062a\u062f\u0627\u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<ol>\n<li>\n<p style=\"direction: rtl; text-align: right\">\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646<code>circuitid_mappings.csv<\/code>\u062f\u0631 \u06cc\u06a9 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0645\u062a\u0646 \u06cc\u0627 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u0635\u0641\u062d\u0647\u200c\u06af\u0633\u062a\u0631\u062f\u0647 (Spreadsheet). \u0647\u0631 \u0631\u062f\u06cc\u0641 \u06cc\u06a9 \u0645\u062f\u0627\u0631 (Circuit) \u0631\u0627 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f: \u0634\u0646\u0627\u0633\u0647 (ID) \u0622\u0646\u060c \u0648 \u06af\u0631\u0647 (Node) \u0648 \u0631\u0627\u0628\u0637 (Interface) \u062f\u0631 \u0647\u0631 \u062f\u0648 \u0627\u0646\u062a\u0647\u0627.<\/p>\n<pre><code><span>Circuit ID,NodeA,InterfaceA,NodeB,InterfaceB\n<\/span><span>SR\/IPIG\/483921\/CNC,node-4,GigabitEthernet0\/0\/0\/8,node-8,GigabitEthernet0\/0\/0\/4\n<\/span><span>SR\/IPIG\/716304\/CNC,node-1,GigabitEthernet0\/0\/0\/6,node-6,GigabitEthernet0\/0\/0\/1\n<\/span><span>SR\/IPIG\/259847\/CNC,node-5,GigabitEthernet0\/0\/0\/6,node-6,GigabitEthernet0\/0\/0\/5\n<\/span><span>...\n<\/span><\/code><\/pre>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u062f\u0627\u0631\u0627\u06cc 15 \u0645\u062f\u0627\u0631 (Circuit) \u0627\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0627\u06cc\u062f 30 \u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633 (Interface) \u0631\u0627 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06a9\u0646\u062f.<\/p>\n<\/li>\n<li>\n<p style=\"direction: rtl; text-align: right\">\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646<code>sr_topo_base.txt<\/code>\u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0637\u0631\u0627\u062d\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0631\u06cc\u0632\u06cc Crosswork.<\/p>\n<\/li>\n<li>\n<p style=\"direction: rtl; text-align: right\">\u062f\u0631 \u062c\u062f\u0648\u0644 \u0631\u0627\u0628\u0637\u200c\u0647\u0627 (Interfaces)\u060c \u0631\u0627\u0628\u0637 \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f<code>GigabitEthernet0\/0\/0\/2<\/code> on <code>node-1<\/code>. \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0622\u0646 \u0639\u0628\u0627\u0631\u062a \u0627\u0633\u062a \u0627\u0632<code>\u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u0631\u0627\u0628\u0637 \u0645\u0642\u0635\u062f \u062f\u0633\u062a\u06af\u0627\u0647 node-2<\/code>\u060c \u0628\u062f\u0648\u0646 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u0627\u0631 (Circuit ID).<\/p>\n<\/li>\n<\/ol>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06cc\u0646 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc (Interface) \u0631\u0627 \u0628\u0647 \u062e\u0627\u0637\u0631 \u0628\u0633\u067e\u0627\u0631\u06cc\u062f. \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u062f\u0648\u0628\u0627\u0631\u0647 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u06af\u0627\u0645 2: \u0627\u0632 \u0627\u06cc\u062c\u0646\u062a (Agent) \u0628\u067e\u0631\u0633\u06cc\u062f \u06a9\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 (Python) \u062f\u0631 Cisco Crosswork Planning \u0686\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc\u06cc \u062f\u0627\u0631\u062f<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u067e\u06cc\u0634 \u0627\u0632 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0631\u0627\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u060c \u0627\u0632 \u0627\u06cc\u062c\u0646\u062a (Agent) \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u0631\u0627\u0628\u0637\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc (Programming Interfaces) \u062f\u0631 Crosswork Planning \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0647\u062f. \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u0627\u0645\u06a9\u0627\u0646\u200c\u067e\u0630\u06cc\u0631 \u0628\u0648\u062f\u0646 \u0648\u0638\u06cc\u0641\u0647 \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0632\u0645\u06cc\u0646\u0647 (Context) \u0645\u0646\u0627\u0633\u0628 \u0631\u0627 \u062f\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u0627\u06cc\u062c\u0646\u062a \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0644\u0637\u0641\u0627\u064b \u0645\u062a\u0646 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0631\u062c\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0637\u0628\u0642 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644\u200c\u0647\u0627\u06cc \u062f\u0642\u06cc\u0642 \u0634\u0645\u0627\u060c \u0641\u0631\u0622\u06cc\u0646\u062f \u062a\u0631\u062c\u0645\u0647 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u0645.<\/p>\n<pre><code><span>I want to describe the capabilities exposed by the Crosswork Planning APIs and libraries. In particular, I am interested in how these libraries enable loading of a network model for simulation, and optimization use cases. Provide a high level overview for the uninitiated, and also a second level of detail on what objects and constructs are available for model manipulation, simulation and optimization. I want to augment the information in relation to the current Crosswork Planning analyze, optimize and traffic engineering capabilities.\n<\/span><span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/\n<\/span><span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/doc_portal\/CrossworkPlanning_info_center.html\n<\/span><\/code><\/pre>\n<p style=\"direction: rtl; text-align: right\">\u062f\u0648 \u0644\u06cc\u0646\u06a9 \u0627\u0646\u062a\u0647\u0627\u06cc\u06cc \u0627\u0632 \u0627\u0647\u0645\u06cc\u062a \u0628\u0627\u0644\u0627\u062a\u0631\u06cc \u0628\u0631\u062e\u0648\u0631\u062f\u0627\u0631\u0646\u062f. \u0647\u0645\u0648\u0627\u0631\u0647 \u0639\u0627\u0645\u0644 (Agent) \u0631\u0627 \u0628\u0647 \u0633\u0645\u062a \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc Cisco \u0647\u062f\u0627\u06cc\u062a \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0647 \u062c\u0627\u06cc \u062d\u062f\u0633 \u0648 \u06af\u0645\u0627\u0646\u060c \u0628\u0631 \u0627\u0633\u0627\u0633 API\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0639\u0645\u0644 \u06a9\u0646\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0646\u0645\u0627\u06cc\u0646\u062f\u0647 \u0628\u0627 \u06cc\u06a9 \u062e\u0644\u0627\u0635\u0647 \u0637\u0648\u0644\u0627\u0646\u06cc \u067e\u0627\u0633\u062e \u0645\u06cc\u200c\u062f\u0647\u062f. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0648\u0638\u06cc\u0641\u0647\u060c \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u067e\u0646\u062c \u0645\u0648\u0631\u062f \u0627\u0634\u0627\u0631\u0647 \u0634\u062f\u0647 \u0628\u0627\u0634\u062f:<\/p>\n<ul style=\"direction: rtl; text-align: right\">\n<li><strong style=\"color: rgb(26, 26, 26)\">\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u0637\u0631\u062d (Plan):<\/strong>\u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 OPM \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0637\u0631\u062d \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0634\u06cc\u0621 \u0634\u0628\u06a9\u0647 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u06cc\u0627\u0641\u062a\u0646 \u0645\u062f\u0627\u0631\u0647\u0627 (Circuits):<\/strong>\u0645\u062f\u0644 \u0634\u0628\u06a9\u0647 \u0634\u0627\u0645\u0644 \u0645\u062f\u0627\u0631\u0647\u0627 \u0627\u0633\u062a \u0648 \u0647\u0631 \u0645\u062f\u0627\u0631 \u062f\u0627\u0631\u0627\u06cc \u062f\u0648 \u0631\u0627\u0628\u0637 (Interface) \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u06cc\u200c\u0628\u0627\u0634\u062f.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u06cc\u0627\u0641\u062a\u0646 \u0631\u0627\u0628\u0637\u200c\u0647\u0627 (Interfaces):<\/strong>\u0647\u0631 \u0631\u0627\u0628\u0637 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 \u0646\u0627\u0645\u060c \u06cc\u06a9 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a (Description) \u0648 \u06af\u0631\u0647\u200c\u0627\u06cc (Node) \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0622\u0646 \u062a\u0639\u0644\u0642 \u062f\u0627\u0631\u062f.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u062a\u063a\u06cc\u06cc\u0631 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a:<\/strong>\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0642\u0627\u0628\u0644 \u062e\u0648\u0627\u0646\u062f\u0646 \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u0633\u062a.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u0630\u062e\u06cc\u0631\u0647 \u0637\u0631\u062d (Plan):<\/strong>\u0634\u0628\u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0637\u0631\u062d \u062c\u062f\u06cc\u062f \u0646\u0648\u0634\u062a\u0647 \u0634\u0648\u062f.<\/li>\n<\/ul>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06af\u0631 \u0647\u0631 \u067e\u0646\u062c \u0645\u0648\u0631\u062f \u0638\u0627\u0647\u0631 \u0634\u0648\u0646\u062f\u060c \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0622\u0646\u0686\u0647 \u0627\u06cc\u0646 \u0648\u0638\u06cc\u0641\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f. \u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u067e\u0627\u0633\u062e \u06a9\u0627\u0645\u0644 \u0631\u0627 \u062f\u0631 <a href=\"https:\/\/xrdocs.io\/automation\/tutorials\/using-llms-for-crosswork-planning-script-prototyping#appendix-a-sample-response-from-the-agent\" style=\"color: rgb(0, 102, 204)\">\u067e\u06cc\u0648\u0633\u062a A (Appendix A)<\/a>.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u06af\u0627\u0645 3: \u0627\u0632 \u0639\u0627\u0645\u0644 (Agent) \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u062f.<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06a9\u0646\u0648\u0646 \u0646\u062a\u06cc\u062c\u0647 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u062e\u0648\u062f \u0631\u0627 \u0634\u0631\u062d \u062f\u0647\u06cc\u062f. \u06cc\u06a9 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 (Prompt) \u062e\u0648\u0628 \u0645\u0627\u0646\u0646\u062f \u06cc\u06a9 \u0633\u0646\u062f \u0646\u06cc\u0627\u0632\u0645\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc \u06a9\u0648\u062a\u0627\u0647 \u0639\u0645\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f: \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0686\u0647 \u0686\u06cc\u0632\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0628\u0627\u06cc\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f \u0648 \u0686\u06af\u0648\u0646\u0647 \u0628\u0627\u06cc\u062f \u0645\u0634\u06a9\u0644\u0627\u062a \u0631\u0627 \u06af\u0632\u0627\u0631\u0634 \u06a9\u0646\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0644\u0637\u0641\u0627\u064b \u0645\u062a\u0646 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0631\u062c\u0645\u0647 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0637\u0628\u0642 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644\u200c\u0647\u0627\u06cc \u062f\u0642\u06cc\u0642 \u0634\u0645\u0627\u060c \u0641\u0631\u0622\u06cc\u0646\u062f \u062a\u0631\u062c\u0645\u0647 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u0645.<\/p>\n<pre><code><span>Create a complete, easy-to-follow Python script named `append_circuit_id.py` for Cisco Crosswork Planning and save it to the current folder. Include helpful comments and clear error messages.\n<\/span><span>Use the Crosswork OPM library and external-script instructions in these Cisco references:\n<\/span><span>- https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/libraries-crosswork-planning-design-rpc-python-library\/\n<\/span><span>- https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/view-jobs\/run-external-scripts.html\n<\/span><span>Requirements:\n<\/span><span>- The Collector provides the source and destination paths as `sys.argv[1]` and `sys.argv[2]`; `sys.argv[6]` may contain the user-uploaded files directory. Show usage and exit 1 if either required path is missing.\n<\/span><span>- Read `circuitid_mappings.csv` at runtime with Python's `csv` module. Its required, case-sensitive columns are `Circuit ID`, `NodeA`, `InterfaceA`, `NodeB`, and `InterfaceB`. Search beside the script, beside the source plan, in the current directory, then in the optional upload directory. Trim values; report missing\/empty files, missing headers, and incomplete rows (with line numbers). Require at least one usable row.\n<\/span><span>- Match both node\/interface endpoints to plan circuits, allowing reversed order. Use OPM circuit objects first, then look up interfaces by node and name if needed. Support keyed or iterable OPM collections. Update existing endpoints where possible; report missing interfaces and fully unmatched rows. Warn on conflicting IDs for a circuit or endpoint and let the last CSV row win.\n<\/span><span>- Set each applicable description to its existing text plus `(Circuit ID: &lt;id&gt;)`. Replace any old Circuit ID suffix, preserve other text, and avoid duplicate suffixes on reruns. Report unchanged descriptions.\n<\/span><span>- Validate the source plan (exists, readable, non-empty) and report its size. Open it with `Network(source)` and save with `network.write(destination)`. Explain import errors if import attempts fail. Clean up temporary files and never intentionally remove the source.\n<\/span><span>- Print the chosen CSV, loaded mapping\/endpoint counts, per-interface changes, missing interfaces, matched circuits, changed-description total, and unmatched-row count when nonzero. Use only the standard library and documented OPM library. Keep code compatible with the Python version bundled with Crosswork and put execution in a `__main__` block.\n<\/span><span>The target Crosswork environment is authoritative; its OPM library may not be available in normal Python.\n<\/span><\/code><\/pre>\n<p style=\"direction: rtl; text-align: right\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0639\u0646\u0627\u06cc \u0627\u0644\u0632\u0627\u0645\u0627\u062a \u0627\u0635\u0644\u06cc \u0628\u0647 \u0632\u0628\u0627\u0646 \u0633\u0627\u062f\u0647 \u0628\u06cc\u0627\u0646 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<table class=\"english-numbers\" style=\"direction: rtl; text-align: right\">\n<thead>\n<tr>\n<th>\u0627\u0644\u0632\u0627\u0645 \u062f\u0631 \u062f\u0633\u062a\u0648\u0631 (Prompt)<\/th>\n<th>\u0645\u0639\u0646\u0627\u06cc \u0622\u0646<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>sys.argv[1]<\/code>\u0648<code>sys.argv[2]<\/code><\/td>\n<td>\u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 Crosswork Planning \u0628\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u06cc\u200c\u06af\u0648\u06cc\u062f \u06a9\u0647 \u06a9\u062f\u0627\u0645 \u0637\u0631\u062d (Plan) \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u062f \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u06a9\u062c\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u062c\u0633\u062a\u062c\u0648 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u060c \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0637\u0631\u062d \u0645\u0646\u0628\u0639&#8230;<\/td>\n<td>\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0641\u0627\u06cc\u0644 CSV \u0631\u0627 \u062f\u0631 \u0686\u0646\u062f\u06cc\u0646 \u067e\u0648\u0634\u0647 \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u062c\u0633\u062a\u062c\u0648 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u0645\u0633\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062b\u0627\u0628\u062a (Hard-code) \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u0627\u0645\u06a9\u0627\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0631\u062a\u06cc\u0628 \u0645\u0639\u06a9\u0648\u0633<\/td>\n<td>\u06cc\u06a9 \u0645\u062f\u0627\u0631 (Circuit) \u06a9\u0647 \u062f\u0631 \u0641\u0627\u06cc\u0644 CSV \u0628\u0647 \u0635\u0648\u0631\u062a node-1 \u0628\u0647 node-2 \u0644\u06cc\u0633\u062a \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u062f\u0631 \u0637\u0631\u062d \u0628\u0647 \u0635\u0648\u0631\u062a node-2 \u0628\u0647 node-1 \u0628\u0627\u0634\u062f\u060c \u0647\u0645\u0686\u0646\u0627\u0646 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u067e\u0633\u0648\u0646\u062f\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u062f\u0631 \u0627\u062c\u0631\u0627\u06cc \u0645\u062c\u062f\u062f<\/td>\n<td>\u0627\u062c\u0631\u0627\u06cc \u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0627\u0639\u062b \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0646 \u062f\u0648\u0628\u0631\u0627\u0628\u0631\u06cc \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u0627\u0631 (Circuit ID) \u0646\u0645\u06cc\u200c\u0634\u0648\u062f. \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u0635\u0637\u0644\u0627\u062d\u0627\u064b<em>\u062a\u06a9\u0631\u0627\u0631\u067e\u0630\u06cc\u0631 (Idempotent)<\/em>.<\/td>\n<\/tr>\n<tr>\n<td>\u06af\u0632\u0627\u0631\u0634 \u0631\u0627\u0628\u0637\u200c\u0647\u0627\u06cc (Interface) \u0645\u0641\u0642\u0648\u062f \u0648 \u0631\u062f\u06cc\u0641\u200c\u0647\u0627\u06cc \u0646\u0627\u0645\u0646\u0637\u0628\u0642<\/td>\n<td>\u0627\u06af\u0631 \u062f\u0631 \u0641\u0627\u06cc\u0644 CSV \u0646\u0627\u0645 \u0631\u0627\u0628\u0637\u06cc \u0630\u06a9\u0631 \u0634\u062f\u0647 \u0628\u0627\u0634\u062f \u06a9\u0647 \u062f\u0631 \u0637\u0631\u062d \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f\u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647 \u062c\u0627\u06cc \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646 \u0628\u06cc\u200c\u0633\u0631\u0648\u0635\u062f\u0627\u060c \u0628\u0647 \u0634\u0645\u0627 \u0627\u0637\u0644\u0627\u0639 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u0647\u0631\u06af\u0632 \u0645\u0646\u0628\u0639 \u0631\u0627 \u0639\u0645\u062f\u0627\u064b \u062d\u0630\u0641 \u0646\u06a9\u0646\u06cc\u062f<\/td>\n<td>\u0637\u0631\u062d \u0627\u0635\u0644\u06cc \u0647\u0631\u06af\u0632 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u061b \u0646\u062a\u06cc\u062c\u0647 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062c\u062f\u06cc\u062f \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u0645\u062d\u06cc\u0637 \u0645\u0642\u0635\u062f Crosswork \u0645\u0631\u062c\u0639 \u0627\u0635\u0644\u06cc \u0627\u0633\u062a<\/td>\n<td>\u0627\u06cc\u062c\u0646\u062a (Agent) \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0631\u0648\u06cc \u0644\u067e\u200c\u062a\u0627\u067e \u0634\u0645\u0627 \u062a\u0633\u062a \u06a9\u0646\u062f\u060c \u0632\u06cc\u0631\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0633\u06cc\u0633\u06a9\u0648 \u0641\u0642\u0637 \u062f\u0631 \u062f\u0627\u062e\u0644 Crosswork Planning \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06cc\u0646 \u0639\u0627\u0645\u0644 (Agent) \u0641\u0627\u06cc\u0644 append_circuit_id.py \u0631\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 \u0641\u0639\u0644\u06cc \u0634\u0645\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.<code>\u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0628\u06cc\u0646 300 \u062a\u0627 500 \u062e\u0637 \u0637\u0648\u0644 \u062f\u0627\u0631\u062f.<\/code>\u0646\u06cc\u0627\u0632\u06cc \u0646\u06cc\u0633\u062a \u062a\u0645\u0627\u0645 \u0622\u0646 \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0645\u0631\u0627\u062d\u0644 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647\u060c \u0646\u06af\u0627\u0647\u06cc \u06af\u0630\u0631\u0627 \u0628\u0647 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a (Comments) \u0622\u0646 \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u062a\u0648\u062c\u0647: \u0628\u0631\u0627\u06cc \u0631\u0627\u062d\u062a\u06cc \u0634\u0645\u0627\u060c \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0645\u0631\u062c\u0639 \u0627\u0632<code>append_circuit_id.py<\/code>\u0646\u06cc\u0632 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a \u062f\u0631 <a href=\"https:\/\/github.com\/flim226\/crosswork\/tree\/main\/sample-scripts\/append_circuit_id\" style=\"color: rgb(0, 102, 204)\">github<\/a><\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u06af\u0627\u0645 4: \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u062f\u0631 Crosswork Planning \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u06cc \u06a9\u0647 \u067e\u06cc\u0634\u200c\u062a\u0631 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0647\u0645 \u062f\u0631 Job Manager \u0648 \u0647\u0645 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062e\u0627\u0631\u062c\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0632\u0646\u062c\u06cc\u0631\u0647 \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc \u0634\u0628\u06a9\u0647 (network collection chain) \u0627\u062c\u0631\u0627 \u0634\u0648\u062f. \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062f\u0631 Job Manager\u060c<\/p>\n<ol style=\"direction: rtl; text-align: right\">\n<li>\u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f<code>sr_topo_base.txt<\/code>\u0648<code>circuitid_mappings.csv<\/code>\u0628\u0647 Crosswork Planning.<\/li>\n<li>\u062f\u0631 Crosswork Planning\u060c \u0628\u0647 \u0628\u062e\u0634 Job Manager \u0628\u0631\u0648\u06cc\u062f \u0648 \u0627\u0632 \u06af\u0648\u0634\u0647 \u0633\u0645\u062a \u0631\u0627\u0633\u062a \u0628\u0627\u0644\u0627\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u06af\u0632\u06cc\u0646\u0647 Add Job using Script \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u062f\u0631 \u0642\u0633\u0645\u062a Select Script\u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062e\u0648\u062f \u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f<code>append_circuit_id.py<\/code>\u0628\u0647 Crosswork.<\/li>\n<li>\u062f\u0631 \u0642\u0633\u0645\u062a Select Input files\u060c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0647\u0631 \u062f\u0648 \u0641\u0627\u06cc\u0644<code>sr_topo_base.txt<\/code>\u0648<code>circuitid_mappings.csv<\/code>\u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647\u200c\u0627\u0646\u062f.<\/li>\n<li>\u062f\u0631 \u0642\u0633\u0645\u062a Configuration \u0648 \u0628\u062e\u0634 User script command\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<code>append_circuit_id.py sr_topo_base.txt sr_topo_base_out.txt<\/code>.<\/li>\n<li>\u062f\u0631 \u0642\u0633\u0645\u062a Run Settings\u060c \u0627\u0632 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f (Execute: Now, Priority: Low, Engine Profiles: 4000m vCPU, 16Gi Mem.<\/li>\n<li>\u06af\u0632\u06cc\u0646\u0647 Submit \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ol>\n<p style=\"direction: rtl; text-align: right\"><img decoding=\"async\" alt=\"Crosswork Planning Creating New Script Job\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/screenshot-2026-10-06-at-06_44_08-1791246641491.webp\"><em>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0627\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062c\u062f\u06cc\u062f<\/em><\/p>\n<p style=\"direction: rtl; text-align: right\"><img decoding=\"async\" alt=\"Crosswork Planning Job Manager showing job staus\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/screenshot-2026-10-05-at-21_35_06-1791207457928.webp\"><em>\u0627\u062c\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc\u060c \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u06a9\u0627\u0631 (Job Status)<\/em><\/p>\n<p style=\"direction: rtl; text-align: right\"><img decoding=\"async\" alt=\"Crosswork Planning script output\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/screenshot-2026-10-05-at-21_35_44-1791207535549.webp\"><em>\u0645\u0634\u0627\u0647\u062f\u0647 \u062e\u0631\u0648\u062c\u06cc \u06a9\u0627\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a.<\/em><\/p>\n<p><code>Source plan: sr_topo_base.txt (44677 bytes)<br \/>\nMapping CSV: \/opt\/execute\/job\/47\/circuitid_mappings.csv<br \/>\nLoaded 15 usable mapping row(s).<br \/>\nMatched CSV line 2 to circuit 10.4.8.0\/28.<br \/>\nMatched CSV line 3 to circuit 2001::1:6:1\/112.<br \/>\nMatched CSV line 4 to circuit 10.5.6.4\/30.<br \/>\nMatched CSV line 5 to circuit 10.5.8.0\/28.<br \/>\nMatched CSV line 6 to circuit 2001::4:5:4\/112.<br \/>\nMatched CSV line 7 to circuit 10.1.5.0\/29.<br \/>\nMatched CSV line 8 to circuit 10.2.6.0\/29.<br \/>\nMatched CSV line 9 to circuit 10.1.2.0\/30.<br \/>\nMatched CSV line 10 to circuit 10.3.8.0\/28.<br \/>\nMatched CSV line 11 to circuit 2001::3:4:3\/112.<br \/>\nMatched CSV line 12 to circuit 2001::3:7:3\/112.<br \/>\nMatched CSV line 13 to circuit 10.7.8.0\/28.<br \/>\nMatched CSV line 14 to circuit 2001::2:7:2\/112.<br \/>\nMatched CSV line 15 to circuit 10.6.7.6\/31.<br \/>\nMatched CSV line 16 to circuit 2001::5:7:5\/112.<br \/>\nChanged: node-4\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 4' -&gt; 'Connection to device node-8 destination interface 4 (Circuit ID: SR\/IPIG\/483921\/CNC)'<br \/>\nChanged: node-8\/GigabitEthernet0\/0\/0\/4: 'Connection to device node-4 destination interface 8' -&gt; 'Connection to device node-4 destination interface 8 (Circuit ID: SR\/IPIG\/483921\/CNC)'<br \/>\nChanged: node-1\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 1' -&gt; 'Connection to device node-6 destination interface 1 (Circuit ID: SR\/IPIG\/716304\/CNC)'<br \/>\nChanged: node-6\/GigabitEthernet0\/0\/0\/1: 'Connection to device node-1 destination interface 6' -&gt; 'Connection to device node-1 destination interface 6 (Circuit ID: SR\/IPIG\/716304\/CNC)'<br \/>\nChanged: node-5\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 5' -&gt; 'Connection to device node-6 destination interface 5 (Circuit ID: SR\/IPIG\/259847\/CNC)'<br \/>\nChanged: node-6\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 6' -&gt; 'Connection to device node-5 destination interface 6 (Circuit ID: SR\/IPIG\/259847\/CNC)'<br \/>\nChanged: node-5\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 5' -&gt; 'Connection to device node-8 destination interface 5 (Circuit ID: SR\/IPIG\/904162\/CNC)'<br \/>\nChanged: node-8\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 8' -&gt; 'Connection to device node-5 destination interface 8 (Circuit ID: SR\/IPIG\/904162\/CNC)'<br \/>\nChanged: node-4\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 4' -&gt; 'Connection to device node-5 destination interface 4 (Circuit ID: SR\/IPIG\/638075\/CNC)'<br \/>\nChanged: node-5\/GigabitEthernet0\/0\/0\/4: 'Connection to device node-4 destination interface 5' -&gt; 'Connection to device node-4 destination interface 5 (Circuit ID: SR\/IPIG\/638075\/CNC)'<br \/>\nChanged: node-1\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 1' -&gt; 'Connection to device node-5 destination interface 1 (Circuit ID: SR\/IPIG\/147593\/CNC)'<br \/>\nChanged: node-5\/GigabitEthernet0\/0\/0\/1: 'Connection to device node-1 destination interface 5' -&gt; 'Connection to device node-1 destination interface 5 (Circuit ID: SR\/IPIG\/147593\/CNC)'<br \/>\nChanged: node-2\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 2' -&gt; 'Connection to device node-6 destination interface 2 (Circuit ID: SR\/IPIG\/825416\/CNC)'<br \/>\nChanged: node-6\/GigabitEthernet0\/0\/0\/2: 'Connection to device node-2 destination interface 6' -&gt; 'Connection to device node-2 destination interface 6 (Circuit ID: SR\/IPIG\/825416\/CNC)'<br \/>\nChanged: node-1\/GigabitEthernet0\/0\/0\/2: 'Connection to device node-2 destination interface 1' -&gt; 'Connection to device node-2 destination interface 1 (Circuit ID: SR\/IPIG\/371968\/CNC)'<br \/>\nChanged: node-2\/GigabitEthernet0\/0\/0\/1: 'Connection to device node-1 destination interface 2' -&gt; 'Connection to device node-1 destination interface 2 (Circuit ID: SR\/IPIG\/371968\/CNC)'<br \/>\nChanged: node-3\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 3' -&gt; 'Connection to device node-8 destination interface 3 (Circuit ID: SR\/IPIG\/592731\/CNC)'<br \/>\nChanged: node-8\/GigabitEthernet0\/0\/0\/3: 'Connection to device node-3 destination interface 8' -&gt; 'Connection to device node-3 destination interface 8 (Circuit ID: SR\/IPIG\/592731\/CNC)'<br \/>\nChanged: node-3\/GigabitEthernet0\/0\/0\/4: 'Connection to device node-4 destination interface 3' -&gt; 'Connection to device node-4 destination interface 3 (Circuit ID: SR\/IPIG\/068459\/CNC)'<br \/>\nChanged: node-4\/GigabitEthernet0\/0\/0\/3: 'Connection to device node-3 destination interface 4' -&gt; 'Connection to device node-3 destination interface 4 (Circuit ID: SR\/IPIG\/068459\/CNC)'<br \/>\nChanged: node-3\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 3' -&gt; 'Connection to device node-7 destination interface 3 (Circuit ID: SR\/IPIG\/943287\/CNC)'<br \/>\nChanged: node-7\/GigabitEthernet0\/0\/0\/3: 'Connection to device node-3 destination interface 7' -&gt; 'Connection to device node-3 destination interface 7 (Circuit ID: SR\/IPIG\/943287\/CNC)'<br \/>\nChanged: node-7\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 7' -&gt; 'Connection to device node-8 destination interface 7 (Circuit ID: SR\/IPIG\/410826\/CNC)'<br \/>\nChanged: node-8\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 8' -&gt; 'Connection to device node-7 destination interface 8 (Circuit ID: SR\/IPIG\/410826\/CNC)'<br \/>\nChanged: node-2\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 2' -&gt; 'Connection to device node-7 destination interface 2 (Circuit ID: SR\/IPIG\/786152\/CNC)'<br \/>\nChanged: node-7\/GigabitEthernet0\/0\/0\/2: 'Connection to device node-2 destination interface 7' -&gt; 'Connection to device node-2 destination interface 7 (Circuit ID: SR\/IPIG\/786152\/CNC)'<br \/>\nChanged: node-6\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 6' -&gt; 'Connection to device node-7 destination interface 6 (Circuit ID: SR\/IPIG\/235694\/CNC)'<br \/>\nChanged: node-7\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 7' -&gt; 'Connection to device node-6 destination interface 7 (Circuit ID: SR\/IPIG\/235694\/CNC)'<br \/>\nChanged: node-5\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 5' -&gt; 'Connection to device node-7 destination interface 5 (Circuit ID: SR\/IPIG\/651379\/CNC)'<br \/>\nChanged: node-7\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 7' -&gt; 'Connection to device node-5 destination interface 7 (Circuit ID: SR\/IPIG\/651379\/CNC)'<br \/>\nLoaded mapping rows: 15<br \/>\nMapped plan endpoints: 30<br \/>\nChanged descriptions: 30<br \/>\nOutput plan written: sr_topo_base_out.txt<\/code><\/p>\n<p style=\"direction: rtl; text-align: right\">\u0641\u0627\u06cc\u0644 \u0644\u0627\u06af (Log)<code>stdoutLog.txt<\/code>\u0628\u0627\u06cc\u062f \u0646\u0634\u0627\u0646 \u062f\u0647\u062f \u06a9\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0632 \u06a9\u062f\u0627\u0645 \u0641\u0627\u06cc\u0644 CSV \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a\u060c \u0686\u0647 \u062a\u0639\u062f\u0627\u062f \u0646\u06af\u0627\u0634\u062a (Mapping) \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0648 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633\u06cc (Interface) \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a\u0647\u060c \u06cc\u06a9 \u062e\u0637 \u06af\u0632\u0627\u0631\u0634 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f. \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u062a\u0646 \u067e\u06cc\u0627\u0645\u200c\u0647\u0627\u06cc \u0639\u0627\u0645\u0644 (Agent) \u0634\u0645\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0634\u062f\u060c \u0627\u0645\u0627 \u06cc\u06a9 \u0627\u062c\u0631\u0627\u06cc \u0645\u0648\u0641\u0642 \u0628\u0627\u06cc\u062f \u0645\u0634\u0627\u0628\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f:<\/p>\n<details>\n<summary>Show the full response<\/summary>\n<pre><code><span>Source plan: sr_topo_base.txt (44677 bytes)\n<\/span><span>Mapping CSV: \/opt\/execute\/job\/47\/circuitid_mappings.csv\n<\/span><span>Loaded 15 usable mapping row(s).\n<\/span><span>Matched CSV line 2 to circuit 10.4.8.0\/28.\n<\/span><span>Matched CSV line 3 to circuit 2001::1:6:1\/112.\n<\/span><span>Matched CSV line 4 to circuit 10.5.6.4\/30.\n<\/span><span>Matched CSV line 5 to circuit 10.5.8.0\/28.\n<\/span><span>Matched CSV line 6 to circuit 2001::4:5:4\/112.\n<\/span><span>Matched CSV line 7 to circuit 10.1.5.0\/29.\n<\/span><span>Matched CSV line 8 to circuit 10.2.6.0\/29.\n<\/span><span>Matched CSV line 9 to circuit 10.1.2.0\/30.\n<\/span><span>Matched CSV line 10 to circuit 10.3.8.0\/28.\n<\/span><span>Matched CSV line 11 to circuit 2001::3:4:3\/112.\n<\/span><span>Matched CSV line 12 to circuit 2001::3:7:3\/112.\n<\/span><span>Matched CSV line 13 to circuit 10.7.8.0\/28.\n<\/span><span>Matched CSV line 14 to circuit 2001::2:7:2\/112.\n<\/span><span>Matched CSV line 15 to circuit 10.6.7.6\/31.\n<\/span><span>Matched CSV line 16 to circuit 2001::5:7:5\/112.\n<\/span><span>Changed: node-4\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 4' -&gt; 'Connection to device node-8 destination interface 4 (Circuit ID: SR\/IPIG\/483921\/CNC)'\n<\/span><span>Changed: node-8\/GigabitEthernet0\/0\/0\/4: 'Connection to device node-4 destination interface 8' -&gt; 'Connection to device node-4 destination interface 8 (Circuit ID: SR\/IPIG\/483921\/CNC)'\n<\/span><span>Changed: node-1\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 1' -&gt; 'Connection to device node-6 destination interface 1 (Circuit ID: SR\/IPIG\/716304\/CNC)'\n<\/span><span>Changed: node-6\/GigabitEthernet0\/0\/0\/1: 'Connection to device node-1 destination interface 6' -&gt; 'Connection to device node-1 destination interface 6 (Circuit ID: SR\/IPIG\/716304\/CNC)'\n<\/span><span>Changed: node-5\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 5' -&gt; 'Connection to device node-6 destination interface 5 (Circuit ID: SR\/IPIG\/259847\/CNC)'\n<\/span><span>Changed: node-6\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 6' -&gt; 'Connection to device node-5 destination interface 6 (Circuit ID: SR\/IPIG\/259847\/CNC)'\n<\/span><span>Changed: node-5\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 5' -&gt; 'Connection to device node-8 destination interface 5 (Circuit ID: SR\/IPIG\/904162\/CNC)'\n<\/span><span>Changed: node-8\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 8' -&gt; 'Connection to device node-5 destination interface 8 (Circuit ID: SR\/IPIG\/904162\/CNC)'\n<\/span><span>Changed: node-4\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 4' -&gt; 'Connection to device node-5 destination interface 4 (Circuit ID: SR\/IPIG\/638075\/CNC)'\n<\/span><span>Changed: node-5\/GigabitEthernet0\/0\/0\/4: 'Connection to device node-4 destination interface 5' -&gt; 'Connection to device node-4 destination interface 5 (Circuit ID: SR\/IPIG\/638075\/CNC)'\n<\/span><span>Changed: node-1\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 1' -&gt; 'Connection to device node-5 destination interface 1 (Circuit ID: SR\/IPIG\/147593\/CNC)'\n<\/span><span>Changed: node-5\/GigabitEthernet0\/0\/0\/1: 'Connection to device node-1 destination interface 5' -&gt; 'Connection to device node-1 destination interface 5 (Circuit ID: SR\/IPIG\/147593\/CNC)'\n<\/span><span>Changed: node-2\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 2' -&gt; 'Connection to device node-6 destination interface 2 (Circuit ID: SR\/IPIG\/825416\/CNC)'\n<\/span><span>Changed: node-6\/GigabitEthernet0\/0\/0\/2: 'Connection to device node-2 destination interface 6' -&gt; 'Connection to device node-2 destination interface 6 (Circuit ID: SR\/IPIG\/825416\/CNC)'\n<\/span><span>Changed: node-1\/GigabitEthernet0\/0\/0\/2: 'Connection to device node-2 destination interface 1' -&gt; 'Connection to device node-2 destination interface 1 (Circuit ID: SR\/IPIG\/371968\/CNC)'\n<\/span><span>Changed: node-2\/GigabitEthernet0\/0\/0\/1: 'Connection to device node-1 destination interface 2' -&gt; 'Connection to device node-1 destination interface 2 (Circuit ID: SR\/IPIG\/371968\/CNC)'\n<\/span><span>Changed: node-3\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 3' -&gt; 'Connection to device node-8 destination interface 3 (Circuit ID: SR\/IPIG\/592731\/CNC)'\n<\/span><span>Changed: node-8\/GigabitEthernet0\/0\/0\/3: 'Connection to device node-3 destination interface 8' -&gt; 'Connection to device node-3 destination interface 8 (Circuit ID: SR\/IPIG\/592731\/CNC)'\n<\/span><span>Changed: node-3\/GigabitEthernet0\/0\/0\/4: 'Connection to device node-4 destination interface 3' -&gt; 'Connection to device node-4 destination interface 3 (Circuit ID: SR\/IPIG\/068459\/CNC)'\n<\/span><span>Changed: node-4\/GigabitEthernet0\/0\/0\/3: 'Connection to device node-3 destination interface 4' -&gt; 'Connection to device node-3 destination interface 4 (Circuit ID: SR\/IPIG\/068459\/CNC)'\n<\/span><span>Changed: node-3\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 3' -&gt; 'Connection to device node-7 destination interface 3 (Circuit ID: SR\/IPIG\/943287\/CNC)'\n<\/span><span>Changed: node-7\/GigabitEthernet0\/0\/0\/3: 'Connection to device node-3 destination interface 7' -&gt; 'Connection to device node-3 destination interface 7 (Circuit ID: SR\/IPIG\/943287\/CNC)'\n<\/span><span>Changed: node-7\/GigabitEthernet0\/0\/0\/8: 'Connection to device node-8 destination interface 7' -&gt; 'Connection to device node-8 destination interface 7 (Circuit ID: SR\/IPIG\/410826\/CNC)'\n<\/span><span>Changed: node-8\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 8' -&gt; 'Connection to device node-7 destination interface 8 (Circuit ID: SR\/IPIG\/410826\/CNC)'\n<\/span><span>Changed: node-2\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 2' -&gt; 'Connection to device node-7 destination interface 2 (Circuit ID: SR\/IPIG\/786152\/CNC)'\n<\/span><span>Changed: node-7\/GigabitEthernet0\/0\/0\/2: 'Connection to device node-2 destination interface 7' -&gt; 'Connection to device node-2 destination interface 7 (Circuit ID: SR\/IPIG\/786152\/CNC)'\n<\/span><span>Changed: node-6\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 6' -&gt; 'Connection to device node-7 destination interface 6 (Circuit ID: SR\/IPIG\/235694\/CNC)'\n<\/span><span>Changed: node-7\/GigabitEthernet0\/0\/0\/6: 'Connection to device node-6 destination interface 7' -&gt; 'Connection to device node-6 destination interface 7 (Circuit ID: SR\/IPIG\/235694\/CNC)'\n<\/span><span>Changed: node-5\/GigabitEthernet0\/0\/0\/7: 'Connection to device node-7 destination interface 5' -&gt; 'Connection to device node-7 destination interface 5 (Circuit ID: SR\/IPIG\/651379\/CNC)'\n<\/span><span>Changed: node-7\/GigabitEthernet0\/0\/0\/5: 'Connection to device node-5 destination interface 7' -&gt; 'Connection to device node-5 destination interface 7 (Circuit ID: SR\/IPIG\/651379\/CNC)'\n<\/span><span>Loaded mapping rows: 15\n<\/span><span>Mapped plan endpoints: 30\n<\/span><span>Changed descriptions: 30\n<\/span><span>Output plan written: sr_topo_base_out.txt\n<\/span><\/code><\/pre>\n<\/details>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06a9\u0646\u0648\u0646 \u0637\u0631\u062d \u062e\u0631\u0648\u062c\u06cc \u0631\u0627 \u062f\u0631 Design \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f<code>node-1<\/code>&nbsp;\u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633 (interface)<code>GigabitEthernet0\/0\/0\/2<\/code>&nbsp;\u062f\u0648\u0628\u0627\u0631\u0647. \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0622\u0646 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0627 \u0627\u06cc\u0646 \u0639\u0628\u0627\u0631\u062a \u067e\u0627\u06cc\u0627\u0646 \u0645\u06cc\u200c\u06cc\u0627\u0628\u062f&nbsp;<code>(Circuit ID: SR\/IPIG\/371968\/CNC)<\/code>.<\/p>\n<p style=\"direction: rtl; text-align: right\"><img decoding=\"async\" alt=\"Crosswork Planning interface table showing updated descriptions\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/screenshot-2026-10-05-at-21_37_17-1791207569131.webp\"><em>\u062f\u0631 \u062d\u0627\u0644 \u0628\u0631\u0631\u0633\u06cc \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc\u200c\u0634\u062f\u0647 \u0631\u0627\u0628\u0637 (Interface).<\/em><\/p>\n<p style=\"direction: rtl; text-align: right\">\u0634\u0645\u0627 \u0627\u0648\u0644\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a Crosswork Planning \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u06af\u0627\u0645 5: \u0631\u0641\u0639 \u06cc\u06a9 \u0627\u062c\u0631\u0627\u06cc \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0639\u0627\u0645\u0644 (Agent)<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u200c\u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f\u0634\u062f\u0647 \u0647\u0645\u06cc\u0634\u0647 \u062f\u0631 \u0627\u0648\u0644\u06cc\u0646 \u0627\u062c\u0631\u0627 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06a9\u0627\u0631 \u0646\u0645\u06cc\u200c\u06a9\u0646\u0646\u062f. \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u0627\u062c\u0631\u0627 \u0628\u0627 \u062e\u0637\u0627 \u0645\u0648\u0627\u062c\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0633\u0631\u06cc\u0639\u200c\u062a\u0631\u06cc\u0646 \u0631\u0627\u0647 \u0628\u0631\u0627\u06cc \u0631\u0641\u0639 \u0622\u0646\u060c \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u062e\u0637\u0627 \u0628\u0647 \u0639\u0627\u0645\u0644 (Agent) \u0627\u0633\u062a.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u062e\u0637\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0627\u0632 \u0646\u0633\u062e\u0647 \u0642\u0628\u0644\u06cc \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<pre><code><span>Loaded 15 circuit mappings (30 endpoints) from circuitid_mappings.csv\n<\/span><span>Source plan: DARE.db (851968 bytes)\n<\/span><span>Traceback (most recent call last):\n<\/span><span>...\n<\/span><span> File \"...\/append_circuit_id.py\", line 207, in check_source_plan\n<\/span><span> raise IOError(\"Source plan file is not readable: {}\".format(src))\n<\/span><span>OSError: Source plan file is not readable: DARE.db\n<\/span><\/code><\/pre>\n<p style=\"direction: rtl; text-align: right\">\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u060c \u0637\u0631\u062d \u0631\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f \u0648 \u062d\u062a\u06cc \u0627\u0646\u062f\u0627\u0632\u0647 \u0622\u0646 \u0631\u0627 \u06af\u0632\u0627\u0631\u0634 \u062f\u0627\u062f\u060c \u0627\u0645\u0627 \u0627\u062f\u0639\u0627 \u06a9\u0631\u062f \u06a9\u0647 \u0642\u0627\u062f\u0631 \u0628\u0647 \u062e\u0648\u0627\u0646\u062f\u0646 \u0622\u0646 \u0646\u06cc\u0633\u062a. \u0622\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0642\u0628\u0644\u06cc \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u067e\u0631\u0633\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0641\u0627\u06cc\u0644 \u0642\u0627\u0628\u0644 \u062e\u0648\u0627\u0646\u062f\u0646 \u0627\u0633\u062a (<code>os.access<\/code>) \u0628\u0647 \u062c\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0633\u0639\u06cc \u06a9\u0646\u062f \u0622\u0646 \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u062f. \u062f\u0631 \u062f\u0627\u062e\u0644 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Crosswork Planning\u060c \u0622\u0646 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062d\u062a\u06cc \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062e\u0648\u0627\u0646\u062f\u0646 \u0641\u0627\u06cc\u0644 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u067e\u0627\u0633\u062e \u0645\u0646\u0641\u06cc \u0628\u062f\u0647\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u0628\u0631\u0627\u06cc \u0631\u0641\u0639 \u062e\u0637\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646:<\/p>\n<ol>\n<li>\n<p style=\"direction: rtl; text-align: right\">\u062e\u0637\u0648\u0637 \u0644\u0627\u06af (Log) \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u0646\u0627\u0645\u0648\u0641\u0642 \u0631\u0627 \u0627\u0632 \u0686\u0646\u062f \u062e\u0637 \u0642\u0628\u0644 \u0627\u0632 \u0628\u0631\u0648\u0632 \u062e\u0637\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<li>\n<p style=\"direction: rtl; text-align: right\">\u0622\u0646\u200c\u0647\u0627 \u0631\u0627 \u0628\u0627 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648\u062a\u0627\u0647 \u062f\u0631 \u0639\u0627\u0645\u0644 (Agent) \u062c\u0627\u06cc\u200c\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644:<\/p>\n<pre><code><span>The script failed in Crosswork Planning with the log below. The source plan exists and has a size, so it should be readable. Fix the readability check so it tries to open and read the file instead of relying on os.access. Keep everything else the same.\n<\/span><span>&lt;paste the log here&gt;\n<\/span><\/code><\/pre>\n<\/li>\n<li>\n<p style=\"direction: rtl; text-align: right\">\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0639\u0645\u0644\u06cc\u0627\u062a (Job) \u0631\u0627 \u0645\u062c\u062f\u062f\u0627\u064b \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/li>\n<\/ol>\n<p style=\"direction: rtl; text-align: right\">\u0646\u0633\u062e\u0647 \u0641\u0639\u0644\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u060c \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc (Readability) \u0631\u0627 \u0628\u0627 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u0648 \u062e\u0648\u0627\u0646\u062f\u0646 \u06cc\u06a9 \u0628\u0627\u06cc\u062a \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062f\u0631 \u062f\u0627\u062e\u0644 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 (Container) \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u06af\u0627\u0645 6: \u0628\u0647\u0628\u0648\u062f \u067e\u0631\u0627\u0645\u067e\u062a (Prompt)<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06a9\u0627\u0631 \u06a9\u0631\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0633\u062a\u0648\u0631 (Prompt) \u062e\u0648\u062f \u0631\u0627 \u062f\u0642\u06cc\u0642\u200c\u062a\u0631 \u06a9\u0646\u06cc\u062f. \u06cc\u06a9 \u062f\u0633\u062a\u0648\u0631 (Prompt) \u0628\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u060c \u0646\u062a\u0627\u06cc\u062c \u0645\u0646\u0633\u062c\u0645\u200c\u062a\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0648 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u06af\u0648\u0646\u0627\u06af\u0648\u0646 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f.<\/p>\n<p style=\"direction: rtl; text-align: right\">\u067e\u0631\u0627\u0645\u067e\u062a \u0627\u0635\u0644\u0627\u062d\u200c\u0634\u062f\u0647 \u062f\u0631 <a href=\"https:\/\/xrdocs.io\/automation\/tutorials\/using-llms-for-crosswork-planning-script-prototyping#appendix-b-refined-prompt\" style=\"color: rgb(0, 102, 204)\">\u067e\u06cc\u0648\u0633\u062a B<\/a> \u0627\u06cc\u0646 \u062c\u0632\u0626\u06cc\u0627\u062a \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f:<\/p>\n<table class=\"english-numbers\" style=\"direction: rtl; text-align: right\">\n<thead>\n<tr>\n<th>\u0627\u0641\u0632\u0648\u062f\u0646<\/th>\n<th>\u0686\u0631\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0641\u0642\u0637 \u0645\u062d\u062a\u0648\u0627\u06cc \u0641\u0627\u06cc\u0644 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f&#8230; \u0627\u0632 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0641\u0627\u06cc\u0644 README\u060c \u062a\u0633\u062a\u200c\u0647\u0627 \u06cc\u0627 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f&#8230;<\/td>\n<td>\u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0639\u0627\u0645\u0644 (Agent) \u0628\u0631 \u0631\u0648\u06cc \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u0645\u062a\u0645\u0631\u06a9\u0632 \u0628\u0645\u0627\u0646\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u0646\u0627\u0645\u200c\u0647\u0627\u06cc \u062f\u0642\u06cc\u0642 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc OPM (<code>interface_a<\/code>, <code>interface_b<\/code>, <code>node.name<\/code>, <code>description<\/code>)<\/td>\n<td>\u0627\u0632 \u062d\u062f\u0633 \u0632\u062f\u0646 \u0646\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627 \u062a\u0648\u0633\u0637 \u0639\u0627\u0645\u0644 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u06cc\u06a9 \u062a\u0631\u062a\u06cc\u0628 \u062c\u0633\u062a\u062c\u0648\u06cc CSV \u0634\u0645\u0627\u0631\u0647\u200c\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647\u060c \u0628\u0627 \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646 \u067e\u0648\u0634\u0647\u200c\u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc<\/td>\n<td>\u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0631\u0641\u062a\u0627\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0642\u0627\u0628\u0644 \u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc \u0648 \u062a\u0648\u0636\u06cc\u062d \u0622\u0646 \u0622\u0633\u0627\u0646 \u0628\u0627\u0634\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u06cc\u06a9 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 (Fallback) \u06a9\u0647 \u0637\u0631\u062d \u0631\u0627 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631<code>mate_convert<\/code>\u062f\u0631 \u0635\u0648\u0631\u062a \u0634\u06a9\u0633\u062a \u062f\u0631 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06cc\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0646\u060c \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f<\/td>\n<td>\u0628\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0641\u0631\u0645\u062a\u200c\u0647\u0627\u06cc \u0637\u0631\u062d\u06cc \u0631\u0627 \u06a9\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0627\u0632 \u06a9\u0646\u062f\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u062f.<\/td>\n<\/tr>\n<tr>\n<td>\u0642\u0648\u0627\u0646\u06cc\u0646 \u062f\u0642\u06cc\u0642 \u0628\u0631\u0627\u06cc \u067e\u0633\u0648\u0646\u062f\u060c \u0634\u0627\u0645\u0644 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062e\u0627\u0644\u06cc<\/td>\n<td>\u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0627\u062c\u0631\u0627\u06cc \u0645\u062c\u062f\u062f (Rerun) \u0631\u0641\u062a\u0627\u0631 \u0642\u0627\u0628\u0644 \u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\u060c \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u062e\u0627\u0644\u06cc \u0627\u0633\u062a.<\/td>\n<\/tr>\n<tr>\n<td>\u062a\u0648\u0627\u0628\u0639 \u06a9\u0645\u06a9\u06cc \u06a9\u0648\u0686\u06a9 \u0648 \u0645\u0633\u062a\u0646\u062f \u0634\u062f\u0647<\/td>\n<td>\u0628\u0631\u0631\u0633\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"direction: rtl; text-align: right\">\u062f\u0648\u0628\u0627\u0631\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0627 \u067e\u0631\u0627\u0645\u067e\u062a \u0627\u0635\u0644\u0627\u062d\u200c\u0634\u062f\u0647 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f\u060c \u0633\u067e\u0633 \u0645\u0631\u062d\u0644\u0647 4 \u0631\u0627 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0646\u062a\u06cc\u062c\u0647 \u0628\u0627\u06cc\u062f \u0647\u0645\u0627\u0646 \u0628\u0627\u0634\u062f: 30 \u0631\u0627\u0628\u0637 (Interface) \u0628\u0627 \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u0645\u062f\u0627\u0631 (Circuit IDs).<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u0622\u0646\u0686\u0647 \u0622\u0645\u0648\u062e\u062a\u06cc\u062f<\/h2>\n<ul style=\"direction: rtl; text-align: right\">\n<li><strong style=\"color: rgb(26, 26, 26)\">\u0639\u0627\u0645\u0644 (Agent) \u0631\u0627 \u0628\u0647 \u0633\u0645\u062a \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc \u0647\u062f\u0627\u06cc\u062a \u06a9\u0646\u06cc\u062f.<\/strong>\u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 API \u0648 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0645\u062d\u0635\u0648\u0644 Cisco\u060c \u0639\u0627\u0645\u0644 \u0631\u0627 \u062f\u0631 \u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0646\u062f.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u067e\u0631\u0627\u0645\u067e\u062a\u200c\u0647\u0627 (Prompts) \u0631\u0627 \u0647\u0645\u0627\u0646\u0646\u062f \u0646\u06cc\u0627\u0632\u0645\u0646\u062f\u06cc\u200c\u0647\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f.<\/strong>\u0648\u0631\u0648\u062f\u06cc\u200c\u0647\u0627\u060c \u0631\u0641\u062a\u0627\u0631 \u0645\u0648\u0631\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0648 \u0646\u062d\u0648\u0647 \u06af\u0632\u0627\u0631\u0634\u200c\u062f\u0647\u06cc \u062e\u0637\u0627\u0647\u0627 \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u0647\u0631 \u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u062f\u0631 Crosswork Planning \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/strong>\u0639\u0627\u0645\u0644 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 Cisco \u0631\u0627 \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u0627\u062c\u0631\u0627 \u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0634\u0645\u0627 \u0646\u0642\u0634 \u062a\u0633\u062a\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647 \u062f\u0627\u0631\u06cc\u062f.<\/li>\n<\/ul>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u0642\u0628\u0644 \u0627\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc (Production)<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0631\u06cc\u060c \u062a\u0646\u0647\u0627 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639 \u0627\u0633\u062a \u0648 \u0628\u0647 \u0645\u0639\u0646\u0627\u06cc \u062a\u0636\u0645\u06cc\u0646 \u0627\u06cc\u0645\u0646\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0645\u062f\u0644 \u0634\u0628\u06a9\u0647 \u0648\u0627\u0642\u0639\u06cc \u0646\u06cc\u0633\u062a. \u067e\u06cc\u0634 \u0627\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc (Production)\u060c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647:<\/p>\n<ul style=\"direction: rtl; text-align: right\">\n<li><input disabled=\"disabled\" type=\"checkbox\">\u0641\u0631\u062f\u06cc \u06a9\u0647 \u0628\u0647 \u0632\u0628\u0627\u0646 Python \u0645\u0633\u0644\u0637 \u0627\u0633\u062a\u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0627\u0632\u0628\u06cc\u0646\u06cc \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\">\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u062f (Linter) \u0645\u0627\u0646\u0646\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0639\u0628\u0648\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f:<code>pylint<\/code> or <code>ruff<\/code>.<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\">\u0634\u0645\u0627 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u0648\u0631\u0648\u062f\u06cc\u200c\u0647\u0627\u06cc \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u062a\u0633\u062a \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f: \u06cc\u06a9 \u0641\u0627\u06cc\u0644 CSV \u0645\u0641\u0642\u0648\u062f\u060c \u06cc\u06a9 \u0631\u062f\u06cc\u0641 \u0628\u0627 \u0641\u06cc\u0644\u062f \u062e\u0627\u0644\u06cc \u0648 \u06cc\u06a9 \u0627\u06cc\u0646\u062a\u0631\u0641\u06cc\u0633 (Interface) \u06a9\u0647 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\">\u0627\u062c\u0631\u0627\u06cc \u062f\u0648 \u0628\u0627\u0631\u0647 \u0622\u0646 \u0646\u062a\u06cc\u062c\u0647 \u06cc\u06a9\u0633\u0627\u0646\u06cc \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u062f\u0627\u0631\u062f \u0648 \u0647\u06cc\u0686 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u0627\u0631 (Circuit ID) \u062a\u06a9\u0631\u0627\u0631\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u06cc\u200c\u0634\u0648\u062f.<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\">\u0634\u0645\u0627 \u0622\u0646 \u0631\u0627 \u0631\u0648\u06cc \u0646\u0633\u062e\u0647\u200c\u0627\u06cc \u0627\u0632 \u06cc\u06a9 \u0637\u0631\u062d \u0648\u0627\u0642\u0639\u06cc \u062a\u0633\u062a \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f \u0648 \u0647\u0631\u06af\u0632 \u0631\u0648\u06cc \u0641\u0627\u06cc\u0644 \u0627\u0635\u0644\u06cc \u0627\u062c\u0631\u0627 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<li><input disabled=\"disabled\" type=\"checkbox\">\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0641\u0627\u0642\u062f \u0647\u0631\u06af\u0648\u0646\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631\u060c \u062a\u0648\u06a9\u0646 (Token) \u06cc\u0627 \u0633\u0627\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0647\u0648\u06cc\u062a\u06cc \u0627\u0633\u062a.<\/li>\n<\/ul>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u06af\u0627\u0645\u200c\u0647\u0627\u06cc \u0628\u0639\u062f\u06cc<\/h2>\n<ul style=\"direction: rtl; text-align: right\">\n<li><strong style=\"color: rgb(26, 26, 26)\">\u062e\u0648\u062f\u06a9\u0627\u0631\u0633\u0627\u0632\u06cc \u0627\u062c\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a:<\/strong>\u0646\u0633\u062e\u0647 8.0 \u0627\u0632 Crosswork Planning \u0631\u0627\u0628\u0637\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0646\u0648\u06cc\u0633\u06cc REST \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0641\u0627\u06cc\u0644 \u0648 \u0648\u0638\u0627\u06cc\u0641 (Job) \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a. \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0627\u0628\u0637\u200c\u0647\u0627\u060c \u06cc\u06a9 \u0639\u0627\u0645\u0644 (Agent) \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0648 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0631\u062f\u0647\u060c \u0622\u0646 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u062f \u0648 \u0628\u062f\u0648\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u0631\u0627\u062d\u0644 \u062f\u0633\u062a\u06cc \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0648\u0628\u060c \u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u062f.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631\u0628\u0627\u0631\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627:<\/strong>\u0645\u0637\u0627\u0644\u0639\u0647 <a href=\"https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/\" style=\"color: rgb(0, 102, 204)\">\u0628\u0631\u0631\u0633\u06cc \u0627\u062c\u0645\u0627\u0644\u06cc API \u062f\u0631 Crosswork Planning<\/a> \u0648 <a href=\"https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/libraries-crosswork-planning-design-rpc-python-library\/\" style=\"color: rgb(0, 102, 204)\">\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u067e\u0627\u06cc\u062a\u0648\u0646 Design RPC \u0648 OPM<\/a>.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u200c\u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc:<\/strong>\u0645\u0637\u0627\u0644\u0639\u0647 <a href=\"https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/view-jobs\/run-external-scripts.html\" style=\"color: rgb(0, 102, 204)\">\u0627\u062c\u0631\u0627\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u200c\u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc<\/a> \u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc Crosswork Planning 7.2.<\/li>\n<\/ul>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u067e\u06cc\u0648\u0633\u062a \u0627\u0644\u0641: \u0646\u0645\u0648\u0646\u0647 \u067e\u0627\u0633\u062e \u0627\u0632 \u0639\u0627\u0645\u0644 (Agent)<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06cc\u0646 \u067e\u0627\u0633\u062e \u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0634\u0646\u0627\u0633\u0627\u0646 \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0637\u0631\u062d \u0634\u062f\u0647 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 2 \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0645\u062a\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0645\u0648\u0646\u0647\u200c\u0627\u06cc \u0627\u0632 \u062e\u0631\u0648\u062c\u06cc \u0645\u062f\u0644 \u0632\u0628\u0627\u0646\u06cc (LLM) \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0648 \u0628\u0627 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc Cisco \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u062f\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a. \u067e\u06cc\u0634 \u0627\u0632 \u0647\u0631\u06af\u0648\u0646\u0647 \u0627\u0633\u062a\u0646\u0627\u062f\u060c \u062c\u0632\u0626\u06cc\u0627\u062a \u0631\u0627 \u0628\u0627 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0631\u0633\u0645\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<details>\n<summary>Show the full response<\/summary>\n<pre><code><span><span><span>#<\/span> Crosswork Planning APIs and Libraries<\/span>\n<\/span><span><span><span>##<\/span> Overview for new users<\/span>\n<\/span><span>Cisco Crosswork Planning represents an IP\/MPLS network as a model that can be examined and changed offline. The model brings together topology, traffic, routing configuration, and object state. Operators can use it to ask questions such as: <span><span>*<\/span><span>What happens if a link fails? How will planned traffic growth affect utilization? Which metric or tunnel changes could reduce congestion?<\/span><span>*<\/span><\/span>\n<\/span><span>The Design application provides the graphical workflow. Scripts and other applications can use the <span><span>**<\/span><span>Design RPC Python Library<\/span><span>**<\/span><\/span> and the <span><span>**<\/span><span>Optimization and Prediction Module (OPM) Python Library<\/span><span>**<\/span><\/span> to work with the same server-side design engine. The Design RPC library exposes the underlying objects and operations; OPM wraps it with a higher-level Python interface. The engine manages model objects and performs simulation and optimization. Cisco describes most model-building and simulation capabilities as available through the API, while the published REST API is initially the OPM Service API. <span>[<span>Crosswork Planning API overview<\/span>](<span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/<\/span>)<\/span>\n<\/span><span>A typical automation flow is:\n<\/span><span><span>1.<\/span> <span><span>**<\/span><span>Load a model.<\/span><span>**<\/span><\/span> Open a local plan file through the library, or retrieve a collector model from the Modeling Daemon (WMD).\n<\/span><span><span>2.<\/span> <span><span>**<\/span><span>Inspect or change the model.<\/span><span>**<\/span><\/span> Read objects, adjust traffic or topology, and set object state.\n<\/span><span><span>3.<\/span> <span><span>**<\/span><span>Run an analysis or optimization.<\/span><span>**<\/span><\/span> Submit the modeled scenario to the design engine.\n<\/span><span><span>4.<\/span> <span><span>**<\/span><span>Review and use the result.<\/span><span>**<\/span><\/span> Examine the resulting model and reports, then save or pass the output into a subsequent workflow.\n<\/span><span>A plan file represents one network and can contain configurations, routes, measured traffic, an estimated traffic matrix, object states, and analysis results. Crosswork Planning documents <span>`.pln`<\/span> files for compact use in the application and tab-delimited <span>`.txt`<\/span> files for direct editing. <span>[<span>Core concepts<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/get-started\/core-concepts.html<\/span>)<\/span>\n<\/span><span><span><span>##<\/span> Loading a network model<\/span>\n<\/span><span>The SDK runs on a Linux client and connects to the Crosswork Planning VM's <span>`designapi`<\/span> service. Cisco's 7.2 example reads a local plan file on the client and sends its bytes to the server-side engine. The OPM version presents the loaded network through <span>`plan.model`<\/span>. <span>[<span>Customization scripts and library setup<\/span>](<span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/customization-scripts-using-crosswork-planning-designopm-library-package\/<\/span>)<\/span>\n<\/span><span><span><span>```<\/span><span>python<\/span>\n<\/span><\/span><span><span><span><span>from<\/span> com<span>.<\/span>cisco<span>.<\/span>wae<span>.<\/span>opm<span>.<\/span>network <span>import<\/span> open_plan\n<\/span><\/span><\/span><span><span><span><span>with<\/span> open_plan<span>(<\/span>plan_file<span>,<\/span> host<span>,<\/span> <span>30744<\/span><span>,<\/span> <span>\"ssl\"<\/span><span>)<\/span> <span>as<\/span> plan<span>:<\/span>\n<\/span><\/span><\/span><span><span><span> model <span>=<\/span> plan<span>.<\/span>model\n<\/span><\/span><\/span><span><span><span> <span>for<\/span> node <span>in<\/span> model<span>.<\/span>nodes<span>:<\/span>\n<\/span><\/span><\/span><span><span><span> <span>print<\/span><span>(<\/span>node<span>.<\/span>name<span>)<\/span><\/span>\n<\/span><\/span><span><span><span>```<\/span><\/span>\n<\/span><span>The SDK guide also shows WMD as an alternative source: WMD maintains a working collector model, and an OPM <span>`WMDClient`<\/span> can retrieve a copy for a script to inspect or use. <span>[<span>WMD and library examples<\/span>](<span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/customization-scripts-using-crosswork-planning-designopm-library-package\/<\/span>)<\/span>\n<\/span><span>For the documented 7.2 package, Cisco specifies Linux, Python 3.12 or later, TLS certificates, and an authenticated Crosswork account with administrator access. The library package connects to the service over SSL; the guide uses port <span>`30744`<\/span>. <span>[<span>Library requirements and connection example<\/span>](<span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/customization-scripts-using-crosswork-planning-designopm-library-package\/<\/span>)<\/span>\n<\/span><span><span><span>##<\/span> Model constructs and operations<\/span>\n<\/span><span>A <span><span>**<\/span><span>plan object<\/span><span>**<\/span><\/span> represents a network element or planning construct. Objects have properties and state that affect the simulated network. The available model is broader than a topology graph: plan files can include traffic, routing, service classes, paths, and analysis results. <span>[<span>Plan files and objects<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/get-started\/core-concepts.html<\/span>)<\/span>\n<\/span><span><span><span><span>|<\/span><span> Model area <\/span><span>|<\/span><span> Representative objects and constructs <\/span><span>|<\/span><span> How they are used <\/span><span>|<\/span>\n<\/span><\/span><\/span><span><span><span><span>|<\/span><span>---<\/span><span>|<\/span><span>---<\/span><span>|<\/span><span>---<\/span><span>|<\/span>\n<\/span><\/span><\/span><span><span><span><span>|<\/span><span> Topology <\/span><span>|<\/span><span> Nodes, sites, interfaces, circuits <\/span><span>|<\/span><span> Represent routers, logical groupings, and links. Interfaces carry routing properties such as metrics; circuits describe connections and capacity. <\/span><span>|<\/span>\n<\/span><\/span><\/span><span><span><span><span>|<\/span><span> Physical and shared risk <\/span><span>|<\/span><span> Ports, port circuits, link aggregation groups (LAGs), Shared Risk Link Groups (SRLGs) <\/span><span>|<\/span><span> Model physical members, bundled links, and elements that could fail together. <\/span><span>|<\/span>\n<\/span><\/span><\/span><span><span><span><span>|<\/span><span> Traffic <\/span><span>|<\/span><span> Demands and demand meshes, measured traffic, traffic matrices, growth plans <\/span><span>|<\/span><span> Represent source-to-destination traffic, estimate demand from measurements, and model future growth. <\/span><span>|<\/span>\n<\/span><\/span><\/span><span><span><span><span>|<\/span><span> Routing and traffic engineering <\/span><span>|<\/span><span> Label-switched paths (LSPs), LSP paths, RSVP-TE and Segment Routing (SR) constructs <\/span><span>|<\/span><span> Represent tunnels, explicit or calculated paths, protection, and routing of demands through LSPs. <\/span><span>|<\/span>\n<\/span><\/span><\/span><span><span><span><span>|<\/span><span> Services and routing context <\/span><span>|<\/span><span> VPNs, multicast flows, service classes, routing protocols <\/span><span>|<\/span><span> Add service and protocol context to the network model and simulation. <\/span><span>|<\/span>\n<\/span><\/span><\/span><span><span><span><span>|<\/span><span> State and scenarios <\/span><span>|<\/span><span> Active\/inactive and failed states; topology and metric changes <\/span><span>|<\/span><span> Define the modeled network condition and evaluate what-if scenarios. <\/span><span>|<\/span>\n<\/span><\/span><\/span><span>Crosswork Planning's documented plan-object operations include creating, modifying, and deleting objects. The model can also be changed by applying failures or administrative state, changing metrics or topology, and editing demand traffic. <span>[<span>Plan object concepts<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/understand-plan-objects.html<\/span>)<\/span> <span>[<span>Object states<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/simulation-overview\/states-of-plan-objects.html<\/span>)<\/span>\n<\/span><span><span><span>##<\/span> Simulation and analysis<\/span>\n<\/span><span>The simulation engine evaluates traffic against the modeled topology, routing configuration, and object state. The existing <span><span>**<\/span><span>Analyze<\/span><span>**<\/span><\/span> capabilities provide useful categories for describing the kinds of work that can be automated:\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>What-if analysis:<\/span><span>**<\/span><\/span> model failures, topology changes, metric changes, and demand changes.\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>Failure analysis:<\/span><span>**<\/span><\/span> evaluate worst-case interface utilization or demand latency across selected failure scenarios, including pairwise failures.\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>Traffic growth and capacity planning:<\/span><span>**<\/span><\/span> project demand growth and evaluate capacity changes against utilization targets.\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>Routing and service simulation:<\/span><span>**<\/span><\/span> model IGP or BGP behavior, LSP routing, VPNs, multicast, and quality-of-service (QoS) settings where represented in the plan.\n<\/span><span>These categories are documented in the Crosswork Planning Design guide. The API overview positions the libraries as a way for scripts and applications to evaluate models on the server engine; the exact operation and object coverage should be checked against the SDK package for the deployed release. <span>[<span>Analyze and simulation topics<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/doc_portal\/CrossworkPlanning_info_center.html<\/span>)<\/span> <span>[<span>Design RPC and OPM overview<\/span>](<span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/<\/span>)<\/span>\n<\/span><span><span><span>##<\/span> Optimization and traffic engineering<\/span>\n<\/span><span><span><span>**<\/span><span>Optimize<\/span><span>**<\/span><\/span> and <span><span>**<\/span><span>Traffic Engineering<\/span><span>**<\/span><\/span> use the modeled traffic and routing state to evaluate changes to network metrics, capacity, or paths.\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>Metric optimization<\/span><span>**<\/span><\/span> can target maximum interface utilization, the number of interfaces above a threshold, latency bounds, and selected failure scenarios. It can optimize for normal operation or account for resilient operation across failures. <span>[<span>Metric optimization options<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/optimize-metrics\/perform-metric-optimization.html<\/span>)<\/span>\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>LSP optimization<\/span><span>**<\/span><\/span> includes disjoint-path, load-share, and setup-bandwidth workflows. RSVP-TE and SR-TE options support path and bandwidth planning. <span>[<span>Optimization topics<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/doc_portal\/CrossworkPlanning_info_center.html<\/span>)<\/span>\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>SR-TE optimization<\/span><span>**<\/span><\/span> can optimize path metrics such as IGP metric, TE metric, or delay, and can constrain paths to avoid selected nodes, interfaces, or SRLGs. <span>[<span>SR-TE optimization<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/optimize-segment-routing\/sr-te-optimizations.html<\/span>)<\/span>\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>Capacity planning<\/span><span>**<\/span><\/span> can model circuit upgrades, new adjacencies, parallel circuits, or port circuits (LAGs), with utilization thresholds, capacity increments, failure sets, and capacity or cost objectives. <span>[<span>Capacity planning options<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/perform-capacity-planning\/perform-capacity-planning-optimization.html<\/span>)<\/span>\n<\/span><span><span>-<\/span> <span><span>**<\/span><span>Traffic engineering<\/span><span>**<\/span><\/span> represents LSPs and their paths, and can route demands through those LSPs. The Design guide documents RSVP-TE constructs such as named and actual paths, Fast Reroute, and point-to-multipoint LSPs, alongside SR constructs such as segment types, segment lists, SIDs, and protection. <span>[<span>Traffic Engineering topics<\/span>](<span>https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/doc_portal\/CrossworkPlanning_info_center.html<\/span>)<\/span>\n<\/span><span>This gives a practical way to describe the relationship to current product capabilities: the GUI exposes Analyze, Optimize, and Traffic Engineering workflows; the libraries let automation build or alter a model and invoke engine-backed work programmatically. For a specific deployment, confirm which functions are exposed by its matching SDK release rather than assuming every GUI action has an identical library call.\n<\/span><span><span><span>##<\/span> Version and scope notes<\/span>\n<\/span><span>The OPM library release notes for version 7.2 list Layer 1 (L1) objects\u2014including L1 nodes, links, ports, circuits, paths, and L3-to-L1 links\u2014and user tables. This documents model-object support in that library version; it does not by itself establish which L1 simulation or optimization workflows are available. <span>[<span>OPM library release notes<\/span>](<span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/crosswork-planning-opm-python-library\/<\/span>)<\/span>\n<\/span><span>The public API overview distinguishes the REST OPM Service API from the Design RPC and OPM Python libraries. The REST API uses HTTPS and JSON; the Python package connects to the design service using TLS. Treat the package and service version as a matched set, and use the SDK's included API documentation to confirm object attributes and callable operations for the installed release. <span>[<span>Crosswork Planning API overview<\/span>](<span>https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/<\/span>)<\/span>\n<\/span><\/code><\/pre>\n<\/details>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700; direction: rtl; text-align: right\">\u067e\u06cc\u0648\u0633\u062a \u0628: \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0627\u0635\u0644\u0627\u062d\u200c\u0634\u062f\u0647 (Refined prompt)<\/h2>\n<p style=\"direction: rtl; text-align: right\">\u0627\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0648 \u0627\u0635\u0644\u0627\u062d\u200c\u0634\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 (Prompt) \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 6 \u0627\u0633\u062a.<\/p>\n<details>\n<summary>Show the refined prompt<\/summary>\n<pre><code><span>Generate a single, complete Python script named `append_circuit_id.py` for Cisco Crosswork Planning. Return only the contents of the Python file in one code block. Do not return a README, tests, explanation, pseudocode, or additional files.\n<\/span><span>### Reference material and supported API\n<\/span><span>Use these Cisco references as the API\/runtime authority:\n<\/span><span>- Crosswork Planning Design RPC \/ OPM Python library: https:\/\/developer.cisco.com\/docs\/crosswork\/planning\/libraries-crosswork-planning-design-rpc-python-library\/\n<\/span><span>- Crosswork Planning Design 7.2 guide, \"Run external scripts\": https:\/\/www.cisco.com\/c\/en\/us\/td\/docs\/cloud-systems-management\/crosswork-planning\/7-2\/design-guide\/cisco-crosswork-planning-design-user-guide-7-2\/view-jobs\/run-external-scripts.html\n<\/span><span>The script runs inside the Crosswork Planning Python environment, where `from com.cisco.wae.opm.network import Network` is available. Follow the documented external-script contract: `sys.argv[1]` is the source plan path, `sys.argv[2]` is the destination plan path, and `Network(source_path)` opens the model and `network.write(destination_path)` writes it. Do not substitute a generic plan-file parser or introduce third-party dependencies. Additional Collector arguments may be present; use `sys.argv[6]` as an optional user-uploaded external-files directory, and ignore other extra arguments.\n<\/span><span>### Purpose and data format\n<\/span><span>Read a file named exactly `circuitid_mappings.csv`. It has a header row with these required, case-sensitive columns:\n<\/span><span>```csv\n<\/span><span>Circuit ID,NodeA,InterfaceA,NodeB,InterfaceB\n<\/span><span>```\n<\/span><span>Each non-empty data row maps one circuit ID to two node\/interface endpoints. Read the CSV at runtime using Python's standard `csv` module. Strip leading and trailing whitespace from all field values. Skip and log rows where any required value is empty. A missing file, empty CSV, or missing required header must produce a useful error.\n<\/span><span>Locate the CSV by checking these directories in order, using the first matching file and avoiding duplicate directories:\n<\/span><span>1. Directory containing this script.\n<\/span><span>2. Directory containing the source plan.\n<\/span><span>3. Current working directory.\n<\/span><span>4. The optional `sys.argv[6]` directory, if supplied and valid.\n<\/span><span>If the CSV cannot be found, raise a readable error that names the expected filename and directories searched.\n<\/span><span>### Matching and updates\n<\/span><span>Use the OPM network model. Prefer matching `network.model.circuits`: each circuit has `interface_a` and `interface_b`; each interface has `name`, `description`, and a parent `node.name`. Match a CSV circuit using both `(node name, interface name)` endpoint pairs, independent of endpoint order. Strip whitespace before comparing names. For each matched circuit, update the descriptions on both endpoint interfaces.\n<\/span><span>If a CSV row does not match a circuit object, fall back to resolving its two named interfaces through `network.model.nodes` and each node's `interfaces` collection. Support both keyed collection lookup and iteration by object `.name` so the code works with either mapping-like or iterable OPM collections. Update whichever endpoint interfaces exist; log a missing interface. Log a CSV mapping as unmatched only if neither endpoint interface could be found.\n<\/span><span>Append this exact suffix to each applicable interface description:\n<\/span><span>`(Circuit ID: &lt;Circuit ID&gt;)`\n<\/span><span>Preserve any existing description text. Before appending, remove any existing suffix matching `(Circuit ID:...)`, then trim surrounding whitespace. This makes reruns idempotent and replaces an old ID instead of accumulating duplicate IDs. If the description is empty after cleanup, set it to the suffix alone. Do not change an interface if its resulting description is already identical; log it as unchanged.\n<\/span><span>If duplicate CSV rows map the same order-independent circuit to different IDs, or the same endpoint to different IDs, print a warning and let the last row win. Keep enough row information to report the CSV line number for incomplete, conflicting, and unmatched rows.\n<\/span><span>### Plan-file handling and error recovery\n<\/span><span>Before importing the plan, check that the source path exists, is a regular file, is readable, and is non-empty; report failures clearly. Print the source path and byte size.\n<\/span><span>Try `Network(source_path)` first. If direct import fails, log the original error and try the Crosswork `mate_convert` CLI with `-plan-file &lt;source&gt; -out-file &lt;temporary.pln&gt;`, then open the converted file with `Network`. If both methods fail, raise a useful error containing both failures.\n<\/span><span>Try `network.write(destination_path)` first. If direct write fails, log the error, write a temporary `.pln` file with `network.write`, then convert it to the requested destination with `mate_convert -plan-file &lt;temporary.pln&gt; -out-file &lt;destination&gt;`. Remove the temporary staged file even if conversion fails. Remove the temporary converted input file after successfully writing the destination. Never delete or overwrite the source plan intentionally.\n<\/span><span>### Logging and command-line behavior\n<\/span><span>Print useful progress and audit messages: mapping file selected, number of valid mappings\/endpoints loaded, plan validation, each updated or unchanged interface, missing interfaces, unmatched mappings, number of matched plan circuits, total descriptions changed, and unmatched mapping count when nonzero. Do not print sensitive data.\n<\/span><span>If fewer than two positional arguments are supplied, print concise usage showing `&lt;source_plan&gt; &lt;destination_plan&gt; [extra args...]` and exit with status 1. Otherwise run the operation with arguments 1 and 2 and optional upload directory at argument 6. Put executable behavior behind `if __name__ == \"__main__\":` and organize nontrivial behavior into small, documented helper functions.\n<\/span><span>Keep the implementation compatible with the Python runtime bundled with the target Crosswork Planning release. Use only the standard library plus the documented Crosswork OPM library and `mate_convert` CLI. Ensure the script is syntactically complete and handles filesystem, CSV, OPM collection, and subprocess errors with actionable messages.\n<\/span><\/code><\/pre>\n<\/details>\n<div title=\"\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0644 \u0627\u06cc\u0646 \u0628\u062e\u0634\" style=\"display: flex\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><\/svg><\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0642\u062f\u0645\u0647 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 Crosswork Planning \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u062c\u0627\u0645\u0639\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc \u062a\u0623\u062b\u06cc\u0631 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0634\u0628\u06a9\u0647\u060c \u0631\u0634\u062f \u062a\u0631\u0627\u0641\u06cc\u06a9\u060c \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0648 \u062e\u0631\u0627\u0628\u06cc\u200c\u0647\u0627\u06cc \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0631\u0627\u0647\u06a9\u0627\u0631 \u0628\u0627\u2026<\/p>\n","protected":false},"author":1,"featured_media":188,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[98,94,100,47,102,104,121,61],"tags":[],"class_list":["post-254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automation","category-crosswork","category-crosswork-planning","category-iosxr","category-python","category-python-libraries","category-scipting","category-ai-fa"],"_links":{"self":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/posts\/254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/comments?post=254"}],"version-history":[{"count":0,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/posts\/254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/media\/188"}],"wp:attachment":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/media?parent=254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/categories?post=254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/tags?post=254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}