DIVYA-NSHU99 commited on
Commit
cc9bc0a
·
verified ·
1 Parent(s): e756d15

Upload 4 files

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -35
  2. app.py +111 -0
  3. orchestrator.py +187 -0
  4. requirements.txt +3 -0
.gitattributes CHANGED
@@ -1,35 +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
 
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
app.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import gradio as gr
3
+
4
+ from orchestrator import run_tara_analysis
5
+
6
+
7
+ # -----------------------------------
8
+ # Main Analysis Function
9
+ # -----------------------------------
10
+ def analyze_trademark(report_json):
11
+
12
+ try:
13
+
14
+ if isinstance(report_json, str):
15
+ report_json = json.loads(report_json)
16
+
17
+ result = run_tara_analysis(report_json)
18
+
19
+ return {
20
+ "status": "success",
21
+ "tara_analysis": result
22
+ }
23
+
24
+ except Exception as e:
25
+
26
+ return {
27
+ "status": "error",
28
+ "message": str(e)
29
+ }
30
+
31
+ # -----------------------------------
32
+ # Example Input
33
+ # -----------------------------------
34
+
35
+ example_json = {
36
+ "application_overview": {
37
+ "serial_number": "97654321",
38
+ "mark_text": "NOVA",
39
+ "applicant_name": "Nova Corp LLC",
40
+ "filing_date": "2024-03-15",
41
+ "filing_basis": "1(b)",
42
+ "classes": [9, 42],
43
+ "identification": "Computer software for..."
44
+ },
45
+ "overall_assessment": {
46
+ "risk_level": "LOW",
47
+ "confidence_score": 0.80
48
+ },
49
+ "classification_analysis": {
50
+ "claimed_class": 9,
51
+ "suggested_class": 42,
52
+ "status": "Valid",
53
+ "confidence": "High"
54
+ },
55
+ "conflict_analysis": {
56
+ "total_conflicts": 2,
57
+ "high_risk_conflicts": 1,
58
+ "sample_conflicts": [
59
+ {
60
+ "conflicting_mark": "NOVA TECH",
61
+ "serial": "88123456",
62
+ "risk": "HIGH",
63
+ "similarity_score": 0.87
64
+ }
65
+ ]
66
+ },
67
+ "distinctiveness_analysis": {
68
+ "descriptive_score": 0.42,
69
+ "generic_score": 0.18
70
+ },
71
+ "validation_issues": []
72
+ }
73
+
74
+
75
+ # -----------------------------------
76
+ # Gradio UI
77
+ # -----------------------------------
78
+
79
+ with gr.Blocks(title="TARA AI Trademark Analyzer") as app:
80
+
81
+ gr.Markdown("# TARA AI — Trademark Risk Analyzer")
82
+
83
+ gr.Markdown(
84
+ "Paste the structured trademark report JSON and run the analysis pipeline."
85
+ )
86
+
87
+ input_box = gr.Textbox(
88
+ label="Trademark Report JSON",
89
+ value=json.dumps(example_json, indent=2),
90
+ lines=20
91
+ )
92
+
93
+ run_button = gr.Button("Run TARA Analysis")
94
+
95
+ output_box = gr.JSON(
96
+ label="TARA AI Analysis Output"
97
+ )
98
+
99
+ run_button.click(
100
+ fn=analyze_trademark,
101
+ inputs=input_box,
102
+ outputs=output_box,
103
+ api_name="analyze_trademark"
104
+ )
105
+
106
+
107
+ # -----------------------------------
108
+ # Launch
109
+ # -----------------------------------
110
+
111
+ app.launch(server_name="0.0.0.0", server_port=7860, ssr_mode=False)
orchestrator.py ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+ import json
3
+ import time
4
+
5
+ from agents.risk_analyzer import run_risk_analyzer
6
+ from agents.refusal_predictor import run_refusal_predictor
7
+ from agents.strategy_planner import run_strategy_planner
8
+ from agents.fix_generator import run_fix_generator
9
+
10
+
11
+ MAX_RETRIES = 2
12
+
13
+
14
+ # ---------------------------------
15
+ # JSON Parsing Utilities
16
+ # ---------------------------------
17
+
18
+ def safe_json_parse(text):
19
+ """
20
+ Try strict JSON parse first.
21
+ If it fails, try extracting JSON block.
22
+ If still fails, return raw text.
23
+ """
24
+
25
+ try:
26
+ return json.loads(text)
27
+ except Exception:
28
+ pass
29
+
30
+ try:
31
+ match = re.search(r"\{.*\}", text, re.DOTALL)
32
+ if match:
33
+ return json.loads(match.group())
34
+ except Exception:
35
+ pass
36
+
37
+ return text
38
+ # ---------------------------------
39
+ # Safe Key Extractor
40
+ # ---------------------------------
41
+
42
+ def safe_get(data, key):
43
+ """
44
+ Safely extract a key from agent output.
45
+ If output is not dict or key missing,
46
+ return the raw data so pipeline continues.
47
+ """
48
+
49
+ if isinstance(data, dict):
50
+ return data.get(key, data)
51
+
52
+ return data
53
+
54
+
55
+
56
+ # ---------------------------------
57
+ # Agent Execution with Retry
58
+ # ---------------------------------
59
+
60
+ def run_agent_with_retry(agent_fn, payload, expected_key):
61
+
62
+ for attempt in range(MAX_RETRIES + 1):
63
+
64
+ try:
65
+ result = agent_fn(payload)
66
+
67
+ parsed = safe_json_parse(result)
68
+
69
+ if isinstance(parsed, dict) and expected_key in parsed:
70
+ return parsed
71
+ if attempt == MAX_RETRIES:
72
+ return parsed
73
+
74
+ except Exception as e:
75
+ print(f"Agent error: {e}")
76
+
77
+ if attempt < MAX_RETRIES:
78
+ time.sleep(1)
79
+
80
+ return result
81
+
82
+
83
+ # ---------------------------------
84
+ # Agent Pipeline
85
+ # ---------------------------------
86
+
87
+ def run_pipeline(report_json):
88
+
89
+ print("Starting TARA agent pipeline")
90
+
91
+ # --------------------
92
+ # Agent 1 — Risk Analyzer
93
+ # --------------------
94
+
95
+ risk_payload = {
96
+ "report_json": report_json
97
+ }
98
+
99
+ risk_output = run_agent_with_retry(
100
+ run_risk_analyzer,
101
+ risk_payload,
102
+ "identified_risks"
103
+ )
104
+
105
+ print("Agent 1 completed")
106
+
107
+
108
+ # --------------------
109
+ # Agent 2 — Refusal Predictor
110
+ # --------------------
111
+
112
+ refusal_payload = {
113
+ "report_json": report_json,
114
+ "identified_risks": safe_get(risk_output, "identified_risks")
115
+ }
116
+
117
+ refusal_output = run_agent_with_retry(
118
+ run_refusal_predictor,
119
+ refusal_payload,
120
+ "predicted_refusals"
121
+ )
122
+
123
+ print("Agent 2 completed")
124
+
125
+
126
+ # --------------------
127
+ # Agent 3 — Strategy Planner
128
+ # --------------------
129
+
130
+ strategy_payload = {
131
+ "report_json": report_json,
132
+ "identified_risks": safe_get(risk_output, "identified_risks"),
133
+ "predicted_refusals": safe_get(refusal_output, "predicted_refusals")
134
+ }
135
+
136
+ strategy_output = run_agent_with_retry(
137
+ run_strategy_planner,
138
+ strategy_payload,
139
+ "strategy_plan"
140
+ )
141
+
142
+ print("Agent 3 completed")
143
+
144
+
145
+ # --------------------
146
+ # Agent 4 — Fix Generator
147
+ # --------------------
148
+
149
+ fix_payload = {
150
+ "report_json": report_json,
151
+ "identified_risks": safe_get(risk_output, "identified_risks"),
152
+ "predicted_refusals": safe_get(refusal_output, "predicted_refusals"),
153
+ "strategy_plan": safe_get(strategy_output, "strategy_plan")
154
+ }
155
+
156
+ fix_output = run_agent_with_retry(
157
+ run_fix_generator,
158
+ fix_payload,
159
+ "application_improvements"
160
+ )
161
+
162
+ print("Agent 4 completed")
163
+
164
+
165
+ return {
166
+ "agent1_output": risk_output,
167
+ "agent2_output": refusal_output,
168
+ "agent3_output": strategy_output,
169
+ "agent4_output": fix_output
170
+ }
171
+
172
+
173
+ # ---------------------------------
174
+ # Public API Function
175
+ # ---------------------------------
176
+
177
+ def run_tara_analysis(report_json):
178
+
179
+ if not isinstance(report_json, dict):
180
+ raise ValueError("report_json must be a dictionary")
181
+
182
+ result = run_pipeline(report_json)
183
+
184
+ return {
185
+ "status": "success",
186
+ "tara_analysis": result
187
+ }
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ groq
3
+ python-dotenv