UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

43 lines (42 loc) 1.59 kB
import { createAnthropic } from '@ai-sdk/anthropic'; import { createOpenAI } from '@ai-sdk/openai'; import { ServiceUnavailableError } from '@directus/errors'; import { convertToModelMessages, stepCountIs, streamText, } from 'ai'; import { SYSTEM_PROMPT } from '../constants/system-prompt.js'; export const createUiStream = (messages, { provider, model, tools, apiKeys, systemPrompt, onUsage }) => { if (apiKeys[provider] === null) { throw new ServiceUnavailableError({ service: provider, reason: 'No API key configured for LLM provider' }); } let modelProvider; if (provider === 'openai') { modelProvider = createOpenAI({ apiKey: apiKeys.openai }); } else if (provider === 'anthropic') { modelProvider = createAnthropic({ apiKey: apiKeys.anthropic }); } else { throw new Error(`Unexpected provider given: "${provider}"`); } systemPrompt ||= SYSTEM_PROMPT; const stream = streamText({ system: systemPrompt, model: modelProvider(model), messages: convertToModelMessages(messages), stopWhen: [stepCountIs(10)], providerOptions: { openai: { reasoningSummary: 'auto', store: false, include: ['reasoning.encrypted_content'], }, }, tools, onFinish({ usage }) { if (onUsage) { const { inputTokens, outputTokens, totalTokens } = usage; onUsage({ inputTokens, outputTokens, totalTokens }); } }, }); return stream; };