add:添加tokens限制版本。
This commit is contained in:
		
							parent
							
								
									1648b6c961
								
							
						
					
					
						commit
						abe5590ec9
					
				@ -13,7 +13,8 @@
 | 
				
			|||||||
enum FrameType : int16_t {
 | 
					enum FrameType : int16_t {
 | 
				
			||||||
    TYPE_REQUEST = 0,
 | 
					    TYPE_REQUEST = 0,
 | 
				
			||||||
    TYPE_RESPONSE_SUCCESS,
 | 
					    TYPE_RESPONSE_SUCCESS,
 | 
				
			||||||
    TYPE_RESPONSE_ERROR
 | 
					    TYPE_RESPONSE_ERROR,
 | 
				
			||||||
 | 
					    TYPE_OUT_OF_LIMIT,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct FrameData {
 | 
					struct FrameData {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,3 +4,4 @@ ApiEnvKey = TENCENT_DEEPSEEK_KEY
 | 
				
			|||||||
UserName = user
 | 
					UserName = user
 | 
				
			||||||
ModelName = deepseek-r1
 | 
					ModelName = deepseek-r1
 | 
				
			||||||
AssistantName = assistant
 | 
					AssistantName = assistant
 | 
				
			||||||
 | 
					MaxTokens = 50000
 | 
				
			||||||
 | 
				
			|||||||
@ -43,5 +43,11 @@ bool CConfig::parse_config(ConfigInfo& config, const std::string& config_path)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    config.assistant_name = ini_handle.GetValue("Config", "AssistantName");
 | 
					    config.assistant_name = ini_handle.GetValue("Config", "AssistantName");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!ini_handle.KeyExists("Config", "MaxTokens")) {
 | 
				
			||||||
 | 
					        std::cerr << "Not Key Found Config/MaxTokens in deepseek.ini" << std::endl;
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    config.max_tokens = ini_handle.GetLongValue("Config", "MaxTokens");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								handle.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								handle.h
									
									
									
									
									
								
							@ -8,6 +8,7 @@ struct ConfigInfo {
 | 
				
			|||||||
    std::string user_name;
 | 
					    std::string user_name;
 | 
				
			||||||
    std::string model_name;
 | 
					    std::string model_name;
 | 
				
			||||||
    std::string assistant_name;
 | 
					    std::string assistant_name;
 | 
				
			||||||
 | 
					    long max_tokens{};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CConfig
 | 
					class CConfig
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								main.cxx
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.cxx
									
									
									
									
									
								
							@ -52,6 +52,7 @@ int main(int argc, char* argv[])
 | 
				
			|||||||
    std::cout << "assis_name:" << config.assistant_name << std::endl;
 | 
					    std::cout << "assis_name:" << config.assistant_name << std::endl;
 | 
				
			||||||
    std::cout << "base_url:" << config.base_url << std::endl;
 | 
					    std::cout << "base_url:" << config.base_url << std::endl;
 | 
				
			||||||
    std::cout << "model_name:" << config.model_name << std::endl;
 | 
					    std::cout << "model_name:" << config.model_name << std::endl;
 | 
				
			||||||
 | 
					    std::cout << "max_tokens:" << config.max_tokens << std::endl;
 | 
				
			||||||
    std::cout << "api:" << show_api(key) << std::endl;
 | 
					    std::cout << "api:" << show_api(key) << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (show_api(key) == "NULL") {
 | 
					    if (show_api(key) == "NULL") {
 | 
				
			||||||
@ -85,6 +86,7 @@ int main(int argc, char* argv[])
 | 
				
			|||||||
    // std::cout << "success." << std::endl;
 | 
					    // std::cout << "success." << std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    server.set_worker(api, json);
 | 
					    server.set_worker(api, json);
 | 
				
			||||||
 | 
					    server.set_token(config.max_tokens);
 | 
				
			||||||
    server.start();
 | 
					    server.start();
 | 
				
			||||||
    io_context.run();
 | 
					    io_context.run();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										16
									
								
								server.cxx
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								server.cxx
									
									
									
									
									
								
							@ -37,6 +37,11 @@ void Server::set_worker(std::shared_ptr<COpenAI> worker, std::shared_ptr<CJsonOp
 | 
				
			|||||||
    json_ = json;
 | 
					    json_ = json;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Server::set_token(long tokens)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    tokens_ = tokens;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Server::do_accept()
 | 
					void Server::do_accept()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    auto socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
 | 
					    auto socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
 | 
				
			||||||
@ -91,6 +96,13 @@ void Server::th_client(const std::shared_ptr<asio::ip::tcp::socket>& socket, con
 | 
				
			|||||||
            if (frame == nullptr) {
 | 
					            if (frame == nullptr) {
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (use_tokens_ > tokens_) {
 | 
				
			||||||
 | 
					                std::cout << client_key << " tokens not enough" << std::endl;
 | 
				
			||||||
 | 
					                FrameData req;
 | 
				
			||||||
 | 
					                req.type = FrameType::TYPE_OUT_OF_LIMIT;
 | 
				
			||||||
 | 
					                send_frame(socket, req);
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            std::cout << client_key << " 's data." << std::endl;
 | 
					            std::cout << client_key << " 's data." << std::endl;
 | 
				
			||||||
            if (frame->type == FrameType::TYPE_REQUEST) {
 | 
					            if (frame->type == FrameType::TYPE_REQUEST) {
 | 
				
			||||||
                ask_mutex_.lock();
 | 
					                ask_mutex_.lock();
 | 
				
			||||||
@ -109,6 +121,10 @@ void Server::th_client(const std::shared_ptr<asio::ip::tcp::socket>& socket, con
 | 
				
			|||||||
                    req.data = new char[req.len];
 | 
					                    req.data = new char[req.len];
 | 
				
			||||||
                    req.protk = parse.prompt_tokens;
 | 
					                    req.protk = parse.prompt_tokens;
 | 
				
			||||||
                    req.coptk = parse.completion_tokens;
 | 
					                    req.coptk = parse.completion_tokens;
 | 
				
			||||||
 | 
					                    use_tokens_ += req.protk;
 | 
				
			||||||
 | 
					                    use_tokens_ += req.coptk;
 | 
				
			||||||
 | 
					                    std::cout << "Already use " << use_tokens_ << " tokens.\r";
 | 
				
			||||||
 | 
					                    std::cout.flush();
 | 
				
			||||||
                    memcpy(req.data, parse.message_content.c_str(), parse.message_content.size());
 | 
					                    memcpy(req.data, parse.message_content.c_str(), parse.message_content.size());
 | 
				
			||||||
                    req.data[req.len - 1] = '\0';
 | 
					                    req.data[req.len - 1] = '\0';
 | 
				
			||||||
                    send_frame(socket, req);
 | 
					                    send_frame(socket, req);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										9
									
								
								server.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								server.h
									
									
									
									
									
								
							@ -1,10 +1,10 @@
 | 
				
			|||||||
#ifndef SERVER_H
 | 
					#ifndef SERVER_H
 | 
				
			||||||
#define SERVER_H
 | 
					#define SERVER_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "communicate.hpp"
 | 
				
			||||||
#include "handle.h"
 | 
					#include "handle.h"
 | 
				
			||||||
#include "jsondata.h"
 | 
					#include "jsondata.h"
 | 
				
			||||||
#include "zapi.h"
 | 
					#include "zapi.h"
 | 
				
			||||||
#include "communicate.hpp"
 | 
					 | 
				
			||||||
#include <asio.hpp>
 | 
					#include <asio.hpp>
 | 
				
			||||||
#include <mutex>
 | 
					#include <mutex>
 | 
				
			||||||
#include <unordered_map>
 | 
					#include <unordered_map>
 | 
				
			||||||
@ -27,11 +27,10 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    void set_worker(std::shared_ptr<COpenAI> worker, std::shared_ptr<CJsonOper> json);
 | 
					    void set_worker(std::shared_ptr<COpenAI> worker, std::shared_ptr<CJsonOper> json);
 | 
				
			||||||
 | 
					    void set_token(long tokens);
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    void do_accept();
 | 
					    void do_accept();
 | 
				
			||||||
    void th_client(const std::shared_ptr<asio::ip::tcp::socket>& socket,
 | 
					    void th_client(const std::shared_ptr<asio::ip::tcp::socket>& socket, const std::string& client_key);
 | 
				
			||||||
        const std::string& client_key);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::string post_data(const std::string& data);
 | 
					    std::string post_data(const std::string& data);
 | 
				
			||||||
    bool send_frame(const std::shared_ptr<asio::ip::tcp::socket>& socket, FrameData& data);
 | 
					    bool send_frame(const std::shared_ptr<asio::ip::tcp::socket>& socket, FrameData& data);
 | 
				
			||||||
@ -48,6 +47,8 @@ private:
 | 
				
			|||||||
    std::map<std::string, std::shared_ptr<ClientCache>> client_map_;
 | 
					    std::map<std::string, std::shared_ptr<ClientCache>> client_map_;
 | 
				
			||||||
    CMutBuffer buffer_{};
 | 
					    CMutBuffer buffer_{};
 | 
				
			||||||
    short port_;
 | 
					    short port_;
 | 
				
			||||||
 | 
					    long tokens_{};
 | 
				
			||||||
 | 
					    long use_tokens_{};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user