Skip to content

Commit cec9bd9

Browse files
committed
add pro-v2 model
1 parent c14c99f commit cec9bd9

7 files changed

Lines changed: 314 additions & 16 deletions

File tree

‎.omc/project-memory.json‎

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
{
2+
"version": "1.0.0",
3+
"lastScanned": 1775048068241,
4+
"projectRoot": "/home/seonghyeon/Desktop/coding/Projects_refactoring/MIPPIA_api/mippia-platform-api-project/api_docs_project/docs",
5+
"techStack": {
6+
"languages": [
7+
{
8+
"name": "Python",
9+
"version": null,
10+
"confidence": "high",
11+
"markers": [
12+
"requirements.txt"
13+
]
14+
},
15+
{
16+
"name": "C/C++",
17+
"version": null,
18+
"confidence": "high",
19+
"markers": [
20+
"Makefile"
21+
]
22+
}
23+
],
24+
"frameworks": [],
25+
"packageManager": "pip",
26+
"runtime": null
27+
},
28+
"build": {
29+
"buildCommand": "make build",
30+
"testCommand": "make test",
31+
"lintCommand": null,
32+
"devCommand": null,
33+
"scripts": {}
34+
},
35+
"conventions": {
36+
"namingStyle": null,
37+
"importStyle": null,
38+
"testPattern": null,
39+
"fileOrganization": null
40+
},
41+
"structure": {
42+
"isMonorepo": false,
43+
"workspaces": [],
44+
"mainDirectories": [],
45+
"gitBranches": null
46+
},
47+
"customNotes": [],
48+
"directoryMap": {
49+
"_build": {
50+
"path": "_build",
51+
"purpose": null,
52+
"fileCount": 0,
53+
"lastAccessed": 1775048068237,
54+
"keyFiles": []
55+
},
56+
"_static": {
57+
"path": "_static",
58+
"purpose": null,
59+
"fileCount": 10,
60+
"lastAccessed": 1775048068237,
61+
"keyFiles": [
62+
"CNAME",
63+
"android-chrome-192x192.png",
64+
"apple-touch-icon.png",
65+
"custom.css",
66+
"custom.js"
67+
]
68+
},
69+
"_templates": {
70+
"path": "_templates",
71+
"purpose": null,
72+
"fileCount": 1,
73+
"lastAccessed": 1775048068239,
74+
"keyFiles": [
75+
"base.html"
76+
]
77+
},
78+
"api-reference": {
79+
"path": "api-reference",
80+
"purpose": null,
81+
"fileCount": 6,
82+
"lastAccessed": 1775048068239,
83+
"keyFiles": [
84+
"ai-detection.md",
85+
"dataset-management.md",
86+
"lyric-plagiarism.md",
87+
"lyric-transcription.md",
88+
"plagiarism-detection.md"
89+
]
90+
},
91+
"docs-v1.0": {
92+
"path": "docs-v1.0",
93+
"purpose": null,
94+
"fileCount": 5,
95+
"lastAccessed": 1775048068239,
96+
"keyFiles": [
97+
"Makefile",
98+
"README.md",
99+
"conf.py",
100+
"index.md",
101+
"make.bat"
102+
]
103+
},
104+
"docs-v1.1": {
105+
"path": "docs-v1.1",
106+
"purpose": null,
107+
"fileCount": 4,
108+
"lastAccessed": 1775048068240,
109+
"keyFiles": [
110+
"Makefile",
111+
"conf.py",
112+
"index.md",
113+
"requirements.txt"
114+
]
115+
},
116+
"getting-started": {
117+
"path": "getting-started",
118+
"purpose": null,
119+
"fileCount": 3,
120+
"lastAccessed": 1775048068240,
121+
"keyFiles": [
122+
"authentication.md",
123+
"introduction.md",
124+
"quick-start.md"
125+
]
126+
},
127+
"guides": {
128+
"path": "guides",
129+
"purpose": null,
130+
"fileCount": 1,
131+
"lastAccessed": 1775048068240,
132+
"keyFiles": [
133+
"webhooks.md"
134+
]
135+
},
136+
"resources": {
137+
"path": "resources",
138+
"purpose": null,
139+
"fileCount": 3,
140+
"lastAccessed": 1775048068240,
141+
"keyFiles": [
142+
"pricing.md",
143+
"rate-limits.md",
144+
"support.md"
145+
]
146+
}
147+
},
148+
"hotPaths": [
149+
{
150+
"path": "conf.py",
151+
"accessCount": 3,
152+
"lastAccessed": 1775048223028,
153+
"type": "file"
154+
},
155+
{
156+
"path": "api-reference/ai-detection.md",
157+
"accessCount": 2,
158+
"lastAccessed": 1775048216183,
159+
"type": "file"
160+
},
161+
{
162+
"path": "docs-v1.1/api-reference/ai-detection.md",
163+
"accessCount": 1,
164+
"lastAccessed": 1775048156968,
165+
"type": "file"
166+
}
167+
],
168+
"userDirectives": []
169+
}

‎.omc/state/hud-state.json‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"timestamp": "2026-04-01T12:54:43.669Z",
3+
"backgroundTasks": [],
4+
"sessionStartTimestamp": "2026-04-01T12:54:40.100Z",
5+
"sessionId": "906c59ae-fe21-4606-8702-dae6f922eb6a"
6+
}

‎.omc/state/hud-stdin-cache.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"session_id":"906c59ae-fe21-4606-8702-dae6f922eb6a","transcript_path":"/home/seonghyeon/.claude/projects/-home-seonghyeon-Desktop-coding-Projects-refactoring-MIPPIA-api-mippia-platform-api-project-api-docs-project-docs/906c59ae-fe21-4606-8702-dae6f922eb6a.jsonl","cwd":"/home/seonghyeon/Desktop/coding/Projects_refactoring/MIPPIA_api/mippia-platform-api-project/api_docs_project/docs","model":{"id":"claude-opus-4-6[1m]","display_name":"Opus 4.6 (1M context)"},"workspace":{"current_dir":"/home/seonghyeon/Desktop/coding/Projects_refactoring/MIPPIA_api/mippia-platform-api-project/api_docs_project/docs","project_dir":"/home/seonghyeon/Desktop/coding/Projects_refactoring/MIPPIA_api/mippia-platform-api-project/api_docs_project/docs","added_dirs":[]},"version":"2.1.89","output_style":{"name":"default"},"cost":{"total_cost_usd":0.6494222499999999,"total_duration_ms":162791,"total_api_duration_ms":128854,"total_lines_added":128,"total_lines_removed":16},"context_window":{"total_input_tokens":404,"total_output_tokens":8012,"context_window_size":1000000,"current_usage":{"input_tokens":3,"output_tokens":175,"cache_creation_input_tokens":683,"cache_read_input_tokens":39287},"used_percentage":4,"remaining_percentage":96},"exceeds_200k_tokens":false,"rate_limits":{"five_hour":{"used_percentage":2,"resets_at":1775062800},"seven_day":{"used_percentage":68,"resets_at":1775192400}}}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"lastSentAt": "2026-04-01T12:57:09.920Z"
3+
}

‎.omc/state/last-tool-error.json‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"tool_name": "Bash",
3+
"tool_input_preview": "{\"command\":\"ls /home/seonghyeon/Desktop/coding/Projects_refactoring/MIPPIA_api/mippia-platform-api-project/.github/workflows/ 2>/dev/null\",\"description\":\"Check for GitHub Actions workflows\"}",
4+
"error": "Exit code 2",
5+
"timestamp": "2026-04-01T12:55:08.644Z",
6+
"retry_count": 1
7+
}

‎api-reference/ai-detection.md‎

Lines changed: 126 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ Detect AI-generated music.
1212

1313
| Name | Type | Required | Description |
1414
| :--- | :--- | :--- | :--- |
15-
| `model_name` | string | Yes | Model to use: `lite`, `standard`, `pro` |
15+
| `model_name` | string | Yes | Model to use: `lite`, `standard`, `pro`, `pro-v2` |
1616

1717
### Request Body
1818

19-
| Field | Type | Required | Description |
20-
|:-----------| :--- | :--- | :--- |
21-
| `musicId` | string | Unique music identifier | uploaded via `[POST] /api/v1/music` endpoint |
19+
| Field | Type | Required | Description |
20+
| :--- | :--- | :--- | :--- |
21+
| `file` | binary | Yes | Audio file to analyze (mp3, wav, flac, m4a, aac, ogg) |
2222

2323
---
2424

@@ -29,6 +29,7 @@ Detect AI-generated music.
2929
| `lite` | 30-40 seconds | Single model, fast detection |
3030
| `standard` | 30-40 seconds | Model ensemble, balanced accuracy |
3131
| `pro` | ~1 minute | Model ensemble with detailed classification |
32+
| `pro-v2` | ~15 seconds | AI tracking with role-based detection |
3233

3334
---
3435

@@ -38,10 +39,9 @@ Detect AI-generated music.
3839

3940
```bash
4041
curl https://platform.mippia.com/api/v1/ai-detection/standard \
41-
-X POST \
4242
-H "Authorization: Bearer YOUR_API_KEY" \
43-
-H "Content-Type: application/json" \
44-
-d '{"musicId": "YOUR_MUSIC_ID"}'
43+
-X POST \
44+
-F "file=@/path/to/audio.mp3"
4545
```
4646

4747
### Python
@@ -51,16 +51,14 @@ import requests
5151

5252
url = "https://platform.mippia.com/api/v1/ai-detection/standard"
5353
headers = {
54-
"Authorization": "Bearer YOUR_API_KEY",
55-
"Content-Type": "application/json"
54+
"Authorization": "Bearer YOUR_API_KEY"
5655
}
57-
data = {
58-
"musicId": "YOUR_MUSIC_ID"
56+
files = {
57+
"file": open("/path/to/audio.mp3", "rb")
5958
}
6059

61-
response = requests.post(url, headers=headers, json=data)
60+
response = requests.post(url, headers=headers, files=files)
6261
print(response.json())
63-
6462
```
6563

6664
## Response (Initial)
@@ -258,6 +256,117 @@ Pro model includes additional classifiers for detailed analysis:
258256
}
259257
```
260258

259+
## Callback Response (Completed - Pro-V2)
260+
261+
Pro-V2 model includes role-based AI detection with separate 2-label and 5-label classifiers:
262+
263+
```json
264+
{
265+
"task_id": "task_20251204052920_J8uNdq5z",
266+
"status": "success",
267+
"model_type": "pro-v2",
268+
"completed_at": "2025-12-04T05:30:20Z",
269+
"result": {
270+
"audio_filename.mp3": {
271+
"final_result": {
272+
"prediction": "fake",
273+
"confidence": 0.8234
274+
},
275+
"model_results": [
276+
{
277+
"segment_analysis": {
278+
"prediction": ["real", "fake", "real", "fake"],
279+
"confidence": [0.912, 0.834, 0.901, 0.823]
280+
},
281+
"overall_analysis": {
282+
"prediction": "fake",
283+
"confidence": 0.8775
284+
},
285+
"config": {
286+
"model_id": "2label_stage1",
287+
"analysis_focus": "Waveform & Melody Pattern",
288+
"task": "Real/Fake Binary Classification",
289+
"num_classes": 2,
290+
"labels": ["real", "fake"]
291+
}
292+
},
293+
{
294+
"overall_analysis": {
295+
"prediction": "fake",
296+
"confidence": 0.8654
297+
},
298+
"config": {
299+
"model_id": "2label_stage2",
300+
"analysis_focus": "Waveform & Melody Pattern",
301+
"task": "Real/Fake Binary Classification",
302+
"num_classes": 2,
303+
"labels": ["real", "fake"]
304+
}
305+
},
306+
{
307+
"segment_analysis": {
308+
"prediction": [["tracker", "engineer"], ["topliner"], ["real"], ["vocalist", "tracker"]],
309+
"confidence": [
310+
{"real": 0.05, "tracker": 0.62, "topliner": 0.12, "lyricist": 0.08, "vocalist": 0.08, "engineer": 0.65},
311+
{"real": 0.10, "tracker": 0.15, "topliner": 0.78, "lyricist": 0.05, "vocalist": 0.12, "engineer": 0.10},
312+
{"real": 0.92, "tracker": 0.03, "topliner": 0.02, "lyricist": 0.01, "vocalist": 0.02, "engineer": 0.03},
313+
{"real": 0.08, "tracker": 0.71, "topliner": 0.05, "lyricist": 0.03, "vocalist": 0.56, "engineer": 0.12}
314+
]
315+
},
316+
"overall_analysis": {
317+
"prediction": ["tracker", "topliner", "vocalist", "engineer"],
318+
"confidence": {
319+
"real": 0.06,
320+
"tracker": 0.62,
321+
"topliner": 0.48,
322+
"lyricist": 0.04,
323+
"vocalist": 0.45,
324+
"engineer": 0.58
325+
}
326+
},
327+
"config": {
328+
"model_id": "5label_stage1",
329+
"analysis_focus": "Role-based AI Detection",
330+
"task": "Multi-role AI Detection",
331+
"num_classes": 6,
332+
"labels": ["real", "tracker", "topliner", "lyricist", "vocalist", "engineer"]
333+
}
334+
},
335+
{
336+
"segment_analysis": {
337+
"prediction": [["tracker", "engineer"], ["topliner"], ["real"], ["vocalist", "tracker"]],
338+
"confidence": [
339+
{"real": 0.04, "tracker": 0.65, "topliner": 0.10, "lyricist": 0.07, "vocalist": 0.09, "engineer": 0.68},
340+
{"real": 0.09, "tracker": 0.14, "topliner": 0.80, "lyricist": 0.04, "vocalist": 0.11, "engineer": 0.09},
341+
{"real": 0.94, "tracker": 0.02, "topliner": 0.01, "lyricist": 0.01, "vocalist": 0.01, "engineer": 0.02},
342+
{"real": 0.07, "tracker": 0.73, "topliner": 0.04, "lyricist": 0.02, "vocalist": 0.59, "engineer": 0.13}
343+
]
344+
},
345+
"overall_analysis": {
346+
"prediction": ["tracker", "topliner", "vocalist", "engineer"],
347+
"confidence": {
348+
"real": 0.04,
349+
"tracker": 0.64,
350+
"topliner": 0.50,
351+
"lyricist": 0.03,
352+
"vocalist": 0.47,
353+
"engineer": 0.60
354+
}
355+
},
356+
"config": {
357+
"model_id": "5label_stage2",
358+
"analysis_focus": "Role-based AI Detection",
359+
"task": "Multi-role AI Detection",
360+
"num_classes": 6,
361+
"labels": ["real", "tracker", "topliner", "lyricist", "vocalist", "engineer"]
362+
}
363+
}
364+
]
365+
}
366+
}
367+
}
368+
```
369+
261370
## Result Fields
262371

263372
| Field | Type | Description |
@@ -310,6 +419,7 @@ The result is an object where:
310419
| :--- | :--- |
311420
| Waveform & Melody Pattern | Analyzes audio waveform characteristics and melodic patterns |
312421
| Mixing & Audio Effects | Analyzes mixing techniques and audio effect signatures |
422+
| Role-based AI Detection | Analyzes AI involvement by musical role (tracking, toplining, lyrics, vocals, engineering) |
313423

314424
### Analysis Result Fields
315425

@@ -329,11 +439,13 @@ The result is an object where:
329439
| Real/Fake Binary | `real`, `fake` |
330440
| 3-Class | `real`, `ai_cover`, `fake` |
331441
| Detailed Fake Source | `real`, `suno_v4`, `suno_v4_5`, `suno_v4_5_plus`, `suno_v5`, `other` |
442+
| Multi-role AI | `real`, `tracker`, `topliner`, `lyricist`, `vocalist`, `engineer` |
332443

333444
## Notes
334445

335446
- **Supported formats**: mp3, wav, flac, m4a, aac, ogg
336447
- **Final Result**: Weighted average of all Real/Fake binary classification models for a single consolidated prediction
337448
- **Segment Analysis**: Analyzes each segment of the audio independently to detect localized AI artifacts
338449
- **Overall Analysis**: Considers the entire song structure and aggregates segment results for final prediction
339-
- **Model Results**: Each element in the `model_results` array represents one model's analysis
450+
- **Model Results**: Each element in the `model_results` array represents one model's analysis
451+
- **Pro-V2 Role Detection**: The 5-label models detect AI involvement by musical role. For segment-level analysis, prediction is an array of arrays where each segment contains detected roles (or `["real"]` if no AI detected). Confidence provides per-role probabilities for each segment. At the overall level, prediction lists all detected roles, and confidence aggregates role probabilities across segments.

0 commit comments

Comments
 (0)