DefectRAG / deployment /space /embedding_worker.py
Wizzas's picture
DefectRAG phase 3: incremental real-model application migration
a31f52b verified
Raw History Blame Contribute Delete
1.53 kB
"""CPU-only BGE subprocess. No spaces import or GPU model initialization."""
import argparse
import json
import sys
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer,AutoModel
def main():
parser=argparse.ArgumentParser()
parser.add_argument('--source',required=True)
args=parser.parse_args()
torch.set_num_threads(min(4,torch.get_num_threads()))
tokenizer=AutoTokenizer.from_pretrained(args.source,local_files_only=True)
model=AutoModel.from_pretrained(args.source,local_files_only=True,attn_implementation='eager').eval().to('cpu')
for line in sys.stdin:
try:
texts=json.loads(line)['texts']
if len(texts)>128 or sum(map(len,texts))>160000:
raise ValueError('Embedding request exceeds bounds')
vectors=[]
with torch.inference_mode():
for start in range(0,len(texts),16):
tokens=tokenizer(texts[start:start+16],padding=True,truncation=True,max_length=512,return_tensors='pt')
values=model(**tokens).last_hidden_state[:,0]
vectors.extend(F.normalize(values.float(),dim=-1).tolist())
print(json.dumps({'vectors':vectors}),flush=True)
except Exception as exc:
print(json.dumps({'error':type(exc).__name__}),flush=True)
if __name__=='__main__':
try:
main()
except Exception as exc:
print(json.dumps({'error':'embedding_startup_'+type(exc).__name__}),flush=True)