Skip to content

Port to embedding-3-large #198

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ AZURE_OPENAI_ENDPOINT=https://YOUR-AZURE-OPENAI-SERVICE-NAME.openai.azure.com
AZURE_OPENAI_VERSION=2024-03-01-preview
AZURE_OPENAI_CHAT_DEPLOYMENT=gpt-4o-mini
AZURE_OPENAI_CHAT_MODEL=gpt-4o-mini
AZURE_OPENAI_EMBED_DEPLOYMENT=text-embedding-ada-002
AZURE_OPENAI_EMBED_MODEL=text-embedding-ada-002
AZURE_OPENAI_EMBED_DIMENSIONS=1536
AZURE_OPENAI_EMBEDDING_COLUMN=embedding_ada002
AZURE_OPENAI_EMBED_DEPLOYMENT=text-embedding-3-large
AZURE_OPENAI_EMBED_MODEL=text-embedding-3-large
AZURE_OPENAI_EMBED_DIMENSIONS=1024
AZURE_OPENAI_EMBEDDING_COLUMN=embedding_3l
AZURE_OPENAI_EVAL_DEPLOYMENT=gpt-4
AZURE_OPENAI_EVAL_MODEL=gpt-4
AZURE_TENANT_ID=
Expand All @@ -27,9 +27,9 @@ AZURE_OPENAI_KEY=
# Needed for OpenAI.com:
OPENAICOM_KEY=YOUR-OPENAI-API-KEY
OPENAICOM_CHAT_MODEL=gpt-3.5-turbo
OPENAICOM_EMBED_MODEL=text-embedding-ada-002
OPENAICOM_EMBED_MODEL_DIMENSIONS=1536
OPENAICOM_EMBEDDING_COLUMN=embedding_ada002
OPENAICOM_EMBED_MODEL=text-embedding-3-large
OPENAICOM_EMBED_MODEL_DIMENSIONS=1024
OPENAICOM_EMBEDDING_COLUMN=embedding_3l
# Needed for Ollama:
OLLAMA_ENDPOINT=http://host.docker.internal:11434/v1
OLLAMA_CHAT_MODEL=llama3.1
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Once you've opened the project in [Codespaces](#github-codespaces), [Dev Contain
azd up
```

You will be asked to select two locations, first a region for most of the resources (Container Apps, PostgreSQL), then a region specifically for the Azure OpenAI models. This project uses the gpt-4o-mini and text-embedding-ada-002 models which may not be available in all Azure regions. Check for [up-to-date region availability](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#standard-deployment-model-availability) and select a region accordingly.
You will be asked to select two locations, first a region for most of the resources (Container Apps, PostgreSQL), then a region specifically for the Azure OpenAI models. This project uses the gpt-4o-mini and text-embedding-3-large models which may not be available in all Azure regions. Check for [up-to-date region availability](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#standard-deployment-model-availability) and select a region accordingly.

## Local Development

Expand Down
4 changes: 2 additions & 2 deletions infra/main.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -303,11 +303,11 @@ var webAppEnv = union(azureOpenAIKeyEnv, openAIComKeyEnv, [
}
{
name: 'OPENAICOM_EMBED_MODEL_DIMENSIONS'
value: openAIEmbedHost == 'openaicom' ? '1536' : ''
value: openAIEmbedHost == 'openaicom' ? '1024' : ''
}
{
name: 'OPENAICOM_EMBED_MODEL'
value: openAIEmbedHost == 'openaicom' ? 'text-embedding-ada-002' : ''
value: openAIEmbedHost == 'openaicom' ? 'text-embedding-3-large' : ''
}
{
name: 'AZURE_OPENAI_EMBED_MODEL'
Expand Down
10 changes: 5 additions & 5 deletions infra/main.parameters.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,22 +69,22 @@
"value": "${OPENAI_EMBED_HOST=azure}"
},
"embedModelName":{
"value": "${AZURE_OPENAI_EMBED_MODEL=text-embedding-ada-002}"
"value": "${AZURE_OPENAI_EMBED_MODEL=text-embedding-3-large}"
},
"embedDeploymentName": {
"value": "${AZURE_OPENAI_EMBED_DEPLOYMENT=text-embedding-ada-002}"
"value": "${AZURE_OPENAI_EMBED_DEPLOYMENT=text-embedding-3-large}"
},
"embedDeploymentVersion":{
"value": "${AZURE_OPENAI_EMBED_DEPLOYMENT_VERSION=2}"
"value": "${AZURE_OPENAI_EMBED_DEPLOYMENT_VERSION=1}"
},
"embedDeploymentSku": {
"value": "${AZURE_OPENAI_EMBED_DEPLOYMENT_SKU=Standard}"
"value": "${AZURE_OPENAI_EMBED_DEPLOYMENT_SKU=GlobalStandard}"
},
"embedDeploymentCapacity":{
"value": "${AZURE_OPENAI_EMBED_DEPLOYMENT_CAPACITY=30}"
},
"embedDimensions": {
"value": "${AZURE_OPENAI_EMBED_DIMENSIONS=1536}"
"value": "${AZURE_OPENAI_EMBED_DIMENSIONS=1024}"
},
"openAIComKey": {
"value": "${OPENAICOM_KEY}"
Expand Down
14 changes: 7 additions & 7 deletions src/backend/fastapi_app/dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,20 +42,20 @@ async def common_parameters():
OPENAI_EMBED_HOST = os.getenv("OPENAI_EMBED_HOST")
OPENAI_CHAT_HOST = os.getenv("OPENAI_CHAT_HOST")
if OPENAI_EMBED_HOST == "azure":
openai_embed_deployment = os.getenv("AZURE_OPENAI_EMBED_DEPLOYMENT") or "text-embedding-ada-002"
openai_embed_model = os.getenv("AZURE_OPENAI_EMBED_MODEL") or "text-embedding-ada-002"
openai_embed_dimensions = int(os.getenv("AZURE_OPENAI_EMBED_DIMENSIONS") or 1536)
embedding_column = os.getenv("AZURE_OPENAI_EMBEDDING_COLUMN") or "embedding_ada002"
openai_embed_deployment = os.getenv("AZURE_OPENAI_EMBED_DEPLOYMENT") or "text-embedding-3-large"
openai_embed_model = os.getenv("AZURE_OPENAI_EMBED_MODEL") or "text-embedding-3-large"
openai_embed_dimensions = int(os.getenv("AZURE_OPENAI_EMBED_DIMENSIONS") or 1024)
embedding_column = os.getenv("AZURE_OPENAI_EMBEDDING_COLUMN") or "embedding_3l"
elif OPENAI_EMBED_HOST == "ollama":
openai_embed_deployment = None
openai_embed_model = os.getenv("OLLAMA_EMBED_MODEL") or "nomic-embed-text"
openai_embed_dimensions = None
embedding_column = os.getenv("OLLAMA_EMBEDDING_COLUMN") or "embedding_nomic"
else:
openai_embed_deployment = None
openai_embed_model = os.getenv("OPENAICOM_EMBED_MODEL") or "text-embedding-ada-002"
openai_embed_dimensions = int(os.getenv("OPENAICOM_EMBED_DIMENSIONS", 1536))
embedding_column = os.getenv("OPENAICOM_EMBEDDING_COLUMN") or "embedding_ada002"
openai_embed_model = os.getenv("OPENAICOM_EMBED_MODEL") or "text-embedding-3-large"
openai_embed_dimensions = int(os.getenv("OPENAICOM_EMBED_DIMENSIONS", 1024))
embedding_column = os.getenv("OPENAICOM_EMBEDDING_COLUMN") or "embedding_3l"
if OPENAI_CHAT_HOST == "azure":
openai_chat_deployment = os.getenv("AZURE_OPENAI_CHAT_DEPLOYMENT") or "gpt-4o-mini"
openai_chat_model = os.getenv("AZURE_OPENAI_CHAT_MODEL") or "gpt-4o-mini"
Expand Down
14 changes: 7 additions & 7 deletions src/backend/fastapi_app/postgres_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ class Item(Base):
description: Mapped[str] = mapped_column()
price: Mapped[float] = mapped_column()
# Embeddings for different models:
embedding_ada002: Mapped[Vector] = mapped_column(Vector(1536), nullable=True) # ada-002
embedding_3l: Mapped[Vector] = mapped_column(Vector(1024), nullable=True) # text-embedding-3-large
embedding_nomic: Mapped[Vector] = mapped_column(Vector(768), nullable=True) # nomic-embed-text

def to_dict(self, include_embedding: bool = False):
model_dict = {column.name: getattr(self, column.name) for column in self.__table__.columns}
if include_embedding:
model_dict["embedding_ada002"] = model_dict.get("embedding_ada002", [])
model_dict["embedding_3l"] = model_dict.get("embedding_3l", [])
model_dict["embedding_nomic"] = model_dict.get("embedding_nomic", [])
else:
del model_dict["embedding_ada002"]
del model_dict["embedding_3l"]
del model_dict["embedding_nomic"]
return model_dict

Expand All @@ -51,12 +51,12 @@ def to_str_for_embedding(self):

table_name = Item.__tablename__

index_ada002 = Index(
f"hnsw_index_for_cosine_{table_name}_embedding_ada002",
Item.embedding_ada002,
index_3l = Index(
f"hnsw_index_for_cosine_{table_name}_embedding_3l",
Item.embedding_3l,
postgresql_using="hnsw",
postgresql_with={"m": 16, "ef_construction": 64},
postgresql_ops={"embedding_ada002": "vector_cosine_ops"},
postgresql_ops={"embedding_3l": "vector_cosine_ops"},
)

index_nomic = Index(
Expand Down
2 changes: 1 addition & 1 deletion src/backend/fastapi_app/routes/api_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ async def similar_handler(
f"SELECT *, {context.embedding_column} <=> :embedding as DISTANCE FROM {Item.__tablename__} "
"WHERE id <> :item_id ORDER BY distance LIMIT :n"
),
{"embedding": item.embedding_ada002, "n": n, "item_id": id},
{"embedding": item.embedding_3l, "n": n, "item_id": id},
)
).fetchall()

Expand Down
Loading
Loading