Skip to content

Commit

Permalink
Feat: Adiciona versão 2 do gemini_extrair com saída estruturada.
Browse files Browse the repository at this point in the history
  • Loading branch information
jjesusfilho committed Oct 15, 2024
1 parent 5e3b520 commit dc97126
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 0 deletions.
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export(extrair_valor_arbitrado)
export(file_search)
export(filtrar_df)
export(gemini_extrair)
export(gemini_extrair2)
export(gpt_extrair)
export(gpt_json)
export(gpt_ler)
Expand Down
97 changes: 97 additions & 0 deletions R/gemini_extrair.R
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,100 @@ Retorne as respostas em formato json com as seguintes chaves: {colunas}")
extrair <- purrr::insistently(.f, taxa, quiet = FALSE)
extrair()
}


#' Extrai informações de textos judiciais com o GEMINI com saída estruturada
#'
#' @param x Texto
#' @param api_key Chave do GEMINI. Se não informada, buscara a variável de ambiente
#' GEMINI_API_KEY.
#' @param instrucao Orientação ao GEMINI, informando inclusive a delimitação por três
#' apóstrofes.
#' @param perguntas Vetor de perguntas.
#' @param colunas lista com json schema
#' @param modelo Modelo do Gemini
#' @param temperatura Nível de aleatoriedade. Padrão: 0, ou seja, determinístico.
#' @param max_output_tokens = Número máximo na resposta.
#' @param top_p Máxima probabilidade cumulativa para a amostra de tokens.
#' @param top_k Número máximo de tokens incluídos na amostra.
#'
#' @return json
#' @export
#'
gemini_extrair2 <- function(x,
api_key=NULL,
instrucao,
perguntas,
colunas,
modelo = "gemini-1.5-flash",
temperatura = 0,
max_output_tokens = 100000,
top_p = 0.4,
top_k = 2){

if(is.null(api_key)){

api_key = Sys.getenv("GEMINI_API_KEY")
}
uri <- glue::glue("https://generativelanguage.googleapis.com/v1beta/models/{modelo}:generateContent?key={api_key}")


headers <- c(`Content-Type`="application/json")

perguntas <- stringr::str_c(perguntas, collapse = ",\n")

#colunas <- stringr::str_c(colunas, collapse = ", ")

body <- list(contents = list(
parts = list( text = glue::glue("{instrucao} ```{x}```. Responda \u00E0s seguintes perguntas:
{perguntas}")
)),
`safetySettings` = list(
list(category = "HARM_CATEGORY_HARASSMENT",
threshold = "BLOCK_NONE"),
list(category = "HARM_CATEGORY_HATE_SPEECH",
threshold = "BLOCK_NONE"),
list(category = "HARM_CATEGORY_DANGEROUS_CONTENT",
threshold = "BLOCK_NONE"),
list(category = "HARM_CATEGORY_SEXUALLY_EXPLICIT",
threshold = "BLOCK_NONE")
),

`generationConfig` = list(
`response_mime_type` = "application/json",
`response_schema` = list(
type = "OBJECT",
properties = colunas),
temperature = temperatura,
`maxOutputTokens` = max_output_tokens,
topP = top_p,
topK = top_k
)


)


taxa <- purrr::rate_delay(0.2, max_times = 3)


.f <- function(){

r2 <- httr::POST(uri, body = body, encode ="json",
httr::add_headers(.headers = headers))


x1 <- httr::content(r2, "text") |>
jsonlite::fromJSON() |>
purrr::pluck("candidates","content","parts",1,"text") |>
stringr::str_extract("\\{\\X+\\}") |>
jsonlite::prettify()

return(x1)
}


extrair <- purrr::insistently(.f, taxa, quiet = FALSE)
extrair()
}

48 changes: 48 additions & 0 deletions man/gemini_extrair2.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit dc97126

Please sign in to comment.