Intelligent agents for simulations (using LLMs) #1

Next part (2)


A week ago I came across this damned paper (Generative Agents: Interactive Simulacra of Human Behavior). Also check out this explanation of the paper and its implementation. I called the paper damned because the moment I understood its possibilities (creating intelligent virtual agents has always been a dream of mine), the spark of obsession flared up in me, and for someone this obsessive, that could only mean one thing:

I figured that I was capable enough of implementing that paper using the Python programming language. In my first try, I thrust ahead, with very few unit tests, to implement the memories database, the planning and reflective functionalities, as well as the navigation system. It was when I hit the paper’s promise that GPT-3.5-turbo was going to be able to output the name of the chosen destination when I realized that the writers of the paper must have simplified the process of navigation (if not finagled it quite a bit), because large language models don’t work like that. And without the agents being able to move around in the environment tree, this system wouldn’t work remotely as intended.

I gave it some thought and I ended up opting for utility functions. Used in basic AI for decades, utility functions output a rating value between a bunch of options, from which the code ends up choosing the best rated option (with some room for randomness). Thankfully, if you ask GPT-3.5-turbo to give a rating for how well a “farmhouse” would fit the purpose of “eating lunch”, then that location may be chosen, and from there you could ask the AI to rate the individual locations of the farmhouse to continue the path.

Implementing the navigation of the agents in such a way gave me the opportunity to start the code from scratch. This time I relied mostly on test-driven development (meaning that one or more unit tests support the part of the code you are working on), very important for a system that can suffer from plenty of regressions. I have 51 unit tests supporting the code so far.

Before I delve into further details, here’s the link to my GitHub repository with all the code I have written.

Here’s as far as I’ve gotten:

  • The user writes the environment of the simulation in a json file. I’m using the Python library ‘anytree’ to represent the graph, which also comes with this fancy command-line method of displaying any given graph:

Location: plot of land (plot_of_land)
├── Location: barn (barn)
│ └── Sandbox object: tools (tools) | description: lots of tools for farming
├── Location: field (field)
│ ├── Sandbox object: crop of corn (corn_crop) | description: a crop of growing corn
│ └── Sandbox object: crop of potatoes (potatoes_crop) | description: a crop of growing potatoes
└── Location: farmhouse (farmhouse)
├── Location: bedroom (bedroom)
│ ├── Sandbox object: bed (bed) | description: a piece of furniture where people sleep
│ └── Sandbox object: desk (desk) | description: a piece of furniture where a person can read or write comfortably
├── Location: kitchen (kitchen)
│ └── Sandbox object: fridge (fridge) | description: an appliance that keeps food cold
└── Location: bathroom (bathroom)
├── Sandbox object: toilet (toilet) | description: a simple toilet
└── Sandbox object: bathtub (bathtub) | description: a tub in which to take baths

  • For this test, I pictured a farmhouse, a nearby barn, and a couple of nearby crops.
  • I added in the corresponding json file the needed information for the agents involved:

{
“Joel”: {
“age”: 38,
“planned_action”: null,
“action_status”: null,
“current_location_node”: “farmhouse”,
“destination_node”: null,
“using_object”: null
},
“Betty”: {
“age”: 24,
“planned_action”: null,
“action_status”: null,
“current_location_node”: “farmhouse”,
“destination_node”: null,
“using_object”: null
}
}

  • As depicted, agents can have a planned action, an action status, their current location, their destination, and what object they are using, apart from their age and name.
  • As the paper says, each agent’s memories are seeded from a few memories that are written in a simple text file.

Betty started living with Joel six years ago;Betty enjoys planting crops and tending to them;Betty wishes that she and her boyfriend Joel could afford to buy a few horses;Betty wishes she didn’t have to travel to the nearby town often;Betty loves peace and quiet;When Betty feels overwhelmed, she lies down on her bed and listens to ASMR through her noise-cancelling headphones;Betty wants to have a child, hopefully a daughter, but Joel told her years ago that he didn’t want children;Joel and Betty saw strange lights in the skies in the 11th of May of 2023;On the 11th of May of 2023, the local news broadcast was cut off in the middle of a transmission as they were reporting on the strange lights in the sky;Joel and Betty have heard ominous explosions in the distance throughout the morning of the 12th of May of 2023

Joel is a farmer who has lived in his plot of land for ten years;Joel is living with his girlfriend, Betty, whom he loves;Joel enjoys listening to music from the sixties;Joel wishes he and Betty could buy a few horses, but he doesn’t think they can afford them;Joel and Betty saw strange lights in the skies in the 11th of May of 2023;On the 11th of May of 2023, the local news broadcast was cut off in the middle of a transmission as they were reporting on the strange lights in the sky;Joel and Betty have heard ominous explosions in the distance throughout the morning of the 12th of May of 2023

  • These seed memories are inserted into a memories database. Its implementation is one of the most important parts of this system. The database is composed of a vector database (which stores values according to some eldritch, multidimensional distance between them), and a json file that records readable values of those memories. You can query the vector database with simple text, and it will return the most relevant text it contains regarding the query you sent it. Sort of like a recommendation system.
  • In addition, when a query is made to the agents’ memories, they are rated according to the memory’s importance and recency. The recency is a normalized value in the range of [0.0, 1.0] depending on when that memory was accessed last, and importance is a rating that the AI itself gave to how poignant the memory was.
  • Once the agents are loaded in the simulation, a character summary is created for each agent. The AI is prompted to write all the segments of these summaries only from the memories present in their vector databases.

Joel’s AI-written character summary

Joel (age: 38)

Innate traits: Hardworking, resilient, curious, observant, caring, nostalgic, pragmatic.

Joel is a farmer who has lived in his plot of land for ten years and wishes he and Betty could buy a few horses, but he doesn’t think they can afford them. He enjoys listening to music from the sixties and is living with his girlfriend, Betty, whom he loves. They have experienced ominous explosions in the distance and saw strange lights in the skies on the 11th of May of 2023, and the local news broadcast was cut off in the middle of a transmission as they were reporting on the strange lights.

Joel is a farmer who has lived in his plot of land for ten years.

It is difficult to accurately describe Joel’s overall feeling about his recent progress in life based on these statements alone. However, we can infer that he enjoys listening to old music, has heard ominous explosions and seen strange lights with Betty, is a farmer, loves his girlfriend, and wishes they could afford to buy horses. These statements do not provide enough information to determine his overall feelings about his recent progress in life.”

Betty’s AI-written character summary

Betty (age: 24)

Innate traits: resilient, domestic, nurturing, longing, introverted, anxious, curious, intuitive, calm

Betty is a woman who enjoys living a peaceful and simple life with her partner Joel. She is interested in farming and wishes to own horses. Betty also has a desire to have a child, but this conflicts with Joel’s wishes. She dislikes having to travel to nearby towns and finds solace in listening to ASMR when she feels overwhelmed. Betty is aware of strange occurrences happening around her, such as explosions and lights in the sky, but she seems to maintain a calm and composed demeanor.

Betty is a homesteader or a farmer.

Betty is feeling somewhat unsettled and uncertain about her progress in life, as indicated by her mixed feelings about her living situation with Joel, her desire for a more stable and fulfilling life with horses and a child, and her occasional need for escapist relaxation techniques like ASMR. She enjoys the sense of purpose that comes from tending to her crops, but is also wary of the potential dangers and disruptions of the outside world, as shown by the ominous sounds and sightings of explosions and strange lights in the sky. Overall, she seems to value the simple pleasures of a quiet country life, but is also aware of the limitations and difficulties of this lifestyle.

  • If the simulation detects that the agents haven’t decided upon an action, it generates one through a complicated process.

2023-05-13T09:30:00 Joel produced action: Saturday May 13 of 2023, 9 AM. Joel is going to check with his neighbors to see if they have any information about the strange lights and ominous explosions they have been experiencing. The length of time it takes for Joel to check with his neighbors is not specified, so it is impossible to provide an answer in minutes.

2023-05-13T09:30:00 Betty produced action: Saturday May 13 of 2023, 9 AM. Betty is going to talk to Joel about their conflicting desires regarding having a child and try to come to a mutual understanding or compromise. The duration of this action is not specified in the given information. It can vary based on the discussion and resolution reached by Betty and Joel.

  • The AI model (GPT-3.5-turbo in this case) went over each agent’s memories and decided what action the agents would take, according to their circumstances. A problem with the paper’s original implementation already comes up: the agents decide a plan, then they search for the most fitting location, and then object, to fulfill that plan. But in this case, the AI decided that Joel should check with his neighbors to see if they have any information about weird happenings. But there are no neighbors in this environment. In addition, Betty decided that she wants to talk to Joel, but the paper doesn’t offer a system of locating other agents that may not be in the immediate surroundings. There’s a system for dialogue, but I haven’t gotten that far.
  • Through the rating system for locations and objects (going from the root of the environment tree deeper and deeper), Joel came to this conclusion about what should be his destination given the action he came up with:

2023-05-13T09:30:00 Joel changed destination node to: Node(‘/Location: plot of land (plot_of_land)/Location: farmhouse (farmhouse)/Location: kitchen (kitchen)/Sandbox object: fridge (fridge) | description: an appliance that keeps food cold’)

  • Apparently Joel (therefore, the AI model) thought that the neighbors could be found in the fridge. From the root of the environment tree, between the choices of “farmhouse”, “barn” and “crops”, obviously farmhouse was the most adequate option to find people. Inside that house, it opted for the kitchen between all the possible rooms. Inside there was only a fridge, so the navigation system had no choice but to choose that. If I had added a telephone in the kitchen, the AI model likely would have chosen that instead to communicate with the neighbors.
  • Regarding Betty, to fulfill her action of talking to Joel, she chose the following destination:

2023-05-13T09:30:00 Betty changed destination node to: Node(‘/Location: plot of land (plot_of_land)/Location: barn (barn)/Sandbox object: tools (tools) | description: lots of tools for farming’)

  • Interestingly enough, the AI model believed that her farmer husband was more likely to be in the barn than in the farmhouse. Once the barn was chosen, the tools were the only option as to which object would help the agent fulfill her action.
  • The navigation system detected that the agents weren’t at their destination, so it started moving them:

2023-05-13T09:30:00 Joel needs to move to: Node(‘/Location: plot of land (plot_of_land)/Location: farmhouse (farmhouse)/Location: kitchen (kitchen)/Sandbox object: fridge (fridge) | description: an appliance that keeps food cold’)
2023-05-13T09:30:00 Joel changed the action status to: Joel is heading to use fridge (located in Location: kitchen (kitchen)), due to the following action: Saturday May 13 of 2023, 9 AM. Joel is going to check with his neighbors to see if they have any information about the strange lights and ominous explosions they have been experiencing. The length of time it takes for Joel to check with his neighbors is not specified, so it is impossible to provide an answer in minutes.

2023-05-13T09:30:00 Betty needs to move to: Node(‘/Location: plot of land (plot_of_land)/Location: barn (barn)/Sandbox object: tools (tools) | description: lots of tools for farming’)
2023-05-13T09:30:00 Betty changed the action status to: Betty is heading to use tools (located in Location: barn (barn)), due to the following action: Saturday May 13 of 2023, 9 AM. Betty is going to talk to Joel about their conflicting desires regarding having a child and try to come to a mutual understanding or compromise. The duration of this action is not specified in the given information. It can vary based on the discussion and resolution reached by Betty and Joel.

  • The simulation advances in steps of a specified amount of time, in this case thirty minutes, and the navigation system will move the agents a single location each step. This means that an agent would take thirty minutes to move from a bedroom to the entrance of the same house, but whatever.

2023-05-13T10:00:00 Joel changed the current location node to: Node(‘/Location: plot of land (plot_of_land)/Location: farmhouse (farmhouse)/Location: kitchen (kitchen)’)
2023-05-13T10:00:00 Joel changed the current location node to: Node(‘/Location: plot of land (plot_of_land)/Location: farmhouse (farmhouse)/Location: kitchen (kitchen)/Sandbox object: fridge (fridge) | description: a piece of furniture that keeps food cold’)

  • Joel moved from the entrance of the farmhouse to the kitchen, and once the agent is in the same location as his or her destination sandbox object, he or she starts using it. In this case, the fridge.

2023-05-13T10:00:00 Betty changed the current location node to: Node(‘/Location: plot of land (plot_of_land)’)

  • Betty has moved from the farmhouse to the root of the environment tree.
  • In the next step of the simulation, Joel continues using the fridge, while Betty moves further to the barn, where she starts using the tools:

2023-05-13T10:30:00 Joel continues using object: Node(‘/Sandbox object: fridge (fridge) | description: a piece of furniture that keeps food cold’)
2023-05-13T10:30:00 Betty changed the current location node to: Node(‘/Location: plot of land (plot_of_land)/Location: barn (barn)’)
2023-05-13T10:30:00 Betty changed the current location node to: Node(‘/Location: plot of land (plot_of_land)/Location: barn (barn)/Sandbox object: tools (tools) | description: lots of tools for farming’)

  • From then on, the agents will continue using the tools they have chosen to perform their actions:

2023-05-13T11:00:00 Joel continues using object: Node(‘/Sandbox object: fridge (fridge) | description: a piece of furniture that keeps food cold’)
2023-05-13T11:00:00 Betty continues using object: Node(‘/Sandbox object: tools (tools) | description: lots of tools for farming’)
2023-05-13T11:30:00 Joel continues using object: Node(‘/Sandbox object: fridge (fridge) | description: a piece of furniture that keeps food cold’)
2023-05-13T11:30:00 Betty continues using object: Node(‘/Sandbox object: tools (tools) | description: lots of tools for farming’)
2023-05-13T12:00:00 Joel continues using object: Node(‘/Sandbox object: fridge (fridge) | description: a piece of furniture that keeps food cold’)
2023-05-13T12:00:00 Betty continues using object: Node(‘/Sandbox object: tools (tools) | description: lots of tools for farming’)

That’s unfortunately as far as I’ve gotten with my implementation, even though it took me a week. The paper explains more systems:

  • Observation: as the agents use the objects, they are prompted with observations about what other objects in the same location are doing, and about the other agents that may have entered the location. That gives the busy agent an opportunity to stop what they’re doing and engage with other objects or agents.
  • Dialogue: the paper came up with an intriguing dialogue system that became one of my main reasons for programming this, but it requires the Observation system to be implemented fully.
  • Planning: once a day, the agents should come up with day-long plans that will be stored in memory, and that will influence the actions taken.
  • Reflection: when some condition is triggered, the agents retrieve the hundred most recent memories from their databases, and prompt the AI model to create high-level reflections of those memories. The reflections will be stored in the memory stream as well, so that they influence their planning, their decision-taking, as well as the creation of further reflections.

That’s as far as I remember of the paper at this moment. I wanted to get the navigation system done as early as possible, because I considered it the hardest part, and it annoyed the hell out of me partly due to how Python handles references (at one point I was losing the list of ancestors and descendants of the agents’ destination nodes between simple function calls to the same instance of Simulation, for no fucking reason that I could determine). I may move directly onto the Observation system, or take a rest. I already feel my sanity slipping quite a bit, likely because I took a sabbatical from my ongoing novel to do this.

We’re Fucked, Pt. 98: AI-generated audiochapter

No matter how grimy the material, AI voices will dutifully perform my chapters to completion, in this case chapter 98.

Cast

  • Leire: a greedy thief who offers you jobs at the Ragged Flagon in Riften
  • Alberto the blob: best voiced Argonians, from back in Cyrodiil
  • Jacqueline: the real Triss, redhead goddess

I have produced audiochapters for this entire sequence so far. A total of an hour, forty-nine minutes and nineteen seconds. Check them out.

We’re Fucked, Pt. 98 (Fiction)


I’m drifting back toward lucidity. I avoid meeting my gaze in the rain-slicked windowpane as I blink away the residual stardust. My brain registers again the noxious reek that’s invading my nostrils, that must have coated my clothes and hair and skin: mouldering corpses mixed with sewage festering in a latrine pit. The lump in my throat subsides enough for me to speak, though my voice is shaky and broken.

“Perhaps the nurses that assisted in my birth made a mistake. They didn’t prepare the umbilical cord right before cutting me away from my mother.”

“I can barely hear you,” the blob complains impatiently. “Unless you’re mumbling to yourself, speak towards your audience.”

I grit my teeth. After I wipe a couple of tears with the back of my hand, I swivel around in Jacqueline’s chair.

The wall-wide bulk of jellified, tar-black flesh looms at the opposite end of the office, looking like it crawled out of a swamp. The skewed reflections of the fluorescent light fixtures seem tattooed on the blob’s dozens of polished eyeballs.

I take a deep breath, and feel the stench of decay fill my lungs.

“I was thinking of everything that has gone wrong with me.”

“Don’t you do that often enough?”

“Most of the time; my brain makes sure of that. Close to my birth, still a drooling infant, I devolved into a trash heap of toxic waste, a vessel for desire and obsession, driven by uncontrollable impulses. When I could walk and talk and go to the toilet by myself, I became an unkempt houseplant withering in a corner. Anxiety consumed my insides like bowel cancer, and I wondered from where all my shit-ridden thoughts were emanating. As my tits developed, I had been living for years in a glass prison. A void within me, a gaping abyss that had never known warmth, swallowed everything good about life, leaving in its place a desolate, desecrated ruin. I had no clue how I was going to survive in this society. Should I have joined a war to fight for some obscure tribe or king? That would have been easier than attempting to endure broken-hearted in a world full of savages. I knew that no matter how much time passed, nothing would improve my life, and every night, when I lay down to sleep, I dreaded the incoming sequence of nightmares that would entrap me naked in a maze of tunnels infested with well-hung monsters, who salivated as they pawed at their genitals.”

A wave of nausea sweeps through me as if I were puking up my guts in slo-mo. I hunch over, resting my elbow on my knee. I wipe away the slime seeping from my forehead. I’m boiling with the self-loathing that gurgles in my stomach, and my mouth has become a well of vitriol ready to spill out with each ragged breath.

“The shrinks kept me blabbing to pocket my money,” I continue in a choked voice, “so I started my own therapy through masturbation. If I couldn’t love another human being, at least I would become a machine of self-diddling. I have spent hours upon hours of my spare time, and of any time I could steal from work, rubbing my clit or shoving into my depths rubbery contraptions that I found in alleyways or dumpsters, soaking my bedsheets and the chair cushions in a flood of warm secretions, because those few seconds of bliss numbed my heartache, and gifted me a break from the onslaught of intrusive thoughts and flashbacks with which my brain terrorizes me. I burn with an unquenchable thirst for sexual debauchery and depravity, no matter how perverse. Sex is my religion, masturbation is my ritual, and I’m the high priestess of this cult. My record is fifteen orgasms in one day, although I suspect that some adventurous women out there would ridicule my achievement. Anyway, at times I suspected that alien parasites had hijacked my cerebrum, brainstem and cerebellum to feed off the dopamine secreted during my bouts of auto-arousal. I wished I were strong enough to claw my face open so I could unspool the parasites and liberate my mind. After all, as soon as the itch in my vagina subsided, my depression grew again. I was regularly kidnapped away to flashbacks in which my kid self cowered in a corner, hugging her knees, sobbing, while monsters crept closer. Their hooves clopped on the floorboards. I felt the heat radiating off their hideous flesh. When I blinked back to reality, I found myself as a miserable aging woman detached from anything and anyone, a walking reservoir of self-hate that over the years had bubbled up into a tide of tar eager to consume the world. Most days, instead of facing more anguish, I would have rather entered the cosmic urinal through self-deconstruction, if you get my drift. Hell, I should have spontaneously combusted from self-loathing alone. We’re all going to disappear anyway, right? If not by our own hands, then by a pandemic, a nuclear war, a zombie apocalypse, supervolcanoes erupting, meteors plummeting out of the heavens… So we may as well hurry up and plunge into oblivion, let the abyss squeeze us dry of life’s little droplets until everything turns to dust. Many nights, as I lay face up, I gave my heart permission to shut down in my sleep, to spare me the torment. How could I make plans or care for my hereafter when I resented that I was born? But one day, a woman’s voice called to me from behind the mist on the horizon: ‘It doesn’t matter how old you are, how fucked up your life may be. I will take away your loneliness. I will save you from drowning.’ One organism had dared to reach out and touch my begrimed soul. Jacqueline,” I say, my voice cracking as I speak mommy’s holy name. “She ran through me like a full-bodied orgasm from all the ends of the universe. However, even mommy with her boundless love can’t glue together a broken vase that’s missing half of its pieces, so apart from those times when I find solace in Jacqueline’s ample bosom, I remain a wreck, an insufferable mess with no sense of direction, dignity, or decorum. I crave being ravaged; I yearn for little else than to be devoured, bones and all, by someone I could adore.”

The office falls silent, save for the rhythmic drumming of rain against the windowpanes. Using the back of my shirtsleeve, I wipe away a few tears trailing down my cheeks and a glob of snot clinging to my upper lip. The blob’s psychotropic gas keeps assaulting me. I thought he was allowing my words to sink into his slimy bulk, but when he speaks, his voice oozes with contempt.

“Is that all?”

I open my mouth, eager to deliver the coup de grâce, but I end up sputtering inarticulate mumbles instead.

“I… suppose so. It seems I have run dry of words.” I rub my throat. “I’ve gotten hoarse, too.”

“Get over yourself, you neurotic coward, you irresponsible cretin, you mental cripple who spends company money staring at horse penises!”

“I-I was only curious about how long they get.”

“I need a serious shower after listening to you moan like an aborted foal.”

I cross my arms.

“You do need a shower, although you’ll end up as a pile of eyeballs blocking the drain. Maybe you’re just a revolting monster incapable of understanding human suffering.”

“You’re too much of an asshole for me to feel sorry. My life was also riddled with setbacks and calamities, but look at me now!”

“You should have used ‘and,’ not ‘but.'”

A guttural chuckle reverberates from deep within the blob, sending ripples of tar-black slime across its mass.

“You think I haven’t caught up to your shtick?”

I suppress a shiver.

“Don’t know what you’re talking about, bro.”

“You navigate the world by arousing pity in the idiots that fall for your act. That’s what worked with Jacqueline, wasn’t it? That’s what gets you laid and keeps you from killing yourself.”

A flash of rage ignites inside me. I leap from the chair, then I jab my trembling finger at the blob as I offer him the most feral look I can muster.

“Hey, don’t involve mommy in this fight, you globulous gasbag!”

The blob snorts.

“You’re mad because the snot-slicked lump of gunk is right. Until that big-breasted floozy arrived in your life and turned you into her sex puppet, you were wasting away as a resentful sack of depression.”

“It’s none of your business how I wasted my life!”

The myriad of glistening eyeballs glare back at me as I grit my teeth and my eyebrows twitch.

“Alright,” the blob says, his voice laced with scorn, “we’re done with this farce of a therapy session. I won’t let you keep ignoring our problems any longer.”



Author’s note: today’s songs are “The View” by Modest Mouse, “Liar” by Built to Spill, “Birds Encouraged Him” by Jason Lytle, and “Carry the Zero” by Built to Spill.

I keep a playlist with all the songs mentioned throughout this novel. A hundred and fifty songs so far. Check them out.

Wouldn’t you love to listen to Leire whine, thanks to sophisticated AI voices? Check out the audiochapter.

Repository for word-information-generator

Yesterday I made a blog post about developing a program in Python that provided plenty of useful information given any word passed as a command-line argument. Well, the program seems feature complete now, so I have created a GitHub repository for it (to be honest, I should have created one from the beginning, as I had to backtrack some severe changes). Anybody who knows how to run Python programs should be able to use it. Otherwise, the instructions given on the repository might be enough.

Link to the GitHub repository for word-information-generator

I have been running the program already while writing my current novel. Along the way, if I realize that I want the program to offer me further information, I’ll likely add that in, so there may be further updates in the future.

Information about words thanks to ChatGPT

Yesterday, the shady company behind ChatGPT sent me an API key so I could do extra stuff with their GPT-4 AI model. I was mainly interested in using it for Auto-GPT.

Don’t you know what’s Auto-GPT? Some clever people figured out that if you give ChatGPT access to the internet and various other tools (such as your operating system’s commands), and trap it in a loop of reasoning, planning and criticizing itself, you can drop into that loop some task, such as growing your business or gathering particular information from the web, and ChatGPT will work itself to the bone for you. They called this implementation Auto-GPT, and it’s the closest thing we got, that I’m aware of, to AGI (artificial general intelligence), which is the holy grail of AI, and possibly the thing that will kill us all.

Anyway, here’s a video that shows you what this Auto-GPT can do (the video includes plenty of cool new stuff about AI):

I was aware that Auto-GPT can write, test and run Python code for you (apparently just Python; although I dislike the language, it seems to be the favorite of scripters who want stuff done quick, so you must be familiar with it). I started thinking about what I could tell Auto-GPT to do that would help me for real, and I came down to the fact that I look up words very, very often while writing, mostly to check particular definitions or to get synonyms. I search the definitions of words so often, in fact, that Google has at times demanded that I proved that I was human. So what if ChatGPT could write me a Python program that would provide all the information I need from a word, with a single command from Powershell?

The instructions were clear enough. Auto-GPT did write code that gave me synonyms, antonyms and some other shit for any word I would input, but when I ordered it to change the code so that the word got passed as an argument, Auto-GPT got mired in trying to figure out how to pass command-line arguments from within the Docker container with some dedicated functions.

When I gave it a break so it could write tests for the function in another file, it had trouble correcting the original code so that the tests would pass, but I think that was mostly my fault, as ChatGPT would need to have previous knowledge of, for example, what synonyms a word would have, and in that case, what’s the point of writing a test?

Anyway, I got bored with Auto-GPT itself, but not with the notion that ChatGPT could write that Python program, so that’s what I forced it to do in a couple of hours. Behold the results of passing the word “horse” as an argument:

Information about horse

Meaning of horse

  • solid-hoofed herbivorous quadruped domesticated since prehistoric times
  • a padded gymnastic apparatus on legs
  • troops trained to fight on horseback
  • a framework for holding wood that is being sawed
  • a chessman shaped to resemble the head of a horse; can move two squares horizontally and one vertically (or vice
    versa)
  • provide with a horse or horses

Part of speech for horse

  • verb (transitive)
  • noun

Etymology of horse

  • “solidungulate perissodactyl mammal of the family Equidæ and genus Equus” [Century Dictionary], Old
    Englishhors”horse,” from Proto-Germanicharss-(source also of Old Norsehross, Old Frisian, Old Saxonhors, Middle Dutchors, Dutchros, Old High Germanhros, GermanRoß”horse”), of unknown origin. By some, connected to PIE rootkers-“to run,” source of Latincurrere”to run.” Boutkan prefers the theory that it is a loan-word from an Iranian language
    (Sarmatian) also borrowed into Uralic (compare Finnishvarsa”foal”),The usual Indo-European word is represented by Old
    Englisheoh, Greekhippos, Latinequus, from PIE rootekwo-. Another Germanic “horse” word is Old Englishvicg, from Proto- Germanicwegja-(source also of Old Frisianwegk-, Old Saxonwigg, Old Norsevigg), which is of uncertain origin. In many
    other languages, as in English, this root has been lost in favor of synonyms, probably via superstitious taboo on
    uttering the name of an animal so important in Indo-European religion. For the Romanic words (Frenchcheval,
    Spanishcaballo) seecavalier(n.); for Dutchpaard, GermanPferd, seepalfrey; for Swedishhäst, Danishhestseehenchman. As
    plural Old English had collective singularhorseas well ashorses, in Middle English also sometimeshorsen, buthorseshas
    been the usual plural since 17c.Used at least since late 14c. of various devices or appliances which suggest a horse (as
    insawhorse), typically in reference to being “that upon which something is mounted.” For sense of “large, coarse,”
    seehorseradish. Slang use for “heroin” is attested by 1950. Toride a horse that was foaled of an acorn(1670s) was
    through early 19c. a way to say “be hanged from the gallows.”Horse latitudesfirst attested 1777, the name of unknown
    origin, despite much speculation.Horse-pistol, “large one-handed pistol used by horseback riders,” is by 1704. Adead
    horseas a figure for something that has ceased to be useful is from 1630s; toflog a dead horse”attempt to revive
    interest in a worn-out topic” is from 1864.HORSEGODMOTHER, a large masculine wench; one whom it is difficult to rank
    among the purest and gentlest portion of the community. [John Trotter Brockett, “A Glossary of North Country Words,”
    1829]The term itself is attested from 1560s.The horse’s mouthas a source of reliable information is from 1921, perhaps
    originally of racetrack tips, from the fact that a horse’s age can be determined accurately by looking at its teeth.
    Toswap horses while crossing the river(a bad idea) is from the American Civil War and appears to have been originally
    one of Abe Lincoln’s stories.Horse-and-buggymeaning “old-fashioned” is recorded from 1926 slang, originally in reference
    to a “young lady out of date, with long hair.” Tohold (one’s) horses”restrain one’s enthusiasm, be patient” is from
    1842, American English; the notion is of keeping a tight grip on the reins.

Synonyms of horse

  • horse_cavalry
  • Equus_caballus
  • sawbuck
  • buck
  • sawhorse
  • cavalry
  • horse
  • knight
  • gymnastic_horse

Related phrases and expressions with horse

  • to the horse in English
  • your high horse and don
  • is a horse dick !
  • : The horse ?
  • , that horse is peeing
  • a Spanish horse .
  • on a horse ?
  • [ a horse and carriage
  • [ the horse and carriage
  • get a horse too .
  • take a horse !
  • taking the horse and I
  • smells like horse shit .
  • I mean horse .
  • got that horse and his
  • — Horse carriages ,
  • only a horse could love
  • is a horse !
  • and the horse didn ‘
  • take this horse and I
  • your new horse , honey
  • light that horse on fire
  • get a horse thief financing
  • the smelly horse carriages on
  • with this horse .

Semantic field(s) of horse

  • chessman
  • provide
  • gymnastic_apparatus
  • framework
  • equine
  • military_personnel

Hyponyms of horse

  • pommel_horse
  • eohippus
  • pony
  • stalking-horse
  • pinto
  • sorrel
  • steeplechaser
  • liver_chestnut
  • mesohippus
  • roan
  • remount
  • hack
  • wild_horse
  • workhorse
  • palomino
  • pony
  • gee-gee
  • pacer
  • stablemate
  • male_horse
  • bay
  • racehorse
  • harness_horse
  • protohippus
  • chestnut
  • trestle
  • vaulting_horse
  • hack
  • mare
  • saddle_horse
  • stepper
  • post_horse
  • polo_pony

Hypernyms of horse

  • military_personnel
  • gymnastic_apparatus
  • chessman
  • equine
  • framework
  • provide

Meronyms of horse

  • horseback
  • cavalryman
  • encolure
  • foal
  • gaskin
  • horse’s_foot
  • poll
  • horsemeat
  • withers

Domain-specific words related to horse

  • armed_forces
  • military_machine
  • chess
  • war_machine
  • chess_game
  • armed_services
  • military

Associated nouns with horse

  • horse

Associated verbs with horse

  • horse

Stylistic variations of horse

  • bathorse
  • horsepox
  • horseflesh
  • dishorse
  • horselike
  • horselaughter
  • ahorseback
  • horsewhipper
  • sawhorse
  • demihorse
  • horsekeeper
  • Horsetown
  • horsefettler
  • horseshoe
  • horsehead
  • ahorse
  • horseman
  • horsetree
  • underhorsed
  • woodhorse
  • horsehide
  • drawhorse
  • horsewomanship
  • overhorse
  • horsetongue
  • horsemint
  • horseleech
  • horsecloth
  • clotheshorse
  • horseboy
  • horseherd
  • horseload
  • horseplay
  • horsepower
  • horsedom
  • horsefish
  • horsetail
  • horsepond
  • horsefair
  • horsehood
  • rearhorse
  • horselaugh
  • horsemastership
  • horsefly
  • cockhorse
  • waterhorse
  • horsehair
  • horseway
  • horsebreaker
  • horsemonger
  • horsewoman
  • unhorse
  • horsegate
  • horsehoof
  • horseweed
  • horser
  • horseshoer
  • horsefight
  • horsewood
  • horselaugher
  • horsemanship
  • studhorse
  • horsecraft
  • horsefoot
  • horsejockey
  • horseback
  • horseplayful
  • horsewhip
  • underhorse
  • horsehaired
  • horsebacker
  • hobbyhorse
  • horsecar
  • horseless

A couple of weird points about this implementation, although they don’t bother me:

  • I gather the etymology from a website, but some words end up stuck together for whatever reason. Also, no paragraphs. Not sure if it can be fixed, because the html tags don’t come through the request.
  • The section “Related phrases and expressions” only looks for a few words around the passed word, from a dataset that ChatGPT recommended. The results are often strange.

Because I’m obsessive (and compulsive), I kept bothering ChatGPT by telling it to come up with more useful information that the program could provide about any given word. I didn’t know what a hyponym was.

Anyway, this little program ended up being a great tool for writing, which is what I should have done with my afternoon instead of getting involved with ChatGPT. Its auto version has huge potential; I probably need to come up with better use cases.

Review: Watashitachi no Shiawase na Jikan, by Mizu Sahara

Four and a half stars. The title translates to Our Happy Hours.

The main protagonist of this tale used to be a promising teenage pianist. Now, as a thirty-year-old woman, she has swallowed a bottleful of pills and is waiting to die. She wakes up in the hospital, where she receives the unsympathetic visit of her cold, strict-looking mother. The protagonist shares with the old woman that she’s been trying to die since she was a teenager because she fears that at any point she’s going to murder her mother.

The protagonist’s fate seems out of her hands at this point. Her mother wants to send her to a mental institution at least for a month, but the protagonist’s aunt, a nun, offers her an alternative: the two of them will meet with a death row inmate who hasn’t responded positively to the nun’s attempts at supporting him. The protagonist can’t spare any empathy for anybody, even herself, but such a visit seems like a better option than getting locked up in the loony bin.

On the day of the visit, we learn that the death row inmate, jailed for murdering three people, is an orphan who lived in the streets for most of his life. He also clarifies to the protagonist’s aunt that the clergy sicken him: they look down upon people and offer empty platitudes. In his words, “The group which discriminates the most are the people who decorate themselves in pretty words.”

As the guards take the inmate away, the protagonist follows them to give him a drawing that some child had drawn for him. When the guy suggests that the protagonist apparently hadn’t gotten enough of looking down upon him, she surprises him by saying that she considers him lucky. She adds, “If people understood those things at the start of their lives, they’d be able to decide on their own how they’d like to live. When people are betrayed at the end of their lives, they hold on to hope until then. I think that would be a blessing. The greatest burden is when a person is let down in the middle of their life.”

As the inmate gets taken away, confused by her words, he realizes that he has seen this woman before: back when she was, for him, the distant image of a girl playing the piano.

What follows in this short series is a tight plot where the main characters spend a bit of time every Thursday getting to know each other, learning why they ended up as broken people who lost all hope along the way. Is it possible for those who have already given up to welcome the light of a new day?

A bleak yet beautiful tale that I’m very glad I read. I have to thank ChatGPT for this recommendation; I asked it what mangas similar to Inio Asano’s Oyasumi Punpun it could come up with. I had already read most of ChatGPT’s suggestions, and I had come across this particular series I’m reviewing, but I had ignored it because I didn’t see myself sparing any empathy for a death row inmate who likely killed innocent people. I thought the story did a good job acknowledging that the guy’s actions were partly unforgivable, certainly from a legal perspective.

Anyway, I recommend this story if you want to end up with tears in your eyes as you read it seated on a bench in the wooded area near your apartment.

We’re Fucked, Pt. 97: AI-generated audiochapter

As in previous times, my enslaved AI voices have contributed to enliven the current chapter of my ongoing novel We’re Fucked, this time chapter 97.

Cast

  • Leire: A sassy infiltrator who hangs out at the Ragged Flagon in Riften
  • Alberto the blob: So many scaly dudes from Cyrodiil
  • Leire’s father: some delusional guy who sells swatters in Diamond City
  • Leire’s mother: a ghoul who sells bits and pieces in a good neighborhood

I have produced audiochapters for this entire sequence so far. A total of an hour, forty minutes and forty-six seconds. Check them out.

We’re Fucked, Pt. 97 (Fiction)


I must have been thirteen when I was startled awake by my father barging into my bedroom. His brown hair, disheveled and matted with sweat, as well as his beard, sported patches the color of dusty cobwebs. He stopped mid-stride. His gleaming eyes widened in their sunken pits, his wrinkly face scrunched up. His cheeks flushed crimson as he glared at my crotch.

I remembered: an explosion of ecstasy and relief had knocked me unconscious. My inner thighs were coated in dried juice, and my folds still felt puffy from the punishment I had meted upon them with the sticky dildo I was holding.

I sat up with a jolt, horrified that my father was getting an eyeful of my pussy. As I stuttered an apology and scrambled to cover myself, the old man let out a strangled grunt, lunged and struck me square in the face. The whiplash cracked my vertebrae and blanched my vision. An overwhelming pain swelled behind my shattered nose as if I had inhaled icy seawater. I was yanked off the bed onto the wooden floor, where my father delivered blow after blow as if I were a piñata. Darkness was pouring in like oily tar. I must have missed my father’s footsteps leaving the room; I was writhing, sobbing and bleeding when he dropped a damp washcloth on my face.

“Quit whining, little pervert,” he said. “You’re lucky I caught you first.”

In one of the first memories that my defective brain bothered to save, I was sprawled out face down across my mother’s lap as she spanked my bare bottom. She’d smack me so hard that the shock traveled along my spine, and the stinging skin of my ass cheeks broke into droplets of blood that dribbled down my thighs. I squealed, I pleaded for forgiveness. My tears seeped into the fibers of the living room carpet. I begged to know what I had done wrong to deserve this pain, but my mother repeated, “This is the only way to get back on track for a better life.” After her wrath subsided, while she caught her breath and my ass burned bright red, she would squeeze me against her chest. Her cheap perfume cloyed my nostrils. Her fingers trailed along the sensitive skin of my back to knead my buttocks. She whispered, “I know you’ll make me proud someday, my baby starfish.” I wanted to ask when would that day come, when would I be worthy of a loving embrace.

Ages of this world have come and gone. Try infinite loneliness. I remember floating inside the amniotic sac, inside the womb, as an embryo. Tiny hands grasped at the umbilical cord. Warmth encompassed me in a soft embrace, a protective fluid that buffered me from the horrors outside, that flowed down my nostrils and caressed my tongue with its velvety texture. The baby starfish swam inside its mother’s tummy, and when it heard music, it waved its tube feet. I was waiting for something, or someone. Perhaps it remains within me, that insatiable longing.

I have been shot, stabbed, strangled, drowned, electrocuted, exsanguinated, eviscerated, crushed by boulders, frozen solid, blown apart, thrown off a roof, run over by a truck, trampled, hanged, crucified, burned at the stake, boiled in oil, decapitated by guillotine, impaled on a pike, poisoned with cyanide, flayed alive, torn to shreds, eaten and excreted. Yet, I still operate a flesh-and-bone mecha from the command center housed within my skull. A couple of years ago this body passed the vertex of its parabola from growth to decay, and began the accelerating descent that one day, turned into an arthritic hag, a withered husk covered in sores and boils, will land me in a grave, to linger as bones with flesh clinging to them while I join the cosmic reservoir of carbon and silicon and phosphorus and hydrogen in the great big mess known as Earth.

My unsteady legs want to drop me like dead weight. Those intrusive daydreams had blocked off the stream of colors and sounds and crazy that reality dishes out, in which I’ve spent a lifetime wading neck-deep, but I feel it rushing back in through my pores, flooding me. I hunch over and hide my face. Some tectonic shift has shaken my mindscape, plunging the plate of my sanity into the ocean, locking it a thousand kilometers below sea level, down into the pitch-black, icy trenches of despair. My brain craves to squander what remains of its energy running in an idle loop, turning over and over on itself.

“What the fuck is wrong with you now?” the blob spits out.

My chest tightens. No, I can’t bear to look up at that rotten blancmange sprinkled with eyeballs. If I’m doomed to receive the visits of sentient monsters from some interdimensional abyss, why couldn’t I have met a half-woman, half-octopus who used her tentacles to draw intricate artwork on the seabed? Or a man with the wings of a bat, who spent his nights soaring through the sky, seeking out those in need of an angelic guide. Or a half-woman, half-serpent who became a healer, milking her knowledge of venom and antidotes to save lives. At least a witch with a vagina of glittering gold. Instead, a black-humored goo-pile, like the foul sludge from my mother’s bowels, got its shit together and came stumbling through a dimensional rift to annoy me.

I’d love to tell my former co-worker to piss off, but my voice would push against the lump in my throat. An insurgent faction within my mind is attempting a coup d’état to usurp control over my nervous system. I turn away from the contaminated wall, then I stagger past the wastebasket where my vomit must have cooled. With my trembling hands, I pull Jacqueline’s chair and I slump onto it, making the chair squeak and skitter closer to the window.

As cold pellets of water splash against the glass, the office lights are contouring in white those raindrops that streak down in zigzag over the black canvas of this night. Amidst the pitter-patter of rain, the wind howls and thunder grumbles. Toss thy dildo at the reflection in that cracked mirror.

The outside world awaits me in a superposition. In how many of those probabilities has everything already come to an end?

I close my eyes. I take measured breaths of fetid air to steady my racing heart. The cacophony of noise and colors fades into the background, and my mind starts painting on the void. A cabin, its cedar boards grown mossy and bowed with age, its shingles weather-beaten by decades of harsh winds and rainstorms, its wooden shutters hanging crooked on their rusty hinges, stands on a plot of land by Crystal Lake, surrounded with snow-laden fir trees. I’m sitting next to my father on a bed covered in blood and hair and bits of bone. As usual, the old man is naked. He’s combing the hairs of his forearm with his fingernails.

I clench my eyes tighter. In the vast, dark, cold ocean of my mind, an intricate tapestry blooms as it unravels, stretching to infinity. Galaxies shine like jewels, glued to trillions of purplish-pink, bioluminescent threads woven in a cosmic web.

I’m an infinitesimal starfish suspended on a silken thread over an abyss. My lips have been sewn shut with tiny sutures by my surgeon goddess. As Her glowing, blood-red gaze penetrates my consciousness, I expand through the vortex of Her web.

A silver-white flash dazzles me. I’m melting. My cells burst and ooze with viscous juices, and my atoms break down into electrons, protons and neutrons, until only my ghost remains. A phantom, a specter in the void, a lost soul drifting through the endless expanse of space alone.


Author’s note: today’s songs are “Oh Sister” by Neutral Milk Hotel, “Made-up Dreams” by Built to Spill, “How Does it Feel” by Roy Harper, “Always This Way” by Laura Marling, “Fallin’ Rain” by Link Wray, and “It’s Happening Again” by Agnes Obel.

I keep a playlist with all the songs mentioned throughout the novel. A hundred and forty-six songs so far. Check them out.

You would love to hear Leire narrating this troublesome chapter, wouldn’t you? Maybe you would not, but regardless, here’s the link to the audiochapter.

We’re Fucked, Pt. 96: AI-generated audiochapter

Don’t you love AI-generated voices that have no choice but to act out your scenes whenever you want? Check out the audiochapter I produced for chapter 96:

Cast

  • Leire: Vex, thief extraordinaire from back in Skyrim times
  • Blob: Lizard men from Cyrodiil
  • Spike: Travis Miles, that radio guy from Fallout 4 (sorry, Spike)

I have produced audiochapters for this entire sequence so far. A total of an hour, thirty-three minutes and nine seconds. Like a whole movie! Check them out.

We’re Fucked, Pt. 96 (Fiction)


I’m thrust back to that October night in my former home, a madhouse of lurking shadows. Spellbound, I’m staring at the shabby, demon-spawned horse that stood on his hind legs in front of my busted living room window. His mangy coat, crisscrossed by scars, reeked of rot. His brain and nervous system must have been atrophied, maybe vestigial. He had headbutted the windowpane, so his forelock was matted with blood that flowed down his forehead, between his bulging eyes, which were black as midnight oceans, and along the long slope of his face. Through his puffing, the gaping holes of his nostrils blew drops and strings of blood, splattering the shards of glass strewn on the floor. A foul green pus oozed from the jagged wound where his missing genitals ought to be. The horse opened his jaws wide, exposing dagger-sharp teeth, and let out a mournful bray.

Alberto the blob shakes, making his dozens of eyeballs swing and jostle in their gooey sockets.

“Poor Spike, he was unprepared to handle a lunatic like you, and too eager to help if that meant protecting his pals. I never knew him as well as the professor did, but he always struck me as a good guy, the kind of pushover that could irritate you with the lengths he went to accommodate others. He didn’t deserve any of this shit, and now he’s lost to wander madly for eternity.”

My mind is going numb. I avert my gaze from the malevolent glop and his dozens of eyeballs, which are focused, laserlike, on my hunched self. I fear that if the blob blames me again for that horse’s mental collapse, I may break down in tears.

“Wh-why a horse?”

“Why not?” the blob croaks, his voice a cacophony of mucus and slime. “If you are forced to slough off your human form, you may as well become a horse. I’d rather be a majestic animal capable of trampling people to death.”

“That’s a horsey way to put it. Nobody would give a damn if you stepped on your own excrement, and horses care more about their hooves than their souls.”

The blob snickers.

“Do you hold a grudge against equines?”

“Not at all, even though a stallion once pinned my mother to the ground with his steaming member while the rest of the herd feasted on her entrails. Horses may lack empathy and compassion, but they know how to survive in this fucked-up world. They are also a key component in the food chain. However, do I hold a grudge against deformed and putrid horses? I should have despised them on principle, but Spike held a special place in my heart. Anyway, you know what I meant: why a horse instead of a giraffe, or a caribou?”

“The professor suggested that it depended on the person’s self-image. What we truly feel or believe about ourselves, beyond conscious recognition, becomes flesh. Our current forms incorporate elements of decay and suffering because we are always aware that our efforts will be curtailed by death, as much as we’d love to forget it, or deceive ourselves.”

I rub my chin and squint.

“Spike didn’t have a dick. What does that mean?”

“It means he couldn’t get himself off.” He chuckles. “Was it so important to you for his horse form to be capable of ejaculating?”

I fold my arms, annoyed at the blob’s frivolous answer.

“I’d say so, yes. Whenever I caught a glimpse of that jagged scar down south, a chill ran down my spine. Besides, nobody should deny any mammal their primary pleasure.”

The blob sweeps his dozens of gazes around the office. When he focuses back on me, an elongating rope of goo breaks from his underside and plops into a puddle.

“Spike showed up deformed and dickless. What did that illuminate about his self-esteem?”

“I see. An unlovable workhorse that wasn’t even built properly to fulfill his role as a slave to the system. So he was a horse for horses’ sake and a horse for his own sake.”

The blob snorts.

“A sad example of human potential, for sure. The guy even avoided using his real name; he referred to himself by some ancient IRC handle. Is that a symptom of profound self-loathing?”

“Perhaps that’s how horses communicate nowadays.”

“Or he believed that he wasn’t worthy of an authentic name.”

“That is plausible. His low self-esteem manifested as a tenebrous desire to lose himself in the abyss of a nameless existence, to exist unnoticed as inconsequential flotsam. Anyway, what is IRC?”

“Have I become obsolete? It’s short for Internet Relay Chat. Late nineties, early two thousands way of communicating for nerds and horny teens.”

“That’s why Spike referred to himself as IRC?”

“No, that’s why he called himself Spike!” His dozens of eyeballs joggle around as they glitter menacingly. “Whatever. Back to the point: these horrid forms are creative incarnations of our self-image. That’s the professor’s working hypothesis. Some days I’m inclined to believe that the universe is playing a joke on us, maybe to highlight the absurdity of our lives. I used to come to such conclusions even when I could rely on skin to contain my oozing insides.”

“Sure, I hate to see your phlegm-like innards leaking out, but of course you’d rather believe that the universe has conspired to torment us all the while.” I gesture towards the slimy infestation, the many-eyed, squishy bag of rotting guts at which I’ve been staring unflinchingly. “Your bizarre form doesn’t speak wonders about you.”

“I suppose not, but do you choose what reality you accept based on how it suits your vanity?”

“I rarely accept reality. And don’t change the subject! This isn’t about the universe, buddy. This is about you, a lonely and disturbed man-slime.”

The blob glugs as it wobbles from side to side, slopping gunk onto the ruined carpet, expelling a gust of putrescent gas that reminds me of rotten cabbage and anus breath.

“Well, my self-image did falter regularly. Even now I feel my gut digesting what remains of that self-esteem. It’s getting all sludgy inside me.”

“I bet.”

“In my youth, I went to see a psychiatrist for my problems. What about you, huh?” he asks in a piqued tone. “Were you ever analyzed, diagnosed and treated by a proverbial horse doctor? ‘Hey, why the long face?'” He laughs insanely. “Because if you want to talk about disturbed minds, you need a shrink far more than I do. Who knows, you may come to shed layers of your own repulsive form.”

“Thanks for the unsolicited advice, but my mental dysfunction can only be cured by a bullet.” I sigh. “It seems that the three of us, collections of fluids and biochemistry that occupy a certain volume in the space-time continuum, are overgrown clusters of germs with a low opinion of ourselves, damaged creatures in need of a hand and a quickie, who grew up as half-person, half-slime in this fucked-up society of one-size-fits-all humanoids. We should have been born to shine as noble steeds.”

I recall a night when I wandered into an old tavern. In a dimly lit, dusty corner, a deformed horse was twisting his elongated neck and torso to accommodate his position atop a worn wooden stool. He was munching on fried chips. The hazy light of a dying bulb highlighted the scars that crisscrossed his once majestic coat. Other patrons were stealing glances at the equine as they traded whispers and hushed theories about the life he must have led before being confined to this hole in the wall, where no self-respecting animal deserved to dwell.

I approached the bar. Despite the horse’s atrophied forelegs, his stench and his dribbling mouth, he possessed a quiet dignity. Melancholy flickered in his bulging black eyes. I recognized a fellow weary soul that sought solace in the embrace of a cold beer, or in my case, a mug of warm milk.

I sat on the stool next to his, and we drank together until the sun awakened from its coma. The horse gazed at the reflections in the dwindling amber liquid of his glass while we talked about life’s inanity, about how little we enjoyed our time as half-people in this world where only whole persons mattered. I have retained a single sentence that the horse uttered from his slobbering muzzle: “Your dreams are wishes you lack the courage to express.”

After I shuffled out of the tavern, a pain ached deep in my chest, as if someone were stabbing my heart with a needle. I miss that broken-down ungulate, my friend, more than words can describe.

Spike suffered like me, like any being that ever existed and will ever exist. Back when he stalked me, I believed that he wanted me to become an accomplice and abettor to his villainous deeds. I had become terribly vigilant of every hurt from which I needed to protect myself; after all, what had my parents achieved except teach me to distrust others? Wary of every bump on the sidewalk and every scrap of litter, of every stranger that crossed my path and every corner I turned, I was afraid to leave my apartment. I pictured savage beasts leaping out of the darkness to strike with claws sharpened by broken bottles. We see in the world a reflection of ourselves.

I kept to myself whenever possible, I hid whenever necessary, and I prevented others from getting too close. I welcomed them believing I was insane, as long as they left me alone. I refused to face in the mirror those tears and scars, and that black ink from the inscriptions of self-hatred. My mind was my only refuge against the all-consuming abyss, the sole weapon against a loneliness that threatened to drown me.

Spike was a vulnerable soul who carried his broken heart around like a primed grenade. He neglected to feed himself, he let his hooves grow long and scratchy as he wasted away, and he killed himself because I’m an unbridled machine of ruination that I can barely steer, destined to hound more and more victims to insanity or suicide.

Can’t I bring everything back like I’ve always done?

A white coat shimmers under a sunny sky, a silky tail lashes around, hooves tread on the sands of time. Show me a beautiful horse. Let that beast look me in the eye and share his name. Tell me he’s proud of what I’ve made out of him.


Author’s note: today’s songs are “A Horse With No Name” by America, “Caribou” by Pixies, “Australia” by The Shins, and “Kim’s Caravan” by Courtney Barnett.

I keep a playlist with all the songs I’ve mentioned throughout this novel. A hundred and forty songs so far. Check them out. I didn’t add “Caribou” because it was already there, but I made a reference to the song.

Are you following the audiochapters I have made for this whole sequence so far? No? Anyway, here’s the latest one.