Home / Class/ OpenAIClient Class — supabase Architecture

OpenAIClient Class — supabase Architecture

Architecture documentation for the OpenAIClient class in openAi.ts from the supabase codebase.

Entity Profile

Relationship Graph

Source Code

apps/docs/lib/openAi.ts lines 29–72

class OpenAIClient implements OpenAIClientInterface {
  static CONTENT_EMBEDDING_MODEL = 'text-embedding-ada-002'

  constructor(private client: OpenAI) {}

  async createContentEmbedding(
    text: string
  ): Promise<Result<EmbeddingWithTokens, ApiErrorGeneric>> {
    return await Result.tryCatchFlat(
      this.createContentEmbeddingImpl.bind(this),
      convertUnknownToApiError,
      text
    )
  }

  private async createContentEmbeddingImpl(
    text: string
  ): Promise<Result<EmbeddingWithTokens, ApiError<ModerationFlaggedDetails>>> {
    const query = text.trim()

    const moderationResponse = await this.client.moderations.create({ input: query })
    const [result] = moderationResponse.results
    if (result.flagged) {
      return Result.error(
        new InvalidRequestError('Content flagged as inappropriate', undefined, {
          flagged: true,
          categories: result.categories,
        })
      )
    }

    const embeddingsResponse = await this.client.embeddings.create({
      model: OpenAIClient.CONTENT_EMBEDDING_MODEL,
      input: query,
    })
    const [{ embedding: queryEmbedding }] = embeddingsResponse.data
    const tokenCount = embeddingsResponse.usage.total_tokens

    return Result.ok({
      embedding: queryEmbedding,
      token_count: tokenCount,
    })
  }
}

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free