diff --git a/main.c b/main.c index 388bd16..218a7e0 100644 --- a/main.c +++ b/main.c @@ -2312,59 +2312,61 @@ void frame(void) { assert(!(it->exists && it->generation == 0)); #ifdef WEB - if(it->gen_request_id != 0) + if(it->is_npc) { - assert(it->gen_request_id > 0); - int status = EM_ASM_INT({ - return get_generation_request_status($0); - }, it->gen_request_id); - if(status == 0) + if(it->gen_request_id != 0) { - // simply not done yet - } - else - { - if(status == 1) + assert(it->gen_request_id > 0); + int status = EM_ASM_INT({ + return get_generation_request_status($0); + }, it->gen_request_id); + if(status == 0) + { + // simply not done yet + } + else { - // done! we can get the string - char sentence_str[MAX_SENTENCE_LENGTH] = {0}; - EM_ASM({ - let generation = get_generation_request_content($0); - stringToUTF8(generation, $1, $2); - }, it->gen_request_id, sentence_str, ARRLEN(sentence_str)); + if(status == 1) + { + // done! we can get the string + char sentence_str[MAX_SENTENCE_LENGTH] = {0}; + EM_ASM({ + let generation = get_generation_request_content($0); + stringToUTF8(generation, $1, $2); + }, it->gen_request_id, sentence_str, ARRLEN(sentence_str)); - // parse out from the sentence NPC action and dialog - Perception out = {0}; - bool text_was_well_formatted = parse_ai_response(it, sentence_str, &out); + // parse out from the sentence NPC action and dialog + Perception out = {0}; + bool text_was_well_formatted = parse_ai_response(it, sentence_str, &out); - if(text_was_well_formatted) - { - process_perception(it, out); + if(text_was_well_formatted) + { + process_perception(it, out); + } + else + { + it->perceptions_dirty = true; // on poorly formatted AI, just retry request. + } + + EM_ASM({ + done_with_generation_request($0); + }, it->gen_request_id); } - else + else if(status == 2) { - it->perceptions_dirty = true; // on poorly formatted AI, just retry request. + Log("Failed to generate dialog! Fuck!"); + // need somethin better here. Maybe each sentence has to know if it's player or NPC, that way I can remove the player's dialog + process_perception(it, (Perception){.type = NPCDialog, .npc_action_type = ACT_none, .npc_dialog = SENTENCE_CONST("I'm not sure...")}); } - - EM_ASM({ - done_with_generation_request($0); - }, it->gen_request_id); + it->gen_request_id = 0; } - else if(status == 2) - { - Log("Failed to generate dialog! Fuck!"); - // need somethin better here. Maybe each sentence has to know if it's player or NPC, that way I can remove the player's dialog - process_perception(it, (Perception){.type = NPCDialog, .npc_action_type = ACT_none, .npc_dialog = SENTENCE_CONST("I'm not sure...")}); - } - it->gen_request_id = 0; } } #endif if(fabsf(it->vel.x) > 0.01f) it->facing_left = it->vel.x < 0.0f; - if(it->dead) { it->dead_time += dt; diff --git a/makeprompt.h b/makeprompt.h index 94e248f..db0ba90 100644 --- a/makeprompt.h +++ b/makeprompt.h @@ -188,6 +188,7 @@ void fill_available_actions(Entity *it, AvailableActions *a) void process_perception(Entity *it, Perception p) { + assert(it->is_npc); if(p.type != NPCDialog) it->perceptions_dirty = true; if(!BUFF_HAS_SPACE(&it->remembered_perceptions)) BUFF_REMOVE_FRONT(&it->remembered_perceptions); BUFF_APPEND(&it->remembered_perceptions, p); diff --git a/maketraining.c b/maketraining.c index 5729516..38e32bf 100644 --- a/maketraining.c +++ b/maketraining.c @@ -151,6 +151,24 @@ TrainingSample samples[] = { NPCDoSay(ACT_leaves_player, "As you wish."), }, }, + { + .npc_kind = NPC_OldMan, + .perceptions = { + PlayerAct(ACT_hits_npc), + NPCDoSay(ACT_none, "Young man! You must stop death, do not harm me further I'm warning you!"), + PlayerAct(ACT_hits_npc), + NPCDoSay(ACT_fights_player, "That's it! No holds barred, to the death!"), + }, + }, + { + .npc_kind = NPC_Blocky, + .perceptions = { + PlayerAct(ACT_hits_npc), + NPCSay("I'm warning you, one more hit and it's curtains for you"), + PlayerAct(ACT_hits_npc), + NPCDoSay(ACT_fights_player, "Although I stood here before, today I move and FIGHT!"), + }, + }, }; diff --git a/server/main.go b/server/main.go index 1cf4c01..e76cb0c 100644 --- a/server/main.go +++ b/server/main.go @@ -308,7 +308,7 @@ func index(w http.ResponseWriter, req *http.Request) { ctx := context.Background() req := gogpt.CompletionRequest { - Model: "curie:ft-alnar-games-2023-03-31-03-25-44", + Model: "curie:ft-alnar-games-2023-03-31-04-24-33", MaxTokens: 80, Prompt: promptString, Temperature: 0.9,