Files

144 lines
3.6 KiB
GDScript

extends Control
@onready var _prompt_edit: TextEdit = $MarginContainer/Scroll/VBox/PromptEdit
@onready var main: Control = $"."
@onready var _http: HTTPRequest = $HTTPRequest
@onready var output_text: RichTextLabel = $MarginContainer/Scroll/VBox/OutputText
@onready var option_button: OptionButton = $MarginContainer/Scroll/VBox/OptionButton
@onready var generate_button: Button = $MarginContainer/Scroll/VBox/GenerateRow/GenerateButton
@onready var helper = $VBoxContainer/SubViewportContainer/SubViewport/base_node/helper
const API_URL := "" #TODO insert your url to the llm / api-gateway here
var document_id
signal closing_chatbot
func _ready():
_http.request_completed.connect(Callable(self, "_on_request_completed"))
document_id = option_button.selected
helper.play_idle()
func _unhandled_input(event: InputEvent) -> void:
if not main.visible:
return
print(option_button.selected)
if event.is_action_pressed("drop"):
get_viewport().set_input_as_handled()
_on_close_pressed()
#if event.is_action_pressed("advance_dialogue"):
# get_viewport().set_input_as_handled()
# _on_generate_pressed()
func _on_generate_pressed() -> void:
$VBoxContainer/SubViewportContainer/SubViewport/AnimationPlayer.play("walk_helper")
helper.play_think_walk()
var user_text := _prompt_edit.text.strip_edges()
document_id = option_button.selected
TextToSpeech._stop_dialogue()
if user_text.is_empty():
print("Prompt ist leer")
return
var document = _load_txt("res://addons/godot_llama/demo/documents/%s.md" % [document_id]).strip_edges()
print(document_id)
print(document)
var combined_user_message := ""
if not document.is_empty():
combined_user_message = "Dokument:\n%s\n\nFrage: %s" % [document, user_text]
else:
combined_user_message = user_text
var body := {
"question": combined_user_message
}
var headers = [
"Content-Type: application/json",
#"Authorization: Bearer %s" % API_TOKEN
]
var json_body := JSON.stringify(body)
var err = _http.request(
API_URL,
headers,
HTTPClient.METHOD_POST,
json_body
)
if err != OK:
print("HTTP Fehler: ", err)
generate_button.disabled = true
func _on_request_completed(
result: int,
response_code: int,
headers: PackedStringArray,
body: PackedByteArray
) -> void:
$VBoxContainer/SubViewportContainer/SubViewport/AnimationPlayer.stop()
helper.play_idle()
var txt := body.get_string_from_utf8()
if response_code != 200:
return
var json = JSON.parse_string(txt)
if json == null:
print("JSON Fehler")
return
if json.has("content"):
print('content:')
print(json["content"])
var response_text = json["content"]
output_text.text = response_text
if json.has("message"):
print('message:')
print(json["message"])
var response_text = json["message"]["content"]
output_text.text = response_text
var line = {"text": output_text.text}
TextToSpeech._on_dialogue(line)
generate_button.disabled = false
func _load_txt(path: String) -> String:
var file := FileAccess.open(path, FileAccess.READ)
print(file)
if file == null:
return ""
var content := file.get_as_text()
file.close()
return content
func _on_close_pressed() -> void:
main.visible = false
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
TextToSpeech._stop_dialogue()
Global.chatbot_opened = false
TextToSpeech._stop_dialogue()
closing_chatbot.emit()
func _on_prompt_edit_gui_input(event: InputEvent) -> void:
if event is InputEventKey and event.pressed:
print(event.keycode)
if event.keycode == KEY_ENTER:
if event.shift_pressed:
_prompt_edit.insert_text_at_caret("\n")
else:
_on_generate_pressed()
accept_event()