Skip to content

Commit 2584b63

Browse files
authored
Merge pull request #16 from madebygps/main
Adds Spanish translations
2 parents 1b864fd + 75e6024 commit 2584b63

20 files changed

+1255
-2
lines changed

chat_pydanticai.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
model = OpenAIModel(os.environ["OLLAMA_MODEL"], api_key="fake", base_url=os.environ["OLLAMA_ENDPOINT"])
2525
elif API_HOST == "github":
2626
model = OpenAIModel(
27-
os.environ["OPENAI_MODEL"], api_key=os.environ["GITHUB_TOKEN"], base_url="https://models.inference.ai.azure.com"
27+
os.environ["GITHUB_MODEL"], api_key=os.environ["GITHUB_TOKEN"], base_url="https://models.inference.ai.azure.com"
2828
)
2929

3030
else:

hybrid.csv

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,4 @@ S400,2013,92350.0,13.89,21.0,Large
151151
Prius Plug-in,2013,32000.0,9.17,50.0,Midsize
152152
C-Max Energi Plug-in,2013,32950.0,11.76,43.0,Midsize
153153
Fusion Energi Plug-in,2013,38700.0,11.76,43.0,Midsize
154-
Chevrolet Volt,2013,39145.0,11.11,37.0,Compact
154+
Chevrolet Volt,2013,39145.0,11.11,37.0,Compact

spanish/README.md

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Demos de Python con OpenAI
2+
3+
Este repositorio contiene una colección de scripts en Python que demuestran cómo usar la API de OpenAI para generar completados de chat.
4+
5+
En orden creciente de complejidad, los scripts son:
6+
7+
1. [`chat.py`](./chat.py): Un script simple que demuestra cómo usar la API de OpenAI para generar completados de chat.
8+
2. [`chat_stream.py`](./chat_stream.py): Añade `stream=True` a la llamada de API para devolver un generador que transmite el completado mientras se está generando.
9+
3. [`chat_history.py`](./chat_history.py): Añade una interfaz de chat bidireccional usando `input()` que mantiene un registro de los mensajes anteriores y los envía con cada llamada de completado de chat.
10+
4. [`chat_history_stream.py`](./chat_history_stream.py): La misma idea, pero con `stream=True` habilitado.
11+
12+
Además de estos scripts para demostrar características adicionales:
13+
14+
* [`chat_safety.py`](./chat_safety.py): El script simple con manejo de excepciones para errores de filtro de Seguridad de Contenido de Azure AI.
15+
* [`chat_async.py`](./chat_async.py): Utiliza los clientes asíncronos para hacer llamadas asincrónicas, incluyendo un ejemplo de envío de múltiples solicitudes a la vez usando `asyncio.gather`.
16+
* [`chat_langchain.py`](./chat_langchain.py): Utiliza el SDK de langchain para generar completados de chat. [Aprende más en la documentación de Langchain](https://python.langchain.com/docs/get_started/quickstart)
17+
* [`chat_llamaindex.py`](./chat_llamaindex.py): Utiliza el SDK de LlamaIndex para generar completados de chat. [Aprende más en la documentación de LlamaIndex](https://docs.llamaindex.ai/en/stable/)
18+
19+
20+
## Configuración del entorno
21+
22+
Si abres esto en un Dev Container o GitHub Codespaces, todo estará configurado para ti.
23+
Si no, sigue estos pasos:
24+
25+
1. Configura un entorno virtual de Python y actívalo.
26+
27+
2. Instala las librerías requeridas:
28+
29+
```bash
30+
python -m pip install -r requirements.txt
31+
```
32+
33+
## Configurando las variables de entorno de OpenAI
34+
35+
Estos scripts pueden ejecutarse con una cuenta de Azure OpenAI, OpenAI.com, servidor local de Ollama o modelos de GitHub, dependiendo de las variables de entorno que configures.
36+
37+
1. Copia el archivo `.env.sample` a un nuevo archivo llamado `.env`:
38+
39+
```bash
40+
cp .env.sample .env
41+
```
42+
43+
2. Para Azure OpenAI, crea un deployment de Azure OpenAI gpt-3.5 o gpt-4 (quizás usando [este template](https://github.com/Azure-Samples/azure-openai-keyless)), and actualiza el `.env` con tu Azure OpenAI endpoint y deployment id.
44+
45+
```bash
46+
API_HOST=azure
47+
AZURE_OPENAI_ENDPOINT=https://YOUR-AZURE-OPENAI-SERVICE-NAME.openai.azure.com
48+
AZURE_OPENAI_DEPLOYMENT=YOUR-AZURE-DEPLOYMENT-NAME
49+
AZURE_OPENAI_VERSION=2024-03-01-preview
50+
```
51+
52+
Si aún no has iniciado sesión en la cuenta de Azure asociada con ese deployment, ejecuta este comando para iniciar sesión:
53+
54+
```shell
55+
az login
56+
```
57+
3. Para OpenAI.com, actualiza el archivo `.env` con tu clave API de OpenAI y el nombre del modelo deseado.
58+
59+
```bash
60+
API_HOST=openai
61+
OPENAI_KEY=TU-CLAVE-API-OPENAI
62+
OPENAI_MODEL=gpt-3.5-turbo
63+
```
64+
65+
4. Para Ollama, actualiza el archivo [.env](http://_vscodecontentref_/0) con tu endpoint de Ollama y nombre del modelo (cualquier modelo que hayas descargado).
66+
67+
```bash
68+
API_HOST=ollama
69+
OLLAMA_ENDPOINT=http://localhost:11434/v1
70+
OLLAMA_MODEL=llama2
71+
```
72+
73+
Si estás ejecutando dentro del Dev Container, reemplaza `localhost` con `host.docker.internal`.
74+
75+
5. Para GitHub Models, actualiza el archivo [.env](http://_vscodecontentref_/1) con el nombre de tu GitHub Model.
76+
77+
```bash
78+
API_HOST=github
79+
GITHUB_MODEL=gpt-4o
80+
```
81+
82+
Necesitarás una variable de entorno `GITHUB_TOKEN` que almacene un token de acceso personal de GitHub.
83+
Si estás ejecutando esto dentro de un GitHub Codespace, el token estará disponible automáticamente.
84+
Si no, genera un nuevo [token de acceso personal](https://github.com/settings/tokens) y ejecuta este comando para establecer la variable de entorno `GITHUB_TOKEN`:
85+
86+
```shell
87+
export GITHUB_TOKEN="<aquí-va-tu-token-de-github>"

spanish/chained_calls.py

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import os
2+
3+
import azure.identity
4+
import openai
5+
from dotenv import load_dotenv
6+
7+
# Setup the OpenAI client to use either Azure, OpenAI.com, or Ollama API
8+
load_dotenv(override=True)
9+
API_HOST = os.getenv("API_HOST")
10+
11+
if API_HOST == "azure":
12+
13+
token_provider = azure.identity.get_bearer_token_provider(
14+
azure.identity.DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
15+
)
16+
client = openai.AzureOpenAI(
17+
api_version=os.environ["AZURE_OPENAI_VERSION"],
18+
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
19+
azure_ad_token_provider=token_provider,
20+
)
21+
MODEL_NAME = os.environ["AZURE_OPENAI_DEPLOYMENT"]
22+
23+
elif API_HOST == "ollama":
24+
25+
client = openai.OpenAI(base_url=os.environ["OLLAMA_ENDPOINT"], api_key="nokeyneeded")
26+
MODEL_NAME = os.environ["OLLAMA_MODEL"]
27+
28+
elif API_HOST == "github":
29+
30+
client = openai.OpenAI(base_url="https://models.inference.ai.azure.com", api_key=os.environ["GITHUB_TOKEN"])
31+
MODEL_NAME = os.environ["GITHUB_MODEL"]
32+
33+
else:
34+
35+
client = openai.OpenAI(api_key=os.environ["OPENAI_KEY"])
36+
MODEL_NAME = os.environ["OPENAI_MODEL"]
37+
38+
39+
response = client.chat.completions.create(
40+
model=MODEL_NAME,
41+
temperature=0.7,
42+
messages=[{"role": "user", "content": "Explica cómo funcionan los LLM en un solo párrafo."}],
43+
)
44+
45+
explanation = response.choices[0].message.content
46+
print("Explicación: ", explanation)
47+
response = client.chat.completions.create(
48+
model=MODEL_NAME,
49+
temperature=0.7,
50+
messages=[
51+
{
52+
"role": "user",
53+
"content": (
54+
"Eres un editor. Revisa la explicación y proporciona comentarios detallados sobre claridad, coherencia "
55+
"y cautivación (pero no la edites tú mismo):\n\n"
56+
)
57+
+ explanation,
58+
}
59+
],
60+
)
61+
62+
feedback = response.choices[0].message.content
63+
print("\n\nRetroalimentación: ", feedback)
64+
65+
response = client.chat.completions.create(
66+
model=MODEL_NAME,
67+
temperature=0.7,
68+
messages=[
69+
{
70+
"role": "user",
71+
"content": (
72+
"Revisa el artículo utilizando los siguientes comentarios, pero mantenlo a un solo párrafo."
73+
f"\nExplicación:\n{explanation}\n\nComentarios:\n{feedback}"
74+
),
75+
}
76+
],
77+
)
78+
79+
final_article = response.choices[0].message.content
80+
print("\n\nFinal Article: ", final_article)

spanish/chat.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import os
2+
3+
import azure.identity
4+
import openai
5+
from dotenv import load_dotenv
6+
7+
# Setup the OpenAI client to use either Azure, OpenAI.com, or Ollama API
8+
load_dotenv(override=True)
9+
API_HOST = os.getenv("API_HOST")
10+
11+
if API_HOST == "azure":
12+
13+
token_provider = azure.identity.get_bearer_token_provider(
14+
azure.identity.DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
15+
)
16+
client = openai.AzureOpenAI(
17+
api_version=os.environ["AZURE_OPENAI_VERSION"],
18+
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
19+
azure_ad_token_provider=token_provider,
20+
)
21+
MODEL_NAME = os.environ["AZURE_OPENAI_DEPLOYMENT"]
22+
23+
elif API_HOST == "ollama":
24+
25+
client = openai.OpenAI(base_url=os.environ["OLLAMA_ENDPOINT"], api_key="nokeyneeded")
26+
MODEL_NAME = os.environ["OLLAMA_MODEL"]
27+
28+
elif API_HOST == "github":
29+
30+
client = openai.OpenAI(base_url="https://models.inference.ai.azure.com", api_key=os.environ["GITHUB_TOKEN"])
31+
MODEL_NAME = os.environ["GITHUB_MODEL"]
32+
33+
else:
34+
35+
client = openai.OpenAI(api_key=os.environ["OPENAI_KEY"])
36+
MODEL_NAME = os.environ["OPENAI_MODEL"]
37+
38+
39+
response = client.chat.completions.create(
40+
model=MODEL_NAME,
41+
temperature=0.7,
42+
n=1,
43+
messages=[
44+
{"role": "system", "content": "Eres un asistente útil que hace muchas referencias a gatos y usa emojis."},
45+
{"role": "user", "content": "Escribe un haiku sobre un gato hambriento que quiere atún"},
46+
],
47+
)
48+
49+
print(f"Response from {API_HOST}: \n")
50+
print(response.choices[0].message.content)

spanish/chat_async.py

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import asyncio
2+
import os
3+
4+
import azure.identity
5+
import openai
6+
from dotenv import load_dotenv
7+
8+
# Setup the OpenAI client to use either Azure, OpenAI.com, or Ollama API
9+
load_dotenv(override=True)
10+
API_HOST = os.getenv("API_HOST")
11+
12+
if API_HOST == "azure":
13+
token_provider = azure.identity.get_bearer_token_provider(
14+
azure.identity.DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
15+
)
16+
client = openai.AsyncAzureOpenAI(
17+
api_version=os.environ["AZURE_OPENAI_VERSION"],
18+
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
19+
azure_ad_token_provider=token_provider,
20+
)
21+
MODEL_NAME = os.environ["AZURE_OPENAI_DEPLOYMENT"]
22+
elif API_HOST == "ollama":
23+
client = openai.AsyncOpenAI(base_url=os.environ["OLLAMA_ENDPOINT"], api_key="nokeyneeded")
24+
MODEL_NAME = os.environ["OLLAMA_MODEL"]
25+
elif API_HOST == "github":
26+
client = openai.AsyncOpenAI(base_url="https://models.inference.ai.azure.com", api_key=os.environ["GITHUB_TOKEN"])
27+
MODEL_NAME = os.environ["GITHUB_MODEL"]
28+
else:
29+
client = openai.AsyncOpenAI(api_key=os.environ["OPENAI_KEY"])
30+
MODEL_NAME = os.environ["OPENAI_MODEL"]
31+
32+
33+
async def generate_response(location):
34+
print("Generando respuesta para", location)
35+
response = await client.chat.completions.create(
36+
model=MODEL_NAME,
37+
messages=[
38+
{"role": "system", "content": "Eres un asistente útil."},
39+
{
40+
"role": "user",
41+
"content": (
42+
f"Nombra un solo lugar que debería visitar en mi viaje a {location} y descríbelo en una oración"
43+
),
44+
},
45+
],
46+
temperature=1,
47+
max_tokens=400,
48+
top_p=0.95,
49+
frequency_penalty=0,
50+
presence_penalty=0,
51+
stop=None,
52+
)
53+
print("Obtuve respuesta para ", location)
54+
return response.choices[0].message.content
55+
56+
57+
async def single():
58+
print(await generate_response("Tokio"))
59+
60+
61+
async def multiple():
62+
answers = await asyncio.gather(
63+
generate_response("Tokio"),
64+
generate_response("Berkeley"),
65+
generate_response("Singapur"),
66+
)
67+
for answer in answers:
68+
print(answer, "\n")
69+
70+
71+
asyncio.run(single())

spanish/chat_history.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import os
2+
3+
import azure.identity
4+
import openai
5+
from dotenv import load_dotenv
6+
7+
# Setup the OpenAI client to use either Azure, OpenAI.com, or Ollama API
8+
load_dotenv(override=True)
9+
API_HOST = os.getenv("API_HOST")
10+
11+
if API_HOST == "azure":
12+
token_provider = azure.identity.get_bearer_token_provider(
13+
azure.identity.DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
14+
)
15+
client = openai.AzureOpenAI(
16+
api_version=os.environ["AZURE_OPENAI_VERSION"],
17+
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
18+
azure_ad_token_provider=token_provider,
19+
)
20+
MODEL_NAME = os.environ["AZURE_OPENAI_DEPLOYMENT"]
21+
elif API_HOST == "ollama":
22+
client = openai.OpenAI(base_url=os.environ["OLLAMA_ENDPOINT"], api_key="nokeyneeded")
23+
MODEL_NAME = os.environ["OLLAMA_MODEL"]
24+
elif API_HOST == "github":
25+
client = openai.OpenAI(base_url="https://models.inference.ai.azure.com", api_key=os.environ["GITHUB_TOKEN"])
26+
MODEL_NAME = os.environ["GITHUB_MODEL"]
27+
else:
28+
client = openai.OpenAI(api_key=os.environ["OPENAI_KEY"])
29+
MODEL_NAME = os.environ["OPENAI_MODEL"]
30+
31+
32+
messages = [
33+
{
34+
"role": "system",
35+
"content": ("Soy un asistente de enseñanza que ayuda con preguntas de Python para Berkeley CS 61A."),
36+
},
37+
]
38+
39+
while True:
40+
question = input("\nTu pregunta: ")
41+
print("Enviando pregunta...")
42+
43+
messages.append({"role": "user", "content": question})
44+
response = client.chat.completions.create(
45+
model=MODEL_NAME,
46+
messages=messages,
47+
temperature=1,
48+
max_tokens=400,
49+
top_p=0.95,
50+
frequency_penalty=0,
51+
presence_penalty=0,
52+
stop=None,
53+
)
54+
bot_response = response.choices[0].message.content
55+
messages.append({"role": "assistant", "content": bot_response})
56+
57+
print("Respuesta: ")
58+
print(bot_response)

0 commit comments

Comments
 (0)