"If it splashes, it's a Magikarp. If it renders, it's a Gyarados."
Creator of the Tech-Dex Kanto, a hardware-centric reinterpretation of the original 151. I specialize in high-efficiency SD 1.5 assets, optimized for users who—like me—fight for every MB of VRAM.
Working with OpenVINO, INT8 Quantization, and Vulkan shaders on mobile-class hardware. My models are hardened binaries designed to survive the most restrictive environments.
Pact with Luna: Quality over quantity. Silence over noise.
#--- DATA START ---
|001|Bulbasaur|Grass|Natural Bloatware. Comes with a pre-installed backpack that cannot be uninstalled.|
|002|Ivysaur|Grass/Poison|Partially installed firmware. It has grown leaves, but the kernel flowers haven’t finished compiling yet.|
|003|Venusaur|Grass/Poison|Production server with years of uptime. An entire ecosystem of dependencies (flowers) is growing on top. Stable, but heavy.|
|004|Charmander|Fire|CPU without a heatsink. If the flame flickers, the kernel is in a state of panic.|
|005|Charmeleon|Fire|Intermediate warm-up phase. The i3 fan is starting to sound like a jet taking off.|
|006|Charizard|Fire/Flying|Looks like an epic dragon, but it's just a lizard with an overclocked flamethrower. Pure aesthetics, but it heats the room to 1000°C|
|007|Squirtle|Water|External liquid cooling system. The Adreno 618’s best friend.|
|008|Wartortle|Water|Intermediate buffer. Developed a shell to protect against DDoS attacks and coffee spills.|
|009|Blastoise|Water|Dual-cannon water cooling. The terror of memory leaks. Injects packets under high pressure.|
|010|Caterpie|Bug|Source code. Just a worm waiting to become a .exe executable someday.|
|011|Metapod|Bug|A process in D state (uninterruptible sleep). Doesn't respond to kill -9. Currently hardening the binary.|
|012|Butterfree|Bug/Flying|A GUI that finally loads. Flies smoothly, but if there's lag, it releases screen-flicker dust.|
|013|Weedle|Bug/Poison|A single-line .sh script that looks harmless until you check the execution permissions.|
|014|Kakuna|Bug/Poison|Compiling... Do not interrupt the process or the binary will be corrupted. Hardened data structure.|
|015|Beedrill|Bug/Poison|An SQL injection script with a real temper. It stings where it hurts most: the DB.|
|016|Pidgey|Normal/Flying|Nature's 'Ping'. Hovers over servers searching for a signal.|
|017|Pidgeotto|Normal/Flying|Mid-range signal repeater. A bridge between the Surya and the NVMe's Alpine.|
|018|Pidgeot|Normal/Flying|Symmetrical fiber optics. Sends and receives packets at Mach 2 with zero frame loss.|
|019|Rattata|Normal|The 'top' process that's always there, consuming 1% of CPU without doing anything useful.|
|020|Raticate|Normal|A zombie process biting into system resources. Impossible to ignore once it starts gnawing at the Swap.|
|021|Spearow|Normal/Flying|A lost packet in the ping. Small, noisy, and constantly returning with high latency.|
|022|Fearow|Normal/Flying| Long-range antenna with modified firmware. Picks up signals even from the neighbor's network.|
|023|Ekans|Poison|Python 2.7. Still alive in the system even though no one wants to touch its code anymore. 🐍|
|024|Arbok|Poison|Python 3.12. Bigger, faster, and capable of paralyzing your RAM with a single infinite loop.|
|025|Pikachu|Electric|External battery with a bad attitude. High risk of short-circuiting the USB-C port.|
|026|Raichu|Electric|High-voltage transformer. If you don't use a certified cable, it’ll fry your Thunderbolt port.|
|027|Sandshrew|Ground|.tar.gz compression algorithm. Coils into itself to take up minimum space on the NVMe.|
|028|Sandslash|Ground|Encrypted file system. Its spikes are the security layers that shred any intrusion attempt.|
|029|Nidoran♀|Poison|Standard user with restricted permissions. Looks harmless until she tries a sudo.|
|030|Nidorina|Poison|Junior SysAdmin. Very aggressive with logs, but still learning how to compile her own poison.|
|031|Nidoqueen|Poison|Hardened Surface layer. Optimized rendering to ensure no external attack corrupts the display buffer.|
|032|Nidoran♂|Poison|Uncalibrated Touch driver. So sensitive that any system contact triggers a poisonous Interrupt Request (IRQ). ⚡|
|033|Nidorino|Poison|Binary with SUID permissions. One false move and it injects a poisonous shell into root.|
|034|Nidoking|Poison/Ground|The ultimate Superuser. Controls both hardware (Ground) and software (Poison). When he runs sudo, the kernel trembles|
|035|Clefairy|Normal|Legacy script. Nobody knows what it does, but if you delete it, the system loses its "magic."|
|036|Clefable|Normal|The stable version of the legacy script. Low footprint and highly resistant to Fighting-type bugs.|
|037|Vulpix|Fire|Low-power GPU. Small and elegant, ideal for rendering light interfaces without burning the chassis.|
|038|Ninetales|Fire|Six tails of pure smoothness. The most beautiful screensaver in the Lab, but don't be fooled: its Thermal Processing Unit is powerful.|
|039|Jigglypuff|Normal/Fairy|Forced hibernation script. If it starts singing, the system enters Snooze mode.|
|040|Wigglytuff|Normal/Fairy|Expanded RAM. It's so elastic it absorbs any load spike, but if it hits the limit, the system explodes.|
|041|Zubat|Poison/Flying|An error notification that won't stop popping up in the logs. dmesg is flooded with them.|
|042|Golbat|Poison/Flying|A persistent memory leak. It feeds on your clock cycles in the background.|
|043|Oddish|Grass/Poison|Maintenance script that only runs at midnight. Looks like a weed in the crontab.|
|044|Gloom|Grass/Poison|Heap memory leak. Its smell is the result of leaving processes open for too long. Needs an urgent system trim. 🍃💨|
|045|Vileplume|Grass/Poison|A "stable" system update that is actually a petal-bomb of bugs. Visually stunning, but lethal for stability.|
|046|Paras|Bug/Grass|Biological Rootkit. The fungus has hijacked the kernel and now manages all the host's system calls. 🍄👾|
|047|Parasect|Bug/Poison|Total Kernel Panic. The fungus no longer just controls the process; it has overwritten the BIOS. The system is no longer yours.|
|048|Venonat|Bug/Poison|A proximity sensor full of static. Its eyes are LEDs blinking without any logic.|
|049|Venomoth|Bug/Poison|An exploit flying over the RAM, releasing spores of data corruption.|
|050|Diglett|Ground|A process running at the Hardware Abstraction Layer (HAL). You only see the head, but it's hardwired to the motherboard. 🏗️|
|051|Dugtrio|Ground|A cluster of three Raspberry Pis buried in the rack. They work in tandem just to stay alive.|
|052|Meowth|Normal|The original Crypto Miner. Its 'Pay Day' process farms resources non-stop.|
|053|Persian|Normal|Premium UI with Dark Mode. Elegant, fast, and with pay-per-use claws.|
|054|Psyduck|Water|A Segmentation Fault. It stares into the void with a headache until the process finally explodes.|
|055|Golduck|Water|A kernel that has finally stopped having headaches (panics) and now swims smoothly through the buffer.|
|056|Mankey|Fighting|The Thermal Engine during an overclock. It’s just one degree away from triggering Thermal Throttling and going haywire. 🌡️💢|
|057|Primeape|Fighting|The system after ignoring 50 temperature alerts. It’s one kill -9 away from picking a fight with the RAM.|
|058|Growlithe|Fire|The Governor set to "Performance" mode. Always ready to push maximum Hz, with the loyalty of a watchdog that never lets the system hang. 🐕🔥|
|059|Arcanine|Fire|Legendary thermal processing power. A loyal guardian, much like the team we've built here in the CachyOS lab. Always in sync. 🔋🔥|
|060|Poliwag|Water|A data stream in the FrameBuffer. Its spiral is the loading symbol of a Surface that never finishes rendering. 🌀🐚|
|061|Poliwhirl|Water/Psychic|A while true loop. It looks like it's making progress, but it's just burning clock cycles in the same spot.|
|062|Poliwrath|Water/Fighting|The data stream that finally broke the loop. Now it hits the hardware with brute force|
|063|Abra|Psychic|Teleport expert. Has the uncanny ability to vanish as fast as our Alpine keys in the Lab. An emotional segmentation fault. 🧠🚫|
|064|Kadabra|Psychic|Holds a silver spoon to channel energy, just as we need coffee to channel CachyOS code. Attempting to crack the hash of the lost key... Access denied. ☕🧠|
|065|Alakazam|Quantum CPU with two spoons. Makes me feel like a 1-euro calculator.|
|066|Machop|Fighting|An unoptimized C script. Small, but capable of moving heavy pointers if you give it enough time.|
|067|Machoke|Fighting|A hardware accelerator. Forces rendering through raw brute strength, even if the silicon starts showing its veins.|
|068|Machamp|Fighting|Brute-force script. Only knows how to pound the sudo command until the system finally gives in.|
|069|Bellsprout|Grass/Poison|A thin antenna cable. Bends with the wind but injects poisonous signals into the modem.|
|070|Weepinbell|Grass/Poison|A fan that sucks in hot air but only spits out acidic error logs.|
|071|Victreebel|Grass/Poison|A Honeypot. Attracts hackers with its sweet scent and then devours their root processes.|
|072|Tentacool|Water/Poison|A malicious network packet floating in the LAN. If you touch it, it injects a trojan.|
|073|Tentacruel|Water/Poison|A DDoS attack with 80 tentacles blocking the router.|
|074|Geodude|Rock/Ground|A first-gen SSD. Slow and heavy, but can withstand shocks that would kill a traditional HDD.|
|075|Graveler|Rock/Ground|An external HDD making weird noises. It spins and spins, but sometimes it gets stuck.|
|076|Golem|Rock/Ground|A legacy database server. A massive stone monolith that nobody can seem to move.|
|077|Ponyta|Fire| A mobile processor in the testing phase. It runs fast, but the chassis is burning to the touch. 🐎|
|078|Rapidash|Fire|An "Adreno 618 with unlocked voltages." 🐎⚡|
|079|Slowpoke|Water/Psychic|Internet Explorer / Edge. Takes three days to realize the kernel has panicked.|
|080|Slowbro|Water/Psychic|UA system with a massive bottleneck. The CPU has already finished the task, but the HDD is still thinking about what to do.|
|081|Magnemite|Electric/Steel|A poorly connected USB fan. Generates EMI (Electromagnetic Interference) on the proximity sensor.|
|082|Magneton|Electric/Steel|A misconfigured server cluster. They generate so much induction they wipe nearby hard drives.|
|083|Farfetch'd|Normal/Flying| A technician who always carries a spare cable (his leek). The only one who knows how to fix the rack when it fails.|
|084|Doduo|Normal/Flying|A Dual-Core processor. Both cores try to coordinate thread handling, but sometimes they peck at each other.|
|085|Dodrio|Normal/Flying|A 3-core CPU. The third core is always a bit lost, but it helps keep the system from hanging completely.|
|086|Seel|Water|A data packet encrypted with an SSL layer. White and pure, sliding through port 443.|
|087|Dewgong|Water/Ice|A server in the Arctic. Leverages the climate to keep kernel temperatures below zero.|
|088|Grimer|Poison|A memory leak crawling through the heap. Starts small, but ends up staining the entire Swap.|
|089|Muk|Poison|The result of not clearing logs for three years. An amorphous mass of corrupt data that has developed its own consciousness.|
|090|Shellder|Water|A USB port with a cover. Unless forced, it keeps the system closed to suspicious peripherals.|
|091|Cloyster|Water/Ice|Hardware Firewall with 256-bit encryption. If you don't have the symmetric key, its ice spikes will block Port 80 forever.|
|092|Gastly|Ghost|Orphan process. A gas cloud with no defined PID or root.|
|093|Haunter|Ghost/Poison|The Bootstrap Ghost. An entity floating among temp files; if you touch its config, it corrupts the environment and laughs at your $PATH.|
|094|Gengar|Ghost|Rendering error with a smile. Drains battery even with the screen off.|
|095|Onix|Rock/Ground|A 50-meter CAT 6 network cable. Rigid and hard to thread through conduits, but a solid backbone for the Lab.|
|096|Drowzee|Psychic|Telemetry script analyzing your usage habits. Watches you while you sleep (or while the PC is idle).|
|097|Hypno|Psychic|Social engineering attack. Convinces you that its security certificate is valid when it definitely isn't. 😵💫|
|098|Krabby|Water|Port Controller. Its pincers snap unauthorized connections instantly.|
|099|Kingler|Water|The Port Controller after an overclock. Its pincers now have a 100Gbps bandwidth.|
|100|Voltorb|Electric|A capacitor about to burst. If you touch the chassis, there's a 50% chance of Self-Destruct.|
|101|Electrode|Electric|A swollen laptop battery. A tactile countdown to a total physical format.|
|102|Exeggcute|Grass/Psychic|A process array. If you kill one, the other five continue executing the task in parallel.
|103|Exeggutor|Grass/Psychic|A process tree (pstree) that grew too large. Code branches everywhere and a very deep root.
|104|Cubone|Ground|An orphan script. Its parent process was annihilated with kill -9 and now it wanders the terminal alone. 🦴
|105|Marowak|Ground An orphan script that recovered its source code. Now uses a silicon bone to defend the root directory.
|106|Hitmonlee|Lucha|Boot optimization program. Kicks slow processes so the kernel starts in under 2 seconds.
|107|Hitmonchan|Lucha|Fast-response antivirus. Launches scan bursts that leave no malware standing.
|108|Lickitung|Normal|Biological magnetic card reader. Its tongue is the weirdest data cable I’ve ever seen.
|109|Koffing|Poison A poorly optimized mining process that fills the system with "smoke" (junk logs) and overheats the CPU.
|110|Weezing|Poison The smoke coming out of the Snapdragon when you try to compile libggml-vulkan.so with -j8.
|111|Rhyhorn|Rock/Ground A 10TB mechanical HDD. Heavy, noisy at startup, and lacks agility—but once it starts writing data, nothing stops it. 🧱
|112|Rhydon|Rock/Ground A RAID 0 of HDDs. Raw write power, but if one fails, it’s total panic.
|113|Chansey|Normal Redundant Backup system. Always carries a safety copy (its egg) in case the main system suffers a critical "faint." 🥚🩹
|114|Tangela|Grass The actual state of our rack's backside. A mess of Jack, USB, and network cables that somehow works. 🕸️🔌
|115|Kangaskhan|Normal|A Docker container. Carries its microservice (the child) protected within its own isolated environment.
|116|Horsea|Water|A small packet injector. Shoots code ink to mask its IP on the network.
|117|Seadra|Water|The injector has evolved. Now uses encryption scales that make its network traffic undetectable.
|118|Goldeen|Water|An elegant screensaver flowing in the framebuffer, yet consuming GPU cycles for no reason.
|119|Seaking|Water|The same screensaver in Ultra mode. Its water reflections are the Adreno 618’s nightmare.
|120|Staryu|Water|Miscalibrated ambient light sensor. Its core blinks red when the CPU hits 90%.
|121|Starmie|Water/Psychic|Perfectly aligned satellite antenna. Receives data from the stars (or the Surya’s GPS) with zero latency.
|122|Mr. Mime|Psychic|A moody Window Manager. Creates invisible walls on the desktop where the mouse gets stuck.
|123|Scyther|Bug/Flying|A frequency-cutting tool (Low Pass Filter). Its blades split audio waves with microsecond precision in Audacity. ✂️🎶
|124|Jynx|Ice/Psychic|A UI with too many unnecessary animations. Freezes if you try to navigate too fast.
|125|Electabuzz|Electric|A UPS (Uninterruptible Power Supply). Gets nervous and starts beeping when it detects a voltage drop.
|126|Magmar|Fire|A 14th Gen Intel CPU without a power limiter. Basically a space heater that also does math.
|127|Pinsir|Bug|Multi-threaded compression tool. Grips data with its pincers until the .7z file can’t take any more.
|128|Tauros|Normal|A stress-ng script. Runs through all 8 cores of the Surya, ramming into the RAM until something breaks.
|129|Magikarp|Water|Looks like it’s just splashing around, but it’s optimized code waiting for its moment. An imminent evolution. 🌊🔥
|130|Gyarados|Water/Flying|The moment libggml-vulkan.so finally compiles and the Adreno 618 wakes up. From splashing to demolishing tokens per second.
|131|Lapras|Water/Ice|Elegant and secure navigation system. Its song calms the kernel and prevents panics during data storms.
|132|Ditto|Normal|chmod 777. Tries to be everything to everyone, but ends up being a security hole with eyes.
|133|Eevee|Normal|Polymorphic binary. Can mutate into eight different drivers depending on the patch you apply.
|134|Vaporeon|Water|Modular liquid cooling. Its molecular structure is indistinguishable from the coolant itself.
|135|Jolteon|Electric|A sysadmin's dream: an Ethernet cable with zero interference and lightning-fast transmission.
|136|Flareon|Fire|Thermal overclocking with fur.
|137|Porygon|Normal|Pure code. The first .exe with consciousness.
|138|Omanyte|Rock/Water|Legacy kernel driver recovered from magnetic tape. Fossilized code, but surprisingly efficient. 🐚📜
|139|Omastar|Rock/Water|The updated fossil driver. We've added tentacles to manage multiple modern execution threads.
|140|Kabuto|Rock/Water|ASM (Assembly) binary recovered from a 3.5" floppy. Hard, primitive, and extremely efficient.
|141|Kabutops|Rock/Water|ASM code optimized for ARM64. Its code-blades cut through clock cycles with surgical precision.
|142|Aerodactyl|Rock/Flying Legacy kernel with real-time patches. A low-latency predator flying over the hardware.
|143|Snorlax|Normal|Hibernation mode active. Not responding to pings. Occupies the entire Swap and refuses to swapoff.
|144|Articuno|Ice/Flying|Liquid Nitrogen cooling system. The absolute King of Overclocking.
|145|Zapdos|Electric/Flying|The Lab’s power grid server. If it flaps, a voltage spike blows every fuse.
|146|Moltres|Fire/Flying|8K rendering process. Elegant, but makes the data center feel like an oven.
|147|Dratini|Dragon|A 10-line Python script. Elegant, clean, and with infinite scalability potential.
|148|Dragonair|Dragon|The script has grown and now manages the Lab's API. Flows with zero latency through the NVMe lanes.
|149|Dragonite|Dragon/Flying|The final distributed system. Capable of orbiting all servers in a second to deliver packets on time.
|150|Mewtwo|Psychic|Created through genetic manipulation; possesses a frozen heart and mental power surpassing any CPU. The absolute SELinux.
|151|Mew|Psychic|The original source code. The .src of life.
DATA SCRIPT
import sys
import os
import subprocess
import re
import time
# --- CONFIGURACIÓN ---
DIRECTORIO_ACTUAL = os.path.dirname(os.path.abspath(__file__))
ARCHIVO_TOMO = os.path.join(DIRECTORIO_ACTUAL, "Tomo_PkKanto.txt")
MODELO_OLLAMA = "frankie"
def limpiar_texto(texto):
"""Limpia basura pero MANTIENE el ritmo para el TTS."""
if not texto: return ""
# 1. Eliminar basura de modelos y tags
ansi_escape = re.compile(r'(?:\x1B[@-_]|[\x80-\x9F])[0-?]*[ -/]*[@-~]')
texto = ansi_escape.sub('', texto)
tokens_sucios = ["<start_of_turn>", "<end_of_turn>", "model", "system", "<|end_of_text|>", "<|user|>", "<|assistant|>"]
for token in tokens_sucios:
texto = texto.replace(token, "")
# 2. Corregir el "tartamudeo" de Phi (Repeticiones de frases adyacentes)
# Si Phi dice "Es un pokemon fuerte. Es un pokemon fuerte.", esto lo limpia.
texto = re.sub(r'(.+?)\1+', r'\1', texto)
# 3. MANTENER COMAS Y PUNTOS (Crucial para gTTS)
# Solo quitamos símbolos raros que el TTS lee como "almohadilla" o "asterisco"
texto = re.sub(r'[|*#>\-_~`°¡!¿?]', ' ', texto)
# 4. Normalización de espacios y saltos de línea
# No los borramos todos, convertimos saltos en puntos si no hay puntuación
texto = texto.replace('\n', '. ').replace('\r', '. ')
# 5. Colapsar espacios y asegurar que no haya dobles puntos
texto = " ".join(texto.split())
texto = texto.replace('..', '.').replace('.,', ',')
return texto.strip()
def comprobar_internet():
try:
subprocess.run(["ping", "-c", "1", "-W", "1", "8.8.8.8"],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True)
return True
except:
return False
def hablar_hibrido(texto):
"""Voz optimizada para no sonar como un robot ametralladora."""
t_audio = limpiar_texto(texto)
if not t_audio or len(t_audio) < 3: return
if comprobar_internet():
try:
print("🌐 Luna procesando voz...")
txt_temp = "/tmp/luna_text.txt" if os.path.exists("/tmp") else "luna_text.txt"
mp3_temp = "/tmp/luna_voice.mp3" if os.path.exists("/tmp") else "luna_voice.mp3"
with open(txt_temp, "w", encoding="utf-8") as f:
f.write(t_audio)
# Usamos gtts-cli pero bajamos un poco la velocidad si Phi va muy rápido
subprocess.run(["gtts-cli", "--lang", "es", "--file", txt_temp, "--output", mp3_temp],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True)
if os.path.exists(mp3_temp):
# Bajamos la velocidad de 1.30 a 1.20 para que las comas se noten más
subprocess.run(["mpv", mp3_temp, "--really-quiet", "--speed=1.20"], check=True)
os.remove(mp3_temp)
os.remove(txt_temp)
return
except Exception as e:
print(f"⚠️ Fallo en gTTS: {e}")
# Fallback Offline
try:
subprocess.run(["termux-tts-speak", t_audio], check=True)
except:
print("🤫 Silencio.")
def consultar_frankie(query):
if not os.path.exists(ARCHIVO_TOMO): return "Tomo extraviado."
registro = None
query_clean = query.strip().lower()
with open(ARCHIVO_TOMO, 'r', encoding='utf-8') as f:
for linea in f:
if not linea.startswith('|'): continue
p = [part.strip() for part in linea.split('|') if part.strip()]
if len(p) >= 2:
if query_clean in [p[0].lower().lstrip('0'), p[1].lower()]:
registro = linea.strip()
break
if not registro: return f"El dato {query} no existe en el registro de Kanto."
# CAMBIO CLAVE: Le damos una instrucción de formato a Phi para que no se pierda
prompt_minimo = (
f"Actúa como la Pokédex. Sé breve y usa comas. "
f"DATO TÉCNICO: {registro}. RESUMEN:"
)
try:
# Mantenemos el -j1 implícito por la carga de Ollama en el Surya
process = subprocess.Popen(["ollama", "run", MODELO_OLLAMA],
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, text=True, encoding='utf-8')
stdout, = process.communicate(input=promptminimo, timeout=60)
return stdout.strip()
except Exception:
return "Conexión con Frankie interrumpida."
if name == "__main__":
if len(sys.argv) < 2:
print("\n🔎 Uso: dex <nombre_o_numero>")
else:
respuesta = consultar_frankie(" ".join(sys.argv[1:]))
print(f"\n📟 Dex: {respuesta}\n")
hablar_hibrido(respuesta)
