Mercurial Hosting > lang
view src/lib/ai/claude/Claude.luan @ 40:6cdb2c761e08
minor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 10 Aug 2025 11:29:02 +0900 |
parents | df72d5d5d9dc |
children |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() local type = Luan.type or error() local Io = require "luan:Io.luan" local uri = Io.uri or error() local Parsers = require "luan:Parsers.luan" local json_string = Parsers.json_string or error() local Config = require "site:/private/Config.luan" local Utils = require "site:/lib/Utils.luan" local deep_copy = Utils.deep_copy or error() local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "claude/Claude" -- https://docs.anthropic.com/ local Claude = {} local url = "https://api.anthropic.com/v1/messages" local headers = { ["x-api-key"] = Config.claude.key or error() ["anthropic-version"] = "2023-06-01" ["Content-Type"] = "application/json" } local model = "claude-sonnet-4-0" local max_tokens = 8192 function Claude.chat(thread) thread = deep_copy(thread) thread.model = thread.model or model thread.max_tokens = thread.max_tokens or max_tokens local messages = thread.messages or error() for _, message in ipairs(messages) do local content = message.content or error() if type(content) == "string" then content = {{ type = "text" text = content }} message.content = content end end local content = messages[#messages].content or error() content[#content].cache_control = { type = "ephemeral" } local options = { method = "POST" headers = headers content = json_string(thread) } try local response = uri(url,options).read_text() return response catch e logger.error(options.content) e.throw() end end return Claude