From the uDemy course on LLM engineering.
https://www.udemy.com/course/llm-engineering-master-ai-and-large-language-models
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
420 lines
14 KiB
420 lines
14 KiB
{ |
|
"cells": [ |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "8dee7381-2291-4202-a6e6-9eb94e896141", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"# imports\n", |
|
"\n", |
|
"import os\n", |
|
"import io\n", |
|
"import sys\n", |
|
"from dotenv import load_dotenv\n", |
|
"from openai import OpenAI\n", |
|
"import google.generativeai\n", |
|
"import anthropic\n", |
|
"from IPython.display import Markdown, display, update_display\n", |
|
"import gradio as gr\n", |
|
"import subprocess\n", |
|
"import platform\n", |
|
"import os" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "bc145e4c-1e06-4414-aa2b-1ea1862b4600", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"# environment\n", |
|
"\n", |
|
"load_dotenv(override=True)\n", |
|
"os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY', 'your-key-if-not-using-env')\n", |
|
"os.environ['ANTHROPIC_API_KEY'] = os.getenv('ANTHROPIC_API_KEY', 'your-key-if-not-using-env')" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "bfaf8584-a10f-43f0-b550-f1b2b6f07160", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"# initialize\n", |
|
"\n", |
|
"openai = OpenAI()\n", |
|
"claude = anthropic.Anthropic()\n", |
|
"\n", |
|
"OPENAI_MODEL = \"gpt-4o-mini\"\n", |
|
"CLAUDE_MODEL = \"claude-3-haiku-20240307\"\n", |
|
"\n", |
|
"# OPENAI_MODEL = \"gpt-4o\"\n", |
|
"# CLAUDE_MODEL = \"claude-3-5-sonnet-20240620\"" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "1b47508e-dc60-4db5-a29c-f3f0ed57d894", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"processor = platform.machine()" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "6ee9ec20-3b1d-4a15-9ab3-b2fbb93296b4", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def get_name_by_extension(extension):\n", |
|
" for lang in programming_languages:\n", |
|
" if lang[\"extension\"] == extension:\n", |
|
" return lang[\"name\"]\n", |
|
" return None " |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "ee408ffd-fde2-4c1e-b87f-c8dce2ad49bc", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def get_system_message(prog_lang):\n", |
|
" name = get_name_by_extension(prog_lang)\n", |
|
" \n", |
|
" system_message = f\"You are an assistant that reimplements Python code to {name} for an {processor} device. \"\n", |
|
" system_message += f\"Respond only with code; use comments sparingly and do not provide any explanation other than occasional comments. \"\n", |
|
" system_message += f\"The {name} response needs to produce an identical output in the fastest possible time.\"\n", |
|
" system_message += f\"If the used function does not exists for {name} language interchange it for its compatibility and if not throw an error\"\n", |
|
"\n", |
|
" return system_message" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "ac8d5d3b-a018-4b94-8080-9b18f5634dc7", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def user_prompt_for(python, prog_lang):\n", |
|
" name = get_name_by_extension(prog_lang)\n", |
|
" \n", |
|
" user_prompt = f\"Rewrite this Python code in {name} with the fastest possible implementation that produces identical output in the least time. \"\n", |
|
" user_prompt += f\"Respond only with {name} code; do not explain your work other than a few comments. \"\n", |
|
" user_prompt += \"Pay attention to number types to ensure no int overflows\\n\\n\"\n", |
|
" user_prompt += python\n", |
|
" return user_prompt" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "23c58e61-5fdd-41f5-9e60-a0847f4bf86f", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def messages_for(python, prog_lang):\n", |
|
" system_message = get_system_message(prog_lang)\n", |
|
" \n", |
|
" return [\n", |
|
" {\"role\": \"system\", \"content\": system_message},\n", |
|
" {\"role\": \"user\", \"content\": user_prompt_for(python, prog_lang)}\n", |
|
" ]" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "7e193cd6-16f4-440a-9376-6041672f91fc", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"# write to a file called optimized.cpp\n", |
|
"\n", |
|
"def write_output(content, prog_lang):\n", |
|
" code = content.replace(\"```cpp\",\"\").replace(\"javascript\",\"\").replace(\"```\",\"\")\n", |
|
" \n", |
|
" with open(f\"optimized.{prog_lang}\", \"w\") as f:\n", |
|
" f.write(code)" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "28b0be5e-73b6-49d8-8ef6-8209eace5ee6", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"python_hard = \"\"\"# Be careful to support large number sizes\n", |
|
"\n", |
|
"def lcg(seed, a=1664525, c=1013904223, m=2**32):\n", |
|
" value = seed\n", |
|
" while True:\n", |
|
" value = (a * value + c) % m\n", |
|
" yield value\n", |
|
" \n", |
|
"def max_subarray_sum(n, seed, min_val, max_val):\n", |
|
" lcg_gen = lcg(seed)\n", |
|
" random_numbers = [next(lcg_gen) % (max_val - min_val + 1) + min_val for _ in range(n)]\n", |
|
" max_sum = float('-inf')\n", |
|
" for i in range(n):\n", |
|
" current_sum = 0\n", |
|
" for j in range(i, n):\n", |
|
" current_sum += random_numbers[j]\n", |
|
" if current_sum > max_sum:\n", |
|
" max_sum = current_sum\n", |
|
" return max_sum\n", |
|
"\n", |
|
"def total_max_subarray_sum(n, initial_seed, min_val, max_val):\n", |
|
" total_sum = 0\n", |
|
" lcg_gen = lcg(initial_seed)\n", |
|
" for _ in range(20):\n", |
|
" seed = next(lcg_gen)\n", |
|
" total_sum += max_subarray_sum(n, seed, min_val, max_val)\n", |
|
" return total_sum\n", |
|
"\n", |
|
"# Parameters\n", |
|
"n = 10000 # Number of random numbers\n", |
|
"initial_seed = 42 # Initial seed for the LCG\n", |
|
"min_val = -10 # Minimum value of random numbers\n", |
|
"max_val = 10 # Maximum value of random numbers\n", |
|
"\n", |
|
"# Timing the function\n", |
|
"import time\n", |
|
"start_time = time.time()\n", |
|
"result = total_max_subarray_sum(n, initial_seed, min_val, max_val)\n", |
|
"end_time = time.time()\n", |
|
"\n", |
|
"print(\"Total Maximum Subarray Sum (20 runs):\", result)\n", |
|
"print(\"Execution Time: {:.6f} seconds\".format(end_time - start_time))\n", |
|
"\"\"\"" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "2818063c-008e-4029-851a-959f63d3f0fc", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def stream_gpt(python, prog_lang): \n", |
|
" stream = openai.chat.completions.create(model=OPENAI_MODEL, messages=messages_for(python, prog_lang), stream=True)\n", |
|
" reply = \"\"\n", |
|
" for chunk in stream:\n", |
|
" fragment = chunk.choices[0].delta.content or \"\"\n", |
|
" reply += fragment\n", |
|
" yield reply.replace('```cpp\\n','').replace('javascript\\n','').replace('```','')" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "9e3e0502-8550-46fe-bd2f-394078db6576", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def stream_claude(python, prog_lang):\n", |
|
" system_message = get_system_message(prog_lang)\n", |
|
" \n", |
|
" result = claude.messages.stream(\n", |
|
" model=CLAUDE_MODEL,\n", |
|
" max_tokens=2000,\n", |
|
" system=system_message,\n", |
|
" messages=[{\"role\": \"user\", \"content\": user_prompt_for(python, prog_lang)}],\n", |
|
" )\n", |
|
" reply = \"\"\n", |
|
" with result as stream:\n", |
|
" for text in stream.text_stream:\n", |
|
" reply += text\n", |
|
" yield reply.replace('```cpp\\n','').replace('javascript\\n','').replace('```','')" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "10accbb2-b56d-4c79-beef-928c2a3b58f0", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def optimize(python, model, prog_lang):\n", |
|
" if model==\"GPT\":\n", |
|
" result = stream_gpt(python, prog_lang)\n", |
|
" elif model==\"Claude\":\n", |
|
" result = stream_claude(python, prog_lang)\n", |
|
" else:\n", |
|
" raise ValueError(\"Unknown model\")\n", |
|
" for stream_so_far in result:\n", |
|
" yield stream_so_far " |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "f1acb130-8b5c-4199-818a-3afa89c342cb", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def execute_python(code):\n", |
|
" try:\n", |
|
" output = io.StringIO()\n", |
|
" sys.stdout = output\n", |
|
"\n", |
|
" namespace = {}\n", |
|
" exec(code, namespace)\n", |
|
" finally:\n", |
|
" sys.stdout = sys.__stdout__\n", |
|
" return output.getvalue()" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "5e901e81-61d8-4ab2-9e16-f70c8ee6bdbe", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"css = \"\"\"\n", |
|
".python {background-color: #306998;}\n", |
|
".cpp {background-color: #050;}\n", |
|
".php {background-color: #cb7afa;}\n", |
|
".js {background-color: #f4ff78;}\n", |
|
"\"\"\"" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "1e0dfe2e-a87d-4595-b4ef-72797bd1ad44", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def execute_cpp(code):\n", |
|
" write_output(code, \"cpp\")\n", |
|
" try:\n", |
|
" compile_cmd = [\"clang++\", \"-Ofast\", \"-std=c++17\", \"-o\", \"optimized\", \"optimized.cpp\"]\n", |
|
" compile_result = subprocess.run(compile_cmd, shell=True, text=True, capture_output=True)\n", |
|
" run_cmd = [\"./optimized\"]\n", |
|
" run_result = subprocess.run(run_cmd, check=True, text=True, capture_output=True)\n", |
|
" return run_result.stdout\n", |
|
" except subprocess.CalledProcessError as e:\n", |
|
" return f\"An error occurred:\\n{e.stderr}\"\n", |
|
"\n", |
|
"def execute_js(code):\n", |
|
" write_output(code, \"js\")\n", |
|
" try:\n", |
|
" run_result = subprocess.run([\"node\", \"optimized.js\"], shell=True, text=True, capture_output=True)\n", |
|
" return run_result.stdout\n", |
|
" except subprocess.CalledProcessError as e:\n", |
|
" return f\"An error occurred:\\n{e.stderr}\"\n", |
|
"\n", |
|
"def execute_php(code):\n", |
|
" write_output(code, \"php\")\n", |
|
" try:\n", |
|
" run_result = subprocess.run([\"php\", \"optimized.php\"], shell=True, text=True, capture_output=True)\n", |
|
" return run_result.stdout or run_result.stderr\n", |
|
" except subprocess.CalledProcessError as e:\n", |
|
" return f\"An error occurred:\\n{e.stderr}\"\n" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "c127bbc9-ef4d-40e4-871a-85873fc9e406", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"programming_languages = [\n", |
|
" {\"name\": \"C++\", \"extension\": \"cpp\", \"fn\": execute_cpp},\n", |
|
" {\"name\": \"Javascript\", \"extension\": \"js\", \"fn\": execute_js},\n", |
|
" {\"name\": \"Php\", \"extension\": \"php\", \"fn\": execute_php}\n", |
|
"]" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "126636a1-4315-4811-9de9-61ee032effc8", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def create_prog_lang_ui(lang, model):\n", |
|
" prog_name = lang[\"name\"]\n", |
|
" extension = lang[\"extension\"]\n", |
|
" fn = lang[\"fn\"]\n", |
|
"\n", |
|
" with gr.Row():\n", |
|
" with gr.Column():\n", |
|
" convert = gr.Button(f\"Convert to {prog_name}\")\n", |
|
" converted_code = gr.Textbox(label=f\"Converted {prog_name} code:\", lines=10)\n", |
|
"\n", |
|
" with gr.Column():\n", |
|
" prog_run = gr.Button(f\"Run {prog_name}\")\n", |
|
" prog_out = gr.TextArea(label=f\"{prog_name} result:\", elem_classes=[extension])\n", |
|
"\n", |
|
" current_selected = gr.Dropdown([extension], value=extension, visible=False)\n", |
|
" \n", |
|
" convert.click(optimize, inputs=[python, model, current_selected], outputs=[converted_code])\n", |
|
" \n", |
|
" match extension:\n", |
|
" case \"cpp\":\n", |
|
" prog_run.click(execute_cpp, inputs=[converted_code], outputs=[prog_out])\n", |
|
" case \"js\":\n", |
|
" prog_run.click(execute_js, inputs=[converted_code], outputs=[prog_out])\n", |
|
" case \"php\":\n", |
|
" prog_run.click(execute_php, inputs=[converted_code], outputs=[prog_out])\n", |
|
"\n", |
|
"with gr.Blocks(css=css) as ui:\n", |
|
" gr.Markdown(\"## Convert code from Python to selected Programming Language\")\n", |
|
" with gr.Row():\n", |
|
" with gr.Column():\n", |
|
" python = gr.Textbox(label=\"Python code:\", value=python_hard, lines=10)\n", |
|
" with gr.Column():\n", |
|
" python_run = gr.Button(f\"Run Python\")\n", |
|
" python_out = gr.TextArea(label=f\"Python result:\", elem_classes=[\"python\"])\n", |
|
" \n", |
|
" with gr.Row():\n", |
|
" model = gr.Dropdown([\"GPT\", \"Claude\"], label=\"Select model\", value=\"GPT\")\n", |
|
"\n", |
|
" python_run.click(execute_python, inputs=[python], outputs=[python_out]) \n", |
|
"\n", |
|
"\n", |
|
" for lang in programming_languages:\n", |
|
" create_prog_lang_ui(lang, model)\n", |
|
"\n", |
|
"ui.launch(\n", |
|
" # inbrowser=True\n", |
|
")" |
|
] |
|
} |
|
], |
|
"metadata": { |
|
"kernelspec": { |
|
"display_name": "Python [conda env:base] *", |
|
"language": "python", |
|
"name": "conda-base-py" |
|
}, |
|
"language_info": { |
|
"codemirror_mode": { |
|
"name": "ipython", |
|
"version": 3 |
|
}, |
|
"file_extension": ".py", |
|
"mimetype": "text/x-python", |
|
"name": "python", |
|
"nbconvert_exporter": "python", |
|
"pygments_lexer": "ipython3", |
|
"version": "3.12.3" |
|
} |
|
}, |
|
"nbformat": 4, |
|
"nbformat_minor": 5 |
|
}
|
|
|