;;; llm-provider.scm - Provider abstraction for LLM backends ;;; ;;; BSD-3-Clause License ;;; Copyright (c) 2025, Rolando Abarca (module llm-provider (make-llm-provider llm-provider? llm-provider-name llm-provider-prepare-message llm-provider-build-payload llm-provider-call-api llm-provider-parse-response llm-provider-format-tool-result llm-provider-get-model-pricing llm-provider-extract-tool-calls ;; Optional capabilities (can be #f) llm-provider-generate-image llm-provider-transcribe-audio current-provider) (import scheme chicken.base) ;;; ================================================================ ;;; Provider Record Type (SRFI-9) ;;; ================================================================ ;; Define the provider record type with all required operations ;; Each provider (OpenAI, Anthropic, Mistral, etc.) implements these procedures (define-record-type (make-llm-provider name ;; symbol: 'openai, 'anthropic, 'mistral prepare-message ;; (message include-file?) -> provider-format message build-payload ;; (messages tools model temp max-tokens) -> payload alist call-api ;; (endpoint payload) -> response alist parse-response ;; (response-data) -> normalized response format-tool-result ;; (tool-call-id result) -> provider-format tool message get-model-pricing ;; (model-name) -> pricing alist extract-tool-calls ;; (response-message) -> list of (id name arguments) ;; Optional capabilities (can be #f if provider doesn't support) generate-image ;; (prompt params-alist) -> alist with base64 data transcribe-audio) ;; (file-path params-alist) -> string or alist llm-provider? (name llm-provider-name) (prepare-message llm-provider-prepare-message) (build-payload llm-provider-build-payload) (call-api llm-provider-call-api) (parse-response llm-provider-parse-response) (format-tool-result llm-provider-format-tool-result) (get-model-pricing llm-provider-get-model-pricing) (extract-tool-calls llm-provider-extract-tool-calls) (generate-image llm-provider-generate-image) (transcribe-audio llm-provider-transcribe-audio)) ;;; ================================================================ ;;; Current Provider Parameter ;;; ================================================================ ;; Parameter for dynamic provider switching ;; Default is #f until a provider is set (typically OpenAI) (define current-provider (make-parameter #f)) ) ;; end module