kore-bridge
LLM integration layer for kore-mind. Runtime-agnostic cognitive bridge.
Middleware cognitivo entre tu app y el LLM. Cache, routing, rate limiting, A/B testing — todo antes de gastar tokens.
Part of kore-stack — the complete cognitive middleware for LLMs. pip install kore-stack for the full stack, or install individually:
Install
pip install kore-bridge # core (zero deps beyond kore-mind)
pip install kore-bridge[openai] # + OpenAI
pip install kore-bridge[anthropic] # + Anthropic
pip install kore-bridge[sc] # + Selector Complexity routing
pip install kore-bridge[all] # everything
Quick start (Ollama — 100% local, zero API keys)
ollama pull llama3.2
from kore_mind import Mind
from kore_bridge import Bridge, OllamaProvider
mind = Mind("agent.db")
llm = OllamaProvider(model="llama3.2") # local, free, private
bridge = Bridge(mind=mind, llm=llm)
# Think with context (auto-remembers)
response = bridge.think("Help me with my proof", user="carlos")
# Observe something
bridge.observe("User prefers concise answers")
# Reflect: LLM generates emergent identity from memories
identity = bridge.reflect()
print(identity.summary)
v0.3.2 — kore-mind v0.4.0 embeddings
Now requires kore-mind>=0.4.0 which adds persistent SQLite cache, float16 quantization, async embeddings, streaming batch, and dimension validation. See kore-mind changelog.
v0.3.1 — kore-mind optimized embeddings
Optimized Ollama embeddings: connection reuse, LRU cache, batch embedding, and fallback warnings.
v0.2 Features
Smart Cache
If the LLM already answered something similar, don't spend tokens.
bridge = Bridge(mind=mind, llm=llm, cache_ttl=3600.0)
r1 = bridge.think("What is P vs NP?") # calls LLM
r2 = bridge.think("What is P vs NP?") # cache hit, no LLM call
# Bypass cache when needed
r3 = bridge.think("What is P vs NP?", use_cache=False) # forces LLM
Cache is per-user: different users get different cached responses.
Rate Limiting
If the user asked the same thing 3 times, respond from memory.
bridge = Bridge(
mind=mind, llm=llm,
rate_limit=3, # max 3 identical queries per window
rate_window=3600.0, # 1 hour window
)
# 4th identical query → served from cache/memory, no LLM call
Per-user Filtering
Each user gets their own context. The user parameter in think() filters memories by source.
bridge.think("Help with Python", user="alice") # alice's memories
bridge.think("Help with Rust", user="bob") # bob's memories
LLM Routing
Simple queries to local Ollama (free), complex ones to GPT-4 (powerful).
from kore_bridge import RouterProvider, OllamaProvider
from kore_bridge.providers import OpenAIProvider
router = RouterProvider(
providers={
"fast": OllamaProvider(model="llama3.2"),
"quality": OpenAIProvider(model="gpt-4o"),
},
# Optional: custom routing logic
route_fn=lambda msgs: "fast" if len(msgs[-1]["content"]) < 100 else "quality",
)
bridge = Bridge(mind=mind, llm=router)
bridge.think("Hi") # → Ollama (fast)
bridge.think("Explain quantum...") # → GPT-4 (quality)
print(router.last_route) # "quality"
Summarize (used by reflect()) always routes to "quality".
SC Routing (Selector Complexity)
Routing based on formal proof complexity theory. Not heuristics — mathematics.
pip install kore-bridge[sc]
from kore_bridge import SCRouterProvider, OllamaProvider
from kore_bridge.providers import OpenAIProvider
from sc_router import ToolCatalog, Tool
catalog = ToolCatalog()
catalog.register(Tool(
name="calculator",
description="Arithmetic calculations",
input_types={"expression"},
output_types={"number"},
capability_tags={"math", "calculate"},
))
router = SCRouterProvider(
providers={
"fast": OllamaProvider(model="llama3.2"),
"quality": OpenAIProvider(model="gpt-4o"),
},
catalog=catalog,
)
bridge = Bridge(mind=mind, llm=router)
bridge.think("What is 2+2?") # SC(0) → Ollama
bridge.think("Analyze and cross-reference market data") # SC(2+) → GPT-4
print(router.last_sc_level) # 0, 1, 2, or 3
print(router.last_classification) # full classification evidence
A/B Testing
Compare two providers with the same query and context.
from kore_bridge import Experiment
exp = Experiment(
mind,
variant_a=OllamaProvider(model="llama3.2"),
variant_b=OllamaProvider(model="mistral"),
)
result = exp.run("Explain recursion")
print(result.variant_a) # llama3.2's response
print(result.variant_b) # mistral's response
print(result.faster) # "a" or "b"
print(f"A: {result.time_a_ms:.0f}ms, B: {result.time_b_ms:.0f}ms")
# Batch comparison
results = exp.run_batch(["Q1", "Q2", "Q3"])
By default, remember=False — experiments don't contaminate memory.
Observability
Full tracing when enable_traces=True on the Mind.
mind = Mind("agent.db", enable_traces=True)
bridge = Bridge(mind=mind, llm=llm)
bridge.think("Hello", user="carlos")
traces = mind.traces(operation="bridge.think")
for t in traces:
print(f"{t.operation} | {t.duration_ms:.0f}ms | cache_hit={t.metadata['cache_hit']}")
Providers
# Ollama (local, recommended for OSS)
from kore_bridge import OllamaProvider
llm = OllamaProvider(model="llama3.2")
# OpenAI
from kore_bridge.providers import OpenAIProvider
llm = OpenAIProvider(model="gpt-4o-mini")
# Anthropic
from kore_bridge.providers import AnthropicProvider
llm = AnthropicProvider(model="claude-sonnet-4-5-20250929")
# Any callable
from kore_bridge import CallableLLM
llm = CallableLLM(lambda msgs: my_custom_api(msgs))
# Router (multiple providers)
from kore_bridge import RouterProvider
llm = RouterProvider(providers={"fast": ollama, "quality": openai})
Backward compatibility
All new parameters have defaults that preserve v0.1 behavior:
# This works exactly the same as v0.1
bridge = Bridge(mind=mind, llm=llm)
bridge.think("Hello")
Part of kore-stack
| Package | What it does |
|---|---|
| kore-mind | Memory, identity, traces, cache storage |
| kore-bridge (this) | LLM integration, cache logic, rate limiting, A/B testing, SC routing |
| sc-router | Query routing by Selector Complexity theory |
| kore-stack | All of the above, one install: pip install kore-stack |
Demo
python examples/demo_llm.py # uses llama3.2
python examples/demo_llm.py mistral # uses mistral
License
MIT
Metadata
Release files for kore-bridge 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kore_bridge-0.3.3.tar.gz | 14.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kore_bridge-0.3.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.7 kB
Release files / kore_bridge-0.3.3.tar.gz
| Download URL | kore_bridge-0.3.3.tar.gz |
|---|---|
| Size | 14.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d1fdaba6d1a50ae0857279931e1ec55456f9145dbfc0a722e7464cdc5b35d2c8
|
|
BLAKE2b-256 checksum How to use checksums |
cb6e325fdb4004ba294e70aaf2848760fabb9d86cf8b91dc6a8aefff47046388
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / kore_bridge-0.3.3-py3-none-any.whl
| Download URL | kore_bridge-0.3.3-py3-none-any.whl |
|---|---|
| Size | 12.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09f6a4e43819022da30db08c5a9e10dc9faaa63875d91dc97150c5e8e72ebe14
|
|
BLAKE2b-256 checksum How to use checksums |
ad7e3e228db6413077e829badccc838bde17dc934a53d503b386a74e877ec77d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|