If you're using deep seek, read this!

An experiment has been done which included a human guided robot doing a surgery. It was successful. However, I wonder in how many ways an AI would mess up any surgery and I pity the victim.

2 Likes

Not sure, how many operations are passed off to lower grade doctors during training ? Or are monday morning, friday afternoons
 when the medical expert is not at his or her best.

When you look now at production lines of cars, motorcycles, computers its all automated using pick and place.

I had key hole surgery about 5 years back and the doctor never touched me it was all done remote with robotic type arms.

2 Likes

These production lines are usually setup to build thousands of the exact same thing, this is why they’re able to automate it. It requires no form of intelligence whatsoever to perform. The only intelligence needed is when something unexpected happen and in setting it up, both of which are human tasks. AI is known to hallucinate. Until that problem is eliminated, it is of little use.

2 Likes

That’s a very bad idea, me too!

1 Like

The difference being that a human being was guiding the robotic devices. I wouldn’t want an AI agent doing the guidance on any surgery I underwent.

Again, an experience surgeon’s taking responsibility, and is overseeing the student/trainee during the surgery.

4 Likes

I agree. Ai may be useful for repetitive tasks, as indicated above, but it should never be relied upon for mission-critical/creative/decision-making tasks.

2 Likes

If the task is 100% repetitive and completely understood, you dont need AI, you can simply program it.
AI, as I understand it, is supposed to be useful for less well defined tasks .

3 Likes

Agreed, but the mission critical, etc. remains in the domain of a human overseer, who observes/approves what the AI decides. Anything else may be risky, if you ask me.

3 Likes

AIs aren’t as perfect as HAL 9000 was portrayed in 2001: a space odyssey, and even that turned out to be a total psychopath.

3 Likes

One of the things I have noticed is that the user interface provided by eg) ChatGPT severely limits what I can ask it to do.
Lets say I had 2000 lines of C code and it has a bug. If I want to ask it why setting a particular combination of starting values leads to a wrong answer, I have to enter the code. There is no way I could do that with ChatGPT

there is a tiny window you type into, and just one linefeed flings it into answer mode.
Am I missing something?
I dont want to ask its opinion, I want it to do some real work and debug some code for me.

2 Likes

Hi Neville

If this helps.

This is what I see.
Seems like use the options below the box.

clicking code gives this

Edit: Seems like ask for debug help first, let it answer then paste code into the small box.

4 Likes

I took the courage, and asked the AI to convert a script, so that it would work on Pipewire.

I forked this some time ago, so not really my script, but I added a number of modifications.
It requires Pulseaudio, and currently does not work with Pipewire.
I already made it partially working with PW, but it still lacks a lot, I’m a little bit struggling
 so out of couriosity wanted to see what that AI could do?

This is what it created from that I have in my Github:

#!/bin/bash

script_dir=$(dirname $(readlink -f $0))

if [[ -z $1 ]]; then
  musicdir="."
else
  musicdir=$1
fi

# Get the client index of Spotify using pactl for PipeWire (should work fine)
spotify=$(pactl list sink-inputs | while read line; do
  [[ -n $(echo $line | grep "index:") ]] && index=$line
  [[ -n $(echo $line | grep Spotify) ]] && echo $index && exit
done | cut -d: -f2)

if [[ -z $spotify ]]; then
  echo "Spotify is not running"
  exit
fi

# Determine if spotify.monitor is already set up in PipeWire
if [[ -z $(pactl list short sinks | grep spotify.monitor) ]]; then
  # Record spotify AND listen to it:
  pactl load-module module-combine-sink sink_name=spotify slaves=Butyok
  # slaves=sinkname, where it really sounds. Adapt it to your system.
fi

# Move Spotify sound output back to default at exit
pasink=$(pactl stat | grep Sink | cut -d: -f2)
trap 'pactl move-sink-input $spotify $pasink' EXIT

# Move Spotify to its own sink so recorded output will not get corrupted
pactl move-sink-input $spotify spotify

$script_dir/notify.sh | while read line
do
  if [[ $line == "__SWITCH__" ]]; then
    killall oggenc 2>/dev/null
    killall parec 2>/dev/null

    if [[ -n $title ]]; then
      vorbiscomment -a tmp.ogg -t "ARTIST=$artist" -t "ALBUM=$album"\
          -t "TITLE=$title" -t "tracknumber=$tracknumber"
      # Sanitize filenames
      saveto="$musicdir/${artist//\/ /}/${album//\/ /}"
      # Include track number in filename
      echo "Saved song $title by $artist to $saveto/$tracknumber - ${title//\/ /}.ogg"
      if [[ ! -a $saveto ]]; then
        mkdir -p "$saveto"
      fi
      # Include track number in filename
      mv tmp.ogg "$saveto/$tracknumber - ${title//\/ /}.ogg"
      if [[ -s cover.jpg ]] && [[ ! -a "$saveto/cover.jpg" ]]; then
        mv cover.jpg "$saveto/cover.jpg"
      fi
      artist=""
      album=""
      title=""
      tracknumber=""
    fi
    echo "RECORDING"
    parec -d spotify.monitor | oggenc -b 256 -o tmp.ogg --raw - 2>/dev/null\
      &disown
    trap 'pactl move-sink-input $spotify $pasink && killall oggenc && killall parec' EXIT

  else
    variant=$(echo "$line"|cut -d= -f1)
    string=$(echo "$line"|cut -d= -f2)
    if [[ $variant == "artist" ]]; then
      artist="$string"
      echo "Artist = $string"
    elif [[ $variant == "title" ]]; then
      title="$string"
      echo "Title = $string"
    elif [[ $variant == "album" ]]; then
      album="$string"
      echo "Album = $string"
    elif [[ $variant == "trackNumber" ]]; then
      # Get the track number from the notification
      tracknumber="$string"
      echo "Track number = $tracknumber"
    fi
  fi
done

Screenshot of our dialog:

Needless to say it doesn’t work at all :smiley:
So when I’ll have the inspiration, I’ll continue to convert it using only NI.
:rofl:

3 Likes

Thank you.
Seems I totally missed that. Old age seems to reduce my ability to take things in.
Lets see what its like at debugging
 it theoretically should be able to find any code bug, provided I give it full information .

1 Like

Try using meld to compare it to your script.
You may be able to spot its mistake if it is not too different.

3 Likes

The mistake is that it replaces
pacmd list-sink-inputs
with
pactl list sink-inputs
as the latter provides a similar functionality which also works with Pipewire, but has a completely different output, which the script has to parse.

Example outputs from both PA and PW systems to parse

PW:

Sink Input #1158
	Driver: PipeWire
	Owner Module: n/a
	Client: 1157
	Sink: 700
	Sample Specification: float32le 2ch 44100Hz
	Channel Map: front-left,front-right
	Format: pcm, format.sample_format = "\"float32le\""  format.rate = "44100"  format.channels = "2"  format.channel_map = "\"front-left,front-right\""
	Corked: no
	Mute: no
	Volume: front-left: 581 /   1% / -123,14 dB,   front-right: 581 /   1% / -123,14 dB
	        balance 0,00
	Buffer Latency: 0 usec
	Sink Latency: 0 usec
	Resample method: PipeWire
	Properties:
		client.api = "pipewire-pulse"
		pulse.server.type = "unix"
		application.name = "spotify"
		application.process.id = "27389"
		application.process.user = "laco"
		application.process.host = "DellG3"
		application.process.binary = "spotify"
		application.language = "hu_HU.UTF-8"
		window.x11.display = ":1"
		application.process.machine_id = "94739ab9c6c446f2bf361f5351421995"
		media.role = "music"
		media.name = "Spotify"
		node.rate = "1/44100"
		node.latency = "8192/44100"
		stream.is-live = "true"
		node.name = "spotify"
		node.want-driver = "true"
		node.autoconnect = "true"
		media.class = "Stream/Output/Audio"
		port.group = "stream.0"
		adapt.follower.spa-node = ""
		object.register = "false"
		factory.id = "7"
		clock.quantum-limit = "8192"
		node.loop.name = "data-loop.0"
		library.name = "audioconvert/libspa-audioconvert"
		client.id = "125"
		object.id = "104"
		object.serial = "1158"
		pulse.attr.maxlength = "4194304"
		pulse.attr.tlength = "640064"
		pulse.attr.prebuf = "0"
		pulse.attr.minreq = "7056"
		node.driver-id = "91"
		module-stream-restore.id = "sink-input-by-media-role:music"

PA:

1 sink input(s) available.
    index: 9
	driver: <protocol-native.c>
	flags: START_CORKED 
	state: RUNNING
	sink: 0 <alsa_output.pci-0000_00_1f.3.analog-stereo>
	volume: front-left: 44394 /  68% / -10.15 dB,   front-right: 44394 /  68% / -10.15 dB
	        balance 0.00
	muted: no
	current latency: 1023.38 ms
	requested latency: 980.00 ms
	sample spec: float32le 2ch 44100Hz
	channel map: front-left,front-right
	             SztereĂł
	resample method: copy
	module: 11
	client: 118 <spotify>
	properties:
		media.role = "music"
		media.name = "Spotify"
		application.name = "spotify"
		native-protocol.peer = "UNIX socket client"
		native-protocol.version = "35"
		application.process.id = "42360"
		application.process.user = "moncsi"
		application.process.host = "moncsi-laptopja"
		application.process.binary = "spotify"
		application.language = "hu_HU.UTF-8"
		window.x11.display = ":0"
		application.process.machine_id = "8aee7cb39dc24c17922ea866a7f090e6"
		application.process.session_id = "2"
		module-stream-restore.id = "sink-input-by-media-role:music"

So a totally different parsing is needed for a PW system.
If you look at the PA output, just parse for “index:”, and any line containing “spotify” after that: the result is the value after “index:”, hence the cut -d: -f2.
It’s simple.
But for PW, we need to parse for node.name, which has to be “spotify”, then what we need really is the object.serial from the same (!!!) node.

This one seems to work reliably (just the relevant snippet from the script):


# Get the client index of Spotify
spotify=$(pactl list sink-inputs | while read line; do
  if [[ -n $(echo $line | grep "node.name") ]]; then
                 name=$(echo $line | awk -F'"' '{print $2}')
                 if [ "$name" != "spotify" ]; then 
                 name=""
                 fi  
  fi
              
  if [ -n "$name" ]; then
                 if [[ -n $(echo $line | grep "object.serial") ]]; then
                       index=$(echo $line | awk -F'"' '{print $2}') 
                       echo $index
                       exit
                 fi     
  fi
done)

How does that compare to the GPT’s conversion? (Relevant snippet):

# Get the client index of Spotify using pactl for PipeWire (should work fine)
spotify=$(pactl list sink-inputs | while read line; do
  [[ -n $(echo $line | grep "index:") ]] && index=$line
  [[ -n $(echo $line | grep Spotify) ]] && echo $index && exit
done | cut -d: -f2)

“Should work fine”, yes should, but doesn’t :smiley:

I still tinker with that script, unti it works fine in every aspect I need (still there’s some fiddling to do).

3 Likes