Skip to content

Commit dd5bc56

Browse files
authored
Merge branch 'main' into staging/deploy
2 parents ef0f620 + 28d16a9 commit dd5bc56

File tree

330 files changed

+1526
-2444
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

330 files changed

+1526
-2444
lines changed

Dockerfile

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ COPY src/backend src/backend
4545
COPY docker_scripts/ ${PG_APP_HOME}/
4646

4747
# Install frontend dependencies
48-
WORKDIR /workspace/src/interfaces/coral_web
49-
COPY src/interfaces/coral_web/src ./src
50-
COPY src/interfaces/coral_web/public ./public
51-
COPY src/interfaces/coral_web/next.config.mjs .
52-
COPY src/interfaces/coral_web/tsconfig.json .
53-
COPY src/interfaces/coral_web/tailwind.config.js .
54-
COPY src/interfaces/coral_web/postcss.config.js .
55-
COPY src/interfaces/coral_web/package.json src/interfaces/coral_web/yarn.lock* src/interfaces/coral_web/package-lock.json* src/interfaces/coral_web/pnpm-lock.yaml* ./
56-
COPY src/interfaces/coral_web/.env.development .
57-
COPY src/interfaces/coral_web/.env.production .
48+
WORKDIR /workspace/src/interfaces/assistants_web
49+
COPY src/interfaces/assistants_web/src ./src
50+
COPY src/interfaces/assistants_web/public ./public
51+
COPY src/interfaces/assistants_web/next.config.mjs .
52+
COPY src/interfaces/assistants_web/tsconfig.json .
53+
COPY src/interfaces/assistants_web/tailwind.config.js .
54+
COPY src/interfaces/assistants_web/postcss.config.js .
55+
COPY src/interfaces/assistants_web/package.json src/interfaces/assistants_web/yarn.lock* src/interfaces/assistants_web/package-lock.json* src/interfaces/assistants_web/pnpm-lock.yaml* ./
56+
COPY src/interfaces/assistants_web/.env.development .
57+
COPY src/interfaces/assistants_web/.env.production .
5858

5959
ENV NEXT_PUBLIC_API_HOSTNAME='/api'
6060
RUN npm install \

Makefile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ exec-db:
4444

4545
.PHONY: migration
4646
migration:
47-
docker compose run --build backend alembic -c src/backend/alembic.ini revision --autogenerate
47+
docker compose run --build backend alembic -c src/backend/alembic.ini revision --autogenerate -m "$(message)"
4848

4949
.PHONY: migrate
5050
migrate:
@@ -100,19 +100,19 @@ win-first-run:
100100

101101
.PHONY: format-web
102102
format-web:
103-
cd src/interfaces/coral_web && npm run format:write
103+
cd src/interfaces/assistants_web && npm run format:write
104104

105105
.PHONY: generate-client-web
106106
generate-client-web:
107-
cd src/interfaces/coral_web && npm run generate:client && npm run format:write
107+
cd src/interfaces/assistants_web && npm run generate:client && npm run format:write
108108

109109
.PHONY: install-web
110110
install-web:
111-
cd src/interfaces/coral_web && npm install
111+
cd src/interfaces/assistants_web && npm install
112112

113113
.PHONY: build-web
114114
build-web:
115-
cd src/interfaces/coral_web && npm run build
115+
cd src/interfaces/assistants_web && npm run build
116116

117117
.PHONY: test-db
118118
test-db:

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ services:
141141
frontend:
142142
build:
143143
target: ${BUILD_TARGET:-prod}
144-
context: ./src/interfaces/coral_web
144+
context: ./src/interfaces/assistants_web
145145
dockerfile: Dockerfile
146146
# Set environment variables directly in the docker-compose file
147147
environment:
@@ -158,7 +158,7 @@ services:
158158
develop:
159159
watch:
160160
- action: sync
161-
path: ./src/interfaces/coral_web
161+
path: ./src/interfaces/assistants_web
162162
target: /app
163163
ignore:
164164
- node_modules/

docker_scripts/functions

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,14 +270,14 @@ run_backend_poetry() {
270270
}
271271

272272
run_frontend_proxy() {
273-
cd /workspace/src/interfaces/coral_web
273+
cd /workspace/src/interfaces/assistants_web
274274
echo "Starting Frontend..."
275275
pm2 start npm -- run -- start:single-docker-proxy
276276
echo "Frontend started..."
277277
}
278278

279279
run_frontend() {
280-
cd /workspace/src/interfaces/coral_web
280+
cd /workspace/src/interfaces/assistants_web
281281
echo "Building Frontend"
282282
npm run next:build
283283
echo "Starting Frontend..."
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""Remove file path
2+
3+
Revision ID: 08bcb9a24d9b
4+
Revises: c301506b3676
5+
Create Date: 2024-08-21 15:59:18.678457
6+
7+
"""
8+
from typing import Sequence, Union
9+
10+
import sqlalchemy as sa
11+
from alembic import op
12+
13+
# revision identifiers, used by Alembic.
14+
revision: str = '08bcb9a24d9b'
15+
down_revision: Union[str, None] = 'c301506b3676'
16+
branch_labels: Union[str, Sequence[str], None] = None
17+
depends_on: Union[str, Sequence[str], None] = None
18+
19+
20+
def upgrade() -> None:
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.drop_column('files', 'file_path')
23+
# ### end Alembic commands ###
24+
25+
26+
def downgrade() -> None:
27+
# ### commands auto generated by Alembic - please adjust! ###
28+
op.add_column('files', sa.Column('file_path', sa.VARCHAR(), autoincrement=False, nullable=False))
29+
# ### end Alembic commands ###

src/backend/chat/custom/tool_calls.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,16 @@ async def _call_tool_async(
7878
) -> List[Dict[str, Any]]:
7979
tool = AVAILABLE_TOOLS.get(tool_call["name"])
8080
if not tool:
81-
return []
81+
logger.info(
82+
event=f"[Custom Chat] Tool not included in tools parameter: {tool_call['name']}",
83+
)
84+
outputs = [
85+
{
86+
"call": tool_call,
87+
"outputs": [{"text": f"Tool {tool_call['name']} not found", "success": False}],
88+
}
89+
]
90+
return outputs
8291

8392
try:
8493
outputs = await tool.implementation().call(

src/backend/config/settings.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class CompassSettings(BaseSettings, BaseModel):
146146
)
147147

148148

149-
class WebSearchSettings(BaseSettings, BaseModel):
149+
class TavilySearchSettings(BaseSettings, BaseModel):
150150
model_config = SETTINGS_CONFIG
151151
api_key: Optional[str] = Field(
152152
default=None, validation_alias=AliasChoices("TAVILY_API_KEY", "api_key")
@@ -185,7 +185,7 @@ class ToolSettings(BaseSettings, BaseModel):
185185
python_interpreter: Optional[PythonToolSettings] = Field(
186186
default=PythonToolSettings()
187187
)
188-
web_search: Optional[WebSearchSettings] = Field(default=WebSearchSettings())
188+
tavily: Optional[TavilySearchSettings] = Field(default=TavilySearchSettings())
189189
wolfram_alpha: Optional[WolframAlphaSettings] = Field(
190190
default=WolframAlphaSettings()
191191
)

src/backend/crud/agent_tool_metadata.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def create_agent_tool_metadata(
2525

2626
def get_agent_tool_metadata_by_id(
2727
db: Session, agent_tool_metadata_id: str
28-
) -> AgentToolMetadata:
28+
) -> AgentToolMetadata | None:
2929
"""
3030
Get a agent tool metadata by its ID.
3131
@@ -61,6 +61,35 @@ def get_all_agent_tool_metadata_by_agent_id(
6161
)
6262

6363

64+
def get_agent_tool_metadata(
65+
db: Session,
66+
agent_id: str,
67+
tool_name: str,
68+
user_id: str,
69+
) -> AgentToolMetadata | None:
70+
"""
71+
Get a agent tool metadata.
72+
73+
Args:
74+
db (Session): Database session.
75+
agent_id (str): Agent ID.
76+
tool_name (str): Tool name.
77+
user_id (str): User ID.
78+
79+
Returns:
80+
AgentToolMetadata: Agent tool metadata.
81+
"""
82+
return (
83+
db.query(AgentToolMetadata)
84+
.filter(
85+
AgentToolMetadata.agent_id == agent_id,
86+
AgentToolMetadata.tool_name == tool_name,
87+
AgentToolMetadata.user_id == user_id,
88+
)
89+
.first()
90+
)
91+
92+
6493
def update_agent_tool_metadata(
6594
db: Session,
6695
agent_tool_metadata: AgentToolMetadata,

src/backend/database_models/file.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ class File(Base):
99

1010
user_id: Mapped[str] = mapped_column(String, nullable=True)
1111
file_name: Mapped[str]
12-
file_path: Mapped[str]
1312
file_size: Mapped[int] = mapped_column(default=0)
1413
file_content: Mapped[str] = mapped_column(default="")
1514

src/backend/model_deployments/bedrock.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ class BedrockDeployment(BaseDeployment):
3333

3434
def __init__(self, **kwargs: Any):
3535
self.client = cohere.BedrockClient(
36-
# TODO: remove hardcoded models once the SDK is updated
37-
chat_model="cohere.command-r-plus-v1:0",
38-
embed_model="cohere.embed-multilingual-v3",
39-
generate_model="cohere.command-text-v14",
4036
aws_access_key=get_model_config_var(
4137
BEDROCK_ACCESS_KEY_ENV_VAR, BedrockDeployment.access_key, **kwargs
4238
),

src/backend/routers/agent.py

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ async def create_agent(
138138
}
139139
)
140140
if file_ids:
141-
await consolidate_agent_files_in_compass(file_ids, created_agent.id)
141+
await consolidate_agent_files_in_compass(file_ids, created_agent.id, ctx)
142142

143143
if deployment_db and model_db:
144144
deployment_config = (
@@ -384,6 +384,43 @@ async def update_agent(
384384
return agent
385385

386386

387+
@router.delete("/{agent_id}", response_model=DeleteAgent)
388+
async def delete_agent(
389+
agent_id: str,
390+
session: DBSessionDep,
391+
ctx: Context = Depends(get_context),
392+
) -> DeleteAgent:
393+
"""
394+
Delete an agent by ID.
395+
396+
Args:
397+
agent_id (str): Agent ID.
398+
session (DBSessionDep): Database session.
399+
ctx (Context): Context object.
400+
401+
Returns:
402+
DeleteAgent: Empty response.
403+
404+
Raises:
405+
HTTPException: If the agent with the given ID is not found.
406+
"""
407+
user_id = ctx.get_user_id()
408+
ctx.with_event_type(MetricsMessageType.ASSISTANT_DELETED)
409+
agent = validate_agent_exists(session, agent_id, user_id)
410+
agent_schema = Agent.model_validate(agent)
411+
ctx.with_agent(agent_schema)
412+
ctx.with_metrics_agent(agent_to_metrics_agent(agent))
413+
414+
deleted = agent_crud.delete_agent(session, agent_id, user_id)
415+
if not deleted:
416+
raise HTTPException(status_code=401, detail="Could not delete Agent.")
417+
418+
return DeleteAgent()
419+
420+
421+
# Agent Tool Metadata endpoints
422+
423+
387424
async def handle_tool_metadata_update(
388425
agent: Agent,
389426
new_agent: Agent,
@@ -453,43 +490,6 @@ async def update_or_create_tool_metadata(
453490
create_agent_tool_metadata(session, agent.id, create_metadata_req, ctx)
454491

455492

456-
@router.delete("/{agent_id}", response_model=DeleteAgent)
457-
async def delete_agent(
458-
agent_id: str,
459-
session: DBSessionDep,
460-
ctx: Context = Depends(get_context),
461-
) -> DeleteAgent:
462-
"""
463-
Delete an agent by ID.
464-
465-
Args:
466-
agent_id (str): Agent ID.
467-
session (DBSessionDep): Database session.
468-
ctx (Context): Context object.
469-
470-
Returns:
471-
DeleteAgent: Empty response.
472-
473-
Raises:
474-
HTTPException: If the agent with the given ID is not found.
475-
"""
476-
user_id = ctx.get_user_id()
477-
ctx.with_event_type(MetricsMessageType.ASSISTANT_DELETED)
478-
agent = validate_agent_exists(session, agent_id, user_id)
479-
agent_schema = Agent.model_validate(agent)
480-
ctx.with_agent(agent_schema)
481-
ctx.with_metrics_agent(agent_to_metrics_agent(agent))
482-
483-
deleted = agent_crud.delete_agent(session, agent_id, user_id)
484-
if not deleted:
485-
raise HTTPException(status_code=401, detail="Could not delete Agent.")
486-
487-
return DeleteAgent()
488-
489-
490-
# Tool Metadata Endpoints
491-
492-
493493
@router.get("/{agent_id}/tool-metadata", response_model=list[AgentToolMetadataPublic])
494494
async def list_agent_tool_metadata(
495495
agent_id: str, session: DBSessionDep, ctx: Context = Depends(get_context)
@@ -539,7 +539,7 @@ def create_agent_tool_metadata(
539539
ctx (Context): Context object.
540540
541541
Returns:
542-
AgentToolMetadata: Created agent tool metadata.
542+
AgentToolMetadataPublic: Created agent tool metadata.
543543
544544
Raises:
545545
HTTPException: If the agent tool metadata creation fails.

src/backend/schemas/file.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import datetime
2+
from typing import Optional
23

34
from pydantic import BaseModel, Field
45

@@ -9,10 +10,9 @@ class File(BaseModel):
910
updated_at: datetime.datetime
1011

1112
user_id: str
12-
conversation_id: str
13-
file_content: str
13+
conversation_id: Optional[str] = ""
14+
file_content: Optional[str] = ""
1415
file_name: str
15-
file_path: str
1616
file_size: int = Field(default=0, ge=0)
1717

1818
class Config:
@@ -26,7 +26,6 @@ class ConversationFilePublic(BaseModel):
2626

2727
conversation_id: str
2828
file_name: str
29-
file_path: str
3029
file_size: int = Field(default=0, ge=0)
3130

3231

@@ -37,7 +36,6 @@ class AgentFilePublic(BaseModel):
3736
updated_at: datetime.datetime
3837

3938
file_name: str
40-
file_path: str
4139
file_size: int = Field(default=0, ge=0)
4240

4341
class ListConversationFile(ConversationFilePublic):

0 commit comments

Comments
 (0)