uncloseai.com/languages/commonlisp/qwen-nonstreaming.lisp

37 lines
1.4 KiB
Common Lisp

#!/usr/bin/env sbcl --script
;;; Qwen 3 Coder Non-Streaming Example
;;; Uses Dexador HTTP client and Jonathan JSON library
(load "~/quicklisp/setup.lisp")
(ql:quickload '(:dexador :jonathan) :silent t)
(defparameter *base-url* "https://qwen.ai.unturf.com/v1/chat/completions")
(defparameter *model* "hf.co/unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF:Q4_K_M")
(defun make-chat-request (prompt)
"Make a non-streaming chat completion request"
(let* ((payload (jonathan:to-json
(list :|model| *model*
:|messages| (vector (list :|role| "user"
:|content| prompt))
:|temperature| 0.5
:|max_tokens| 150
:|stream| :false)))
(response (dex:post *base-url*
:headers '(("Content-Type" . "application/json"))
:content payload)))
(let* ((parsed (jonathan:parse response))
(choice (aref (getf parsed :|choices|) 0))
(message (getf choice :|message|))
(content (getf message :|content|)))
content)))
;; Main execution
(handler-case
(progn
(format t "Requesting from Qwen 3 Coder...~%~%")
(let ((result (make-chat-request "Give a Python Fizzbuzz solution in one line of code?")))
(format t "Response: ~A~%" result)))
(error (e)
(format t "Error: ~A~%" e)))