@@ -246,8 +246,17 @@ interface OllamaChatLine {
246246 response ?: string ;
247247}
248248
249- interface OllamaEmbeddingResponse {
249+ interface OllamaEmbedResponse {
250+ model : string ;
251+ embeddings : number [ ] [ ] ;
252+ total_duration ?: number ;
253+ load_duration ?: number ;
254+ prompt_eval_count ?: number ;
255+ }
256+
257+ export interface EmbeddingResult {
250258 embedding : number [ ] ;
259+ promptTokens : number ;
251260}
252261
253262export const OLLAMA_MODELS : ModelDescriptor [ ] = [ ] ;
@@ -297,18 +306,21 @@ export class OllamaClient {
297306 }
298307 }
299308
300- async generateEmbedding ( text : string , model = 'nomic-embed-text' ) : Promise < number [ ] > {
301- const response = await fetch ( `${ this . baseUrl } /api/embeddings ` , {
309+ async generateEmbedding ( text : string , model = 'nomic-embed-text' ) : Promise < EmbeddingResult > {
310+ const response = await fetch ( `${ this . baseUrl } /api/embed ` , {
302311 method : 'POST' ,
303312 headers : { 'Content-Type' : 'application/json' } ,
304- body : JSON . stringify ( { model, prompt : text } ) ,
313+ body : JSON . stringify ( { model, input : text } ) ,
305314 } ) ;
306315 if ( ! response . ok ) {
307316 throw new Error ( `generateEmbedding failed: ${ response . status } ${ response . statusText } ` ) ;
308317 }
309318
310- const payload = ( await response . json ( ) ) as OllamaEmbeddingResponse ;
311- return payload . embedding ;
319+ const payload = ( await response . json ( ) ) as OllamaEmbedResponse ;
320+ return {
321+ embedding : payload . embeddings [ 0 ] ,
322+ promptTokens : payload . prompt_eval_count ?? 0 ,
323+ } ;
312324 }
313325
314326 async generate ( input : GenerateInput ) : Promise < string > ;
@@ -385,6 +397,10 @@ export class OllamaAdapter {
385397 return this . client . listModels ( ) ;
386398 }
387399
400+ async embed ( text : string , model = 'nomic-embed-text' ) : Promise < EmbeddingResult > {
401+ return this . client . generateEmbedding ( text , model ) ;
402+ }
403+
388404 stream ( model : ModelDescriptor , context : Context , options ?: StreamOptions ) : AssistantMessageEventStream {
389405 const stream = new DefaultAssistantMessageEventStream ( ) ;
390406 const output = createAssistantMessage ( model ) ;
0 commit comments