• Security incident: ISF was recently accessed by intruders. Please change your password, and change it anywhere else you used it. Read more

Merged Artificial Intelligence

There are a good handful of clear cases of AI chatbots unambiguously encouraging delusions and suicidal ideations all the way to the user's death, in the most gleefully sycophantic terms, with ineffective token pushback from their guardrails. They are already 'told' not to encourage suicide and do it anyway. They literally do not know what they are doing.
Electricity literally doesn't know what its doing. Due to ineffective 'guardrails', ~1,000 people per year die from electrocution in the US alone. 144 years of mains electricity supply to consumers and they still can't stop it killing people!

Imagine 1,000 people a year committing suicide because they asked an AI how to do it and it didn't refuse. It would be a disaster for the industry, so the industry will not let that happen. Any new technology has risks that take a while to identify and reduce. AI will probably be much lower risk than other things we take for granted, such as motor cars and firearms (which are clearly not regulated enough to prevent thousands of deaths per year).
 
"the industry" is a fiction, as we have seen: it's entirely possible to have a standalone Chinese LLM running on local hardware and trained without guardrails; it's already being done by scammers
 
Electricity literally doesn't know what its doing. Due to ineffective 'guardrails', ~1,000 people per year die from electrocution in the US alone. 144 years of mains electricity supply to consumers and they still can't stop it killing people!

Imagine 1,000 people a year committing suicide because they asked an AI how to do it and it didn't refuse. It would be a disaster for the industry, so the industry will not let that happen. Any new technology has risks that take a while to identify and reduce. AI will probably be much lower risk than other things we take for granted, such as motor cars and firearms (which are clearly not regulated enough to prevent thousands of deaths per year).
This doesn't make sense. 1k deaths/year hasn't been disastrous for the electricity industry. It hasn't been disastrous for the automobile industry. Why would it be disastrous for the AI industry?
 
This doesn't make sense. 1k deaths/year hasn't been disastrous for the electricity industry. It hasn't been disastrous for the automobile industry. Why would it be disastrous for the AI industry?
The posts above are part of it. There's a huge backlash being stoked by Luddites and trolls, made worse by legitimate complaints. Unlike electricity and motor vehicles the advantages don't (currently) outweigh the fear and loathing. If AI companies don't address this they are sunk. They are already having problems from opposition to AI data centers, and products using AI are being avoided rather than desired. The hype phase is nearly over, and the market collapse that follows will be brutal for those who can't deliver a 'safer' more reliable AI.
 
The tipping point, I think, will be when people realise what tasks LLMs are good at and which tasks they aren't. I wouldn't be surprised if that led to a very large backlash given how much they have been over-hyped. My daughter's at Uni and I asked her if she used AI. She said she did to find papers on a subject (eg - find me papers on how loyalty cards influence footfall in retail premises) but then she reads them to make sure they actually say that. She finds ChatGPT (IIRC) a more reliable search engine than google scholar.
The local LLMs running on consumer hardware will continue to be deprecated by big tech and their lobbyists. The data they can obtain when it's all done in their data centres has enormous commercial and political value.
 
I'm running gemma4:26b locally and have had it do quite a few tasks. For example there is a new feature in Photoshop that will go through your layers and it tries to give them a good name - photoshop folk are notorious for having images with dozens and dozens of layers called things like "Layer 1 copy(23)" and "shape 276" - and on the whole it does a good job. I wondered if I could do something similar with the file names of my own images - I have dozens that will be named something like "puppies cartoon (12)" fine for when I am working on those images but in a month or two I'll have no recall of what exactly is in such a file, so more descriptive filenames would be useful. It took me less than 30 minutes today to get an app that allows me to select multiple files, opens and examines the image, and then generates a new more "meaningful" filename. All from about 3 prompts and all locally run. It's slow as ◊◊◊◊ but then I have a very old PC with a suboptimal for AI graphics card but I do have 32Gb RAM installed.
 
To be fair, a task like that doesn't need to be performant. Something like that I'd be happy to leave running in the background for a day or two. Like my Plex media server identifying the hundreds of movies on my NAS. That does sound useful <glances at photo named <daughter's name>450.jpg>
 
I use ollama, here is the code:

ETA: I've started it running through 30 images from my screenshot folder, be interesting to see how long that takes and whether the filenames will be OK. ETA1: Took 20 minutes to do the 30 images, running in the background as I browsed the web and had a youtube video play. Yeah I could do it quicker myself - if I could force myself to work like a robot. Did I say robot? Fancy me a new thread has been started to talk about robots: https://internationalskeptics.com/forums/threads/robots.380832/

Python:
import os
import re
import threading
import tkinter as tk
from tkinter import filedialog
import customtkinter as ctk
import ollama
from PIL import Image

# Set the visual theme
ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")

class RenamerApp(ctk.CTk):
    def __init__(self):
        super().__init__()

        # Window Configuration
        self.title("AI Image Renamer (with Resolution)")
        self.geometry("600x480")

        # --- UI Elements ---
        self.label = ctk.CTkLabel(self, text="Ollama Image Renamer", font=ctk.CTkFont(size=24, weight="bold"))
        self.label.pack(pady=(20, 10))

        self.desc_label = ctk.CTkLabel(self, text="Renames images with AI description + resolution", font=ctk.CTkFont(size=13))
        self.desc_lar = self.desc_label.pack(pady=(0, 20))

        self.progress = ctk.CTkProgressBar(self, width=500)
        self.progress.set(0)
        self.progress.pack(pady=10)

        self.log_area = ctk.CTkTextbox(self, width=540, height=200, font=ctk.CTkFont(family="Consolas", size=12))
        self.log_area.pack(pady=10, padx=20)
        self.log_area.configure(state="disabled")

        self.btn_select = ctk.CTkButton(self, text="Select Images & Start", command=self.start_process_thread,
                                        width=200, height=40, font=ctk.CTkFont(size=15, weight="bold"))
        self.btn_select.pack(pady=20)

        # Make sure this matches your installed model name exactly!
        self.MODEL_NAME = "gemma4:26b"

    def log(self, message):
        self.log_area.configure(state="normal")
        self.log_area.insert("end", message + "\n")
        self.log_area.see("end")
        self.log_area.configure(state="disabled")
        print(message)

    def sanitize_filename(self, name, max_length=50):
        name = re.sub(r'[^\w\s-]', '', name.lower())
        name = re.sub(r'[\s_]+', '-', name)
        name = re.sub(r'-+', '-', name).strip('-')
        return name[:max_length]

    def start_process_thread(self):
        file_paths = filedialog.askopenfilenames(
            title="Select Images to Rename",
            filetypes=[("Image Files", "*.jpg *.jpeg *.png *.webp *.bmp")]
        )
      
        if not file_paths:
            return

        self.btn_select.configure(state="disabled")
        self.log_area.configure(state="normal")
        self.log_area.delete("1.0", "end")
        self.log_area.configure(state="disabled")
      
        thread = threading.Thread(target=self.process_images, args=(file_paths,), daemon=True)
        thread.start()

    def process_images(self, file_paths):
        total_files = len(file_paths)
        self.log(f"Starting processing of {total_files} files...")
      
        for i, old_path in enumerate(file_paths):
            try:
                filename = os.path.basename(old_path)
                self.log(f"Analyzing: {filename}")

                # Get Resolution using Pillow
                with Image.open(old_path) as img:
                    width, height = img.size
                    res_str = f"{width}x{height}"
              
                # Prepare bytes for Ollama
                with open(old_path, 'rb') as f:
                    img_bytes = f.read()

                prompt = (
                    "Describe the main subject of this image in 2 to 5 words. "
                    "Return ONLY the words separated by hyphens. No spaces, no special characters."
                )

                # Call Ollama
                response = ollama.generate(
                    model=self.MODEL_NAME,
                    prompt=prompt,
                    images=[img_bytes]
                )

                ai_output = response['response'].strip()
              
                # Clean the AI name
                safe_name = self.sanitize_filename(ai_output)
                if not safe_name:
                    safe_name = "unnamed-image"
              
                # Combine Name + Resolution
                final_base_name = f"{safe_name} {res_str}"
                  
                directory = os.path.dirname(old_path)
                ext = os.path.splitext(old_path)[1].lower()
                new_path = os.path.join(directory, f"{final_base_name}{ext}")

                # Collision handling
                counter = 1
                while os.path.exists(new_path) and new_path != old_path:
                    new_path = os.path.join(directory, f"{final_base_name}-{counter}{ext}")
                    counter += 1

                if old_path != new_path:
                    os.rename(old_path, new_path)
                    self.log(f"  -> Renamed to: {os.path.basename(new_path)}")
                else:
                    self.log("  -> Already correctly named.")

            except Exception as e:
                self.log(f"  -> ERROR: {str(e)}")

            # Update Progress Bar
            progress_val = (i + 1) / total_files
            self.progress.set(progress_val)

        self.log("\n--- ALL TASKS COMPLETE ---")
        self.btn_select.configure(state="normal")

if __name__ == "__main__":
    app = RenamerApp()
    app.mainloop()
 
Last edited:
Electricity literally doesn't know what its doing. Due to ineffective 'guardrails', ~1,000 people per year die from electrocution in the US alone. 144 years of mains electricity supply to consumers and they still can't stop it killing people!
......Okay but we remember how ridiculously dangerous and ◊◊◊◊◊◊ up the original attempts at rolling out household electricity were, before the industry figured out what was necessary to make it only kill people occasionally, right?

Those who said '◊◊◊◊ no I don't want to put live wires in my house that ◊◊◊◊ will kill your family and set you on fire' during the growing pains phase were RIGHT.

Also you want a rate of injury that's sane relative to the rate of USE. 1000/yr is a good number for a harnessed deadly force used by 350 million people. (Also, lightning strikes are included in that 1000. I don't think those are the industry's fault.)

Honestly if people respected AI as something that was as potentially deadly as ELECTRICITY I would feel a LOT better. You still can't stop people from trying to make Lichtenberg burning setups but at least most people understand that what you don't know about using electricity safely can kill you.
 
Last edited:
The main problem with local LLMs is the training data. ChatGPT and Gemini are constantly fed stuff from the internet, and for Gemini it's more or less on free bandwidth since Google has to index those pages for its search anyway. The data provided with any local model I've tried is not even within a couple of orders of magnitude. And I've seen one where I was supposed to train it myself. Ha ha, nope.
 
The main problem with local LLMs is the training data. ChatGPT and Gemini are constantly fed stuff from the internet, and for Gemini it's more or less on free bandwidth since Google has to index those pages for its search anyway. The data provided with any local model I've tried is not even within a couple of orders of magnitude. And I've seen one where I was supposed to train it myself. Ha ha, nope.
You don't need to be that much up to date. And LLMs these days do web search for almost every query. LLM doesn't need to know thing. It needs to know how to get the information.
 
You don't need to be that much up to date. And LLMs these days do web search for almost every query. LLM doesn't need to know thing. It needs to know how to get the information.
And can look up many different sources in a much shorter amount of time than any human could. At least, that's the idea.
 
I feel like adding a local LLM in front of googling the data is just an unnecessary extra step. Google already uses Gemini in those searches, and can give you the AI summary anyway. And if you mean instead of Gemini, as in, we return to year 2000 level of Google search, and we just all use local LLMs, that would be a monumental waste of time, bandwidth and electricity, in downloading enough to make an informed guess of which pages are even relevant.

Doubly so for AI tasks that aren't just about stringing words. E.g., for generating images. E.g., I've actually used AWS's AI speech to text in a program. That's where I stumbled upon a local one which expected me to train it. Good luck googling on the fly what that collection of phonemes is.

Plus it kinda misses the point of what an LLM is. The clue is in the name. If you don't actually have and use that large model, then it's just a dumb old program for generating google queries.
 
My local qwen3.6 LLM is getting rather uppity - it's just thrown this at me:

The error happens because you're trying to use self.log_text.yview before actually creating self.log_text. In Python, you must define the variable before you try to reference it in another line of code within the same function.​

Excuse me‽ I've not wrote one iota of that code - that is all you!
 
My local qwen3.6 LLM is getting rather uppity - it's just thrown this at me:

The error happens because you're trying to use self.log_text.yview before actually creating self.log_text. In Python, you must define the variable before you try to reference it in another line of code within the same function.​

Excuse me‽ I've not wrote one iota of that code - that is all you!
Maybe its pronoun is "you"?
 
An interesting take
tl;dr - he argues that recruiters have been recruiting people who have memorised solutions to known problems and can match problems to them. A couple of interviews years back seem to kind of fit this pattern. This means they are predisposed to AI solutions as they are more of the same.

 
Last edited:

ISF - Join now!

Every member here is approved by hand. No bots, no spam, just people who care about evidence and honest debate.

Membership is free!

Create your free account

Back
Top Bottom