Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import torch | |
| from transformers import AutoTokenizer, AutoModelForCausalLM | |
| # Set page title and icon | |
| st.set_page_config(page_title="SecureFin AI Analyzer", page_icon="🛡️") | |
| # --- MODEL LOADING --- | |
| def load_model(): | |
| model_id = "zoraiz112/SecureFin-SLM-1.5B-Final" | |
| # Load tokenizer and model | |
| tokenizer = AutoTokenizer.from_pretrained(model_id) | |
| # Use device_map="auto" to handle CPU or GPU automatically in the Space | |
| model = AutoModelForCausalLM.from_pretrained( | |
| model_id, | |
| torch_dtype=torch.float32, # CPU-friendly | |
| device_map="auto" | |
| ) | |
| return tokenizer, model | |
| st.title("🛡️ SecureFin AI: Fraud Detection Agent") | |
| st.markdown("Enter transaction details below for a deep-learning security analysis.") | |
| # Load the model (this shows a spinner while loading) | |
| with st.spinner("Initializing SecureFin Engine... (this may take a minute)"): | |
| tokenizer, model = load_model() | |
| # --- SIDEBAR INPUTS --- | |
| st.sidebar.header("Transaction Details") | |
| amount = st.sidebar.text_input("Amount ($)", "5000.00") | |
| location = st.sidebar.text_input("Location", "Unknown IP / Foreign Country") | |
| category = st.sidebar.selectbox("Category", ["Crypto Exchange", "High-Value Tech", "ATM Withdrawal", "Grocery", "Other"]) | |
| time = st.sidebar.text_input("Time of Day", "3:45 AM") | |
| # --- ANALYSIS LOGIC --- | |
| if st.button("Analyze for Fraud"): | |
| # Create the prompt for the fine-tuned model | |
| input_text = f"""Analyze this transaction for potential fraud: | |
| - Amount: ${amount} | |
| - Location: {location} | |
| - Category: {category} | |
| - Time: {time} | |
| Status:""" | |
| with st.spinner("Analyzing patterns..."): | |
| # Tokenize and Generate | |
| inputs = tokenizer(input_text, return_tensors="pt") | |
| # Move to same device as model | |
| inputs = {k: v.to(model.device) for k, v in inputs.items()} | |
| output_tokens = model.generate( | |
| **inputs, | |
| max_new_tokens=200, | |
| temperature=0.1, | |
| do_sample=True | |
| ) | |
| response = tokenizer.decode(output_tokens[0], skip_special_tokens=True) | |
| # Display the result | |
| st.subheader("Analysis Result") | |
| # Clean up the output to only show the model's new text | |
| cleaned_response = response.split("Status:")[-1].strip() | |
| st.info(cleaned_response) | |
| st.divider() | |
| st.caption("SecureFin AI v1.0 | Built on Qwen-2.5-1.5B-Merged") |