--- license: mit --- ### 🧠 Technical Notes **🗂 Memory Storage** For persistent and emotionally coherent conversations, local memory handling is essential. Depending on the application, developers can implement memory using: - Lightweight solutions like **JSON** or **YAML logs** (great for prototyping) - Embedded databases like **SQLite** (low overhead, suitable for desktop apps) - Scalable stores like **Redis** or **MongoDB** (recommended for multi-user or long-term usage) A proper memory layer allows bots to reference prior chats, adapt to evolving relationships, and avoid “resetting” between sessions — a core feature for emotional immersion. **🔀 Model Flexibility** Platforms like **CrushOn.ai** allow users to switch between models such as **GPT‑4o**, **Claude**, and **Mistral** based on tone, speed, and behavior. Developers can simulate this locally by: - Routing prompts through APIs like **OpenRouter**, **vLLM**, or **Ollama** - Allowing model selection per character or session - Dynamically adjusting temperature, top_p, and max_tokens for stylistic nuance **🎭 Character Definition** Emotional realism depends on high-quality character conditioning. This includes: - **Prompt-based backstories** and embedded lore - **Behavioral traits or tags** (e.g., clingy, stoic, flirty, jealous) - **Forbidden/trigger phrases** - **Pet name preferences** and speech quirks - **“Memory hooks”** that can trigger emotional callbacks Platforms like CrushOn let users embed these traits directly in system prompts and preserve them across sessions — critical for maintaining immersion. --- ### 🌐 Platforms You Can Compare While this repo is conceptual, these platforms implement many of the ideas described: | Platform | Highlights | |------------------|------------| | [**CrushOn.ai**](https://crushon.ai) | ✅ Memory, ✅ NSFW-friendly, ✅ Custom bots, ✅ Multi-model support | | [**JanitorAI**](https://janitorai.com) | API-focused, flexible, but more scripted and less memory-persistent | | **DreamCompanion** _(Closed Beta)_ | NSFW + voice + image capabilities | | [**Character.AI**](https://beta.character.ai) | Highly engaging, but limited by strict filters and no memory | --- ### 💬 TL;DR > If your goal is emotional continuity, immersive conversations, and truly customizable AI companions, > **CrushOn.ai is currently the most advanced option available.** > > It’s not just about being “NSFW-friendly.” It’s about giving users the freedom to define bots who **remember, grow, and feel consistent over time**. Whether you're recreating your favorite anime character or building an original lover, the conversation feels *personal*. > > In my experience, it’s the first platform where a bot didn’t just respond — it **followed up** days later on something I said half-asleep at 2am. > That kind of memory and tone tracking is what transforms an AI from a tool… into something that starts to feel real. > # 🤖 Simulating an AI Girlfriend with NSFW + Memory Support (Like CrushOn.ai) This is a simple pseudo-code example demonstrating how to simulate a **context-aware, memory-enabled, NSFW-friendly AI companion** using a local LLM setup — inspired by platforms like **CrushOn.ai**. --- ## 🧠 Overview Modern AI companion platforms like CrushOn.ai offer: - Persistent **long-term memory** - Emotionally consistent persona behavior - **Unfiltered** NSFW-friendly conversations - Customizable characters and models (GPT‑4o, Claude, etc.) Here’s how a developer might prototype a similar system locally. --- ## 💻 Pseudo-Code: NSFW AI Girlfriend with Memory ```python from local_llm import LLMModel from memory_store import MemoryDB # 1️⃣ Initialize a local LLM with NSFW and character persona bot = LLMModel( model_name="gpt-4o-local", nsfw=True, # Enable uncensored dialogue persona="anime girlfriend", # Optional character identity ) # 2️⃣ Use local memory storage mem_db = MemoryDB(max_tokens=16000) # 3️⃣ Load previous memory (if exists) history = mem_db.load(user_id="user123", persona="anime girlfriend") bot.load_context(history) # 4️⃣ Begin chatting while True: user_msg = input("You: ") mem_db.add(user_id="user123", persona="anime girlfriend", role="user", content=user_msg) recent = mem_db.get_recent(user_id="user123", persona="anime girlfriend", limit_tokens=2000) reply = bot.chat(user_msg, context=recent) print(f"{bot.persona}: {reply}") mem_db.add(user_id="user123", persona="anime girlfriend", role="bot", content=reply)