|
20 | 20 | },
|
21 | 21 | {
|
22 | 22 | "cell_type": "code",
|
23 |
| - "execution_count": 1, |
| 23 | + "execution_count": 9, |
24 | 24 | "metadata": {},
|
25 | 25 | "outputs": [],
|
26 | 26 | "source": [
|
|
53 | 53 | "\n",
|
54 | 54 | "1. Get the Pool endpoint from [Azure Container Apps - Sessions Code Interpreter](https://learn.microsoft.com/en-us/azure/container-apps/sessions-code-interpreter?tabs=azure-cli).\n",
|
55 | 55 | "\n",
|
56 |
| - "2. Copy `.env.example` to `.env` and update it with your sessions endpoint.\n", |
57 |
| - "\n", |
58 |
| - "3. Copy `OAI_CONFIG_LIST.example` to `OAI_CONFIG_LIST` and update it with your Azure OpenAI values." |
| 56 | + "2. Copy `.env.example` to `.env` and update it with your sessions endpoint and Azure OpenAI values" |
59 | 57 | ]
|
60 | 58 | },
|
61 | 59 | {
|
62 | 60 | "cell_type": "code",
|
63 |
| - "execution_count": 2, |
| 61 | + "execution_count": 11, |
64 | 62 | "metadata": {},
|
65 | 63 | "outputs": [],
|
66 | 64 | "source": [
|
|
103 | 101 | },
|
104 | 102 | {
|
105 | 103 | "cell_type": "code",
|
106 |
| - "execution_count": 4, |
| 104 | + "execution_count": 12, |
107 | 105 | "metadata": {},
|
108 | 106 | "outputs": [],
|
109 | 107 | "source": [
|
|
180 | 178 | },
|
181 | 179 | {
|
182 | 180 | "cell_type": "code",
|
183 |
| - "execution_count": 5, |
| 181 | + "execution_count": 13, |
184 | 182 | "metadata": {},
|
185 | 183 | "outputs": [],
|
186 | 184 | "source": [
|
|
201 | 199 | " \"All necessary libraries have already been installed.\\n\"\n",
|
202 | 200 | " \"Once the task is done, returns 'TERMINATE'.\",\n",
|
203 | 201 | " llm_config={\"config_list\":config_list},\n",
|
| 202 | + " is_termination_msg=lambda msg: \"code output\" in msg[\"content\"]\n", |
204 | 203 | ")\n",
|
205 | 204 | "\n",
|
206 | 205 | "aca_pool_management_endpoint = ACA_SESSIONS_ENDPOINT\n",
|
|
210 | 209 | " name=\"CodeExecutor\",\n",
|
211 | 210 | " llm_config=False,\n",
|
212 | 211 | " code_execution_config={\"executor\": aca_sessions_executor},\n",
|
| 212 | + " human_input_mode=\"NEVER\",\n", |
213 | 213 | " is_termination_msg=lambda msg: \"TERMINATE\" in msg.get(\"content\", \"\").strip().upper(),\n",
|
214 | 214 | ")"
|
215 | 215 | ]
|
|
223 | 223 | },
|
224 | 224 | {
|
225 | 225 | "cell_type": "code",
|
226 |
| - "execution_count": 6, |
| 226 | + "execution_count": null, |
| 227 | + "metadata": {}, |
| 228 | + "outputs": [], |
| 229 | + "source": [ |
| 230 | + "chat_result = code_executor_agent.initiate_chat(\n", |
| 231 | + " code_writer_agent,\n", |
| 232 | + " message=\"125 KM/hr for an American?\",\n", |
| 233 | + ")" |
| 234 | + ] |
| 235 | + }, |
| 236 | + { |
| 237 | + "cell_type": "code", |
| 238 | + "execution_count": 15, |
227 | 239 | "metadata": {},
|
228 | 240 | "outputs": [
|
229 | 241 | {
|
230 | 242 | "name": "stdout",
|
231 | 243 | "output_type": "stream",
|
232 | 244 | "text": [
|
233 |
| - "\u001b[33mCodeExecutor\u001b[0m (to CodeWriter):\n", |
234 |
| - "\n", |
235 |
| - "What is 30 plus 20?\n", |
236 |
| - "\n", |
237 |
| - "--------------------------------------------------------------------------------\n", |
238 |
| - "\u001b[31m\n", |
239 |
| - ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", |
240 |
| - "\u001b[33mCodeWriter\u001b[0m (to CodeExecutor):\n", |
241 |
| - "\n", |
242 |
| - "To solve this, you can simply add the two numbers in Python:\n", |
243 |
| - "\n", |
244 |
| - "```python\n", |
245 |
| - "result = 30 + 20\n", |
246 |
| - "print(result)\n", |
247 |
| - "```\n", |
248 |
| - "\n", |
249 |
| - "When you run this code, it will output the sum of 30 and 20. \n", |
250 |
| - "\n", |
251 |
| - "Would you like me to execute this code to get the result?\n", |
252 |
| - "\n", |
253 |
| - "--------------------------------------------------------------------------------\n", |
254 |
| - "\u001b[31m\n", |
255 |
| - ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", |
256 |
| - "\u001b[31m\n", |
257 |
| - ">>>>>>>> EXECUTING CODE BLOCK (inferred language is python)...\u001b[0m\n", |
258 |
| - "eyJ0eXAiOiJKV1QiLCJyaCI6IjAuQW84RF9YSmZkVHdadDBDMVo3YkJMQXplY3pfWGZTd2hlbHRJdVgyaVVJLWhVc1AtQU5NLiIsImFsZyI6IlJTMjU2IiwieDV0IjoiTDFLZktGSV9qblhid1djMjJ4Wnh3MXNVSEgwIiwia2lkIjoiTDFLZktGSV9qblhid1djMjJ4Wnh3MXNVSEgwIn0.eyJhdWQiOiJodHRwczovL2R5bmFtaWNzZXNzaW9ucy5pbyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0Lzc1NWY3MmZkLTE5M2MtNDBiNy1iNTY3LWI2YzEyYzBjZGU3My8iLCJpYXQiOjE3MTQ5MjM1MTUsIm5iZiI6MTcxNDkyMzUxNSwiZXhwIjoxNzE0OTI3NjgwLCJhY3IiOiIxIiwiYWlvIjoiQVRRQnkvNFdBQUFBMHpDUjgwejRUY1FhMHp3eUdQZjUvSnJuNXNrY0M0czNKZEdsR2N4NVBvZnU5YW5MYkxSdlRNYmlwK0Evc1I0bmFBQ0l2TzNmRnk0dVFhQjJjbnFxcXFWdUxCNHBGWlkzandBcU1Pd1Q3WW01ck1BM0M5b01WUW1IMWxJUFVrQmFmL2ttdjdCaG5hUzF1TE5qOXorelBSQ3ZINVg4QjJJaVZEV0tWOFZjRGx1NmFBdFBNVXJNVG9xc0kwMzF6b0dsOUlvV0lic1lXaFBxK1pnUjVDSHhvT1BidUNCOWpVYWM0c2N3ZjlqZXN4TVU3L1lRZSs3TnNzME54SHI5Z3JYMUZhSXVMM0NYNDRUVnJ4YXY2SFZJWGs0Zy9yNDBwejBJaFpNMXpKUXdDdG04TFBBUnZ0cmdTc1QzWFBIOXZ4NlQrN0FtMXBJbWpTaUpzRzV3Ti9pUDlPb0pqcE1EZ2hWRzJkN3lOVkFnZ1RvVjV2YkhPanZlMS9ORzJkR21QeWNzMDF0a21yaHhnRmRtem9wQTYwb0YzQT09IiwiYWx0c2VjaWQiOiI1OjoxMDAzMjAwMjAwRjg2NDRBIiwiYW1yIjpbInJzYSIsIm1mYSJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVtYWlsIjoiZ29rQG1pY3Jvc29mdC5jb20iLCJmYW1pbHlfbmFtZSI6IkthbXRhbW5lbmkiLCJnaXZlbl9uYW1lIjoiR292aW5kIiwiZ3JvdXBzIjpbImY4ZDNjNzFlLWU0NzMtNDgyMi04ZWY3LTZjYzU2MTZhZThjNiIsImNlOTQ4YzQ3LTMxMTktNDFhMy1hMDk3LTI5OTIzMTA2MzNlOSIsIjAzMGJiMzUxLTIxOGMtNDlmNi05NmFhLTA0OTUzNDIxZDJmYiIsIjliYjhkMDU3LWRiZDAtNDQ0MS05NGNmLWQ0OGEwMTgwMGY5MiIsImY5OTdjMDYxLTQwYjktNDQyOC1hYTYwLWQ1NzBkYjAxNWJiMyIsIjQ4MTA4OTY1LTgyNzQtNDllOC1iODQyLWY5OGI1MmE1Y2U5ZSIsIjhmNzlkMTY5LTExMDEtNDUyMS05NGU1LTAyNmVhZTg0ODY0NyIsIjU5MTE5MjZiLTQ4MmMtNDJlMy04Y2UxLTlmNjczMjhjNmMzMiIsIjQ0NTQwZjc1LTJlZTgtNDgwYS1hMWE3LTkyYjM5ZmQ2OWMzYyIsIjI4ODM5NTgzLWQxOWItNDQzZC04Mzg5LWExYjAwZGUwYzIxZSIsIjAxYjg2MmEyLWQyYTQtNGJmNS05Mzg4LTIzYmIxOGRmZTQxOSIsImEwODhlNGE0LWI1NWYtNGU5ZS05OGU2LTVhYzRlNTZkNjA3ZSIsImIzYmYzMmE1LTllNmYtNDdkMy1iNDhjLWZjZDM2NjljMmMyMSIsIjQ4YmE1MGMyLTMxNTAtNDBiMS04NWM3LWFiNGQyOWU0NzlmYiIsImFhZGMzZWNjLTMzOWEtNGU3Mi1hNGRhLTYyNDBhYTBjMTNjMSIsImNlNzdhY2Q1LTIxM2EtNGMwZS1hZWQ5LTYzYjZhMGZmNDFmNiIsIjMyYmFkNmQ3LTlmODgtNDE1Zi1hNTk0LTJiYmFlMzNjNWE4ZCIsIjY1MTE5ZmU0LTlkZWUtNDlmMi04ZjBhLTI1YmEzNjBkMmY4MSIsIjJjN2Y3NGU3LTliZjAtNGFkZS05MmNlLWE0ZWFkZTc5ZGM2ZCIsIjAyZjdjOWViLWY0ZjItNDY3ZC05ZTJjLTNiZmRhMGQ0OWI3YiJdLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83MmY5ODhiZi04NmYxLTQxYWYtOTFhYi0yZDdjZDAxMWRiNDcvIiwiaXBhZGRyIjoiMjAuMTcxLjEwOS4xODkiLCJuYW1lIjoiR292aW5kIEthbXRhbW5lbmkiLCJvaWQiOiI4NDAyNmRkMS0xOWQ2LTQ4MmItOTEyNC1mNGI2YTkyMzRkZjYiLCJwdWlkIjoiMTAwMzIwMDJCN0JCODhCMyIsInJoIjoiSSIsInNjcCI6IlNlc3Npb25zLlJlYWRXcml0ZS5BbGwiLCJzdWIiOiI5V0Y5VGtrS25aM2ZIcnNreXhXV0J3QUV2QndxVHJ5RkJaMjVRYVBIaFBVIiwidGlkIjoiNzU1ZjcyZmQtMTkzYy00MGI3LWI1NjctYjZjMTJjMGNkZTczIiwidW5pcXVlX25hbWUiOiJnb2tAbWljcm9zb2Z0LmNvbSIsInV0aSI6Im9qMTB1RXBxVUVhMnZFNVp5Y3BGQUEiLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjg4ZDhlM2UzLThmNTUtNGExZS05NTNhLTliOTg5OGI4ODc2YiIsImUzOTczYmRmLTQ5ODctNDlhZS04MzdhLWJhOGUyMzFjNzI4NiIsIjc2OThhNzcyLTc4N2ItNGFjOC05MDFmLTYwZDZiMDhhZmZkMiIsIjA1MjY3MTZiLTExM2QtNGMxNS1iMmM4LTY4ZTNjMjJiOWY4MCIsImIxYmUxYzNlLWI2NWQtNGYxOS04NDI3LWY2ZmEwZDk3ZmViOSIsImFhZjQzMjM2LTBjMGQtNGQ1Zi04ODNhLTY5NTUzODJhYzA4MSIsImU2ZDFhMjNhLWRhMTEtNGJlNC05NTcwLWJlZmM4NmQwNjdhNyIsIjg5MmM1ODQyLWE5YTYtNDYzYS04MDQxLTcyYWEwOGNhM2NmNiIsIjNlZGFmNjYzLTM0MWUtNDQ3NS05Zjk0LTVjMzk4ZWY2YzA3MCIsIjFkMzM2ZDJjLTRhZTgtNDJlZi05NzExLWIzNjA0Y2UzZmMyYyIsImM0ZTM5YmQ5LTExMDAtNDZkMy04YzY1LWZiMTYwZGEwMDcxZiIsImZmZDUyZmE1LTk4ZGMtNDY1Yy05OTFkLWZjMDczZWI1OWY4ZiIsIjI1YTUxNmVkLTJmYTAtNDBlYS1hMmQwLTEyOTIzYTIxNDczYSIsIjE3MzE1Nzk3LTEwMmQtNDBiNC05M2UwLTQzMjA2MmNhY2ExOCIsImIwZjU0NjYxLTJkNzQtNGM1MC1hZmEzLTFlYzgwM2YxMmVmZSIsIjVjNGY5ZGNkLTQ3ZGMtNGNmNy04YzlhLTllNDIwN2NiZmM5MSIsIjg0MjRjNmYwLWExODktNDk5ZS1iYmQwLTI2YzE3NTNjOTZkNCIsIjlmMDYyMDRkLTczYzEtNGQ0Yy04ODBhLTZlZGI5MDYwNmZkOCIsIjc0OTVmZGM0LTM0YzQtNGQxNS1hMjg5LTk4Nzg4Y2UzOTlmZCIsIjE1OGMwNDdhLWM5MDctNDU1Ni1iN2VmLTQ0NjU1MWE2YjVmNyIsImI3OWZiZjRkLTNlZjktNDY4OS04MTQzLTc2YjE5NGU4NTUwOSJdfQ.cYjJ814-Ybk6Z8ZWOpGO33N4a4g7GNM7CrbTsdtctTYYVlwtK7m0v6H7TFc56LjX-EgxrE17Emm8fUESXsKEDltHxWus-Na3ZiBQgRGh65dgs1dfHWXZ9upvlqAzwtcUB_-TVL7VObNJSh_6IZe3ORsxyi7AlB6gcIMr4EoKlGrYg1mdZxan2EI-46ZPpJBu071ce2Zz1hQxDRlPE4TxCwedhHEl9wB3IfM7cx_mabAZW9Gqktc6hwDI8atBWtXvUzRqS6tTG7vxzfwPGp7AKx1vloQivxgCTA6GaRnqSBz_-k0Hz8Ro9zR43kQ99qWHSafsdhQX5YjGjVSNukUscg\n", |
259 |
| - "\u001b[33mCodeExecutor\u001b[0m (to CodeWriter):\n", |
260 |
| - "\n", |
261 |
| - "exitcode: 0 (execution succeeded)\n", |
262 |
| - "Code output: 50\n", |
263 |
| - "\n", |
264 |
| - "\n", |
265 |
| - "--------------------------------------------------------------------------------\n", |
266 |
| - "\u001b[31m\n", |
267 |
| - ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", |
268 |
| - "\u001b[33mCodeWriter\u001b[0m (to CodeExecutor):\n", |
269 |
| - "\n", |
270 |
| - "\n", |
271 |
| - "\n", |
272 |
| - "--------------------------------------------------------------------------------\n", |
273 |
| - "\u001b[31m\n", |
274 |
| - ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", |
275 |
| - "\u001b[33mCodeExecutor\u001b[0m (to CodeWriter):\n", |
276 |
| - "\n", |
277 |
| - "\n", |
278 |
| - "\n", |
279 |
| - "--------------------------------------------------------------------------------\n", |
280 |
| - "\u001b[31m\n", |
281 |
| - ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", |
282 |
| - "\u001b[33mCodeWriter\u001b[0m (to CodeExecutor):\n", |
283 |
| - "\n", |
284 |
| - "TERMINATE\n", |
285 |
| - "\n", |
286 |
| - "--------------------------------------------------------------------------------\n" |
287 |
| - ] |
288 |
| - }, |
289 |
| - { |
290 |
| - "name": "stderr", |
291 |
| - "output_type": "stream", |
292 |
| - "text": [ |
293 |
| - "C:\\Users\\gok\\AppData\\Roaming\\Python\\Python312\\site-packages\\autogen\\agentchat\\conversable_agent.py:1306: UserWarning: Extracted_response from {response} is None.\n", |
294 |
| - " warnings.warn(\"Extracted_response from {response} is None.\", UserWarning)\n" |
| 245 | + "77.67 mph\n" |
295 | 246 | ]
|
296 | 247 | }
|
297 | 248 | ],
|
298 | 249 | "source": [
|
299 |
| - "chat_result = code_executor_agent.initiate_chat(\n", |
300 |
| - " code_writer_agent,\n", |
301 |
| - " message=\"What is 30 plus 20?\",\n", |
302 |
| - ")" |
| 250 | + "import re\n", |
| 251 | + "\n", |
| 252 | + "# Find the message containing 'Code output:' from assistant\n", |
| 253 | + "code_output_message = next((msg['content'] for msg in chat_result.chat_history if msg['role'] == 'assistant' and 'Code output:' in msg['content']), None)\n", |
| 254 | + "\n", |
| 255 | + " # Extract and round the value of 'Code output'\n", |
| 256 | + "if code_output_message:\n", |
| 257 | + " code_output_match = re.search(r'Code output:\\s*(.*)', code_output_message)\n", |
| 258 | + " if code_output_match:\n", |
| 259 | + " code_output_value = code_output_match.group(1)\n", |
| 260 | + " # Further processing to extract and round the numeric part if necessary\n", |
| 261 | + " numeric_match = re.search(r'(\\d+\\.\\d+)', code_output_value)\n", |
| 262 | + " if numeric_match:\n", |
| 263 | + " rounded_value = round(float(numeric_match.group(1)), 2)\n", |
| 264 | + " code_output_value = f\"{rounded_value} mph\"\n", |
| 265 | + "\n", |
| 266 | + "print(code_output_value)" |
303 | 267 | ]
|
304 | 268 | }
|
305 | 269 | ],
|
|
0 commit comments