IA con https://console.groq.com
Posted: Thu Feb 27, 2025 5:52 pm
Hola,
Para los que quieran trabajar con este otro LLM https://console.groq.com/login, que proporciona API's para trabajar de manera gratuita, les copio la clase que hice siguiendo la base de la clase TGemini de FWH25.01 hecha por Antonio:
Por el momento este LLM no permite enviar documentos, pero al menos es una opcion para proabar la IA sin necesidad de pagar por las API Key's
Espero les sirva.
Saludos cordiales.
Carlos Sincuir
Para los que quieran trabajar con este otro LLM https://console.groq.com/login, que proporciona API's para trabajar de manera gratuita, les copio la clase que hice siguiendo la base de la clase TGemini de FWH25.01 hecha por Antonio:
Code: Select all | Expand
//----------------------------------------------------------------------------//
// Clase: TGroq
// Desarrollado por: Carlos Sincuir
// Version FWH: 25.01
// Obtenga su API key desde https://console.groq.com/login
//----------------------------------------------------------------------------//
#include "FiveWin.ch"
#include "hbcurl.ch"
function Main()
local oChat := TGroq():New("tuApiKey")
oChat:Send( "Hola, quien eres ?" )
? oChat:GetValue()
oChat:End()
return nil
//----------------------------------------------------------------------------//
CLASS TGroq
DATA cKey INIT ""
DATA cModel INIT "llama3-70b-8192"
DATA cResponse
DATA cUrl INIT ""
DATA cUploadUrl INIT ""
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA nTemperature INIT 0
METHOD New( cKey, cModel )
METHOD Send( cPrompt )
METHOD End()
METHOD GetValue()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cKey, cModel ) CLASS TGroq
if Empty( cKey )
::cKey = GetEnv( "GROQ_API_KEY" )
else
::cKey = cKey
endif
if ! Empty( cModel )
::cModel = cModel
endif
if Val( SubStr( Curl_Version_Info()[ 1 ], 1, RAt( ".", Curl_Version_Info()[ 1 ] ) - 1 ) ) - 8.10 > 0.2
MsgAlert( "Please use an updated curl DLL" )
endif
::cUrl = "https://api.groq.com/openai/v1/chat/completions"
::hCurl = curl_easy_init()
return Self
//----------------------------------------------------------------------------//
METHOD End() CLASS TGroq
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
//----------------------------------------------------------------------------//
METHOD GetValue() CLASS TGroq
local uValue, hResponse
if ! Empty( ::cResponse )
uValue = hb_jsonDecode( ::cResponse, @hResponse )
endif
if hb_isHash( hResponse )
TRY
uValue = hResponse[ "choices" ][ 1 ][ "message" ][ "content" ]
CATCH
TRY
uValue = hResponse[ "error" ][ "message" ]
CATCH
uValue = "Error, no response"
END
END
endif
return uValue
//----------------------------------------------------------------------------//
METHOD Send( cPrompt ) CLASS TGroq
local aHeaders, cJson, hRequest, hMessages
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { "Content-Type: application/json",;
"Authorization: Bearer " + ::cKey } // Tu API key de Groq
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, "" )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
// Estructura del JSON para Groq
hMessages := { { "role" => "user", "content" => cPrompt } }
hRequest := { "model" => ::cModel,;
"temperature" => ::nTemperature,;
"messages" => hMessages }
cJson := hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
if ::nError == HB_CURLE_OK
::cResponse := curl_easy_dl_buff_get( ::hCurl )
else
::cResponse := "Error code " + Str( ::nError )
endif
return ::cResponse
//----------------------------------------------------------------------------//
Espero les sirva.
Saludos cordiales.
Carlos Sincuir