import json import os import re from functools import cache import google.generativeai as genai try: from dotenv import load_dotenv load_dotenv() except: pass generation_config = { "temperature": 0.9, # Temperature of the sampling distribution "top_p": 1, # Probability of sampling from the top p tokens "top_k": 1, # Number of top tokens to sample from "max_output_tokens": 2048, } safety_settings = [ {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"}, {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"}, {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"}, {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_ONLY_HIGH"}, ] gemini_1_0 = genai.GenerativeModel( model_name="gemini-1.0-pro", generation_config=generation_config, safety_settings=safety_settings, ) gemini_1_5 = genai.GenerativeModel( model_name="gemini-1.5-pro-latest", generation_config=generation_config, safety_settings=safety_settings, ) gemini_1_0_vision = genai.GenerativeModel( "gemini-pro-vision", generation_config=generation_config, safety_settings=safety_settings, ) genai.configure(api_key=os.getenv("GEMINI_API_KEY")) @cache def get_file(relative_path: str) -> str: current_path = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(current_path, relative_path) with open(full_path) as f: return f.read() def fix_json(json_str: str) -> str: template = get_file("templates/prompt_json_fix.txt") prompt = template.format(json=json_str) response = gemini_1_0.generate_content(prompt).text return response.split("```json")[1].split("```")[0] def get_json_content(response: str) -> dict: if "```json" not in response: return [] raw_json = response.split("```json")[1].split("```")[0] try: return json.loads(raw_json) except json.JSONDecodeError as e: print(e) new_json = fix_json(raw_json) print(new_json) return json.loads(new_json) def html_title(title: str) -> str: return f"
{output}" def review_table_summary(review: list[dict]) -> str: table = "
Term | Fix | Type | Reason |
---|---|---|---|
{entity['term']} | {entity['fix']} | {entity['type']} | {entity.get('reason', '-')} |