Skip to content

Commit e2b7726

Browse files
committed
allowed the llm provider to genrate shapes
1 parent 2e301ec commit e2b7726

4 files changed

Lines changed: 8 additions & 19 deletions

File tree

backend/.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ OPENCAD_AGENT_LIVE_KERNEL=false
2121
OPENCAD_TREE_LIVE_KERNEL=true
2222
OPENCAD_AGENT_LIVE_KERNEL=true
2323

24+
OPENCAD_LLM_PROVIDER=
25+
OPENCAD_LLM_MODEL=
26+
2427
# Optional multi-provider LLM support for code generation uses LiteLLM.
2528
# Provider-specific credentials are still read from each provider's standard env vars.
2629
# Example request fields: llm_provider="openai", llm_model="gpt-4o-mini", generate_code=true

backend/opencad_agent/llm.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@ def _default_completion(**kwargs: Any) -> Any:
2020
return completion(**kwargs)
2121

2222

23-
def _resolve_model_name(provider: str | None, model: str) -> str:
24-
if provider and "/" not in model:
25-
return f"{provider}/{model}"
26-
return model
27-
28-
2923
def _strip_code_fences(code: str) -> str:
3024
code = code.strip()
3125
if code.startswith("```python"):
@@ -68,7 +62,6 @@ def __init__(self, completion_func: LiteLlmCompletion | None = None) -> None:
6862
def generate_code(
6963
self,
7064
*,
71-
provider: str | None,
7265
model: str,
7366
system_prompt: str,
7467
user_message: str,
@@ -79,9 +72,10 @@ def generate_code(
7972
messages.extend({"role": item.role, "content": item.content} for item in conversation_history)
8073
messages.append({"role": "user", "content": user_message})
8174
response = self._completion(
82-
model=_resolve_model_name(provider, model),
75+
model=model,
8376
messages=messages,
8477
temperature=HIGH_REASONING_CODE_TEMPERATURE if reasoning else DEFAULT_CODE_TEMPERATURE,
8578
)
8679
logger.debug("Received LLM code-generation response")
87-
return _strip_code_fences(_extract_message_content(response))
80+
cleaned_response = _strip_code_fences(_extract_message_content(response))
81+
return cleaned_response

backend/opencad_agent/models.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,8 @@ class ChatRequest(BaseModel):
1717
tree_state: FeatureTree
1818
conversation_history: list[ChatHistoryItem] = Field(default_factory=list)
1919
reasoning: bool = False
20-
llm_provider: str | None = None
21-
llm_model: str | None = None
2220
generate_code: bool = False
2321

24-
@model_validator(mode="after")
25-
def _validate_llm_configuration(self) -> ChatRequest:
26-
if self.llm_provider and not self.llm_model:
27-
raise ValueError("llm_model is required when llm_provider is set.")
28-
return self
2922

3023

3124
class OperationExecution(BaseModel):

backend/opencad_agent/service.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,10 @@ def _execute_code_in_context(code: str, ctx: object) -> None:
124124
reset_default_context()
125125

126126
def _generate_code(self, request: ChatRequest) -> str:
127-
provider = request.llm_provider or os.environ.get("OPENCAD_LLM_PROVIDER")
128-
model = request.llm_model or os.environ.get("OPENCAD_LLM_MODEL")
127+
model = os.environ.get("OPENCAD_LLM_MODEL")
128+
129129
if model:
130130
return self.llm_client.generate_code(
131-
provider=provider,
132131
model=model,
133132
system_prompt=build_code_generation_prompt(request.tree_state),
134133
user_message=request.message,

0 commit comments

Comments
 (0)