]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
server: add format arg to datetime tool (#26117)
authorXuan-Son Nguyen <redacted>
Sat, 25 Jul 2026 19:15:15 +0000 (21:15 +0200)
committerGitHub <redacted>
Sat, 25 Jul 2026 19:15:15 +0000 (21:15 +0200)
tools/server/server-tools.cpp

index 9eb57abaea15245d7fa9495697b0fc1558770dac..a82a3d6025908cd00c21ce97e842f4b68f3e507b 100644 (file)
@@ -7,6 +7,7 @@
 #include <regex>
 #include <thread>
 #include <chrono>
+#include <ctime>
 #include <atomic>
 #include <cstring>
 #include <climits>
@@ -1048,16 +1049,42 @@ struct server_tool_get_datetime : server_tool {
             {"type", "function"},
             {"function", {
                 {"name", name},
-                {"description", "Returns the current date and time"},
+                {"description", "Returns the current date and time in UTC"},
+                {"parameters", {
+                    {"type", "object"},
+                    {"properties", {
+                        {"format", {
+                            {"type", "string"},
+                            {"description",
+                                "strftime()-style format string for the output (default: \"%Y-%m-%dT%H:%M:%SZ\", "
+                                "e.g. ISO 8601). Choose your own format if you need something else, "
+                                "e.g. \"%A, %B %d %Y\" for a human-readable date."},
+                        }},
+                    }},
+                }},
             }},
         };
     }
 
-    json invoke(json, server_tool::stream *) const override {
-        auto now = std::chrono::system_clock::now();
+    json invoke(json params, server_tool::stream *) const override {
+        std::string format = json_value(params, "format", std::string("%Y-%m-%dT%H:%M:%SZ"));
+
+        auto now  = std::chrono::system_clock::now();
         auto time = std::chrono::system_clock::to_time_t(now);
+        std::tm tm_utc;
+#ifdef _WIN32
+        gmtime_s(&tm_utc, &time);
+#else
+        gmtime_r(&time, &tm_utc);
+#endif
+
+        char buf[256];
+        size_t len = std::strftime(buf, sizeof(buf), format.c_str(), &tm_utc);
+        if (len == 0) {
+            return {{"error", "invalid format string"}};
+        }
 
-        return {{"result", std::ctime(&time)}};
+        return {{"result", std::string(buf, len)}};
     }
 };