Krish Shah-Nathwani commited on
Commit
b56ba70
·
1 Parent(s): 015ca5b

moving API product to GitHub

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -0
  2. README.md +28 -1
  3. app.py +61 -0
  4. requirements.txt +2 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1 +1,28 @@
1
- # Chord-Bot-API
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ---
2
+
3
+ # title: Chord Bot API
4
+
5
+ # emoji: 📊
6
+
7
+ # colorFrom: green
8
+
9
+ # colorTo: yellow
10
+
11
+ # sdk: gradio
12
+
13
+ # sdk\_version: 5.45.0
14
+
15
+ # hf\_oauth: true
16
+
17
+ # app\_file: app.py
18
+
19
+ # pinned: false
20
+
21
+ # short\_description: Input notes, space calls API model and outputs a chord.
22
+
23
+ # ---
24
+
25
+ #
26
+
27
+ # Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
28
+
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from huggingface_hub import InferenceClient
3
+
4
+ # --- Rule-based chord dictionary ---
5
+ CHORDS = {
6
+ frozenset(["C", "E", "G"]): "C Major",
7
+ frozenset(["A", "C#", "E"]): "A Major",
8
+ frozenset(["A", "C", "E"]): "A Minor",
9
+ frozenset(["D", "F#", "A"]): "D Major",
10
+ frozenset(["E", "G#", "B"]): "E Major",
11
+ frozenset(["G", "B", "D"]): "G Major",
12
+ frozenset(["F", "A", "C"]): "F Major",
13
+ }
14
+
15
+ def identify_chord(notes):
16
+ """
17
+ Identify chord name from a list of notes using dictionary lookup.
18
+ """
19
+ key = frozenset([n.upper() for n in notes])
20
+ return CHORDS.get(key, "Unknown Chord")
21
+
22
+ # --- Hugging Face model client (API-based) ---
23
+ client = InferenceClient("google/flan-t5-small")
24
+
25
+ def predict_chord(notes: str):
26
+ """
27
+ Takes a comma-separated string of notes and predicts the chord.
28
+ First tries rule-based, then falls back to the LLM.
29
+ """
30
+ if not notes.strip():
31
+ return "Please enter 2 or more notes."
32
+
33
+ # Clean and split notes
34
+ note_list = [n.strip() for n in notes.split(",") if n.strip()]
35
+ if len(note_list) < 2:
36
+ return "Please enter at least 2 notes."
37
+
38
+ # Rule-based chord lookup
39
+ chord = identify_chord(note_list)
40
+ if chord != "Unknown Chord":
41
+ return chord
42
+
43
+ # Fall back to LLM
44
+ prompt = f"Identify the musical chord made of notes: {', '.join(note_list)}"
45
+ try:
46
+ response = client.text_generation(prompt, max_new_tokens=20)
47
+ return response.strip()
48
+ except Exception as e:
49
+ return f"Error calling Hugging Face API: {e}"
50
+
51
+ # --- Gradio Interface ---
52
+ demo = gr.Interface(
53
+ fn=predict_chord,
54
+ inputs=gr.Textbox(lines=1, placeholder="Enter notes, e.g., C,E,G"),
55
+ outputs="text",
56
+ title="Chord Identifier (API-based)",
57
+ description="Enter two or more musical notes (comma-separated) and get the chord name."
58
+ )
59
+
60
+ if __name__ == "__main__":
61
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ gradio
2
+ huggingface_hub