Skip to main content

kepta

Python-Client für KEPTA — dem lokalen Gedächtnis für KI-Agenten.

Deine Agenten vergessen dich nach jedem Gespräch. KEPTA behebt das — mit einer SQLite-Datei auf deinem Rechner. Kein Konto, keine Cloud, keine Telemetrie.

Dieses Paket ist der Client, nicht die App. KEPTA läuft als Desktop-Anwendung auf demselben Gerät; hier verbindest du dich damit.

pip install kepta

In dreißig Sekunden

from kepta import KeptaClient

kepta = KeptaClient()          # findet die laufende Instanz von allein

kepta.save("Rezept Carbonara", "Guanciale, Pecorino, Eigelb. Keine Sahne.", tags=["kochen"])

for hit in kepta.search("carbonara ohne sahne"):
    print(f"{hit.score:.2f}  {hit.memory.title}")

Wie gesucht wird

Drei Spuren, zusammengefuehrt per Reciprocal Rank Fusion: Volltext (BM25), Vektoren und Wissensgraph.

Volltext und Graph laufen sofort. Die Vektor-Spur findet auch, was anders formuliert ist als gefragt — dafuer braucht sie ein lokales Embedding-Modell:

ollama pull nomic-embed-text

Erst damit findet search("was koche ich mit Nudeln") das Carbonara-Rezept, in dem das Wort Nudeln gar nicht vorkommt. Fehlt das Modell, bleibt hit.vector_score auf 0.0 und die Suche rein lexikalisch — kein Fehler, nur weniger Treffer bei umschriebenen Fragen. Woran du es siehst:

kepta.health()["embeddings"]     # {'total': 128, 'embedded': 128, ...} — oder ueberall 0

Warum das interessant ist

Dasselbe Gedächtnis wie deine Agenten. Claude Desktop und Cursor sprechen über MCP mit derselben Datenbank. Was dein Python-Skript schreibt, weiß Claude in der nächsten Antwort.

Erinnerungen altern. Jede hat Typ, Gültigkeit und Konfidenz. Zieht jemand um, verdrängt die neue Adresse die alte — die alte bleibt als Historie und fällt im Ranking ab. Widersprüche stapeln sich nicht.

alt = kepta.save("Wohnort", "Alex wohnt in Hamburg.")
kepta.update(alt.id, valid_to=1788400000000)      # abgelaufen ab diesem Zeitpunkt
kepta.save("Wohnort aktuell", "Alex wohnt jetzt in Leipzig.")

m = kepta.list()[0]
m.is_expired, m.is_superseded                      # Zustand direkt am Objekt

Keine Abhängigkeiten. Nur die Standardbibliothek. Ein Gedächtnis, das Privatsphäre verspricht, sollte keinen fremden Code in deinen Prozess holen.

Die Verbindung finden

KeptaClient() sucht in dieser Reihenfolge:

  1. Umgebungsvariable KEPTA_URL
  2. ~/.kepta/endpoint.json — die Adressdatei, die KEPTA beim Start schreibt
  3. http://127.0.0.1:3000 als Rückfall für den Entwicklungsmodus

Schritt 2 ist der wichtige: Die gepackte App wählt einen zufälligen Port. Explizit geht natürlich auch:

kepta = KeptaClient("http://127.0.0.1:52341")

Läuft nichts, bekommst du keinen kryptischen Netzwerkfehler, sondern einen Satz, der sagt, was zu tun ist:

if not kepta.is_alive():
    print("KEPTA läuft nicht — App starten oder KEPTA_URL setzen.")

Was der Client kann

Methode Zweck
health() · is_alive() Status, Version, Anzahl Knoten
list(trash=False) Alle Erinnerungen oder den Papierkorb
search(query, top_k, tags, type, scope) Hybride Suche mit temporaler Gewichtung
save(title, content, …) Anlegen — Typ, Tags, Konfidenz, Gültigkeit
update(id, **felder) Ändern; valid_to= statt validTo=
delete(id, permanent=False) Papierkorb, auf Wunsch endgültig
restore(id) Aus dem Papierkorb zurückholen
graph() Entitäten und Relationen

Memory und SearchHit sind eingefrorene Dataclasses mit Typannotationen. SearchHit zeigt neben dem Gesamtwert auch die Einzelspuren vector_score und lexical_score.

KEPTA installieren

Die App gibt es für macOS, Windows und Linux unter Releases — jeweils Intel und ARM. MIT-Lizenz, kostenlos.

Lizenz

MIT

Download files

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

Source Distribution

kepta-0.1.1.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

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

kepta-0.1.1-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: kepta-0.1.1.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for kepta-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1d1391786d5f79492875ca0c03ffd713092689865162544b74ac16f737381515
MD5 29556afd7c2e3527e4435dfe8d36149d
BLAKE2b-256 1382b2297b1837f5e4fdcf8f7ec9516d96be65668479082caa7aef6d7e989b22

See more details on using hashes here.

Provenance

The following attestation bundles were made for kepta-0.1.1.tar.gz:

Publisher: pypi.yml on DamianTodorovic/kepta

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: kepta-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for kepta-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 23c5b43a2faa933a7211459317f59be516dd6d0b490677c9679e635eb4429a3c
MD5 854b589490fdb9c061cf66de6798f988
BLAKE2b-256 046eb8b16e4f7256b4a639a2ed46e7cb30436f57021e43b5fb6f1c881bc86273

See more details on using hashes here.

Provenance

The following attestation bundles were made for kepta-0.1.1-py3-none-any.whl:

Publisher: pypi.yml on DamianTodorovic/kepta

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.3

2 files

0.1.2

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page