add English translations, balloon images, and chatbot API gateway
This commit is contained in:
1 parent
da54636680
commit
fc18e56b3f
46 files changed
+263
-515
No files matched your search
@@ -8,8 +8,7 @@ extends Control
|
||||
@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
|
||||
|
||||
const API_URL := ""
|
||||
var document_id
|
||||
|
||||
signal closing_chatbot
|
||||
@@ -17,6 +16,7 @@ signal closing_chatbot
|
||||
|
||||
func _ready():
|
||||
_http.request_completed.connect(Callable(self, "_on_request_completed"))
|
||||
_http.timeout = 180.0
|
||||
document_id = option_button.selected
|
||||
helper.play_idle()
|
||||
|
||||
@@ -35,8 +35,6 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||
|
||||
|
||||
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()
|
||||
@@ -44,73 +42,69 @@ func _on_generate_pressed() -> void:
|
||||
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 := ""
|
||||
|
||||
var document := _load_txt("res://addons/godot_llama/demo/documents/%s.md" % [document_id]).strip_edges()
|
||||
var combined_user_message := user_text
|
||||
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
|
||||
"question": combined_user_message,
|
||||
"prompt": tr("CHATBOT_SYSTEM_PROMPT"),
|
||||
}
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
var headers := PackedStringArray(["Content-Type: application/json"])
|
||||
var err := _http.request(API_URL, headers, HTTPClient.METHOD_POST, JSON.stringify(body))
|
||||
if err != OK:
|
||||
print("HTTP Fehler: ", err)
|
||||
|
||||
_stop_helper_animation()
|
||||
output_text.text = _request_failed("HTTP %s" % error_string(err))
|
||||
generate_button.disabled = false
|
||||
return
|
||||
|
||||
$VBoxContainer/SubViewportContainer/SubViewport/AnimationPlayer.play("walk_helper")
|
||||
helper.play_think_walk()
|
||||
generate_button.disabled = true
|
||||
|
||||
func _on_request_completed(
|
||||
result: int,
|
||||
response_code: int,
|
||||
headers: PackedStringArray,
|
||||
_headers: PackedStringArray,
|
||||
body: PackedByteArray
|
||||
) -> void:
|
||||
$VBoxContainer/SubViewportContainer/SubViewport/AnimationPlayer.stop()
|
||||
helper.play_idle()
|
||||
_stop_helper_animation()
|
||||
generate_button.disabled = false
|
||||
var txt := body.get_string_from_utf8()
|
||||
|
||||
if result != HTTPRequest.RESULT_SUCCESS:
|
||||
output_text.text = _request_failed("result %s" % result)
|
||||
return
|
||||
if response_code != 200:
|
||||
output_text.text = _request_failed("HTTP %s" % response_code)
|
||||
push_warning("Chatbot HTTP %s: %s" % [response_code, txt.left(300)])
|
||||
return
|
||||
|
||||
var json = JSON.parse_string(txt)
|
||||
|
||||
if json == null:
|
||||
print("JSON Fehler")
|
||||
var response_text := _extract_reply(json)
|
||||
if response_text.is_empty():
|
||||
output_text.text = _request_failed("empty response")
|
||||
return
|
||||
|
||||
output_text.text = response_text
|
||||
TextToSpeech._on_dialogue({"text": response_text})
|
||||
|
||||
func _extract_reply(json) -> String:
|
||||
if typeof(json) != TYPE_DICTIONARY:
|
||||
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
|
||||
return str(json["content"]).strip_edges()
|
||||
return ""
|
||||
|
||||
func _request_failed(detail: String) -> String:
|
||||
if TranslationServer.get_locale().begins_with("en"):
|
||||
return "The request failed (%s)." % detail
|
||||
return "Die Anfrage ist fehlgeschlagen (%s)." % detail
|
||||
|
||||
func _stop_helper_animation() -> void:
|
||||
$VBoxContainer/SubViewportContainer/SubViewport/AnimationPlayer.stop()
|
||||
helper.play_idle()
|
||||
|
||||
func _load_txt(path: String) -> String:
|
||||
var file := FileAccess.open(path, FileAccess.READ)
|
||||
|
||||
Reference in new issue
Block a user