|
|
|
|
|
from UI import create_interface |
|
from models import BioprocessModel |
|
import io |
|
from PIL import Image |
|
import pandas as pd |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
import torch |
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
import copy |
|
from config import DEVICE, MODEL_PATH, MAX_LENGTH, TEMPERATURE |
|
|
|
device = DEVICE |
|
model_path = MODEL_PATH |
|
tokenizer = AutoTokenizer.from_pretrained(model_path) |
|
model = AutoModelForCausalLM.from_pretrained(model_path).to(device).eval() |
|
|
|
def generate_analysis(prompt, max_length=MAX_LENGTH): |
|
try: |
|
input_ids = tokenizer.encode(prompt, return_tensors='pt').to(device) |
|
generated_ids = model.generate( |
|
input_ids=input_ids, |
|
max_length=max_length + len(input_ids[0]), |
|
temperature=TEMPERATURE, |
|
num_return_sequences=1, |
|
no_repeat_ngram_size=2, |
|
early_stopping=True |
|
) |
|
output_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True) |
|
analysis = output_text[len(prompt):].strip() |
|
return analysis |
|
except Exception as e: |
|
return f"An error occurred during analysis: {e}" |
|
|
|
def parse_bounds(bounds_str, num_params): |
|
try: |
|
bounds = eval(f"[{bounds_str}]") |
|
if len(bounds) != num_params: |
|
raise ValueError |
|
lower_bounds = [b[0] for b in bounds] |
|
upper_bounds = [b[1] for b in bounds] |
|
return lower_bounds, upper_bounds |
|
except: |
|
lower_bounds = [-np.inf] * num_params |
|
upper_bounds = [np.inf] * num_params |
|
return lower_bounds, upper_bounds |
|
|
|
def process_and_plot( |
|
file, |
|
biomass_equations_list, |
|
biomass_params_list, |
|
biomass_bounds_list, |
|
substrate_equations_list, |
|
substrate_params_list, |
|
substrate_bounds_list, |
|
product_equations_list, |
|
product_params_list, |
|
product_bounds_list, |
|
legend_position, |
|
show_legend, |
|
show_params, |
|
biomass_eq_count, |
|
substrate_eq_count, |
|
product_eq_count |
|
): |
|
|
|
|
|
return [image], analysis |
|
|
|
if __name__ == "__main__": |
|
demo = create_interface(process_and_plot) |
|
demo.launch() |
|
|