{"version":3,"sources":["../../src/index.ts"],"sourcesContent":["import {\n  ChromaValueError,\n  EmbeddingFunction,\n  EmbeddingFunctionSpace,\n  registerEmbeddingFunction,\n} from \"chromadb\";\nimport {\n  snakeCase,\n  validateConfigSchema,\n} from \"@chroma-core/ai-embeddings-common\";\nimport Together from \"together-ai\";\n\nconst NAME = \"together-ai\";\n\nexport interface TogetherAIConfig {\n  api_key_env_var: string;\n  model_name: string;\n}\n\nexport interface TogetherAIArgs {\n  modelName: string;\n  apiKeyEnvVar?: string;\n  apiKey?: string;\n}\n\nexport class TogetherAIEmbeddingFunction implements EmbeddingFunction {\n  public readonly name = NAME;\n  private readonly apiKeyEnvVar: string;\n  private readonly modelName: string;\n  private client: Together;\n\n  constructor(args: TogetherAIArgs) {\n    const { apiKeyEnvVar = \"TOGETHER_API_KEY\", modelName } = args;\n\n    const apiKey = args.apiKey || process.env[apiKeyEnvVar];\n\n    if (!apiKey) {\n      console.warn(\n        `TogetherAI API key is not set. Please provide it in the constructor or set the environment variable ${apiKeyEnvVar}.`,\n      );\n    }\n\n    this.modelName = modelName;\n    this.apiKeyEnvVar = apiKeyEnvVar;\n    this.client = new Together({ apiKey });\n  }\n\n  public async generate(texts: string[]): Promise<number[][]> {\n    const response = await this.client.embeddings.create({\n      input: texts,\n      model: this.modelName,\n    });\n    return response.data.map((e) => e.embedding);\n  }\n\n  public defaultSpace(): EmbeddingFunctionSpace {\n    return \"cosine\";\n  }\n\n  public supportedSpaces(): EmbeddingFunctionSpace[] {\n    return [\"cosine\", \"l2\", \"ip\"];\n  }\n\n  public static buildFromConfig(\n    config: TogetherAIConfig,\n  ): TogetherAIEmbeddingFunction {\n    return new TogetherAIEmbeddingFunction({\n      modelName: config.model_name,\n      apiKeyEnvVar: config.api_key_env_var,\n    });\n  }\n\n  public getConfig(): TogetherAIConfig {\n    return {\n      api_key_env_var: this.apiKeyEnvVar,\n      model_name: this.modelName,\n    };\n  }\n\n  public validateConfigUpdate(newConfig: Record<string, any>): void {\n    if (this.getConfig().model_name !== newConfig.model_name) {\n      throw new ChromaValueError(\"Model name cannot be updated\");\n    }\n  }\n\n  public static validateConfig(config: TogetherAIConfig): void {\n    validateConfigSchema(config, NAME);\n  }\n}\n\nregisterEmbeddingFunction(NAME, TogetherAIEmbeddingFunction);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKO;AACP,kCAGO;AACP,yBAAqB;AAErB,IAAM,OAAO;AAaN,IAAM,8BAAN,MAAM,6BAAyD;AAAA,EAMpE,YAAY,MAAsB;AALlC,SAAgB,OAAO;AAMrB,UAAM,EAAE,eAAe,oBAAoB,UAAU,IAAI;AAEzD,UAAM,SAAS,KAAK,UAAU,QAAQ,IAAI,YAAY;AAEtD,QAAI,CAAC,QAAQ;AACX,cAAQ;AAAA,QACN,uGAAuG,YAAY;AAAA,MACrH;AAAA,IACF;AAEA,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,SAAS,IAAI,mBAAAA,QAAS,EAAE,OAAO,CAAC;AAAA,EACvC;AAAA,EAEA,MAAa,SAAS,OAAsC;AAC1D,UAAM,WAAW,MAAM,KAAK,OAAO,WAAW,OAAO;AAAA,MACnD,OAAO;AAAA,MACP,OAAO,KAAK;AAAA,IACd,CAAC;AACD,WAAO,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA,EAC7C;AAAA,EAEO,eAAuC;AAC5C,WAAO;AAAA,EACT;AAAA,EAEO,kBAA4C;AACjD,WAAO,CAAC,UAAU,MAAM,IAAI;AAAA,EAC9B;AAAA,EAEA,OAAc,gBACZ,QAC6B;AAC7B,WAAO,IAAI,6BAA4B;AAAA,MACrC,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEO,YAA8B;AACnC,WAAO;AAAA,MACL,iBAAiB,KAAK;AAAA,MACtB,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EAEO,qBAAqB,WAAsC;AAChE,QAAI,KAAK,UAAU,EAAE,eAAe,UAAU,YAAY;AACxD,YAAM,IAAI,iCAAiB,8BAA8B;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,OAAc,eAAe,QAAgC;AAC3D,0DAAqB,QAAQ,IAAI;AAAA,EACnC;AACF;AAAA,IAEA,2CAA0B,MAAM,2BAA2B;","names":["Together"]}