package com.smtaiserver.smtaiserver.javaai.llm.qwen; import org.apache.commons.pool2.BasePooledObjectFactory; import org.apache.commons.pool2.PooledObject; import org.apache.commons.pool2.impl.DefaultPooledObject; import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import com.alibaba.dashscope.aigc.generation.Generation; import com.alibaba.dashscope.embeddings.TextEmbedding; import com.alibaba.dashscope.utils.Constants; import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord; import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect; import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMFactory; import com.smtservlet.util.Json; public class SMTLLMFactoryQwen extends SMTLLMFactory { public class SMTQwenLLMPoolFactory extends BasePooledObjectFactory { @Override public Generation create() throws Exception { return new Generation(); } @Override public PooledObject wrap(Generation obj) { return new DefaultPooledObject<>(obj); } } public class SMTQwenEmbedPoolFactory extends BasePooledObjectFactory { @Override public TextEmbedding create() throws Exception { return new TextEmbedding(); } @Override public PooledObject wrap(TextEmbedding obj) { return new DefaultPooledObject<>(obj); } } //////////////////////////////////////////////////////////////////////////////////////// private GenericObjectPool _qwenEmbedPool; private GenericObjectPool _qwennLLMPool; private Json _jsonFactory; private Json _jsonConnect; @Override public void initInstance(DBRecord rec) throws Exception { super.initInstance(rec); _jsonFactory = Json.read(rec.getString("factory_args")); _jsonConnect = Json.read(rec.getString("connect_args")); Constants.apiKey= _jsonFactory.getJson("key").asString(); //"sk-57653d19816c44ed81c731ebadeaa3d9"; { GenericObjectPoolConfig config = new GenericObjectPoolConfig<>(); config.setMaxTotal(32); config.setMinIdle(32); _qwennLLMPool = new GenericObjectPool<>(new SMTQwenLLMPoolFactory(), config); } { GenericObjectPoolConfig config = new GenericObjectPoolConfig<>(); config.setMaxTotal(32); config.setMinIdle(32); _qwenEmbedPool = new GenericObjectPool<>(new SMTQwenEmbedPoolFactory(), config); } } public Json getConnectJson() { return _jsonConnect; } public SMTLLMConnect allocLLM() throws Exception { Generation gen = _qwennLLMPool.borrowObject(); return new SMTLLMConnectQwen(gen, this); } public TextEmbedding allocLLMEmbedding() throws Exception { return _qwenEmbedPool.borrowObject(); } public void freeLLMEmbedding(TextEmbedding embed) { _qwenEmbedPool.returnObject(embed); } public void returnGenToPool(Generation gen) { _qwennLLMPool.returnObject(gen); } }