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