49 lines
5.3 KiB
Python
49 lines
5.3 KiB
Python
|
# encoding: utf-8
|
|||
|
'''
|
|||
|
@author: 温进
|
|||
|
@file: huggingface_embedding.py
|
|||
|
@time: 2023/11/30 上午11:41
|
|||
|
@desc:
|
|||
|
'''
|
|||
|
from loguru import logger
|
|||
|
from configs.model_config import EMBEDDING_DEVICE
|
|||
|
from dev_opsgpt.embeddings.utils import load_embeddings
|
|||
|
|
|||
|
|
|||
|
class HFEmbedding:
|
|||
|
_instance = {}
|
|||
|
|
|||
|
def __new__(cls, *args, **kwargs):
|
|||
|
instance_key = f'{args},{kwargs}'
|
|||
|
|
|||
|
if cls._instance.get(instance_key, None):
|
|||
|
return cls._instance[instance_key]
|
|||
|
else:
|
|||
|
cls._instance[instance_key] = super().__new__(cls)
|
|||
|
return cls._instance[instance_key]
|
|||
|
|
|||
|
def __init__(self, model_name):
|
|||
|
self.model = load_embeddings(model=model_name, device=EMBEDDING_DEVICE)
|
|||
|
logger.debug('load success')
|
|||
|
|
|||
|
def get_emb(self, text_list):
|
|||
|
'''
|
|||
|
get embedding
|
|||
|
@param text_list:
|
|||
|
@return:
|
|||
|
'''
|
|||
|
logger.info('st')
|
|||
|
emb_res = self.model.embed_documents(text_list)
|
|||
|
logger.info('ed')
|
|||
|
res = {
|
|||
|
text_list[idx]: emb_res[idx] for idx in range(len(text_list))
|
|||
|
}
|
|||
|
return res
|
|||
|
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
model_name = 'text2vec-base'
|
|||
|
hfe = HFEmbedding(model_name)
|
|||
|
text_list = ['这段代码是一个OkHttp拦截器,用于在请求头中添加授权令牌。它继承自`com.theokanning.openai.client.AuthenticationInterceptor`类,并且被标记为`@Deprecated`,意味着它已经过时了。\n\n这个拦截器的作用是在每个请求的头部添加一个名为"Authorization"的字段,值为传入的授权令牌。这样,当请求被发送到服务器时,服务器可以使用这个令牌来验证请求的合法性。\n\n这段代码的构造函数接受一个令牌作为参数,并将其传递给父类的构造函数。这个令牌应该是一个有效的授权令牌,用于访问受保护的资源。', '这段代码定义了一个接口`OpenAiApi`,并使用`@Deprecated`注解将其标记为已过时。它还扩展了`com.theokanning.openai.client.OpenAiApi`接口。\n\n`@Deprecated`注解表示该接口已经过时,不推荐使用。开发者应该使用`com.theokanning.openai.client.OpenAiApi`接口代替。\n\n注释中提到这个接口只是为了保持向后兼容性。这意味着它可能是为了与旧版本的代码兼容而保留的,但不推荐在新代码中使用。', '这段代码是一个OkHttp的拦截器,用于在请求头中添加授权令牌(authorization token)。\n\n在这个拦截器中,首先获取到传入的授权令牌(token),然后在每个请求的构建过程中,使用`newBuilder()`方法创建一个新的请求构建器,并在该构建器中添加一个名为"Authorization"的请求头,值为"Bearer " + token。最后,使用该构建器构建一个新的请求,并通过`chain.proceed(request)`方法继续处理该请求。\n\n这样,当使用OkHttp发送请求时,该拦截器会自动在请求头中添加授权令牌,以实现身份验证的功能。', '这段代码是一个Java接口,用于定义与OpenAI API进行通信的方法。它包含了各种不同类型的请求和响应方法,用于与OpenAI API的不同端点进行交互。\n\n接口中的方法包括:\n- `listModels()`:获取可用的模型列表。\n- `getModel(String modelId)`:获取指定模型的详细信息。\n- `createCompletion(CompletionRequest request)`:创建文本生成的请求。\n- `createChatCompletion(ChatCompletionRequest request)`:创建聊天式文本生成的请求。\n- `createEdit(EditRequest request)`:创建文本编辑的请求。\n- `createEmbeddings(EmbeddingRequest request)`:创建文本嵌入的请求。\n- `listFiles()`:获取已上传文件的列表。\n- `uploadFile(RequestBody purpose, MultipartBody.Part file)`:上传文件。\n- `deleteFile(String fileId)`:删除文件。\n- `retrieveFile(String fileId)`:获取文件的详细信息。\n- `retrieveFileContent(String fileId)`:获取文件的内容。\n- `createFineTuningJob(FineTuningJobRequest request)`:创建Fine-Tuning任务。\n- `listFineTuningJobs()`:获取Fine-Tuning任务的列表。\n- `retrieveFineTuningJob(String fineTuningJobId)`:获取指定Fine-Tuning任务的详细信息。\n- `cancelFineTuningJob(String fineTuningJobId)`:取消Fine-Tuning任务。\n- `listFineTuningJobEvents(String fineTuningJobId)`:获取Fine-Tuning任务的事件列表。\n- `createFineTuneCompletion(CompletionRequest request)`:创建Fine-Tuning模型的文本生成请求。\n- `createImage(CreateImageRequest request)`:创建图像生成的请求。\n- `createImageEdit(RequestBody requestBody)`:创建图像编辑的请求。\n- `createImageVariation(RequestBody requestBody)`:创建图像变体的请求。\n- `createTranscription(RequestBody requestBody)`:创建音频转录的请求。\n- `createTranslation(RequestBody requestBody)`:创建音频翻译的请求。\n- `createModeration(ModerationRequest request)`:创建内容审核的请求。\n- `getEngines()`:获取可用的引擎列表。\n- `getEngine(String engineId)`:获取指定引擎的详细信息。\n- `subscription()`:获取账户订阅信息。\n- `billingUsage(LocalDate starDate, LocalDate endDate)`:获取账户消费信息。\n\n这些方法使用<EFBFBD><EFBFBD>
|
|||
|
|
|||
|
hfe.get_emb(text_list)
|