karubiniumu commited on
Commit
9537c24
1 Parent(s): 37664ae
Files changed (5) hide show
  1. .gitignore +0 -0
  2. app.css +7 -0
  3. app.py +30 -0
  4. pipe.py +57 -0
  5. requirements.txt +8 -0
.gitignore ADDED
File without changes
app.css ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ footer,
2
+ #huggingface-space-header {
3
+ display: none !important;
4
+ }
5
+ .title {
6
+ text-align: center;
7
+ }
app.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from pipe import pipe
3
+ import pytz
4
+ import datetime
5
+ import json
6
+
7
+ def fn(text):
8
+ now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
9
+ print('\ntext:',text,now)
10
+ result = pipe.run({
11
+ "prompt_builder":{"text":text}
12
+ })
13
+ parsed = result['parser']['parsed']
14
+ print(parsed)
15
+ return json.dumps(parsed,indent=2,ensure_ascii=False)
16
+
17
+ title = '日本語 明確さ判定'
18
+
19
+ with gr.Blocks(title=title,css_paths='./app.css') as app:
20
+ gr.HTML(f'<h1 class="title">{title}</h1>')
21
+ inputs=gr.TextArea(label='テキスト',lines=12)
22
+ submit = gr.Button("送信",variant="primary")
23
+ reply =gr.JSON(label='回答')
24
+ submit.click(lambda: gr.update(interactive=False),inputs=None, outputs=submit) \
25
+ .then(fn=fn, inputs=inputs, outputs=reply ) \
26
+ .then(fn=lambda: gr.update(interactive=True),inputs=None, outputs=submit)
27
+
28
+
29
+ if __name__ == "__main__":
30
+ app.launch()
pipe.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json, json_repair
2
+ from typing import List, Dict
3
+ from haystack import Pipeline, component
4
+ from haystack.components.builders import PromptBuilder
5
+ from haystack_integrations.components.generators.google_ai import GoogleAIGeminiGenerator
6
+
7
+ template = """
8
+ 次のテキストに基づいて、JSON 形式で 回答を生成して下さい。
9
+ テキストの「明確さ」を様々な点から評価し、100点満点で点数を採点してください。
10
+ 次にその点数とした理由の解説と、どの辺が曖昧だったかを説明してください。
11
+ テキストをより明確にする上で修正するべき箇所をピックアップし、その箇所が何行目の何文字目であるかと、修正前のテキストと修正後のテキストをまとめて提案して下さい。
12
+
13
+ 以上のことをマークダウンや説明なしで、JSON のみで回答して下さい。
14
+ 次のようなJSONフォーマット形式に必ず従ってください。
15
+
16
+ {
17
+ "score" : 採点した点数(数値) ,
18
+ "description": "その点数になった理由",
19
+ "suggestions":[
20
+ {
21
+ "position": [何行目(数値) , 何文字目(数値)],
22
+ "before": "修正前のテキスト",
23
+ "after": "修正後のテキスト"
24
+ }, ...
25
+ ]
26
+ }
27
+
28
+ テキスト: {{text}}
29
+ """
30
+
31
+ @component
32
+ class ResultParser:
33
+ @component.output_types(parsed=Dict)
34
+ def run(self, replies: List[str]):
35
+ reply = replies[0]
36
+ first_index = min(reply.find("{"), reply.find("["))
37
+ last_index = max(reply.rfind("}"), reply.rfind("]")) + 1
38
+ json_portion = reply[first_index:last_index]
39
+
40
+ try:
41
+ parsed = json.loads(json_portion)
42
+ except json.JSONDecodeError:
43
+ parsed = json_repair.loads(json_portion)
44
+ if isinstance(parsed, list):
45
+ parsed = parsed[0]
46
+ return {"parsed": parsed}
47
+
48
+ prompt_builder = PromptBuilder(template=template)
49
+ llm = GoogleAIGeminiGenerator(model="models/gemini-1.5-flash")
50
+ parser = ResultParser()
51
+
52
+ pipe = Pipeline()
53
+ pipe.add_component("prompt_builder",prompt_builder)
54
+ pipe.add_component("llm",llm)
55
+ pipe.add_component("parser",parser)
56
+ pipe.connect("prompt_builder", "llm")
57
+ pipe.connect("llm.replies", "parser.replies")
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ numpy
2
+ pandas
3
+ gradio
4
+ haystack-ai
5
+ google-ai-haystack
6
+ accelerate
7
+ pytz
8
+ json_repair