# Common Errors & Solutions Complete troubleshooting guide for TheSys C1 Generative UI integration. --- ## 1. Empty Agent Responses **Symptom**: AI returns empty responses, UI shows nothing or blank content. **Causes**: - Incorrect streaming transformation - Response not properly extracted from API - Empty content in stream chunks **Solutions**: ```typescript // ✅ Correct - use transformStream with fallback import { transformStream } from "@crayonai/stream"; const c1Stream = transformStream(llmStream, (chunk) => { return chunk.choices[0]?.delta?.content || ""; // Empty string fallback }); // ❌ Wrong - no fallback const c1Stream = transformStream(llmStream, (chunk) => { return chunk.choices[0].delta.content; // May be undefined }); ``` **Verification**: ```bash # Check API response format curl -X POST https://api.thesys.dev/v1/embed/chat/completions \ -H "Authorization: Bearer $THESYS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"c1/openai/gpt-5/v-20250930","messages":[{"role":"user","content":"test"}]}' ``` --- ## 2. Model Not Following System Prompt **Symptom**: AI ignores instructions, doesn't follow guidelines in system prompt. **Cause**: System prompt is not first in messages array or formatted incorrectly. **Solution**: ```typescript // ✅ Correct - system prompt FIRST const messages = [ { role: "system", content: "You are a helpful assistant." }, // MUST BE FIRST ...conversationHistory, { role: "user", content: userPrompt }, ]; // ❌ Wrong - system prompt after user messages const messages = [ { role: "user", content: "Hello" }, { role: "system", content: "..." }, // TOO LATE ]; // ❌ Wrong - no system prompt at all const messages = [ { role: "user", content: userPrompt }, ]; ``` --- ## 3. Version Compatibility Errors **Symptom**: `TypeError: Cannot read property 'X' of undefined`, component crashes. **Cause**: Mismatched package versions between SDK and API. **Compatibility Matrix**: | C1 API Version | @thesysai/genui-sdk | @crayonai/react-ui | @crayonai/react-core | |----------------|--------------------|--------------------|---------------------| | v-20250930 | ~0.6.40 | ~0.8.42 | ~0.7.6 | **Solution**: ```bash # Check current versions npm list @thesysai/genui-sdk @crayonai/react-ui @crayonai/react-core # Update to compatible versions (October 2025) npm install @thesysai/genui-sdk@0.6.40 @crayonai/react-ui@0.8.42 @crayonai/react-core@0.7.6 ``` --- ## 4. Theme Not Applying **Symptom**: UI components don't match custom theme, default styles persist. **Cause**: Missing `ThemeProvider` wrapper. **Solution**: ```typescript // ❌ Wrong - no ThemeProvider // ✅ Correct - wrapped with ThemeProvider // ✅ Also correct - for C1Chat ``` --- ## 5. Streaming Not Working **Symptom**: UI doesn't update in real-time, waits for full response. **Causes**: - `stream: false` in API call - Missing proper headers - Not passing `isStreaming` prop **Solutions**: ```typescript // 1. Enable streaming in API call const stream = await client.chat.completions.create({ model: "c1/openai/gpt-5/v-20250930", messages: [...], stream: true, // ✅ IMPORTANT }); // 2. Set proper response headers (Next.js) return new NextResponse(responseStream, { headers: { "Content-Type": "text/event-stream", "Cache-Control": "no-cache, no-transform", "Connection": "keep-alive", }, }); // 3. Pass isStreaming prop setResponse(msg)} /> ``` --- ## 6. Tool Calling Failures **Symptom**: Tools not executing, validation errors, or crashes. **Causes**: - Invalid Zod schema - Missing descriptions - Incorrect tool format - Arguments not parsed correctly **Solutions**: ```typescript import { z } from "zod"; import zodToJsonSchema from "zod-to-json-schema"; // ✅ Proper schema with descriptions const toolSchema = z.object({ query: z.string().describe("Search query"), // DESCRIBE all fields! limit: z.number().int().min(1).max(100).describe("Max results"), }); // ✅ Convert to OpenAI format const tool = { type: "function" as const, function: { name: "search_web", description: "Search the web for information", // Clear description parameters: zodToJsonSchema(toolSchema), // Convert schema }, }; // ✅ Validate incoming tool calls try { const args = toolSchema.parse(JSON.parse(toolCall.function.arguments)); const result = await executeTool(args); } catch (error) { if (error instanceof z.ZodError) { console.error("Validation failed:", error.errors); } } ``` --- ## 7. Thread State Not Persisting **Symptom**: Threads disappear on page refresh, conversation history lost. **Cause**: Using in-memory storage instead of database. **Solution**: ```typescript // ❌ Wrong - loses data on restart const messageStore = new Map(); // ✅ Correct - use database (D1 example) import { db } from "./database"; export async function saveMessage(threadId: string, message: Message) { await db.insert(messages).values({ threadId, role: message.role, content: message.content, createdAt: new Date(), }); } export async function getThreadMessages(threadId: string) { return db .select() .from(messages) .where(eq(messages.threadId, threadId)) .orderBy(messages.createdAt); } ``` --- ## 8. CSS Conflicts **Symptom**: Styles from C1 components clash with app styles, layout breaks. **Cause**: CSS import order or global styles overriding. **Solution**: ```typescript // ✅ Correct import order import "@crayonai/react-ui/styles/index.css"; // C1 styles FIRST import "./your-app.css"; // Your styles SECOND // In your CSS, use specificity if needed .your-custom-class .c1-message { /* Override specific styles */ background-color: var(--custom-bg); } // Avoid global overrides /* ❌ Wrong - too broad */ * { margin: 0; padding: 0; } /* ✅ Better - scoped */ .app-container * { margin: 0; padding: 0; } ``` --- ## 9. TypeScript Type Errors **Symptom**: TypeScript complains about missing types or incompatible types. **Solutions**: ```bash # 1. Update packages npm install @thesysai/genui-sdk@latest @crayonai/react-ui@latest # 2. Check tsconfig.json { "compilerOptions": { "moduleResolution": "bundler", // or "node16" "skipLibCheck": true, // Skip type checking for node_modules "types": ["vite/client", "node"] } } # 3. If still errors, regenerate types rm -rf node_modules package-lock.json npm install ``` --- ## 10. CORS Errors **Symptom**: `Access-Control-Allow-Origin` errors when calling API. **Solutions**: ```typescript // Next.js API Route export async function POST(req: NextRequest) { const response = new NextResponse(stream, { headers: { "Access-Control-Allow-Origin": "*", // Or specific domain "Access-Control-Allow-Methods": "POST, OPTIONS", "Access-Control-Allow-Headers": "Content-Type", }, }); return response; } // Express import cors from "cors"; app.use(cors({ origin: "http://localhost:5173", // Your frontend URL methods: ["POST", "OPTIONS"], })); // Cloudflare Workers (Hono) import { cors } from "hono/cors"; app.use("/*", cors({ origin: "*", allowMethods: ["POST", "OPTIONS"], })); ``` --- ## 11. Rate Limiting Issues **Symptom**: API calls fail with 429 errors, no retry mechanism. **Solution**: ```typescript async function callApiWithRetry( apiCall: () => Promise, maxRetries: number = 3 ) { for (let i = 0; i < maxRetries; i++) { try { return await apiCall(); } catch (error: any) { if (error.status === 429 && i < maxRetries - 1) { const waitTime = Math.pow(2, i) * 1000; // Exponential backoff console.log(`Rate limited. Waiting ${waitTime}ms...`); await new Promise((resolve) => setTimeout(resolve, waitTime)); continue; } throw error; } } } // Usage const response = await callApiWithRetry(() => client.chat.completions.create({...}) ); ``` --- ## 12. Authentication Token Errors **Symptom**: `401 Unauthorized` even with API key set. **Solutions**: ```bash # 1. Verify environment variable is set echo $THESYS_API_KEY # Should show your key # 2. Check .env file location and format # .env (in project root) THESYS_API_KEY=your_api_key_here # 3. For Vite, use VITE_ prefix for client-side VITE_THESYS_API_KEY=your_key # Client-side THESYS_API_KEY=your_key # Server-side # 4. For Cloudflare Workers, use secrets npx wrangler secret put THESYS_API_KEY # 5. Verify in code if (!process.env.THESYS_API_KEY) { throw new Error("THESYS_API_KEY is not set"); } ``` --- ## 13. Invalid Model ID Error **Symptom**: API returns 400 error: "Model not found" or "Invalid model ID". **Causes**: - Using outdated model version identifier - Typo in model name - Using deprecated model - Wrong prefix (`c1/` vs `c1-exp/`) **Solutions**: ```typescript // ❌ Wrong - old version model: "c1/anthropic/claude-sonnet-4/v-20250617" // ✅ Correct - current stable version (as of Oct 2025) model: "c1/anthropic/claude-sonnet-4/v-20250930" // ❌ Wrong - non-existent models model: "c1/openai/gpt-5-mini" // Doesn't exist model: "c1/openai/gpt-4o" // Not available via C1 // ✅ Correct - actual models model: "c1/openai/gpt-5/v-20250930" // GPT 5 stable model: "c1-exp/openai/gpt-4.1/v-20250617" // GPT 4.1 experimental // ❌ Wrong - deprecated model: "c1/anthropic/claude-sonnet-3-5" model: "c1/anthropic/claude-3.7-sonnet" // ✅ Correct - current stable model: "c1/anthropic/claude-sonnet-4/v-20250930" ``` **Current Stable Models** (October 2025): | Provider | Model ID | Status | |----------|----------|--------| | Anthropic | `c1/anthropic/claude-sonnet-4/v-20250930` | ✅ Stable | | OpenAI | `c1/openai/gpt-5/v-20250930` | ✅ Stable | | OpenAI | `c1-exp/openai/gpt-4.1/v-20250617` | ⚠️ Experimental | | Anthropic | `c1-exp/anthropic/claude-3.5-haiku/v-20250709` | ⚠️ Experimental | **How to Find Latest Models**: 1. Visit [TheSys Playground](https://console.thesys.dev/playground) 2. Check the model dropdown for current versions 3. Look for `v-YYYYMMDD` format in the model ID 4. Prefer stable (`c1/`) over experimental (`c1-exp/`) for production **Verification**: ```bash # Test if model ID works curl -X POST https://api.thesys.dev/v1/embed/chat/completions \ -H "Authorization: Bearer $THESYS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "c1/anthropic/claude-sonnet-4/v-20250930", "messages": [{"role": "user", "content": "test"}] }' ``` --- ## Debugging Checklist When encountering issues: - [ ] Check package versions match compatibility matrix - [ ] Verify API key is set and correct - [ ] Inspect network tab for actual API responses - [ ] Check console for errors and warnings - [ ] Verify streaming is enabled (`stream: true`) - [ ] Confirm ThemeProvider is wrapping components - [ ] Check message array format (system first) - [ ] Validate Zod schemas have descriptions - [ ] Test with minimal example first - [ ] Check official TheSys docs for updates --- ## Getting Help 1. **Official Docs**: https://docs.thesys.dev 2. **Playground**: https://console.thesys.dev/playground 3. **GitHub Issues**: Search for similar errors 4. **Context7**: Use `/websites/thesys_dev` for latest docs --- **Last Updated**: 2025-10-26