Skip to main content

Oroi

Oroi (euskera: raíz de oroitu, «recordar») — una red semántica para agentes conversacionales. Memoria para una conversación infinita.

Oroi es una memoria asociativa para chatbots y agentes LLM que almacena la conversación como una red semántica con dinámica de activación inspirada en la memoria humana: lo mencionado se activa, la activación se propaga a lo asociado, todo decae con los turnos, las asociaciones que se repiten se refuerzan y un proceso en segundo plano consolida lo importante — como la memoria humana consolida durante el sueño.

La hipótesis: la recuperación sensible a la activación supera a la recuperación por similitud vectorial pura (RAG) en conversaciones largas con referencias recurrentes y deriva temática. En una evaluación de 224 escenarios, Oroi supera al RAG híbrido 0,75 frente a 0,55 en recall de recuperación (gana en 43 escenarios y no pierde en ninguno; p<10⁻⁴), con la ventaja concentrada en los casos que confunden a la búsqueda por similitud: distractores, datos que cambian y cadenas de tres asociaciones.

Oroi is an associative memory for LLM agents: a semantic network with activation dynamics inspired by human memory. Spanish-first project; English preprint available below.

El preprint

Instalación

Requiere Python ≥ 3.12 con soporte de extensiones SQLite (los intérpretes de uv, Homebrew, conda y las distribuciones Linux lo traen; el instalador de python.org para macOS, no).

# como librería, dentro de tu proyecto (venv, uv, poetry...):
pip install oroi

# como herramienta de línea de comandos, global:
uvx oroi            # o: pipx install oroi

# desde el repositorio, para desarrollo:
git clone https://github.com/igorlaburu/oroi && cd oroi && uv sync

Credenciales: copia .env.example a .env (en tu carpeta de trabajo o en ~/.oroi/.env para tenerlas globales) y rellena tus claves — Azure OpenAI, o cualquier endpoint OpenAI-compatible como Ollama para correr 100 % en local. Tu memoria vive por defecto en ~/.oroi/mind.db (cámbiala con --db en cualquier comando).

Uso en diez líneas

from oroi import Mind
from oroi.extraction.extractor import TurnExtractor
from oroi.providers.azure import AzureEmbedder, AzureLLM
from oroi.providers.settings import ProviderSettings

settings = ProviderSettings()                      # lee .env
llm = AzureLLM(settings)
mind = Mind("memoria.db", AzureEmbedder(settings), TurnExtractor(llm), judge=llm)

mind.perceive("mi oficina está en Madrid")         # codificar un turno
print(mind.recall("¿dónde trabajo?"))              # recuperar: reconocimiento + evocación

La memoria persiste en memoria.db: reabrir es continuar, no empezar de cero. Mind.sleep() consolida (fusión de duplicados, promoción de asociaciones repetidas, poda); en el REPL y el servidor ocurre solo al quedar inactiva la conversación.

La línea de comandos

uv run oroi-chat                        # REPL conversacional con memoria (proveedor por .env)
uv run oroi viz --db memoria.db         # la película de la memoria, en HTML autocontenido
uv run oroi serve --db memoria.db       # visor en vivo + chat contra la mente real
uv run oroi replay --db memoria.db      # reconstruye la película desde los episodios
uv run oroi consolidate --db memoria.db # consolidación bajo demanda

¿Sin conversación propia todavía? uv run python examples/demo_conversation.py graba una conversación cotidiana de demostración en examples/demo.db.

Proveedores

Pieza Soporte hoy
Extracción (LLM rápido) Azure OpenAI, u OpenAI-compatible (OpenAI directo, Ollama, vLLM...)
Embeddings Azure OpenAI, u OpenAI-compatible con un modelo de embeddings en el endpoint
Conversador Claude (API o sesión local de Claude Code), Azure, u OpenAI-compatible

Para correr 100 % en local con Ollama: MEMORY_PROVIDER=openai, OPENAI_BASE_URL=http://localhost:11434/v1, OPENAI_FAST_MODEL=qwen3.6:latest (o tu modelo), y un modelo de embeddings servido (p. ej. nomic-embed-text, con OPENAI_EMBEDDING_DIM=768).

El núcleo no depende de ningún proveedor: oroi/providers/base.py define los Protocols (Embedder, Extractor, Chat) y todo se inyecta por constructor — cualquier otro proveedor es implementar dos o tres métodos.

Evaluación

El protocolo del preprint es reproducible: evaluation/ contiene el corpus sintético (224 escenarios, 7 fenómenos), las condiciones de contraste (RAG híbrido, RAG sobre hechos, re-ranker) y las dos métricas (Recall@contexto y Answer@judge).

uv run python -m evaluation.run        # tabla por fenómeno + test de McNemar + costes

Estado y licencia

Código bajo Apache-2.0; el nombre «Oroi» queda fuera de la concesión de licencia. Proyecto de investigación en desarrollo activo: la API puede cambiar. Próximas piezas declaradas en el preprint: reelaboración de recuerdos y validación sobre benchmark externo.

Contacto

Igor Laburu · Gako AI · oroi@gako.ai

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oroi-0.1.1.tar.gz (490.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oroi-0.1.1-py3-none-any.whl (59.8 kB view details)

Uploaded Python 3

File details

Details for the file oroi-0.1.1.tar.gz.

File metadata

  • Download URL: oroi-0.1.1.tar.gz
  • Upload date:
  • Size: 490.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for oroi-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6e4b6e972b89c5e61d327f89cbba6c77581eb763f5c470979ef2785ed772df35
MD5 84a4abb46ed98398e6f77671862101c7
BLAKE2b-256 69b1431c1b19e1e1d9be3d2c9dc63c65616080920a0df7a76d4cdc8d5558f8c9

See more details on using hashes here.

File details

Details for the file oroi-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: oroi-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 59.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for oroi-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 48948ba00f8b16c3f93950af46775ef8c95801ce218c1cfaa33762359ef3bf40
MD5 81a5c3507d375541b5102ff74f24938c
BLAKE2b-256 f465fb32234dc68b67c82b6b2bbfc2d947c8766d6caad57cbacff2abb3573a6b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

0.0.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page