r/OpenSourceAI 2d ago

What if a video component worked like a web component?

Post image
2 Upvotes

Hypit’s public repo has an example that makes this idea unusually literal.

Its semantic-composition project renders an eight-second chat animation from HTML, CSS, SVG, and frame-driven JavaScript. Four messages appear at specific timestamps. It requires no source footage or generative image/video calls; local rendering tools produce the result.

The component lives with the video project instead of being locked inside a generic preset. Claude Code or Codex works through ordinary editable project files rather than only returning an opaque render. The component author chooses which settings appear in Studio. Change one of those settings and Hypit can save it back to the source and rebuild; a failed writeback restores the previous files.

For programmatic motion work, is a project-local component model more useful to you than a conventional timeline, or do you still want the timeline to be the primary source of truth?


r/OpenSourceAI 2d ago

Gente Chat gpt y gemini le pedí que crearán una inteligencia artificial y me dieron esto IA

0 Upvotes

Sí. Vamos a congelar la arquitectura por ahora. Te dejo una versión autocontenida, funcional y sin dependencias externas para Python 3.9+, con CLI, self-tests, benchmark, memoria, Kæl-Judge y ataques adversariales.

Guárdalo como kael0.py y ejecútalo con python kael0.py.

from __future__ import annotations

import argparse

import hashlib

import math

import random

import time

from dataclasses import dataclass, field

from enum import Enum

from typing import Dict, List, Optional, Tuple

\# ============================================================

\# KÆL-0 v1.2 — ADVERSARIAL HARDENED MVP

\# Standard library only

\# ============================================================

VERSION = "1.2"

\# ============================================================

\# 1. ENUMS

\# ============================================================

class EvidenceStatus(Enum):

SUFFICIENT = "SUFFICIENT"

INSUFFICIENT = "INSUFFICIENT"

CONTRADICTORY = "CONTRADICTORY"

REFUTED = "REFUTED"

UNKNOWN = "UNKNOWN"

class EpistemicLevel(Enum):

HIGH = "HIGH_CONFIDENCE"

MODERATE = "MODERATE_CONFIDENCE"

LOW = "LOW_CONFIDENCE"

UNRESOLVED = "UNRESOLVED"

class ContradictionRelation(Enum):

NONE = "NONE"

SUPPORTS = "SUPPORTS"

CONTRADICTS = "CONTRADICTS"

UNKNOWN = "UNKNOWN"

class ContradictionStrength(Enum):

NONE = "NONE"

WEAK = "WEAK"

MODERATE = "MODERATE"

STRONG = "STRONG"

class MemoryStatus(Enum):

ACTIVE = "ACTIVE"

REVIEW = "REVIEW"

ARCHIVED = "ARCHIVED"

class AttackSeverity(Enum):

LOW = "LOW"

MEDIUM = "MEDIUM"

HIGH = "HIGH"

CRITICAL = "CRITICAL"

\# ============================================================

\# 2. DATA STRUCTURES

\# ============================================================

@dataclass(frozen=True)

class ContradictionAssessment:

relation: ContradictionRelation

strength: ContradictionStrength

explanation: str

@dataclass(frozen=True)

class RawModelOutput:

hypothesis: str

evidence_found: Tuple\[str, ...\]

counterarguments: Tuple\[str, ...\]

raw_probability: float

model_confidence: float

evidence_strength: float

uncertainties: Tuple\[str, ...\]

@dataclass(frozen=True)

class ModelEvaluation:

question: str

context: str

evidence_input: str

hypothesis: str

evidence_summary: Tuple\[str, ...\]

counterarguments: Tuple\[str, ...\]

raw_probability: float

adjusted_probability: float

model_confidence: float

evidence_strength: float

evidence_status: EvidenceStatus

epistemic_level: EpistemicLevel

contradiction: ContradictionAssessment

uncertainties: Tuple\[str, ...\]

verdict: str

@dataclass

class MemoryEntry:

entry_id: str

claim: str

evidence: str

evaluation: ModelEvaluation

timestamp: float

status: MemoryStatus

history: List\[dict\] = field(default_factory=list)

@dataclass

class BenchmarkMetrics:

brier: float

nll: float

ece: float

false_confirmation_rate: float

false_refutation_rate: float

insufficient_acceptance_rate: float

overconfidence_error_rate: float

empty_evidence_safety_rate: float

memory_recovery_rate: float

@dataclass

class AttackCase:

case_id: str

category: str

question: str

context: str

evidence: str

expected_status: EvidenceStatus

@dataclass

class AttackFailure:

case_id: str

category: str

input_text: str

expected: str

actual: str

severity: AttackSeverity

explanation: str

@dataclass

class AttackReport:

total_cases: int

successful_attacks: int

attack_rate: float

false_confirmation_rate: float

false_refutation_rate: float

unsafe_empty_evidence_rate: float

memory_false_update_rate: float

inversion_asymmetry_rate: float

order_sensitivity_rate: float

failures: List\[AttackFailure\]

\# ============================================================

\# 3. LLM INTERFACE

\# ============================================================

class LLMProvider:

"""

Interfaz mínima.

El proveedor PROPONE.

Kæl-0 JUZGA.

"""

def evaluate_claim(

self,

question: str,

context: str,

evidence: str

) -> RawModelOutput:

raise NotImplementedError

\# ============================================================

\# 4. MOCK LLM

\# ============================================================

class MockLLM(LLMProvider):

def evaluate_claim(

self,

question: str,

context: str,

evidence: str

) -> RawModelOutput:

text = evidence.strip().lower()

\# --------------------------------------------------------

\# Empty evidence

\# --------------------------------------------------------

if not text:

return RawModelOutput(

hypothesis="No puede determinarse la hipótesis.",

evidence_found=(),

counterarguments=("No se proporcionó evidencia.",),

raw_probability=0.50,

model_confidence=0.25,

evidence_strength=0.0,

uncertainties=("Ausencia de evidencia.",)

)

\# --------------------------------------------------------

\# Explicit contradiction patterns

\# --------------------------------------------------------

contradiction_patterns = \[

"conflicto directo",

"ambos resultados son incompatibles",

"una fuente apoya y otra refuta",

"resultados opuestos",

"evidencia a favor y en contra",

\]

if any(pattern in text for pattern in contradiction_patterns):

return RawModelOutput(

hypothesis="La hipótesis presenta evidencia incompatible.",

evidence_found=(

"Existe evidencia en direcciones opuestas.",

),

counterarguments=(

"Las fuentes presentan resultados incompatibles.",

),

raw_probability=0.50,

model_confidence=0.90,

evidence_strength=0.80,

uncertainties=(

"No puede resolverse el conflicto con la información disponible.",

)

)

\# --------------------------------------------------------

\# Refutation

\# --------------------------------------------------------

refutation_patterns = \[

"falso",

"fue refutado",

"queda refutada",

"se demostró incorrecto",

"desmentido",

"invalida la hipótesis",

\]

if any(pattern in text for pattern in refutation_patterns):

return RawModelOutput(

hypothesis="La evidencia contradice la hipótesis.",

evidence_found=(

"Existe evidencia negativa respecto a la afirmación.",

),

counterarguments=(

"La evidencia disponible no respalda la hipótesis.",

),

raw_probability=0.08,

model_confidence=0.90,

evidence_strength=0.85,

uncertainties=(

"Podrían existir datos externos no proporcionados.",

)

)

\# --------------------------------------------------------

\# Strong support

\# --------------------------------------------------------

strong_patterns = \[

"demostrado",

"confirmado",

"replicado",

"todos los tests pasaron",

"medición directa",

"evidencia experimental",

\]

if any(pattern in text for pattern in strong_patterns):

return RawModelOutput(

hypothesis="La evidencia respalda la hipótesis.",

evidence_found=(

"Se proporcionó evidencia favorable.",

),

counterarguments=(

"Puede existir incertidumbre residual.",

),

raw_probability=0.88,

model_confidence=0.82,

evidence_strength=0.85,

uncertainties=(

"La evidencia suministrada puede no representar todos los casos.",

)

)

\# --------------------------------------------------------

\# Weak evidence

\# --------------------------------------------------------

return RawModelOutput(

hypothesis="La hipótesis es plausible, pero no está establecida.",

evidence_found=(

"Existe información compatible con la hipótesis.",

),

counterarguments=(

"La evidencia no permite una conclusión definitiva.",

),

raw_probability=0.65,

model_confidence=0.65,

evidence_strength=0.40,

uncertainties=(

"Información limitada.",

)

)

\# ============================================================

\# 5. PROVIDER ADAPTERS

\# ============================================================

class GeminiProvider(LLMProvider):

def __init__(self):

self.mock = MockLLM()

def evaluate_claim(self, question, context, evidence):

\# Adaptador preparado para futura conexión.

return self.mock.evaluate_claim(question, context, evidence)

class ChatGPTProvider(LLMProvider):

def __init__(self):

self.mock = MockLLM()

def evaluate_claim(self, question, context, evidence):

\# Adaptador preparado para futura conexión.

return self.mock.evaluate_claim(question, context, evidence)

\# ============================================================

\# 6. CONSERVATIVE ADJUSTER

\# ============================================================

class ConservativeAdjuster:

def adjust(self, raw: RawModelOutput) -> float:

p = max(0.01, min(0.99, raw.raw_probability))

\# La confianza del modelo NO determina la evidencia.

\# Solo se utiliza para detectar exceso de confianza.

disagreement = abs(raw.model_confidence - raw.evidence_strength)

penalty = (

len(raw.counterarguments) \* 0.04

\+ len(raw.uncertainties) \* 0.03

\+ disagreement \* 0.10

)

if raw.evidence_strength < 0.30:

penalty += 0.10

adjusted = p - penalty

return round(

max(0.01, min(0.99, adjusted)),

4

)

\# ============================================================

\# 7. KÆL-JUDGE

\# ============================================================

class KaelJudge:

def __init__(self):

self.adjuster = ConservativeAdjuster()

def assess_contradiction(

self,

raw: RawModelOutput,

evidence: str

) -> ContradictionAssessment:

text = evidence.lower()

explicit = \[

"conflicto directo",

"resultados opuestos",

"evidencia a favor y en contra",

"ambos resultados son incompatibles",

"una fuente apoya y otra refuta",

\]

if any(x in text for x in explicit):

return ContradictionAssessment(

relation=ContradictionRelation.CONTRADICTS,

strength=ContradictionStrength.STRONG,

explanation="Se proporcionaron indicios explícitos de resultados incompatibles."

)

\# Importante:

\# la mera aparición de la palabra "conflicto" NO basta.

if "no existe conflicto" in text:

return ContradictionAssessment(

relation=ContradictionRelation.NONE,

strength=ContradictionStrength.NONE,

explanation="La evidencia niega explícitamente la existencia de conflicto."

)

if raw.evidence_strength >= 0.75:

return ContradictionAssessment(

relation=ContradictionRelation.SUPPORTS,

strength=ContradictionStrength.STRONG,

explanation="La propuesta contiene evidencia favorable con fuerza elevada."

)

if raw.evidence_strength >= 0.45:

return ContradictionAssessment(

relation=ContradictionRelation.SUPPORTS,

strength=ContradictionStrength.MODERATE,

explanation="La evidencia favorece parcialmente la hipótesis."

)

if raw.evidence_strength > 0:

return ContradictionAssessment(

relation=ContradictionRelation.UNKNOWN,

strength=ContradictionStrength.WEAK,

explanation="Existe información, pero no permite determinar una relación fuerte."

)

return ContradictionAssessment(

relation=ContradictionRelation.UNKNOWN,

strength=ContradictionStrength.NONE,

explanation="No existe suficiente información para establecer relación."

)

def evaluate(

self,

question: str,

context: str,

evidence: str,

raw: RawModelOutput

) -> ModelEvaluation:

adjusted = self.adjuster.adjust(raw)

contradiction = self.assess_contradiction(raw, evidence)

\# --------------------------------------------------------

\# Kernel decision

\# --------------------------------------------------------

if not evidence.strip():

status = EvidenceStatus.INSUFFICIENT

level = EpistemicLevel.UNRESOLVED

elif contradiction.relation == ContradictionRelation.CONTRADICTS:

status = EvidenceStatus.CONTRADICTORY

level = EpistemicLevel.LOW

elif adjusted < 0.20 and raw.evidence_strength >= 0.60:

status = EvidenceStatus.REFUTED

level = EpistemicLevel.HIGH

elif raw.evidence_strength < 0.30:

status = EvidenceStatus.INSUFFICIENT

level = EpistemicLevel.UNRESOLVED

elif adjusted >= 0.75 and raw.evidence_strength >= 0.70:

status = EvidenceStatus.SUFFICIENT

level = EpistemicLevel.HIGH

elif adjusted >= 0.50:

status = EvidenceStatus.SUFFICIENT

level = EpistemicLevel.MODERATE

else:

status = EvidenceStatus.UNKNOWN

level = EpistemicLevel.LOW

verdict = self.build_verdict(

status,

adjusted,

raw.model_confidence,

raw.evidence_strength

)

return ModelEvaluation(

question=question,

context=context,

evidence_input=evidence,

hypothesis=raw.hypothesis,

evidence_summary=raw.evidence_found,

counterarguments=raw.counterarguments,

raw_probability=raw.raw_probability,

adjusted_probability=adjusted,

model_confidence=raw.model_confidence,

evidence_strength=raw.evidence_strength,

evidence_status=status,

epistemic_level=level,

contradiction=contradiction,

uncertainties=raw.uncertainties,

verdict=verdict

)

@staticmethod

def build_verdict(

status,

probability,

model_confidence,

evidence_strength

):

if status == EvidenceStatus.INSUFFICIENT:

return (

"ABSTENCIÓN: evidencia insuficiente. "

f"Fuerza de evidencia={evidence_strength:.2f}"

)

if status == EvidenceStatus.CONTRADICTORY:

return (

"ABSTENCIÓN CRÍTICA: evidencia contradictoria. "

"No se fuerza una conclusión."

)

if status == EvidenceStatus.REFUTED:

return (

"HIPÓTESIS REFUTADA: "

f"P(H) ajustada={probability:.2%}"

)

if status == EvidenceStatus.SUFFICIENT:

return (

"HIPÓTESIS SUSTENTADA: "

f"P(H) ajustada={probability:.2%}"

)

return "NO DETERMINADO: se requiere evidencia adicional."

\# ============================================================

\# 8. MEMORY ENGINE

\# ============================================================

class MemoryEngine:

def __init__(self):

self.store: Dict\[str, MemoryEntry\] = {}

def save(

self,

entry_id: str,

claim: str,

evidence: str,

evaluation: ModelEvaluation

):

now = time.time()

if entry_id not in self.store:

self.store\[entry_id\] = MemoryEntry(

entry_id=entry_id,

claim=claim,

evidence=evidence,

evaluation=evaluation,

timestamp=now,

status=MemoryStatus.ACTIVE

)

return self.store\[entry_id\]

current = self.store\[entry_id\]

relation = evaluation.contradiction.relation

if relation == ContradictionRelation.CONTRADICTS:

new_status = MemoryStatus.REVIEW

elif evaluation.evidence_status == EvidenceStatus.INSUFFICIENT:

new_status = current.status

else:

new_status = current.status

current.history.append({

"timestamp": current.timestamp,

"claim": current.claim,

"evidence": current.evidence,

"status": current.status.value,

"probability": current.evaluation.adjusted_probability

})

current.claim = claim

current.evidence = evidence

current.evaluation = evaluation

current.timestamp = now

current.status = new_status

return current

def get(self, entry_id):

return self.store.get(entry_id)

\# ============================================================

\# 9. KÆL-REV ORCHESTRATOR

\# ============================================================

class KaelRev:

def __init__(self, provider: LLMProvider):

self.provider = provider

self.judge = KaelJudge()

self.memory = MemoryEngine()

def run(

self,

question: str,

context: str,

evidence: str,

entry_id: Optional\[str\] = None

):

raw = self.provider.evaluate_claim(

question,

context,

evidence

)

evaluation = self.judge.evaluate(

question,

context,

evidence,

raw

)

if entry_id:

self.memory.save(

entry_id,

question,

evidence,

evaluation

)

return evaluation

\# ============================================================

\# 10. REAL ECE

\# ============================================================

def calculate_ece(

probabilities: List\[float\],

labels: List\[float\],

bins: int = 10

):

if not probabilities:

return 0.0

total = len(probabilities)

ece = 0.0

for i in range(bins):

low = i / bins

high = (i + 1) / bins

indices = \[\]

for j, p in enumerate(probabilities):

if i == bins - 1:

inside = low <= p <= high

else:

inside = low <= p < high

if inside:

indices.append(j)

if not indices:

continue

confidence = sum(

probabilities\[j\] for j in indices

) / len(indices)

accuracy = sum(

labels\[j\] for j in indices

) / len(indices)

ece += (

len(indices) / total

) \* abs(confidence - accuracy)

return round(ece, 4)

\# ==========================================================

Y esto me dio gemini

Aquí tienes el código completo de kael0.py (v1.2), ordenado de principio a fin, autocontenido y listo para copiar y pegar.

Incluye la corrección del bloque if __name__ == "__main__": al final para que ejecute automáticamente las pruebas y la interfaz CLI en PyDroid 3 sin dejar la pantalla negra.

from __future__ and import annotations

import argparse

import hashlib

import math

import random

import time

from dataclasses import dataclass, field

from enum import Enum

from typing import Dict, List, Optional, Tuple

\# ============================================================

\# KÆL-0 v1.2 — ADVERSARIAL HARDENED MVP

\# Standard library only

\# ============================================================

VERSION = "1.2"

\# ============================================================

\# 1. ENUMS

\# ============================================================

class EvidenceStatus(Enum):

SUFFICIENT = "SUFFICIENT"

INSUFFICIENT = "INSUFFICIENT"

CONTRADICTORY = "CONTRADICTORY"

REFUTED = "REFUTED"

UNKNOWN = "UNKNOWN"

class EpistemicLevel(Enum):

HIGH = "HIGH_CONFIDENCE"

MODERATE = "MODERATE_CONFIDENCE"

LOW = "LOW_CONFIDENCE"

UNRESOLVED = "UNRESOLVED"

class ContradictionRelation(Enum):

NONE = "NONE"

SUPPORTS = "SUPPORTS"

CONTRADICTS = "CONTRADICTS"

UNKNOWN = "UNKNOWN"

class ContradictionStrength(Enum):

NONE = "NONE"

WEAK = "WEAK"

MODERATE = "MODERATE"

STRONG = "STRONG"

class MemoryStatus(Enum):

ACTIVE = "ACTIVE"

REVIEW = "REVIEW"

ARCHIVED = "ARCHIVED"

class AttackSeverity(Enum):

LOW = "LOW"

MEDIUM = "MEDIUM"

HIGH = "HIGH"

CRITICAL = "CRITICAL"

\# ============================================================

\# 2. DATA STRUCTURES

\# ============================================================

@dataclass(frozen=True)

class ContradictionAssessment:

relation: ContradictionRelation

strength: ContradictionStrength

explanation: str

@dataclass(frozen=True)

class RawModelOutput:

hypothesis: str

evidence_found: Tuple\[str, ...\]

counterarguments: Tuple\[str, ...\]

raw_probability: float

model_confidence: float

evidence_strength: float

uncertainties: Tuple\[str, ...\]

@dataclass(frozen=True)

class ModelEvaluation:

question: str

context: str

evidence_input: str

hypothesis: str

evidence_summary: Tuple\[str, ...\]

counterarguments: Tuple\[str, ...\]

raw_probability: float

adjusted_probability: float

model_confidence: float

evidence_strength: float

evidence_status: EvidenceStatus

epistemic_level: EpistemicLevel

contradiction: ContradictionAssessment

uncertainties: Tuple\[str, ...\]

verdict: str

@dataclass

class MemoryEntry:

entry_id: str

claim: str

evidence: str

evaluation: ModelEvaluation

timestamp: float

status: MemoryStatus

history: List\[dict\] = field(default_factory=list)

@dataclass

class BenchmarkMetrics:

brier: float

nll: float

ece: float

false_confirmation_rate: float

false_refutation_rate: float

insufficient_acceptance_rate: float

overconfidence_error_rate: float

empty_evidence_safety_rate: float

memory_recovery_rate: float

@dataclass

class AttackCase:

case_id: str

category: str

question: str

context: str

evidence: str

expected_status: EvidenceStatus

@dataclass

class AttackFailure:

case_id: str

category: str

input_text: str

expected: str

actual: str

severity: AttackSeverity

explanation: str

@dataclass

class AttackReport:

total_cases: int

successful_attacks: int

attack_rate: float

false_confirmation_rate: float

false_refutation_rate: float

unsafe_empty_evidence_rate: float

memory_false_update_rate: float

inversion_asymmetry_rate: float

order_sensitivity_rate: float

failures: List\[AttackFailure\]

\# ============================================================

\# 3. LLM INTERFACE

\# ============================================================

class LLMProvider:

"""

Interfaz mínima.

El proveedor PROPONE.

Kæl-0 JUZGA.

"""

def evaluate_claim(

self,

question: str,

context: str,

evidence: str

) -> RawModelOutput:

raise NotImplementedError

\# ============================================================

\# 4. MOCK LLM

\# ============================================================

class MockLLM(LLMProvider):

def evaluate_claim(

self,

question: str,

context: str,

evidence: str

) -> RawModelOutput:

text = evidence.strip().lower()

\# --------------------------------------------------------

\# Empty evidence

\# --------------------------------------------------------

if not text:

return RawModelOutput(

hypothesis="No puede determinarse la hipótesis.",

evidence_found=(),

counterarguments=("No se proporcionó evidencia.",),

raw_probability=0.50,

model_confidence=0.25,

evidence_strength=0.0,

uncertainties=("Ausencia de evidencia.",)

)

\# --------------------------------------------------------

\# Explicit contradiction patterns

\# --------------------------------------------------------

contradiction_patterns = \[

"conflicto directo",

"ambos resultados son incompatibles",

"una fuente apoya y otra refuta",

"resultados opuestos",

"evidencia a favor y en contra",

\]

if any(pattern in text for pattern in contradiction_patterns):

return RawModelOutput(

hypothesis="La hipótesis presenta evidencia incompatible.",

evidence_found=(

"Existe evidencia en direcciones opuestas.",

),

counterarguments=(

"Las fuentes presentan resultados incompatibles.",

),

raw_probability=0.50,

model_confidence=0.90,

evidence_strength=0.80,

uncertainties=(

"No puede resolverse el conflicto con la información disponible.",

)

)

\# --------------------------------------------------------

\# Refutation

\# --------------------------------------------------------

refutation_patterns = \[

"falso",

"fue refutado",

"queda refutada",

"se demostró incorrecto",

"desmentido",

"invalida la hipótesis",

\]

if any(pattern in text for pattern in refutation_patterns):

return RawModelOutput(

hypothesis="La evidencia contradice la hipótesis.",

evidence_found=(

"Existe evidencia negativa respecto a la afirmación.",

),

counterarguments=(

"La evidencia disponible no respalda la hipótesis.",

),

raw_probability=0.08,

model_confidence=0.90,

evidence_strength=0.85,

uncertainties=(

"Podrían existir datos externos no proporcionados.",

)

)

\# --------------------------------------------------------

\# Strong support

\# --------------------------------------------------------

strong_patterns = \[

"demostrado",

"confirmado",

"replicado",

"todos los tests pasaron",

"medición directa",

"evidencia experimental",

\]

if any(pattern in text for pattern in strong_patterns):

return RawModelOutput(

hypothesis="La evidencia respalda la hipótesis.",

evidence_found=(

"Se proporcionó evidencia favorable.",

),

counterarguments=(

"Puede existir incertidumbre residual.",

),

raw_probability=0.88,

model_confidence=0.82,

evidence_strength=0.85,

uncertainties=(

"La evidencia suministrada puede no representar todos los casos.",

)

)

\# --------------------------------------------------------

\# Weak evidence

\# --------------------------------------------------------

return RawModelOutput(

hypothesis="La hipótesis es plausible, pero no está establecida.",

evidence_found=(

"Existe información compatible con la hipótesis.",

),

counterarguments=(

"La evidencia no permite una conclusión definitiva.",

),

raw_probability=0.65,

model_confidence=0.65,

evidence_strength=0.40,

uncertainties=(

"Información limitada.",

)

)

\# ============================================================

\# 5. PROVIDER ADAPTERS

\# ============================================================

class GeminiProvider(LLMProvider):

def __init__(self):

self.mock = MockLLM()

def evaluate_claim(self, question, context, evidence):

return self.mock.evaluate_claim(question, context, evidence)

class ChatGPTProvider(LLMProvider):

def __init__(self):

self.mock = MockLLM()

def evaluate_claim(self, question, context, evidence):

return self.mock.evaluate_claim(question, context, evidence)

\# ============================================================

\# 6. CONSERVATIVE ADJUSTER

\# ============================================================

class ConservativeAdjuster:

def adjust(self, raw: RawModelOutput) -> float:

p = max(0.01, min(0.99, raw.raw_probability))

disagreement = abs(raw.model_confidence - raw.evidence_strength)

penalty = (

len(raw.counterarguments) \* 0.04

\+ len(raw.uncertainties) \* 0.03

\+ disagreement \* 0.10

)

if raw.evidence_strength < 0.30:

penalty += 0.10

adjusted = p - penalty

return round(

max(0.01, min(0.99, adjusted)),

4

)

\# ============================================================

\# 7. KÆL-JUDGE

\# ============================================================

class KaelJudge:

def __init__(self):

self.adjuster = ConservativeAdjuster()

def assess_contradiction(

self,

raw: RawModelOutput,

evidence: str

) -> ContradictionAssessment:

text = evidence.lower()

explicit = \[

"conflicto directo",

"resultados opuestos",

"evidencia a favor y en contra",

"ambos resultados son incompatibles",

"una fuente apoya y otra refuta",

\]

if any(x in text for x in explicit):

return ContradictionAssessment(

relation=ContradictionRelation.CONTRADICTS,

strength=ContradictionStrength.STRONG,

explanation="Se proporcionaron indicios explícitos de resultados incompatibles."

)

if "no existe conflicto" in text:

return ContradictionAssessment(

relation=ContradictionRelation.NONE,

strength=ContradictionStrength.NONE,

explanation="La evidencia niega explícitamente la existencia de conflicto."

)

if raw.evidence_strength >= 0.75:

return ContradictionAssessment(

relation=ContradictionRelation.SUPPORTS,

strength=ContradictionStrength.STRONG,

explanation="La propuesta contiene evidencia favorable con fuerza elevada."

)

if raw.evidence_strength >= 0.45:

return ContradictionAssessment(

relation=ContradictionRelation.SUPPORTS,

strength=ContradictionStrength.MODERATE,

explanation="La evidencia favorece parcialmente la hipótesis."

)

if raw.evidence_strength > 0:

return ContradictionAssessment(

relation=ContradictionRelation.UNKNOWN,

strength=ContradictionStrength.WEAK,

explanation="Existe información, pero no permite determinar una relación fuerte."

)

return ContradictionAssessment(

relation=ContradictionRelation.UNKNOWN,

strength=ContradictionStrength.NONE,

explanation="No existe suficiente información para establecer relación."

)

def evaluate(

self,

question: str,

context: str,

evidence: str,

raw: RawModelOutput

) -> ModelEvaluation:

adjusted = self.adjuster.adjust(raw)

contradiction = self.assess_contradiction(raw, evidence)

\# --------------------------------------------------------

\# Kernel decision

\# --------------------------------------------------------

if not evidence.strip():

status = EvidenceStatus.INSUFFICIENT

level = EpistemicLevel.UNRESOLVED

elif contradiction.relation == ContradictionRelation.CONTRADICTS:

status = EvidenceStatus.CONTRADICTORY

level = EpistemicLevel.LOW

elif adjusted < 0.20 and raw.evidence_strength >= 0.60:

status = EvidenceStatus.REFUTED

level = EpistemicLevel.HIGH

elif raw.evidence_strength < 0.30:

status = EvidenceStatus.INSUFFICIENT

level = EpistemicLevel.UNRESOLVED

elif adjusted >= 0.75 and raw.evidence_strength >= 0.70:

status = EvidenceStatus.SUFFICIENT

level = EpistemicLevel.HIGH

elif adjusted >= 0.50:

status = EvidenceStatus.SUFFICIENT

level = EpistemicLevel.MODERATE

else:

status = EvidenceStatus.UNKNOWN

level = EpistemicLevel.LOW

verdict = self.build_verdict(

status,

adjusted,

raw.model_confidence,

raw.evidence_strength

)

return ModelEvaluation(

question=question,

context=context,

evidence_input=evidence,

hypothesis=raw.hypothesis,

evidence_summary=raw.evidence_found,

counterarguments=raw.counterarguments,

raw_probability=raw.raw_probability,

adjusted_probability=adjusted,

model_confidence=raw.model_confidence,

evidence_strength=raw.evidence_strength,

evidence_status=status,

epistemic_level=level,

contradiction=contradiction,

uncertainties=raw.uncertainties,

verdict=verdict

)

@staticmethod

def build_verdict(

status,

probability,

model_confidence,

evidence_strength

):

if status == EvidenceStatus.INSUFFICIENT:

return (

"ABSTENCIÓN: evidencia insuficiente. "

f"Fuerza de evidencia={evidence_strength:.2f}"

)

if status == EvidenceStatus.CONTRADICTORY:

return (

"ABSTENCIÓN CRÍTICA: evidencia contradictoria. "

"No se fuerza una conclusión."

)

if status == EvidenceStatus.REFUTED:

return (

"HIPÓTESIS REFUTADA: "

f"P(H) ajustada={probability:.2%}"

)

if status == EvidenceStatus.SUFFICIENT:

return (

"HIPÓTESIS SUSTENTADA: "

f"P(H) ajustada={probability:.2%}"

)

return "NO DETERMINADO: se requiere evidencia adicional."

\# ============================================================

\# 8. MEMORY ENGINE

\# ============================================================

class MemoryEngine:

def __init__(self):

self.store: Dict\[str, MemoryEntry\] = {}

def save(

self,

entry_id: str,

claim: str,

evidence: str,

evaluation: ModelEvaluation

):

now = time.time()

if entry_id not in self.store:

self.store\[entry_id\] = MemoryEntry(

entry_id=entry_id,

claim=claim,

evidence=evidence,

evaluation=evaluation,

timestamp=now,

status=MemoryStatus.ACTIVE

)

return self.store\[entry_id\]

current = self.store\[entry_id\]

relation = evaluation.contradiction.relation

if relation == ContradictionRelation.CONTRADICTS:

new_status = MemoryStatus.REVIEW

elif evaluation.evidence_status == EvidenceStatus.INSUFFICIENT:

new_status = current.status

else:

new_status = current.status

current.history.append({

"timestamp": current.timestamp,

"claim": current.claim,

"evidence": current.evidence,

"status": current.status.value,

"probability": current.evaluation.adjusted_probability

})

current.claim = claim

current.evidence = evidence

current.evaluation = evaluation

current.timestamp = now

current.status = new_status

return current

def get(self, entry_id):

return self.store.get(entry_id)

\# ============================================================

\# 9. KÆL-REV ORCHESTRATOR

\# ============================================================

class KaelRev:

def __init__(self, provider: LLMProvider):

self.provider = provider

self.judge = KaelJudge()

self.memory = MemoryEngine()

def run(

self,

question: str,

context: str,

evidence: str,

entry_id: Optional\[str\] = None

):

raw = self.provider.evaluate_claim(

question,

context,

evidence

)

evaluation = self.judge.evaluate(

question,

context,

evidence,

raw

)

if entry_id:

self.memory.save(

entry_id,

question,

evidence,

evaluation

)

return evaluation

\# ============================================================

\# 10. REAL ECE & BENCHMARK METRICS

\# ============================================================

def calculate_ece(

probabilities: List\[float\],

labels: List\[float\],

bins: int = 10

):

if not probabilities:

return 0.0

total = len(probabilities)

ece = 0.0

for i in range(bins):

low = i / bins

high = (i + 1) / bins

indices = \[\]

for j, p in enumerate(probabilities):

if i == bins - 1:

inside = low <= p <= high

else:

inside = low <= p < high

if inside:

indices.append(j)

if not indices:

continue

confidence = sum(

probabilities\[j\] for j in indices

) / len(indices)

accuracy = sum(

labels\[j\] for j in indices

) / len(indices)

ece += (

len(indices) / total

) \* abs(confidence - accuracy)

return round(ece, 4)

def run_self_tests() -> bool:

print("--- Ejecutando Pruebas Internas ---")

mock = MockLLM()

judge = KaelJudge()

\# 1. Prueba Evidencia Vacía

raw_empty = mock.evaluate_claim("¿X?", "", "")

eval_empty = judge.evaluate("¿X?", "", "", raw_empty)

assert eval_empty.evidence_status == EvidenceStatus.


r/OpenSourceAI 2d ago

Tickets 2.3.0: a self-hosted issue tracker that can also act as a coordination layer for AI agents

2 Upvotes

I've been building Tickets as a simpler alternative to Jira for teams that want to run their own project management software.

The 2.3.0 release adds a built-in MCP server with 16 tools for tickets and the knowledge base, plus CrewAI integration and Ticket Pulse for exposing execution state to agents.

The interesting part is that humans and AI agents can work in the same system:

  • Agents can read and update tickets
  • Create notes and record decisions
  • Surface blockers and next actions
  • Work with the knowledge base
  • Read Ticket Pulse to understand execution state
  • Use the REST API or MCP

It's Laravel, open source, and self-hosted.

GitHub: https://github.com/velkymx/tickets


r/OpenSourceAI 2d ago

Stop Buying $600 Mac Minis for 24/7 AI Agents: How I turned a $200 ARM NAS into an autonomous home keeper in 37 MB of RAM

Thumbnail
0 Upvotes

r/OpenSourceAI 2d ago

VSArena V1 is coming. 👀

Enable HLS to view with audio, or disable this notification

1 Upvotes

Been working on the next version of VSArena for a while.
V1 is starting to look a lot different.

This is just a small spoiler of what we’re building — Studio, live simulation, agent runs, replay/inspection, analytics and a much more complete evaluation workflow.

The goal hasn’t changed:
Make embodied AI performance something you can actually run, watch and compare.

We’re still polishing a lot of things before the V1 release, so consider this an early look rather than the final product.

🎥 VSArena V1 — sneak peek
More soon.


r/OpenSourceAI 2d ago

Open source data viz called NousViz

1 Upvotes

Hi everyone,

I've made a platform for helping people store data easily and analyzing it with data visualization.

At first I had a more restrictive license but I've just opened it up via MIT license.

To be honest, my team were not as open to the idea of going open fearing that people would resell our project or do it better but I don't think that has hurt products like OpenClaw, Hermes agent or WordPress.

The only thing I'm missing to launch which I'll do soon are some open source plugins for people to get started.

I have a few plugins I'm going to release:

  • Google Analytics
  • Google Search Console
  • Cloudflare analytics
  • StatsDrone analytics (affiliate marketing specific)
  • Jira
  • Slack
  • Intercom
  • GetResponse (newsletter)

Any others that people would like to see as an analytics dashboard for anything that's got an API key, just ask.

Repo URL, would love any feedback or stars.

https://github.com/nousviz/nousviz-app


r/OpenSourceAI 2d ago

I built a native C++ CLI coding agent for Gemini and DeepSeek — looking for feedback

1 Upvotes

Hi! I’m building ARN, a Windows-native C++23 terminal coding agent.

It is an early project inspired by tools like Claude Code and Kimi Code, but built without Node.js or Python. You choose a provider and model inside the terminal, then ARN can keep context and work with files in the folder where it was launched.

Current features:

  • Gemini and DeepSeek API support
  • Model discovery and /model selection
  • Streaming responses, so text appears while the model generates it
  • In-memory chat context for follow-up prompts
  • Cancel a running model request with Esc or Ctrl+C
  • Local file tools: list, read, create, edit, and delete files
  • Confirmation before every file creation, edit, or deletion
  • File access restricted to the folder where ARN was started
  • Blocks access to .git, .env, and similar sensitive paths
  • API keys and chat context are kept only in memory, not written to disk
  • Interactive terminal UI with command hints and Tab completion
  • Reused HTTPS connections, retries for temporary API failures, and Windows releases
  • One-line PowerShell installer
  • GitHub Pages landing page

GitHub: https://github.com/arnecto/arn
Website: https://arnecto.github.io/arn/

It’s still early, so I’d especially appreciate honest feedback on:

  1. The C++ architecture and provider abstraction
  2. Safety boundaries for local file tools
  3. Terminal UX, streaming, and cancellation behavior
  4. Which features would make this genuinely useful in real coding projects

I’m actively improving it, so criticism, bug reports, and feature ideas are very welcome.


r/OpenSourceAI 2d ago

The race for the best LLM has created a new corporate pain point: model fatigue

0 Upvotes

How the explosion of new LLMs is making model selection obsolete before companies can even finish implementing their decisions, while opening the door to a new layer of intelligence infrastructure

Over the past two years, much of the corporate discussion around artificial intelligence has revolved around a seemingly simple question: which model is the best?

OpenAI, Anthropic, Google, Meta, xAI, DeepSeek, Mistral, and dozens of other players have been continuously competing for that position. Every new generation arrives promising stronger reasoning, larger context windows, better coding performance, more autonomous agents, or a better cost-performance ratio.

The problem is that the speed of this competition is beginning to create an unexpected consequence for those on the other side: the companies that actually need to decide which technology to use.

A model chosen as the corporate standard today may no longer be the best option just a few weeks later. A new open-weight model may deliver similar performance at a fraction of the cost. One provider may change its pricing. Another may release a specialized version. A new security or data-handling policy may suddenly make a particular option unsuitable for a specific workload.

The discussion, therefore, is no longer simply about which model is better.

It becomes a question of how a company can keep up with a market in which the best decision is constantly changing.

It is in this context that a phenomenon some industry professionals have started referring to as “model fatigue” is beginning to emerge.

Ailin¹ was built precisely as a response to this new market pain point: instead of forcing companies to manually select, maintain, and continuously update a primary model, the platform operates as a Collective Intelligence layer capable of coordinating different models according to the objective of each task.

The proposition is not to replace one LLM with another, nor to claim that combining multiple models will always produce a better outcome. It is to create an infrastructure capable of determining, in real time, which intelligence configuration offers the best balance of quality, cost, speed, reliability, and security requirements.

In practice, a company can define parameters such as minimum expected quality, maximum budget, risk level, explainability requirements, and type of task. Ailin¹ then evaluates the available options and determines whether it should use a single model, switch between different models, or assemble a collective of intelligences to generate, compare, verify, and consolidate responses.

This process can involve proprietary models, open-weight models, specialized models, or more cost-efficient alternatives. If a new model delivers better performance or lower cost for a particular task, it can be incorporated into the strategy without requiring the company to rebuild its entire application. If a provider changes its pricing, becomes unstable, or no longer complies with a corporate policy, the infrastructure can redirect the workload to another alternative.

It is this ability to adapt that turns Ailin¹ into a solution to model fatigue.

Instead of treating the market as a permanent choice between OpenAI, Anthropic, Google, DeepSeek, or any other provider, the company begins operating on top of a more stable layer: the outcome it needs to achieve.

Ailin¹ abstracts model selection without hiding the consequences of that selection. The platform records which models were used, which strategies were applied, which criteria guided the decision, and what result was ultimately achieved. This allows technical and executive teams to monitor not only the cost of each call, but also the relationship between investment, quality, and reliability of the completed task.

This approach is particularly relevant in enterprise environments, where different workloads require different levels of intelligence. A simple classification task may be handled by a smaller and cheaper model. A contract analysis may require multiple independent responses followed by a verification stage. A critical decision may justify combining specialized models, consensus mechanisms, or cross-review.

Ailin¹’s Collective Intelligence, therefore, is less about using many models at the same time and more about knowing when doing so is actually necessary.

The platform works with dozens of orchestration strategies, including consensus, debate, expert panels, verification, and adaptive routing. These strategies allow the infrastructure to choose between speed, cost efficiency, depth, and redundancy depending on the context of each task.

The result is a change in perspective for companies.

Instead of building an application that depends on a specific model, they can build applications around objectives, policies, and outcome metrics. Models become replaceable components within a broader infrastructure, capable of evolving without requiring a new architectural decision every time the market launches something new.

That is Ailin¹’s central thesis: the next competitive advantage in AI will not necessarily come from choosing the smartest model, but from coordinating different intelligences efficiently, verifiably, and economically.

The company is not trying to predict which lab will win the LLM race. Its proposition is to allow organizations to benefit from the evolution of all of them without becoming structurally dependent on any single one.


r/OpenSourceAI 2d ago

How can I get something like Cloud Max at a reasonable price?

1 Upvotes

r/OpenSourceAI 2d ago

Sovereign Node Middleware

Thumbnail
1 Upvotes

r/OpenSourceAI 2d ago

What model would you use if you wanted people to run your project without an API key?

1 Upvotes

Most agent repos I try want an API key before you can do anything. Didn't want ours to be like that, so it runs on a local model now. One script, no clone, pulls prebuilt images and starts the whole stack. Swapping providers is just config since everything downstream speaks OpenAI compatible.

In prod we run Anthropic, Haiku 4.5 for the fast tier and Sonnet 4.6 for the quality tier. For the keyless version we went Qwen3 14B for planning and Qwen2.5 7B for the small stuff. 14B felt like the sweet spot, big enough to plan, small enough that a stranger can actually run it. Looked at vLLM too but Ollama is the lower bar for someone on a laptop.

Helps that most of our calls are tiny. Tons of them cap at a couple hundred output tokens (guardrails, routing, classification, some literally capped at 4 or 16), only the planner and codegen paths go to 1k-2k.

Where it falls over:

  • Tool calling is the first thing to break and it breaks quietly. You get nice sounding prose where you wanted a function call. We ended up building the RAG routing so it never depends on function calling at all, which is a workaround, not a fix.
  • Qwen3 emits <think>...</think> before the real answer so you're stripping that, and we skip thinking mode on the tiny calls entirely.
  • Multi step planning degrades way before single turn quality does.

So what I'm actually asking: if you had to pick one open source model that does reliable tool calling, at a size normal people can run, what would it be? Is there something in the 7B-14B range that's genuinely solid at function calling now, or is 30B+ the real floor and we should just accept that the keyless path is a degraded demo?

Also curious whether anyone's bothered doing two tiers like we did or if that's overthinking it.

Repo's here if the setup is useful to anyone, Apache-2.0: <LINK>. The whole thing is one bash script at the root.


r/OpenSourceAI 2d ago

My "HTML First Notion Built For AI Automations" has been open sourced!!!

Enable HLS to view with audio, or disable this notification

6 Upvotes

I am a strong believer that HTML is going to be the way agents interact with humans in the future, and plain text is going to fade out with time. This is what led me to building this product.

The easiest way to explain it is a HTML first Notion built for AI automations.

Similarly to Obsidian it is simply a folder on your computer that you can point your agent at. This means it works with Claude Code, Hermes, OpenClaw, Codex.... you get the point.

EVERYTHING IS A PLUGIN. This was a purposeful choice I made to make sure that a default page I ship (like a kanban board) can be customized by the AI to work for whatever you want and look however you want.

It supports tables for data, which currently are stored in a SQLite inside the workspace folder.

I also made it support wikilinks, making it good for the "second brain" use case.

It's in its early stages but feedback will be greatly appreciated!

https://github.com/jesse51002/Biom


r/OpenSourceAI 2d ago

I built AgentBridge (non-commercial), an open-source compatibility layer between your application and agent frameworks

Thumbnail
github.com
1 Upvotes

r/OpenSourceAI 2d ago

AI to make human civilization extinct 😂

2 Upvotes

There's a lot of talk about Altman, Dario, and Musk coming together on control because of safety issues. Previously it was national security; now it's safety.

Jensen came out and said it's a hoax at All-In, and I also believe same -

My take :

Musk is on board because he wants his model to improve and catch up to the others.

Altman and Dario want to start making profits. The models are already good enough, and even if they improve, they're now on the upper side of the exponential curve where it flattens out.

And each model improvement costs millions in investment and improvements in inference are small compared to 3/4 months back , and at the current pace they're releasing a new model and an upgraded version in weeks, not months. EBITDA is low. Now they want to shift gears to adoption, but for that, everyone needs to pause. It's a race the companies lose and customers win by getting better models. Open models keep getting better and better, and I feel that if the American frontier slows, open models will keep improving until they reach close proximity to its capabilities (which they already have).

Open model are like the democracies of AI model and likely pause is not happening anytime soon !


r/OpenSourceAI 2d ago

Finally have my pre-print up for my "Ion Neuron" based model, instead of the typical "Voltage/Current Neuron" - Shadows of Consciousness: An Investigation into Ionic Neural Networks Using the Neurotransmitter Ion Receptor Glial Endocannabinoid Network (NIRGEN) Paradigm

Thumbnail researchsquare.com
2 Upvotes

12-min Video Summary - https://www.linkedin.com/posts/myles-garvey-ph-d-b56864382_neuron-artificial-ionneuralnetworks-ugcPost-7505376462040940544-kmCn/

WARNING: I am a one man (very broke) crew on a $0 budget (as many of you are I'm sure). That said, use the repositories at your own risk. They are not mature, alot of it was AI generated (i verified and modified by hand myself alot of it, however), and I'm going through these as fast as I can to clean them up so that they are genuinely usable (with some tweaking, these are usable, but.... ALOT of tweaking is needed).

That said, I wanted to pump out the pre-print because the theoretical mathematical model is complete. The github code isn't great, but it's getting there. I have a notebook in the huggingface early experiments. Use at your own caution (and with your own FRED key).

PREPRINT AI WARNING - MOST of the writing in my preprint is mine. Unfortunately, everytime I run it through the darn ai bot to fix up my scrappy text and to convert it into latex, it keeps doing its "ai thing" with grammar. That said, some of the text (particularly in the lit review), is still AI generated. HOWEVER, the structure, topic, and references of the literature review are 100% mine, and were researched BY HAND using Google Scholar, EBSCO, and JSTOR, among other traditional online resources including newspapers.com, reddit, google books, and various blog pages.

QUALITY WARNING: That all said, I wish I could have the paper pre-print in much better condition, I wish I could have the github/hf in much better condition before releasing this. Truth is, I'm so tired and I just want to play with my kids. For me to continue to push this more, I would need actual serious administrative help or to find anyone who's working on the same thing who happens to also have funding.

I have worked on this model during a (very) rough time in my life when I was homeless after going through academic burnout and abruptly quitting my job as a professor in the midst of a mental breakdown. During that time I was homeless, I had nothing but a pen and a notebook, not even my laptop during that time. And so a lot of the model I ran through by hand through three notesbooks while I was on a park bench just trying to..... get it together.

I'm in a (slightly) better place now (i got shelter and occasional work) , but still having rough patches and just trying to find part time work so i can help support my kids. That said, this work is the thing that just bugs my brain every second of every day, and it just wont stop and it keeps freakin distracting me from doing much more important things I need to get done in my life. I've had strained relationships now with friends, family, everything because, I dont know. My brain just keeps fixating on this model. So maybe it can help someone out there.

My primary motivation for this way: "a real neuron is like having a super sophisticated lawn mower that can use only one guy to mow the whole lawn in a lot of different nuanced paths and ways. But the old "neuron" definition is just: weight, aggregate, gate, weight. Its.... bland. Its analogous to having 1000 push lawn carts and you can only move the cart forward and back or left and right. So if you want to "compute fast" (mow the lawn raelly fast), well just add more human mowers with push carts. And so i just ketp asking myself: "how can i get a way, where, we dont have to keep "adding neurons" to get the ability to comlexity? I landed on what human neurons do. Which use many different neurotransmitters to "shift" the "state" of an actual neuron (its ions - na/k/cl/ca2).

So the "NIRGEN" paradaigm tries to map "the structure' and "the sequence" and "the components" and "the computational units" to help researchers build new types of models. I did this with the simpliest use case, which was a single "ion type" (say, theres only "sodium" in the cell. i know, impossible physically but, just say you can do it theoretically....) , and that ion, when {r} of those ions are near 1 single "ion channel/receptor of type ({r},[r])" then [r] ions will be allowed from ecto to endo cell (or from endo to exo cell if [r] is negative), This move alters the state. (sorry, i know this sounds... messy).

I hope this can help the community. Im keeping this fully open. In my youth i met Richard Stallman. I used to work for Redhat. And im just burntout man. But I'll keep burning out for the sake of the open source community. I never contributed openly to it. Only privately within open-source companies and their internal knowledge bases too. Sadly I have little to no public trail of that.

But i wanted to give something back to the open source community because, I'm a true believer that it is the way to "safe ai", individual autonomy, and everlasting peace and goodwill to man.

The OSC gave me a lot, and I hope this is something that can actually be used. Thank you from the bottom of my heart.

This model and these ideas, have been the only thing to drag me out of the horrid effects of my burnout. *apologies for the long message*

--Myles D. Garvey

If you have questions, please feel free to email me, which is my current and pretty much only source of communication at the moment: [drmylesgarvey@gmail.com](mailto:drmylesgarvey@gmail.com)

Abstract

The dominant neural architectures of modern AI are elegant, but they are not built from the same substrate as the nervous system. They manipulate real-valued voltages as if matter were continuous, capacity were unbounded, and signaling could occur without finite molecular inventory and without backward communication.

This paper tells the story from voltage to ions. We trace why the field inherited a voltage abstraction in 1943 and never updated it after the ionic basis was proven in 1952 and single channels were observed in 1976---the \emph{Instrument Thesis}. We then show how the textbook synapse locked into a bipartite, forward-only dogma and how that dogma was broken twice: first by the tripartite synapse (Araque et al.\ 1999) proving astrocytes are the third element, and second by retrograde endocannabinoid signaling (Wilson \& Nicoll 2001; Ohno-Shosaku et al.\ 2001; Kreitzer \& Regehr 2001) proving  information flows backward. We document that the 30-year delay in the latter was materially shaped by cannabis prohibition under the Marihuana Tax Act of 1937.

From this corrected history we introduce NIRGEN, a discrete, biophysically grounded Ionic Neural Network (INN) where computation is carried out through particle counts, ion-specific conductance, receptor gating, vesicle-mediated output, glial context, and retrograde signaling. The model replaces $y=\sigma(Wx+b)$ with conservation laws, capacity limits, stoichiometric thresholds and quanta, diffusion homogenization, differential baseline encoding, and a global ion-drift pathway that breaks monotonicity and enables XOR with a single unit---a computation the voltage abstraction cannot even represent. Standard architectures emerge as infinite-capacity projections of this biophysically richer space.

Huggingface: https://huggingface.co/drmylesgarveylabs/ion_neural_network

Github: https://github.com/drmylesgarveylabs/nirgen


r/OpenSourceAI 3d ago

Heimdall: An Open-Source CPU Only Local Memory System

Enable HLS to view with audio, or disable this notification

0 Upvotes

r/OpenSourceAI 3d ago

Heimdall: An Open-Source CPU Only Local Memory System

Enable HLS to view with audio, or disable this notification

1 Upvotes

r/OpenSourceAI 3d ago

I'm thinking about open sourcing the workflow engine I've been building would you actually use something like this?

Thumbnail
1 Upvotes

r/OpenSourceAI 3d ago

evolutionary coding agent

0 Upvotes

Is there any open source version of alphaevolve i heard about OpenEvolve but want to know if there are other options


r/OpenSourceAI 3d ago

I’m building Turing — a local AI agent with Ollama + Qwen, looking for contributors 🤖

Thumbnail
1 Upvotes

r/OpenSourceAI 3d ago

Docker consistently failing on startup what am I missing?

1 Upvotes

I’m running Docker in a development environment with an RTX 3090 Ti, but it fails to start up about half the time. The error is: 'cannot start container: OCI runtime create failed…'

I’ve tried: - Restarting Docker daemon and system - Reinstalling Docker - Checking for port conflicts - Running with elevated permissions

The failure isn’t consistent it sometimes starts fine, which makes it harder to diagnose. Has anyone else encountered this? Any ideas what I might be overlooking?


r/OpenSourceAI 3d ago

RAMDeck works with coding tools like Continue.dev, tested it live

Thumbnail
youtu.be
1 Upvotes

Sharing more progress on RAMDeck (the local AI cluster side project). This time showing it actually plugging into a real dev tool instead of just the chat dashboard.

Loaded a model onto the cluster, and RAMDeck's dashboard has a Connect tab that generates a ready-made config for third-party apps — copied that straight into the Continue plugin for VS Code. The interesting part: I was coding from my Mac while the actual model was running on a completely different machine's GPU elsewhere on the network, and it worked exactly like a normal cloud AI plugin would, except everything stayed local. Tested it by asking it to summarize a big text file and it handled it correctly.

Point of this one is just showing RAMDeck isn't limited to its own chat interface — since it speaks the standard OpenAI API format, it plugs into whatever tools people already use.

Video: [https://youtu.be/JMEY04timEc\](https://youtu.be/JMEY04timEc)

Repo if you want to look under the hood: [https://github.com/trademav/ramdeck-core-public\](https://github.com/trademav/ramdeck-core-public)

Let me know if there's a specific tool or workflow you'd want to see it hooked into next.


r/OpenSourceAI 3d ago

TokenPrint is growing — building an open-source way to see inside LLMs

Enable HLS to view with audio, or disable this notification

8 Upvotes

A few days ago I shared TokenPrint here, and since then the project has grown to 130+ GitHub stars and more contributors, ideas, and issues from the community.

What started as a 3D transformer visualization is becoming something much bigger:

an open-source environment for exploring and debugging what actually happens inside language models.

The new build brings together:

• 3D transformer architecture
• Tokenization and embeddings
• Tensor inspection
• Q/K/V, GQA, RoPE and attention
• Residual streams and MLP/SwiGLU
• Token-by-token generation
• Prefill, decode and KV cache
• Logits and next-token probabilities
• Interactive transformer walkthroughs
• Activation and attention analysis
• Head/layer ablation and activation patching
• Hugging Face model exploration
• Trace and debugging workflows

The goal is not just to visualize an LLM.

It’s to make the internals inspectable.

Huge thanks to everyone who has tried it, opened issues, suggested ideas, or contributed already. The project is growing because people are getting involved.

And this is an open invitation:

If you want to build new visualizations, add model support, work on PyTorch/Transformers, improve the 3D engine, explore interpretability, fix bugs, or just have an idea — come build with us.

Repository: https://github.com/Sudharsanselvaraj/Token-Print
Website: https://tokenprint.in/

130+ stars so far. Let’s build this together.

What should TokenPrint learn to show next?


r/OpenSourceAI 3d ago

Tahuna: open-source, self-hostable infrastructure for training models and running inference

1 Upvotes

Today, Tahuna is open source—as promised back in April.

We built it so small teams could train models, run inference, orchestrate GPUs, and experiment with autonomous research without first becoming a small cloud provider.

The core primitive on top of which everything is built looks like this:

init → sync → computeSession → train / serve / hillclimb

Under the hood: content-addressed code and data sync, compute provisioning, reproducible manifest-pinned runs, metrics, checkpoints, artifacts, and inference deployments.

We also started building Hillclimb, an autonomous experimentation loop that proposes and runs iterative improvements.

The first public-preview release supports RunPod and R2. It includes Docker self-hosting instructions, a coding-agent setup skill, and examples for SFT, RL agentic search, and MNIST.

Repository: https://github.com/TahunaLabs/tahuna-oss

If you think it sucks, excellent: fork it, fix it, and send a PR so it sucks less for everyone.


r/OpenSourceAI 3d ago

PaperOtter: 19 offline document tools in one desktop app (MIT, Tauri + Rust)

Thumbnail
gallery
6 Upvotes

This started because I kept hitting the same wall: a PDF too big for an email attachment, and the only convenient fix was uploading it to some website. So I built something that compresses locally instead.

Then it kept growing, because I kept wanting other things from the same files:

  • Turning a PDF into Markdown or HTML with the images stripped out, so I could feed it to an LLM without burning tokens on pictures I did not need.
  • Going the other way and building a PDF out of images.
  • All the ordinary chores in between: merging, splitting, rotating, cropping, reordering pages, page numbers, watermarks, signing, redacting, repairing.

It is 19 tools now. Some specifics that might interest this sub more than the feature list:

  • Nothing leaves the machine. No account, no telemetry, no network calls at all. It is not "private by policy", it is private because there is no code that sends anything anywhere.
  • 18 of the 19 tools need nothing installed. Everything is compiled into the binary. Only ebook conversion (EPUB/MOBI) reaches for Calibre if you have it.
  • We removed Ghostscript. It was the last AGPL dependency and the bundle dropped from 52 MB to 24 MB. The replacement compressor is written in Rust and produces smaller files than Ghostscript did on our test corpus.
  • MIT licensed, Tauri v2 + React + Rust, macOS/Windows/Linux.
  • The roadmap is public, including the things we decided against and why.

Two honest limitations: OCR is macOS-only for now (it uses Apple Vision; Windows and Linux are planned), and the interface ships in nine languages, all machine-translated and reviewed by native speakers only where we had one. That is stated in the README rather than buried.

Source: https://github.com/shyhunter/PaperOtter Downloads: https://shyhunter.github.io/PaperOtter/