first model
This commit is contained in:
parent
f393130598
commit
804d11d3cc
64
analysis.ipynb
Normal file
64
analysis.ipynb
Normal file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"ExecuteTime": {
|
||||
"end_time": "2025-08-17T13:06:41.263897Z",
|
||||
"start_time": "2025-08-17T13:06:40.939099Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"data = pd.read_csv(\"./quotationsSampleWithResponse.csv\", on_bad_lines='skip',sep=\";\")\n"
|
||||
],
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"ExecuteTime": {
|
||||
"start_time": "2025-08-13T09:05:06.803852Z",
|
||||
"end_time": "2025-08-13T09:05:06.879965Z"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"outputs": [],
|
||||
"source": [],
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 2
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython2",
|
||||
"version": "2.7.6"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
84
client.py
Normal file
84
client.py
Normal file
@ -0,0 +1,84 @@
|
||||
from ollama import Client, ChatResponse
|
||||
client = Client(host='http://localhost:11434')
|
||||
|
||||
|
||||
|
||||
|
||||
def askGPT(systemprompt,userprompt):
|
||||
|
||||
messages = [{
|
||||
'role': 'system',
|
||||
'content': systemprompt
|
||||
},{
|
||||
'role': 'user',
|
||||
'content': userprompt
|
||||
}]
|
||||
|
||||
# 1) First call: let the model decide to call the tool
|
||||
resp: ChatResponse = client.chat(
|
||||
model='gpt-oss', # be explicit about the tag
|
||||
messages=messages,
|
||||
)
|
||||
|
||||
|
||||
|
||||
# Model chose not to call the tool; just print what it said
|
||||
print("############### content ###############")
|
||||
print(resp.message.content)
|
||||
|
||||
print("############### Message ###############")
|
||||
print(resp['message']) # or print(resp.message)
|
||||
return(resp['message'])
|
||||
|
||||
|
||||
|
||||
def howToSayHello() -> str:
|
||||
"""Return the customary greeting."""
|
||||
print("function called")
|
||||
return "Hallo Welt"
|
||||
def askGPTwithTools(systemprompt,userprompt):
|
||||
|
||||
messages = [{
|
||||
'role': 'system',
|
||||
'content': systemprompt
|
||||
},{
|
||||
'role': 'user',
|
||||
'content': userprompt
|
||||
}]
|
||||
|
||||
# 1) First call: let the model decide to call the tool
|
||||
resp: ChatResponse = client.chat(
|
||||
model='gpt-oss', # be explicit about the tag
|
||||
messages=messages,
|
||||
tools=[howToSayHello],
|
||||
)
|
||||
|
||||
tcalls = resp.message.tool_calls or []
|
||||
if tcalls:
|
||||
# 2) Execute the requested tool(s)
|
||||
tool_msgs = []
|
||||
for tc in tcalls:
|
||||
if tc.function.name == 'howToSayHello':
|
||||
result = howToSayHello()
|
||||
else:
|
||||
result = f"Unknown tool: {tc.function.name}"
|
||||
tool_msgs.append({
|
||||
"role": "tool",
|
||||
"content": result,
|
||||
# include id if present; Ollama doesn't always require it
|
||||
**({"tool_call_id": getattr(tc, "id", None)} if getattr(tc, "id", None) else {})
|
||||
})
|
||||
|
||||
# 3) Send tool outputs back, then ask the model to finish
|
||||
messages = messages + [resp.message] + tool_msgs
|
||||
final = client.chat(model='gpt-oss', messages=messages)
|
||||
print("############### content ###############")
|
||||
print(final.message.content)
|
||||
else:
|
||||
# Model chose not to call the tool; just print what it said
|
||||
print("############### content ###############")
|
||||
print(resp.message.content)
|
||||
|
||||
print("############### Message ###############")
|
||||
print(resp['message']) # or print(resp.message)
|
||||
return(resp['message'])
|
||||
21
curl.py
Normal file
21
curl.py
Normal file
@ -0,0 +1,21 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
url = "http://localhost:11434/api/chat"
|
||||
payload = {
|
||||
"model": "gpt-oss",
|
||||
"messages": [
|
||||
{"role": "user", "content": "why is the sky blue?"}
|
||||
]
|
||||
}
|
||||
|
||||
resp = requests.post(url, json=payload, timeout=120)
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
|
||||
# Ollama returns the assistant reply under data["message"]["content"]
|
||||
print(data["message"]["content"])
|
||||
81
data.py
Normal file
81
data.py
Normal file
@ -0,0 +1,81 @@
|
||||
import pandas as pd
|
||||
import json
|
||||
import os
|
||||
# generate short sample
|
||||
booking = pd.read_csv("./quotations.csv", on_bad_lines='skip',sep=";")
|
||||
#images = os.listdir("/Users/antonwirsing/Nextcloud/share_anton/ExtraSauber-quotations-training-data-2025-05-09")
|
||||
images = os.listdir("/var/huggingface/data")
|
||||
images_by_id = {}
|
||||
for img in images:
|
||||
id = img[0:6]
|
||||
images_by_id.setdefault(id, []).append(img)
|
||||
|
||||
|
||||
|
||||
# Filter to just “Fensterreinigung” and drop rows missing requirements_textual
|
||||
filtered = booking.loc[
|
||||
(booking['product_name'] == "Fensterreinigung")
|
||||
& booking['requirements_textual'].notna()
|
||||
& booking['price'].notna()
|
||||
& booking['quotation_info_request'].isna()
|
||||
]
|
||||
|
||||
df = filtered.sample(n=1000, random_state=43).reset_index(drop=True)
|
||||
#print(df.columns)
|
||||
|
||||
# 4) Create the `images` column by JSON-dumping each list (or empty list)
|
||||
df['images'] = (
|
||||
df['id']
|
||||
.astype(str)
|
||||
.apply(lambda i: json.dumps(images_by_id.get(i, [])))
|
||||
)
|
||||
df['n_Images'] = df['images'].apply(lambda s: len(json.loads(s)))
|
||||
print(df['n_Images'])
|
||||
df.to_csv("./windowQuotationsSample.csv", index=False,sep=";")
|
||||
|
||||
|
||||
|
||||
# Filter to just “Umzugsreinigung” and drop rows missing requirements_textual
|
||||
filtered = booking.loc[
|
||||
(booking['product_name'] == "Umzugsreinigung")
|
||||
& booking['requirements_textual'].notna()
|
||||
& booking['price'].notna()
|
||||
& booking['quotation_info_request'].isna()
|
||||
]
|
||||
|
||||
df = filtered.sample(n=1000, random_state=43).reset_index(drop=True)
|
||||
#print(df.columns)
|
||||
|
||||
# 4) Create the `images` column by JSON-dumping each list (or empty list)
|
||||
df['images'] = (
|
||||
df['id']
|
||||
.astype(str)
|
||||
.apply(lambda i: json.dumps(images_by_id.get(i, [])))
|
||||
)
|
||||
df['n_Images'] = df['images'].apply(lambda s: len(json.loads(s)))
|
||||
print(df['n_Images'])
|
||||
df.to_csv("./umzugQuotationsSample.csv", index=False,sep=";")
|
||||
|
||||
|
||||
|
||||
|
||||
# Filter to just “Intensivreinigung” and drop rows missing requirements_textual
|
||||
filtered = booking.loc[
|
||||
(booking['product_name'] == "Intensivreinigung")
|
||||
& booking['requirements_textual'].notna()
|
||||
& booking['price'].notna()
|
||||
& booking['quotation_info_request'].isna()
|
||||
]
|
||||
|
||||
df = filtered.sample(n=1000, random_state=43).reset_index(drop=True)
|
||||
#print(df.columns)
|
||||
|
||||
# 4) Create the `images` column by JSON-dumping each list (or empty list)
|
||||
df['images'] = (
|
||||
df['id']
|
||||
.astype(str)
|
||||
.apply(lambda i: json.dumps(images_by_id.get(i, [])))
|
||||
)
|
||||
df['n_Images'] = df['images'].apply(lambda s: len(json.loads(s)))
|
||||
print(df['n_Images'])
|
||||
df.to_csv("./intensivQuotationsSample.csv", index=False,sep=";")
|
||||
0
extractResponse.py
Normal file
0
extractResponse.py
Normal file
Loading…
Reference in New Issue
Block a user