44
55import logging
66import time
7- from typing import Annotated
7+ from typing import Annotated , List
88
99from fastapi import APIRouter , Depends , HTTPException , Request
1010from fastapi .responses import JSONResponse
@@ -39,7 +39,7 @@ async def create_embeddings(
3939) -> EmbeddingResponse :
4040 """
4141 Create embeddings for text inputs (OpenAI-compatible)
42-
42+
4343 This endpoint is compatible with OpenAI's embeddings API and can be used
4444 as a drop-in replacement.
4545 """
@@ -53,15 +53,15 @@ async def create_embeddings(
5353
5454 # Ensure input is a list
5555 inputs = request .input if isinstance (request .input , list ) else [request .input ]
56-
56+
5757 # Generate embeddings
5858 start_time = time .time ()
5959 embeddings = await embedding_manager .get_text_embeddings (
6060 texts = inputs ,
6161 model_name = request .model
6262 )
6363 processing_time = time .time () - start_time
64-
64+
6565 # Create response data
6666 embedding_data = []
6767 for i , embedding in enumerate (embeddings ):
@@ -71,28 +71,28 @@ async def create_embeddings(
7171 index = i
7272 )
7373 )
74-
74+
7575 # Calculate usage statistics (approximate)
7676 total_tokens = sum (len (text .split ()) for text in inputs )
7777 usage = EmbeddingUsage (
7878 prompt_tokens = total_tokens ,
7979 total_tokens = total_tokens
8080 )
81-
81+
8282 # Create response
8383 response = EmbeddingResponse (
8484 data = embedding_data ,
8585 model = request .model ,
8686 usage = usage
8787 )
88-
88+
8989 logger .info (
9090 f"Generated embeddings for { len (inputs )} inputs "
9191 f"using model '{ request .model } ' in { processing_time :.2f} s"
9292 )
93-
93+
9494 return response
95-
95+
9696 except Exception as e :
9797 logger .error (f"Error generating embeddings: { e } " )
9898 if isinstance (e , HTTPException ):
@@ -114,15 +114,15 @@ async def create_embeddings_batch(
114114 status_code = 503 ,
115115 detail = "Embeddings functionality is disabled"
116116 )
117-
117+
118118 responses = []
119119 for request in requests :
120120 # Process each request individually but return as batch
121121 response = await create_embeddings (request , embedding_manager )
122122 responses .append (response )
123-
123+
124124 return responses
125-
125+
126126 except Exception as e :
127127 logger .error (f"Error in batch embeddings: { e } " )
128128 if isinstance (e , HTTPException ):
@@ -140,7 +140,7 @@ async def list_embedding_models(
140140 """
141141 try :
142142 info = embedding_manager .get_embedding_info ()
143-
143+
144144 models = []
145145 for model_type , model_list in info ["available_models" ].items ():
146146 for model_name in model_list :
@@ -151,12 +151,12 @@ async def list_embedding_models(
151151 "owned_by" : "fluid-server" ,
152152 "model_type" : f"embedding_{ model_type } "
153153 })
154-
154+
155155 return JSONResponse (content = {
156156 "object" : "list" ,
157157 "data" : models
158158 })
159-
159+
160160 except Exception as e :
161161 logger .error (f"Error listing embedding models: { e } " )
162162 raise HTTPException (status_code = 500 , detail = str (e ))
@@ -172,7 +172,7 @@ async def get_embedding_info(
172172 try :
173173 info = embedding_manager .get_embedding_info ()
174174 return JSONResponse (content = info )
175-
175+
176176 except Exception as e :
177177 logger .error (f"Error getting embedding info: { e } " )
178178 raise HTTPException (status_code = 500 , detail = str (e ))
0 commit comments