I can't give you much advice about Claude or Copilot since I refuse to use either, but I do use open weight models which I can run on my own hardware.
If you're interested in exploring LLMs from that angle, download llama.cpp and some models that'll fit on whatever hardware you've got and start poking at it. I got started a few months back, and it's been an interesting experience. llama-server (which is one of the tools that comes with llama.cpp) includes a web UI. You can also use llama-cli on the command-line (but that gets old pretty quick).
Gemma and Qwen are the two most popular open weight model families right now since they're small enough to run on local hardware and give good enough results that they can be useful.
I've found them to be useful for:
- debugging assistance (e.g. Qwen often points out typos I've made in Python scripts that would've taken me a while to find otherwise)
- brainstorming (think: interactive rubber ducky you can bounce ideas off of -- set a system prompt telling it NOT to give you code though unless you explicitly ask for it for this use case; they're too eager to write code otherwise)
- OCR
- natural language to JSON data extraction (e.g. here's an email, here's a reference table, here's an example of what I want, extract the data from the email into similar JSON...)
- prototyping web UIs (e.g. here's the HTML skeleton for [insert project here], write CSS to style it; here's a screenshot of how it looks now, fix the bug that causes [issue] in the CSS; iterate)
- light scripting (e.g. straightforward but tedious tasks that can be handled by a ~100 line or less Python script)
- quick search/snippet generation for things that I would've done by Googling for a link to documentation/stackoverflow a few years ago -- this works well enough for webdev questions; YMMV with other subjects
- answering questions based on reference data buried somewhere in a PDF
If you try to do batch processing with them, it's helpful to think about them like a flaky distributed system -- i.e. use timeouts, retries, error handling mechanisms that account for invalid output, etc.