TangCheng
2025-02-28 d787e447e95c7b897c2cc9c0e832f8d2e5084934
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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<Generation> 
    {
        @Override
        public Generation create() throws Exception {
            return new Generation();
        }
 
        @Override
        public PooledObject<Generation> wrap(Generation obj) {
            return new DefaultPooledObject<>(obj);
        } 
    }
    
    public class SMTQwenEmbedPoolFactory extends BasePooledObjectFactory<TextEmbedding> 
    {
        @Override
        public TextEmbedding create() throws Exception {
            return new TextEmbedding();
        }
 
        @Override
        public PooledObject<TextEmbedding> wrap(TextEmbedding obj) {
            return new DefaultPooledObject<>(obj);
        } 
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////
    private GenericObjectPool<TextEmbedding>     _qwenEmbedPool;
    private GenericObjectPool<Generation>         _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<Generation> config = new GenericObjectPoolConfig<>();
            config.setMaxTotal(32);
            config.setMinIdle(32);
            _qwennLLMPool = new GenericObjectPool<>(new SMTQwenLLMPoolFactory(), config);
        }
        {
            GenericObjectPoolConfig<TextEmbedding> 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);
    }
}