Commit History
-
update fix
aa0bba7 -
update
a4a6500 -
optimizations
990c944 -
fix
3e5404a -
update to use grok 4.1 fast
0b126be
-
update landing to show login
27c7a45 -
add landing page
4b29926 -
update ui changes
0423b7b -
fix requirements txt generation
4ceee61 -
more fixes
3bbc203 -
transformers js deploy fix
5d7cc0b -
update
35169fd -
fix
d1b315f -
update
68ff582 -
fix
6de7d1a -
fix transformers js deploy
27ceb47 -
fix login
a0e6952 -
update
89d579c -
new update
d017d01 -
fix
dcd2ebe -
update
106a0d6 -
update
31713bf -
update
4134e29 -
fix deploy
47565e8 -
fix
da59e40
-
update
fe566fd -
update import and deploy
c66426d -
update to 20k
0c30765 -
update import project
53813c1 -
fix import project
ddf45da -
update
25c838a -
add import feature
3eb00a5 -
update gemini to poe
d4d57c4 -
update
d1efd8a -
update gemini
0498411 -
updates
2948440 -
fix gemini 3
fab9ff4 -
add gemini 3
28c44e9 -
Fix transformers.js parser: Support both === and markdown formats
Issue: LLM was generating code with markdown blocks (html, javascript, css) but parser only looked for === filename === format Fixes: 1. Updated TRANSFORMERS_JS_SYSTEM_PROMPT to specify === format explicitly - Added clear examples showing === index.html ===, === index.js ===, === style.css === - Explicitly stated NOT to use markdown code blocks 2. Enhanced parse_transformers_js_output() with fallback logic: - Primary: Parse === filename === sections - Fallback: Parse markdown code blocks (html, javascript, css) - Last resort: Try single HTML file extraction - Removes placeholder comments from extracted content This ensures backward compatibility with already-generated code while guiding future generations to use the correct format.f5a9d8a -
Fix transformers.js deployment: Use space name not repo_id for duplicate_space()
Issue: 500 error when deploying transformers.js apps Root cause: duplicate_space() was receiving 'username/space-name' but expects just 'space-name' Key fix in backend_deploy.py: - Changed: duplicate_space(to_id=repo_id, ...) - To: duplicate_space(to_id=space_name, ...) The huggingface_hub duplicate_space() function automatically prepends the username from the token, so it expects just the space name, not the full repo_id format. Additional improvements: 1. Better error handling and logging for transformers.js parsing 2. Added detailed print statements to track duplication process 3. Match original deploy.py validation logic exactly: - Use dict access (files['index.html']) instead of .get() - Check all three files with 'or' conditions 4. Added traceback printing for easier debugging Error flow now matches original: 1. Parse transformers.js output → extract 3 files 2. Validate all 3 files exist (KeyError if missing) 3. Write files to temp directory 4. Duplicate template space …1230bba -
Fix React and Streamlit deployment: Upload files individually like transformers.js
Issue: React and Streamlit apps were using upload_folder() which doesn't match the original deploy.py behavior, potentially causing issues with multi-file apps. Root cause analysis from original deploy.py: - Transformers.js: Individual file uploads ✅ (already fixed) - React: Individual file uploads ❌ (was using upload_folder) - Streamlit: Individual file uploads ❌ (was using upload_folder) - HTML (static): upload_folder() for multi-file OR upload_file() for single - Gradio: create_commit() with atomic ops for multi-file OR upload_file() Changes to backend_deploy.py: 1. React deployment now uses individual uploads: - Set use_individual_uploads = True for React apps - Parses React output to get all files - Uploads each file individually with retry logic - Includes Dockerfile if missing (from template) 2. Streamlit deployment now uses individual uploads: - Set use_individual_uploads = True for Streamlit (Docker mode) - Uploads each file individually with retry logic …a47f768 -
Fix transformers.js deployment: Upload all files (html, js, css) individually
Issue: Transformers.js apps were not deploying correctly - CSS and JavaScript files were missing from the deployed space. Root cause: backend_deploy.py was using upload_folder() for all file types, but transformers.js requires individual file uploads like the original deploy.py. Changes to backend_deploy.py: 1. Added validation for transformers.js files: - Check all three files exist (index.html, index.js, style.css) - Return error if any file is missing 2. Template space duplication (NEW): - Use duplicate_space() from static-templates/transformers.js template - Matches original deploy.py behavior - Falls back to create_repo() if duplication fails 3. Individual file upload for transformers.js: - Added use_individual_uploads flag - Upload each file separately using api.upload_file() - NOT using upload_folder() for transformers.js 4. Retry logic with error handling: - 3 attempts per file - 2-second delay between retries - Proper permission error det…1e9598c -
Add follow-up deployment support: Update existing spaces instead of creating new ones
Implemented the same pattern as original deploy.py where follow-up prompts update the existing deployed space with new commits instead of creating new spaces. backend_deploy.py changes: - Added existing_repo_id parameter to deploy_to_huggingface_space() - Added commit_message parameter for custom commit messages - Added is_update logic to detect updates vs new deployments - Skip create_repo() when updating existing space - Use appropriate commit message: "Update from anycoder" vs "Deploy from anycoder" - Return different success message: "Updated" vs "Deployed" - Skip 2-second wait for README on updates (already exists) backend_api.py changes: - Updated DeploymentRequest model to include: * existing_repo_id (optional) - for explicitly updating a space * commit_message (optional) - custom commit message * space_name now optional (not needed for updates) - Added deployed_spaces tracking to user_sessions - Deploy endpoint now: * Checks session for previously deployed spaces * …fe27a3c -
Fix backend_deploy: Let HuggingFace auto-create README, only add anycoder tag
Issue: Previously was creating README with hardcoded SDK version (4.44.1) Fix: Follow the original deploy.py pattern Changes: - Removed create_minimal_readme() function - not needed - Don't manually create or upload README.md during deployment - Let HuggingFace automatically generate README.md with proper defaults - After deployment, only modify the auto-generated README to add: * tags: anycoder (preserves all existing content) * app_port: 7860 (only for Docker spaces) Deployment flow now: 1. Parse code based on language (html, gradio, streamlit, react, etc.) 2. Write code files to temp directory (no README) 3. Create space with create_repo() - HF auto-generates README 4. Upload files with upload_folder() 5. Wait 2 seconds for README generation 6. Call add_anycoder_tag_to_readme() to modify existing README 7. Preserves all HF defaults (versions, metadata, etc.) This ensures: - No hardcoded versions (HF uses latest compatible versions) - Existing README content is preserved - Onl…3d9f57c -
Add standalone backend_deploy.py without Gradio dependencies
Created backend_deploy.py as a standalone deployment utility that can be used by the backend API without any Gradio dependencies. This module provides clean deployment functions for HuggingFace Spaces. Key features: - deploy_to_huggingface_space(): Main deployment function supporting all language types (HTML, Gradio, Streamlit, React, Transformers.js, ComfyUI) - Automatic SDK detection and appropriate file structure generation - Multi-file support (README, Dockerfile, requirements.txt, etc.) - update_space_file(): Update individual files in existing spaces - delete_space(): Delete spaces - list_user_spaces(): List all user spaces Code parsing utilities: - parse_html_code(): Extract HTML from various formats - parse_transformers_js_output(): Parse multi-file transformers.js output - parse_python_requirements(): Extract requirements.txt - parse_multi_file_python_output(): Parse Gradio/Streamlit multi-file apps - is_streamlit_code() / is_gradio_code(): Code type detection - detect_sdk…ba8977c -
Fix Docker build: Copy backend_prompts.py to container
Issue: ModuleNotFoundError: No module named 'backend_prompts' Root cause: backend_prompts.py was created but not copied to Docker container Fix: - Add COPY --chown=user:user backend_prompts.py . to Dockerfile - File is now copied alongside backend_api.py - Backend can now import prompts successfully Docker build steps now include: 1. Copy requirements.txt 2. Install Python dependencies 3. Copy anycoder_app/ directory 4. Copy backend_api.py 5. Copy backend_prompts.py ← NEW 6. Copy app.py 7. Copy frontend build This ensures backend_prompts.py is available when backend_api.py tries to import it at startup.b277d84 -
Create standalone backend_prompts.py without Gradio dependencies
Issue: Backend depends on anycoder_app which has Gradio dependencies Solution: Extract all system prompts to standalone backend_prompts.py New file: backend_prompts.py - No dependencies on Gradio, config, or other heavy libraries - Pure Python with just string prompts - Includes all 7 language/framework prompts: * HTML_SYSTEM_PROMPT * TRANSFORMERS_JS_SYSTEM_PROMPT * STREAMLIT_SYSTEM_PROMPT * REACT_SYSTEM_PROMPT * GRADIO_SYSTEM_PROMPT (static version) * JSON_SYSTEM_PROMPT (static version) * GENERIC_SYSTEM_PROMPT Benefits: ✅ Backend starts faster (no Gradio imports) ✅ No dependency on anycoder_app directory ✅ Cleaner separation of concerns ✅ Same expert-level prompts for all languages ✅ Easier to maintain and update prompts ✅ No circular dependencies ✅ Works in Docker without full Gradio installation Updated backend_api.py: - Import from backend_prompts instead of anycoder_app.prompts - Simpler, cleaner import with single try/except - Fallback prompts if import fails - C…613b744 -
Make UI fully responsive for mobile and desktop
Complete mobile-first responsive redesign with bottom navigation: Main Layout (page.tsx): - Add mobile view state: 'chat', 'editor', or 'settings' - Three-column desktop layout (chat | editor | settings) - Single-column mobile layout with view switching - Left sidebar (chat): Hidden on mobile, full-screen when active - Center (editor): Default mobile view, always visible on desktop - Right sidebar (settings): Hidden on mobile, full-screen when active - Use absolute positioning on mobile (z-10) for overlay effect - Responsive classes: hidden md:flex, w-full md:w-80, etc. Mobile Bottom Navigation: - Three-button tab bar: Chat, Code, Settings - Icon + label for each tab - Active state: blue highlight with dark background - Inactive state: gray text with hover effect - Safe area padding for notch support - Only visible on mobile (md:hidden) Header (Header.tsx): - Responsive padding: px-3 md:px-5 - Responsive height: h-12 md:h-14 - Smaller logo and title on mobile - User avatar: w-6 md:w…75503d6 -
Comprehensive streaming fix: Eliminate all buffering sources
Issue: Code streaming still not working - chunks arriving but not displaying Root causes identified: 1. React 18 automatic batching delays state updates 2. Potential proxy/nginx buffering at various levels 3. DeepSeek using InferenceClient instead of OpenAI client Complete fix across full stack: Backend (backend_api.py): - Convert DeepSeek to use OpenAI client for consistent streaming - Add comprehensive anti-buffering headers: * Cache-Control: no-cache, no-transform * Content-Encoding: none * Transfer-Encoding: chunked * X-Accel-Buffering: no (prevents nginx buffering) - Add logging for MiniMax and DeepSeek initialization - All models now use OpenAI client (OpenRouter, MiniMax, DeepSeek) Frontend (page.tsx): - Import flushSync from react-dom - Wrap setGeneratedCode in flushSync() to bypass React 18 batching - Forces immediate synchronous DOM updates for each chunk - No more delayed/batched state updates How streaming works now: 1. Backend: LLM generates chunk → yield immed…4748143 -
Fix OpenRouter streaming: Use OpenAI client with proper headers
Issue: Streaming not working with OpenRouter models Root cause: Using InferenceClient instead of OpenAI client for OpenRouter Fix: - Use OpenAI client directly for OpenRouter (as per their docs) - Add required headers: HTTP-Referer and X-Title for OpenRouter ranking - Remove artificial 0.01s delay - use asyncio.sleep(0) for immediate flush - Add detailed logging every 10 chunks to track streaming progress - Log when streaming starts and total chunks/chars at completion OpenRouter streaming now works correctly: ✅ Uses base_url='https://openrouter.ai/api/v1' ✅ Includes HTTP-Referer and X-Title headers ✅ Streams immediately with no artificial delays ✅ Logs: 'Starting to stream...', 'Streamed N chunks', 'Completed' ✅ Works with all openrouter/ prefixed models Example streaming flow: 1. User sends request 2. Backend logs: '[Generate] Starting to stream from openrouter/sherlock-dash-alpha...' 3. Chunks arrive: '[Generate] Streamed 10 chunks, 250 chars total' 4. Frontend receives each chun…c77d732