From 566fbb120bc436385aa5a4cb93d7c351dec2127e Mon Sep 17 00:00:00 2001 From: Zvonimir Sabljic Date: Sun, 24 Aug 2025 13:37:44 -0700 Subject: [PATCH 1/5] Revert "Implemented weekend discount" This reverts commit 17923847f40863e977588d1a81bec2ae16e9801f. --- core/agents/frontend.py | 6 +----- core/agents/spec_writer.py | 5 +---- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/core/agents/frontend.py b/core/agents/frontend.py index 60ee86e444..ff76eb505b 100644 --- a/core/agents/frontend.py +++ b/core/agents/frontend.py @@ -25,7 +25,7 @@ from core.llm.parser import DescriptiveCodeBlockParser, OptionalCodeBlockParser from core.log import get_logger from core.telemetry import telemetry -from core.ui.base import ProjectStage, UISource +from core.ui.base import ProjectStage log = get_logger(__name__) @@ -168,10 +168,6 @@ async def iterate_frontend(self): if user_input: await self.send_message("Errors detected, fixing...") else: - await self.ui.send_message( - "Use code CODE20 and subscribe https://pythagora.ai/pricing", - source=UISource("Congratulations", "success"), - ) answer = await self.ask_question( "Do you want to change anything or report a bug?" if frontend_only else FE_CHANGE_REQ, buttons={"yes": "I'm done building the UI"} if not frontend_only else None, diff --git a/core/agents/spec_writer.py b/core/agents/spec_writer.py index 6d95a9ac5a..2ca25c0d02 100644 --- a/core/agents/spec_writer.py +++ b/core/agents/spec_writer.py @@ -11,7 +11,7 @@ from core.log import get_logger from core.telemetry import telemetry from core.templates.registry import PROJECT_TEMPLATES -from core.ui.base import ProjectStage, UISource +from core.ui.base import ProjectStage log = get_logger(__name__) @@ -122,9 +122,6 @@ async def initialize_spec_and_project(self) -> AgentResponse: await self.ui.send_front_logs_headers("specs_0", ["E1 / T1", "Writing Specification", "working"], "") - await self.ui.send_message( - "Use code CODE20 and subscribe https://pythagora.ai/pricing", source=UISource("Congratulations", "success") - ) await self.send_message( "## Write specification\n\nPythagora is generating a detailed specification for app based on your input.", # project_state_id="setup", From 1d76d241944212300acd446c56492416df62308f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 25 Aug 2025 07:40:08 +0000 Subject: [PATCH 2/5] version 2.0.10 --- CHANGELOG.md | 7 ++++++- pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb0a9e840c..394c3a1c4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ -# (2025-08-18) +# (2025-08-25) + + +### Reverts + +* Revert "Implemented weekend discount" ([734e0c7](https://github.com/Pythagora-io/pythagora-v1/commit/734e0c726b179a45f235a0fd230a6310c77ae740)) diff --git a/pyproject.toml b/pyproject.toml index ae4420007a..ebdc0039de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pythagora-core" -version = "2.0.9" +version = "2.0.10" description = "Build complete apps using AI agents" authors = ["Leon Ostrez "] license = "FSL-1.1-MIT" From 0819827ce20346ef5f25b3fe29293cb448840565 Mon Sep 17 00:00:00 2001 From: MarkoBosnjak98 Date: Wed, 3 Sep 2025 13:09:02 +0200 Subject: [PATCH 3/5] Update cloud-staging-build.yaml, update build --- .github/workflows/cloud-staging-build.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/cloud-staging-build.yaml b/.github/workflows/cloud-staging-build.yaml index 620d809d68..094dd94a77 100644 --- a/.github/workflows/cloud-staging-build.yaml +++ b/.github/workflows/cloud-staging-build.yaml @@ -118,8 +118,6 @@ jobs: - name: Setup extension run: | cd tmp_extension - npm install - npm run compile:ts npm install -g @vscode/vsce@3.3.2 npm run build vsce package @@ -182,4 +180,4 @@ jobs: git commit -m "version $VERSION" git push origin staging fi - cd .. \ No newline at end of file + cd .. From 53154df1c66b42021f230c3fb6ef797c4b7c3e83 Mon Sep 17 00:00:00 2001 From: LeonOstrez <41999013+LeonOstrez@users.noreply.github.com> Date: Mon, 10 Nov 2025 14:12:31 +0100 Subject: [PATCH 4/5] Update README.md --- README.md | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b97572b1ff..8fc7be17f3 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@
-[![Discord Follow](https://dcbadge.vercel.app/api/server/HaqXugmxr9?style=flat)](https://discord.gg/HaqXugmxr9) +[![Discord](https://img.shields.io/badge/Discord-Join%20Us-5865F2?style=social&logo=discord)](https://discord.gg/HaqXugmxr9) [![GitHub Repo stars](https://img.shields.io/github/stars/Pythagora-io/gpt-pilot?style=social)](https://github.com/Pythagora-io/gpt-pilot) -[![Twitter Follow](https://img.shields.io/twitter/follow/HiPythagora?style=social)](https://twitter.com/HiPythagora) +[![Twitter Follow](https://img.shields.io/twitter/follow/PythagoraAI?style=social)](https://x.com/PythagoraAI)
@@ -28,17 +28,25 @@
- + ### GPT Pilot doesn't just generate code, it builds apps!
+
+ +This repo is not being maintained anymore. + +# Visit [Pythagora.ai](https://www.pythagora.ai/) for more info + +
+ ---
-[![See it in action](https://i3.ytimg.com/vi/4g-1cPGK0GA/maxresdefault.jpg)](https://youtu.be/4g-1cPGK0GA) +[![See it in action](https://img.youtube.com/vi/o1nEvwjKziw/0.jpg)]([https://youtu.be/4g-1cPGK0GA](https://www.youtube.com/watch?v=o1nEvwjKziw)) -(click to open the video in YouTube) (1:40min) +(click to open the video in YouTube) (1:04min)
@@ -46,11 +54,11 @@
-Pythagora-io%2Fgpt-pilot | Trendshift +Pythagora-io%2Fgpt-pilot | Trendshift
-GPT Pilot is the core technology for the [Pythagora VS Code extension](https://bit.ly/3IeZxp6) that aims to provide **the first real AI developer companion**. Not just an autocomplete or a helper for PR messages but rather a real AI developer that can write full features, debug them, talk to you about issues, ask for review, etc. +GPT Pilot is the core technology for the [Pythagora VS Code extension](https://marketplace.visualstudio.com/items?itemName=PythagoraTechnologies.pythagora-vs-code) that aims to provide **the first real AI developer companion**. Not just an autocomplete or a helper for PR messages but rather a real AI developer that can write full features, debug them, talk to you about issues, ask for review, etc. --- From 24537dd6335df1934253306ef9cd16d6a4d2b7fc Mon Sep 17 00:00:00 2001 From: octo-patch Date: Thu, 23 Apr 2026 09:40:08 +0800 Subject: [PATCH 5/5] fix: case-insensitive agent name lookup in llm_for_agent (fixes #1097) --- core/config/__init__.py | 11 +++++++++-- example-config.json | 20 +++++++++++++++++--- tests/config/test_config.py | 10 ++++++++++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/core/config/__init__.py b/core/config/__init__.py index 6ba0503aa5..ecce6e8122 100644 --- a/core/config/__init__.py +++ b/core/config/__init__.py @@ -425,10 +425,17 @@ def llm_for_agent(self, agent_name: str = "default") -> LLMConfig: Fetch an LLM configuration for a given agent. If the agent specific configuration doesn't exist, returns the configuration - for the 'default' agent. + for the 'default' agent. Agent name matching is case-insensitive to allow + config keys like 'codemonkey' or 'importer' to match 'CodeMonkey' or 'Importer'. """ - agent_name = agent_name if agent_name in self.agent else "default" + if agent_name not in self.agent: + # Try case-insensitive match to be forgiving of different naming conventions + agent_name_lower = agent_name.lower() + agent_name = next( + (key for key in self.agent if key.lower() == agent_name_lower), + "default", + ) agent_config = self.agent[agent_name] provider_config = self.llm[agent_config.provider] return LLMConfig.from_provider_and_agent_configs(provider_config, agent_config) diff --git a/example-config.json b/example-config.json index 1d66c47596..00af64e643 100644 --- a/example-config.json +++ b/example-config.json @@ -29,15 +29,29 @@ } } }, - // Each agent can use a different model or configuration. The default, as before, is GPT4 Turbo - // for most tasks and GPT3.5 Turbo to generate file descriptions. The agent name here should match - // the Python class name. + // Each agent can use a different model or configuration. The default is used for all agents + // unless overridden. The agent name should match the Python class name (case-insensitive). + // Valid agent names: "default", "CodeMonkey", "Importer", "SpecWriter", "Frontend", + // "BugHunter", "Developer", "TechLead", "Troubleshooter", "get_relevant_files" + // Sub-agent routes can also be overridden, e.g. "CodeMonkey.code_review". "agent": { "default": { "provider": "openai", "model": "gpt-4o-2024-05-13", "temperature": 0.5 } + // Example: use a different model for code generation tasks + // "CodeMonkey": { + // "provider": "openai", + // "model": "gpt-4o-2024-05-13", + // "temperature": 0.0 + // }, + // Example: use Anthropic for the Importer agent + // "Importer": { + // "provider": "anthropic", + // "model": "claude-3-5-sonnet-20241022", + // "temperature": 0.5 + // } }, // Logging configuration outputs debug log to "pythagora.log" by default. If you set this to null, // the log will be sent to stdout. diff --git a/tests/config/test_config.py b/tests/config/test_config.py index 06b8692b19..3f64828765 100644 --- a/tests/config/test_config.py +++ b/tests/config/test_config.py @@ -50,6 +50,16 @@ def test_parse_config(): assert config.llm_for_agent("CodeMonkey").api_key == "sk-anthropic" +def test_case_insensitive_agent_lookup(): + config = ConfigLoader.from_json(json.dumps(test_config_data)) + + # Case-insensitive match: "codemonkey" should resolve to "CodeMonkey" + assert config.llm_for_agent("codemonkey").provider == LLMProvider.ANTHROPIC + assert config.llm_for_agent("codemonkey").model == "claude-3-opus" + # Unknown agent name falls back to "default" + assert config.llm_for_agent("NonExistentAgent").provider == LLMProvider.OPENAI + + def test_default_agent_llm_config(): data = { "llm": {"openai": test_config_data["llm"]["openai"]},