diff --git a/components/TempoMapEditor.tsx b/components/TempoMapEditor.tsx
index 3f1bb54..447e938 100644
--- a/components/TempoMapEditor.tsx
+++ b/components/TempoMapEditor.tsx
@@ -34,7 +34,11 @@ export default function TempoMapEditor({
ctpDoc,
readOnly = false,
}: TempoMapEditorProps) {
- const { metadata, count_in, sections } = ctpDoc;
+ const {
+ metadata,
+ count_in = { enabled: false, bars: 2, use_first_section_tempo: true },
+ sections,
+ } = ctpDoc;
return (
@@ -117,7 +121,7 @@ export default function TempoMapEditor({
Interactive editor coming soon — contribute via the{" "}
community registry
diff --git a/lib/analysis/providers/ollama.ts b/lib/analysis/providers/ollama.ts
index d350485..364cec2 100644
--- a/lib/analysis/providers/ollama.ts
+++ b/lib/analysis/providers/ollama.ts
@@ -2,7 +2,7 @@ import 'server-only';
import type { CTPDocument } from "@/lib/ctp/schema";
import type { AnalysisInput, AnalysisProvider } from "@/lib/analysis/providers";
-import { SYSTEM_PROMPT } from "./anthropic";
+import { SYSTEM_PROMPT, CTP_SCHEMA } from "./anthropic";
function getBaseUrl(): string {
return process.env.OLLAMA_BASE_URL ?? "http://localhost:11434";
@@ -44,6 +44,13 @@ async function callOllama(model: string, userMessage: string): Promise {
"\n\nRespond with valid JSON only. Do not add any explanation or markdown. Your entire response must be a single valid JSON object matching the schema.",
},
],
+ response_format: {
+ type: "json_schema",
+ json_schema: {
+ name: "CTPDocument",
+ schema: CTP_SCHEMA,
+ },
+ },
stream: false,
}),
signal: AbortSignal.timeout(120000), // 2-minute timeout for slow local models