Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig | |
| from peft import PeftModel | |
| import torch | |
| print("🔄 Model yükleniyor...") | |
| # Model yükle | |
| bnb_config = BitsAndBytesConfig( | |
| load_in_4bit=True, | |
| bnb_4bit_quant_type="nf4", | |
| bnb_4bit_compute_dtype=torch.float16 | |
| ) | |
| base_model = AutoModelForCausalLM.from_pretrained( | |
| "bigcode/starcoder2-3b", | |
| quantization_config=bnb_config, | |
| device_map="auto", | |
| trust_remote_code=True | |
| ) | |
| model = PeftModel.from_pretrained(base_model, "MuratKomurcu/starcoder2-stm32-turkish") | |
| tokenizer = AutoTokenizer.from_pretrained("MuratKomurcu/starcoder2-stm32-turkish") | |
| print("✅ Model hazır!") | |
| def generate_code(project_type, pin_config, parameters, temperature): | |
| """STM32 kodu üret""" | |
| templates = { | |
| "LED Blink": "Write complete STM32F401RE LED blink code with main function", | |
| "UART Communication": "Write complete STM32F401RE UART communication code with main function", | |
| "ADC Reading": "Write complete STM32F401RE ADC reading code with main function", | |
| "PWM Motor Control": "Write complete STM32F401RE PWM motor control code with main function", | |
| "I2C Sensor": "Write complete STM32F401RE I2C sensor code with main function", | |
| "SPI Communication": "Write complete STM32F401RE SPI communication code with main function", | |
| "Timer Interrupt": "Write complete STM32F401RE timer interrupt code with main function", | |
| "Temperature Sensor": "Write complete STM32F401RE temperature sensor reading code with main function", | |
| "Servo Control": "Write complete STM32F401RE servo control code with main function", | |
| "Watchdog Timer": "Write complete STM32F401RE watchdog timer code with main function", | |
| } | |
| instruction = templates.get(project_type, project_type) | |
| input_text = f"{pin_config}, {parameters}, include SystemClock_Config" | |
| prompt = f"""### Instruction: | |
| {instruction} | |
| ### Input: | |
| {input_text} | |
| ### Response: | |
| """ | |
| inputs = tokenizer(prompt, return_tensors="pt").to("cuda") | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=2048, | |
| temperature=temperature, | |
| top_p=0.95, | |
| do_sample=True, | |
| pad_token_id=tokenizer.eos_token_id | |
| ) | |
| code = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| code = code.split("### Response:")[-1].strip() | |
| return code | |
| # GRADIO UI | |
| with gr.Blocks(title="STM32 Code Generator", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown(""" | |
| # 🔧 STM32 HAL Code Generator | |
| ### AI-Powered Embedded Code Generation for STM32F4 | |
| This model generates complete STM32F4 HAL code with **85% accuracy** on realistic projects. | |
| Fine-tuned on 55,000 STM32 examples. | |
| """) | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Markdown("### ⚙️ Configuration") | |
| project = gr.Dropdown( | |
| choices=[ | |
| "LED Blink", | |
| "UART Communication", | |
| "ADC Reading", | |
| "PWM Motor Control", | |
| "I2C Sensor", | |
| "SPI Communication", | |
| "Timer Interrupt", | |
| "Temperature Sensor", | |
| "Servo Control", | |
| "Watchdog Timer" | |
| ], | |
| label="Project Type", | |
| value="LED Blink" | |
| ) | |
| pins = gr.Textbox( | |
| label="Pin Configuration", | |
| placeholder="Example: LED on PA5, Button on PC13", | |
| value="LED on PA5" | |
| ) | |
| params = gr.Textbox( | |
| label="Additional Parameters", | |
| placeholder="Example: blink every 1000ms, with debounce", | |
| value="blink every 1000ms" | |
| ) | |
| temp = gr.Slider( | |
| 0.1, 1.0, | |
| value=0.3, | |
| step=0.1, | |
| label="Temperature (creativity)", | |
| info="Lower = deterministic, Higher = creative" | |
| ) | |
| btn = gr.Button("🚀 Generate Code", variant="primary", size="lg") | |
| with gr.Column(scale=2): | |
| output = gr.Code( | |
| label="Generated STM32 Code", | |
| language="c", | |
| lines=35 | |
| ) | |
| gr.Markdown("### 💡 Example Projects") | |
| gr.Examples( | |
| examples=[ | |
| ["LED Blink", "LED on PA5", "blink every 1000ms", 0.1], | |
| ["UART Communication", "USART2 on PA2 PA3", "115200 baud, transmit Hello World every second", 0.3], | |
| ["Temperature Sensor", "ADC1 Channel 0 on PA0", "LM35 sensor (10mV per °C), display via USART2 every 1000ms", 0.1], | |
| ["PWM Motor Control", "PWM TIM2 Channel 1 on PA5, potentiometer ADC1 on PA0", "control motor speed 0-100%, PWM frequency 1kHz", 0.1], | |
| ["I2C Sensor", "I2C1", "read from device 0x48, transmit via USART2 115200 baud every 1000ms", 0.1], | |
| ], | |
| inputs=[project, pins, params, temp] | |
| ) | |
| btn.click( | |
| fn=generate_code, | |
| inputs=[project, pins, params, temp], | |
| outputs=output | |
| ) | |
| gr.Markdown(""" | |
| --- | |
| **Model:** [MuratKomurcu/starcoder2-stm32-turkish](https://huggingface.co/MuratKomurcu/starcoder2-stm32-turkish) | |
| **Performance:** 17/20 tests passed (85% accuracy) | |
| **Base:** bigcode/starcoder2-3b fine-tuned on 55K STM32 examples | |
| **Created by:** Murat Kömürcü | |
| """) | |
| demo.launch() | |