def VLLMServer( model:str='mistralai/Voxtral-Mini-3B-2507', # Model name to serve port:int=8000, # Port for the server host:str='0.0.0.0', # Host address to bind to gpu_memory_utilization:float=0.85, # Fraction of GPU memory to use log_level:str='INFO', # Logging level (DEBUG, INFO, WARNING, ERROR) capture_logs:bool=True, # Whether to capture and display server logs kwargs:VAR_KEYWORD):
# Test configuration dataclassfrom dataclasses import fieldsprint("Available models:")model_field =next(f for f in fields(VoxtralVLLMPluginConfig) if f.name =="model_id")for model in model_field.metadata.get(SCHEMA_ENUM, []):print(f" - {model}")server_field =next(f for f in fields(VoxtralVLLMPluginConfig) if f.name =="server_mode")print(f"\nServer modes: {server_field.metadata.get(SCHEMA_ENUM)}")
Available models:
- mistralai/Voxtral-Mini-3B-2507
- mistralai/Voxtral-Small-24B-2507
Server modes: ['managed', 'external']
# Test get_config_schema for UI generationimport jsonschema = plugin.get_config_schema()print("JSON Schema for VoxtralVLLMPluginConfig:")print(f" Name: {schema['name']}")print(f" Properties count: {len(schema['properties'])}")print(f" Model field enum: {schema['properties']['model_id'].get('enum', [])}")print(f"\nSample properties:")print(json.dumps({k: v for k, v inlist(schema['properties'].items())[:3]}, indent=2))
JSON Schema for VoxtralVLLMPluginConfig:
Name: VoxtralVLLMPluginConfig
Properties count: 15
Model field enum: ['mistralai/Voxtral-Mini-3B-2507', 'mistralai/Voxtral-Small-24B-2507']
Sample properties:
{
"model_id": {
"type": "string",
"title": "Model ID",
"description": "Voxtral model to use. Mini is faster, Small is more accurate.",
"enum": [
"mistralai/Voxtral-Mini-3B-2507",
"mistralai/Voxtral-Small-24B-2507"
],
"default": "mistralai/Voxtral-Mini-3B-2507"
},
"device": {
"type": "string",
"title": "Device",
"description": "Device for inference (will use CUDA if available)",
"enum": [
"cuda"
],
"default": "cuda"
},
"server_mode": {
"type": "string",
"title": "Server Mode",
"description": "'managed': plugin manages server lifecycle, 'external': connect to existing server",
"enum": [
"managed",
"external"
],
"default": "managed"
}
}
# Test configuration validationfrom dataclasses import asdictfrom cjm_plugin_system.utils.validation import extract_defaultsplugin = VoxtralVLLMPlugin()test_configs = [ ({"model_id": "mistralai/Voxtral-Mini-3B-2507"}, "Valid config"), ({"model_id": "invalid_model"}, "Invalid model"), ({"server_port": 9000}, "Valid port change"), ({"temperature": 2.5}, "Temperature out of range"),]# Get defaults for mergingdefaults = extract_defaults(VoxtralVLLMPluginConfig)for config_update, description in test_configs:try: merged = {**defaults, **config_update} test_config = dict_to_config(VoxtralVLLMPluginConfig, merged, validate=True)print(f"{description}: Valid=True")exceptValueErroras e:print(f"{description}: Valid=False")print(f" Error: {str(e)[:100]}")
Valid config: Valid=True
Invalid model: Valid=False
Error: model_id: 'invalid_model' is not one of ['mistralai/Voxtral-Mini-3B-2507', 'mistralai/Voxtral-Small-
Valid port change: Valid=True
Temperature out of range: Valid=False
Error: temperature: 2.5 is greater than maximum 2.0
# Test initialization with external server modeplugin.initialize({"model_id": "mistralai/Voxtral-Mini-3B-2507","server_mode": "external","server_url": "http://localhost:8000"})print(f"Current config mode: {plugin.get_current_config().get('server_mode')}")print(f"Current model: {plugin.get_current_config().get('model_id')}")
Current config mode: external
Current model: mistralai/Voxtral-Mini-3B-2507