Spaces:
Sleeping
Sleeping
| import os | |
| import json | |
| from pathlib import Path | |
| from fastapi import APIRouter, HTTPException | |
| from pydantic import BaseModel | |
| import groq | |
| from dotenv import load_dotenv | |
| import logging | |
| # Load environment variables | |
| load_dotenv() | |
| # Initialize Groq client | |
| groq_api_key = os.getenv("GROQ_API_KEY") | |
| groq_client = groq.Groq(api_key=groq_api_key) | |
| groq_model = "llama-3-8b-8192" # Replace with your preferred Groq model | |
| # Define the router | |
| router = APIRouter() | |
| # Define the input model | |
| class InsertGhostRequest(BaseModel): | |
| uid: str | |
| # Prompt generation function | |
| def generate_prompt(contract_text: str) -> str: | |
| """ | |
| Generate a prompt for the Groq LLM to analyze missing clauses in a contract. | |
| """ | |
| return ( | |
| "You are a legal contract analyzer. Analyze the following text and identify clauses that are missing but " | |
| "should be present in a standard contract which can help the user not fall into trouble." | |
| "give at max 5 missing clauses only." | |
| "Make sure not to repeat any clause." | |
| "give only important clauses.When in doubt, leave it out." | |
| "Reply ONLY in a LIST OF JSON objects with the missing clauses.\n\n" | |
| f"Contract Text:\n{contract_text}" # Limit the input to the first 6000 characters if needed | |
| "\n\nRespond in the following JSON format:\n" | |
| "[\n" | |
| " {\n" | |
| " \"clause_name\": \"Name of the missing clause\",\n" | |
| " \"description\": \"Brief description of the clause\",\n" | |
| " \"reason\": \"Reason why this clause is important\"\n" | |
| " },\n" | |
| " ...\n" | |
| "]\n" | |
| "IMPORTANT: Ensure the response is a valid JSON array. Do not include any text outside the JSON array. " | |
| "Do not include explanations, headers, or any other content." | |
| ) | |
| # Define the endpoint | |
| async def insert_ghost(request: InsertGhostRequest): | |
| uid = request.uid | |
| ocr_result_folder = Path("ocr_results") | |
| file_path = ocr_result_folder / f"{uid}.txt" | |
| # Check if the file exists | |
| if not file_path.exists(): | |
| raise HTTPException(status_code=404, detail=f"File {uid}.txt not found in ocr_result folder") | |
| # Read the content of the file | |
| with file_path.open("r") as file: | |
| text_content = file.read() | |
| # Generate the prompt | |
| prompt = generate_prompt(text_content) | |
| # Send the request to Groq LLM | |
| try: | |
| response = groq_client.chat.completions.create( | |
| model="llama-3.1-8b-instant", # Replace with the appropriate model | |
| messages=[{"role": "user", "content": prompt}], | |
| temperature=0.7, | |
| max_tokens=512 | |
| ) | |
| logging.info(f"Groq LLM full response for {uid}: {response.choices[0].message.content}") | |
| result = json.loads(response.choices[0].message.content) | |
| logging.info(f"Groq LLM response for {uid}: {result}") | |
| except Exception as e: | |
| logging.error(f"Error communicating with Groq LLM: {str(e)}") | |
| raise HTTPException(status_code=500, detail=f"Error communicating with Groq LLM: {str(e)}") | |
| # Return the JSON response | |
| return {"uid": uid, "missing_clauses": result} |