forked from asi-alliance/OmegaClaw-Core
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathloop.metta
More file actions
85 lines (80 loc) · 4.99 KB
/
Copy pathloop.metta
File metadata and controls
85 lines (80 loc) · 4.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
(= (maxNewInputLoops) (empty))
(= (maxWakeLoops) (empty))
(= (sleepInterval) (empty))
(= (LLM) (empty))
(= (provider) (empty))
(= (maxOutputToken) (empty))
(= (reasoningMode) (empty))
(= (wakeupInterval) (empty))
(= (spamShield) (empty))
(= (initLoop)
(progn (configure maxNewInputLoops 50) ;20
(configure maxWakeLoops 1)
(configure spamShield True)
(configure sleepInterval 1) ;10
(configure LLM gpt-5.4)
(configure provider Anthropic) ;Anthropic or OpenAI or ASICloud or ASIOne or Test
(configure maxOutputToken 6000)
(configure reasoningMode medium)
(configure wakeupInterval 600) ;600=10 minutes
(change-state! &prevmsg "")
(change-state! &lastresults "")
(change-state! &loops (maxNewInputLoops))))
(= (initKnowledge)
(progn (println! "Initializing knowledge base")
(if (== (embeddingprovider) OpenAI)
(println! (py-call (rag.init_knowledge "OpenAI")))
(println! (py-call (rag.init_knowledge "Local"))))))
(= (getContext)
(string-safe (py-str ("PROMPT: " (getPrompt) " SKILLS: " (getSkills)
" OUTPUT_FORMAT: Up to 5 lines, do not wrap quotes around args, do not use variables:" (newline)
" toolName1 arg1" (newline)
" toolName2 arg2" (newline)
" toolName3 arg3" (newline)
" toolName4 arg4" (newline)
" toolName5 arg5" (newline)
" LAST_SKILL_USE_RESULTS: " (last_chars (get-state &lastresults) (maxFeedback)) " HISTORY: " (getHistory) " TIME: " (get_time_as_string)))))
(= (HandleError $msg $cmd $sexpr)
(case $sexpr (((Error $a $b) (let $new (append (get-state &error) (($msg $cmd)))
(change-state! &error $new)))
($else $sexpr))))
(= (omegaclaw)
(omegaclaw 1))
(= (omegaclaw $k)
(progn (if (== $k 1) (progn (initLoop)
(applySecurityPolicy)
(initMemory)
(initKnowledge)
(initChannels))
(change-state! &loops (- (get-state &loops) 1)))
(let $prompt (getContext)
(progn (println! (---------iteration $k))
(let* (($msgrcv (string-safe (repr (receive))))
($msgnew (prog1 (and (> (string_length $msgrcv) 0) (!= $msgrcv (get-state &prevmsg)))
(if (> (string_length $msgrcv) 0) (change-state! &prevmsg $msgrcv) _)))
($msg (get-state &prevmsg))
($_ (if (and (> $k 1) $msgnew)
(change-state! &loops (maxNewInputLoops)) _)))
(if (> (get-state &loops) 0)
(let* (($lastmessage (if $msgnew (HUMAN-MSG: $msg) (if (spamShield) " DO NOT RE-SEND OR SPAM!" "")))
($_ (change-state! &nextWakeAt (+ (get_time) (wakeupInterval))))
($_ (println! $lastmessage))
($send (py-str ($prompt :-:-:-: $lastmessage)))
($_ (println! (CHARS_SENT: (string_length $send) $send)))
($respi (py-call (lib_llm_ext.callProvider (provider) $send (maxOutputToken) (reasoningMode))))
($resp (py-call (helper.balance_parentheses $respi)))
($response (if (== "(" (first_char $resp)) $resp (progn (println! $resp) (repr (REMEMBER:OUTPUT_NOTHING_ELSE_THAN: ((skill arg) ...))))))
($sexpr (catch (sread $response)))
($_ (change-state! &error ()))
($_ (HandleError MULTI_COMMAND_FAILURE_NOTHING_WAS_DONE_PLEASE_CORRECT_PARENTHESES_AND_USE_QUOTES_AND_RETRY $response $sexpr))
($_ (println! (RESPONSE: $sexpr)))
($results (RESULTS: (collapse (let $s (superpose $sexpr) (COMMAND_RETURN: ($s (HandleError SINGLE_COMMAND_FORMAT_ERROR_NOTHING_WAS_DONE_PLEASE_FIX_AND_RETRY $s (catch (let $R (eval $s) (py-call (helper.normalize_string $R)))))))))))
($_ (println! $results)))
(progn (if (or $msgnew (not (== $sexpr ()))) (addToHistory $msg $response $sexpr $msgnew) _)
(change-state! &lastresults (string-safe (repr $results)))))
(if (> (get_time) (get-state &nextWakeAt))
(change-state! &loops (+ 1 (maxWakeLoops))) _)))
(sleep (sleepInterval))
(cut)
(gc)
(omegaclaw (+ 1 $k))))))