@@ -4,7 +4,12 @@ import { generateText, streamText } from 'ai';
44
55import { init , type LDClient , type LDContext } from '@launchdarkly/node-server-sdk' ;
66import { initAi } from '@launchdarkly/server-sdk-ai' ;
7- import { VercelProvider } from '@launchdarkly/server-sdk-ai-vercel' ;
7+ import {
8+ convertMessagesToVercel ,
9+ getAIMetricsFromResponse ,
10+ getAIMetricsFromStream ,
11+ VercelRunnerFactory ,
12+ } from '@launchdarkly/server-sdk-ai-vercel' ;
813
914// Environment variables
1015const sdkKey = process . env . LAUNCHDARKLY_SDK_KEY ?? '' ;
@@ -59,24 +64,22 @@ async function main() {
5964
6065 console . log ( 'Using model:' , aiConfig . model ?. name ) ;
6166
67+ const model = openai ( aiConfig . model ?. name || 'gpt-4' ) ;
68+ const parameters = VercelRunnerFactory . mapParameters ( aiConfig . model ?. parameters ) ;
69+
6270 try {
6371 const userMessage = {
6472 role : 'user' as const ,
6573 content : 'What can you help me with?' ,
6674 } ;
6775
68- // Example of using generateText (non-streaming)
6976 console . log ( '\n*** Generating text:' ) ;
7077
71- // Convert config to Vercel AI SDK format
72- const vercelConfig = VercelProvider . toVercelAISDK ( aiConfig , openai , {
73- nonInterpolatedMessages : [ userMessage ] ,
74- } ) ;
78+ const messages = convertMessagesToVercel ( [ ...( aiConfig . messages || [ ] ) , userMessage ] ) ;
7579
76- // Call the model and track metrics for the ai config
7780 const tracker = aiConfig . createTracker ! ( ) ;
78- const result = await tracker . trackMetricsOf ( VercelProvider . getAIMetricsFromResponse , ( ) =>
79- generateText ( { ...vercelConfig , messages : vercelConfig . messages ?? [ ] } ) ,
81+ const result = await tracker . trackMetricsOf ( getAIMetricsFromResponse , ( ) =>
82+ generateText ( { ...parameters , model , messages } ) ,
8083 ) ;
8184
8285 console . log ( 'Response:' , result . text ) ;
@@ -91,21 +94,16 @@ async function main() {
9194 content : 'Count from 1 to 5.' ,
9295 } ;
9396
94- // Example of using generateText (non-streaming)
9597 console . log ( '\n*** Streaming text:' ) ;
96- // Convert config to Vercel AI SDK format
97- const vercelConfig = VercelProvider . toVercelAISDK ( aiConfig , openai , {
98- nonInterpolatedMessages : [ userMessage ] ,
99- } ) ;
10098
101- // Stream is returned immediately (synchronously), metrics tracked in background
99+ const messages = convertMessagesToVercel ( [ ...( aiConfig . messages || [ ] ) , userMessage ] ) ;
100+
102101 const streamTracker = aiConfig . createTracker ! ( ) ;
103102 const streamResult = streamTracker . trackStreamMetricsOf (
104- ( ) => streamText ( { ...vercelConfig , messages : vercelConfig . messages ?? [ ] } ) ,
105- VercelProvider . getAIMetricsFromStream ,
103+ ( ) => streamText ( { ...parameters , model , messages } ) ,
104+ getAIMetricsFromStream ,
106105 ) ;
107106
108- // Consume the stream immediately - no await needed before this!
109107 for await ( const textPart of streamResult . textStream ) {
110108 process . stdout . write ( textPart ) ;
111109 }
0 commit comments