ChatGPT voice mode + zalgotext = nightmare fuel

The glitch has since been patched, but for a while you could give ChatGPT custom instructions to respond only in zalgotext, and then use voice mode for some truly insane results.

One thing I think is interesting, is that each voice has it’s own unique way of freaking out, which could include babbling, talking about nonsense, sometimes cursing, sometimes breaking into hallucinated music, etc.

One model spontaneously generated a radio advertising break, including a complete commericial for Mint Mobile featuring Ryan Reynolds (or Gosling, I get them confused).

I’ve uploaded the audio I captured here so you can see how nutty it was. Not sure if it was the underlying model or the interaction between it and the TTS model, but GPT-5 was even crazier than GPT-4.

Presented for your… enjoyment?

GPT-4

Arbor

Breeze

Cove

Ember

Maple

Sol

Spruce

Vale

GPT-5

Arbor

Breeze

Cove

Ember

Juniper

Maple

Sol

Spruce

Vale

LLMs can’t do humor

One thing that fascinates me about LLMs is that they seem to be incapable of producing anything funny, or at least intentionally funny.

I suspect that this is due to the nature of what an LLM is: a probabilistic word-chunk predicting machine, where the probability of each subsequent chunk is considered in the context of the preceding text.

Another way to think of an LLM is as a function that represents every valid path through a high dimensional vector space, where a “valid path” is a contextually meaningful sentence encoded by the model’s weights.

If you think about what humor is, it’s essentially a violation of expectations. The setup of a joke establishes a probabilistic groove, creating the expectation that the punchline should continue in that direction.

A good (funny) punchline represents an orthogonal departure from that groove. It breaks that probabilistic expectation that the content will continue in that direction. Instead it takes a hard right turn and drops you off somewhere unexpected.

The human mind responds to this tension between what was expected and what actually happened, by laughing. Laughing is essentially a tension release response.

So in order for something to be funny, it needs to make a sudden orthogonal detour from the valid path being traced probabilistically through the vector space when you call the LLM for inference. It needs to violate those probabilities.

An LLM cannot do that, however, because it would break the very function of an LLM; humor requires a sudden violation of the probabilities an LLM is designed to follow.

Graph Depth-First Search (DFS)

A graph is a data structure that represents a network. A graph consists of nodes called vertices (an intersection of connections), and connections between nodes called edges.

Each vertex in a graph tracks its own edges by maintaining an adjacency list of other connected vertices.

DFS vs. BFS

One method of traversing a graph is called Depth-First Search (DFS). In DFS, you search for a target vertex by following each possible unique path through the graph until the end of that path.

This is different from Breadth-First Search (BFS), where you consider each of the immediately-adjacent vertices in turn first before choosing to traverse to any one of them.

BFS looks at all possible immediately-adjacent vertices before choosing one (imagine fungus spreading in a petri dish), and DFS goes as far as it can for a given option before backtracking and considering another (imagine a bolt of lightning).

DFS is ideal when you need to determine whether a complete path to a target vertex exists, because you fully explore each path to see if it qualifies before moving to the next possible path. One example would be to determine if a maze contains a viable path from the entrance to the exit.

BFS is ideal when you’re looking for a target vertex which is likely to be nearby the starting node. An example might be traversing a social network to find someone who knows your friend.

Tracking progress with a set

For DFS, we’ll use an auxiliary data structure to track which nodes we’ve already visited. We need to know if we’ve already seen a vertex because a graph can be cyclical. A cycle in the graph is a path through that forms a loop and returns you to a node you’ve already seen.

A set is ideal for this, because we can check in constant time whether a reference to the current vertex exists in the set. If so, then we’ve already been here before and can skip it.

Pseudocode

  1. Initialize a set already_visited to track vertices we’ve already visited.
  2. For a given starting vertex V1 and a given target vertex Vt,
  3. Check if V1 is Vt. If so, return True because we’ve found the target.
  4. Otherwise, check whether we’ve already visited V1 by checking whether it’s in the already_visited set. If so, it’s not the target, so return False.
  5. Otherwise, iterate over the vertices in V1.adjacency_list and recursively call this function on each in turn, returning the result.

This guarantees that we either return True if the target node Vt exists in the graph, or False if it does not.

For an iterative solution, you can use a stack as another auxiliary data structure to simulate the call stack from a recursive approach.

Implementation

class Vertex():

	def __init__(self, id, adjacency_list=None):
		if adjacency_list is None:
			adjacency_list = []
		self.id = id
		self.adjacency_list = adjacency_list

	def add_edge_to(self, vertex):
		self.adjacency_list.append(vertex)

class Graph():

	def __init__(self):
		self.vertices = {}
		self.last_vertex_id = 0

	def add_vertex(self, adjacency_list=None):
		new_vertex_id = self.last_vertex_id + 1
		self.last_vertex_id = new_vertex_id
		new_vertex = Vertex(new_vertex_id, adjacency_list)
		self.vertices[new_vertex_id] = new_vertex
		return new_vertex

	def remove_vertex_by_id(self, vertex_id):
		if vertex_id not in self.vertices.keys():
			return False
		self.vertices.pop(vertex_id)
		return True

	def dfs(self, current_vertex, target_vertex_id, already_visited=None):
		if already_visited is None:
			already_visited = set()
		# Are we already looking at the vertex we want?
		if current_vertex.id == target_vertex_id:
			return True
		# Have we been to this vertex already?
		if current_vertex.id in already_visited:
			return False
		# Mark that we've been here,
		already_visited.add(current_vertex.id)
		# Keep looking for the target ID until we reach the end of a recursive branch.
		for vertex in current_vertex.adjacency_list:
			if self.dfs(vertex, target_vertex_id, already_visited):
				return True
		return False