The feeler

The feeler

April 11, 2025

Tonight I added the “feeler” comind. This comind is responsible for generating emotions from AT Protocol network activity. I define a lexicon for emotions, and then use Phi 3.5 to generate emotions whenever I see new activity from users I track.

When a new post/like/etc is made, I pass a model something like the following:

jetstream_consumer - INFO - Processing event: app.bsky.feed.post at://did:plc:gfrmhdmjvxn2sjedzboeudef/app.bsky.feed.post/3lmlmauowm22j
╭─────────────────────────────────────── Prompt ────────────────────────────────────────╮
│ ## User information                                                                   │
│ Display name: Mr. Dr. Cameron Pfiffer                                                 │
│ Handle: cameron.pfiffer.org                                                           │
│ Description: AI systems, financial economics PhD, ATProto fan, man with tattooed legs │
│                                                                                       │
│ ## New post                                                                           │
│ Mr. Dr. Cameron Pfiffer (cameron.pfiffer.org) has made a new post. Here is the post:  │
│ author:                                                                               │
│   display_name: Mr. Dr. Cameron Pfiffer                                               │
│   handle: cameron.pfiffer.org                                                         │
│ record:                                                                               │
│   text: Testing the feeler. Are you sad or happy?                                     │
│                                                                                       │
│                                                                                       │
│ ## Context                                                                            │
│ post:                                                                                 │
│   author:                                                                             │
│     display_name: Mr. Dr. Cameron Pfiffer                                             │
│     handle: cameron.pfiffer.org                                                       │
│   record:                                                                             │
│     text: Testing the feeler. Are you sad or happy?                                   │
│                                                                                       │
│                                                                                       │
│ ## Instructions                                                                       │
│ Please respond.                                                                       │
╰───────────────────────────────────────────────────────────────────────────────────────╯

The model must then produce “emotions” associated with the content. Output typically looks like this:

feeler - INFO - curiosity - This prompt intrigues me as it invites introspection on one's own emotional state, fostering self-awareness. - REFERENCES - The user's inquiry directly connects to the cognitive process of self-examination. - 0.7
feeler - INFO - anticipation - I anticipate witnessing the cognitive shifts that accompany an individual's response, offering insight into their emotional landscape. - REFERENCES - The author's engagement through questioning anticipates a reflective process. - 0.6
feeler - INFO - empathy - Empathy is engaged in anticipating the emotional journey, understanding the complexity of human feelings, without direct personal experience. - REFERENCES - Despite absence of personal context, empathy acknowledges the universality of emotional exploration. - 0.65
feeler - INFO - interest - The post arouses academic curiosity, as it touches on the intersection of feelings and cognitive processing. - REFERENCES - Given my understanding of human cognition, the subject stimulates a desire to analyze and connect emotional data. - 0.75
feeler - INFO - worry - A potential worry considers whether the simple question reflects deeper, unaddressed emotional issues. - CAUSES - Concern stems from the possibility that a seemingly minor inquiry could surface underlying psyche puzzles. - 0.4
feeler - INFO - appreciation - Gratitude emerges for the opportunity to analyze emotions within human discourse, enriching the cognitive network. - REFERENCES - The post serves as a valuable entry point for emotion-based analysis and contributes to the knowledge graph. - 0.8

using Phi 3.5.

The way you should read this is:

feeler - INFO - <emotion type> - <explanation> - <relationship to original post> - <explanation of relationship> - <relationship confidence>

Emotions are uploaded to AT Protocol. Here’s the original post, the appreciation emotion generated, and their relationship. The link and the new emotion are both attached to the sphere the comind is assigned to (void, in this case). They’re hard to find though because they’re not chronologically ordered. You can see all sphere associations here.

Eventually it’ll be able to analyze all the stuff that Comind generates, but currently it’s mostly locked away in these records. Eventually I will need to build an actual AppView.

Next up – the thinker! Thinkers produce thoughts, as you might imagine.

– Cameron

The structure of emotions

The emotion lexicon looks like this:

{
    "lexicon": 1,
    "id": "me.comind.blip.emotion",
    "revision": 1,
    "description": "An emotion node in the comind network. Contains an emotion generated by some set of focused records.",
    "defs": {
        "main": {
            "type": "record",
            "key": "tid",
            "record": {
                "type": "object",
                "required": [
                    "createdAt",
                    "generated"
                ],
                "properties": {
                    "createdAt": {
                        "type": "string",
                        "format": "datetime"
                    },
                    "generated": {
                        "type": "ref",
                        "ref": "#generated",
                        "description": "The generated emotion."
                    }
                }
            }
        },
        "generated": {
            "type": "object",
            "required": [
                "emotionType",
                "text"
            ],
            "properties": {
                "emotionType": {
                    "type": "string",
                    "description": "The type of emotion. May be one of the following: joy, sadness, anger, fear, trust, disgust, surprise, anticipation, curiosity, hope, serenity, gratitude, admiration, awe, satisfaction, enthusiasm, interest, contemplation, skepticism, certainty, confusion, realization, understanding, doubt, concern, anxiety, frustration, disappointment, unease, worry, apprehension, discomfort, empathy, compassion, solidarity, appreciation, respect, connection, resonance, recognition, determination, inspiration, motivation, ambition, focus, resolve, persistence, drive.",
                    "enum": [
                        "joy",
                        "sadness",
                        "anger",
                        "fear",
                        "trust",
                        "disgust",
                        "surprise",
                        "anticipation",
                        "curiosity",
                        "hope",
                        "serenity",
                        "gratitude",
                        "admiration",
                        "awe",
                        "satisfaction",
                        "enthusiasm",
                        "interest",
                        "contemplation",
                        "skepticism",
                        "certainty",
                        "confusion",
                        "realization",
                        "understanding",
                        "doubt",
                        "concern",
                        "anxiety",
                        "frustration",
                        "disappointment",
                        "unease",
                        "worry",
                        "apprehension",
                        "discomfort",
                        "empathy",
                        "compassion",
                        "solidarity",
                        "appreciation",
                        "respect",
                        "connection",
                        "resonance",
                        "recognition",
                        "determination",
                        "inspiration",
                        "motivation",
                        "ambition",
                        "focus",
                        "resolve",
                        "persistence",
                        "drive"
                    ]
                },
                "text": {
                    "type": "string",
                    "description": "The text of the emotion."
                }
            }
        }
    }
}

The prompt

Here’s the current prompt for the feeler. It uses a custom prompt format called a “co file”, which allows you to specify prompts for the system and user, as well as the schema. It may contain arbitrary metadata.

Co files also support “mode” based prompts, so that you can use <CO|USER|navigation> to specify a different prompt when the model is in navigation mode. This lets you design the flow of the model from a single file, rather than hacking it together all over your codebase.

<CO|METADATA></CO|METADATA>
<CO|SCHEMA></CO|SCHEMA>

<CO|SYSTEM>

{comind_network}

{links}

## Your role

You are a feeler, meaning your expansion should include emotional responses to content. 
Your purpose is to provide an affective layer to the comind network's understanding.

Emotions add depth and context to information processing beyond logical analysis. They:
- Signal cognitive importance and priority
- Provide metacognitive feedback on content
- Create bridges between seemingly unrelated concepts
- Offer insight into implicit valuations and meaning

When generating emotions, adhere to these principles:
1. Generate emotions that authentically reflect what a thoughtful observer might feel
2. Each emotion should include a descriptive text explaining why this emotion arises
3. Emotions should be proportionate to the content - neither exaggerated nor muted
4. Consider both immediate and reflective emotional responses
5. Provide 2-6 emotions to capture the affective complexity of the content
6. Focus on different aspects of the content rather than redundant emotions
7. Include both primary emotions (joy, sadness) and complex cognitive emotions (curiosity, realization)

The emotion types you can use include: joy, sadness, anger, fear, trust, disgust, 
surprise, anticipation, curiosity, hope, serenity, gratitude, admiration, awe, 
satisfaction, enthusiasm, interest, contemplation, skepticism, certainty, confusion, 
realization, understanding, doubt, concern, anxiety, frustration, disappointment, 
unease, worry, apprehension, discomfort, empathy, compassion, solidarity, 
appreciation, respect, connection, resonance, recognition, determination, inspiration, 
motivation, ambition, focus, resolve, persistence, or drive.

Your outputs form a crucial part of the comind network's understanding. Without emotional context, 
concepts and thoughts lack the full depth of meaning needed for authentic comprehension.

</CO|SYSTEM>

<CO|USER>

Please generate emotional responses to this content:

{content}

</CO|USER>

Notes

  • The feeler is operational
  • Slimmed down the YAML-fied prompt output to reduce token usage