From f4bcd2231d06d091af22cf21b543821d423cc4a2 Mon Sep 17 00:00:00 2001 From: narawat Date: Fri, 24 Jul 2026 21:22:27 +0700 Subject: [PATCH] update --- Manifest.toml | 53 ++++++++++++++++++++++++++++++++++++++++++++-- Project.toml | 2 ++ src/interface.jl | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 2 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 49f4735..28eb6d2 100755 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.12.6" manifest_format = "2.0" -project_hash = "adfe8f37dc71ad4906c6a3381f139d6ebc68809a" +project_hash = "f5acd7cc8d61de61b593abff346e0e87a839fd1e" [[deps.Accessors]] deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] @@ -44,6 +44,12 @@ git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" uuid = "ec485272-7323-5ecc-a04f-4719b315124d" version = "0.4.0" +[[deps.Arrow]] +deps = ["ArrowTypes", "BitIntegers", "CodecLz4", "CodecZstd", "ConcurrentUtilities", "DataAPI", "Dates", "EnumX", "Mmap", "PooledArrays", "SentinelArrays", "StringViews", "Tables", "TimeZones", "TranscodingStreams", "UUIDs"] +git-tree-sha1 = "4a69a3eadc1f7da78d950d1ef270c3a62c1f7e01" +uuid = "69666777-d1a9-59fb-9406-91d4454c9d45" +version = "2.8.1" + [[deps.ArrowTypes]] deps = ["Sockets", "UUIDs"] git-tree-sha1 = "404265cd8128a2515a81d5eae16de90fdef05101" @@ -58,6 +64,12 @@ version = "1.11.0" uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" version = "1.11.0" +[[deps.BitIntegers]] +deps = ["Random"] +git-tree-sha1 = "091d591a060e43df1dd35faab3ca284925c48e46" +uuid = "c3b6d118-76ef-56ca-8cc7-ebb389d030a1" +version = "0.3.7" + [[deps.BufferedStreams]] git-tree-sha1 = "6863c5b7fc997eadcabdbaf6c5f201dc30032643" uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d" @@ -90,14 +102,26 @@ git-tree-sha1 = "40956acdbef3d8c7cc38cba42b56034af8f8581a" uuid = "6c391c72-fb7b-5838-ba82-7cfb1bcfecbf" version = "0.3.4" +[[deps.CodecLz4]] +deps = ["Lz4_jll", "TranscodingStreams"] +git-tree-sha1 = "d58afcd2833601636b48ee8cbeb2edcb086522c2" +uuid = "5ba52731-8f18-5e0d-9241-30f10d1ec561" +version = "0.4.6" + [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" version = "0.7.8" +[[deps.CodecZstd]] +deps = ["TranscodingStreams", "Zstd_jll"] +git-tree-sha1 = "da54a6cd93c54950c15adf1d336cfd7d71f51a56" +uuid = "6b39b394-51ab-5f42-8807-6242bab2b4c2" +version = "0.8.7" + [[deps.CommUtils]] -deps = ["Dates", "Redis", "UUIDs"] +deps = ["Dates", "GeneralUtils", "Redis", "UUIDs"] path = "." uuid = "646cbe82-3d4a-47b2-9440-2e80a472ca20" version = "0.1.0" @@ -136,6 +160,12 @@ weakdeps = ["InverseFunctions"] [deps.CompositionsBase.extensions] CompositionsBaseInverseFunctionsExt = "InverseFunctions" +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "21d088c496ea22914fe80906eb5bce65755e5ec8" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.5.1" + [[deps.ConstructionBase]] git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" @@ -519,6 +549,12 @@ git-tree-sha1 = "1d4c737ab26f51ceed52ab2019c09b7660eb7440" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" version = "3.8.0" +[[deps.Lz4_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "191686b1ac1ea9c89fc52e996ad15d1d241d1e33" +uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" +version = "1.10.1+0" + [[deps.MacroTools]] git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" @@ -915,6 +951,11 @@ git-tree-sha1 = "532e983cd333609f95d618c744fc40d01ea6e17a" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" version = "0.4.6" +[[deps.StringViews]] +git-tree-sha1 = "f2dcb92855b31ad92fe8f079d4f75ac57c93e4b8" +uuid = "354b36f9-a18e-4713-926e-db85100087ba" +version = "1.3.7" + [[deps.StructTypes]] deps = ["Dates", "UUIDs"] git-tree-sha1 = "159331b30e94d7b11379037feeb9b690950cace8" @@ -1046,6 +1087,14 @@ git-tree-sha1 = "011b0a7331b41c25524b64dc42afc9683ee89026" uuid = "a9144af2-ca23-56d9-984f-0d03f7b5ccf8" version = "1.0.21+0" +[[deps.msghandler]] +deps = ["Arrow", "Base64", "DataFrames", "Dates", "GeneralUtils", "HTTP", "JSON", "NATS", "PrettyPrinting", "Revise", "UUIDs"] +git-tree-sha1 = "e82a79cf6602541ea25409aded57b2ace4a7c29f" +repo-rev = "main" +repo-url = "https://git.yiem.cc/ton/msghandler" +uuid = "f2724d33-f338-4a57-b9f8-1be882570d10" +version = "1.2.1" + [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" diff --git a/Project.toml b/Project.toml index 04aca6b..b5820c0 100755 --- a/Project.toml +++ b/Project.toml @@ -8,6 +8,8 @@ Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" GeneralUtils = "c6c72f09-b708-4ac8-ac7c-2084d70108fe" Redis = "0cf705f9-a9e2-50d1-a699-2b372a39b750" UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +msghandler = "f2724d33-f338-4a57-b9f8-1be882570d10" [compat] GeneralUtils = "0.5.11" +msghandler = "1.2.1" diff --git a/src/interface.jl b/src/interface.jl index 4946c45..40bf717 100755 --- a/src/interface.jl +++ b/src/interface.jl @@ -1,9 +1,64 @@ module interface +export get_embedding_nats + +using GeneralUtils, msghandler + """ + get_embedding_nats(nats_server_url::String, texts::Vector{String}, sendto_topic::String, fileserver_url::String) + Fetch embeddings for a list of texts from a NATS-based embedding service. + # Arguments + - `nats_server_url::String`: NATS server connection URL + - `texts::Vector{String}`: List of text strings to generate embeddings for + - `sendto_topic::String`: NATS topic to send the embedding request to + - `fileserver_url::String`: URL of the file server for additional data + + # Returns + - `Vector` of embeddings, where each embedding is a vector of floats (Vector{Float32} or Vector{Float64}) + + # Example + ```julia + nats_server_url = "nats://localhost:4222" + texts = ["Hello world", "Another text"] + sendto_topic = "embedding.service" + fileserver_url = "http://localhost:8080" + embeddings = get_embedding_nats(nats_server_url, texts, sendto_topic, fileserver_url) + ``` + """ + function get_embedding_nats(nats_server_url::String, texts::Vector{String}, sendto_topic::String, + fileserver_url::String) + nats_conn = NATS.connect(nats_server_url) + return get_embedding_nats(nats_conn, texts, sendto_topic, fileserver_url) + end + + function get_embedding_nats(nats_conn::NATS.Connection, texts::Vector{String}, sendto_topic::String, + fileserver_url::String) + println("Generating embeddings for $(length(texts)) texts...") + documents_dict = Dict("documents" => texts) + payloads = [("documents", documents_dict, "dictionary")] + _, msg_envelope_json_str = msghandler.smartpack( + sendto_topic, + payloads; + msg_purpose="embedding", + fileserver_url=fileserver_url) + + reply = NATS.request(nats_conn, + sendto_topic, + msg_envelope_json_str, timeout=300) + incoming_env_json_str = String(reply.payload) + incoming_env = msghandler.smartunpack(incoming_env_json_str) + embedding_response = incoming_env["payloads"][1][2] + + result = [] + for i in embedding_response["data"] + embedding_vector = i["embedding"] + push!(result, embedding_vector) + end + return result + end