Spaces:
Running
Running
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 <OSOBA>. | |
""" | |
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ř. <OSOBA>, {{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Á]]<OSOBA> byl hlavním vědeckým pracovníkem v <ORGANIZACE>.[[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Á]]<OSOBA> žije na adrese <ADRESA>.[[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 |