% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/acep_gemini.R
\name{acep_gemini}
\alias{acep_gemini}
\title{Interaccion con modelos Gemini usando Structured Outputs}
\usage{
acep_gemini(
  texto,
  instrucciones,
  modelo = "gemini-2.5-flash",
  api_key = Sys.getenv("GEMINI_API_KEY"),
  schema = NULL,
  parse_json = TRUE,
  temperature = 0,
  max_tokens = 2000,
  top_p = 0.95,
  top_k = 40,
  timeout = 120
)
}
\arguments{
\item{texto}{Texto a analizar con Gemini. Puede ser una noticia, tweet, documento, etc.}

\item{instrucciones}{Instrucciones en lenguaje natural que indican al modelo que hacer
con el texto. Ejemplo: "Extrae todas las entidades nombradas", "Clasifica el sentimiento".}

\item{modelo}{Modelo de Gemini a utilizar. Opciones recomendadas:
- Gemini 2.5: `"gemini-2.5-flash"` (rapido, multimodal, por defecto),
  `"gemini-2.5-flash-lite"` (mas economico), `"gemini-2.5-pro"` (mas potente)
- Gemini 2.0: `"gemini-2.0-flash"`, `"gemini-2.0-flash-lite"`
Por defecto: `"gemini-2.5-flash"`. Ver: https://ai.google.dev/gemini-api/docs/models}

\item{api_key}{Clave de API de Google Gemini. Si no se proporciona, busca la variable de
entorno `GEMINI_API_KEY`. Para obtener una clave: https://aistudio.google.com/apikey}

\item{schema}{Esquema JSON que define la estructura de la respuesta. Puede usar
`acep_gpt_schema()` para obtener esquemas predefinidos o crear uno personalizado.
Si es `NULL`, usa un esquema simple con campo "respuesta".
NOTA: Gemini usa un subconjunto de OpenAPI 3.0 Schema para definir estructuras.}

\item{parse_json}{Logico. Si `TRUE` (por defecto), parsea automaticamente el JSON
a un objeto R (lista o data frame). Si `FALSE`, devuelve el JSON como string.}

\item{temperature}{Parametro de temperatura (0-2). Valores bajos (0-0.3) generan
respuestas mas deterministas. Valores altos (0.7-1) mas creativas. Por defecto: 0.
Valor recomendado por Google: 1.0.}

\item{max_tokens}{Numero maximo de tokens en la respuesta. Por defecto: 2000.}

\item{top_p}{Parametro top-p para nucleus sampling (0-1). Controla la diversidad
de la respuesta. Por defecto: 0.95 (valor tipico para Gemini).}

\item{top_k}{Parametro top-k. Limita la seleccion a los K tokens mas probables.
Por defecto: 40 (valor tipico para Gemini).}

\item{timeout}{Tiempo maximo de espera de la peticion HTTP en segundos.
Por defecto: 120. Evita que una conexion estancada bloquee la sesion de R.}
}
\value{
Si `parse_json=TRUE`, devuelve una lista o data frame con la respuesta
  estructurada segun el esquema. Si `parse_json=FALSE`, devuelve un string JSON.
}
\description{
Funcion para interactuar con la API de Google Gemini utilizando Structured Outputs
nativos. Gemini soporta generacion de JSON estructurado mediante el parametro
`responseSchema` que garantiza que las respuestas cumplan con el esquema definido.
Compatible con todos los modelos Gemini 2.5 y Gemini 2.0. Acceso gratuito para
uso limitado disponible en Google AI Studio.
}
\details{
La API de Gemini usa un enfoque diferente para structured outputs:
- Define `responseMimeType: "application/json"` en `generationConfig`
- Usa `responseSchema` con formato OpenAPI 3.0 Schema
- Soporta tipos: string, integer, number, boolean, array, object
- Campo opcional `propertyOrdering` controla orden de propiedades en respuesta

Diferencias importantes con OpenAI:
- No requiere campo `additionalProperties: false` (se maneja automaticamente)
- Los campos son opcionales por defecto (usar `required` para campos obligatorios)
- El esquema cuenta como tokens de entrada
}
\examples{
\dontrun{
# Configurar API key
Sys.setenv(GEMINI_API_KEY = "tu-api-key")

# Extraer entidades con Gemini 2.5 Flash
texto <- "El SUTEBA convoco a un paro en Buenos Aires el 15 de marzo."
resultado <- acep_gemini(texto, "Extrae las entidades nombradas",
                         schema = acep_gpt_schema("extraccion_entidades"))

# Analisis de sentimiento con modelo economico
resultado <- acep_gemini(texto, "Analiza el sentimiento",
                         modelo = "gemini-2.5-flash-lite",
                         schema = acep_gpt_schema("sentimiento"))

# Usar Gemini 2.0 Flash Lite (mas rapido)
resultado <- acep_gemini(texto, "Extrae entidades",
                         modelo = "gemini-2.0-flash-lite",
                         schema = acep_gpt_schema("extraccion_entidades"))
}
}
