Some checks are pending
Check Python Version Consistency / Check Python Version (push) Waiting to run
57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
from enum import Enum, auto
|
|
from dataclasses import dataclass, field
|
|
|
|
|
|
class EmmaState(Enum):
|
|
IDLE = auto() # Venter på input
|
|
OBSERVING = auto() # Analyserer kontekst
|
|
REASONING = auto() # MCoT resonneringsloop
|
|
ACTING = auto() # Utfører verktøykall/svar
|
|
REFLECTING = auto() # Evaluerer eget output
|
|
LEARNING = auto() # Oppdaterer resonans-minne
|
|
|
|
|
|
class EmmaAction(Enum):
|
|
CLARIFY = auto() # Be om mer info
|
|
RETRIEVE = auto() # RAG-oppslag
|
|
TOOLCALL = auto() # API/shell/fil
|
|
RESPOND = auto() # Generer svar
|
|
COMPRESS = auto() # Forenkle resonneringskjede (MCoT)
|
|
STOREPATTERN = auto() # Lagre vellykket mønster i resonansminne
|
|
|
|
|
|
@dataclass
|
|
class EmmaContext:
|
|
userinput: str
|
|
history: list
|
|
toolresults: list = field(default_factory=list)
|
|
thoughtchain: list = field(default_factory=list)
|
|
rewardacc: float = 0.0
|
|
stepcount: int = 0
|
|
complexityscore: float = 0.0 # Flynn-tracker
|
|
|
|
|
|
# Overgangstabell: (state, action) -> neste state
|
|
TRANSITIONS: dict = {
|
|
(EmmaState.IDLE, EmmaAction.RETRIEVE): EmmaState.OBSERVING,
|
|
(EmmaState.OBSERVING, EmmaAction.CLARIFY): EmmaState.IDLE,
|
|
(EmmaState.OBSERVING, EmmaAction.TOOLCALL): EmmaState.ACTING,
|
|
(EmmaState.OBSERVING, EmmaAction.RESPOND): EmmaState.REASONING,
|
|
(EmmaState.REASONING, EmmaAction.COMPRESS): EmmaState.REASONING,
|
|
(EmmaState.REASONING, EmmaAction.RESPOND): EmmaState.ACTING,
|
|
(EmmaState.ACTING, EmmaAction.STOREPATTERN): EmmaState.REFLECTING,
|
|
(EmmaState.REFLECTING, EmmaAction.RETRIEVE): EmmaState.LEARNING,
|
|
(EmmaState.LEARNING, EmmaAction.STOREPATTERN): EmmaState.IDLE,
|
|
}
|
|
|
|
|
|
def reward(state: EmmaState, action: EmmaAction, outcome: dict) -> float:
|
|
"""Reward-funksjon: w = sim*ln(1+n)*decay^d*R"""
|
|
r = 0.0
|
|
if outcome.get("task_completed"): r += 1.0
|
|
if outcome.get("user_confirmed"): r += 0.5
|
|
if outcome.get("steps_used", 99) < 5: r += 0.3
|
|
if outcome.get("tool_error"): r -= 0.4
|
|
if outcome.get("hallucination_flag"): r -= 0.8
|
|
return r
|