| import os |
| import torch |
| from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
| def interactive_chat(): |
| |
| base_dir = os.path.dirname(os.path.abspath(__file__)) |
| model_dir = os.path.join(base_dir, "sail_5b_hf_model") |
| |
| print(f"Loading tokenizer from {model_dir}...") |
| try: |
| tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True) |
| except Exception as e: |
| print(f"Failed to load tokenizer: {e}") |
| return |
|
|
| print(f"Loading 350M SAIL model from {model_dir}...") |
| try: |
| |
| model = AutoModelForCausalLM.from_pretrained( |
| model_dir, |
| torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32, |
| device_map="auto", |
| trust_remote_code=True |
| ) |
| except Exception as e: |
| print(f"Failed to load model: {e}") |
| return |
| |
| print("\n========================================================") |
| print(" SAIL 350M Foundational Network - Interactive Chat") |
| print(" NOTE: This model is currently UNTRAINED blank weights.") |
| print(" Outputs will be completely random until pre-training.") |
| print("========================================================") |
| |
| while True: |
| try: |
| user_input = input("\nYou: ") |
| if user_input.lower() in ['quit', 'exit', 'stop']: |
| break |
| if not user_input.strip(): |
| continue |
| |
| |
| messages = [{"role": "user", "content": user_input}] |
| |
| prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) |
| |
| inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
| |
| |
| with torch.no_grad(): |
| outputs = model.generate( |
| **inputs, |
| max_new_tokens=150, |
| do_sample=True, |
| temperature=0.7, |
| top_p=0.9, |
| pad_token_id=tokenizer.pad_token_id, |
| eos_token_id=tokenizer.eos_token_id, |
| ) |
| |
| |
| input_length = inputs["input_ids"].shape[1] |
| response_tokens = outputs[0][input_length:] |
| response = tokenizer.decode(response_tokens, skip_special_tokens=True) |
| |
| print(f"\nSAIL AI: {response}") |
| |
| except KeyboardInterrupt: |
| break |
| except Exception as e: |
| print(f"\nError during generation: {e}") |
|
|
| if __name__ == "__main__": |
| interactive_chat() |
|
|