File size: 18,842 Bytes
cf7f643
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os
from pydantic import BaseModel
from typing import List
from datetime import datetime
import pytz

from src.clients.llm_client import LLMClient

class EvaluationQuestion(BaseModel):
    question: str
    result: int 
    citation: str
    reason: str
    suggestion: str

class EvaluationCategory(BaseModel):
    category_name: str  # カチE��リ吁E    questions: List[EvaluationQuestion]  # 質問リスチE
class EvaluationModel(BaseModel):
    categories: List[EvaluationCategory]  # カチE��リをリストとして保持

def framework(
    base64img,
    p,
    framework_p,
    openai_key=os.environ.get('OPENAI_API_KEY'),
    gemini_key=None,
    model="meta-llama/Llama-3.3-70B-Instruct",
):
    """
    input0 (text): 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
    input1 (text): ■自社: 親子でのスマ�E料��節紁E親子でのお得感 チE�Eタの余剰利用 通話とネット�Eコストパフォーマンス スマ�EチE��ュー支援 家族向け�E安�E機�E 豊富な端末ラインアチE�E ■競合他社: 22歳までのお得なプラン	大好評�Eサービス	親子でお得にスマ�Eを利用	22歳以下限定�Eお得なキャンペ�Eン	学生向け�Eお得さ 青春年齢向けのお得なプラン	低価格で高品質な通信サービス	格安SIMとスマ�Eの利便性	22歳以下限定�E割引キャンペ�Eン	スマ�EチE��ュー応援 家族割引との絁E��合わせでの最安値	料��プランの多様性	親子でのお得な割引サービス	スマ�EチE��ューのお得さ	特別割弁EチE�Eタ3GB提侁E割引サービスによるコスト削渁E新規契紁E��プラン変更による特典	機種代と基本料�Eダブル割弁E大容量データ エントリー制の特典シスチE��	24時間ぁE��でもオンラインで手続き可能	家族�E員が割引を受けられるサービス	家族間の無料通話サービス	プライムビデオ特典 22歳までの長期利用可能	製品ラインナップ�E允E��E期間限定�Eキャンペ�Eン	人気スマ�Eの割引販売	安�E教育サービス 話題�Eスマ�Eが安く手に入めE詳細なサポ�EトとFAQ	シンプルな料��プラン	家族�E員の料��割弁E子育てサポ�Eトサービス   業界トレンド:「◯◯◯◯◯」「◯◯◯◯◯」「◯◯◯◯◯」が吁E��共通する訴求コンチE��チE��ある、E60字程度)
    input2 (text): sometext
    input3 (text): default
    input4 (text): default
    input5 (text): gpt-4o
    output1 (json): 頁E��
    """
    print(datetime.now(pytz.timezone('Asia/Tokyo')).strftime("%Y-%m-%d %H:%M:%S"), __name__)
    selected_model = model if model else "meta-llama/Llama-3.3-70B-Instruct"

    # Handle API key based on model
    if selected_model and "gemini" in selected_model.lower():
        if gemini_key and gemini_key != "default":
            api_key = gemini_key
        else:
            api_key = os.environ.get('GEMINI_KEY')
        client = LLMClient(google_api_key=api_key)
    else:
        if openai_key and openai_key != "default":
            api_key = openai_key
        else:
            api_key = os.environ.get('OPENAI_KEY')
        client = LLMClient(openai_key=api_key)

    system_prompt = f"""与えられた情報と質問に対して、採点基準を参�Eして以下を日本語で回答します、Ecitation:当該箁E��の引用
suggestion:満点でなぁE��合�E満点になるよぁE��具体的な持E��、Ereason:高得点の場合�E優れた点を�E体的な叙述
出力�E忁E��、すべてのカチE��リと頁E��を含めてください、E
{framework_p}
"""

    result = client.call(
        prompt=p,
        schema=EvaluationModel,
        model=selected_model,
        system_prompt=system_prompt,
        images=[base64img],
        temperature=0,
    )

    return result.model_dump()