Text Generation
Transformers
English
qwen2
code-generation
python
fine-tuning
Qwen
tools
agent-framework
multi-agent
conversational
Eval Results (legacy)
Instructions to use my-ai-stack/Stack-2-9-finetuned with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use my-ai-stack/Stack-2-9-finetuned with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="my-ai-stack/Stack-2-9-finetuned") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("my-ai-stack/Stack-2-9-finetuned") model = AutoModelForCausalLM.from_pretrained("my-ai-stack/Stack-2-9-finetuned") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps
- vLLM
How to use my-ai-stack/Stack-2-9-finetuned with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "my-ai-stack/Stack-2-9-finetuned" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "my-ai-stack/Stack-2-9-finetuned", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/my-ai-stack/Stack-2-9-finetuned
- SGLang
How to use my-ai-stack/Stack-2-9-finetuned with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "my-ai-stack/Stack-2-9-finetuned" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "my-ai-stack/Stack-2-9-finetuned", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "my-ai-stack/Stack-2-9-finetuned" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "my-ai-stack/Stack-2-9-finetuned", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use my-ai-stack/Stack-2-9-finetuned with Docker Model Runner:
docker model run hf.co/my-ai-stack/Stack-2-9-finetuned
| // Voice Tools - Tools for voice input/output in the AI assistant | |
| // | |
| // Provides tools for: | |
| // - VoiceRecordingTool: Record voice commands | |
| // - VoiceSynthesisTool: Speak responses | |
| // - VoiceCloneTool: Clone voices from samples | |
| import { log } from '../utils/logger' | |
| import { initVoiceClient, getVoiceClient } from './VoiceApiClient' | |
| import { | |
| startRecording, | |
| stopRecording, | |
| isRecording, | |
| checkRecordingAvailability, | |
| audioToBase64, | |
| type RecordingAvailability | |
| } from './VoiceRecording' | |
| // Tool result types | |
| export interface ToolResult { | |
| success: boolean | |
| data?: unknown | |
| error?: string | |
| } | |
| // Voice config type | |
| export interface VoiceConfig { | |
| apiUrl: string | |
| timeout?: number | |
| } | |
| // βββ Voice Recording Tool βββ | |
| /** | |
| * VoiceRecordingTool - Records voice input from microphone | |
| */ | |
| export class VoiceRecordingTool { | |
| name = 'VoiceRecordingTool' | |
| description = 'Record voice input from the microphone for voice commands' | |
| async execute(options?: { maxDuration?: number }): Promise<ToolResult> { | |
| try { | |
| // Check availability | |
| const availability = await checkRecordingAvailability() | |
| if (!availability.available) { | |
| return { success: false, error: availability.reason ?? 'Recording not available' } | |
| } | |
| // Start recording | |
| let audioChunks: Buffer[] = [] | |
| const started = await startRecording( | |
| (chunk) => { | |
| audioChunks.push(chunk) | |
| }, | |
| () => { | |
| log('[voice] Recording ended') | |
| }, | |
| { silenceDetection: true } | |
| ) | |
| if (!started) { | |
| return { success: false, error: 'Failed to start recording' } | |
| } | |
| // Wait for recording to end (silence detection) | |
| await new Promise<void>((resolve) => { | |
| const checkInterval = setInterval(() => { | |
| if (!isRecording()) { | |
| clearInterval(checkInterval) | |
| resolve() | |
| } | |
| }, 100) | |
| // Timeout after maxDuration | |
| if (options?.maxDuration) { | |
| setTimeout(() => { | |
| clearInterval(checkInterval) | |
| stopRecording() | |
| resolve() | |
| }, options.maxDuration) | |
| } | |
| }) | |
| // Combine audio chunks | |
| const audioBuffer = Buffer.concat(audioChunks) | |
| const base64Audio = audioToBase64(audioBuffer) | |
| return { | |
| success: true, | |
| data: { | |
| audio: base64Audio, | |
| duration: audioBuffer.length / (16000 * 2), | |
| sampleRate: 16000, | |
| channels: 1, | |
| }, | |
| } | |
| } catch (error) { | |
| log('[voice] Recording error', error) | |
| return { success: false, error: String(error) } | |
| } | |
| } | |
| stop(): void { | |
| stopRecording() | |
| } | |
| } | |
| // βββ Voice Synthesis Tool βββ | |
| /** | |
| * VoiceSynthesisTool - Convert text to speech using cloned voice | |
| */ | |
| export class VoiceSynthesisTool { | |
| private client: ReturnType<typeof getVoiceClient> | |
| constructor(config?: VoiceConfig) { | |
| if (config) { | |
| this.client = initVoiceClient(config) | |
| } else { | |
| this.client = getVoiceClient() | |
| } | |
| } | |
| name = 'VoiceSynthesisTool' | |
| description = 'Convert text to speech using a cloned voice' | |
| async execute(request: { text: string; voiceName?: string }): Promise<ToolResult> { | |
| const client = this.client | |
| if (!client) { | |
| return { | |
| success: false, | |
| error: 'Voice client not initialized. Call initVoiceClient() first.', | |
| } | |
| } | |
| try { | |
| const audioBlob = await client.synthesize({ | |
| text: request.text, | |
| voiceName: request.voiceName ?? 'default', | |
| }) | |
| // Convert blob to base64 | |
| const arrayBuffer = await audioBlob.arrayBuffer() | |
| const base64Audio = btoa( | |
| new Uint8Array(arrayBuffer).reduce((data, byte) => data + String.fromCharCode(byte), '') | |
| ) | |
| return { | |
| success: true, | |
| data: { | |
| audio: base64Audio, | |
| format: 'wav', | |
| text: request.text, | |
| }, | |
| } | |
| } catch (error) { | |
| log('[voice] Synthesis error', error) | |
| return { success: false, error: String(error) } | |
| } | |
| } | |
| async *streamExecute(request: { text: string; voiceName?: string }): AsyncGenerator<Uint8Array> { | |
| const client = this.client | |
| if (!client) { | |
| throw new Error('Voice client not initialized') | |
| } | |
| yield* client.streamSynthesize({ | |
| text: request.text, | |
| voiceName: request.voiceName ?? 'default', | |
| }) | |
| } | |
| } | |
| // βββ Voice Clone Tool βββ | |
| /** | |
| * VoiceCloneTool - Clone a voice from audio samples | |
| */ | |
| export class VoiceCloneTool { | |
| private client: ReturnType<typeof getVoiceClient> | |
| constructor(config?: VoiceConfig) { | |
| if (config) { | |
| this.client = initVoiceClient(config) | |
| } else { | |
| this.client = getVoiceClient() | |
| } | |
| } | |
| name = 'VoiceCloneTool' | |
| description = 'Clone a voice from audio samples for use in synthesis' | |
| async execute(request: { voiceName: string; audioPath?: string; audioData?: string }): Promise<ToolResult> { | |
| const client = this.client | |
| if (!client) { | |
| return { | |
| success: false, | |
| error: 'Voice client not initialized. Call initVoiceClient() first.', | |
| } | |
| } | |
| try { | |
| const result = await client.cloneVoice({ | |
| voiceName: request.voiceName, | |
| audioPath: request.audioPath, | |
| audioData: request.audioData, | |
| }) | |
| return { | |
| success: result.success, | |
| data: result, | |
| } | |
| } catch (error) { | |
| log('[voice] Clone error', error) | |
| return { success: false, error: String(error) } | |
| } | |
| } | |
| } | |
| // βββ Voice Status Tool βββ | |
| /** | |
| * VoiceStatusTool - Check voice service availability | |
| */ | |
| export class VoiceStatusTool { | |
| private client: ReturnType<typeof getVoiceClient> | |
| constructor(config?: VoiceConfig) { | |
| if (config) { | |
| this.client = initVoiceClient(config) | |
| } else { | |
| this.client = getVoiceClient() | |
| } | |
| } | |
| name = 'VoiceStatusTool' | |
| description = 'Check voice service status and list available voices' | |
| async execute(): Promise<ToolResult> { | |
| try { | |
| // Check recording availability | |
| const recordingAvail = await checkRecordingAvailability() | |
| // Check voice API availability | |
| let apiAvailable = false | |
| let voices: string[] = [] | |
| const client = this.client | |
| if (client) { | |
| apiAvailable = await client.healthCheck() | |
| if (apiAvailable) { | |
| const voiceList = await client.listVoices() | |
| voices = voiceList.voices.map((v: { name: string }) => v.name) | |
| } | |
| } | |
| return { | |
| success: true, | |
| data: { | |
| recording: recordingAvail, | |
| api: apiAvailable, | |
| voices, | |
| }, | |
| } | |
| } catch (error) { | |
| return { success: false, error: String(error) } | |
| } | |
| } | |
| } | |
| // βββ Tool Registry βββ | |
| export const voiceTools = { | |
| VoiceRecordingTool, | |
| VoiceSynthesisTool, | |
| VoiceCloneTool, | |
| VoiceStatusTool, | |
| } | |
| export default voiceTools |