Skip to content

Commit 6d8b494

Browse files
committed
fix: type
1 parent 46b4432 commit 6d8b494

File tree

3 files changed

+37
-28
lines changed

3 files changed

+37
-28
lines changed

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,7 @@ xCrawlOpenAIApp
752752
/*
753753
res:
754754
{
755-
selectors: '.scroll-list:nth-child(1) .list-item:nth-of-type(1), .scroll-list:nth-child(1) .list-item:nth-of-type(3), .scroll-list:nth-child(2) .list-item:nth-of-type(3)',
755+
selectors: '.scroll-list:nth-child(2) .list-item:nth-child(3)',
756756
type: 'multiple'
757757
}
758758
*/
@@ -1713,11 +1713,11 @@ parseElements is a method of AI application instances, typically used for intell
17131713
parseElements API is a function.
17141714
17151715
```ts
1716-
function parseElements(
1716+
function parseElements<T extends Record<string, string>>(
17171717
HTML: string,
17181718
content: string | XCrawlOpenAIParseElementsContentOptions,
17191719
option?: XCrawlOpenAICommonAPIOtherOption
1720-
): Promise<XCrawlOpenAIParseElementsResult>
1720+
): Promise<XCrawlOpenAIParseElementsResult<T>>
17211721
```
17221722

17231723
**Parameter Type:**
@@ -2475,8 +2475,10 @@ export interface XCrawlOpenAIApp {
24752475
#### XCrawlOpenAIParseElementsResult
24762476
24772477
```ts
2478-
export interface XCrawlOpenAIParseElementsResult {
2479-
selectors: string
2478+
export interface XCrawlOpenAIParseElementsResult<
2479+
T extends Record<string, string>
2480+
> {
2481+
elements: T[]
24802482
type: 'single' | 'multiple' | 'none'
24812483
}
24822484
```
@@ -2490,7 +2492,7 @@ export interface XCrawlOpenAIParseElementsResult {
24902492
24912493
```ts
24922494
export interface XCrawlOpenAIGetElementSelectorsResult {
2493-
elements: string[]
2495+
selectors: string
24942496
type: 'single' | 'multiple' | 'none'
24952497
}
24962498
```

docs/cn.md

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ xCrawlOpenAIApp.getElementSelectors(HTMLContent, '获取所有女装').then((res
742742
res:
743743
{
744744
selectors: '.scroll-list:nth-child(1) .list-item:nth-of-type(1), .scroll-list:nth-child(1) .list-item:nth-of-type(3), .scroll-list:nth-child(2) .list-item:nth-of-type(3)',
745-
type: 'multiple'
745+
type: 'single'
746746
}
747747
*/
748748
})
@@ -1693,11 +1693,11 @@ parseElements 是 AI 应用实例的方法,通常用于智能按需分析元
16931693
parseElements API 是一个函数。
16941694
16951695
```ts
1696-
function parseElements(
1696+
function parseElements<T extends Record<string, string>>(
16971697
HTML: string,
16981698
content: string | XCrawlOpenAIParseElementsContentOptions,
16991699
option?: XCrawlOpenAICommonAPIOtherOption
1700-
): Promise<XCrawlOpenAIParseElementsResult>
1700+
): Promise<XCrawlOpenAIParseElementsResult<T>>
17011701
```
17021702

17031703
**参数类型:**
@@ -2430,11 +2430,11 @@ export interface CrawlFileSingleResult extends CrawlCommonResult {
24302430
24312431
```ts
24322432
export interface XCrawlOpenAIApp {
2433-
parseElements(
2433+
parseElements<T extends Record<string, string>>(
24342434
HTML: string,
24352435
content: string | XCrawlOpenAIParseElementsContentOptions,
24362436
option?: XCrawlOpenAICommonAPIOtherOption
2437-
): Promise<XCrawlOpenAIParseElementsResult>
2437+
): Promise<XCrawlOpenAIParseElementsResult<T>>
24382438

24392439
getElementSelectors(
24402440
HTML: string,
@@ -2446,15 +2446,18 @@ export interface XCrawlOpenAIApp {
24462446
content: string,
24472447
option?: XCrawlOpenAICommonAPIOtherOption
24482448
): Promise<string>
2449+
24492450
custom(): OpenAI
24502451
}
24512452
```
24522453
24532454
#### XCrawlOpenAIParseElementsResult
24542455
24552456
```ts
2456-
export interface XCrawlOpenAIParseElementsResult {
2457-
selectors: string
2457+
export interface XCrawlOpenAIParseElementsResult<
2458+
T extends Record<string, string>
2459+
> {
2460+
elements: T[]
24582461
type: 'single' | 'multiple' | 'none'
24592462
}
24602463
```
@@ -2468,7 +2471,7 @@ export interface XCrawlOpenAIParseElementsResult {
24682471
24692472
```ts
24702473
export interface XCrawlOpenAIGetElementSelectorsResult {
2471-
elements: string[]
2474+
selectors: string
24722475
type: 'single' | 'multiple' | 'none'
24732476
}
24742477
```

packages/ai/index.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
GET_ELEMENT_SELECTORS_CONTEXT,
66
HELP_CONTEXT
77
} from './context'
8-
import { isObject } from '../shared'
8+
import { isObject, log, logStart, logSuccess } from '../shared'
99

1010
type OpenAIChatModel =
1111
| 'gpt-4-0125-preview'
@@ -54,31 +54,34 @@ interface XCrawlOpenAIGetElementSelectorsContentOptions {
5454
pathMode: 'default' | 'strict'
5555
}
5656

57-
interface XCrawlOpenAIParseElementsResult {
57+
interface XCrawlOpenAIGetElementSelectorsResult {
5858
selectors: string
5959
type: 'single' | 'multiple' | 'none'
6060
}
6161

62-
interface XCrawlOpenAIGetElementSelectorsResult {
63-
elements: string[]
62+
interface XCrawlOpenAIParseElementsResult<T extends Record<string, string>> {
63+
elements: T[]
6464
type: 'single' | 'multiple' | 'none'
6565
}
6666

6767
interface XCrawlOpenAIApp {
68-
parseElements(
68+
parseElements<T extends Record<string, string>>(
6969
HTML: string,
7070
content: string | XCrawlOpenAIParseElementsContentOptions,
7171
option?: XCrawlOpenAICommonAPIOtherOption
72-
): Promise<XCrawlOpenAIParseElementsResult>
72+
): Promise<XCrawlOpenAIParseElementsResult<T>>
73+
7374
getElementSelectors(
7475
HTML: string,
7576
content: string | XCrawlOpenAIGetElementSelectorsContentOptions,
7677
option?: XCrawlOpenAICommonAPIOtherOption
7778
): Promise<XCrawlOpenAIGetElementSelectorsResult>
79+
7880
help(
7981
content: string,
8082
option?: XCrawlOpenAICommonAPIOtherOption
8183
): Promise<string>
84+
8285
custom(): OpenAI
8386
}
8487

@@ -100,31 +103,32 @@ export function createXCrawlOpenAI(
100103
responseFormatType
101104
} = option
102105

106+
log(logStart(`AI is answering your question, please wait a moment`))
103107
const completion = await openai.chat.completions.create({
104108
model,
105109
messages: [
106110
{ role: 'system', content: context },
107111
{ role: 'user', name: 'x-crawl', content: HTMLContent },
108112
{ role: 'user', name: 'coder', content: userContent }
109113
],
110-
response_format: { type: responseFormatType }
114+
response_format: { type: responseFormatType },
115+
temperature: 0.1
111116
})
117+
log(logSuccess(`AI has completed your question`))
112118

113119
const content = completion.choices[0].message.content
114120
const result =
115-
responseFormatType === 'json_object'
116-
? (JSON.parse(content ?? '{}') as any)
117-
: content
121+
responseFormatType === 'json_object' ? JSON.parse(content!) : content
118122

119123
return result
120124
}
121125

122126
const app: XCrawlOpenAIApp = {
123-
async parseElements(
127+
async parseElements<T extends Record<string, string>>(
124128
HTML: string,
125129
content: string | XCrawlOpenAIParseElementsContentOptions,
126130
option: XCrawlOpenAICommonAPIOtherOption = {}
127-
): Promise<XCrawlOpenAIParseElementsResult> {
131+
): Promise<XCrawlOpenAIParseElementsResult<T>> {
128132
const { model } = option
129133

130134
let coderContent: string = ''
@@ -137,7 +141,7 @@ export function createXCrawlOpenAI(
137141
coderContent = JSON.stringify(obj)
138142
}
139143

140-
const result = await runChat<XCrawlOpenAIParseElementsResult>({
144+
const result = await runChat<XCrawlOpenAIParseElementsResult<T>>({
141145
model,
142146
context: PARSE_ELEMENTS_CONTEXT,
143147
HTMLContent: HTML,
@@ -194,7 +198,7 @@ export function createXCrawlOpenAI(
194198
return result
195199
},
196200

197-
custom(): OpenAI {
201+
custom() {
198202
return openai
199203
}
200204
}

0 commit comments

Comments
 (0)