@robinpath/ai
Advanced tools
+25
| /** | ||
| * RobinPath AI Module (Node port). | ||
| * | ||
| * A thin, provider-agnostic LLM wrapper. Every handler takes a saved | ||
| * credential slug (type `ai_provider`) as its first argument. The slug | ||
| * encapsulates `{ provider, api_key, base_url?, default_model? }` so the | ||
| * same script works against OpenAI, Anthropic, or any OpenAI-compatible | ||
| * endpoint just by swapping the credential. | ||
| * | ||
| * This module is intentionally higher-level than the `openai` and | ||
| * `anthropic` modules — it exposes generic primitives (`chat`, `complete`, | ||
| * `summarize`, `extract`, `classify`, `translate`, `sentiment`, | ||
| * `generateJson`, `embedding`) that are useful in automations without | ||
| * forcing the author to commit to a specific vendor. | ||
| * | ||
| * Credential type: | ||
| * - ai_provider : { provider, api_key, base_url?, default_model?, default_max_tokens? } | ||
| */ | ||
| import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core"; | ||
| export declare function configureAi(h: ModuleHost): void; | ||
| export declare const AiFunctions: Record<string, BuiltinHandler>; | ||
| export declare const AiCredentialTypes: CredentialTypeSchema[]; | ||
| export declare const AiFunctionMetadata: Record<string, FunctionMetadata>; | ||
| export declare const AiModuleMetadata: ModuleMetadata; | ||
| //# sourceMappingURL=ai.d.ts.map |
| {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAKzB,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAoB;AA8UpE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAEtD,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,EA8CnD,CAAC;AA6CF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CA4X/D,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,cAqB9B,CAAC"} |
+811
| /** | ||
| * RobinPath AI Module (Node port). | ||
| * | ||
| * A thin, provider-agnostic LLM wrapper. Every handler takes a saved | ||
| * credential slug (type `ai_provider`) as its first argument. The slug | ||
| * encapsulates `{ provider, api_key, base_url?, default_model? }` so the | ||
| * same script works against OpenAI, Anthropic, or any OpenAI-compatible | ||
| * endpoint just by swapping the credential. | ||
| * | ||
| * This module is intentionally higher-level than the `openai` and | ||
| * `anthropic` modules — it exposes generic primitives (`chat`, `complete`, | ||
| * `summarize`, `extract`, `classify`, `translate`, `sentiment`, | ||
| * `generateJson`, `embedding`) that are useful in automations without | ||
| * forcing the author to commit to a specific vendor. | ||
| * | ||
| * Credential type: | ||
| * - ai_provider : { provider, api_key, base_url?, default_model?, default_max_tokens? } | ||
| */ | ||
| // ── Module state ──────────────────────────────────────────────────────── | ||
| const state = {}; | ||
| export function configureAi(h) { state.host = h; } | ||
| function host() { | ||
| if (!state.host) | ||
| throw new Error("AI module not initialized — use rp.installModule()."); | ||
| return state.host; | ||
| } | ||
| const CREDENTIAL_TYPE = "ai_provider"; | ||
| const PROVIDER_DEFAULTS = { | ||
| openai: { baseUrl: "https://api.openai.com/v1", model: "gpt-4o-mini" }, | ||
| anthropic: { baseUrl: "https://api.anthropic.com/v1", model: "claude-sonnet-4-5" }, | ||
| openrouter: { baseUrl: "https://openrouter.ai/api/v1", model: "openai/gpt-4o-mini" }, | ||
| }; | ||
| const errorReturn = (error, code, extra = {}) => ({ error, code, ...extra }); | ||
| async function resolveProvider(slug) { | ||
| if (!slug) | ||
| return errorReturn("Credential slug is required.", "credential_not_found"); | ||
| const fields = await host().credentials.get(slug); | ||
| if (!fields) | ||
| return errorReturn(`Credential '${slug}' not found.`, "credential_not_found"); | ||
| const apiKey = String(fields.api_key ?? ""); | ||
| if (!apiKey) | ||
| return errorReturn("Credential has no `api_key` field.", "api_key_missing"); | ||
| const providerRaw = String(fields.provider ?? "openai").toLowerCase(); | ||
| const provider = providerRaw === "anthropic" ? "anthropic" : | ||
| providerRaw === "openai" || providerRaw === "openrouter" ? "openai" : | ||
| "custom"; | ||
| const defaults = PROVIDER_DEFAULTS[providerRaw] ?? { baseUrl: "", model: "" }; | ||
| const baseUrl = String(fields.base_url ?? defaults.baseUrl).replace(/\/+$/, ""); | ||
| if (!baseUrl) | ||
| return errorReturn("Credential has no `base_url` and provider is unrecognized.", "base_url_missing"); | ||
| return { | ||
| provider, | ||
| apiKey, | ||
| baseUrl, | ||
| defaultModel: String(fields.default_model ?? defaults.model), | ||
| defaultMaxTokens: Number(fields.default_max_tokens ?? 1024), | ||
| }; | ||
| } | ||
| async function callOpenAI(cfg, messages, model, maxTokens, temperature, system) { | ||
| const allMessages = system ? [{ role: "system", content: system }, ...messages] : messages; | ||
| const body = { model, messages: allMessages, max_tokens: maxTokens }; | ||
| if (temperature !== undefined) | ||
| body.temperature = temperature; | ||
| let response; | ||
| try { | ||
| response = await fetch(`${cfg.baseUrl}/chat/completions`, { | ||
| method: "POST", | ||
| headers: { "Content-Type": "application/json", Authorization: `Bearer ${cfg.apiKey}` }, | ||
| body: JSON.stringify(body), | ||
| }); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| const raw = await response.text(); | ||
| let data; | ||
| try { | ||
| data = raw ? JSON.parse(raw) : {}; | ||
| } | ||
| catch { | ||
| data = { raw }; | ||
| } | ||
| if (!response.ok) { | ||
| return errorReturn(`AI provider returned HTTP ${response.status}.`, response.status === 429 ? "rate_limited" : "provider_error", { status: response.status, provider_error: data.error ?? data }); | ||
| } | ||
| const choices = data.choices; | ||
| const usage = data.usage; | ||
| return { | ||
| content: choices?.[0]?.message?.content ?? "", | ||
| role: "assistant", | ||
| model: data.model, | ||
| usage: usage ? { | ||
| promptTokens: usage.prompt_tokens ?? 0, | ||
| completionTokens: usage.completion_tokens ?? 0, | ||
| totalTokens: usage.total_tokens ?? 0, | ||
| } : undefined, | ||
| }; | ||
| } | ||
| async function callAnthropic(cfg, messages, model, maxTokens, temperature, system) { | ||
| const body = { model, messages, max_tokens: maxTokens }; | ||
| if (system) | ||
| body.system = system; | ||
| if (temperature !== undefined) | ||
| body.temperature = temperature; | ||
| let response; | ||
| try { | ||
| response = await fetch(`${cfg.baseUrl}/messages`, { | ||
| method: "POST", | ||
| headers: { | ||
| "Content-Type": "application/json", | ||
| "x-api-key": cfg.apiKey, | ||
| "anthropic-version": "2023-06-01", | ||
| }, | ||
| body: JSON.stringify(body), | ||
| }); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| const raw = await response.text(); | ||
| let data; | ||
| try { | ||
| data = raw ? JSON.parse(raw) : {}; | ||
| } | ||
| catch { | ||
| data = { raw }; | ||
| } | ||
| if (!response.ok) { | ||
| return errorReturn(`AI provider returned HTTP ${response.status}.`, response.status === 429 ? "rate_limited" : "provider_error", { status: response.status, provider_error: data.error ?? data }); | ||
| } | ||
| const content = data.content?.[0]?.text ?? ""; | ||
| const usage = data.usage; | ||
| return { | ||
| content, | ||
| role: "assistant", | ||
| model: data.model, | ||
| usage: usage ? { | ||
| promptTokens: usage.input_tokens ?? 0, | ||
| completionTokens: usage.output_tokens ?? 0, | ||
| totalTokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0), | ||
| } : undefined, | ||
| stopReason: data.stop_reason, | ||
| }; | ||
| } | ||
| async function doChat(slug, messagesInput, opts) { | ||
| const cfg = await resolveProvider(slug); | ||
| if ("error" in cfg) | ||
| return cfg; | ||
| const model = String(opts.model ?? cfg.defaultModel); | ||
| const maxTokens = opts.maxTokens != null ? Number(opts.maxTokens) : cfg.defaultMaxTokens; | ||
| const temperature = opts.temperature != null ? Number(opts.temperature) : undefined; | ||
| const system = opts.system != null ? String(opts.system) : undefined; | ||
| let msgs; | ||
| if (typeof messagesInput === "string") { | ||
| msgs = [{ role: "user", content: messagesInput }]; | ||
| } | ||
| else if (Array.isArray(messagesInput)) { | ||
| msgs = messagesInput; | ||
| } | ||
| else { | ||
| msgs = [{ role: "user", content: String(messagesInput) }]; | ||
| } | ||
| if (cfg.provider === "anthropic") { | ||
| return callAnthropic(cfg, msgs, model, maxTokens, temperature, system); | ||
| } | ||
| return callOpenAI(cfg, msgs, model, maxTokens, temperature, system); | ||
| } | ||
| // ── Handlers ──────────────────────────────────────────────────────────── | ||
| const configure = async (args) => { | ||
| // `configure` validates that a given credential slug exists and echoes the | ||
| // resolved provider/model. It is NOT required to call this before chat — | ||
| // handlers resolve per-call — but it gives scripts a cheap sanity check. | ||
| const slug = String(args[0] ?? ""); | ||
| const cfg = await resolveProvider(slug); | ||
| if ("error" in cfg) | ||
| return cfg; | ||
| return { | ||
| credential: slug, | ||
| provider: cfg.provider, | ||
| baseUrl: cfg.baseUrl, | ||
| defaultModel: cfg.defaultModel, | ||
| defaultMaxTokens: cfg.defaultMaxTokens, | ||
| }; | ||
| }; | ||
| const chat = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const messagesInput = args[1]; | ||
| const opts = (args[2] && typeof args[2] === "object" ? args[2] : {}); | ||
| return (await doChat(slug, messagesInput, opts)); | ||
| }; | ||
| const complete = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const prompt = String(args[1] ?? ""); | ||
| const opts = (args[2] && typeof args[2] === "object" ? args[2] : {}); | ||
| const result = await doChat(slug, prompt, opts); | ||
| if ("error" in result) | ||
| return result; | ||
| return result.content ?? ""; | ||
| }; | ||
| const summarize = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const text = String(args[1] ?? ""); | ||
| const opts = (args[2] && typeof args[2] === "object" ? args[2] : {}); | ||
| const hint = opts.maxLength ? `in ${Number(opts.maxLength)} words or less` : "concisely"; | ||
| const prompt = `Summarize the following text ${hint}:\n\n${text}`; | ||
| return (await complete([slug, prompt, opts])); | ||
| }; | ||
| const extract = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const text = String(args[1] ?? ""); | ||
| const fields = Array.isArray(args[2]) | ||
| ? args[2].map(String) | ||
| : String(args[2] ?? "").split(",").map((s) => s.trim()).filter(Boolean); | ||
| const opts = (args[3] && typeof args[3] === "object" ? args[3] : {}); | ||
| if (fields.length === 0) | ||
| return errorReturn("`fields` is required.", "fields_missing"); | ||
| const prompt = `Extract the following fields from the text below and return ONLY a valid JSON object with these keys: ${fields.join(", ")}.\n\nText:\n${text}\n\nJSON:`; | ||
| const result = await complete([slug, prompt, { ...opts, temperature: 0 }]); | ||
| if (typeof result !== "string") | ||
| return result; | ||
| try { | ||
| const match = result.match(/\{[\s\S]*\}/); | ||
| return match ? JSON.parse(match[0]) : result; | ||
| } | ||
| catch { | ||
| return result; | ||
| } | ||
| }; | ||
| const classify = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const text = String(args[1] ?? ""); | ||
| const categories = Array.isArray(args[2]) | ||
| ? args[2].map(String) | ||
| : String(args[2] ?? "").split(",").map((s) => s.trim()).filter(Boolean); | ||
| const opts = (args[3] && typeof args[3] === "object" ? args[3] : {}); | ||
| if (categories.length < 2) | ||
| return errorReturn("At least 2 categories are required.", "categories_missing"); | ||
| const prompt = `Classify the following text into exactly one of these categories: ${categories.join(", ")}.\n\nText: ${text}\n\nRespond with ONLY the category name, nothing else.`; | ||
| const result = await complete([slug, prompt, { ...opts, temperature: 0 }]); | ||
| if (typeof result !== "string") | ||
| return result; | ||
| return result.trim(); | ||
| }; | ||
| const translate = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const text = String(args[1] ?? ""); | ||
| const targetLang = String(args[2] ?? "English"); | ||
| const opts = (args[3] && typeof args[3] === "object" ? args[3] : {}); | ||
| const prompt = `Translate the following text to ${targetLang}. Return ONLY the translation, nothing else.\n\n${text}`; | ||
| return (await complete([slug, prompt, opts])); | ||
| }; | ||
| const sentiment = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const text = String(args[1] ?? ""); | ||
| const opts = (args[2] && typeof args[2] === "object" ? args[2] : {}); | ||
| const prompt = `Analyze the sentiment of the following text. Respond with ONLY a JSON object: {"sentiment": "positive"|"negative"|"neutral", "score": 0.0-1.0, "confidence": 0.0-1.0}\n\nText: ${text}\n\nJSON:`; | ||
| const result = await complete([slug, prompt, { ...opts, temperature: 0 }]); | ||
| if (typeof result !== "string") | ||
| return result; | ||
| try { | ||
| const match = result.match(/\{[\s\S]*\}/); | ||
| return match ? JSON.parse(match[0]) : { sentiment: "neutral", score: 0.5 }; | ||
| } | ||
| catch { | ||
| return { sentiment: "neutral", score: 0.5, raw: result }; | ||
| } | ||
| }; | ||
| const generateJson = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const prompt = String(args[1] ?? ""); | ||
| const schema = args[2]; | ||
| const opts = (args[3] && typeof args[3] === "object" ? args[3] : {}); | ||
| let fullPrompt = `${prompt}\n\nRespond with ONLY a valid JSON object`; | ||
| if (schema) | ||
| fullPrompt += ` matching this structure: ${JSON.stringify(schema)}`; | ||
| fullPrompt += ". No explanations, no markdown, just JSON."; | ||
| const result = await complete([slug, fullPrompt, { ...opts, temperature: 0 }]); | ||
| if (typeof result !== "string") | ||
| return result; | ||
| try { | ||
| const match = result.match(/\{[\s\S]*\}|\[[\s\S]*\]/); | ||
| return match ? JSON.parse(match[0]) : result; | ||
| } | ||
| catch { | ||
| return result; | ||
| } | ||
| }; | ||
| const embedding = async (args) => { | ||
| const slug = String(args[0] ?? ""); | ||
| const input = args[1]; | ||
| const opts = (args[2] && typeof args[2] === "object" ? args[2] : {}); | ||
| const cfg = await resolveProvider(slug); | ||
| if ("error" in cfg) | ||
| return cfg; | ||
| const model = String(opts.model ?? "text-embedding-3-small"); | ||
| const texts = Array.isArray(input) ? input.map(String) : [String(input)]; | ||
| let response; | ||
| try { | ||
| response = await fetch(`${cfg.baseUrl}/embeddings`, { | ||
| method: "POST", | ||
| headers: { "Content-Type": "application/json", Authorization: `Bearer ${cfg.apiKey}` }, | ||
| body: JSON.stringify({ model, input: texts }), | ||
| }); | ||
| } | ||
| catch (e) { | ||
| return errorReturn(e instanceof Error ? e.message : String(e), "transport"); | ||
| } | ||
| const raw = await response.text(); | ||
| let data; | ||
| try { | ||
| data = raw ? JSON.parse(raw) : {}; | ||
| } | ||
| catch { | ||
| data = { raw }; | ||
| } | ||
| if (!response.ok) { | ||
| return errorReturn(`Embeddings provider returned HTTP ${response.status}.`, response.status === 429 ? "rate_limited" : "provider_error", { status: response.status, provider_error: data.error ?? data }); | ||
| } | ||
| const embeds = data.data?.map((d) => d.embedding) ?? []; | ||
| return texts.length === 1 ? (embeds[0] ?? []) : embeds; | ||
| }; | ||
| // ── Exports ───────────────────────────────────────────────────────────── | ||
| export const AiFunctions = { | ||
| configure, chat, complete, summarize, extract, classify, translate, sentiment, generateJson, embedding, | ||
| }; | ||
| // ── Credential types ──────────────────────────────────────────────────── | ||
| export const AiCredentialTypes = [ | ||
| { | ||
| slug: CREDENTIAL_TYPE, | ||
| title: "AI Provider (generic)", | ||
| icon: "sparkles", | ||
| fields: [ | ||
| { | ||
| name: "provider", | ||
| title: "Provider", | ||
| type: "text", | ||
| required: true, | ||
| placeholder: "openai", | ||
| description: "One of: `openai`, `anthropic`, `openrouter`, or a custom name. Determines the wire protocol.", | ||
| }, | ||
| { | ||
| name: "api_key", | ||
| title: "API Key", | ||
| type: "password", | ||
| required: true, | ||
| description: "Provider API key. Stored encrypted.", | ||
| }, | ||
| { | ||
| name: "base_url", | ||
| title: "Base URL", | ||
| type: "text", | ||
| required: false, | ||
| placeholder: "https://api.openai.com/v1", | ||
| description: "Override the provider endpoint. Required for custom / self-hosted OpenAI-compatible servers.", | ||
| }, | ||
| { | ||
| name: "default_model", | ||
| title: "Default model", | ||
| type: "text", | ||
| required: false, | ||
| placeholder: "gpt-4o-mini", | ||
| description: "Used when a handler is called without an explicit `model`.", | ||
| }, | ||
| { | ||
| name: "default_max_tokens", | ||
| title: "Default max tokens", | ||
| type: "number", | ||
| required: false, | ||
| description: "Default completion length. Default: 1024.", | ||
| }, | ||
| ], | ||
| }, | ||
| ]; | ||
| // ── Function metadata ─────────────────────────────────────────────────── | ||
| const credentialParam = { | ||
| name: "credential", | ||
| title: "Credential", | ||
| description: "Slug of a saved `ai_provider` credential.", | ||
| dataType: "string", | ||
| formInputType: "resource", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "my_ai_provider", | ||
| resource: { | ||
| type: "credential", | ||
| listFn: "credential.list", | ||
| modes: ["list", "expression"], | ||
| searchable: true, | ||
| filter: { type: CREDENTIAL_TYPE }, | ||
| }, | ||
| }; | ||
| const commonErrors = { | ||
| credential_not_found: "No credential with that slug exists in the vault.", | ||
| api_key_missing: "The credential exists but has no `api_key` field.", | ||
| base_url_missing: "The credential has no `base_url` and the provider is unrecognized.", | ||
| transport: "Network failure calling the AI provider.", | ||
| provider_error: "The provider returned an error — see `provider_error` for details.", | ||
| rate_limited: "You hit a rate limit. Slow down or upgrade your plan.", | ||
| }; | ||
| const optionsParam = { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n model : default from credential\n maxTokens : default from credential (1024)\n temperature : 0–1\n system : system prompt string", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| advanced: true, | ||
| }; | ||
| export const AiFunctionMetadata = { | ||
| configure: { | ||
| title: "Validate AI credential", | ||
| summary: "Resolve a credential slug and echo its provider / defaults", | ||
| description: "Returns the resolved provider, base URL, default model, and default max tokens for a credential. Does not make a network call. Useful as a sanity check at the top of a script.", | ||
| group: "setup", | ||
| action: "read", | ||
| icon: "settings", | ||
| capability: "manage_options", | ||
| sideEffects: [], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["ai", "configure", "credential"], | ||
| parameters: [credentialParam], | ||
| returnType: "object", | ||
| returnDescription: "{ credential, provider, baseUrl, defaultModel, defaultMaxTokens }", | ||
| errors: commonErrors, | ||
| example: 'ai.configure "my_ai"', | ||
| }, | ||
| chat: { | ||
| title: "Chat completion", | ||
| summary: "Send a chat message and get a structured response", | ||
| description: "Sends `messages` to the credential's provider. Returns `{content, role, model, usage}`. Pass either a string (wrapped as a single user message) or an array of `{role, content}` objects.", | ||
| group: "chat", | ||
| action: "write", | ||
| icon: "message-square", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["ai", "chat", "llm", "completion"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "messages", | ||
| title: "Messages", | ||
| description: "String (single user prompt) or array of {role, content}.", | ||
| dataType: "any", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 6, | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ content, role, model, usage?: {promptTokens, completionTokens, totalTokens} }", | ||
| errors: commonErrors, | ||
| examples: [ | ||
| { | ||
| title: "Ask a quick question", | ||
| code: 'ai.chat "my_ai" "Explain quantum computing in one line."', | ||
| }, | ||
| { | ||
| title: "With a system prompt", | ||
| code: 'ai.chat "my_ai" [{role: "user", content: "Summarize {{ post.content }}"}] {system: "You are concise.", maxTokens: 80}', | ||
| }, | ||
| ], | ||
| example: 'ai.chat "my_ai" "Hi"', | ||
| }, | ||
| complete: { | ||
| title: "Text completion", | ||
| summary: "Run a chat request and return just the text", | ||
| description: "Same as `chat` but unwraps the response and returns the plain text `content`.", | ||
| group: "chat", | ||
| action: "write", | ||
| icon: "type", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["ai", "complete", "text"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "prompt", | ||
| title: "Prompt", | ||
| description: "The user prompt to send.", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 4, | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "string", | ||
| returnDescription: "The generated text (or error object on failure).", | ||
| errors: commonErrors, | ||
| example: 'ai.complete "my_ai" "Write a haiku about automation."', | ||
| }, | ||
| summarize: { | ||
| title: "Summarize text", | ||
| summary: "Produce a concise summary of a piece of text", | ||
| description: "Wraps `complete` with a summarization prompt. Pass `maxLength` (in words) via options.", | ||
| group: "helpers", | ||
| action: "write", | ||
| icon: "list", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: false, | ||
| since: "1.0.0", | ||
| tags: ["ai", "summarize"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "text", | ||
| title: "Text", | ||
| description: "The source text to summarize.", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 6, | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n maxLength : target word count\n model / maxTokens / temperature", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "string", | ||
| returnDescription: "The summary text.", | ||
| errors: commonErrors, | ||
| example: 'ai.summarize "my_ai" {{ post.content }} {maxLength: 50}', | ||
| }, | ||
| extract: { | ||
| title: "Extract structured fields", | ||
| summary: "Pull named fields out of text as a JSON object", | ||
| description: "Asks the model to return a JSON object with the given keys. Temperature is forced to 0.", | ||
| group: "helpers", | ||
| action: "write", | ||
| icon: "box-select", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["ai", "extract", "json"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "text", | ||
| title: "Text", | ||
| description: "Unstructured source text.", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 6, | ||
| }, | ||
| { | ||
| name: "fields", | ||
| title: "Fields", | ||
| description: "Array of field names (or comma-separated string) to extract.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 2, | ||
| placeholder: '["name", "email", "company"]', | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Parsed JSON object with the requested keys, or raw text on parse failure.", | ||
| errors: { ...commonErrors, fields_missing: "You must pass at least one field name." }, | ||
| example: 'ai.extract "my_ai" "John Smith, 30, NYC" ["name","age","city"]', | ||
| }, | ||
| classify: { | ||
| title: "Classify into categories", | ||
| summary: "Pick exactly one category for a piece of text", | ||
| description: "Returns the category label chosen by the model. Temperature is forced to 0.", | ||
| group: "helpers", | ||
| action: "write", | ||
| icon: "tag", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["ai", "classify"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "text", | ||
| title: "Text", | ||
| description: "Text to classify.", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 4, | ||
| }, | ||
| { | ||
| name: "categories", | ||
| title: "Categories", | ||
| description: "Array (at least 2) of category labels to choose from.", | ||
| dataType: "array", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 2, | ||
| placeholder: '["billing","support","sales","spam"]', | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "string", | ||
| returnDescription: "The selected category label.", | ||
| errors: { ...commonErrors, categories_missing: "At least 2 categories are required." }, | ||
| example: 'ai.classify "my_ai" "Love this product!" ["positive","negative","neutral"]', | ||
| }, | ||
| translate: { | ||
| title: "Translate text", | ||
| summary: "Translate a string to a target language", | ||
| description: "Wraps `complete` with a translation prompt. Pass the language name (e.g. 'Spanish') as the third arg.", | ||
| group: "helpers", | ||
| action: "write", | ||
| icon: "languages", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["ai", "translate"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "text", | ||
| title: "Text", | ||
| description: "Text to translate.", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 4, | ||
| }, | ||
| { | ||
| name: "targetLang", | ||
| title: "Target language", | ||
| description: "Human-readable target language (e.g. 'Spanish', 'French').", | ||
| dataType: "string", | ||
| formInputType: "text", | ||
| required: true, | ||
| allowExpression: true, | ||
| placeholder: "Spanish", | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "string", | ||
| returnDescription: "The translated text.", | ||
| errors: commonErrors, | ||
| example: 'ai.translate "my_ai" "Hello world" "French"', | ||
| }, | ||
| sentiment: { | ||
| title: "Analyze sentiment", | ||
| summary: "Classify text as positive / negative / neutral with a score", | ||
| description: "Returns `{sentiment, score, confidence}`. Temperature is forced to 0.", | ||
| group: "helpers", | ||
| action: "write", | ||
| icon: "smile", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["ai", "sentiment"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "text", | ||
| title: "Text", | ||
| description: "Text to analyze.", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 4, | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ sentiment: 'positive'|'negative'|'neutral', score: 0..1, confidence: 0..1 }", | ||
| errors: commonErrors, | ||
| example: 'ai.sentiment "my_ai" "This is amazing!"', | ||
| }, | ||
| generateJson: { | ||
| title: "Generate structured JSON", | ||
| summary: "Ask the model to produce JSON matching an optional schema", | ||
| description: "Returns the parsed JSON object (or raw text on parse failure). Temperature is forced to 0.", | ||
| group: "helpers", | ||
| action: "write", | ||
| icon: "braces", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["ai", "json", "schema"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "prompt", | ||
| title: "Prompt", | ||
| description: "Describe what JSON you want.", | ||
| dataType: "string", | ||
| formInputType: "textarea", | ||
| required: true, | ||
| allowExpression: true, | ||
| rows: 4, | ||
| }, | ||
| { | ||
| name: "schema", | ||
| title: "Schema", | ||
| description: "Optional example object that the output should mirror.", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 4, | ||
| }, | ||
| optionsParam, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "Parsed JSON (or raw text on parse failure).", | ||
| errors: commonErrors, | ||
| example: 'ai.generateJson "my_ai" "Make a fake user" {name: "string", email: "string"}', | ||
| }, | ||
| embedding: { | ||
| title: "Create embedding", | ||
| summary: "Get a vector embedding for text(s)", | ||
| description: "Calls `/embeddings` against the credential's provider. Expects an OpenAI-style embeddings endpoint — works for OpenAI, OpenRouter, and most compatible APIs. Anthropic currently has no hosted embeddings endpoint.", | ||
| group: "chat", | ||
| action: "write", | ||
| icon: "binary", | ||
| capability: "manage_options", | ||
| sideEffects: ["makes_http_call", "charges_money"], | ||
| idempotent: true, | ||
| since: "1.0.0", | ||
| tags: ["ai", "embedding", "vector"], | ||
| parameters: [ | ||
| credentialParam, | ||
| { | ||
| name: "input", | ||
| title: "Input", | ||
| description: "A string or array of strings to embed.", | ||
| dataType: "any", | ||
| formInputType: "json", | ||
| required: true, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| }, | ||
| { | ||
| name: "options", | ||
| title: "Options", | ||
| description: "Recognized keys:\n model : default 'text-embedding-3-small'", | ||
| dataType: "object", | ||
| formInputType: "json", | ||
| required: false, | ||
| allowExpression: true, | ||
| language: "json", | ||
| rows: 3, | ||
| advanced: true, | ||
| }, | ||
| ], | ||
| returnType: "any", | ||
| returnDescription: "A vector (for a single string) or array of vectors (for multiple inputs).", | ||
| errors: commonErrors, | ||
| example: 'ai.embedding "my_ai" "Hello world"', | ||
| }, | ||
| }; | ||
| export const AiModuleMetadata = { | ||
| slug: "ai", | ||
| title: "AI (generic LLM)", | ||
| summary: "Provider-agnostic LLM helpers: chat, complete, summarize, extract, classify, translate, sentiment, JSON, embeddings", | ||
| description: "A thin provider-agnostic wrapper. Point a single `ai_provider` credential at OpenAI, Anthropic, OpenRouter, or any OpenAI-compatible endpoint and every handler just works. Use the dedicated `openai` / `anthropic` modules when you need vendor-specific features (images, audio, vision, tool use).", | ||
| category: "ai", | ||
| icon: "icon.svg", | ||
| color: "#7C3AED", | ||
| version: "0.2.0", | ||
| docsUrl: "https://docs.robinpath.com/modules/ai", | ||
| status: "stable", | ||
| requires: [], | ||
| minNodeVersion: "18.0.0", | ||
| credentialsType: CREDENTIAL_TYPE, | ||
| operationGroups: { | ||
| setup: { title: "Setup", description: "Credential validation.", order: 1 }, | ||
| chat: { title: "Chat & Embeddings", description: "Core LLM calls.", order: 2 }, | ||
| helpers: { title: "Helpers", description: "Sugar for common tasks.", order: 3 }, | ||
| }, | ||
| methods: Object.keys(AiFunctions), | ||
| }; | ||
| //# sourceMappingURL=ai.js.map |
| {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"} |
| import type { ModuleAdapter } from "@robinpath/core"; | ||
| declare const AiModule: ModuleAdapter; | ||
| export default AiModule; | ||
| export { AiModule }; | ||
| export { AiFunctions, AiFunctionMetadata, AiModuleMetadata, AiCredentialTypes, configureAi, } from "./ai.js"; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,QAAQ,EAAE,aAQf,CAAC;AAEF,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC"} |
| import { AiFunctions, AiFunctionMetadata, AiModuleMetadata, AiCredentialTypes, configureAi, } from "./ai.js"; | ||
| const AiModule = { | ||
| name: "ai", | ||
| functions: AiFunctions, | ||
| functionMetadata: AiFunctionMetadata, | ||
| moduleMetadata: AiModuleMetadata, | ||
| credentialTypes: AiCredentialTypes, | ||
| configure: configureAi, | ||
| global: false, | ||
| }; | ||
| export default AiModule; | ||
| export { AiModule }; | ||
| export { AiFunctions, AiFunctionMetadata, AiModuleMetadata, AiCredentialTypes, configureAi, } from "./ai.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,MAAM,QAAQ,GAAkB;IAC9B,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC"} |
+17
-7
| { | ||
| "name": "@robinpath/ai", | ||
| "version": "0.1.2", | ||
| "description": "LLM integration for OpenAI, Anthropic, and compatible APIs", | ||
| "version": "0.3.0", | ||
| "description": "Provider-agnostic LLM helpers (OpenAI, Anthropic, OpenRouter, or any OpenAI-compatible endpoint). Uses the encrypted credential vault.", | ||
| "publishConfig": { | ||
@@ -25,6 +25,6 @@ "access": "public" | ||
| "peerDependencies": { | ||
| "@robinpath/core": ">=0.20.0" | ||
| "@robinpath/core": ">=0.40.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@robinpath/core": "^0.30.1", | ||
| "@robinpath/core": "^0.40.0", | ||
| "tsx": "^4.19.0", | ||
@@ -34,3 +34,6 @@ "typescript": "^5.6.0" | ||
| "keywords": [ | ||
| "ai" | ||
| "ai", | ||
| "llm", | ||
| "openai", | ||
| "anthropic" | ||
| ], | ||
@@ -41,5 +44,12 @@ "license": "MIT", | ||
| "type": "integration", | ||
| "auth": "api-key", | ||
| "functionCount": 10 | ||
| "auth": "credential-vault", | ||
| "credentialType": "ai_provider", | ||
| "functionCount": 10, | ||
| "language": "nodejs", | ||
| "platforms": [ | ||
| "cloud", | ||
| "cli", | ||
| "desktop" | ||
| ] | ||
| } | ||
| } |
+1
-1
@@ -22,3 +22,3 @@ # @robinpath/ai | ||
| ```bash | ||
| npm install @robinpath/ai | ||
| robinpath add @robinpath/ai | ||
| ``` | ||
@@ -25,0 +25,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
65681
1485.73%10
400%853
Infinity%2
100%4
100%