(request: EmbeddingRequest)
| 177 | |
| 178 | @app.post("/v1/embeddings", response_model=EmbeddingResponse) |
| 179 | async def get_embeddings(request: EmbeddingRequest): |
| 180 | if isinstance(request.input, str): |
| 181 | embeddings = [embedding_model.encode(request.input)] |
| 182 | else: |
| 183 | embeddings = [embedding_model.encode(text) for text in request.input] |
| 184 | embeddings = [embedding.tolist() for embedding in embeddings] |
| 185 | |
| 186 | def num_tokens_from_string(string: str) -> int: |
| 187 | """ |
| 188 | Returns the number of tokens in a text string. |
| 189 | use cl100k_base tokenizer |
| 190 | """ |
| 191 | encoding = tiktoken.get_encoding('cl100k_base') |
| 192 | num_tokens = len(encoding.encode(string)) |
| 193 | return num_tokens |
| 194 | |
| 195 | response = { |
| 196 | "data": [ |
| 197 | { |
| 198 | "object": "embedding", |
| 199 | "embedding": embedding, |
| 200 | "index": index |
| 201 | } |
| 202 | for index, embedding in enumerate(embeddings) |
| 203 | ], |
| 204 | "model": request.model, |
| 205 | "object": "list", |
| 206 | "usage": CompletionUsage( |
| 207 | prompt_tokens=sum(len(text.split()) for text in request.input), |
| 208 | completion_tokens=0, |
| 209 | total_tokens=sum(num_tokens_from_string(text) for text in request.input), |
| 210 | ) |
| 211 | } |
| 212 | return response |
| 213 | |
| 214 | |
| 215 | @app.get("/v1/models", response_model=ModelList) |
nothing calls this directly
no test coverage detected