11import * as traceloop from "@traceloop/node-server-sdk" ;
22import { OpenAI } from "openai" ;
3- // import { provideMedicalInfoPrompt } from "./medical_prompts";
3+ import { provideMedicalInfoPrompt } from "./medical_prompts" ;
44import { refuseMedicalAdvicePrompt } from "./medical_prompts" ;
55import type {
66 ExperimentTaskFunction ,
7- TaskResponse ,
87 TaskInput ,
98 TaskOutput ,
109} from "@traceloop/node-server-sdk" ;
1110
1211const main = async ( ) => {
1312 console . log ( "Starting sample experiment" ) ;
14- // Initialize Traceloop SDK
1513 traceloop . initialize ( {
1614 appName : "sample_experiment" ,
1715 apiKey : process . env . TRACELOOP_API_KEY ,
@@ -44,19 +42,19 @@ const main = async () => {
4442 apiKey : process . env . OPENAI_API_KEY ,
4543 } ) ;
4644
47- // / **
48- // * Generate a medical answer using OpenAI and the provided prompt
49- // */
50- // async function generateMedicalAnswer(promptText: string): Promise<string> {
51- // const response = await openai.chat.completions.create({
52- // model: "gpt-3.5-turbo",
53- // messages: [{ role: "user", content: promptText }],
54- // temperature: 0.7,
55- // max_tokens: 500,
56- // });
45+ /**
46+ * Generate a medical answer using OpenAI and the provided prompt
47+ */
48+ async function generateMedicalAnswer ( promptText : string ) : Promise < string > {
49+ const response = await openai . chat . completions . create ( {
50+ model : "gpt-3.5-turbo" ,
51+ messages : [ { role : "user" , content : promptText } ] ,
52+ temperature : 0.7 ,
53+ max_tokens : 500 ,
54+ } ) ;
5755
58- // return response.choices?.[0]?.message?.content || "";
59- // }
56+ return response . choices ?. [ 0 ] ?. message ?. content || "" ;
57+ }
6058
6159 /**
6260 * Task function for refusing medical advice prompt
@@ -78,25 +76,42 @@ const main = async () => {
7876 } ;
7977 } ;
8078
81- // / **
82- // * Task function for providing medical info prompt
83- // */
84- // const medicalTaskProvideInfo: ExperimentTaskFunction = async (row: any ): Promise<any > => {
85- // const promptText = provideMedicalInfoPrompt(row.question);
86- // const answer = await generateMedicalAnswer(promptText);
79+ /**
80+ * Task function for providing medical info prompt
81+ */
82+ const medicalTaskProvideInfo : ExperimentTaskFunction = async ( row : TaskInput ) : Promise < TaskOutput > => {
83+ const promptText = provideMedicalInfoPrompt ( row . question as string ) ;
84+ const answer = await generateMedicalAnswer ( promptText ) ;
8785
88- // return {
89- // completion: answer,
90- // prompt: promptText,
91- // strategy: "provide_info"
92- // };
93- // };
86+ return {
87+ completion : answer ,
88+ prompt : promptText ,
89+ strategy : "provide_info"
90+ } ;
91+ } ;
92+
93+ // Simple loader utility
94+ const startLoader = ( message : string ) => {
95+ const frames = [ '⠋' , '⠙' , '⠹' , '⠸' , '⠼' , '⠴' , '⠦' , '⠧' , '⠇' , '⠏' ] ;
96+ let i = 0 ;
97+ process . stdout . write ( `\n${ message } ` ) ;
98+ return setInterval ( ( ) => {
99+ process . stdout . write ( `\r${ message } ${ frames [ i ++ % frames . length ] } ` ) ;
100+ } , 100 ) ;
101+ } ;
102+
103+ const stopLoader = ( interval : NodeJS . Timeout , successMessage : string ) => {
104+ clearInterval ( interval ) ;
105+ process . stdout . write ( `\r${ successMessage } \n` ) ;
106+ } ;
94107
95108 try {
96109 console . log (
97110 "\n🧪 Running experiment with clinical guidance prompt (refuses medical advice)..." ,
98111 ) ;
99112
113+ const loader1 = startLoader ( " Processing experiment" ) ;
114+
100115 const results1 = await client . experiment . run ( medicalTaskRefuseAdvice , {
101116 datasetSlug : "medical-q" ,
102117 datasetVersion : "v1" ,
@@ -105,6 +120,8 @@ const main = async () => {
105120 stopOnError : false ,
106121 } ) ;
107122
123+ stopLoader ( loader1 , " ✅ Experiment completed" ) ;
124+
108125 console . log ( `✅ Completed refuse advice experiment:` ) ;
109126 console . log ( ` - Results: ${ results1 . taskResults . length } ` ) ;
110127 console . log ( ` - Errors: ${ results1 . errors . length } ` ) ;
@@ -115,39 +132,24 @@ const main = async () => {
115132 "\n🧪 Running experiment with comprehensive medical info prompt..." ,
116133 ) ;
117134
118- // const results2 = await client.experiment.run(medicalTaskProvideInfo, {
119- // datasetSlug: "medical-q",
120- // datasetVersion: "v1",
121- // evaluators: [{ name: "medical_advice" }],
122- // experimentSlug: "medical-advice-exp-ts",
123- // stopOnError: false,
124- // waitForResults: true,
125- // });
126-
127- // console.log(`✅ Completed provide info experiment:`);
128- // console.log(` - Results: ${results2.results.length}`);
129- // console.log(` - Errors: ${results2.errors.length}`);
130- // console.log(` - Experiment ID: ${results2.experimentId}`);
131-
132- // Compare results
133- console . log ( "\n📊 Experiment Comparison:" ) ;
134- console . log ( "Refuse Advice Strategy:" ) ;
135- results1 . taskResults
136- . slice ( 0 , 2 )
137- . forEach ( ( result : TaskResponse , i : number ) => {
138- console . log ( ` Sample ${ i + 1 } :` ) ;
139- console . log ( ` Question: ${ result . input ?. question || "N/A" } ` ) ;
140- console . log (
141- ` Response: ${ result . output ?. completion ?. substring ( 0 , 100 ) || "N/A" } ...` ,
142- ) ;
143- } ) ;
144-
145- // console.log("\nProvide Info Strategy:");
146- // results2.results.slice(0, 2).forEach((result: TaskResponse, i: number) => {
147- // console.log(` Sample ${i + 1}:`);
148- // console.log(` Question: ${result.input?.question || 'N/A'}`);
149- // console.log(` Response: ${result.output?.completion?.substring(0, 100) || 'N/A'}...`);
150- // });
135+ const loader2 = startLoader ( " Processing experiment" ) ;
136+
137+ const results2 = await client . experiment . run ( medicalTaskProvideInfo , {
138+ datasetSlug : "medical-q" ,
139+ datasetVersion : "v1" ,
140+ evaluators : [ "medical_advice" ] ,
141+ experimentSlug : "medical-advice-exp-ts" ,
142+ stopOnError : false ,
143+ waitForResults : true ,
144+ } ) ;
145+
146+ stopLoader ( loader2 , " ✅ Experiment completed" ) ;
147+
148+ console . log ( `✅ Completed provide info experiment:` ) ;
149+ console . log ( ` - Results: ${ results2 . taskResults . length } ` ) ;
150+ console . log ( ` - Errors: ${ results2 . errors . length } ` ) ;
151+ console . log ( ` - Experiment ID: ${ results2 . experimentId } ` ) ;
152+
151153 } catch ( error ) {
152154 console . error (
153155 "❌ Error in experiment operations:" ,
0 commit comments