Packaging tools for own use
Project description
hwhkit
Main function
- Connection
- mqtt
- llm
Connection
yaml config
key_pairs:
default_topic:
algorithm: rsa
public: '-----BEGIN PUBLIC KEY-----'
private: '-----BEGIN PRIVATE KEY-----'
default_topic_2:
algorithm: aes
private: '---------xxx-------'
Sync MQTT
import time
import signal
from hwhkit.connection.mqtt.client import MQTTClientManager
def main():
default_topic = "default_topic"
client_id = "test_mqtt_client"
manager = MQTTClientManager(mqtt_config="mqtt_keys.yaml")
manager.create_client(client_id=client_id, broker="broker.emqx.io", port=1883)
manager.start_all_clients()
@manager.subscribe(topic=default_topic)
def handle_message(client, message: str):
print(f"Received message from {client}: {message}")
manager.publish(client_id, default_topic, f"Response from {client}")
time.sleep(4)
manager.publish(client_id=client_id, topic=default_topic, message="Hello from Client2")
signal.pause()
if __name__ == '__main__':
main()
Async MQTT
import asyncio
from hwhkit.connection.mqtt.async_client import MQTTAsyncClientManager, MQTTConfig
from hwhkit.utils import logger
async def main():
configs = [
MQTTConfig(client_id="client1", broker="broker.emqx.io", port=1883, username="user", password="pass"),
]
default_topic = "default_topic"
async with MQTTAsyncClientManager(mqtt_config="mqtt_keys.yaml") as manager:
for config in configs:
await manager.add_client(config)
@manager.topic_handler(default_topic)
async def topic_key(client, topic, message):
logger.info(f"Received message on {topic} from {client}: {message}")
await manager.publish("client1", default_topic, f"Response from {client}")
await manager.run()
if __name__ == "__main__":
asyncio.run(main())
LLM
Three steps to use models
Step1, llm_config.yaml
matter that needs attention
- custom_model_name used for models.get_model_instance()
- custom_model_name.name should specify the name of the model supported by the current company
models:
openai:
custom_model_name:
name: "gpt-4o"
short_name: "OIG4"
company: "openai"
max_input_token: 8100
max_output_token: 2048
top_p: 0.5
top_k: 1
temperature: 0.5
input_token_fee_pm: 30.0
output_token_fee_pm: 60.0
train_token_fee_pm: 0.0
keys:
- name: "openai_key1"
- name: "openai_key2"
siliconflow:
qw-72b-p:
name: "Qwen/QVQ-72B-Preview"
short_name: "QW-72B-P"
company: "siliconflow"
max_input_token: 8100
max_output_token: 2048
top_p: 0.5
top_k: 1
temperature: 0.5
input_token_fee_pm: 30.0
output_token_fee_pm: 60.0
train_token_fee_pm: 0.0
keys:
- name: "siliconflow_1"
Step2, llm_keys.yaml
- The keys name of the model in llm_config.yaml corresponds to llm_keys.yaml one by one
keys:
openai_key1: "xx"
openai_key2: "xx"
anthropic_key1: "your_anthropic_api_key_1"
anthropic_key2: "your_anthropic_api_key_2"
Step3, load models
from hwhkit.llm.config import load_models_from_yaml
from hwhkit.llm import LLMClient
async def main():
# The first method
models = load_models_from_yaml(config_file="examples/llm_config.yaml", keys_file="examples/llm_keys.yaml")
print(models.list_models())
resp = await models.get_model_instance("gpt-4o").chat("who r u?")
print(resp)
# The second method
client = LLMClient(config_file="llm_config.yaml", keys_file="llm_keys.yaml")
print(client.list_models())
resp = await client.chat("qw-72b-p", "who r u?", system_prompt="")
print(resp)
async for chunk in client.chat_stream("qw-72b-p", "who r u?", system_prompt=""):
print(chunk)
if __name__ == '__main__':
import asyncio
asyncio.run(main())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
hwhkit-1.0.17.tar.gz
(17.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
hwhkit-1.0.17-py3-none-any.whl
(32.1 kB
view details)
File details
Details for the file hwhkit-1.0.17.tar.gz.
File metadata
- Download URL: hwhkit-1.0.17.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
541cf38d91fcb04cf162d35e87c6a3481e3b9a23ef4e1371b699c4e984da1320
|
|
| MD5 |
92ee2e6bc75cd4b624cadae1b96084be
|
|
| BLAKE2b-256 |
43873864b7de055ff989b5034dab23a70e2499031b76aa3f0589259421b823f4
|
File details
Details for the file hwhkit-1.0.17-py3-none-any.whl.
File metadata
- Download URL: hwhkit-1.0.17-py3-none-any.whl
- Upload date:
- Size: 32.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a59a5cb29ef12e435c5ed30e9eeba34c74d61c4d37a39c7174437aa61fb1720f
|
|
| MD5 |
23dfa5c1d79dbae12195e807327873dd
|
|
| BLAKE2b-256 |
9da0ceb9d44e47349ad2a81eec2ed2560ea97fce21707d33fe0e750a90930c1f
|