All files / api/src/v1 embeddings.ts

100% Statements 36/36
100% Branches 8/8
100% Functions 0/0
100% Lines 36/36

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 521x 1x   1x 1x   1x               1x 9x 9x   9x 9x   2x 9x   7x 7x 7x 7x   7x 7x   7x 2x 2x 2x   7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 7x 9x  
import { RouterError } from '@api/errors/router';
import { tryTargets } from '@api/handlers/handler-utils';
import type { AppEnv } from '@api/types/hono';
import { error } from '@shared/console-logging';
import { Hono } from 'hono';
 
export const embeddingsRouter = new Hono<AppEnv>()
 
  /**
   * Handles the '/embeddings' API request by selecting the appropriate provider(s) and making the request to them.
   *
   * @throws Will throw an error if no provider options can be determined or if the request to the provider(s) fails.
   * @throws Will throw an 500 error if the handler fails due to some reasons
   */
  .post(async (c): Promise<Response> => {
    const saConfig = c.get('sa_config');
    const saRequestData = c.get('sa_request_data');
 
    try {
      const tryTargetsResponse = await tryTargets(c, saConfig, saRequestData);
 
      return tryTargetsResponse;
    } catch (err: unknown) {
      // Log detailed error information
      error('[EMBEDDINGS] Request failed:', {
        error: err instanceof Error ? err.message : String(err),
        stack: err instanceof Error ? err.stack : undefined,
      });
 
      let statusCode = 500;
      let errorMessage = 'Something went wrong';
 
      if (err instanceof RouterError) {
        statusCode = 400;
        errorMessage = err.message;
      }
 
      return new Response(
        JSON.stringify({
          status: 'failure',
          message: errorMessage,
        }),
        {
          status: statusCode,
          headers: {
            'content-type': 'application/json',
          },
        },
      );
    }
  });