Spaces:
No application file
No application file
from transformers import LlamaForCausalLM, LlamaTokenizer | |
import torch | |
from playwright.sync_api import sync_playwright | |
from fastapi import FastAPI | |
from pydantic import BaseModel | |
app = FastAPI() | |
# Define the input model for the request | |
class InputData(BaseModel): | |
text: str | |
# Load LLaMA 2 model and tokenizer | |
model_name = "meta-llama/Llama-2-7b-hf" # Use appropriate LLaMA 2 model variant | |
tokenizer = LlamaTokenizer.from_pretrained(model_name) | |
model = LlamaForCausalLM.from_pretrained(model_name) | |
# Example function to generate alternative locators using LLaMA 2 | |
def generate_alternative_locators(html_content, failed_locator): | |
prompt = f""" | |
The following HTML structure contains a failing locator: "{failed_locator}". | |
Suggest alternative XPaths or CSS selectors that could identify the same element. | |
HTML: | |
{html_content} | |
""" | |
inputs = tokenizer(prompt, return_tensors="pt") | |
outputs = model.generate(inputs["input_ids"], max_length=500) | |
response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
suggestions = response.split("\n") # Assuming each suggestion is on a new line | |
return suggestions | |
# Example of self-healing process using Playwright and LLaMA 2 suggestions | |
def attempt_self_healing(page, failed_locator: str): | |
# Retrieve HTML of the page | |
html = page.content() | |
# Get alternative locators from LLaMA 2 | |
suggestions = generate_alternative_locators(html, failed_locator) | |
print("Suggested alternatives:", suggestions) | |
# Attempt to click with alternative locators | |
for locator in suggestions: | |
try: | |
page.locator(locator.strip()).click() | |
print(f"Self-healing successful with locator: {locator}") | |
return | |
except Exception as e: | |
print(f"Locator failed: {locator}, Error: {e}") | |
print("Self-healing failed. No valid locator found.") | |