import torch from transformers import AutoModelForCausalLM, AutoTokenizer # INSTRUCTIONS: Replace the JSON below with your material's properties # Common data sources: materialsproject.org, DFT calculations, experimental databases JSON_INPUT = """ { "material_id": "mp-8062", "formula": "SiC", "elements": [ "Si", "C" ], "spacegroup": "P63mc", "band_gap": 3.26, "formation_energy_per_atom": -0.73, "density": 3.21, "volume": 41.2, "nsites": 8, "is_stable": true, "elastic_modulus": 448, "bulk_modulus": 220, "thermal_expansion": 4.2e-06, "electron_affinity": 4.0, "ionization_energy": 6.7, "crystal_system": "Hexagonal", "magnetic_property": "Non-magnetic", "thermal_conductivity": 490, "specific_heat": 0.69, "is_superconductor": false, "band_gap_type": "Indirect" } """ def load_model(model_path): model = AutoModelForCausalLM.from_pretrained( model_path, torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) tokenizer = AutoTokenizer.from_pretrained( model_path, trust_remote_code=True ) return model, tokenizer def generate_response(model, tokenizer, topic): topic = topic.strip() prompt = f"USER: {topic}\nASSISTANT:" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate( **inputs, max_new_tokens=3000, temperature=0.7, top_p=0.9, repetition_penalty=1.1, do_sample=True ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response.split("ASSISTANT:")[-1].strip() def run(): model_path = "./" # Path to the directory containing your model weight files model, tokenizer = load_model(model_path) result = generate_response(model, tokenizer, JSON_INPUT) print(result) if __name__ == "__main__": run()