diff --git "a/Notebooks/CodeForge.ipynb" "b/Notebooks/CodeForge.ipynb" --- "a/Notebooks/CodeForge.ipynb" +++ "b/Notebooks/CodeForge.ipynb" @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 38, + "execution_count": 1, "id": "b75a238a", "metadata": {}, "outputs": [], @@ -504,7 +504,7 @@ }, { "cell_type": "code", - "execution_count": 148, + "execution_count": 9, "id": "0ccc026b", "metadata": {}, "outputs": [], @@ -525,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "c8827093", "metadata": {}, "outputs": [ @@ -536,12 +536,12 @@ "Index ready: {'_response_info': {'raw_headers': {'connection': 'keep-alive',\n", " 'content-length': '187',\n", " 'content-type': 'application/json',\n", - " 'date': 'Sat, 21 Mar 2026 06:03:49 GMT',\n", + " 'date': 'Sat, 21 Mar 2026 19:29:15 GMT',\n", " 'grpc-status': '0',\n", " 'server': 'envoy',\n", - " 'x-envoy-upstream-service-time': '102',\n", - " 'x-pinecone-request-latency-ms': '102',\n", - " 'x-pinecone-response-duration-ms': '104'}},\n", + " 'x-envoy-upstream-service-time': '64',\n", + " 'x-pinecone-request-latency-ms': '63',\n", + " 'x-pinecone-response-duration-ms': '65'}},\n", " 'dimension': 384,\n", " 'index_fullness': 0.0,\n", " 'memoryFullness': 0.0,\n", @@ -589,7 +589,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "7561b3a1", "metadata": {}, "outputs": [], @@ -633,14 +633,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\ATHARVA\\AppData\\Local\\Temp\\ipykernel_10256\\2526755923.py:1: LangChainDeprecationWarning: The class `HuggingFaceEmbeddings` was deprecated in LangChain 0.2.2 and will be removed in 1.0. An updated version of the class exists in the `langchain-huggingface package and should be used instead. To use it run `pip install -U `langchain-huggingface` and import as `from `langchain_huggingface import HuggingFaceEmbeddings``.\n", + "C:\\Users\\ATHARVA\\AppData\\Local\\Temp\\ipykernel_29944\\2526755923.py:1: LangChainDeprecationWarning: The class `HuggingFaceEmbeddings` was deprecated in LangChain 0.2.2 and will be removed in 1.0. An updated version of the class exists in the `langchain-huggingface package and should be used instead. To use it run `pip install -U `langchain-huggingface` and import as `from `langchain_huggingface import HuggingFaceEmbeddings``.\n", " embeddings = HuggingFaceEmbeddings(model_name=\"sentence-transformers/all-MiniLM-L6-v2\", model_kwargs={\"device\": device})\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ecc00257ca4d4f3ea6c7fde1e0823058", + "model_id": "d62a524ba2b14938829a48525584ad02", "version_major": 2, "version_minor": 0 }, @@ -678,7 +678,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "dc16b2516c194394bec281f956ab47d2", + "model_id": "ee2a7b2fdeb348f1921ce31fad4a72e4", "version_major": 2, "version_minor": 0 }, @@ -704,7 +704,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 15, "id": "03c755a1", "metadata": {}, "outputs": [], @@ -757,7 +757,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 40, "id": "9db28710", "metadata": {}, "outputs": [], @@ -808,13 +808,12 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": null, "id": "09d238ab", "metadata": {}, "outputs": [], "source": [ - "# This is your \"Global Level\" storage outside the Graph\n", - "final_roadmap_store = {}\n", + "\n", "\n", "@tool(args_schema=LearningRoadmap)\n", "def submit_final_roadmap(candidate_name, target_role, roadmap, onboarding_summary):\n", @@ -835,8 +834,7 @@ " ]\n", " }\n", " \n", - " # Store within the tool's global context\n", - " final_roadmap_store = result\n", + " \n", " \n", " # Return to LangGraph (will be stored in state via a post-processing node)\n", " return result" @@ -844,7 +842,7 @@ }, { "cell_type": "code", - "execution_count": 149, + "execution_count": 18, "id": "6ad04bc6", "metadata": {}, "outputs": [], @@ -867,7 +865,7 @@ }, { "cell_type": "code", - "execution_count": 150, + "execution_count": 19, "id": "285f74bb", "metadata": {}, "outputs": [], @@ -877,7 +875,7 @@ }, { "cell_type": "code", - "execution_count": 151, + "execution_count": 20, "id": "47564782", "metadata": {}, "outputs": [], @@ -895,7 +893,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "id": "7cfbfc3a", "metadata": {}, "outputs": [], @@ -913,7 +911,7 @@ }, { "cell_type": "code", - "execution_count": 189, + "execution_count": 22, "id": "5deda2bb", "metadata": {}, "outputs": [], @@ -946,7 +944,7 @@ }, { "cell_type": "code", - "execution_count": 123, + "execution_count": 23, "id": "c8df9934", "metadata": {}, "outputs": [], @@ -983,7 +981,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 24, "id": "608efafd", "metadata": {}, "outputs": [], @@ -1023,7 +1021,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 25, "id": "8a6c1483", "metadata": {}, "outputs": [], @@ -1060,7 +1058,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 26, "id": "059e5f86", "metadata": {}, "outputs": [], @@ -1129,7 +1127,7 @@ }, { "cell_type": "code", - "execution_count": 127, + "execution_count": 27, "id": "9c4dea1e", "metadata": {}, "outputs": [], @@ -1163,7 +1161,7 @@ }, { "cell_type": "code", - "execution_count": 193, + "execution_count": 28, "id": "eb13ffc0", "metadata": {}, "outputs": [], @@ -1185,7 +1183,7 @@ }, { "cell_type": "code", - "execution_count": 195, + "execution_count": 29, "id": "330acef6", "metadata": {}, "outputs": [], @@ -1229,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 200, + "execution_count": 30, "id": "7352181c", "metadata": {}, "outputs": [], @@ -1293,7 +1291,7 @@ }, { "cell_type": "code", - "execution_count": 201, + "execution_count": 31, "id": "1fb2f0d1", "metadata": {}, "outputs": [], @@ -1317,7 +1315,7 @@ }, { "cell_type": "code", - "execution_count": 198, + "execution_count": 32, "id": "cea90664", "metadata": {}, "outputs": [], @@ -1358,7 +1356,7 @@ }, { "cell_type": "code", - "execution_count": 179, + "execution_count": 33, "id": "ba9f22e1", "metadata": {}, "outputs": [], @@ -1368,7 +1366,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "id": "b5cfe4c3", "metadata": {}, "outputs": [], @@ -1401,31 +1399,28 @@ " \"roadmap_planning_agent\",\n", " tools_condition,\n", " {\n", - " \"tools\": \"tools\", # If tool_calls exist, go to tools\n", - " \"__end__\": \"finalize_state\" # If finished, go to finalize_state\n", + " \"tools\": \"tools\", \n", + " \"__end__\": \"finalize_state\" # tools_condition returns '__end__' when no tools are called\n", " }\n", ")\n", "\n", - "# 2. Loop back to agent after tools\n", "builder.add_edge(\"tools\", \"roadmap_planning_agent\")\n", + "builder.add_edge(\"finalize_state\", END)\n", "\n", - "builder.add_edge(\"roadmap_planning_agent\", \"finalize_state\")\n", - "\n", - "# Compile the Graph\n", "graph = builder.compile()" ] }, { "cell_type": "code", - "execution_count": 170, + "execution_count": 39, "id": "53588a77", "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1438,7 +1433,7 @@ }, { "cell_type": "code", - "execution_count": 187, + "execution_count": 36, "id": "0edf8d59", "metadata": {}, "outputs": [], @@ -1467,7 +1462,7 @@ }, { "cell_type": "code", - "execution_count": 203, + "execution_count": 37, "id": "a95b4db7", "metadata": {}, "outputs": [ @@ -1478,6 +1473,48 @@ "DEBUGGER: Sending 525 characters to JD Agent...\n", "DEBUGGER SUCCESS: Extracted Backend Developer\n" ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mKeyboardInterrupt\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[37]\u001b[39m\u001b[32m, line 17\u001b[39m\n\u001b[32m 1\u001b[39m initial_input = {\n\u001b[32m 2\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mcandidate_name\u001b[39m\u001b[33m\"\u001b[39m: \u001b[33m\"\u001b[39m\u001b[33mChirayu Jain\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 3\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mresume_text\u001b[39m\u001b[33m\"\u001b[39m: \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[32m (...)\u001b[39m\u001b[32m 11\u001b[39m \n\u001b[32m 12\u001b[39m }\n\u001b[32m---> \u001b[39m\u001b[32m17\u001b[39m final_state = \u001b[43mgraph\u001b[49m\u001b[43m.\u001b[49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43minitial_input\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langgraph\\pregel\\main.py:3071\u001b[39m, in \u001b[36mPregel.invoke\u001b[39m\u001b[34m(self, input, config, context, stream_mode, print_mode, output_keys, interrupt_before, interrupt_after, durability, **kwargs)\u001b[39m\n\u001b[32m 3068\u001b[39m chunks: \u001b[38;5;28mlist\u001b[39m[\u001b[38;5;28mdict\u001b[39m[\u001b[38;5;28mstr\u001b[39m, Any] | Any] = []\n\u001b[32m 3069\u001b[39m interrupts: \u001b[38;5;28mlist\u001b[39m[Interrupt] = []\n\u001b[32m-> \u001b[39m\u001b[32m3071\u001b[39m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mchunk\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 3072\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 3073\u001b[39m \u001b[43m \u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3074\u001b[39m \u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3075\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_mode\u001b[49m\u001b[43m=\u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mupdates\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mvalues\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[32m 3076\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mstream_mode\u001b[49m\u001b[43m \u001b[49m\u001b[43m==\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mvalues\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\n\u001b[32m 3077\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mstream_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3078\u001b[39m \u001b[43m \u001b[49m\u001b[43mprint_mode\u001b[49m\u001b[43m=\u001b[49m\u001b[43mprint_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3079\u001b[39m \u001b[43m \u001b[49m\u001b[43moutput_keys\u001b[49m\u001b[43m=\u001b[49m\u001b[43moutput_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3080\u001b[39m \u001b[43m \u001b[49m\u001b[43minterrupt_before\u001b[49m\u001b[43m=\u001b[49m\u001b[43minterrupt_before\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3081\u001b[39m \u001b[43m \u001b[49m\u001b[43minterrupt_after\u001b[49m\u001b[43m=\u001b[49m\u001b[43minterrupt_after\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3082\u001b[39m \u001b[43m \u001b[49m\u001b[43mdurability\u001b[49m\u001b[43m=\u001b[49m\u001b[43mdurability\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3083\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3084\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 3085\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mstream_mode\u001b[49m\u001b[43m \u001b[49m\u001b[43m==\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mvalues\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\n\u001b[32m 3086\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mchunk\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[43m==\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m2\u001b[39;49m\u001b[43m:\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langgraph\\pregel\\main.py:2646\u001b[39m, in \u001b[36mPregel.stream\u001b[39m\u001b[34m(self, input, config, context, stream_mode, print_mode, output_keys, interrupt_before, interrupt_after, durability, subgraphs, debug, **kwargs)\u001b[39m\n\u001b[32m 2644\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m task \u001b[38;5;129;01min\u001b[39;00m loop.match_cached_writes():\n\u001b[32m 2645\u001b[39m loop.output_writes(task.id, task.writes, cached=\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[32m-> \u001b[39m\u001b[32m2646\u001b[39m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m_\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrunner\u001b[49m\u001b[43m.\u001b[49m\u001b[43mtick\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 2647\u001b[39m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mt\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mt\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mloop\u001b[49m\u001b[43m.\u001b[49m\u001b[43mtasks\u001b[49m\u001b[43m.\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mnot\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mt\u001b[49m\u001b[43m.\u001b[49m\u001b[43mwrites\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2648\u001b[39m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mstep_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2649\u001b[39m \u001b[43m \u001b[49m\u001b[43mget_waiter\u001b[49m\u001b[43m=\u001b[49m\u001b[43mget_waiter\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2650\u001b[39m \u001b[43m \u001b[49m\u001b[43mschedule_task\u001b[49m\u001b[43m=\u001b[49m\u001b[43mloop\u001b[49m\u001b[43m.\u001b[49m\u001b[43maccept_push\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2651\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 2652\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;66;43;03m# emit output\u001b[39;49;00m\n\u001b[32m 2653\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43;01myield from\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m_output\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 2654\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprint_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msubgraphs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mqueue\u001b[49m\u001b[43m.\u001b[49m\u001b[43mEmpty\u001b[49m\n\u001b[32m 2655\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 2656\u001b[39m loop.after_tick()\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langgraph\\pregel\\_runner.py:167\u001b[39m, in \u001b[36mPregelRunner.tick\u001b[39m\u001b[34m(self, tasks, reraise, timeout, retry_policy, get_waiter, schedule_task)\u001b[39m\n\u001b[32m 165\u001b[39m t = tasks[\u001b[32m0\u001b[39m]\n\u001b[32m 166\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m167\u001b[39m \u001b[43mrun_with_retry\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 168\u001b[39m \u001b[43m \u001b[49m\u001b[43mt\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 169\u001b[39m \u001b[43m \u001b[49m\u001b[43mretry_policy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 170\u001b[39m \u001b[43m \u001b[49m\u001b[43mconfigurable\u001b[49m\u001b[43m=\u001b[49m\u001b[43m{\u001b[49m\n\u001b[32m 171\u001b[39m \u001b[43m \u001b[49m\u001b[43mCONFIG_KEY_CALL\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpartial\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 172\u001b[39m \u001b[43m \u001b[49m\u001b[43m_call\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 173\u001b[39m \u001b[43m \u001b[49m\u001b[43mweakref\u001b[49m\u001b[43m.\u001b[49m\u001b[43mref\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 174\u001b[39m \u001b[43m \u001b[49m\u001b[43mretry_policy\u001b[49m\u001b[43m=\u001b[49m\u001b[43mretry_policy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 175\u001b[39m \u001b[43m \u001b[49m\u001b[43mfutures\u001b[49m\u001b[43m=\u001b[49m\u001b[43mweakref\u001b[49m\u001b[43m.\u001b[49m\u001b[43mref\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfutures\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 176\u001b[39m \u001b[43m \u001b[49m\u001b[43mschedule_task\u001b[49m\u001b[43m=\u001b[49m\u001b[43mschedule_task\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 177\u001b[39m \u001b[43m \u001b[49m\u001b[43msubmit\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43msubmit\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 178\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 179\u001b[39m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 180\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 181\u001b[39m \u001b[38;5;28mself\u001b[39m.commit(t, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[32m 182\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m exc:\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langgraph\\pregel\\_retry.py:42\u001b[39m, in \u001b[36mrun_with_retry\u001b[39m\u001b[34m(task, retry_policy, configurable)\u001b[39m\n\u001b[32m 40\u001b[39m task.writes.clear()\n\u001b[32m 41\u001b[39m \u001b[38;5;66;03m# run the task\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m42\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtask\u001b[49m\u001b[43m.\u001b[49m\u001b[43mproc\u001b[49m\u001b[43m.\u001b[49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtask\u001b[49m\u001b[43m.\u001b[49m\u001b[43minput\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 43\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m ParentCommand \u001b[38;5;28;01mas\u001b[39;00m exc:\n\u001b[32m 44\u001b[39m ns: \u001b[38;5;28mstr\u001b[39m = config[CONF][CONFIG_KEY_CHECKPOINT_NS]\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langgraph\\_internal\\_runnable.py:656\u001b[39m, in \u001b[36mRunnableSeq.invoke\u001b[39m\u001b[34m(self, input, config, **kwargs)\u001b[39m\n\u001b[32m 654\u001b[39m \u001b[38;5;66;03m# run in context\u001b[39;00m\n\u001b[32m 655\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m set_config_context(config, run) \u001b[38;5;28;01mas\u001b[39;00m context:\n\u001b[32m--> \u001b[39m\u001b[32m656\u001b[39m \u001b[38;5;28minput\u001b[39m = \u001b[43mcontext\u001b[49m\u001b[43m.\u001b[49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstep\u001b[49m\u001b[43m.\u001b[49m\u001b[43minvoke\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 657\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 658\u001b[39m \u001b[38;5;28minput\u001b[39m = step.invoke(\u001b[38;5;28minput\u001b[39m, config)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langgraph\\_internal\\_runnable.py:400\u001b[39m, in \u001b[36mRunnableCallable.invoke\u001b[39m\u001b[34m(self, input, config, **kwargs)\u001b[39m\n\u001b[32m 398\u001b[39m run_manager.on_chain_end(ret)\n\u001b[32m 399\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m400\u001b[39m ret = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 401\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m.recurse \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(ret, Runnable):\n\u001b[32m 402\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m ret.invoke(\u001b[38;5;28minput\u001b[39m, config)\n", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[31]\u001b[39m\u001b[32m, line 13\u001b[39m, in \u001b[36mroadmap_planning_node\u001b[39m\u001b[34m(state)\u001b[39m\n\u001b[32m 10\u001b[39m system_prompt = SystemMessage(content=roadmap_planner_agent_prompt)\n\u001b[32m 11\u001b[39m input_msg = HumanMessage(content=\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mskill_gap_data\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m \u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m13\u001b[39m response = \u001b[43mroadmap_planner_agent\u001b[49m\u001b[43m.\u001b[49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43msystem_prompt\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minput_msg\u001b[49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[43m+\u001b[49m\u001b[43m \u001b[49m\u001b[43mstate\u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmessages\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 15\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m {\u001b[33m\"\u001b[39m\u001b[33mmessages\u001b[39m\u001b[33m\"\u001b[39m: [response]}\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langchain_core\\runnables\\base.py:5695\u001b[39m, in \u001b[36mRunnableBindingBase.invoke\u001b[39m\u001b[34m(self, input, config, **kwargs)\u001b[39m\n\u001b[32m 5688\u001b[39m \u001b[38;5;129m@override\u001b[39m\n\u001b[32m 5689\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34minvoke\u001b[39m(\n\u001b[32m 5690\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 5693\u001b[39m **kwargs: Any | \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[32m 5694\u001b[39m ) -> Output:\n\u001b[32m-> \u001b[39m\u001b[32m5695\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mbound\u001b[49m\u001b[43m.\u001b[49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 5696\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 5697\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_merge_configs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 5698\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43m{\u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 5699\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langchain_core\\language_models\\chat_models.py:402\u001b[39m, in \u001b[36mBaseChatModel.invoke\u001b[39m\u001b[34m(self, input, config, stop, **kwargs)\u001b[39m\n\u001b[32m 388\u001b[39m \u001b[38;5;129m@override\u001b[39m\n\u001b[32m 389\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34minvoke\u001b[39m(\n\u001b[32m 390\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 395\u001b[39m **kwargs: Any,\n\u001b[32m 396\u001b[39m ) -> AIMessage:\n\u001b[32m 397\u001b[39m config = ensure_config(config)\n\u001b[32m 398\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m cast(\n\u001b[32m 399\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mAIMessage\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 400\u001b[39m cast(\n\u001b[32m 401\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mChatGeneration\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m--> \u001b[39m\u001b[32m402\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mgenerate_prompt\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 403\u001b[39m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_convert_input\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 404\u001b[39m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 405\u001b[39m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[43m=\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mcallbacks\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 406\u001b[39m \u001b[43m \u001b[49m\u001b[43mtags\u001b[49m\u001b[43m=\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtags\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 407\u001b[39m \u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m=\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmetadata\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 408\u001b[39m \u001b[43m \u001b[49m\u001b[43mrun_name\u001b[49m\u001b[43m=\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mrun_name\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 409\u001b[39m \u001b[43m \u001b[49m\u001b[43mrun_id\u001b[49m\u001b[43m=\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m.\u001b[49m\u001b[43mpop\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mrun_id\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 410\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 411\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m.generations[\u001b[32m0\u001b[39m][\u001b[32m0\u001b[39m],\n\u001b[32m 412\u001b[39m ).message,\n\u001b[32m 413\u001b[39m )\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langchain_core\\language_models\\chat_models.py:1123\u001b[39m, in \u001b[36mBaseChatModel.generate_prompt\u001b[39m\u001b[34m(self, prompts, stop, callbacks, **kwargs)\u001b[39m\n\u001b[32m 1114\u001b[39m \u001b[38;5;129m@override\u001b[39m\n\u001b[32m 1115\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mgenerate_prompt\u001b[39m(\n\u001b[32m 1116\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 1120\u001b[39m **kwargs: Any,\n\u001b[32m 1121\u001b[39m ) -> LLMResult:\n\u001b[32m 1122\u001b[39m prompt_messages = [p.to_messages() \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m prompts]\n\u001b[32m-> \u001b[39m\u001b[32m1123\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprompt_messages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langchain_core\\language_models\\chat_models.py:933\u001b[39m, in \u001b[36mBaseChatModel.generate\u001b[39m\u001b[34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001b[39m\n\u001b[32m 930\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m i, m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(input_messages):\n\u001b[32m 931\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m 932\u001b[39m results.append(\n\u001b[32m--> \u001b[39m\u001b[32m933\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_generate_with_cache\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 934\u001b[39m \u001b[43m \u001b[49m\u001b[43mm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 935\u001b[39m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 936\u001b[39m \u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[43m=\u001b[49m\u001b[43mrun_managers\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrun_managers\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[32m 937\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 938\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 939\u001b[39m )\n\u001b[32m 940\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[32m 941\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m run_managers:\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langchain_core\\language_models\\chat_models.py:1235\u001b[39m, in \u001b[36mBaseChatModel._generate_with_cache\u001b[39m\u001b[34m(self, messages, stop, run_manager, **kwargs)\u001b[39m\n\u001b[32m 1233\u001b[39m result = generate_from_stream(\u001b[38;5;28miter\u001b[39m(chunks))\n\u001b[32m 1234\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m inspect.signature(\u001b[38;5;28mself\u001b[39m._generate).parameters.get(\u001b[33m\"\u001b[39m\u001b[33mrun_manager\u001b[39m\u001b[33m\"\u001b[39m):\n\u001b[32m-> \u001b[39m\u001b[32m1235\u001b[39m result = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_generate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1236\u001b[39m \u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[43m=\u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\n\u001b[32m 1237\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1238\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 1239\u001b[39m result = \u001b[38;5;28mself\u001b[39m._generate(messages, stop=stop, **kwargs)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\langchain_groq\\chat_models.py:593\u001b[39m, in \u001b[36mChatGroq._generate\u001b[39m\u001b[34m(self, messages, stop, run_manager, **kwargs)\u001b[39m\n\u001b[32m 588\u001b[39m message_dicts, params = \u001b[38;5;28mself\u001b[39m._create_message_dicts(messages, stop)\n\u001b[32m 589\u001b[39m params = {\n\u001b[32m 590\u001b[39m **params,\n\u001b[32m 591\u001b[39m **kwargs,\n\u001b[32m 592\u001b[39m }\n\u001b[32m--> \u001b[39m\u001b[32m593\u001b[39m response = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mclient\u001b[49m\u001b[43m.\u001b[49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmessage_dicts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 594\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._create_chat_result(response, params)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\groq\\resources\\chat\\completions.py:461\u001b[39m, in \u001b[36mCompletions.create\u001b[39m\u001b[34m(self, messages, model, citation_options, compound_custom, disable_tool_validation, documents, exclude_domains, frequency_penalty, function_call, functions, include_domains, include_reasoning, logit_bias, logprobs, max_completion_tokens, max_tokens, metadata, n, parallel_tool_calls, presence_penalty, reasoning_effort, reasoning_format, response_format, search_settings, seed, service_tier, stop, store, stream, temperature, tool_choice, tools, top_logprobs, top_p, user, extra_headers, extra_query, extra_body, timeout)\u001b[39m\n\u001b[32m 241\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mcreate\u001b[39m(\n\u001b[32m 242\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m 243\u001b[39m *,\n\u001b[32m (...)\u001b[39m\u001b[32m 300\u001b[39m timeout: \u001b[38;5;28mfloat\u001b[39m | httpx.Timeout | \u001b[38;5;28;01mNone\u001b[39;00m | NotGiven = not_given,\n\u001b[32m 301\u001b[39m ) -> ChatCompletion | Stream[ChatCompletionChunk]:\n\u001b[32m 302\u001b[39m \u001b[38;5;250m \u001b[39m\u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 303\u001b[39m \u001b[33;03m Creates a model response for the given chat conversation.\u001b[39;00m\n\u001b[32m 304\u001b[39m \n\u001b[32m (...)\u001b[39m\u001b[32m 459\u001b[39m \u001b[33;03m timeout: Override the client-level default timeout for this request, in seconds\u001b[39;00m\n\u001b[32m 460\u001b[39m \u001b[33;03m \"\"\"\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m461\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_post\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 462\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43m/openai/v1/chat/completions\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 463\u001b[39m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmaybe_transform\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 464\u001b[39m \u001b[43m \u001b[49m\u001b[43m{\u001b[49m\n\u001b[32m 465\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmessages\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 466\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmodel\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 467\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mcitation_options\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mcitation_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 468\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mcompound_custom\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mcompound_custom\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 469\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mdisable_tool_validation\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mdisable_tool_validation\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 470\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mdocuments\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mdocuments\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 471\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mexclude_domains\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mexclude_domains\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 472\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mfrequency_penalty\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrequency_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 473\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mfunction_call\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunction_call\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 474\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mfunctions\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunctions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 475\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43minclude_domains\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43minclude_domains\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 476\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43minclude_reasoning\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43minclude_reasoning\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 477\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mlogit_bias\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogit_bias\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 478\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mlogprobs\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 479\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmax_completion_tokens\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_completion_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 480\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmax_tokens\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 481\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmetadata\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 482\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mn\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 483\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mparallel_tool_calls\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mparallel_tool_calls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 484\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mpresence_penalty\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpresence_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 485\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mreasoning_effort\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mreasoning_effort\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 486\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mreasoning_format\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mreasoning_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 487\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mresponse_format\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 488\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43msearch_settings\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43msearch_settings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 489\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mseed\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 490\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mservice_tier\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mservice_tier\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 491\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstop\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 492\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstore\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 493\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstream\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 494\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtemperature\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtemperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 495\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtool_choice\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtool_choice\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 496\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtools\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtools\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 497\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtop_logprobs\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_logprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 498\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtop_p\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_p\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 499\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43muser\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43muser\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 500\u001b[39m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 501\u001b[39m \u001b[43m \u001b[49m\u001b[43mcompletion_create_params\u001b[49m\u001b[43m.\u001b[49m\u001b[43mCompletionCreateParams\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 502\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 503\u001b[39m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 504\u001b[39m \u001b[43m \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[43m=\u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[43m=\u001b[49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[43m=\u001b[49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m=\u001b[49m\u001b[43mtimeout\u001b[49m\n\u001b[32m 505\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 506\u001b[39m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m=\u001b[49m\u001b[43mChatCompletion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 507\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[32m 508\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mStream\u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatCompletionChunk\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 509\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\groq\\_base_client.py:1242\u001b[39m, in \u001b[36mSyncAPIClient.post\u001b[39m\u001b[34m(self, path, cast_to, body, options, files, stream, stream_cls)\u001b[39m\n\u001b[32m 1228\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mpost\u001b[39m(\n\u001b[32m 1229\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m 1230\u001b[39m path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 1237\u001b[39m stream_cls: \u001b[38;5;28mtype\u001b[39m[_StreamT] | \u001b[38;5;28;01mNone\u001b[39;00m = \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[32m 1238\u001b[39m ) -> ResponseT | _StreamT:\n\u001b[32m 1239\u001b[39m opts = FinalRequestOptions.construct(\n\u001b[32m 1240\u001b[39m method=\u001b[33m\"\u001b[39m\u001b[33mpost\u001b[39m\u001b[33m\"\u001b[39m, url=path, json_data=body, files=to_httpx_files(files), **options\n\u001b[32m 1241\u001b[39m )\n\u001b[32m-> \u001b[39m\u001b[32m1242\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m cast(ResponseT, \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m)\u001b[49m)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\groq\\_base_client.py:980\u001b[39m, in \u001b[36mSyncAPIClient.request\u001b[39m\u001b[34m(self, cast_to, options, stream, stream_cls)\u001b[39m\n\u001b[32m 978\u001b[39m response = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 979\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m980\u001b[39m response = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_client\u001b[49m\u001b[43m.\u001b[49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 981\u001b[39m \u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 982\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_should_stream_response_body\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m=\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 983\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 984\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 985\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m httpx.TimeoutException \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[32m 986\u001b[39m log.debug(\u001b[33m\"\u001b[39m\u001b[33mEncountered httpx.TimeoutException\u001b[39m\u001b[33m\"\u001b[39m, exc_info=\u001b[38;5;28;01mTrue\u001b[39;00m)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpx\\_client.py:914\u001b[39m, in \u001b[36mClient.send\u001b[39m\u001b[34m(self, request, stream, auth, follow_redirects)\u001b[39m\n\u001b[32m 910\u001b[39m \u001b[38;5;28mself\u001b[39m._set_timeout(request)\n\u001b[32m 912\u001b[39m auth = \u001b[38;5;28mself\u001b[39m._build_request_auth(request, auth)\n\u001b[32m--> \u001b[39m\u001b[32m914\u001b[39m response = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_send_handling_auth\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 915\u001b[39m \u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 916\u001b[39m \u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[43m=\u001b[49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 917\u001b[39m \u001b[43m \u001b[49m\u001b[43mfollow_redirects\u001b[49m\u001b[43m=\u001b[49m\u001b[43mfollow_redirects\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 918\u001b[39m \u001b[43m \u001b[49m\u001b[43mhistory\u001b[49m\u001b[43m=\u001b[49m\u001b[43m[\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 919\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 920\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m 921\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m stream:\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpx\\_client.py:942\u001b[39m, in \u001b[36mClient._send_handling_auth\u001b[39m\u001b[34m(self, request, auth, follow_redirects, history)\u001b[39m\n\u001b[32m 939\u001b[39m request = \u001b[38;5;28mnext\u001b[39m(auth_flow)\n\u001b[32m 941\u001b[39m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m942\u001b[39m response = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_send_handling_redirects\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 943\u001b[39m \u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 944\u001b[39m \u001b[43m \u001b[49m\u001b[43mfollow_redirects\u001b[49m\u001b[43m=\u001b[49m\u001b[43mfollow_redirects\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 945\u001b[39m \u001b[43m \u001b[49m\u001b[43mhistory\u001b[49m\u001b[43m=\u001b[49m\u001b[43mhistory\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 946\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 947\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m 948\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpx\\_client.py:979\u001b[39m, in \u001b[36mClient._send_handling_redirects\u001b[39m\u001b[34m(self, request, follow_redirects, history)\u001b[39m\n\u001b[32m 976\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m hook \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m._event_hooks[\u001b[33m\"\u001b[39m\u001b[33mrequest\u001b[39m\u001b[33m\"\u001b[39m]:\n\u001b[32m 977\u001b[39m hook(request)\n\u001b[32m--> \u001b[39m\u001b[32m979\u001b[39m response = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_send_single_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 980\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m 981\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m hook \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m._event_hooks[\u001b[33m\"\u001b[39m\u001b[33mresponse\u001b[39m\u001b[33m\"\u001b[39m]:\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpx\\_client.py:1014\u001b[39m, in \u001b[36mClient._send_single_request\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 1009\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[32m 1010\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mAttempted to send an async request with a sync Client instance.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 1011\u001b[39m )\n\u001b[32m 1013\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m request_context(request=request):\n\u001b[32m-> \u001b[39m\u001b[32m1014\u001b[39m response = \u001b[43mtransport\u001b[49m\u001b[43m.\u001b[49m\u001b[43mhandle_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1016\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(response.stream, SyncByteStream)\n\u001b[32m 1018\u001b[39m response.request = request\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpx\\_transports\\default.py:250\u001b[39m, in \u001b[36mHTTPTransport.handle_request\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 237\u001b[39m req = httpcore.Request(\n\u001b[32m 238\u001b[39m method=request.method,\n\u001b[32m 239\u001b[39m url=httpcore.URL(\n\u001b[32m (...)\u001b[39m\u001b[32m 247\u001b[39m extensions=request.extensions,\n\u001b[32m 248\u001b[39m )\n\u001b[32m 249\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m map_httpcore_exceptions():\n\u001b[32m--> \u001b[39m\u001b[32m250\u001b[39m resp = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_pool\u001b[49m\u001b[43m.\u001b[49m\u001b[43mhandle_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 252\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(resp.stream, typing.Iterable)\n\u001b[32m 254\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m Response(\n\u001b[32m 255\u001b[39m status_code=resp.status,\n\u001b[32m 256\u001b[39m headers=resp.headers,\n\u001b[32m 257\u001b[39m stream=ResponseStream(resp.stream),\n\u001b[32m 258\u001b[39m extensions=resp.extensions,\n\u001b[32m 259\u001b[39m )\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_sync\\connection_pool.py:256\u001b[39m, in \u001b[36mConnectionPool.handle_request\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 253\u001b[39m closing = \u001b[38;5;28mself\u001b[39m._assign_requests_to_connections()\n\u001b[32m 255\u001b[39m \u001b[38;5;28mself\u001b[39m._close_connections(closing)\n\u001b[32m--> \u001b[39m\u001b[32m256\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m exc \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 258\u001b[39m \u001b[38;5;66;03m# Return the response. Note that in this case we still have to manage\u001b[39;00m\n\u001b[32m 259\u001b[39m \u001b[38;5;66;03m# the point at which the response is closed.\u001b[39;00m\n\u001b[32m 260\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(response.stream, typing.Iterable)\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_sync\\connection_pool.py:236\u001b[39m, in \u001b[36mConnectionPool.handle_request\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 232\u001b[39m connection = pool_request.wait_for_connection(timeout=timeout)\n\u001b[32m 234\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m 235\u001b[39m \u001b[38;5;66;03m# Send the request on the assigned connection.\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m236\u001b[39m response = \u001b[43mconnection\u001b[49m\u001b[43m.\u001b[49m\u001b[43mhandle_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 237\u001b[39m \u001b[43m \u001b[49m\u001b[43mpool_request\u001b[49m\u001b[43m.\u001b[49m\u001b[43mrequest\u001b[49m\n\u001b[32m 238\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 239\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m ConnectionNotAvailable:\n\u001b[32m 240\u001b[39m \u001b[38;5;66;03m# In some cases a connection may initially be available to\u001b[39;00m\n\u001b[32m 241\u001b[39m \u001b[38;5;66;03m# handle a request, but then become unavailable.\u001b[39;00m\n\u001b[32m 242\u001b[39m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[32m 243\u001b[39m \u001b[38;5;66;03m# In this case we clear the connection and try again.\u001b[39;00m\n\u001b[32m 244\u001b[39m pool_request.clear_connection()\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_sync\\connection.py:103\u001b[39m, in \u001b[36mHTTPConnection.handle_request\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 100\u001b[39m \u001b[38;5;28mself\u001b[39m._connect_failed = \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[32m 101\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m exc\n\u001b[32m--> \u001b[39m\u001b[32m103\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_connection\u001b[49m\u001b[43m.\u001b[49m\u001b[43mhandle_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_sync\\http11.py:136\u001b[39m, in \u001b[36mHTTP11Connection.handle_request\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 134\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m Trace(\u001b[33m\"\u001b[39m\u001b[33mresponse_closed\u001b[39m\u001b[33m\"\u001b[39m, logger, request) \u001b[38;5;28;01mas\u001b[39;00m trace:\n\u001b[32m 135\u001b[39m \u001b[38;5;28mself\u001b[39m._response_closed()\n\u001b[32m--> \u001b[39m\u001b[32m136\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m exc\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_sync\\http11.py:106\u001b[39m, in \u001b[36mHTTP11Connection.handle_request\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 95\u001b[39m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[32m 97\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m Trace(\n\u001b[32m 98\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mreceive_response_headers\u001b[39m\u001b[33m\"\u001b[39m, logger, request, kwargs\n\u001b[32m 99\u001b[39m ) \u001b[38;5;28;01mas\u001b[39;00m trace:\n\u001b[32m 100\u001b[39m (\n\u001b[32m 101\u001b[39m http_version,\n\u001b[32m 102\u001b[39m status,\n\u001b[32m 103\u001b[39m reason_phrase,\n\u001b[32m 104\u001b[39m headers,\n\u001b[32m 105\u001b[39m trailing_data,\n\u001b[32m--> \u001b[39m\u001b[32m106\u001b[39m ) = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_receive_response_headers\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 107\u001b[39m trace.return_value = (\n\u001b[32m 108\u001b[39m http_version,\n\u001b[32m 109\u001b[39m status,\n\u001b[32m 110\u001b[39m reason_phrase,\n\u001b[32m 111\u001b[39m headers,\n\u001b[32m 112\u001b[39m )\n\u001b[32m 114\u001b[39m network_stream = \u001b[38;5;28mself\u001b[39m._network_stream\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_sync\\http11.py:177\u001b[39m, in \u001b[36mHTTP11Connection._receive_response_headers\u001b[39m\u001b[34m(self, request)\u001b[39m\n\u001b[32m 174\u001b[39m timeout = timeouts.get(\u001b[33m\"\u001b[39m\u001b[33mread\u001b[39m\u001b[33m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[32m 176\u001b[39m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[32m--> \u001b[39m\u001b[32m177\u001b[39m event = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_receive_event\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m=\u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 178\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(event, h11.Response):\n\u001b[32m 179\u001b[39m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_sync\\http11.py:217\u001b[39m, in \u001b[36mHTTP11Connection._receive_event\u001b[39m\u001b[34m(self, timeout)\u001b[39m\n\u001b[32m 214\u001b[39m event = \u001b[38;5;28mself\u001b[39m._h11_state.next_event()\n\u001b[32m 216\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m event \u001b[38;5;129;01mis\u001b[39;00m h11.NEED_DATA:\n\u001b[32m--> \u001b[39m\u001b[32m217\u001b[39m data = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_network_stream\u001b[49m\u001b[43m.\u001b[49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 218\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mREAD_NUM_BYTES\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m=\u001b[49m\u001b[43mtimeout\u001b[49m\n\u001b[32m 219\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 221\u001b[39m \u001b[38;5;66;03m# If we feed this case through h11 we'll raise an exception like:\u001b[39;00m\n\u001b[32m 222\u001b[39m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[32m 223\u001b[39m \u001b[38;5;66;03m# httpcore.RemoteProtocolError: can't handle event type\u001b[39;00m\n\u001b[32m (...)\u001b[39m\u001b[32m 227\u001b[39m \u001b[38;5;66;03m# perspective. Instead we handle this case distinctly and treat\u001b[39;00m\n\u001b[32m 228\u001b[39m \u001b[38;5;66;03m# it as a ConnectError.\u001b[39;00m\n\u001b[32m 229\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m data == \u001b[33mb\u001b[39m\u001b[33m\"\u001b[39m\u001b[33m\"\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m._h11_state.their_state == h11.SEND_RESPONSE:\n", + "\u001b[36mFile \u001b[39m\u001b[32mc:\\Users\\ATHARVA\\Downloads\\my codes\\python\\machine_learning\\project_web\\pro_env\\Lib\\site-packages\\httpcore\\_backends\\sync.py:128\u001b[39m, in \u001b[36mSyncStream.read\u001b[39m\u001b[34m(self, max_bytes, timeout)\u001b[39m\n\u001b[32m 126\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m map_exceptions(exc_map):\n\u001b[32m 127\u001b[39m \u001b[38;5;28mself\u001b[39m._sock.settimeout(timeout)\n\u001b[32m--> \u001b[39m\u001b[32m128\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_sock\u001b[49m\u001b[43m.\u001b[49m\u001b[43mrecv\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmax_bytes\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ssl.py:1232\u001b[39m, in \u001b[36mSSLSocket.recv\u001b[39m\u001b[34m(self, buflen, flags)\u001b[39m\n\u001b[32m 1228\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m flags != \u001b[32m0\u001b[39m:\n\u001b[32m 1229\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[32m 1230\u001b[39m \u001b[33m\"\u001b[39m\u001b[33mnon-zero flags not allowed in calls to recv() on \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[33m\"\u001b[39m %\n\u001b[32m 1231\u001b[39m \u001b[38;5;28mself\u001b[39m.\u001b[34m__class__\u001b[39m)\n\u001b[32m-> \u001b[39m\u001b[32m1232\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbuflen\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1233\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 1234\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28msuper\u001b[39m().recv(buflen, flags)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\ssl.py:1105\u001b[39m, in \u001b[36mSSLSocket.read\u001b[39m\u001b[34m(self, len, buffer)\u001b[39m\n\u001b[32m 1103\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._sslobj.read(\u001b[38;5;28mlen\u001b[39m, buffer)\n\u001b[32m 1104\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1105\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_sslobj\u001b[49m\u001b[43m.\u001b[49m\u001b[43mread\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 1106\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m SSLError \u001b[38;5;28;01mas\u001b[39;00m x:\n\u001b[32m 1107\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m x.args[\u001b[32m0\u001b[39m] == SSL_ERROR_EOF \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m.suppress_ragged_eofs:\n", + "\u001b[31mKeyboardInterrupt\u001b[39m: " + ] } ], "source": [ @@ -1503,87 +1540,10 @@ }, { "cell_type": "code", - "execution_count": 204, + "execution_count": null, "id": "5afbce5b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'candidate_name': 'Chirayu Jain',\n", - " 'resume_text': 'Chirayu Jain\\nSOFTWARE DEVELOPER\\n+91-9462128878 | chirayujain93@gmail.com | LinkedIn | GitHub | CodeChef | Leetcode\\nEDUCATION\\nIndian Institute of Information Technology, Kota (CGPA-8.1)\\nKota, Rajasthan\\nB.Tech in Electronics and Communication Engineering\\n2022 - Present\\nWORK EXPERIENCE\\nNAV India\\nJan 2026 - Present\\nTechnology Intern\\nOnsite – Jaipur, Rajasthan\\n• As part of the AI/ML team, built Flask API for the RTA investor verification team, implementing 2\\nconfidence-scoring pipelines using OCR extraction (PyMuPDF, Docling) to parse PDF/forms and\\nextract 3 key KYC investor attributes, reducing verification time from 20–30 minutes to 2–3 minutes.\\n• Developed a scalable document intelligence pipeline with parallel CPU processing using Docling OCR,\\nsemantic chunking, and LLM-based extraction to process 60+ page financial documents and identify\\ninvestor/investee details, reducing extraction time by 35%.\\n• Implementing Cron-based background workers to generate automated weekly email analytics reports\\ntracking API accuracy and confidence match-mismatch scores, improving scoring precision and reducing\\noverall document processing latency by 40%.\\nVestbox\\nApril 2025 - May 2025\\nSoftware Development intern\\nRemote\\n• Developed Groceazy app in Flutter (MVVM), integrating 10+ modules for grocery service , order management\\nand Applied clean code practices (SOLID, modular design) for scalability.\\n• Implemented secure user authentication and role-based access, ensuring smooth login and data protection.\\n• Built image-to-item price matcher using APIs across 5+ platforms, enabling best-price suggestions.\\nPROJECTS\\nHostel Bites – IIITK Canteen App | Flutter, Dart, Firebase, Cloud Firestore, Mapbox API\\n• Developed a Flutter app for hostel residents to order food, increasing canteen efficiency by 35%.\\n• Implemented role-based access for students, staff, and admin, increasing operational efficiency by 40%.\\n• Integrated Firebase Auth, Firestore, Storage, and Mapbox API for secure logins, and live order tracking.\\n• GitHub: Live link\\nJobShield - Fake Job Detector | Flutter, Dart, Python, Flask, SQLite\\n• Developed a Flask+Python fake job detection API with a custom NLP model, with 95% classification accuracy.\\n• Built a responsive web interface using Flutter (Web), integrated with the backend, enabling seamless real-time\\ndetection for 500+ job postings.\\n• Github: Live Link\\nTECHNICAL SKILLS\\nLanguages: C/C++ , Java , Python , JavaScript, Dart\\nFrontend: Flutter, HTML/CSS, ReactJS\\nBackend: Firebase, REST APIs, Flask, Django, NodeJS, ExpressJS\\nDatabase Management: MySQL, MongoDB, SQLite\\nTools and Frameworks: GitHub, Android Studio, Visual Studio Code, MATLAB, Cursor, Github Copilot\\nLibraries: Provider, Bloc, Scikit-learn, tensorflow\\nACHIEVEMENTS & CERTIFICATIONS\\n• Ranked 81 in Inter IIIT Coding Contest Optigo, competing against top-tier programmers - View credential.\\n• Obtained Certification in Graph Algorithms from AlgoUniversity - View credential.\\n• Achieved a 4-star CodeChef rating and earned the Knight(Max. 1888) badge on LeetCode.\\n• Developed an e-waste facility locator application for SIH’23, successfully advancing to the regionals.',\n", - " 'file_path': 'c:\\\\Users\\\\ATHARVA\\\\Downloads\\\\my codes\\\\python\\\\machine_learning\\\\Learning_Files\\\\ChirayuResume.pdf',\n", - " 'job_description': 'Job Title: Backend Developer\\n\\nCompany name: CodeForge\\nWe are hiring a Backend Developer to build scalable APIs and backend systems.\\n\\nResponsibilities:\\n- Develop REST APIs using FastAPI\\n- Design and manage PostgreSQL databases\\n- Implement authentication and authorization systems\\n- Optimize performance and scalability\\n\\nRequirements:\\n- Strong knowledge of Python\\n- Experience with FastAPI or Django\\n- Good understanding of SQL and database design\\n- Familiarity with Docker\\n\\nConstraints:\\n- Location: Pune only\\n- Full-time role ',\n", - " 'messages': [AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:0', 'function': {'arguments': '{\"category\":\"Backend\",\"level\":\"beginner\",\"query\":\"FastAPI\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 1669, 'total_tokens': 1701, 'completion_time': 0.081090275, 'completion_tokens_details': None, 'prompt_time': 0.054224996, 'prompt_tokens_details': {'cached_tokens': 1280}, 'queue_time': 0.278005602, 'total_time': 0.135315271}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_241bc7119c', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-42ae-7050-b05b-ef26234889c6-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'Backend', 'level': 'beginner', 'query': 'FastAPI'}, 'id': 'functions.search_courses:0', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 1669, 'output_tokens': 32, 'total_tokens': 1701, 'input_token_details': {'cache_read': 1280}}),\n", - " ToolMessage(content=\"ID: CS-FAST-101\\nTitle: None\\nDescription: Title: REST API Development with FastAPI. Description: Build production-ready REST APIs using FastAPI, covering routing, request validation with Pydantic, and basic authentication.. Outcomes: Create REST endpoints with path and query params, Validate request/response with Pydantic models, Implement JWT-based authentication\\nPrerequisites: ['CS-PY-101']\\nDuration: 6 hours\\n---\", name='search_courses', id='a4c82290-1241-4d9f-b746-95edbed569d7', tool_call_id='functions.search_courses:0'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:1', 'function': {'arguments': '{\"category\":\"Database\",\"level\":\"beginner\",\"query\":\"PostgreSQL\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 1810, 'total_tokens': 1842, 'completion_time': 0.078748872, 'completion_tokens_details': None, 'prompt_time': 0.238576633, 'prompt_tokens_details': None, 'queue_time': 0.283975812, 'total_time': 0.317325505}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_00c37775b7', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-4a27-70c1-bae4-9f895628b422-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'Database', 'level': 'beginner', 'query': 'PostgreSQL'}, 'id': 'functions.search_courses:1', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 1810, 'output_tokens': 32, 'total_tokens': 1842}),\n", - " ToolMessage(content='ID: CS-DB-101\\nTitle: None\\nDescription: Title: SQL Fundamentals for Backend Developers. Description: Foundational course covering relational database concepts, CRUD operations, and basic JOINs using SQLite and PostgreSQL.. Outcomes: Write basic SELECT queries with filters, Understand Primary and Foreign Keys, Perform data insertion, updates, and deletions\\nPrerequisites: []\\nDuration: 4 hours\\n---', name='search_courses', id='21676f09-7c22-4f04-8de5-4393254e9bc7', tool_call_id='functions.search_courses:1'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:2', 'function': {'arguments': '{\"category\":\"DevOps\",\"level\":\"beginner\",\"query\":\"Docker\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 1943, 'total_tokens': 1975, 'completion_time': 0.078745613, 'completion_tokens_details': None, 'prompt_time': 0.151167189, 'prompt_tokens_details': {'cached_tokens': 1280}, 'queue_time': 0.289579237, 'total_time': 0.229912802}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_05df423bab', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-4e10-7312-a16a-8ef5f399c11c-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'DevOps', 'level': 'beginner', 'query': 'Docker'}, 'id': 'functions.search_courses:2', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 1943, 'output_tokens': 32, 'total_tokens': 1975, 'input_token_details': {'cache_read': 1280}}),\n", - " ToolMessage(content='ID: CS-DOCKER-101\\nTitle: None\\nDescription: Title: Docker & Containerization Fundamentals. Description: Learn containerization fundamentals — writing Dockerfiles, managing images, volumes, and running multi-container apps with Docker Compose.. Outcomes: Write efficient multi-stage Dockerfiles, Manage container lifecycle and networking, Orchestrate multi-service apps with Docker Compose\\nPrerequisites: []\\nDuration: 5 hours\\n---\\nID: CS-LINUX-101\\nTitle: None\\nDescription: Title: Linux & Shell Scripting for Developers. Description: Practical Linux skills for developers covering file system navigation, permissions, process management, and bash scripting.. Outcomes: Navigate and manage the Linux file system, Write bash scripts for automation, Manage processes, cron jobs, and system services\\nPrerequisites: []\\nDuration: 5 hours\\n---', name='search_courses', id='24c06dac-8359-4b62-9009-0143205216b9', tool_call_id='functions.search_courses:2'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.get_course_by_id:3', 'function': {'arguments': '{\"course_id\":\"CS-PY-101\"}', 'name': 'get_course_by_id'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 24, 'prompt_tokens': 2162, 'total_tokens': 2186, 'completion_time': 0.066258418, 'completion_tokens_details': None, 'prompt_time': 0.06777634, 'prompt_tokens_details': {'cached_tokens': 1792}, 'queue_time': 0.292961317, 'total_time': 0.134034758}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_00c37775b7', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-5182-72f2-a111-97966407f56f-0', tool_calls=[{'name': 'get_course_by_id', 'args': {'course_id': 'CS-PY-101'}, 'id': 'functions.get_course_by_id:3', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 2162, 'output_tokens': 24, 'total_tokens': 2186, 'input_token_details': {'cache_read': 1792}}),\n", - " ToolMessage(content='{\\n \"course_id\": \"CS-PY-101\",\\n \"title\": \"Python Programming Fundamentals\",\\n \"level\": \"beginner\",\\n \"category\": \"Programming\",\\n \"description\": \"A comprehensive introduction to Python covering primitive and complex data types, control flow structures, function design, object-oriented programming principles, exception handling, and file I/O. Students build a strong syntactic and conceptual foundation before moving to applied domains.\",\\n \"learning_outcomes\": [\\n \"Write clean Python functions and classes\",\\n \"Understand list, dict, and set operations\",\\n \"Handle exceptions and file I/O\"\\n ],\\n \"prerequisites\": [],\\n \"estimated_duration_hours\": 6,\\n \"tags\": [\\n \"Python\",\\n \"Programming\",\\n \"OOP\"\\n ]\\n}', name='get_course_by_id', id='433e36da-b9d8-4ff7-a747-91231f523767', tool_call_id='functions.get_course_by_id:3'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:4', 'function': {'arguments': '{\"category\":\"Backend\",\"level\":\"intermediate\",\"query\":\"FastAPI\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 2368, 'total_tokens': 2400, 'completion_time': 0.091942552, 'completion_tokens_details': None, 'prompt_time': 0.063767504, 'prompt_tokens_details': {'cached_tokens': 2048}, 'queue_time': 0.281042933, 'total_time': 0.155710056}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_00c37775b7', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-535a-7e82-8e04-294c8397192c-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'Backend', 'level': 'intermediate', 'query': 'FastAPI'}, 'id': 'functions.search_courses:4', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 2368, 'output_tokens': 32, 'total_tokens': 2400, 'input_token_details': {'cache_read': 2048}}),\n", - " ToolMessage(content=\"ID: CS-FAST-201\\nTitle: None\\nDescription: Title: Advanced API Design with FastAPI. Description: Deep dive into asynchronous programming, dependency injection, background tasks, and building secure RESTful services.. Outcomes: Implement OAuth2 authentication flows, Build async database endpoints with SQLAlchemy, Use dependency injection and middleware patterns\\nPrerequisites: ['CS-PY-101', 'CS-DB-101', 'CS-FAST-101']\\nDuration: 8 hours\\n---\", name='search_courses', id='002e76e3-19e3-43f8-84dd-b1de4773cc4c', tool_call_id='functions.search_courses:4'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:5', 'function': {'arguments': '{\"category\":\"Database\",\"level\":\"intermediate\",\"query\":\"PostgreSQL\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 2517, 'total_tokens': 2549, 'completion_time': 0.087624525, 'completion_tokens_details': None, 'prompt_time': 0.129532407, 'prompt_tokens_details': {'cached_tokens': 1536}, 'queue_time': 0.2779709, 'total_time': 0.217156932}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_241bc7119c', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-5698-7983-b335-4301bd967286-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'Database', 'level': 'intermediate', 'query': 'PostgreSQL'}, 'id': 'functions.search_courses:5', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 2517, 'output_tokens': 32, 'total_tokens': 2549, 'input_token_details': {'cache_read': 1536}}),\n", - " ToolMessage(content=\"ID: CS-DB-301\\nTitle: None\\nDescription: Title: NoSQL Databases — MongoDB & Redis. Description: Introduction to document and key-value stores, covering MongoDB aggregation pipelines and Redis caching strategies.. Outcomes: Design document schemas in MongoDB, Build aggregation pipelines, Implement caching with Redis TTL strategies\\nPrerequisites: ['CS-DB-101']\\nDuration: 6 hours\\n---\\nID: CS-DB-201\\nTitle: None\\nDescription: Title: Advanced SQL — Indexing, Transactions & Query Optimization. Description: Covers advanced SQL techniques including window functions, CTEs, query execution plans, and transaction management.. Outcomes: Use window functions and CTEs, Analyze and optimize slow queries with EXPLAIN, Manage ACID transactions and deadlock prevention\\nPrerequisites: ['CS-DB-101']\\nDuration: 7 hours\\n---\", name='search_courses', id='961ae55c-605a-4795-97fe-7e0e637e84bb', tool_call_id='functions.search_courses:5'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:6', 'function': {'arguments': '{\"category\":\"DevOps\",\"level\":\"intermediate\",\"query\":\"Docker\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 2748, 'total_tokens': 2780, 'completion_time': 0.091283136, 'completion_tokens_details': None, 'prompt_time': 0.120342589, 'prompt_tokens_details': {'cached_tokens': 2304}, 'queue_time': 0.276559238, 'total_time': 0.211625725}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_241bc7119c', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-59f8-7601-8215-7119a65a58bf-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'DevOps', 'level': 'intermediate', 'query': 'Docker'}, 'id': 'functions.search_courses:6', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 2748, 'output_tokens': 32, 'total_tokens': 2780, 'input_token_details': {'cache_read': 2304}}),\n", - " ToolMessage(content=\"ID: CS-CICD-201\\nTitle: None\\nDescription: Title: CI/CD Pipelines with GitHub Actions. Description: Build automated build, test, and deployment pipelines using GitHub Actions, with Docker integration and environment secrets management.. Outcomes: Create GitHub Actions workflows for CI/CD, Automate Docker image builds and pushes, Manage secrets and environment variables securely\\nPrerequisites: ['CS-DOCKER-101']\\nDuration: 6 hours\\n---\", name='search_courses', id='a45bf4ed-fc16-49b4-a2c8-6fcdcaa5d178', tool_call_id='functions.search_courses:6'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:7', 'function': {'arguments': '{\"category\":\"Backend\",\"level\":\"beginner\",\"query\":\"SOFT-AGILE\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 35, 'prompt_tokens': 2892, 'total_tokens': 2927, 'completion_time': 0.100814652, 'completion_tokens_details': None, 'prompt_time': 0.03574403, 'prompt_tokens_details': {'cached_tokens': 2560}, 'queue_time': 0.278250856, 'total_time': 0.136558682}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_241bc7119c', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-5d30-75a2-aadd-ca9c136b1561-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'Backend', 'level': 'beginner', 'query': 'SOFT-AGILE'}, 'id': 'functions.search_courses:7', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 2892, 'output_tokens': 35, 'total_tokens': 2927, 'input_token_details': {'cache_read': 2560}}),\n", - " ToolMessage(content=\"ID: CS-FAST-101\\nTitle: None\\nDescription: Title: REST API Development with FastAPI. Description: Build production-ready REST APIs using FastAPI, covering routing, request validation with Pydantic, and basic authentication.. Outcomes: Create REST endpoints with path and query params, Validate request/response with Pydantic models, Implement JWT-based authentication\\nPrerequisites: ['CS-PY-101']\\nDuration: 6 hours\\n---\", name='search_courses', id='c8ef5e39-a5ca-4ddf-ae0c-3598cd729a3e', tool_call_id='functions.search_courses:7'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:8', 'function': {'arguments': '{\"category\":\"Backend\",\"level\":\"beginner\",\"query\":\"professional skills\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 3036, 'total_tokens': 3068, 'completion_time': 0.095156634, 'completion_tokens_details': None, 'prompt_time': 0.164064894, 'prompt_tokens_details': {'cached_tokens': 1792}, 'queue_time': 0.286151251, 'total_time': 0.259221528}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_05df423bab', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-6023-7b50-8bc0-b339c5e8255d-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'Backend', 'level': 'beginner', 'query': 'professional skills'}, 'id': 'functions.search_courses:8', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 3036, 'output_tokens': 32, 'total_tokens': 3068, 'input_token_details': {'cache_read': 1792}}),\n", - " ToolMessage(content=\"ID: CS-FAST-101\\nTitle: None\\nDescription: Title: REST API Development with FastAPI. Description: Build production-ready REST APIs using FastAPI, covering routing, request validation with Pydantic, and basic authentication.. Outcomes: Create REST endpoints with path and query params, Validate request/response with Pydantic models, Implement JWT-based authentication\\nPrerequisites: ['CS-PY-101']\\nDuration: 6 hours\\n---\", name='search_courses', id='408decc6-ae0e-4135-bbbf-faf8fcea465a', tool_call_id='functions.search_courses:8'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.search_courses:9', 'function': {'arguments': '{\"category\":\"Backend\",\"level\":\"beginner\",\"query\":\"agile\"}', 'name': 'search_courses'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 32, 'prompt_tokens': 3177, 'total_tokens': 3209, 'completion_time': 0.084078365, 'completion_tokens_details': None, 'prompt_time': 0.042401339, 'prompt_tokens_details': {'cached_tokens': 2816}, 'queue_time': 0.286148566, 'total_time': 0.126479704}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_05df423bab', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-63c2-7273-9284-2681a833e38e-0', tool_calls=[{'name': 'search_courses', 'args': {'category': 'Backend', 'level': 'beginner', 'query': 'agile'}, 'id': 'functions.search_courses:9', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 3177, 'output_tokens': 32, 'total_tokens': 3209, 'input_token_details': {'cache_read': 2816}}),\n", - " ToolMessage(content=\"ID: CS-FAST-101\\nTitle: None\\nDescription: Title: REST API Development with FastAPI. Description: Build production-ready REST APIs using FastAPI, covering routing, request validation with Pydantic, and basic authentication.. Outcomes: Create REST endpoints with path and query params, Validate request/response with Pydantic models, Implement JWT-based authentication\\nPrerequisites: ['CS-PY-101']\\nDuration: 6 hours\\n---\", name='search_courses', id='c3d56212-f645-4bc8-8d1a-ac0078b5c524', tool_call_id='functions.search_courses:9'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.submit_final_roadmap:10', 'function': {'arguments': '{\"candidate_name\":\"Candidate\",\"onboarding_summary\":\"7-month intern with solid Python/Django experience; lacks production-grade FastAPI, PostgreSQL, and containerization skills. Fresher adaptation needed.\",\"roadmap\":[{\"course_id\":\"CS-PY-101\",\"is_foundation\":true,\"reasoning\":\"Fresher adaptation: ensure rock-solid Python base before specialized frameworks.\",\"sequence_order\":1,\"title\":\"Python Programming Fundamentals\"},{\"course_id\":\"CS-DB-101\",\"is_foundation\":true,\"reasoning\":\"Mandatory foundation for PostgreSQL mastery; candidate only knows MySQL/SQLite.\",\"sequence_order\":2,\"title\":\"SQL Fundamentals for Backend Developers\"},{\"course_id\":\"CS-FAST-101\",\"is_foundation\":false,\"reasoning\":\"Closes the high-priority FastAPI gap; introduces Pydantic and async endpoints.\",\"sequence_order\":3,\"title\":\"REST API Development with FastAPI\"},{\"course_id\":\"CS-DB-201\",\"is_foundation\":false,\"reasoning\":\"Elevates PostgreSQL skills to production level: CTEs, indexes, query plans.\",\"sequence_order\":4,\"title\":\"Advanced SQL — Indexing, Transactions \\\\u0026 Query Optimization\"},{\"course_id\":\"CS-DOCKER-101\",\"is_foundation\":false,\"reasoning\":\"Adds required containerization skills; no prior Docker experience.\",\"sequence_order\":5,\"title\":\"Docker \\\\u0026 Containerization Fundamentals\"},{\"course_id\":\"CS-FAST-201\",\"is_foundation\":false,\"reasoning\":\"Consolidates expertise: async DB integration, OAuth2, dependency injection.\",\"sequence_order\":6,\"title\":\"Advanced API Design with FastAPI\"}],\"target_role\":\"Backend Developer\"}', 'name': 'submit_final_roadmap'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 409, 'prompt_tokens': 3318, 'total_tokens': 3727, 'completion_time': 1.154857715, 'completion_tokens_details': None, 'prompt_time': 0.03128425, 'prompt_tokens_details': {'cached_tokens': 3072}, 'queue_time': 0.286355948, 'total_time': 1.186141965}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_05df423bab', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-76a8-78d0-ab6d-6b29b90f5cc4-0', tool_calls=[{'name': 'submit_final_roadmap', 'args': {'candidate_name': 'Candidate', 'onboarding_summary': '7-month intern with solid Python/Django experience; lacks production-grade FastAPI, PostgreSQL, and containerization skills. Fresher adaptation needed.', 'roadmap': [{'course_id': 'CS-PY-101', 'is_foundation': True, 'reasoning': 'Fresher adaptation: ensure rock-solid Python base before specialized frameworks.', 'sequence_order': 1, 'title': 'Python Programming Fundamentals'}, {'course_id': 'CS-DB-101', 'is_foundation': True, 'reasoning': 'Mandatory foundation for PostgreSQL mastery; candidate only knows MySQL/SQLite.', 'sequence_order': 2, 'title': 'SQL Fundamentals for Backend Developers'}, {'course_id': 'CS-FAST-101', 'is_foundation': False, 'reasoning': 'Closes the high-priority FastAPI gap; introduces Pydantic and async endpoints.', 'sequence_order': 3, 'title': 'REST API Development with FastAPI'}, {'course_id': 'CS-DB-201', 'is_foundation': False, 'reasoning': 'Elevates PostgreSQL skills to production level: CTEs, indexes, query plans.', 'sequence_order': 4, 'title': 'Advanced SQL — Indexing, Transactions & Query Optimization'}, {'course_id': 'CS-DOCKER-101', 'is_foundation': False, 'reasoning': 'Adds required containerization skills; no prior Docker experience.', 'sequence_order': 5, 'title': 'Docker & Containerization Fundamentals'}, {'course_id': 'CS-FAST-201', 'is_foundation': False, 'reasoning': 'Consolidates expertise: async DB integration, OAuth2, dependency injection.', 'sequence_order': 6, 'title': 'Advanced API Design with FastAPI'}], 'target_role': 'Backend Developer'}, 'id': 'functions.submit_final_roadmap:10', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 3318, 'output_tokens': 409, 'total_tokens': 3727, 'input_token_details': {'cache_read': 3072}}),\n", - " ToolMessage(content='{\"candidate_name\": \"Candidate\", \"target_role\": \"Backend Developer\", \"onboarding_summary\": \"7-month intern with solid Python/Django experience; lacks production-grade FastAPI, PostgreSQL, and containerization skills. Fresher adaptation needed.\", \"roadmap\": [{\"course_id\": \"CS-PY-101\", \"title\": \"Python Programming Fundamentals\", \"reasoning\": \"Fresher adaptation: ensure rock-solid Python base before specialized frameworks.\", \"is_foundation\": true, \"sequence_order\": 1}, {\"course_id\": \"CS-DB-101\", \"title\": \"SQL Fundamentals for Backend Developers\", \"reasoning\": \"Mandatory foundation for PostgreSQL mastery; candidate only knows MySQL/SQLite.\", \"is_foundation\": true, \"sequence_order\": 2}, {\"course_id\": \"CS-FAST-101\", \"title\": \"REST API Development with FastAPI\", \"reasoning\": \"Closes the high-priority FastAPI gap; introduces Pydantic and async endpoints.\", \"is_foundation\": false, \"sequence_order\": 3}, {\"course_id\": \"CS-DB-201\", \"title\": \"Advanced SQL — Indexing, Transactions & Query Optimization\", \"reasoning\": \"Elevates PostgreSQL skills to production level: CTEs, indexes, query plans.\", \"is_foundation\": false, \"sequence_order\": 4}, {\"course_id\": \"CS-DOCKER-101\", \"title\": \"Docker & Containerization Fundamentals\", \"reasoning\": \"Adds required containerization skills; no prior Docker experience.\", \"is_foundation\": false, \"sequence_order\": 5}, {\"course_id\": \"CS-FAST-201\", \"title\": \"Advanced API Design with FastAPI\", \"reasoning\": \"Consolidates expertise: async DB integration, OAuth2, dependency injection.\", \"is_foundation\": false, \"sequence_order\": 6}]}', name='submit_final_roadmap', id='d6485be4-0b1e-4ee8-8c4f-ed5d2caa7380', tool_call_id='functions.submit_final_roadmap:10'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'functions.submit_mermaid_visualization:11', 'function': {'arguments': '{\"mermaid_code\":\"flowchart TD\\\\n A([Start — Current skills: Python/Django]):::start\\\\n subgraph W1[\\\\\"Week 1 — Foundations\\\\\"]\\\\n B[CS-PY-101\\\\nPython Programming Fundamentals]:::foundation\\\\n end\\\\n subgraph W2[\\\\\"Week 2 — Database base\\\\\"]\\\\n C[CS-DB-101\\\\nSQL Fundamentals]:::foundation\\\\n end\\\\n subgraph W3[\\\\\"Week 3 — FastAPI core\\\\\"]\\\\n D[CS-FAST-101\\\\nREST API Development with FastAPI]:::gap\\\\n end\\\\n subgraph W4[\\\\\"Week 4 — PostgreSQL deep dive\\\\\"]\\\\n E[CS-DB-201\\\\nAdvanced SQL — Indexing \\\\u0026 Optimization]:::gap\\\\n end\\\\n subgraph W5[\\\\\"Week 5 — Containerization\\\\\"]\\\\n F[CS-DOCKER-101\\\\nDocker \\\\u0026 Containerization Fundamentals]:::gap\\\\n end\\\\n subgraph W6[\\\\\"Week 6 — Mastery\\\\\"]\\\\n G[CS-FAST-201\\\\nAdvanced API Design with FastAPI]:::gap\\\\n end\\\\n Z([Role-ready — Backend Developer]):::done\\\\n A --\\\\u003e B\\\\n B --\\\\u003e C\\\\n C --\\\\u003e D\\\\n D --\\\\u003e E\\\\n E --\\\\u003e F\\\\n F --\\\\u003e G\\\\n G --\\\\u003e Z\\\\n classDef foundation fill:#E1F5EE,stroke:#0F6E56,color:#085041\\\\n classDef gap fill:#EEEDFE,stroke:#534AB7,color:#26215C\\\\n classDef start fill:#1D9E75,stroke:#0F6E56,color:#E1F5EE\\\\n classDef done fill:#534AB7,stroke:#3C3489,color:#EEEDFE\"}', 'name': 'submit_mermaid_visualization'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 398, 'prompt_tokens': 4153, 'total_tokens': 4551, 'completion_time': 0.965973514, 'completion_tokens_details': None, 'prompt_time': 0.211512326, 'prompt_tokens_details': {'cached_tokens': 2816}, 'queue_time': 0.274676649, 'total_time': 1.1774858400000001}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_241bc7119c', 'service_tier': 'on_demand', 'finish_reason': 'tool_calls', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-8491-7d20-9131-a43cdf0b8dd2-0', tool_calls=[{'name': 'submit_mermaid_visualization', 'args': {'mermaid_code': 'flowchart TD\\n A([Start — Current skills: Python/Django]):::start\\n subgraph W1[\"Week 1 — Foundations\"]\\n B[CS-PY-101\\nPython Programming Fundamentals]:::foundation\\n end\\n subgraph W2[\"Week 2 — Database base\"]\\n C[CS-DB-101\\nSQL Fundamentals]:::foundation\\n end\\n subgraph W3[\"Week 3 — FastAPI core\"]\\n D[CS-FAST-101\\nREST API Development with FastAPI]:::gap\\n end\\n subgraph W4[\"Week 4 — PostgreSQL deep dive\"]\\n E[CS-DB-201\\nAdvanced SQL — Indexing & Optimization]:::gap\\n end\\n subgraph W5[\"Week 5 — Containerization\"]\\n F[CS-DOCKER-101\\nDocker & Containerization Fundamentals]:::gap\\n end\\n subgraph W6[\"Week 6 — Mastery\"]\\n G[CS-FAST-201\\nAdvanced API Design with FastAPI]:::gap\\n end\\n Z([Role-ready — Backend Developer]):::done\\n A --> B\\n B --> C\\n C --> D\\n D --> E\\n E --> F\\n F --> G\\n G --> Z\\n classDef foundation fill:#E1F5EE,stroke:#0F6E56,color:#085041\\n classDef gap fill:#EEEDFE,stroke:#534AB7,color:#26215C\\n classDef start fill:#1D9E75,stroke:#0F6E56,color:#E1F5EE\\n classDef done fill:#534AB7,stroke:#3C3489,color:#EEEDFE'}, 'id': 'functions.submit_mermaid_visualization:11', 'type': 'tool_call'}], invalid_tool_calls=[], usage_metadata={'input_tokens': 4153, 'output_tokens': 398, 'total_tokens': 4551, 'input_token_details': {'cache_read': 2816}}),\n", - " ToolMessage(content='Mermaid visualization stored successfully.', name='submit_mermaid_visualization', id='12ce8f2b-6176-4099-b15d-720f6c73f904', tool_call_id='functions.submit_mermaid_visualization:11'),\n", - " AIMessage(content='', additional_kwargs={}, response_metadata={'token_usage': {'completion_tokens': 1, 'prompt_tokens': 4576, 'total_tokens': 4577, 'completion_time': 0.005792865, 'completion_tokens_details': None, 'prompt_time': 0.156326975, 'prompt_tokens_details': {'cached_tokens': 2304}, 'queue_time': None, 'total_time': 0.16211984}, 'model_name': 'moonshotai/kimi-k2-instruct-0905', 'system_fingerprint': 'fp_00c37775b7', 'service_tier': 'on_demand', 'finish_reason': 'stop', 'logprobs': None, 'model_provider': 'groq'}, id='lc_run--019d109d-aa2b-7521-9386-6b53dc792f85-0', tool_calls=[], invalid_tool_calls=[], usage_metadata={'input_tokens': 4576, 'output_tokens': 1, 'total_tokens': 4577, 'input_token_details': {'cache_read': 2304}})],\n", - " 'skill_gap_analysis_data': SkillGapAnalysis(job_title='Backend Developer', candidate_name=None, analyzed_gaps=[SkillGap(skill_name='FastAPI', gap_type='missing_foundation', priority='high', reasoning='JD explicitly requires FastAPI; candidate lists Flask and Django but has no record of FastAPI usage in internships or projects.', target_competency='Build async REST endpoints with FastAPI, Pydantic models, and automatic OpenAPI docs'), SkillGap(skill_name='PostgreSQL', gap_type='missing_foundation', priority='high', reasoning='JD mandates PostgreSQL; candidate only shows MySQL, SQLite, and MongoDB experience, with no PostgreSQL exposure.', target_competency='Design relational schemas, write optimized queries, and use advanced PostgreSQL features (JSONB, CTEs, indexes)'), SkillGap(skill_name='Docker', gap_type='missing_foundation', priority='medium', reasoning='JD lists Docker as required; candidate’s tech stack contains no containerization tooling or deployment experience.', target_competency='Containerize FastAPI services, manage multi-stage builds, and orchestrate with docker-compose')], is_fresher_adaptation_needed=True, executive_summary='Candidate has 7 months of internship experience and solid Python/Django exposure, but lacks production-grade FastAPI, PostgreSQL, and containerization skills required for the backend role.'),\n", - " 'resume_data': ResumeExtract(job_title='Software Developer', total_experience_months=7, skills=[Skill(name='C/C++', category='Other'), Skill(name='Java', category='Other'), Skill(name='Python', category='Backend'), Skill(name='JavaScript', category='Frontend'), Skill(name='Dart', category='Frontend'), Skill(name='Flutter', category='Frontend'), Skill(name='HTML/CSS', category='Frontend'), Skill(name='ReactJS', category='Frontend'), Skill(name='Firebase', category='Backend'), Skill(name='REST APIs', category='Backend'), Skill(name='Flask', category='Backend'), Skill(name='Django', category='Backend'), Skill(name='NodeJS', category='Backend'), Skill(name='ExpressJS', category='Backend'), Skill(name='MySQL', category='Other'), Skill(name='MongoDB', category='Other'), Skill(name='SQLite', category='Other'), Skill(name='GitHub', category='Other'), Skill(name='Android Studio', category='Other'), Skill(name='Visual Studio Code', category='Other'), Skill(name='MATLAB', category='Other'), Skill(name='Cursor', category='Other'), Skill(name='Github Copilot', category='Other'), Skill(name='Provider', category='Other'), Skill(name='Bloc', category='Other'), Skill(name='Scikit-learn', category='ML'), Skill(name='tensorflow', category='ML')], experience=[ExperienceItem(job_title='Technology Intern', experience_type='internship', duration_months=5, technologies=['Flask', 'PyMuPDF', 'Docling', 'OCR', 'LLM', 'Cron'], responsibilities=['Built Flask API for RTA investor verification with OCR extraction', 'Developed scalable document intelligence pipeline', 'Implementing Cron-based background workers for weekly analytics reports']), ExperienceItem(job_title='Software Development Intern', experience_type='internship', duration_months=2, technologies=['Flutter', 'Dart', 'MVVM', 'SOLID'], responsibilities=['Developed Groceazy grocery app with 10+ modules', 'Implemented secure user authentication and role-based access', 'Built image-to-item price matcher using APIs'])], projects=[ProjectItem(name='Hostel Bites – IIITK Canteen App', technologies=['Flutter', 'Dart', 'Firebase', 'Cloud Firestore', 'Mapbox API'], what_was_built='Flutter app for hostel food ordering with live tracking'), ProjectItem(name='JobShield - Fake Job Detector', technologies=['Flutter', 'Dart', 'Python', 'Flask', 'SQLite'], what_was_built='Fake job detection API with 95% accuracy and Flutter web interface')], certifications=[CertificationItem(name='Certification in Graph Algorithms', issuer='AlgoUniversity', topics_covered=['Graph Algorithms'])], achievements=[AchievementItem(title='Ranked 81 in Inter IIIT Coding Contest Optigo', domain='Competitive Programming'), AchievementItem(title='4-star CodeChef rating and Knight badge on LeetCode', domain='Competitive Programming'), AchievementItem(title='Advanced to regionals in SIH’23 with e-waste facility locator app', domain='Hackathon')], is_fresher=False),\n", - " 'extraction_error': None,\n", - " 'JobDescriptionExtract_data': JobDescriptionExtract(job_title='Backend Developer', company_name='CodeForge', location='Pune', employment_type='Full-time role', duration_months=None, is_fresher_allowed=None, skills_required=[SkillRequirement(name='Python', level=None), SkillRequirement(name='FastAPI', level=None), SkillRequirement(name='Django', level=None), SkillRequirement(name='SQL', level=None), SkillRequirement(name='PostgreSQL', level=None), SkillRequirement(name='Docker', level=None)], tools_technologies=None, responsibilities=[ResponsibilityItem(description='Develop REST APIs using FastAPI'), ResponsibilityItem(description='Design and manage PostgreSQL databases'), ResponsibilityItem(description='Implement authentication and authorization systems'), ResponsibilityItem(description='Optimize performance and scalability')], requirements=[RequirementItem(description='Strong knowledge of Python'), RequirementItem(description='Experience with FastAPI or Django'), RequirementItem(description='Good understanding of SQL and database design'), RequirementItem(description='Familiarity with Docker')], constraints=[ConstraintItem(type='location', value='Pune only'), ConstraintItem(type='employment type', value='Full-time role')]),\n", - " 'mermaid_code': 'flowchart TD\\n A([Start — Current skills: Python/Django]):::start\\n subgraph W1[\"Week 1 — Foundations\"]\\n B[CS-PY-101\\nPython Programming Fundamentals]:::foundation\\n end\\n subgraph W2[\"Week 2 — Database base\"]\\n C[CS-DB-101\\nSQL Fundamentals]:::foundation\\n end\\n subgraph W3[\"Week 3 — FastAPI core\"]\\n D[CS-FAST-101\\nREST API Development with FastAPI]:::gap\\n end\\n subgraph W4[\"Week 4 — PostgreSQL deep dive\"]\\n E[CS-DB-201\\nAdvanced SQL — Indexing & Optimization]:::gap\\n end\\n subgraph W5[\"Week 5 — Containerization\"]\\n F[CS-DOCKER-101\\nDocker & Containerization Fundamentals]:::gap\\n end\\n subgraph W6[\"Week 6 — Mastery\"]\\n G[CS-FAST-201\\nAdvanced API Design with FastAPI]:::gap\\n end\\n Z([Role-ready — Backend Developer]):::done\\n A --> B\\n B --> C\\n C --> D\\n D --> E\\n E --> F\\n F --> G\\n G --> Z\\n classDef foundation fill:#E1F5EE,stroke:#0F6E56,color:#085041\\n classDef gap fill:#EEEDFE,stroke:#534AB7,color:#26215C\\n classDef start fill:#1D9E75,stroke:#0F6E56,color:#E1F5EE\\n classDef done fill:#534AB7,stroke:#3C3489,color:#EEEDFE',\n", - " 'final_roadmap': {'candidate_name': 'Candidate',\n", - " 'onboarding_summary': '7-month intern with solid Python/Django experience; lacks production-grade FastAPI, PostgreSQL, and containerization skills. Fresher adaptation needed.',\n", - " 'roadmap': [{'course_id': 'CS-PY-101',\n", - " 'is_foundation': True,\n", - " 'reasoning': 'Fresher adaptation: ensure rock-solid Python base before specialized frameworks.',\n", - " 'sequence_order': 1,\n", - " 'title': 'Python Programming Fundamentals'},\n", - " {'course_id': 'CS-DB-101',\n", - " 'is_foundation': True,\n", - " 'reasoning': 'Mandatory foundation for PostgreSQL mastery; candidate only knows MySQL/SQLite.',\n", - " 'sequence_order': 2,\n", - " 'title': 'SQL Fundamentals for Backend Developers'},\n", - " {'course_id': 'CS-FAST-101',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Closes the high-priority FastAPI gap; introduces Pydantic and async endpoints.',\n", - " 'sequence_order': 3,\n", - " 'title': 'REST API Development with FastAPI'},\n", - " {'course_id': 'CS-DB-201',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Elevates PostgreSQL skills to production level: CTEs, indexes, query plans.',\n", - " 'sequence_order': 4,\n", - " 'title': 'Advanced SQL — Indexing, Transactions & Query Optimization'},\n", - " {'course_id': 'CS-DOCKER-101',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Adds required containerization skills; no prior Docker experience.',\n", - " 'sequence_order': 5,\n", - " 'title': 'Docker & Containerization Fundamentals'},\n", - " {'course_id': 'CS-FAST-201',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Consolidates expertise: async DB integration, OAuth2, dependency injection.',\n", - " 'sequence_order': 6,\n", - " 'title': 'Advanced API Design with FastAPI'}],\n", - " 'target_role': 'Backend Developer'}}" - ] - }, - "execution_count": 204, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "final_state" ] @@ -1606,7 +1566,7 @@ }, { "cell_type": "code", - "execution_count": 217, + "execution_count": null, "id": "40a999a5", "metadata": {}, "outputs": [], @@ -1616,60 +1576,17 @@ }, { "cell_type": "code", - "execution_count": 218, + "execution_count": null, "id": "13d64ecc", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'candidate_name': 'Candidate',\n", - " 'onboarding_summary': '7-month intern with solid Python/Django experience; lacks production-grade FastAPI, PostgreSQL, and containerization skills. Fresher adaptation needed.',\n", - " 'roadmap': [{'course_id': 'CS-PY-101',\n", - " 'is_foundation': True,\n", - " 'reasoning': 'Fresher adaptation: ensure rock-solid Python base before specialized frameworks.',\n", - " 'sequence_order': 1,\n", - " 'title': 'Python Programming Fundamentals'},\n", - " {'course_id': 'CS-DB-101',\n", - " 'is_foundation': True,\n", - " 'reasoning': 'Mandatory foundation for PostgreSQL mastery; candidate only knows MySQL/SQLite.',\n", - " 'sequence_order': 2,\n", - " 'title': 'SQL Fundamentals for Backend Developers'},\n", - " {'course_id': 'CS-FAST-101',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Closes the high-priority FastAPI gap; introduces Pydantic and async endpoints.',\n", - " 'sequence_order': 3,\n", - " 'title': 'REST API Development with FastAPI'},\n", - " {'course_id': 'CS-DB-201',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Elevates PostgreSQL skills to production level: CTEs, indexes, query plans.',\n", - " 'sequence_order': 4,\n", - " 'title': 'Advanced SQL — Indexing, Transactions & Query Optimization'},\n", - " {'course_id': 'CS-DOCKER-101',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Adds required containerization skills; no prior Docker experience.',\n", - " 'sequence_order': 5,\n", - " 'title': 'Docker & Containerization Fundamentals'},\n", - " {'course_id': 'CS-FAST-201',\n", - " 'is_foundation': False,\n", - " 'reasoning': 'Consolidates expertise: async DB integration, OAuth2, dependency injection.',\n", - " 'sequence_order': 6,\n", - " 'title': 'Advanced API Design with FastAPI'}],\n", - " 'target_role': 'Backend Developer'}" - ] - }, - "execution_count": 218, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "skill_gap_data" ] }, { "cell_type": "code", - "execution_count": 228, + "execution_count": null, "id": "25a6b5b4", "metadata": {}, "outputs": [], @@ -1710,25 +1627,17 @@ }, { "cell_type": "code", - "execution_count": 229, + "execution_count": null, "id": "26c10157", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "✅ UI Payload successfully exported to ai_output.json\n" - ] - } - ], + "outputs": [], "source": [ "export_ui_payload(final_state)" ] }, { "cell_type": "code", - "execution_count": 215, + "execution_count": null, "id": "bae943d7", "metadata": {}, "outputs": [], @@ -1739,7 +1648,7 @@ }, { "cell_type": "code", - "execution_count": 224, + "execution_count": null, "id": "9b464835", "metadata": {}, "outputs": [], @@ -1749,7 +1658,7 @@ }, { "cell_type": "code", - "execution_count": 225, + "execution_count": null, "id": "79375428", "metadata": {}, "outputs": [], @@ -1759,54 +1668,10 @@ }, { "cell_type": "code", - "execution_count": 226, + "execution_count": null, "id": "f9db0000", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "('{\\n'\n", - " ' \"job_title\": \"Backend Developer\",\\n'\n", - " ' \"candidate_name\": null,\\n'\n", - " ' \"analyzed_gaps\": [\\n'\n", - " ' {\\n'\n", - " ' \"skill_name\": \"FastAPI\",\\n'\n", - " ' \"gap_type\": \"missing_foundation\",\\n'\n", - " ' \"priority\": \"high\",\\n'\n", - " ' \"reasoning\": \"JD explicitly requires FastAPI; candidate lists Flask and '\n", - " 'Django but has no record of FastAPI usage in internships or projects.\",\\n'\n", - " ' \"target_competency\": \"Build async REST endpoints with FastAPI, Pydantic '\n", - " 'models, and automatic OpenAPI docs\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"skill_name\": \"PostgreSQL\",\\n'\n", - " ' \"gap_type\": \"missing_foundation\",\\n'\n", - " ' \"priority\": \"high\",\\n'\n", - " ' \"reasoning\": \"JD mandates PostgreSQL; candidate only shows MySQL, SQLite, '\n", - " 'and MongoDB experience, with no PostgreSQL exposure.\",\\n'\n", - " ' \"target_competency\": \"Design relational schemas, write optimized queries, '\n", - " 'and use advanced PostgreSQL features (JSONB, CTEs, indexes)\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"skill_name\": \"Docker\",\\n'\n", - " ' \"gap_type\": \"missing_foundation\",\\n'\n", - " ' \"priority\": \"medium\",\\n'\n", - " ' \"reasoning\": \"JD lists Docker as required; candidate’s tech stack '\n", - " 'contains no containerization tooling or deployment experience.\",\\n'\n", - " ' \"target_competency\": \"Containerize FastAPI services, manage multi-stage '\n", - " 'builds, and orchestrate with docker-compose\"\\n'\n", - " ' }\\n'\n", - " ' ],\\n'\n", - " ' \"is_fresher_adaptation_needed\": true,\\n'\n", - " ' \"executive_summary\": \"Candidate has 7 months of internship experience and '\n", - " 'solid Python/Django exposure, but lacks production-grade FastAPI, '\n", - " 'PostgreSQL, and containerization skills required for the backend role.\"\\n'\n", - " '}')\n" - ] - } - ], + "outputs": [], "source": [ "pprint(skill_gap_data)" ]