1st commit
This commit is contained in:
Executable
+243
@@ -0,0 +1,243 @@
|
||||
# ---------------------------------------------- 100 --------------------------------------------- #
|
||||
|
||||
|
||||
using JSON, Dates, UUIDs, PrettyPrinting, Base64, DataFrames, NATS, HTTP
|
||||
using GeneralUtils, msghandler
|
||||
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
# llama.cpp chat request example (direct HTTP) #
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
|
||||
# 1. Read local file and encode to base64 string
|
||||
image_path = "test/large_image.png"
|
||||
image_bytes = read(image_path)
|
||||
base64_string = base64encode(image_bytes)
|
||||
|
||||
# 2. Match the MIME type according to your file extension (e.g., png, jpeg)
|
||||
mime_type = "image/png"
|
||||
data_uri = "data:$(mime_type);base64,$(base64_string)"
|
||||
|
||||
|
||||
headers = [
|
||||
"Content-Type" => "application/json",
|
||||
"Authorization" => "Bearer no-key"
|
||||
]
|
||||
|
||||
# 3. Construct payload with the Data URI
|
||||
messages = Dict(
|
||||
"model" => "gemma-4-E4B-it-UD-Q4_K_XL",
|
||||
"messages" => [
|
||||
Dict(
|
||||
"role" => "user",
|
||||
"content" => [
|
||||
Dict("type" => "text", "text" => "Describe this image for me."),
|
||||
Dict(
|
||||
"type" => "image_url",
|
||||
"image_url" => Dict("url" => data_uri)
|
||||
)
|
||||
]
|
||||
)
|
||||
],
|
||||
"temperature" => 0.7
|
||||
)
|
||||
url = "http://192.168.1.8:9001/v1/chat/completions"
|
||||
response = HTTP.post(url, headers, JSON.json(messages))
|
||||
r = JSON.parse(response.body)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
# Llama.cpp Embedding multiple text example (direct HTTP) #
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
using HTTP
|
||||
using JSON
|
||||
|
||||
url = "http://192.168.88.50:9010/v1/embeddings"
|
||||
headers = [
|
||||
"Content-Type" => "application/json",
|
||||
"Authorization" => "Bearer no-key"
|
||||
]
|
||||
|
||||
# Pass an array of strings instead of a single string
|
||||
documents = [
|
||||
"System architecture specification for heart monitor logic.",
|
||||
"NATS broker cluster configuration options for low-latency.",
|
||||
"Julia signal processing worker initialization sequence."
|
||||
]
|
||||
|
||||
body_data = Dict(
|
||||
"model" => "embeddinggemma-300M-BF16",
|
||||
"input" => documents
|
||||
)
|
||||
|
||||
try
|
||||
response = HTTP.post(url, headers, JSON.json(body_data))
|
||||
parsed = JSON.parse(String(response.body))
|
||||
|
||||
# Extract multiple vectors (ordered identically to your input array)
|
||||
for (i, item) in enumerate(parsed["data"])
|
||||
idx = item["index"] + 1 # API indexes are 0-based; Julia is 1-based
|
||||
vector = item["embedding"]
|
||||
println("Document $idx unified vector size: ", length(vector))
|
||||
end
|
||||
|
||||
catch e
|
||||
println("Batch embedding failed: ", e)
|
||||
end
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
# test openai_message (NATS) #
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
# Llama.cpp Embedding multiple text with NATS #
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
using JSON, Dates, UUIDs, PrettyPrinting, Base64, DataFrames, NATS, HTTP
|
||||
using GeneralUtils, msghandler
|
||||
|
||||
const config = JSON.parsefile("./appconfig.json")
|
||||
|
||||
documents = [
|
||||
"System architecture specification for heart monitor logic.",
|
||||
# "NATS broker cluster configuration options for low-latency.",
|
||||
# "Julia signal processing worker initialization sequence."
|
||||
]
|
||||
|
||||
documents_dict = Dict("documents"=> documents)
|
||||
|
||||
payloads = [("documents", documents_dict, "dictionary")]
|
||||
message_envelope, forward_msg_envelope_json_str = msghandler.smartpack(
|
||||
config["this_service_input_channel"]["nats"],
|
||||
payloads;
|
||||
msg_purpose="embedding",
|
||||
broker_url=config["nats_server_info"]["url"],
|
||||
fileserver_url=config["externalService"]["fileserver"]["url"])
|
||||
|
||||
connection = NATS.connect(config["nats_server_info"]["url"])
|
||||
reply = NATS.request(connection,
|
||||
config["this_service_input_channel"]["nats"],
|
||||
forward_msg_envelope_json_str, timeout=120)
|
||||
|
||||
incoming_env_json_str = String(reply.payload)
|
||||
incoming_env = msghandler.smartunpack(incoming_env_json_str)
|
||||
embedding_response = incoming_env["payloads"][1][2]
|
||||
|
||||
for (i, item) in enumerate(embedding_response["data"])
|
||||
vector = item["embedding"]
|
||||
println("Document $i embedding vector size: ", length(vector))
|
||||
end
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
# test openai_message (NATS) #
|
||||
# ------------------------------------------------------------------------------------------------ #
|
||||
using JSON, Dates, UUIDs, PrettyPrinting, Base64, DataFrames, NATS, HTTP
|
||||
using GeneralUtils, msghandler
|
||||
|
||||
const config = JSON.parsefile("./appconfig.json")
|
||||
|
||||
# 1. Read local file and encode to base64 string
|
||||
image_path = "test/large_image.png"
|
||||
image_bytes = read(image_path)
|
||||
base64_string = base64encode(image_bytes)
|
||||
|
||||
# 2. Match the MIME type according to your file extension (e.g., png, jpeg)
|
||||
mime_type = "image/png"
|
||||
data_uri = "data:$(mime_type);base64,$(base64_string)"
|
||||
|
||||
|
||||
headers = [
|
||||
"Content-Type" => "application/json",
|
||||
"Authorization" => "Bearer no-key"
|
||||
]
|
||||
|
||||
# 3. Construct payload with the Data URI
|
||||
openai_msg = Dict(
|
||||
"model" => "gemma-4-E4B-it-UD-Q4_K_XL",
|
||||
"messages" => [
|
||||
Dict(
|
||||
"role" => "user",
|
||||
"content" => [
|
||||
Dict("type" => "text", "text" => "Describe this image for me in detail."),
|
||||
Dict(
|
||||
"type" => "image_url",
|
||||
"image_url" => Dict("url" => data_uri)
|
||||
)
|
||||
]
|
||||
)
|
||||
],
|
||||
"temperature" => 0.7
|
||||
)
|
||||
|
||||
payloads = [("msg", openai_msg, "dictionary")] # List of tuples
|
||||
message_envelope, forward_msg_envelope_json_str = msghandler.smartpack(
|
||||
config["this_service_input_channel"]["nats"],
|
||||
payloads;
|
||||
msg_purpose="text2text",
|
||||
broker_url=config["nats_server_info"]["url"],
|
||||
fileserver_url=config["externalService"]["fileserver"]["url"])
|
||||
|
||||
|
||||
connection = NATS.connect(config["nats_server_info"]["url"])
|
||||
reply = NATS.request(connection,
|
||||
config["this_service_input_channel"]["nats"],
|
||||
forward_msg_envelope_json_str, timeout=120)
|
||||
|
||||
incoming_env_json_str = String(reply.payload)
|
||||
incoming_env = msghandler.smartunpack(incoming_env_json_str)
|
||||
ai_response = incoming_env["payloads"][1][2]
|
||||
content = ai_response["choices"][1]["message"]["content"]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user