Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
5a2ec60
make server compatible with java 17
bobbai00 Oct 16, 2025
c050948
finish v1 of MCP server
bobbai00 Oct 16, 2025
e65f598
finish v1 of MCP server
bobbai00 Oct 16, 2025
6aabeb5
finish e2e workable version
bobbai00 Oct 17, 2025
680542b
refactor to be more modulized
bobbai00 Oct 17, 2025
aa420fd
add frontend copilot
bobbai00 Oct 17, 2025
7d2cbda
finish end2end v1
bobbai00 Oct 18, 2025
a71cbc7
fix tool call definition
bobbai00 Oct 19, 2025
b92882d
refactor with deep chat
bobbai00 Oct 19, 2025
00a5a0f
make tool call automated
bobbai00 Oct 20, 2025
f5849eb
add more tools
bobbai00 Oct 20, 2025
5873b6d
fix styles
bobbai00 Oct 20, 2025
a1a4e42
fix styles and change to subscriber style
bobbai00 Oct 20, 2025
662879a
fix message trace display
bobbai00 Oct 20, 2025
929239f
refine details
bobbai00 Oct 20, 2025
3d69ff3
adjust the mcp package locations
bobbai00 Oct 20, 2025
bb27cd6
add more tools
bobbai00 Oct 20, 2025
ad35031
improve styles
bobbai00 Oct 21, 2025
219a231
improve styles
bobbai00 Oct 21, 2025
fcd8ad5
fix add operator issue
bobbai00 Oct 21, 2025
1ed62c5
refine the tool calls
bobbai00 Oct 21, 2025
c02190d
further improve the style
bobbai00 Oct 21, 2025
55c25e0
save
bobbai00 Oct 21, 2025
3667116
save yarn lock
bobbai00 Oct 24, 2025
a3e7c3d
save copilot changes
bobbai00 Oct 24, 2025
8221698
add more tools
bobbai00 Oct 25, 2025
9aa833f
make operator result tool more robust
bobbai00 Oct 26, 2025
35b60c0
introduce stop
bobbai00 Oct 27, 2025
6e27645
correct style
bobbai00 Oct 27, 2025
dc94ef7
enable AI customized name
bobbai00 Oct 27, 2025
e3a01e7
add experimental message click button pop up
bobbai00 Oct 28, 2025
7ee327a
Revert "add experimental message click button pop up"
bobbai00 Oct 28, 2025
00df02a
add experimental streamText
bobbai00 Oct 28, 2025
002553b
Revert "add experimental streamText"
bobbai00 Oct 28, 2025
808f629
add inconsistency panel
bobbai00 Oct 28, 2025
aef712d
finish highlight
bobbai00 Oct 28, 2025
4053012
add initial action lineage
bobbai00 Oct 29, 2025
8dd3c63
Revert "add initial action lineage"
bobbai00 Oct 29, 2025
41d0abf
add action plan
bobbai00 Oct 29, 2025
5bca120
introduce message window
bobbai00 Oct 29, 2025
f772812
showing the action plan highlight
bobbai00 Oct 29, 2025
5d38849
finish the action plan ui
bobbai00 Oct 29, 2025
f6a3513
finish refactoring as multi agents
bobbai00 Oct 29, 2025
d99503d
improve the action plan
bobbai00 Oct 30, 2025
0660842
initial prototye of plan
bobbai00 Oct 30, 2025
dac1c91
a working prototype for planning agent
bobbai00 Oct 30, 2025
eb7bd9f
a working prototype for planning agent
bobbai00 Oct 30, 2025
d56e5dd
prototype for fork an agent
bobbai00 Oct 30, 2025
84f45c0
further improve the fork agent
bobbai00 Oct 30, 2025
1c0041b
some refactoring
bobbai00 Oct 30, 2025
792d099
initial refactoring
bobbai00 Oct 31, 2025
a45982a
initial refactoring to prevent multi agent interfere
bobbai00 Oct 31, 2025
ee2b5ac
add agent response
bobbai00 Oct 31, 2025
8702530
further simplification
bobbai00 Oct 31, 2025
9619cd3
fix highlight of action plan
bobbai00 Oct 31, 2025
bd40b71
reformatting message
bobbai00 Oct 31, 2025
b760161
further improve the style
bobbai00 Oct 31, 2025
00401ad
further beautify the style
bobbai00 Oct 31, 2025
f330d71
empty content fix
bobbai00 Oct 31, 2025
29f1d80
initial working version of progress
bobbai00 Oct 31, 2025
65ffed3
refine details
bobbai00 Oct 31, 2025
bc2258c
fixing the progres display
bobbai00 Nov 1, 2025
29d635d
fix the progress display
bobbai00 Nov 1, 2025
9e2e251
finish style fix
bobbai00 Nov 1, 2025
02dd5ef
fix user message rendering
bobbai00 Nov 1, 2025
b756778
unify the agent panel style
bobbai00 Nov 2, 2025
4a64c57
fix action plan styles
bobbai00 Nov 2, 2025
8ace439
simplify message display
bobbai00 Nov 2, 2025
0afd1c1
remove copilot coeditor related service
bobbai00 Nov 2, 2025
709713a
reorg tools
bobbai00 Nov 2, 2025
99e6050
style fix
bobbai00 Nov 2, 2025
e37d5f1
fix CSS
bobbai00 Nov 2, 2025
ec0ceb4
add planning mode
bobbai00 Nov 3, 2025
dca2512
change tool bar css style
bobbai00 Nov 3, 2025
abd42eb
add system prompt display
bobbai00 Nov 3, 2025
4b0c0f4
add stopping check
bobbai00 Nov 3, 2025
55e84f8
fix button location
bobbai00 Nov 3, 2025
c6ea264
remove the mcp server on the backend
bobbai00 Nov 3, 2025
6a1494e
remove add inconsistency modal
bobbai00 Nov 3, 2025
fd89590
remove inconsistency list
bobbai00 Nov 3, 2025
1358744
remove inconsistencies
bobbai00 Nov 3, 2025
859c273
add litellm configs
bobbai00 Nov 3, 2025
2bf76fc
add the planning mode getter
bobbai00 Nov 3, 2025
658e6c4
add output schema tool
bobbai00 Nov 4, 2025
1999a70
revert redundant changes
bobbai00 Nov 4, 2025
d1c2bb8
code cleanup
bobbai00 Nov 4, 2025
5d54f36
add validation on the input model message
bobbai00 Nov 4, 2025
fc6db31
try to improve the action plan plotting
bobbai00 Nov 4, 2025
75fcdf7
fix the operator highlight
bobbai00 Nov 4, 2025
8ce9ccc
fix pannel switching issue
bobbai00 Nov 4, 2025
f9548ce
initial display of tasks
bobbai00 Nov 4, 2025
efe8ccc
fix panel location
bobbai00 Nov 4, 2025
7af5117
add tools for cu status
bobbai00 Nov 5, 2025
24e8f41
Revert "fix panel location"
bobbai00 Nov 5, 2025
a651d53
Revert "initial display of tasks"
bobbai00 Nov 5, 2025
c6cfeb7
helm chart: add persistency
bobbai00 Nov 5, 2025
af7ef44
helm chart: finish initial k8s litellm
bobbai00 Nov 5, 2025
119e40b
helm chart: improve
bobbai00 Nov 5, 2025
5af7fe0
fix the agent chat style
bobbai00 Nov 5, 2025
8017533
make script accept command line arg
bobbai00 Nov 5, 2025
e35d756
add console log tools
bobbai00 Nov 6, 2025
7569d47
improve the prompts
bobbai00 Nov 6, 2025
1c7255f
fix non-selectable style
bobbai00 Nov 6, 2025
c508539
merge console log tool into execution state
bobbai00 Nov 6, 2025
a231265
update prompts
bobbai00 Nov 6, 2025
6d2d9c4
route all model request to access control service
bobbai00 Nov 7, 2025
7d586db
update k8s config
bobbai00 Nov 7, 2025
6072855
update model config
bobbai00 Nov 7, 2025
bd0ddda
initial action plan cleanup
bobbai00 Nov 7, 2025
aab5837
one more cleanup on action plan
bobbai00 Nov 7, 2025
a20dfce
revert changes
bobbai00 Nov 7, 2025
f603458
revert irrelevant changes
bobbai00 Nov 7, 2025
aa8b70f
avoid injecting redundant code
bobbai00 Nov 7, 2025
00d349f
add openai key support to helm chart
bobbai00 Nov 7, 2025
1f60d94
add open ai to the litellm
bobbai00 Nov 8, 2025
dbd4927
shrink the number of tools
bobbai00 Nov 8, 2025
b4f1d82
copilot: refactor tools
bobbai00 Nov 8, 2025
f037c48
copilot: refactor tools
bobbai00 Nov 8, 2025
744afd6
change the async await to rxjs
bobbai00 Nov 8, 2025
6d5d674
improve texera-copilot logic cleaning
bobbai00 Nov 8, 2025
49c0eb3
add initial test
bobbai00 Nov 8, 2025
c86b300
fix format and test
bobbai00 Nov 8, 2025
9385ad7
revert helm chart changes
bobbai00 Nov 8, 2025
222e6b7
revert helm chart changes
bobbai00 Nov 8, 2025
fa74615
revert helm chart changes
bobbai00 Nov 8, 2025
2368468
revert helm chart changes
bobbai00 Nov 8, 2025
ac8a5d3
revert helm chart changes
bobbai00 Nov 8, 2025
29a3930
remove deep chat
bobbai00 Nov 8, 2025
59727c7
fix test case
bobbai00 Nov 8, 2025
0170df3
revert changes
bobbai00 Nov 8, 2025
e14a306
revert changes
bobbai00 Nov 8, 2025
58ac7a4
simplify the prompt
bobbai00 Nov 8, 2025
c6da482
simplify the prompt
bobbai00 Nov 8, 2025
565fdb4
add more comments
bobbai00 Nov 8, 2025
9fc496a
revert redundant changes
bobbai00 Nov 9, 2025
2202b6b
revert redundant changes
bobbai00 Nov 9, 2025
64c9729
make package version up-to-date
bobbai00 Nov 14, 2025
e4ad517
resolve comments
bobbai00 Nov 14, 2025
0c691f6
resolve comments
bobbai00 Nov 14, 2025
41daf8b
resolve & refactoring
bobbai00 Nov 15, 2025
5bce0f4
refactor tools
bobbai00 Nov 15, 2025
4741e71
refactor react step with mapping
bobbai00 Nov 15, 2025
0367924
refactor react step without mapping
bobbai00 Nov 16, 2025
fd71114
add viewed / modified operator visualization
bobbai00 Nov 16, 2025
95a0a8f
improve the prompt
bobbai00 Nov 16, 2025
e934ee4
Merge branch 'main' into feat/agent
aglinxinyuan Nov 18, 2025
0f0bd07
chore: clean up code per PR review feedback
claude Nov 21, 2025
854cf52
fix: revert user-select change that breaks drag-and-drop
claude Nov 21, 2025
b772748
feat: add configuration flag for copilot feature
claude Nov 21, 2025
600fd6e
block agent traffic at the backend
bobbai00 Nov 26, 2025
f8719d0
fix agent toggle
bobbai00 Nov 26, 2025
db005a1
improve scss for the agent chat
bobbai00 Nov 26, 2025
5c8a877
rollback the context menu change
bobbai00 Nov 26, 2025
2c83939
improve the CSS style
bobbai00 Nov 26, 2025
7967ccf
improve the icon display
bobbai00 Nov 26, 2025
0998288
Merge branch 'main' into feat/agent
bobbai00 Nov 26, 2025
661ec0e
fix unit test
bobbai00 Nov 26, 2025
375c708
cleanup unused package
bobbai00 Nov 26, 2025
27d433e
try to fix the CI
bobbai00 Nov 26, 2025
7a14114
try to fix the CI
bobbai00 Nov 26, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,12 @@ import io.dropwizard.core.setup.{Bootstrap, Environment}
import org.apache.amber.config.StorageConfig
import org.apache.texera.auth.{JwtAuthFilter, SessionUser}
import org.apache.texera.dao.SqlServer
import org.apache.texera.service.resource.{AccessControlResource, HealthCheckResource}
import org.apache.texera.service.resource.{
AccessControlResource,
HealthCheckResource,
LiteLLMModelsResource,
LiteLLMProxyResource
}
import org.eclipse.jetty.server.session.SessionHandler

import java.nio.file.Path
Expand Down Expand Up @@ -54,6 +59,8 @@ class AccessControlService extends Application[AccessControlServiceConfiguration

environment.jersey.register(classOf[HealthCheckResource])
environment.jersey.register(classOf[AccessControlResource])
environment.jersey.register(classOf[LiteLLMProxyResource])
environment.jersey.register(classOf[LiteLLMModelsResource])

// Register JWT authentication filter
environment.jersey.register(new AuthDynamicFeature(classOf[JwtAuthFilter]))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@ package org.apache.texera.service.resource
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.typesafe.scalalogging.LazyLogging
import jakarta.ws.rs.client.{Client, ClientBuilder, Entity}
import jakarta.ws.rs.core._
import jakarta.ws.rs.{GET, POST, Path, Produces}
import jakarta.ws.rs.{Consumes, GET, POST, Path, Produces}
import org.apache.texera.auth.JwtParser.parseToken
import org.apache.texera.auth.SessionUser
import org.apache.texera.auth.util.{ComputingUnitAccess, HeaderField}
import org.apache.texera.config.{GuiConfig, LLMConfig}
import org.apache.texera.dao.jooq.generated.enums.PrivilegeEnum

import java.net.URLDecoder
Expand Down Expand Up @@ -203,3 +205,127 @@ class AccessControlResource extends LazyLogging {
AccessControlResource.authorize(uriInfo, headers, Option(body).map(_.trim).filter(_.nonEmpty))
}
}

@Path("/chat")
@Produces(Array(MediaType.APPLICATION_JSON))
@Consumes(Array(MediaType.APPLICATION_JSON))
class LiteLLMProxyResource extends LazyLogging {

private val client: Client = ClientBuilder.newClient()
private val litellmBaseUrl: String = LLMConfig.baseUrl
private val litellmApiKey: String = LLMConfig.masterKey

@POST
@Path("/{path:.*}")
def proxyPost(
@Context uriInfo: UriInfo,
@Context headers: HttpHeaders,
body: String
): Response = {
if (!GuiConfig.guiWorkflowWorkspaceCopilotEnabled) {
return Response
.status(Response.Status.FORBIDDEN)
.entity("""{"error": "Copilot feature is disabled"}""")
.build()
}

// uriInfo.getPath returns "chat/completions" for /api/chat/completions
// We want to forward as "/chat/completions" to LiteLLM
val fullPath = uriInfo.getPath
val targetUrl = s"$litellmBaseUrl/$fullPath"

logger.info(s"Proxying POST request to LiteLLM: $targetUrl")

try {
val requestBuilder = client
.target(targetUrl)
.request(MediaType.APPLICATION_JSON)
.header("Authorization", s"Bearer $litellmApiKey")

// Forward other relevant headers from the original request
headers.getRequestHeaders.asScala.foreach {
case (key, values)
if !key.equalsIgnoreCase("Authorization") &&
!key.equalsIgnoreCase("Host") &&
!key.equalsIgnoreCase("Content-Length") =>
values.asScala.foreach(value => requestBuilder.header(key, value))
case _ => // Skip Authorization, Host, and Content-Length headers
}

val response = requestBuilder.post(Entity.json(body))

// Build response with same status and body from LiteLLM
val responseBody = response.readEntity(classOf[String])
val responseBuilder = Response
.status(response.getStatus)
.entity(responseBody)

// Forward response headers
response.getHeaders.asScala.foreach {
case (key, values) =>
values.asScala.foreach(value => responseBuilder.header(key, value))
}

responseBuilder.build()
} catch {
case e: Exception =>
logger.error(s"Error proxying request to LiteLLM: ${e.getMessage}", e)
Response
.status(Response.Status.BAD_GATEWAY)
.entity(s"""{"error": "Failed to proxy request to LiteLLM: ${e.getMessage}"}""")
.build()
}
}
}

@Path("/models")
@Produces(Array(MediaType.APPLICATION_JSON))
class LiteLLMModelsResource extends LazyLogging {

private val client: Client = ClientBuilder.newClient()
private val litellmBaseUrl: String = LLMConfig.baseUrl
private val litellmApiKey: String = LLMConfig.masterKey

@GET
def getModels: Response = {
if (!GuiConfig.guiWorkflowWorkspaceCopilotEnabled) {
return Response
.status(Response.Status.FORBIDDEN)
.entity("""{"error": "Copilot feature is disabled"}""")
.build()
}

val targetUrl = s"$litellmBaseUrl/models"

logger.info(s"Fetching models from LiteLLM: $targetUrl")

try {
val response = client
.target(targetUrl)
.request(MediaType.APPLICATION_JSON)
.header("Authorization", s"Bearer $litellmApiKey")
.get()

// Build response with same status and body from LiteLLM
val responseBody = response.readEntity(classOf[String])
val responseBuilder = Response
.status(response.getStatus)
.entity(responseBody)

// Forward response headers
response.getHeaders.asScala.foreach {
case (key, values) =>
values.asScala.foreach(value => responseBuilder.header(key, value))
}

responseBuilder.build()
} catch {
case e: Exception =>
logger.error(s"Error fetching models from LiteLLM: ${e.getMessage}", e)
Response
.status(Response.Status.BAD_GATEWAY)
.entity(s"""{"error": "Failed to fetch models from LiteLLM: ${e.getMessage}"}""")
.build()
}
}
}
35 changes: 35 additions & 0 deletions bin/litellm-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

# The default configuration file for starting litellm (https://docs.litellm.ai/docs/proxy/quick_start)
# To start the litellm service:
# 1. Install litellm by:
# pip install 'litellm[proxy]'
# 2. Set your API keys as environment variable, e.g.
# export ANTHROPIC_API_KEY=<your-api-key>
# 3. Start litellm by:
# litellm --config bin/litellm-config.yaml
# By default, litellm is running on http://0.0.0.0:4000
model_list:
- model_name: claude-haiku-4.5
litellm_params:
model: claude-haiku-4-5-20251001
api_key: "os.environ/ANTHROPIC_API_KEY"
- model_name: gpt-5-mini
litellm_params:
model: gpt-5-mini-2025-08-07
api_key: "os.environ/OPENAI_API_KEY"
4 changes: 4 additions & 0 deletions common/config/src/main/resources/gui.conf
Original file line number Diff line number Diff line change
Expand Up @@ -104,5 +104,9 @@ gui {
# amount of time to be elapsed in minutes before user is detected as inactive
active-time-in-minutes = 15
active-time-in-minutes = ${?GUI_WORKFLOW_WORKSPACE_ACTIVE_TIME_IN_MINUTES}

# whether AI copilot feature is enabled
copilot-enabled = false
copilot-enabled = ${?GUI_WORKFLOW_WORKSPACE_COPILOT_ENABLED}
}
}
27 changes: 27 additions & 0 deletions common/config/src/main/resources/llm.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

# LLM Configuration
llm {
# Base URL for LiteLLM service
base-url = "http://0.0.0.0:4000"
base-url = ${?LITELLM_BASE_URL}

# Master key for LiteLLM authentication
master-key = ""
master-key = ${?LITELLM_MASTER_KEY}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,6 @@ object GuiConfig {
conf.getBoolean("gui.workflow-workspace.workflow-email-notification-enabled")
val guiWorkflowWorkspaceActiveTimeInMinutes: Int =
conf.getInt("gui.workflow-workspace.active-time-in-minutes")
val guiWorkflowWorkspaceCopilotEnabled: Boolean =
conf.getBoolean("gui.workflow-workspace.copilot-enabled")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.texera.config

import com.typesafe.config.{Config, ConfigFactory}

object LLMConfig {
private val conf: Config = ConfigFactory.parseResources("llm.conf").resolve()

// LLM Service Configuration
val baseUrl: String = conf.getString("llm.base-url")
val masterKey: String = conf.getString("llm.master-key")
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class ConfigResource {
"password" -> GuiConfig.guiLoginDefaultLocalUserPassword
),
"activeTimeInMinutes" -> GuiConfig.guiWorkflowWorkspaceActiveTimeInMinutes,
"copilotEnabled" -> GuiConfig.guiWorkflowWorkspaceCopilotEnabled,
// flags from the auth.conf if needed
"expirationTimeInMinutes" -> AuthConfig.jwtExpirationMinutes
)
Expand Down
7 changes: 5 additions & 2 deletions frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
"scripts": {
"start": "concurrently --kill-others \"npx y-websocket\" \"ng serve\"",
"build": "ng build --configuration=production --progress=false --source-map=false",
"build:ci": "nx build --configuration=production --progress=false --source-map=false",
"build:ci": "node --max-old-space-size=8192 ./node_modules/nx/bin/nx build --configuration=production --progress=false --source-map=false",
"analyze": "ng build --configuration=production --stats-json && webpack-bundle-analyzer dist/stats.json",
"test": "ng test --watch=false",
"test:ci": "node --max-old-space-size=6144 ./node_modules/nx/bin/nx test --watch=false --progress=false",
"test:ci": "node --max-old-space-size=8192 ./node_modules/nx/bin/nx test --watch=false --progress=false",
"prettier:fix": "prettier --write ./src",
"lint": "ng lint",
"eslint:fix": "yarn eslint --fix ./src",
Expand All @@ -22,6 +22,7 @@
"private": true,
"dependencies": {
"@abacritt/angularx-social-login": "2.3.0",
"@ai-sdk/openai": "2.0.67",
"@ali-hm/angular-tree-component": "12.0.5",
"@angular/animations": "16.2.12",
"@angular/cdk": "16.2.12",
Expand All @@ -45,6 +46,7 @@
"@stoplight/json-ref-resolver": "3.1.5",
"@types/lodash-es": "4.17.4",
"@types/plotly.js-basic-dist-min": "2.12.4",
"ai": "5.0.93",
"ajv": "8.10.0",
"backbone": "1.4.1",
"concaveman": "2.0.0",
Expand Down Expand Up @@ -94,6 +96,7 @@
"y-quill": "0.1.5",
"y-websocket": "1.4.0",
"yjs": "13.5.41",
"zod": "3.25.76",
"zone.js": "0.13.0"
},
"resolutions": {
Expand Down
10 changes: 10 additions & 0 deletions frontend/proxy.config.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
{
"/api/models": {
"target": "http://localhost:9096",
"secure": false,
"changeOrigin": true
},
"/api/chat/completion": {
"target": "http://localhost:9096",
"secure": false,
"changeOrigin": true
},
"/api/compile": {
"target": "http://localhost:9090",
"secure": false,
Expand Down
Loading
Loading