Page 1 of 1

Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Dec 07, 2022 5:23 pm
by Cgallegoa
Connecting FiveWin / xHarbour with OpenAI API :D

Image

Code: Select all  Expand view
#include "FiveWin.ch"

#define EM_LIMITTEXT 197


Function Main()
   LOCAL oDlg, oGet1, cVar1 := "Hola OpenAI, cómo estás ? Me llamo Carlos, tú tienes nombre ?"
   LOCAL oGet2, cVar2 := Space(2048)
   LOCAL oFont1, oFont2, oBtn1, oSay1, oSay2
   LOCAL nChars := 2048
   TBtnBmp():lLegacyLookLeftRight := .T.
   
   cVar1 := "Puedes mostrarme el código de un programa escrito en lenguaje Harbour que en la function main tenga un Alert que diga 'Hola Mundo' ?"
   
   DEFINE FONT oFont1 NAME "Verdana" SIZE 0,-12 BOLD
   DEFINE FONT oFont2 NAME "Verdana" SIZE 0,-12
   DEFINE DIALOG oDlg FROM 0,0 TO 39,107 TRUEPIXEL TITLE "Taking with OPENAI API"
   
       @ 10,270 SAY "Talking with OPENAI API" OF oDlg FONT oFont1 SIZE 300,15PIXEL CENTER
       @ 28,20 SAY "You:" OF oDlg FONT oFont1 SIZE 50,15 PIXEL
   
       @ 28,680 SAY oSay1 VAR "Caracteres: 0 / "+cValToChar(nChars) OF oDlg PIXEL;
                        SIZE 120,15 UPDATE CENTER
   
       @ 45,20 GET oGet1 VAR cVar1 OF oDlg PIXEL SIZE 800,200 MEMO FONT oFont2;
               ON CHANGE(SB_LimitText(oGet1, oSay1, nChars))
            oGet1:bGotfocus := {||oGet1:SetSel(0,0)}
   
       @ 250,345 BTNBMP PROMPT "Submit" OF oDlg PIXEL ACTION Api_OpenAI(cVar1, oGet2) SIZE 150,45;
             FILE "openai24x24.png" LEFT NOBORDER 2007
   
       @ 300,20 SAY "OPENAI:" OF oDlg FONT oFont1 SIZE 70,15 PIXEL
   
       @ 317,20 GET oGet2 VAR cVar2 OF oDlg PIXEL SIZE 800,200 MEMO FONT oFont2
            oGet2:bGotfocus := {||oGet2:SetSel(0,0)}
   
       @ 535,620 BTNBMP PROMPT "Close" OF oDlg PIXEL ACTION oDlg:End() SIZE 150,45;
             FILE "exit24x24.png" LEFT NOBORDER 2007
   
       oDlg:bInit := {|| oGet1:SetFocus(),;
                          oGet1:LimitText(nChars),;
                          oSay1:VarPut("Caracteres: " + cValToChar(LEN( ALLTRIM( oGet1:cText ) )) + " / " + cValToChar(nChars)),;
                          oSay1:Refresh()}
   
   ACTIVATE DIALOG oDlg CENTERED ON PAINT oGet1:SetPos(0)
   
Return(NIL)
//------------------------------------------------------------//


Function Api_OpenAI(cPrompt, oGet2)
   LOCAL oSoap := CreateObject( "MSXML2.ServerXMLHTTP.6.0")
   LOCAL cUrl   := "https://api.openai.com/v1/engines/text-davinci-003/completions"
   LOCAL cToken := "sk-nxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxxnxnxnxnxnx"
   LOCAL cJSon, cRespApi, hResp := {=>}, cResp
   
   TEXT INTO cJson
        {
            "prompt": "cPrompt_empty",
            "temperature": 0,
            "max_tokens": 2048
        }
   ENDTEXT
   
   cPrompt := AllTrim(cPrompt)
   cJson := StrTran(cJson, "cPrompt_empty", cPrompt)
   
   oSoap:SetTimeouts(30000,30000,30000,30000)
   TRY
      oSoap:Open( "POST" , cUrl , .F. )
      oSoap:SetRequestHeader( "Content-Type", "application/json; charset=utf-8" )
      oSoap:setRequestHeader("Authorization", "Bearer "+cToken )
      oSoap:Send(cJson)
   
      cRespApi := Alltrim(oSoap:responseText)
      hb_jsondecode(cRespApi,@hResp)
   
      cResp := hResp["choices"][1]["text"]
      cResp := StrTran(cResp, Chr(10), Chr(13)+Chr(10))
      oGet2:VarPut( AllTrim(cResp) )
      oGet2:Refresh()
   
     // MsgInfo( oSoap:Status )
   
   CATCH
      msginfo("Mensaje en el CATCH"+CRLF+CRLF+ "No hay conexión con el servidor de Rindegastos."+CRLF+ "  Por favor vuelva a intentarlo.","Intente Nuevamente")
   
   END
   
Return(oSoap)
//------------------------------------------------------------//


FUNCTION SB_LimitText( oGet, oSay, nLimObserv )
   ///////////////////////////////////////////////////////////////////////////
   // Autor..........: Peguei no Forum FiveWin Brasil                       //
   // Modificaçoes...: Ale SB - Soft Camus                                  //
   // Descricao......: Restringe o Tamanho de um Texto.                     //
   // Parametros ==>                                                        //
   //  - oGet  : oBjeto Get.                                                //
   //  - nSize : Tamanho que deve ter o Texto.                              //
   // Dependencias ==>                                                      //
   // Retorno ==> nil                                                       //
   ///////////////////////////////////////////////////////////////////////////
   LOCAL nTam, nSize
   DEFAULT nSize := nLimObserv  // 19  // 99 // maximo e 100 caracteres
   nTam := LEN( ALLTRIM( oGet:cText ) )
   IF nTam > nSize
      Msginfo( "Lo siento, no puedo continuar, el tamaño máximo " + ;
               "ha excedido el límite permitido.", "Atención por favor." )
      oGet:cText := Substr(oGet:cText, 1, nTam-1)
      RETURN( .F. )
   ENDIF
   oSay:VarPut("Caracteres: " + cValToChar(nTam) + " / " + cValToChar(nLimObserv))
     oSay:Refresh()
RETURN( .T. )
//------------------------------------------------------------//
 

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Dec 07, 2022 6:40 pm
by karinha
Good Afternoon Carlos Gallego, how do I get a key (password) to test your beautiful example? Thanks.

{
"error": {
"message": "You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY), or as the password field (with blank username) if you're accessing the API from your browser and are prompted for a username and password. You can obtain an API key from https://beta.openai.com.
"type": "invalid_request_error",
"param": null,
"code": null
}
}

Code: Select all  Expand view

// C:\FWH..\SAMPLES\OPENAPI.PRG

#include "FiveWin.ch"

#define EM_LIMITTEXT 197

FUNCTION Main()

   LOCAL oDlg, oGet1, cVar1 := "Hola OpenAI, cómo estás ? Me llamo Carlos, tú tienes nombre ?"
   LOCAL oGet2, cVar2 := Space( 2048 )
   LOCAL oFont1, oFont2, oBtn1, oSay1, oSay2
   LOCAL nChars := 2048

   SkinButtons()

   IF FWVERSION >= "FWHX 19.06"

      TBtnBmp():lLegacyLookLeftRight := .T.

   ENDIF

   cVar1 := "Puedes mostrarme el código de un programa escrito en " + ;
            "lenguaje Harbour que en la function main tenga un "    + ;
            "Alert que diga 'Hola Mundo' ?"

   DEFINE FONT oFont1 NAME "Verdana" SIZE 0, - 12 BOLD
   DEFINE FONT oFont2 NAME "Verdana" SIZE 0, - 12

   DEFINE DIALOG oDlg FROM 0, 0 TO 39, 107 TRUEPIXEL ;
      TITLE "Taking with OPENAI API"

   oDlg:lHelpIcon := .F.

   @ 10, 270 SAY "Talking with OPENAI API" OF oDlg FONT oFont1 SIZE 300, 15  ;
      PIXEL CENTER

   @ 28, 20 SAY "You:" OF oDlg FONT oFont1 SIZE 50, 15 PIXEL

   @ 28, 680 SAY oSay1 VAR "Caracteres: 0 / " + cValToChar( nChars ) ;
      OF oDlg PIXEL SIZE 120, 15 UPDATE CENTER

   @ 45, 20 GET oGet1 VAR cVar1 OF oDlg PIXEL SIZE 800, 200 MEMO FONT oFont2 ;
      ON CHANGE( SB_LimitText( oGet1, oSay1, nChars ) )

   oGet1:bGotfocus := {|| oGet1:SetSel( 0, 0 ) }

   @ 250, 345 BTNBMP PROMPT "Submit" OF oDlg PIXEL   ;
      ACTION Api_OpenAI( cVar1, oGet2 ) SIZE 150, 45 ;
      FILE "openai24x24.png" LEFT NOBORDER 2007

   @ 300, 20 SAY "OPENAI:" OF oDlg FONT oFont1 SIZE 70, 15 PIXEL

   @ 317, 20 GET oGet2 VAR cVar2 OF oDlg PIXEL SIZE 800, 200 MEMO FONT oFont2

   oGet2:bGotfocus := {|| oGet2:SetSel( 0, 0 ) }

   @ 535, 620 BTNBMP PROMPT "Close" OF oDlg PIXEL ;
      ACTION oDlg:End() SIZE 150, 45              ;
      FILE "exit24x24.png" LEFT NOBORDER 2007

   oDlg:bInit := {|| oGet1:SetFocus(),                   ;
   oGet1:LimitText( nChars ),                            ;
   oSay1:VarPut( "Caracteres: " +                        ;
   cValToChar( Len( AllTrim( oGet1:cText ) ) ) + " / " + ;
   cValToChar( nChars ) ),                               ;
   oSay1:Refresh() }

   ACTIVATE DIALOG oDlg CENTERED ON PAINT( oGet1:SetPos( 0 ) )

   oFont1:End()
   oFont2:End()

RETURN NIL

FUNCTION Api_OpenAI( cPrompt, oGet2 )

   LOCAL oSoap  // := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
   LOCAL cUrl   := "https://api.openai.com/v1/engines/text-davinci-003/completions"
   LOCAL cToken := "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"
   LOCAL cJSon, cRespApi, hResp := { => }, cResp

   TEXT INTO cJson
      {
         "prompt": "cPrompt_empty",
         "temperature": 0,
         "max_tokens": 2048
      }
   ENDTEXT

   cPrompt := AllTrim( cPrompt )
   cJson   := StrTran( cJson, "cPrompt_empty", cPrompt )

   #ifdef __XHARBOUR__  // xHarbour

      Try

         oSoap := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )

      Catch

         MsgInfo( "xHarbour: errore connessione msxml2, uso microsoft " )

         RETURN NIL

      End

   #else //Harbour

      Try

         oSoap := win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0" )

      Catch

         MsgInfo( "Harbour: errore connessione msxml2, uso microsoft " )

         RETURN NIL

      End

   #endif

   oSoap:SetTimeouts( 30000, 30000, 30000, 30000 )

   TRY

      oSoap:Open( "POST", cUrl, .F. )
      oSoap:SetRequestHeader( "Content-Type", "application/json; charset=utf-8" )
      oSoap:setRequestHeader( "Authorization", "Bearer " + cToken )
      oSoap:Send( cJson )

      cRespApi := AllTrim( oSoap:responseText )

      hb_jsonDecode( cRespApi, @hResp )

      cResp := hResp[ "choices" ][ 1 ][ "text" ]
      cResp := StrTran( cResp, Chr( 10 ), Chr( 13 ) + Chr( 10 ) )

      oGet2:VarPut( AllTrim( cResp ) )
      oGet2:Refresh()

      // MsgInfo( oSoap:Status )

   CATCH

      MsgInfo( "Mensaje en el CATCH" + CRLF + CRLF + ;
               "No hay conexión con el servidor de Rindegastos." + CRLF + ;
               "  Por favor vuelva a intentarlo.", "Intente Nuevamente" )

   END

Return( oSoap )

FUNCTION SB_LimitText( oGet, oSay, nLimObserv )

   // /////////////////////////////////////////////////////////////////////////
   // Autor..........: Peguei no Forum FiveWin Brasil                       //
   // Modificaçoes...: Ale SB - Soft Camus                                  //
   // Descricao......: Restringe o Tamanho de um Texto.                     //
   // Parametros ==>                                                        //
   // - oGet  : oBjeto Get.                                                //
   // - nSize : Tamanho que deve ter o Texto.                              //
   // Dependencias ==>                                                      //
   // Retorno ==> nil                                                       //
   // /////////////////////////////////////////////////////////////////////////
   LOCAL nTam, nSize

   DEFAULT nSize := nLimObserv  // 19  // 99 // maximo e 100 caracteres

   nTam := Len( AllTrim( oGet:cText ) )

   IF nTam > nSize

      MsgInfo( "Lo siento, no puedo continuar, el tamaño máximo " + ;
               "ha excedido el límite permitido.", "Atención por favor." )

      oGet:cText := SubStr( oGet:cText, 1, nTam - 1 )

      RETURN( .F. )

   ENDIF

   oSay:VarPut( "Caracteres: " + cValToChar( nTam ) + " / " + ;
      cValToChar( nLimObserv ) )

   oSay:Refresh()

RETURN( .T. )

// FIN / END
 


Regards, saludos.

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Dec 07, 2022 7:02 pm
by JoseAlvarez
¡muy interesante!

Serias tan amable de dejarnos aca un breve resumen de donde encontrar informacion de como ir incursionando en esto?

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Dec 07, 2022 7:26 pm
by cnavarro

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Dec 07, 2022 8:27 pm
by Antonio Linares
Estimado Carlos,

Muchas gracias por tu ejemplo pero ojo que has dejado tu key en el código y es privada, puede generarte gastos.

Por favor, edita tu mensaje y borra la key por tu bien :-)

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Dec 07, 2022 9:11 pm
by Cgallegoa
Antonio gracias.

Estaba tan emocionado que se me pasó por alto.

No hay problema. Se elimina ese token y se genera uno nuevo.

Desde ayer estoy engolosinado con esto. Ya hasta le puse nombre (Alf, como el extraterrestre de la TV), nos tratamos de tú, y hasta nos hacemos bromas, y aunque no es 100% perfecto ni coherente en todo, la verdad que es fantástico. Es como una película de ciencia ficción.

Claro que a veces te responde todo al revés pero la experiencia vale la pena, sobre todo cuando puedes ver cómo va aprendiendo a medida que le haces notar los errores que comete.

Ayer le pedí que resolviera una serie de ecuaciones simples. Al comienzo respondió erróneamente. Conforme le vas explicando en dónde se equivoca, corrige y te pide disculpas por haberse equivocado :D Alucinante

Ahora, a ver qué provecho práctico podemos implementar en nuestros programas.

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Dec 07, 2022 9:20 pm
by Cgallegoa
João, Jose:

Hay que registrarse en https://openai.com/api/

Una vez registrado y que se active la cuenta, se ingresa a https://beta.openai.com/overview

Allí, en la parte superior deracha en donde aparece el nombre con el que te registraste, se puede generar el Token

Recomiendo primero un repaso a la documentación en https://beta.openai.com/docs/introduction

A ver si entre todos logramos algo intersante.

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Thu Dec 08, 2022 12:38 pm
by karinha
Cgallegoa wrote:João, Jose:

Hay que registrarse en https://openai.com/api/

Una vez registrado y que se active la cuenta, se ingresa a https://beta.openai.com/overview

Allí, en la parte superior deracha en donde aparece el nombre con el que te registraste, se puede generar el Token

Recomiendo primero un repaso a la documentación en https://beta.openai.com/docs/introduction

A ver si entre todos logramos algo intersante.


Gracias.

Regards, saludos.

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Thu Dec 08, 2022 12:59 pm
by cmsoft
Carlos:
Muchas gracias por el aporte.
Parece ciencia ficción, tal cual lo dices.
A experimentar a ver que provecho práctico le sacamos

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Sun Jan 15, 2023 8:00 pm
by Verhoven
Ya los más iluminados le han pensado sacar partido:
https://www.elconfidencial.com/alma-cor ... t_3555482/

Por cierto, dice que gasta, solo el chat, 2.000.000 $ a la hora, en un día 48.000.000 $.
Esto viene a suponer unos 200.000.000 kwh=200M kwh al día. Y a eso habría que sumarle el gasto de infrestructura de inet, la renovación de equipos yo creo que no menos de cada 4-5 años (queremos estar a la uúltima en tecnología).

No se ustedes cómo de inteligente encuentran esto. Me parece a mi que no es más que mera fuerza bruta de cálculo. Personas, comiendo galletas, leche, huevos fritos, filetes y lechuga desarrollaron las matemáticas, física y química tal como las conocemos, mandaron al hombre a la luna y descubrieron América guiándose por las estrellas. Eso si es Inteligencia.

Por otro lado que no nos digan que nuestro viejo motor diesel provoca el cambio climático con la que hay que montar para tener ese chat andando. Le pueden tomar el pelo a otro.

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Tue Jan 17, 2023 12:23 am
by wilsongamboa
en 2008 estudie nuevamente en mi universidad alli el problema era COPY PASTE ja ja ja ahora veo que sigue siendo lo mismo pero mas sofisticado IA en mi caso el mejor profesor que tuve recibia los trabajos
- Escritos a mano en papel cuadriculado
- nunca el trabajo tenia que pasar de 7 hojas
- como ya el conocia a cada alumno ( habia charlado largamente con cada uno ) si habia algo sospechoso solo ponia CERO
seguimos igual en ciertas cosas
saludos
Wilson

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Wed Jan 18, 2023 6:25 pm
by Jimmy
hi

ChatGPT is a nice Tool ... but it "can" produce a lot FAKE
Do NOT trust ChatGPT and verify Answer before use it

---

i use ChatGPT and ask for CODE
when "verify" Answer, using Compiler, i often get "Syntax Error" or "Missing Function"

ChatGPT is not a Compiler so ChatGPT does not know Syntax or harbour Function.
ChatGPT use a big Database but it does not contain only "right" Answer, it also have "wrong" Question in Database

but how can i User "know" if he is not a "Expert" :?:
IHMO you must be a "Expert" to use ChatGPT to "verify" Answer

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

PostPosted: Thu Jan 19, 2023 7:36 am
by Antonio Linares
Dear Jimmy,

I fully agree with you :-)