base-provider.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { Anthropic } from "@anthropic-ai/sdk"
  2. import { ModelInfo } from "../../shared/api"
  3. import type { ApiHandler, ApiHandlerCreateMessageMetadata } from "../index"
  4. import { ApiStream } from "../transform/stream"
  5. import { countTokens } from "../../utils/countTokens"
  6. /**
  7. * Base class for API providers that implements common functionality.
  8. */
  9. export abstract class BaseProvider implements ApiHandler {
  10. abstract createMessage(
  11. systemPrompt: string,
  12. messages: Anthropic.Messages.MessageParam[],
  13. metadata?: ApiHandlerCreateMessageMetadata,
  14. ): ApiStream
  15. abstract getModel(): { id: string; info: ModelInfo }
  16. /**
  17. * Default token counting implementation using tiktoken.
  18. * Providers can override this to use their native token counting endpoints.
  19. *
  20. * @param content The content to count tokens for
  21. * @returns A promise resolving to the token count
  22. */
  23. async countTokens(content: Anthropic.Messages.ContentBlockParam[]): Promise<number> {
  24. if (content.length === 0) {
  25. return 0
  26. }
  27. return countTokens(content, { useWorker: true })
  28. }
  29. }