Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post Reply
Cgallegoa
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Contact:

Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post by Cgallegoa »

Connecting FiveWin / xHarbour with OpenAI API :D

Image

Code: Select all | Expand

#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. )
//------------------------------------------------------------//
 
Last edited by Cgallegoa on Wed Dec 07, 2022 8:56 pm, edited 1 time in total.
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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

// 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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
JoseAlvarez
Posts: 807
Joined: Sun Nov 09, 2014 5:01 pm

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post by JoseAlvarez »

¡muy interesante!

Serias tan amable de dejarnos aca un breve resumen de donde encontrar informacion de como ir incursionando en esto?
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
cnavarro
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post by cnavarro »

Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
Antonio Linares
Site Admin
Posts: 42273
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Cgallegoa
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Contact:

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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.
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
Cgallegoa
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador
Contact:

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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.
Saludos,

Carlos Gallego

*** FWH-24.07, xHarbour 1.3.1 Build 20240624, Borland C++7.70, PellesC ***
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
cmsoft
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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
Verhoven
Posts: 522
Joined: Sun Oct 09, 2005 7:23 pm

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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.
User avatar
wilsongamboa
Posts: 600
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
User avatar
Jimmy
Posts: 1733
Joined: Thu Sep 05, 2019 5:32 am
Location: Hamburg, Germany

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post 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
greeting,
Jimmy
User avatar
Antonio Linares
Site Admin
Posts: 42273
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Conectando FiveWin / xHarbour con ChatGPT OpenAI

Post by Antonio Linares »

Dear Jimmy,

I fully agree with you :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply