from collections import namedtuple from typing import Optional import openai from openai import OpenAI, AzureOpenAI import logging logger = logging.getLogger("presidio-streamlit") OpenAIParams = namedtuple( "open_ai_params", ["openai_key", "model", "api_base", "deployment_id", "api_version", "api_type"], ) def call_completion_model( prompt: str, openai_params: OpenAIParams, max_tokens: Optional[int] = 256, ) -> str: """Creates a request for the OpenAI Completion service and returns the response. :param prompt: The prompt for the completion model :param openai_params: OpenAI parameters for the completion model :param max_tokens: The maximum number of tokens to generate. """ if openai_params.api_type.lower() == "azure": client = AzureOpenAI( api_version=openai_params.api_version, api_key=openai_params.openai_key, azure_endpoint=openai_params.api_base, azure_deployment=openai_params.deployment_id, ) else: client = OpenAI(api_key=openai_params.openai_key) try: response = client.completions.create( model=openai_params.model, prompt=prompt, max_tokens=max_tokens, ) return response.choices[0].text.strip() except Exception as e: logger.error(f"Chyba při volání OpenAI API: {str(e)}") return "Došlo k chybě při generování syntetických dat." def create_prompt(anonymized_text: str) -> str: """ Create the prompt with instructions to GPT-3 for generating Czech synthetic text. :param anonymized_text: Text with placeholders instead of PII values, e.g. My name is . """ prompt = f""" Vaším úkolem je vytvořit syntetický text na základě de-identifikovaného textu s zástupnými symboly místo osobních údajů (PII). Nahraďte zástupné symboly (např. , {{DATUM}}, {{IP_ADRESA}}) falešnými hodnotami v českém kontextu. Pokyny: a. Používejte zcela náhodná čísla, každá číslice je náhodně vybrána mezi 0 a 9. b. Používejte realistická česká jména, která představují různá pohlaví a etnické skupiny. c. Pokud v textu nejsou žádné zástupné symboly, vraťte text beze změny. d. Zachovejte formátování co nejblíže původnímu textu. e. Pokud se v textu vyskytují osobní údaje, nahraďte je falešnými hodnotami. f. Odstraňte mezery před a za vygenerovaným textem. g. Používejte české formáty pro data, adresy, telefonní čísla atd. vstup: [[TEXT ZAČÍNÁ]] Jak mohu změnit limit na své kreditní kartě {{ČÍSLO_KARTY}}?[[TEXT KONČÍ]] výstup: Jak mohu změnit limit na své kreditní kartě 2539 3519 2345 1555? vstup: [[TEXT ZAČÍNÁ]] byl hlavním vědeckým pracovníkem v .[[TEXT KONČÍ]] výstup: Ing. Jana Nováková, CSc. byla hlavním vědeckým pracovníkem v Akademii věd ČR. vstup: [[TEXT ZAČÍNÁ]] žije na adrese .[[TEXT KONČÍ]] výstup: Petr Svoboda žije na adrese Dlouhá 254/14, 110 00 Praha 1. vstup: [[TEXT ZAČÍNÁ]]{anonymized_text}[[TEXT KONČÍ]] výstup:""" return prompt