|
|
import streamlit as st |
|
|
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer |
|
|
from typing import List, Dict |
|
|
import os |
|
|
|
|
|
|
|
|
model_name = "your_huggingface_model_name" |
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
|
try: |
|
|
model = AutoModelForCausalLM.from_pretrained(model_name) |
|
|
generator = pipeline("text-generation", model=model, tokenizer=tokenizer) |
|
|
except Exception as e: |
|
|
st.error(f"Error initializing the model '{model_name}': {e}") |
|
|
|
|
|
|
|
|
def generate_osint_results(prompt: str, history: List[Dict[str, str]]) -> List[str]: |
|
|
""" |
|
|
Simulates generating OSINT-based results from the user's input. |
|
|
Args: |
|
|
prompt (str): The user's input to the simulator. |
|
|
history (List[Dict]): The user's message history with timestamps. |
|
|
Returns: |
|
|
List[str]: A list of OSINT responses from the AI. |
|
|
""" |
|
|
|
|
|
if not prompt.strip(): |
|
|
return ["Error: Prompt cannot be empty."] |
|
|
if not isinstance(history, list) or not all(isinstance(h, dict) for h in history): |
|
|
return ["Error: History must be a list of dictionaries."] |
|
|
|
|
|
|
|
|
messages = [{"role": "system", "content": f"Responding to OSINT prompt: {prompt}"}] |
|
|
for val in history: |
|
|
if "user" in val: |
|
|
messages.append({"role": "user", "content": val["user"]}) |
|
|
if "assistant" in val: |
|
|
messages.append({"role": "assistant", "content": val["assistant"]}) |
|
|
|
|
|
|
|
|
messages.append({"role": "user", "content": prompt}) |
|
|
|
|
|
|
|
|
try: |
|
|
response = generator(messages[-1]["content"], max_length=100, num_return_sequences=1) |
|
|
return [response[0]["generated_text"]] |
|
|
except Exception as e: |
|
|
return [f"Error generating response: {e}"] |
|
|
|
|
|
|
|
|
def fine_tune_model(dataset: str) -> str: |
|
|
""" |
|
|
Fine-tunes the model using the uploaded dataset. |
|
|
Args: |
|
|
dataset (str): The path to the dataset for fine-tuning. |
|
|
Returns: |
|
|
str: A message indicating whether fine-tuning was successful or failed. |
|
|
""" |
|
|
try: |
|
|
|
|
|
with open(dataset, "r") as file: |
|
|
data = file.readlines() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model.save_pretrained("./fine_tuned_model") |
|
|
return "Model fine-tuned successfully!" |
|
|
except Exception as e: |
|
|
return f"Error fine-tuning the model: {e}" |
|
|
|
|
|
|
|
|
st.title("OSINT Tool") |
|
|
st.write("This tool generates OSINT-based results and allows you to fine-tune the model with custom datasets.") |
|
|
|
|
|
|
|
|
prompt = st.text_area("Enter your OSINT prompt here...", placeholder="Type your prompt here...") |
|
|
history = [] |
|
|
|
|
|
|
|
|
if "history" not in st.session_state: |
|
|
st.session_state.history = [] |
|
|
|
|
|
|
|
|
st.write("### Message History:") |
|
|
for msg in st.session_state.history: |
|
|
st.write(f"**User**: {msg['user']}") |
|
|
st.write(f"**Assistant**: {msg['assistant']}") |
|
|
|
|
|
|
|
|
dataset_file = st.file_uploader("Upload a dataset for fine-tuning", type=["txt"]) |
|
|
|
|
|
if dataset_file is not None: |
|
|
|
|
|
dataset_path = os.path.join("uploads", dataset_file.name) |
|
|
with open(dataset_path, "wb") as f: |
|
|
f.write(dataset_file.read()) |
|
|
|
|
|
|
|
|
fine_tuning_status = fine_tune_model(dataset_path) |
|
|
st.success(fine_tuning_status) |
|
|
|
|
|
|
|
|
if st.button("Generate OSINT Results"): |
|
|
if prompt: |
|
|
response = generate_osint_results(prompt, st.session_state.history) |
|
|
st.session_state.history.append({"user": prompt, "assistant": response[0]}) |
|
|
st.write("### Generated OSINT Result:") |
|
|
st.write(response[0]) |
|
|
else: |
|
|
st.error("Please enter a prompt.") |
|
|
|
|
|
|
|
|
if os.path.exists("./fine_tuned_model"): |
|
|
st.write("The model has been fine-tuned and saved as `fine_tuned_model`.") |
|
|
|