get config and is_tech working

This commit is contained in:
Travis Shears 2025-07-16 20:50:02 +02:00
parent 77ae02c8b8
commit 8e0d00035a
5 changed files with 109 additions and 0 deletions

4
.gitignore vendored
View file

@ -4,3 +4,7 @@ node_modules
.yarn/
nostr/*
dist
.clj-kondo/
.lsp/
config.edn
.cpcache

25
build.clj Normal file
View file

@ -0,0 +1,25 @@
(ns build
(:require [clojure.tools.build.api :as b]))
(def lib 'snippets)
(def class-dir "target/classes")
(def uber-file (format "target/%s-standalone.jar" (name lib)))
;; delay to defer side effects (artifact downloads)
(def basis (delay (b/create-basis {:project "deps.edn"})))
(defn clean [_]
(b/delete {:path "target"}))
(defn uber [_]
(clean nil)
(b/copy-dir {:src-dirs ["src" "resources"]
:target-dir class-dir})
(b/compile-clj {:basis @basis
:ns-compile '[snippets.main]
:class-dir class-dir})
(b/uber {:class-dir class-dir
:uber-file uber-file
:basis @basis
:main 'snippets.main}))

28
deps.edn Normal file
View file

@ -0,0 +1,28 @@
{:paths ["src"]
:deps {clj-http/clj-http {:mvn/version "3.13.1"}
;; logging
com.taoensso/telemere {:mvn/version "1.0.0"}
;; environment variables
environ/environ {:mvn/version "1.2.0"}
;; schema validation
metosin/malli {:mvn/version "0.18.0"}
;; json decoding
cheshire/cheshire {:mvn/version "6.0.0"}
;; metosin/muuntaja {:mvn/version "0.6.11"}
org.clojure/clojure {:mvn/version "1.12.1"}}
:aliases
{;; Run with clj -T:build function-in-build
:build {:deps {io.github.clojure/tools.build {:git/tag "v0.10.9" :git/sha "e405aac"}}
:ns-default build}}}
;; :aliases
;; {:dev {:extra-deps {com.biffweb/tasks {:git/url "https://github.com/jacobobryant/biff", :git/sha "1570ccc", :git/tag "v1.8.29", :deps/root "libs/tasks"}}
;; :extra-paths ["dev" "test"]
;; :jvm-opts ["-XX:-OmitStackTraceInFastThrow"
;; "-XX:+CrashOnOutOfMemoryError"
;; "-Dbiff.env.BIFF_PROFILE=dev"]
;; :main-opts ["-m" "com.biffweb.task-runner" "tasks/tasks"]}
;; :prod {:jvm-opts ["-XX:-OmitStackTraceInFastThrow"
;; "-XX:+CrashOnOutOfMemoryError"
;; "-Dbiff.env.BIFF_PROFILE=prod"]
;; :main-opts ["-m" "snippets"]}}}

26
src/micro_blog/config.clj Normal file
View file

@ -0,0 +1,26 @@
(ns micro-blog.config
(:require [environ.core :refer [env]]))
(def ^:private env-overrides
{:minstral-api-key "MISTRAL_API_KEY"})
(defn- load-config []
(println "config is being loaded")
(merge (read-string (slurp "config.edn"))
(into {} (for [[k env-var] env-overrides
:let [env-val (env env-var)]
:when env-val]
[k env-val]))))
(def config (atom (load-config)))
(defn reload-config []
(reset! config (load-config)))
(comment
;; Example usage:
;; Access the config
@config
;; Reload the config at runtime
(reload-config))

View file

@ -0,0 +1,26 @@
(ns micro-blog.is-tech
(:require
[micro-blog.config :refer [config]]
[clj-http.client :as client]))
(defn call-mistral-api [post-text]
(let [url (str (:mistral-host @config) "/v1/conversations")
headers {"Content-Type" "application/json"
"Accept" "application/json"
"Authorization" (str "Bearer " (@config :mistral-api-key))}
body {:inputs post-text
:stream false
:agent_id (@config :mistral-agent-id)}]
(->
(client/post url {:headers headers
:form-params body
:content-type :json
:as :json})
:body
:outputs
first
:content
(#(if (= "1" %) true false)))))
(defn is-tech? [post-text]
(call-mistral-api post-text))