Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForSeq2SeqLM | |
| import torch | |
| # All predetermined answers (now inside app.py for simplicity) | |
| PREDETERMINED_ANSWERS = { | |
| "negative reinforcement": { | |
| "definition": "When a behavior increases because it removes/prevents an aversive stimulus.", | |
| "examples": [ | |
| "Child stops whining when seatbelt clicks (removal of annoying sound reinforces buckling)", | |
| "Student completes work to avoid teacher reprimand" | |
| ], | |
| "key_points": [ | |
| "NOT punishment (which decreases behavior)", | |
| "Two types: escape (stop existing stimulus) and avoidance (prevent stimulus)", | |
| "Common in escape-maintained behaviors" | |
| ] | |
| }, | |
| "positive reinforcement": { | |
| "definition": "When a behavior increases because it produces a rewarding consequence.", | |
| "examples": [ | |
| "Child says 'please' and gets a sticker (behavior increases)", | |
| "Employee meets deadline and receives bonus" | |
| ], | |
| "key_points": [ | |
| "Most effective when immediate and contingent", | |
| "Can be tangible (toys) or social (praise)", | |
| "Should be individualized to the learner" | |
| ] | |
| }, | |
| "aba": { | |
| "definition": "Applied Behavior Analysis - scientific approach using learning principles to improve behaviors.", | |
| "examples": [ | |
| "Teaching communication skills using picture exchange", | |
| "Reducing self-injury through functional assessment" | |
| ], | |
| "key_points": [ | |
| "Data-driven decision making", | |
| "Breaks skills into teachable steps", | |
| "Gold-standard for autism treatment", | |
| "Focuses on socially significant behaviors" | |
| ] | |
| }, | |
| "differential reinforcement": { | |
| "definition": "Reinforcing specific behaviors while withholding reinforcement for others.", | |
| "examples": [ | |
| "Rewarding quiet hands while ignoring flapping (DRI)", | |
| "Providing attention for polite requests but not whining (DRA)" | |
| ], | |
| "key_points": [ | |
| "DRA: Alternative behavior", | |
| "DRO: Other behavior (absence of target)", | |
| "DRI: Incompatible behavior", | |
| "Requires consistency to be effective" | |
| ] | |
| }, | |
| "functional behavior assessment": { | |
| "definition": "Process to identify the purpose/function of a behavior.", | |
| "examples": [ | |
| "ABC data collection for aggression", | |
| "Interviews and scatter plots for elopement" | |
| ], | |
| "key_points": [ | |
| "Identifies antecedents and consequences", | |
| "Reveals maintaining variables", | |
| "Foundation for Behavior Intervention Plans" | |
| ] | |
| } | |
| } | |
| def load_model(): | |
| """Load model with optimizations""" | |
| try: | |
| model_name = "google/flan-t5-small" # Smaller = faster | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForSeq2SeqLM.from_pretrained( | |
| model_name, | |
| device_map="auto", # Auto-detects GPU/CPU | |
| torch_dtype=torch.float16, # Faster if GPU available | |
| low_cpu_mem_usage=True | |
| ) | |
| return tokenizer, model | |
| except Exception as e: | |
| print(f"Model failed to load: {e}") | |
| return None, None | |
| def generate_response(question, tokenizer, model): | |
| # Check predetermined answers first (fast path) | |
| question_lower = question.lower().strip() | |
| for key in PREDETERMINED_ANSWERS: | |
| if key in question_lower: | |
| return format_answer(key) # Your formatting function | |
| # Only use model if loaded | |
| if tokenizer and model: | |
| try: | |
| inputs = tokenizer( | |
| f"Answer this ABA question: {question}", | |
| return_tensors="pt", | |
| truncation=True, | |
| max_length=512 | |
| ).to(model.device) | |
| outputs = model.generate( | |
| **inputs, | |
| max_new_tokens=150, # Shorter = faster | |
| temperature=0.7, | |
| do_sample=True | |
| ) | |
| return tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| except Exception as e: | |
| print(f"Generation failed: {e}") | |
| return "I can't generate an answer right now. Try asking about: " + ", ".join(PREDETERMINED_ANSWERS.keys()) | |
| demo.launch() |