---
name: context
lang: py
domain: core
version: "1.0.0"
algebraic: product
definition: |
  @dataclass
  class Context:
      id: str
      uri: str
      parent_uri: str | None = None
      is_leaf: bool = False
      abstract: str = ""
      context_type: str = "resource"
      category: str = ""
      level: int | None = None
      created_at: datetime | None = None
      updated_at: datetime | None = None
      active_count: int = 0
      related_uri: list[str] = field(default_factory=list)
      meta: dict[str, Any] = field(default_factory=dict)
description: "Modelo unificado de contexto que representa cualquier recurso (documento, memoria, skill) indexable y buscable. Combina metadata, jerarquia via URI, conteo de accesos para hotness scoring, y relaciones entre contextos."
tags: [context, rag, vector-db, retrieval, memory, resource, hierarchy, hotness]
uses_types: [context_level_py_core, resource_content_type_py_core]
file_path: "python/types/core/context.py"
---

## Notas

El campo `uri` sigue un esquema tipo filesystem: `viking://resources/docs/readme.md`. El campo `parent_uri` permite reconstruir la jerarquia de directorios sin necesidad de un grafo explicito.

El campo `active_count` se incrementa cada vez que el contexto se recupera — usado por `hotness_score()` para priorizar resultados frecuentes sobre resultados menos accedidos.

El campo `level` referencia los valores de `ContextLevel` (0=ABSTRACT, 1=OVERVIEW, 2=DETAIL). Se almacena como `int | None` para evitar acoplar el tipo a la importacion del enum.

El campo `related_uri` permite modelar grafos de relaciones entre contextos (links, referencias, dependencias) sin necesidad de una tabla de relaciones separada.

Los metodos `to_dict()` y `from_dict()` son inversos entre si: `Context.from_dict(ctx.to_dict()) == ctx` (asumiendo que los timestamps son objetos datetime, no strings).
