@@ -50,21 +50,26 @@ void fossil_jellyfish_init(fossil_jellyfish_chain *chain) {
5050
5151void fossil_jellyfish_learn (fossil_jellyfish_chain * chain , const char * input , const char * output ) {
5252 if (chain -> count >= FOSSIL_JELLYFISH_MAX_MEM ) {
53- fossil_jellyfish_cleanup (chain ); // Reclaim space
53+ fossil_jellyfish_cleanup (chain );
5454 }
5555
5656 fossil_jellyfish_block * block = & chain -> memory [chain -> count ++ ];
5757 strncpy (block -> input , input , FOSSIL_JELLYFISH_INPUT_SIZE - 1 );
5858 strncpy (block -> output , output , FOSSIL_JELLYFISH_OUTPUT_SIZE - 1 );
5959 block -> timestamp = (uint64_t )time (NULL );
6060 block -> valid = 1 ;
61+ block -> confidence = 1.0f ;
62+ block -> usage_count = 0 ;
6163
6264 fossil_jellyfish_hash (input , output , block -> hash );
6365}
6466
6567const char * fossil_jellyfish_reason (fossil_jellyfish_chain * chain , const char * input ) {
6668 for (size_t i = 0 ; i < chain -> count ; ++ i ) {
6769 if (chain -> memory [i ].valid && strncmp (chain -> memory [i ].input , input , FOSSIL_JELLYFISH_INPUT_SIZE ) == 0 ) {
70+ chain -> memory [i ].usage_count ++ ;
71+ if (chain -> memory [i ].confidence < 1.0f )
72+ chain -> memory [i ].confidence += 0.05f ;
6873 return chain -> memory [i ].output ;
6974 }
7075 }
@@ -75,7 +80,7 @@ const char* fossil_jellyfish_reason(fossil_jellyfish_chain *chain, const char *i
7580void fossil_jellyfish_cleanup (fossil_jellyfish_chain * chain ) {
7681 size_t new_count = 0 ;
7782 for (size_t i = 0 ; i < chain -> count ; ++ i ) {
78- if (chain -> memory [i ].valid && ( time ( NULL ) - chain -> memory [i ].timestamp < 3600 ) ) {
83+ if (chain -> memory [i ].valid && chain -> memory [i ].confidence >= 0.05f ) {
7984 chain -> memory [new_count ++ ] = chain -> memory [i ];
8085 }
8186 }
@@ -143,3 +148,23 @@ const char* fossil_jellyfish_reason_fuzzy(fossil_jellyfish_chain *chain, const c
143148
144149 return best_output ;
145150}
151+
152+ void fossil_jellyfish_decay_confidence (fossil_jellyfish_chain * chain , float decay_rate ) {
153+ for (size_t i = 0 ; i < chain -> count ; ++ i ) {
154+ if (!chain -> memory [i ].valid ) continue ;
155+
156+ chain -> memory [i ].confidence -= decay_rate ;
157+ if (chain -> memory [i ].confidence < 0.05f ) {
158+ chain -> memory [i ].valid = 0 ; // mark for cleanup
159+ }
160+ }
161+ }
162+
163+ const char * fossil_jellyfish_reason_chain (fossil_jellyfish_chain * chain , const char * input , int depth ) {
164+ if (depth <= 0 ) return input ;
165+
166+ const char * first = fossil_jellyfish_reason_fuzzy (chain , input );
167+ if (strcmp (first , "Unknown" ) == 0 ) return first ;
168+
169+ return fossil_jellyfish_reason_chain (chain , first , depth - 1 );
170+ }
0 commit comments