Spaces:
Configuration error
Configuration error
designfailure
commited on
Commit
•
e14dd3f
1
Parent(s):
7779bba
Upload 17 files
Browse files- .env +4 -0
- Magenic-one_Insur.Cap_Projects.code-workspace +8 -0
- README.md +114 -14
- agent.py +28 -0
- gradio_app.py +24 -0
- helper.cpython-311.pyc +0 -0
- helper.py +47 -0
- insurance_utils.py +53 -0
- main.py +60 -0
- orchestrator.py +22 -0
- requirements.txt +9 -0
- research_agent.py +29 -0
- run_app.py +20 -0
- sales_agent.py +31 -0
- test_run.py +24 -0
- tools.py +67 -0
- underwriting_agent.py +30 -0
.env
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
OPENAI_API_KEY=your_openai_api_key
|
2 |
+
TOGETHER_API_KEY=your_together_api_key
|
3 |
+
STRIPE_API_KEY=your_stripe_api_key
|
4 |
+
NOTION_API_KEY=your_notion_api_key
|
Magenic-one_Insur.Cap_Projects.code-workspace
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"folders": [
|
3 |
+
{
|
4 |
+
"path": "."
|
5 |
+
}
|
6 |
+
],
|
7 |
+
"settings": {}
|
8 |
+
}
|
README.md
CHANGED
@@ -1,14 +1,114 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# AGENTIC InsurTech Aplikacija
|
2 |
+
|
3 |
+
## Opis
|
4 |
+
AGENTIC InsurTech je napredna zavarovalniška aplikacija, ki uporablja večagentni sistem MagenticOne za avtomatizacijo zavarovalniških procesov. Aplikacija omogoča oceno tveganja na podlagi slik, izračun premij in avtomatsko obdelavo zahtevkov.
|
5 |
+
|
6 |
+
## Uporabljene tehnologije
|
7 |
+
|
8 |
+
### Glavni agentni sistem
|
9 |
+
- **MagenticOne**: Microsoftov večagentni sistem za reševanje kompleksnih nalog
|
10 |
+
- Dokumentacija: [MagenticOne](https://www.microsoft.com/en-us/research/articles/magentic-one-a-generalist-multi-agent-system-for-solving-complex-tasks/)
|
11 |
+
- GitHub: [autogen-magentic-one](https://github.com/microsoft/autogen/tree/main/python/packages/autogen-magentic-one)
|
12 |
+
|
13 |
+
### Ključne knjižnice
|
14 |
+
- `autogen-core`: Jedro agentnega sistema
|
15 |
+
- `autogen-magentic-one`: Implementacija MagenticOne agentov
|
16 |
+
- `autogen-ext`: Razširitve za AutoGen
|
17 |
+
- `gradio`: Uporabniški vmesnik
|
18 |
+
- `streamlit`: Alternativni uporabniški vmesnik
|
19 |
+
- `playwright`: Spletno brskanje in zajem podatkov
|
20 |
+
|
21 |
+
### API integracije
|
22 |
+
- Together.ai API: LLM model za procesiranje naravnega jezika
|
23 |
+
- Stripe API: Procesiranje plačil
|
24 |
+
- Weather API: Vremenska napoved za parametrično zavarovanje
|
25 |
+
|
26 |
+
## Struktura projekta
|
27 |
+
Magnetic-one/
|
28 |
+
├── .env # Konfiguracijske spremenljivke
|
29 |
+
├── requirements.txt # Potrebni paketi
|
30 |
+
├── README.md # Dokumentacija
|
31 |
+
└── src/
|
32 |
+
├── main.py # Glavna aplikacija
|
33 |
+
├── agents/ # Implementacije agentov
|
34 |
+
├── utils/ # Pomožne funkcije
|
35 |
+
└── runtime/ # Orkestrator in runtime
|
36 |
+
|
37 |
+
## Agenti v sistemu
|
38 |
+
|
39 |
+
### 1. ResearchAgent
|
40 |
+
- Analiza slik
|
41 |
+
- Identifikacija objektov
|
42 |
+
- Ocena tveganja
|
43 |
+
|
44 |
+
### 2. UnderwritingAgent
|
45 |
+
- Izračun premije
|
46 |
+
- Določanje kritja
|
47 |
+
- Ocena tveganja
|
48 |
+
|
49 |
+
### 3. SalesAgent
|
50 |
+
- Priprava ponudb
|
51 |
+
- Komunikacija s strankami
|
52 |
+
- Generiranje dokumentov
|
53 |
+
|
54 |
+
## Namestitev in zagon
|
55 |
+
|
56 |
+
1. Kloniranje repozitorija:
|
57 |
+
```bash
|
58 |
+
git clone [repository-url]
|
59 |
+
cd Magnetic-one
|
60 |
+
```
|
61 |
+
|
62 |
+
2. Ustvarjanje virtualnega okolja:
|
63 |
+
```bash
|
64 |
+
python -m venv venv
|
65 |
+
source venv/bin/activate # Linux/Mac
|
66 |
+
# ali
|
67 |
+
venv\Scripts\activate # Windows
|
68 |
+
```
|
69 |
+
|
70 |
+
3. Namestitev potrebnih paketov:
|
71 |
+
```bash
|
72 |
+
pip install -r requirements.txt
|
73 |
+
playwright install --with-deps chromium
|
74 |
+
```
|
75 |
+
|
76 |
+
4. Nastavitev okolja:
|
77 |
+
- Ustvarite `.env` datoteko
|
78 |
+
- Dodajte potrebne API ključe:
|
79 |
+
- TOGETHER_API_KEY
|
80 |
+
- STRIPE_API_KEY
|
81 |
+
- NOTION_API_KEY
|
82 |
+
|
83 |
+
5. Zagon aplikacije:
|
84 |
+
```bash
|
85 |
+
python src/run_app.py --interface gradio
|
86 |
+
# ali
|
87 |
+
python src/run_app.py --interface streamlit
|
88 |
+
```
|
89 |
+
|
90 |
+
## Funkcionalnosti
|
91 |
+
|
92 |
+
### Osnovne funkcije
|
93 |
+
- Analiza slik za oceno tveganja
|
94 |
+
- Avtomatski izračun premij
|
95 |
+
- Generiranje zavarovalnih polic
|
96 |
+
- Procesiranje zahtevkov
|
97 |
+
|
98 |
+
### Napredne funkcije
|
99 |
+
- Parametrično vremensko zavarovanje
|
100 |
+
- Avtomatska izplačila
|
101 |
+
- Preventivni načrti
|
102 |
+
- Integracija z zunanjimi viri podatkov
|
103 |
+
|
104 |
+
## Razvijalci
|
105 |
+
- Dokumentacija MagenticOne: [Link](https://github.com/microsoft/autogen/tree/main/python/packages/autogen-magentic-one)
|
106 |
+
|
107 |
+
- AutoGen dokumentacija: [Link](https://microsoft.github.io/autogen/)
|
108 |
+
|
109 |
+
## Licenca
|
110 |
+
MIT License
|
111 |
+
|
112 |
+
|
113 |
+
|
114 |
+
|
agent.py
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from magentic import Agent, prompt
|
2 |
+
from tools import ImageCaptioning, WebSearch, GoogleSheets
|
3 |
+
|
4 |
+
class ResearchAgent(Agent):
|
5 |
+
def __init__(self, name: str, description: str):
|
6 |
+
super().__init__(name=name, description=description)
|
7 |
+
self.tools = {
|
8 |
+
"image_caption": ImageCaptioning(),
|
9 |
+
"web_search": WebSearch(),
|
10 |
+
"sheets": GoogleSheets()
|
11 |
+
}
|
12 |
+
|
13 |
+
@prompt("Analiziraj sliko in identificiraj objekte ter dejavnike tveganja")
|
14 |
+
async def process_image(self, image):
|
15 |
+
"""Obdelava slike z uporabo magentic-one promptov"""
|
16 |
+
return await self.tools["image_caption"].analyze(image)
|
17 |
+
|
18 |
+
class UnderwritingAgent(Agent):
|
19 |
+
def __init__(self, name: str, description: str):
|
20 |
+
super().__init__(name=name, description=description)
|
21 |
+
|
22 |
+
@prompt("Oceni tveganje in določi ustrezno kritje")
|
23 |
+
async def assess_risk(self, data):
|
24 |
+
"""Ocena tveganja z uporabo magentic-one promptov"""
|
25 |
+
# Implementacija ocene tveganja
|
26 |
+
pass
|
27 |
+
|
28 |
+
# Podobno implementirajte še SalesAgent in DelegationAgent
|
gradio_app.py
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from main import initialize_agents
|
3 |
+
|
4 |
+
def create_interface():
|
5 |
+
agents = initialize_agents()
|
6 |
+
|
7 |
+
with gr.Blocks() as app:
|
8 |
+
gr.Markdown("# InsurTech MGA Aplikacija")
|
9 |
+
|
10 |
+
with gr.Tab("Ocena tveganja"):
|
11 |
+
image_input = gr.Image()
|
12 |
+
text_output = gr.Textbox()
|
13 |
+
|
14 |
+
image_input.change(
|
15 |
+
fn=agents["research"].process_image,
|
16 |
+
inputs=image_input,
|
17 |
+
outputs=text_output
|
18 |
+
)
|
19 |
+
|
20 |
+
return app
|
21 |
+
|
22 |
+
if __name__ == "__main__":
|
23 |
+
interface = create_interface()
|
24 |
+
interface.launch()
|
helper.cpython-311.pyc
ADDED
Binary file (2.85 kB). View file
|
|
helper.py
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
from dotenv import load_dotenv
|
3 |
+
from typing import Dict, Any
|
4 |
+
import logging
|
5 |
+
|
6 |
+
def setup_logging(logs_dir: str) -> None:
|
7 |
+
"""Nastavitev beleženja dogodkov"""
|
8 |
+
if not os.path.exists(logs_dir):
|
9 |
+
os.makedirs(logs_dir)
|
10 |
+
|
11 |
+
logging.basicConfig(
|
12 |
+
level=logging.INFO,
|
13 |
+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
14 |
+
handlers=[
|
15 |
+
logging.FileHandler(os.path.join(logs_dir, 'app.log')),
|
16 |
+
logging.StreamHandler()
|
17 |
+
]
|
18 |
+
)
|
19 |
+
|
20 |
+
def load_environment() -> None:
|
21 |
+
"""Nalaganje okoljskih spremenljivk"""
|
22 |
+
load_dotenv()
|
23 |
+
required_vars = [
|
24 |
+
'OPENAI_API_KEY',
|
25 |
+
'TOGETHER_API_KEY',
|
26 |
+
'STRIPE_API_KEY'
|
27 |
+
]
|
28 |
+
|
29 |
+
missing = [var for var in required_vars if not os.getenv(var)]
|
30 |
+
if missing:
|
31 |
+
raise EnvironmentError(f"Manjkajoče okoljske spremenljivke: {', '.join(missing)}")
|
32 |
+
|
33 |
+
def process_image_data(image_path: str) -> Dict[str, Any]:
|
34 |
+
"""Obdelava vhodne slike"""
|
35 |
+
from PIL import Image
|
36 |
+
|
37 |
+
try:
|
38 |
+
with Image.open(image_path) as img:
|
39 |
+
return {
|
40 |
+
"path": image_path,
|
41 |
+
"size": img.size,
|
42 |
+
"format": img.format,
|
43 |
+
"mode": img.mode
|
44 |
+
}
|
45 |
+
except Exception as e:
|
46 |
+
logging.error(f"Napaka pri obdelavi slike: {str(e)}")
|
47 |
+
return {}
|
insurance_utils.py
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from typing import Dict, Any
|
2 |
+
from datetime import datetime, timedelta
|
3 |
+
import json
|
4 |
+
|
5 |
+
class PolicyGenerator:
|
6 |
+
def __init__(self):
|
7 |
+
self.policy_counter = 0
|
8 |
+
|
9 |
+
def generate_policy(self, offer_data: Dict[str, Any]) -> Dict[str, Any]:
|
10 |
+
"""Generiranje zavarovalne police"""
|
11 |
+
self.policy_counter += 1
|
12 |
+
|
13 |
+
start_date = datetime.now()
|
14 |
+
end_date = start_date + timedelta(days=365)
|
15 |
+
|
16 |
+
return {
|
17 |
+
"policy_number": f"POL-{datetime.now().year}-{self.policy_counter:04d}",
|
18 |
+
"start_date": start_date.isoformat(),
|
19 |
+
"end_date": end_date.isoformat(),
|
20 |
+
"premium": offer_data["premium"],
|
21 |
+
"coverage": offer_data["coverage"],
|
22 |
+
"terms": offer_data["terms"]
|
23 |
+
}
|
24 |
+
|
25 |
+
def save_policy(self, policy: Dict[str, Any], filepath: str) -> None:
|
26 |
+
"""Shranjevanje police v JSON formatu"""
|
27 |
+
with open(filepath, 'w', encoding='utf-8') as f:
|
28 |
+
json.dump(policy, f, indent=2, ensure_ascii=False)
|
29 |
+
|
30 |
+
class ClaimsHandler:
|
31 |
+
def __init__(self):
|
32 |
+
self.valid_claim_types = {"damage", "theft", "liability"}
|
33 |
+
|
34 |
+
def validate_claim(self, claim_data: Dict[str, Any]) -> bool:
|
35 |
+
"""Preverjanje veljavnosti zahtevka"""
|
36 |
+
return all([
|
37 |
+
claim_data.get("type") in self.valid_claim_types,
|
38 |
+
claim_data.get("policy_number"),
|
39 |
+
claim_data.get("date_of_incident"),
|
40 |
+
claim_data.get("description")
|
41 |
+
])
|
42 |
+
|
43 |
+
def process_claim(self, claim_data: Dict[str, Any]) -> Dict[str, Any]:
|
44 |
+
"""Obdelava zahtevka"""
|
45 |
+
if not self.validate_claim(claim_data):
|
46 |
+
return {"status": "rejected", "reason": "Neveljavni podatki zahtevka"}
|
47 |
+
|
48 |
+
# Tukaj bi dodali logiko za oceno zahtevka
|
49 |
+
return {
|
50 |
+
"status": "processing",
|
51 |
+
"claim_id": f"CLM-{datetime.now().strftime('%Y%m%d-%H%M%S')}",
|
52 |
+
"estimated_payout": 0.0
|
53 |
+
}
|
main.py
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
import logging
|
3 |
+
import os
|
4 |
+
from autogen_core import EVENT_LOGGER_NAME, AgentId, AgentProxy, SingleThreadedAgentRuntime
|
5 |
+
from autogen_magentic_one.agents.orchestrator import LedgerOrchestrator
|
6 |
+
from autogen_magentic_one.utils import LogHandler, create_completion_client_from_env
|
7 |
+
from agents.research_agent import ResearchAgent
|
8 |
+
from agents.underwriting_agent import UnderwritingAgent
|
9 |
+
from agents.sales_agent import SalesAgent
|
10 |
+
from runtime.orchestrator import InsuranceOrchestrator
|
11 |
+
|
12 |
+
async def main(logs_dir: str) -> None:
|
13 |
+
# Ustvarimo runtime
|
14 |
+
runtime = SingleThreadedAgentRuntime()
|
15 |
+
|
16 |
+
# Ustvarimo client za LLM
|
17 |
+
client = create_completion_client_from_env(model="gpt-4")
|
18 |
+
|
19 |
+
# Registriramo agente
|
20 |
+
await ResearchAgent.register(runtime, "ResearchAgent",
|
21 |
+
lambda: ResearchAgent(model_client=client))
|
22 |
+
research = AgentProxy(AgentId("ResearchAgent", "default"), runtime)
|
23 |
+
|
24 |
+
await UnderwritingAgent.register(runtime, "UnderwritingAgent",
|
25 |
+
lambda: UnderwritingAgent(model_client=client))
|
26 |
+
underwriting = AgentProxy(AgentId("UnderwritingAgent", "default"), runtime)
|
27 |
+
|
28 |
+
await SalesAgent.register(runtime, "SalesAgent",
|
29 |
+
lambda: SalesAgent(model_client=client))
|
30 |
+
sales = AgentProxy(AgentId("SalesAgent", "default"), runtime)
|
31 |
+
|
32 |
+
agent_list = [research, underwriting, sales]
|
33 |
+
|
34 |
+
# Registriramo orchestrator
|
35 |
+
await InsuranceOrchestrator.register(
|
36 |
+
runtime,
|
37 |
+
"Orchestrator",
|
38 |
+
lambda: InsuranceOrchestrator(
|
39 |
+
agents=agent_list,
|
40 |
+
model_client=client,
|
41 |
+
max_rounds=30,
|
42 |
+
max_time=25 * 60,
|
43 |
+
return_final_answer=True,
|
44 |
+
)
|
45 |
+
)
|
46 |
+
|
47 |
+
runtime.start()
|
48 |
+
await runtime.stop_when_idle()
|
49 |
+
|
50 |
+
if __name__ == "__main__":
|
51 |
+
logs_dir = "logs"
|
52 |
+
if not os.path.exists(logs_dir):
|
53 |
+
os.makedirs(logs_dir)
|
54 |
+
|
55 |
+
logger = logging.getLogger(EVENT_LOGGER_NAME)
|
56 |
+
logger.setLevel(logging.INFO)
|
57 |
+
log_handler = LogHandler(filename=os.path.join(logs_dir, "insurance_log.jsonl"))
|
58 |
+
logger.handlers = [log_handler]
|
59 |
+
|
60 |
+
asyncio.run(main(logs_dir))
|
orchestrator.py
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from autogen_magentic_one.agents.orchestrator import LedgerOrchestrator
|
2 |
+
from typing import List
|
3 |
+
from autogen_core import AgentProxy
|
4 |
+
|
5 |
+
class InsuranceOrchestrator(LedgerOrchestrator):
|
6 |
+
def __init__(self, agents: List[AgentProxy], **kwargs):
|
7 |
+
super().__init__(agents=agents, **kwargs)
|
8 |
+
|
9 |
+
async def orchestrate_workflow(self, initial_task: dict):
|
10 |
+
"""Koordinacija delovnega toka zavarovanja"""
|
11 |
+
steps = [
|
12 |
+
("research", "analyze_risk"),
|
13 |
+
("underwriting", "calculate_premium"),
|
14 |
+
("sales", "prepare_offer")
|
15 |
+
]
|
16 |
+
|
17 |
+
results = {}
|
18 |
+
for agent_name, action in steps:
|
19 |
+
agent = self.get_agent(agent_name)
|
20 |
+
results[action] = await agent.execute_action(action, initial_task)
|
21 |
+
|
22 |
+
return results
|
requirements.txt
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
autogen-core
|
2 |
+
autogen-magentic-one
|
3 |
+
autogen-ext
|
4 |
+
python-dotenv
|
5 |
+
playwright
|
6 |
+
pillow
|
7 |
+
requests
|
8 |
+
stripe
|
9 |
+
google-api-python-client
|
research_agent.py
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from autogen_magentic_one.agents.base import BaseAgent
|
2 |
+
from autogen_core.code_executor import CodeBlock
|
3 |
+
from typing import Dict, Any
|
4 |
+
|
5 |
+
class ResearchAgent(BaseAgent):
|
6 |
+
def __init__(self, model_client):
|
7 |
+
super().__init__(
|
8 |
+
name="ResearchAgent",
|
9 |
+
description="Agent za analizo slik in raziskovanje zavarovalnih primerov",
|
10 |
+
model_client=model_client
|
11 |
+
)
|
12 |
+
|
13 |
+
async def process_image(self, image_data: Dict[str, Any]) -> Dict[str, Any]:
|
14 |
+
"""Analiza slike in identifikacija objektov"""
|
15 |
+
prompt = f"""Analiziraj sliko in identificiraj:
|
16 |
+
1. Vse vidne objekte
|
17 |
+
2. Potencialne dejavnike tveganja
|
18 |
+
3. Stanje objektov
|
19 |
+
|
20 |
+
Slika: {image_data}
|
21 |
+
"""
|
22 |
+
|
23 |
+
response = await self.model_client.complete(prompt)
|
24 |
+
return self._parse_response(response)
|
25 |
+
|
26 |
+
def _parse_response(self, response: str) -> Dict[str, Any]:
|
27 |
+
"""Pretvorba odgovora v strukturirane podatke"""
|
28 |
+
# Implementacija parsanja
|
29 |
+
return {}
|
run_app.py
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
|
3 |
+
def main():
|
4 |
+
parser = argparse.ArgumentParser()
|
5 |
+
parser.add_argument('--interface', type=str, choices=['gradio', 'streamlit'],
|
6 |
+
default='gradio', help='Izbira uporabniškega vmesnika')
|
7 |
+
args = parser.parse_args()
|
8 |
+
|
9 |
+
if args.interface == 'gradio':
|
10 |
+
from gradio_app import create_interface
|
11 |
+
app = create_interface()
|
12 |
+
app.launch(share=True)
|
13 |
+
else:
|
14 |
+
import streamlit.cli as stcli
|
15 |
+
import sys
|
16 |
+
sys.argv = ["streamlit", "run", "streamlit_app.py"]
|
17 |
+
stcli.main()
|
18 |
+
|
19 |
+
if __name__ == "__main__":
|
20 |
+
main()
|
sales_agent.py
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from autogen_magentic_one.agents.base import BaseAgent
|
2 |
+
from typing import Dict, Any
|
3 |
+
|
4 |
+
class SalesAgent(BaseAgent):
|
5 |
+
def __init__(self, model_client):
|
6 |
+
super().__init__(
|
7 |
+
name="SalesAgent",
|
8 |
+
description="Agent za pripravo ponudbe in komunikacijo s strankami",
|
9 |
+
model_client=model_client
|
10 |
+
)
|
11 |
+
|
12 |
+
async def prepare_offer(self, insurance_data: Dict[str, Any]) -> Dict[str, Any]:
|
13 |
+
"""Priprava zavarovalne ponudbe"""
|
14 |
+
prompt = f"""Pripravi ponudbo za zavarovanje:
|
15 |
+
1. Premium: {insurance_data.get('final_premium')}
|
16 |
+
2. Kritje: {insurance_data.get('coverage_details')}
|
17 |
+
3. Posebni pogoji: {insurance_data.get('special_conditions', [])}
|
18 |
+
"""
|
19 |
+
|
20 |
+
response = await self.model_client.complete(prompt)
|
21 |
+
return self._format_offer(response, insurance_data)
|
22 |
+
|
23 |
+
def _format_offer(self, offer_text: str, data: Dict[str, Any]) -> Dict[str, Any]:
|
24 |
+
"""Oblikovanje končne ponudbe"""
|
25 |
+
return {
|
26 |
+
"offer_id": "OFF-" + str(hash(offer_text))[:8],
|
27 |
+
"premium": data.get('final_premium'),
|
28 |
+
"coverage": data.get('coverage_details'),
|
29 |
+
"terms": offer_text,
|
30 |
+
"valid_until": "30 days"
|
31 |
+
}
|
test_run.py
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
from src.utils.helper import setup_logging, load_environment
|
3 |
+
from src.utils.insurance_utils import PolicyGenerator
|
4 |
+
from PIL import Image
|
5 |
+
|
6 |
+
async def test_workflow():
|
7 |
+
# Nastavitev okolja
|
8 |
+
setup_logging("logs")
|
9 |
+
load_environment()
|
10 |
+
|
11 |
+
# Pripravite testne podatke
|
12 |
+
test_image_path = "pot/do/testne/slike.jpg"
|
13 |
+
test_data = {
|
14 |
+
"image_path": test_image_path,
|
15 |
+
"location": "Ljubljana, Slovenia",
|
16 |
+
"coverage_type": "property"
|
17 |
+
}
|
18 |
+
|
19 |
+
# Zagon glavne aplikacije
|
20 |
+
from src.main import main
|
21 |
+
await main("logs")
|
22 |
+
|
23 |
+
if __name__ == "__main__":
|
24 |
+
asyncio.run(test_workflow())
|
tools.py
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from typing import Dict, Any
|
2 |
+
import requests
|
3 |
+
import stripe
|
4 |
+
from PIL import Image
|
5 |
+
import google.auth
|
6 |
+
from google.oauth2 import service_account
|
7 |
+
from googleapiclient.discovery import build
|
8 |
+
|
9 |
+
class ImageCaptioning:
|
10 |
+
def __init__(self):
|
11 |
+
self.model = None # Initialize your image captioning model
|
12 |
+
|
13 |
+
async def analyze(self, image: Image) -> Dict[str, Any]:
|
14 |
+
"""Analiza slike in vračanje kontekstualnih informacij"""
|
15 |
+
results = {
|
16 |
+
"objects": [], # seznam zaznanih objektov
|
17 |
+
"count": {}, # število posameznih objektov
|
18 |
+
"risk_factors": [] # zaznani dejavniki tveganja
|
19 |
+
}
|
20 |
+
return results
|
21 |
+
|
22 |
+
class WebSearch:
|
23 |
+
def __init__(self):
|
24 |
+
self.session = requests.Session()
|
25 |
+
|
26 |
+
async def search(self, query: str) -> list:
|
27 |
+
"""Izvajanje spletnega iskanja in luščenja podatkov"""
|
28 |
+
results = []
|
29 |
+
# Implementacija spletnega iskanja
|
30 |
+
return results
|
31 |
+
|
32 |
+
class GoogleSheets:
|
33 |
+
def __init__(self):
|
34 |
+
self.SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
|
35 |
+
self.creds = None
|
36 |
+
|
37 |
+
async def get_pricing_data(self, coverage_type: str) -> Dict[str, float]:
|
38 |
+
"""Pridobivanje podatkov o cenah iz Google Sheets"""
|
39 |
+
pricing_data = {}
|
40 |
+
# Implementacija branja podatkov
|
41 |
+
return pricing_data
|
42 |
+
|
43 |
+
class StripePayment:
|
44 |
+
def __init__(self, api_key: str):
|
45 |
+
stripe.api_key = api_key
|
46 |
+
|
47 |
+
async def create_payment(self, amount: float, currency: str) -> Dict[str, Any]:
|
48 |
+
"""Ustvarjanje Stripe plačila"""
|
49 |
+
try:
|
50 |
+
payment_intent = stripe.PaymentIntent.create(
|
51 |
+
amount=int(amount * 100), # Stripe uporablja najmanjše denarne enote
|
52 |
+
currency=currency
|
53 |
+
)
|
54 |
+
return {"status": "success", "client_secret": payment_intent.client_secret}
|
55 |
+
except stripe.error.StripeError as e:
|
56 |
+
return {"status": "error", "message": str(e)}
|
57 |
+
|
58 |
+
class WeatherAPI:
|
59 |
+
def __init__(self):
|
60 |
+
self.api_key = None
|
61 |
+
self.base_url = "https://api.weatherapi.com/v1"
|
62 |
+
|
63 |
+
async def get_weather_forecast(self, location: str, days: int = 7) -> Dict[str, Any]:
|
64 |
+
"""Pridobivanje vremenske napovedi"""
|
65 |
+
weather_data = {}
|
66 |
+
# Implementacija vremenske napovedi
|
67 |
+
return weather_data
|
underwriting_agent.py
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from autogen_magentic_one.agents.base import BaseAgent
|
2 |
+
from typing import Dict, Any
|
3 |
+
|
4 |
+
class UnderwritingAgent(BaseAgent):
|
5 |
+
def __init__(self, model_client):
|
6 |
+
super().__init__(
|
7 |
+
name="UnderwritingAgent",
|
8 |
+
description="Agent za oceno tveganja in izračun premije",
|
9 |
+
model_client=model_client
|
10 |
+
)
|
11 |
+
|
12 |
+
async def calculate_premium(self, risk_data: Dict[str, Any]) -> Dict[str, Any]:
|
13 |
+
"""Izračun zavarovalne premije na podlagi ocene tveganja"""
|
14 |
+
prompt = f"""Oceni tveganje in izračunaj premijo za:
|
15 |
+
1. Identificirani objekti: {risk_data.get('objects', [])}
|
16 |
+
2. Dejavniki tveganja: {risk_data.get('risk_factors', [])}
|
17 |
+
3. Lokacija: {risk_data.get('location', 'Unknown')}
|
18 |
+
"""
|
19 |
+
|
20 |
+
response = await self.model_client.complete(prompt)
|
21 |
+
return self._calculate_final_premium(response)
|
22 |
+
|
23 |
+
def _calculate_final_premium(self, assessment: str) -> Dict[str, Any]:
|
24 |
+
"""Izračun končne premije na podlagi ocene"""
|
25 |
+
return {
|
26 |
+
"base_premium": 0.0,
|
27 |
+
"risk_multiplier": 1.0,
|
28 |
+
"final_premium": 0.0,
|
29 |
+
"coverage_details": {}
|
30 |
+
}
|